nandi/jolt-nativepublic Fork 0
6a3304d
Commits
Clone
git clone https://git.rickub.com/nandi/jolt-native.git
git clone ssh://git@rickub.com/nandi/jolt-native.git

Host key fingerprint (ed25519): SHA256:iycHnxEyq0Q7uyVpB7JlznP0G7JrTPXLYRcAU5CSLhc — verify it before your first connect.

glimmer-cosmic: a libcosmic backend for glimmer (spike)

crates/jolt-cosmic builds libjoltcosmic.so: libvidya's retained-tree ABI
under a cosmic_ prefix, painted by libcosmic. iced will not be driven a
frame at a time, so the loop is inverted: cosmic_run blocks the main
thread, the reconciler runs on a jolt worker, and edits reach the window
only at cosmic_tree_commit, from a snapshot.

glimmer-backends/glimmer-cosmic is the jolt side, with glimmer-vidya's
counter unchanged apart from the require, and a self-quitting smoke run.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
nandi committed 2026-09-11T00:05:38-07:00 Browse files
6a3304d parent: 1d16366
modified Cargo.lock +3561 -180
@@ -18,6 +18,89 @@ version = "0.1.10"
1818 source = "registry+https://github.com/rust-lang/crates.io-index"
1919 checksum = "366ffbaa4442f4684d91e2cd7c5ea7c4ed8add41959a31447066e279e432b618"
2020
21+[[package]]
22+name = "accesskit"
23+version = "0.22.0"
24+source = "git+https://github.com/wash2/accesskit?tag=cosmic-0.14#f0599eed5f18111228266fe3f28991cc48b5964f"
25+dependencies = [
26+ "uuid",
27+]
28+
29+[[package]]
30+name = "accesskit_atspi_common"
31+version = "0.15.0"
32+source = "git+https://github.com/wash2/accesskit?tag=cosmic-0.14#f0599eed5f18111228266fe3f28991cc48b5964f"
33+dependencies = [
34+ "accesskit",
35+ "accesskit_consumer",
36+ "atspi-common",
37+ "serde",
38+ "zvariant",
39+]
40+
41+[[package]]
42+name = "accesskit_consumer"
43+version = "0.32.0"
44+source = "git+https://github.com/wash2/accesskit?tag=cosmic-0.14#f0599eed5f18111228266fe3f28991cc48b5964f"
45+dependencies = [
46+ "accesskit",
47+ "hashbrown 0.16.1",
48+]
49+
50+[[package]]
51+name = "accesskit_macos"
52+version = "0.23.0"
53+source = "git+https://github.com/wash2/accesskit?tag=cosmic-0.14#f0599eed5f18111228266fe3f28991cc48b5964f"
54+dependencies = [
55+ "accesskit",
56+ "accesskit_consumer",
57+ "hashbrown 0.16.1",
58+ "objc2 0.5.2",
59+ "objc2-app-kit 0.2.2",
60+ "objc2-foundation 0.2.2",
61+]
62+
63+[[package]]
64+name = "accesskit_unix"
65+version = "0.18.0"
66+source = "git+https://github.com/wash2/accesskit?tag=cosmic-0.14#f0599eed5f18111228266fe3f28991cc48b5964f"
67+dependencies = [
68+ "accesskit",
69+ "accesskit_atspi_common",
70+ "atspi",
71+ "futures-lite",
72+ "serde",
73+ "tokio",
74+ "tokio-stream",
75+ "zbus",
76+]
77+
78+[[package]]
79+name = "accesskit_windows"
80+version = "0.30.0"
81+source = "git+https://github.com/wash2/accesskit?tag=cosmic-0.14#f0599eed5f18111228266fe3f28991cc48b5964f"
82+dependencies = [
83+ "accesskit",
84+ "accesskit_consumer",
85+ "hashbrown 0.16.1",
86+ "static_assertions",
87+ "windows 0.61.3",
88+ "windows-core 0.61.2",
89+]
90+
91+[[package]]
92+name = "accesskit_winit"
93+version = "0.30.0"
94+source = "git+https://github.com/wash2/accesskit?tag=cosmic-0.14#f0599eed5f18111228266fe3f28991cc48b5964f"
95+dependencies = [
96+ "accesskit",
97+ "accesskit_macos",
98+ "accesskit_unix",
99+ "accesskit_windows",
100+ "raw-window-handle",
101+ "winit 0.31.0-beta.2",
102+]
103+
21104 [[package]]
22105 name = "addr2line"
23106 version = "0.25.1"
@@ -90,12 +173,24 @@ dependencies = [
90173 "memchr",
91174 ]
92175
176+[[package]]
177+name = "aliasable"
178+version = "0.1.3"
179+source = "registry+https://github.com/rust-lang/crates.io-index"
180+checksum = "250f629c0161ad8107cf89319e990051fae62832fd343083bea452d93e2205fd"
181+
93182 [[package]]
94183 name = "allocator-api2"
95184 version = "0.2.21"
96185 source = "registry+https://github.com/rust-lang/crates.io-index"
97186 checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923"
98187
188+[[package]]
189+name = "almost"
190+version = "0.2.0"
191+source = "registry+https://github.com/rust-lang/crates.io-index"
192+checksum = "3aa2999eb46af81abb65c2d30d446778d7e613b60bbf4e174a027e80f90a3c14"
193+
99194 [[package]]
100195 name = "alsa"
101196 version = "0.11.0"
@@ -242,6 +337,21 @@ version = "1.0.104"
242337 source = "registry+https://github.com/rust-lang/crates.io-index"
243338 checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470"
244339
340+[[package]]
341+name = "apply"
342+version = "0.3.0"
343+source = "registry+https://github.com/rust-lang/crates.io-index"
344+checksum = "f47b57fc4521e3cae26a4d45b5227f8fadee4c345be0fefd8d5d1711afb8aeb9"
345+
346+[[package]]
347+name = "approx"
348+version = "0.5.1"
349+source = "registry+https://github.com/rust-lang/crates.io-index"
350+checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6"
351+dependencies = [
352+ "num-traits",
353+]
354+
245355 [[package]]
246356 name = "arbitrary"
247357 version = "1.4.2"
@@ -307,6 +417,53 @@ version = "1.0.1"
307417 source = "registry+https://github.com/rust-lang/crates.io-index"
308418 checksum = "175571dd1d178ced59193a6fc02dde1b972eb0bc56c892cde9beeceac5bf0f6b"
309419
420+[[package]]
421+name = "ash"
422+version = "0.38.0+1.3.281"
423+source = "registry+https://github.com/rust-lang/crates.io-index"
424+checksum = "0bb44936d800fea8f016d7f2311c6a4f97aebd5dc86f09906139ec848cf3a46f"
425+dependencies = [
426+ "libloading",
427+]
428+
429+[[package]]
430+name = "ashpd"
431+version = "0.11.1"
432+source = "registry+https://github.com/rust-lang/crates.io-index"
433+checksum = "d2f3f79755c74fd155000314eb349864caa787c6592eace6c6882dad873d9c39"
434+dependencies = [
435+ "enumflags2",
436+ "futures-channel",
437+ "futures-util",
438+ "rand 0.9.5",
439+ "raw-window-handle",
440+ "serde",
441+ "serde_repr",
442+ "tokio",
443+ "url",
444+ "zbus",
445+]
446+
447+[[package]]
448+name = "ashpd"
449+version = "0.12.3"
450+source = "registry+https://github.com/rust-lang/crates.io-index"
451+checksum = "33a3c86f3fd70c0ffa500ed189abfa90b5a52398a45d5dc372fcc38ebeb7a645"
452+dependencies = [
453+ "enumflags2",
454+ "futures-channel",
455+ "futures-util",
456+ "rand 0.9.5",
457+ "serde",
458+ "serde_repr",
459+ "tokio",
460+ "url",
461+ "wayland-backend",
462+ "wayland-client",
463+ "wayland-protocols",
464+ "zbus",
465+]
466+
310467 [[package]]
311468 name = "asn1-rs"
312469 version = "0.7.2"
@@ -346,6 +503,30 @@ dependencies = [
346503 "syn 2.0.119",
347504 ]
348505
506+[[package]]
507+name = "async-broadcast"
508+version = "0.7.2"
509+source = "registry+https://github.com/rust-lang/crates.io-index"
510+checksum = "435a87a52755b8f27fcf321ac4f04b2802e337c8c4872923137471ec39c37532"
511+dependencies = [
512+ "event-listener",
513+ "event-listener-strategy",
514+ "futures-core",
515+ "pin-project-lite",
516+]
517+
518+[[package]]
519+name = "async-channel"
520+version = "2.5.0"
521+source = "registry+https://github.com/rust-lang/crates.io-index"
522+checksum = "924ed96dd52d1b75e9c1a3e6275715fd320f5f9439fb5a4a11fa51f4221158d2"
523+dependencies = [
524+ "concurrent-queue",
525+ "event-listener-strategy",
526+ "futures-core",
527+ "pin-project-lite",
528+]
529+
349530 [[package]]
350531 name = "async-compression"
351532 version = "0.4.45"
@@ -358,6 +539,102 @@ dependencies = [
358539 "tokio",
359540 ]
360541
542+[[package]]
543+name = "async-executor"
544+version = "1.14.0"
545+source = "registry+https://github.com/rust-lang/crates.io-index"
546+checksum = "c96bf972d85afc50bf5ab8fe2d54d1586b4e0b46c97c50a0c9e71e2f7bcd812a"
547+dependencies = [
548+ "async-task",
549+ "concurrent-queue",
550+ "fastrand",
551+ "futures-lite",
552+ "pin-project-lite",
553+ "slab",
554+]
555+
556+[[package]]
557+name = "async-io"
558+version = "2.6.0"
559+source = "registry+https://github.com/rust-lang/crates.io-index"
560+checksum = "456b8a8feb6f42d237746d4b3e9a178494627745c3c56c6ea55d92ba50d026fc"
561+dependencies = [
562+ "autocfg",
563+ "cfg-if",
564+ "concurrent-queue",
565+ "futures-io",
566+ "futures-lite",
567+ "parking",
568+ "polling",
569+ "rustix 1.1.4",
570+ "slab",
571+ "windows-sys 0.61.2",
572+]
573+
574+[[package]]
575+name = "async-lock"
576+version = "3.4.2"
577+source = "registry+https://github.com/rust-lang/crates.io-index"
578+checksum = "290f7f2596bd5b78a9fec8088ccd89180d7f9f55b94b0576823bbbdc72ee8311"
579+dependencies = [
580+ "event-listener",
581+ "event-listener-strategy",
582+ "pin-project-lite",
583+]
584+
585+[[package]]
586+name = "async-process"
587+version = "2.5.0"
588+source = "registry+https://github.com/rust-lang/crates.io-index"
589+checksum = "fc50921ec0055cdd8a16de48773bfeec5c972598674347252c0399676be7da75"
590+dependencies = [
591+ "async-channel",
592+ "async-io",
593+ "async-lock",
594+ "async-signal",
595+ "async-task",
596+ "blocking",
597+ "cfg-if",
598+ "event-listener",
599+ "futures-lite",
600+ "rustix 1.1.4",
601+]
602+
603+[[package]]
604+name = "async-recursion"
605+version = "1.1.1"
606+source = "registry+https://github.com/rust-lang/crates.io-index"
607+checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11"
608+dependencies = [
609+ "proc-macro2",
610+ "quote",
611+ "syn 2.0.119",
612+]
613+
614+[[package]]
615+name = "async-signal"
616+version = "0.2.14"
617+source = "registry+https://github.com/rust-lang/crates.io-index"
618+checksum = "52b5aaafa020cf5053a01f2a60e8ff5dccf550f0f77ec54a4e47285ac2bab485"
619+dependencies = [
620+ "async-io",
621+ "async-lock",
622+ "atomic-waker",
623+ "cfg-if",
624+ "futures-core",
625+ "futures-io",
626+ "rustix 1.1.4",
627+ "signal-hook-registry",
628+ "slab",
629+ "windows-sys 0.61.2",
630+]
631+
632+[[package]]
633+name = "async-task"
634+version = "4.7.1"
635+source = "registry+https://github.com/rust-lang/crates.io-index"
636+checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de"
637+
361638 [[package]]
362639 name = "async-trait"
363640 version = "0.1.91"
@@ -395,6 +672,53 @@ version = "1.1.2"
395672 source = "registry+https://github.com/rust-lang/crates.io-index"
396673 checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0"
397674
675+[[package]]
676+name = "atomicwrites"
677+version = "0.4.2"
678+source = "git+https://github.com/jackpot51/rust-atomicwrites#043ab4859d53ffd3d55334685303d8df39c9f768"
679+dependencies = [
680+ "rustix 0.38.44",
681+ "tempfile",
682+ "windows-sys 0.48.0",
683+]
684+
685+[[package]]
686+name = "atspi"
687+version = "0.29.0"
688+source = "registry+https://github.com/rust-lang/crates.io-index"
689+checksum = "c77886257be21c9cd89a4ae7e64860c6f0eefca799bb79127913052bd0eefb3d"
690+dependencies = [
691+ "atspi-common",
692+ "atspi-proxies",
693+]
694+
695+[[package]]
696+name = "atspi-common"
697+version = "0.13.0"
698+source = "registry+https://github.com/rust-lang/crates.io-index"
699+checksum = "20c5617155740c98003016429ad13fe43ce7a77b007479350a9f8bf95a29f63d"
700+dependencies = [
701+ "enumflags2",
702+ "serde",
703+ "static_assertions",
704+ "zbus",
705+ "zbus-lockstep",
706+ "zbus-lockstep-macros",
707+ "zbus_names",
708+ "zvariant",
709+]
710+
711+[[package]]
712+name = "atspi-proxies"
713+version = "0.13.0"
714+source = "registry+https://github.com/rust-lang/crates.io-index"
715+checksum = "2230e48787ed3eb4088996eab66a32ca20c0b67bbd4fd6cdfe79f04f1f04c9fc"
716+dependencies = [
717+ "atspi-common",
718+ "serde",
719+ "zbus",
720+]
721+
398722 [[package]]
399723 name = "attohttpc"
400724 version = "0.30.1"
@@ -445,6 +769,18 @@ dependencies = [
445769 "num-traits",
446770 ]
447771
772+[[package]]
773+name = "auto_enums"
774+version = "0.8.10"
775+source = "registry+https://github.com/rust-lang/crates.io-index"
776+checksum = "3091d68264354f211516b91dce6f71046e444fab1867716035f736667243affb"
777+dependencies = [
778+ "derive_utils",
779+ "proc-macro2",
780+ "quote",
781+ "syn 3.0.3",
782+]
783+
448784 [[package]]
449785 name = "autocfg"
450786 version = "1.5.1"
@@ -498,7 +834,7 @@ dependencies = [
498834 "miniz_oxide 0.8.9",
499835 "object",
500836 "rustc-demangle",
501- "windows-link",
837+ "windows-link 0.2.1",
502838 ]
503839
504840 [[package]]
@@ -519,6 +855,15 @@ version = "1.8.3"
519855 source = "registry+https://github.com/rust-lang/crates.io-index"
520856 checksum = "2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06"
521857
858+[[package]]
859+name = "basic-toml"
860+version = "0.1.10"
861+source = "registry+https://github.com/rust-lang/crates.io-index"
862+checksum = "ba62675e8242a4c4e806d12f11d136e626e6c8361d6b829310732241652a178a"
863+dependencies = [
864+ "serde",
865+]
866+
522867 [[package]]
523868 name = "bindgen"
524869 version = "0.70.1"
@@ -558,6 +903,21 @@ dependencies = [
558903 "syn 2.0.119",
559904 ]
560905
906+[[package]]
907+name = "bit-set"
908+version = "0.8.0"
909+source = "registry+https://github.com/rust-lang/crates.io-index"
910+checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3"
911+dependencies = [
912+ "bit-vec 0.8.0",
913+]
914+
915+[[package]]
916+name = "bit-vec"
917+version = "0.8.0"
918+source = "registry+https://github.com/rust-lang/crates.io-index"
919+checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7"
920+
561921 [[package]]
562922 name = "bit-vec"
563923 version = "0.9.1"
@@ -578,6 +938,9 @@ name = "bitflags"
578938 version = "2.13.1"
579939 source = "registry+https://github.com/rust-lang/crates.io-index"
580940 checksum = "b588b76d00fde79687d7646a9b5bdf3cc0f655e0bbd080335a95d7e96f3587da"
941+dependencies = [
942+ "serde_core",
943+]
581944
582945 [[package]]
583946 name = "blake3"
@@ -593,6 +956,12 @@ dependencies = [
593956 "cpufeatures 0.3.0",
594957 ]
595958
959+[[package]]
960+name = "block"
961+version = "0.1.6"
962+source = "registry+https://github.com/rust-lang/crates.io-index"
963+checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a"
964+
596965 [[package]]
597966 name = "block-buffer"
598967 version = "0.10.4"
@@ -630,32 +999,89 @@ dependencies = [
630999 ]
6311000
6321001 [[package]]
633-name = "bs58"
634-version = "0.5.1"
1002+name = "blocking"
1003+version = "1.7.0"
6351004 source = "registry+https://github.com/rust-lang/crates.io-index"
636-checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4"
1005+checksum = "a70e4329df6cb94385eed412ec92375c3cdd8a6e502493d1229b6414e4036dfa"
6371006 dependencies = [
638- "tinyvec",
1007+ "async-channel",
1008+ "async-task",
1009+ "futures-io",
1010+ "futures-lite",
1011+ "piper",
6391012 ]
6401013
6411014 [[package]]
642-name = "buf-list"
643-version = "1.1.2"
1015+name = "borsh"
1016+version = "1.8.1"
6441017 source = "registry+https://github.com/rust-lang/crates.io-index"
645-checksum = "a6b175f9cf8fffedd4c4b18bcfef092356e952b81f596e148f18e98280994593"
1018+checksum = "553c5d846a6ba5150c65e3b1b8ec073bcf1abc20f9b7220de384a4443ea4e20a"
6461019 dependencies = [
6471020 "bytes",
1021+ "cfg_aliases 0.2.2",
6481022 ]
6491023
6501024 [[package]]
651-name = "bumpalo"
652-version = "3.20.3"
1025+name = "bs58"
1026+version = "0.5.1"
6531027 source = "registry+https://github.com/rust-lang/crates.io-index"
654-checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649"
1028+checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4"
1029+dependencies = [
1030+ "tinyvec",
1031+]
6551032
6561033 [[package]]
657-name = "bytemuck"
658-version = "1.25.2"
1034+name = "bstr"
1035+version = "1.13.1"
1036+source = "registry+https://github.com/rust-lang/crates.io-index"
1037+checksum = "6bb31b46c14244e20ee9984b11bf5c992b91fb6939fea616e3512c8baecdbe5f"
1038+dependencies = [
1039+ "memchr",
1040+ "regex-automata",
1041+ "serde_core",
1042+]
1043+
1044+[[package]]
1045+name = "btoi"
1046+version = "0.5.0"
1047+source = "registry+https://github.com/rust-lang/crates.io-index"
1048+checksum = "3b5ab9db53bcda568284df0fd39f6eac24ad6f7ba7ff1168b9e76eba6576b976"
1049+dependencies = [
1050+ "num-traits",
1051+]
1052+
1053+[[package]]
1054+name = "buf-list"
1055+version = "1.1.2"
1056+source = "registry+https://github.com/rust-lang/crates.io-index"
1057+checksum = "a6b175f9cf8fffedd4c4b18bcfef092356e952b81f596e148f18e98280994593"
1058+dependencies = [
1059+ "bytes",
1060+]
1061+
1062+[[package]]
1063+name = "build_helpers"
1064+version = "0.14.0"
1065+source = "git+https://github.com/pop-os/libcosmic?rev=a401af8b1c54a8abd393b8c5b7c8809402f83850#a401af8b1c54a8abd393b8c5b7c8809402f83850"
1066+dependencies = [
1067+ "cfg_aliases 0.2.2",
1068+]
1069+
1070+[[package]]
1071+name = "bumpalo"
1072+version = "3.20.3"
1073+source = "registry+https://github.com/rust-lang/crates.io-index"
1074+checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649"
1075+
1076+[[package]]
1077+name = "by_address"
1078+version = "1.2.1"
1079+source = "registry+https://github.com/rust-lang/crates.io-index"
1080+checksum = "64fa3c856b712db6612c019f14756e64e4bcea13337a6b33b696333a9eaa2d06"
1081+
1082+[[package]]
1083+name = "bytemuck"
1084+version = "1.25.2"
6591085 source = "registry+https://github.com/rust-lang/crates.io-index"
6601086 checksum = "95832e849adfb21180ccb6826a99da14e5d266ae5c2e668e1602cf234f153797"
6611087 dependencies = [
@@ -838,7 +1264,7 @@ dependencies = [
8381264 "iana-time-zone",
8391265 "num-traits",
8401266 "serde",
841- "windows-link",
1267+ "windows-link 0.2.1",
8421268 ]
8431269
8441270 [[package]]
@@ -890,7 +1316,7 @@ version = "4.5.55"
8901316 source = "registry+https://github.com/rust-lang/crates.io-index"
8911317 checksum = "a92793da1a46a5f2a02a6f4c46c6496b28c43638adea8306fcb0caa1634f24e5"
8921318 dependencies = [
893- "heck",
1319+ "heck 0.5.0",
8941320 "proc-macro2",
8951321 "quote",
8961322 "syn 2.0.119",
@@ -911,6 +1337,35 @@ dependencies = [
9111337 "error-code",
9121338 ]
9131339
1340+[[package]]
1341+name = "clipboard_macos"
1342+version = "0.1.0"
1343+source = "git+https://github.com/pop-os/window_clipboard.git?tag=sctk-0.20#f68595ee0e62fbd6589f4709b5aaa5c3c7ea5f6c"
1344+dependencies = [
1345+ "objc",
1346+ "objc-foundation",
1347+ "objc_id",
1348+]
1349+
1350+[[package]]
1351+name = "clipboard_wayland"
1352+version = "0.2.2"
1353+source = "git+https://github.com/pop-os/window_clipboard.git?tag=sctk-0.20#f68595ee0e62fbd6589f4709b5aaa5c3c7ea5f6c"
1354+dependencies = [
1355+ "dnd",
1356+ "mime 0.1.0",
1357+ "smithay-clipboard 0.8.0",
1358+]
1359+
1360+[[package]]
1361+name = "clipboard_x11"
1362+version = "0.4.2"
1363+source = "git+https://github.com/pop-os/window_clipboard.git?tag=sctk-0.20#f68595ee0e62fbd6589f4709b5aaa5c3c7ea5f6c"
1364+dependencies = [
1365+ "thiserror 1.0.69",
1366+ "x11rb",
1367+]
1368+
9141369 [[package]]
9151370 name = "cmake"
9161371 version = "0.1.58"
@@ -935,6 +1390,53 @@ dependencies = [
9351390 "thiserror 2.0.19",
9361391 ]
9371392
1393+[[package]]
1394+name = "cocoa"
1395+version = "0.25.0"
1396+source = "registry+https://github.com/rust-lang/crates.io-index"
1397+checksum = "f6140449f97a6e97f9511815c5632d84c8aacf8ac271ad77c559218161a1373c"
1398+dependencies = [
1399+ "bitflags 1.3.2",
1400+ "block",
1401+ "cocoa-foundation",
1402+ "core-foundation 0.9.4",
1403+ "core-graphics",
1404+ "foreign-types",
1405+ "libc",
1406+ "objc",
1407+]
1408+
1409+[[package]]
1410+name = "cocoa-foundation"
1411+version = "0.1.2"
1412+source = "registry+https://github.com/rust-lang/crates.io-index"
1413+checksum = "8c6234cbb2e4c785b456c0644748b1ac416dd045799740356f8363dfe00c93f7"
1414+dependencies = [
1415+ "bitflags 1.3.2",
1416+ "block",
1417+ "core-foundation 0.9.4",
1418+ "core-graphics-types 0.1.3",
1419+ "libc",
1420+ "objc",
1421+]
1422+
1423+[[package]]
1424+name = "codespan-reporting"
1425+version = "0.12.0"
1426+source = "registry+https://github.com/rust-lang/crates.io-index"
1427+checksum = "fe6d2e5af09e8c8ad56c969f2157a3d4238cebc7c55f0a517728c38f7b200f81"
1428+dependencies = [
1429+ "serde",
1430+ "termcolor",
1431+ "unicode-width",
1432+]
1433+
1434+[[package]]
1435+name = "color_quant"
1436+version = "1.1.0"
1437+source = "registry+https://github.com/rust-lang/crates.io-index"
1438+checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b"
1439+
9381440 [[package]]
9391441 name = "colorchoice"
9401442 version = "1.0.5"
@@ -989,6 +1491,12 @@ dependencies = [
9891491 "crossbeam-utils",
9901492 ]
9911493
1494+[[package]]
1495+name = "configparser"
1496+version = "3.3.0"
1497+source = "registry+https://github.com/rust-lang/crates.io-index"
1498+checksum = "031ad3d167622974ed636505ae4556267ed4aa2aea0464122fa6bc9698a32825"
1499+
9921500 [[package]]
9931501 name = "const-oid"
9941502 version = "0.10.2"
@@ -1060,7 +1568,7 @@ checksum = "c07782be35f9e1140080c6b96f0d44b739e2278479f64e02fdab4e32dfd8b081"
10601568 dependencies = [
10611569 "bitflags 1.3.2",
10621570 "core-foundation 0.9.4",
1063- "core-graphics-types",
1571+ "core-graphics-types 0.1.3",
10641572 "foreign-types",
10651573 "libc",
10661574 ]
@@ -1076,6 +1584,17 @@ dependencies = [
10761584 "libc",
10771585 ]
10781586
1587+[[package]]
1588+name = "core-graphics-types"
1589+version = "0.2.0"
1590+source = "registry+https://github.com/rust-lang/crates.io-index"
1591+checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb"
1592+dependencies = [
1593+ "bitflags 2.13.1",
1594+ "core-foundation 0.10.1",
1595+ "libc",
1596+]
1597+
10791598 [[package]]
10801599 name = "core_affinity"
10811600 version = "0.8.3"
@@ -1087,6 +1606,15 @@ dependencies = [
10871606 "winapi",
10881607 ]
10891608
1609+[[package]]
1610+name = "core_maths"
1611+version = "0.1.1"
1612+source = "registry+https://github.com/rust-lang/crates.io-index"
1613+checksum = "77745e017f5edba1a9c1d854f6f3a52dac8a12dd5af5d2f54aecf61e43d80d30"
1614+dependencies = [
1615+ "libm",
1616+]
1617+
10901618 [[package]]
10911619 name = "coreaudio-rs"
10921620 version = "0.14.2"
@@ -1101,6 +1629,127 @@ dependencies = [
11011629 "objc2-core-foundation",
11021630 ]
11031631
1632+[[package]]
1633+name = "cosmic-client-toolkit"
1634+version = "0.2.0"
1635+source = "git+https://github.com/pop-os/cosmic-protocols?rev=32283d7#32283d76a8d0342da74c4cc022a533c52dcf378f"
1636+dependencies = [
1637+ "bitflags 2.13.1",
1638+ "cosmic-protocols",
1639+ "libc",
1640+ "smithay-client-toolkit 0.20.0",
1641+ "wayland-client",
1642+ "wayland-protocols",
1643+]
1644+
1645+[[package]]
1646+name = "cosmic-config"
1647+version = "1.0.0"
1648+source = "git+https://github.com/pop-os/libcosmic?rev=a401af8b1c54a8abd393b8c5b7c8809402f83850#a401af8b1c54a8abd393b8c5b7c8809402f83850"
1649+dependencies = [
1650+ "atomicwrites",
1651+ "cosmic-config-derive",
1652+ "cosmic-settings-daemon",
1653+ "dirs",
1654+ "futures-util",
1655+ "iced_futures",
1656+ "known-folders",
1657+ "notify",
1658+ "ron",
1659+ "serde",
1660+ "tokio",
1661+ "tracing",
1662+ "xdg",
1663+ "zbus",
1664+]
1665+
1666+[[package]]
1667+name = "cosmic-config-derive"
1668+version = "1.0.0"
1669+source = "git+https://github.com/pop-os/libcosmic?rev=a401af8b1c54a8abd393b8c5b7c8809402f83850#a401af8b1c54a8abd393b8c5b7c8809402f83850"
1670+dependencies = [
1671+ "quote",
1672+ "syn 2.0.119",
1673+]
1674+
1675+[[package]]
1676+name = "cosmic-freedesktop-icons"
1677+version = "0.4.0"
1678+source = "git+https://github.com/pop-os/freedesktop-icons#ab4c57b8e416c6af9297cb04d101889896fd9a92"
1679+dependencies = [
1680+ "bstr",
1681+ "btoi",
1682+ "memchr",
1683+ "memmap2 0.9.11",
1684+ "thiserror 2.0.19",
1685+ "tracing",
1686+ "xdg",
1687+]
1688+
1689+[[package]]
1690+name = "cosmic-protocols"
1691+version = "0.2.0"
1692+source = "git+https://github.com/pop-os/cosmic-protocols?rev=32283d7#32283d76a8d0342da74c4cc022a533c52dcf378f"
1693+dependencies = [
1694+ "bitflags 2.13.1",
1695+ "wayland-backend",
1696+ "wayland-client",
1697+ "wayland-protocols",
1698+ "wayland-protocols-wlr",
1699+ "wayland-scanner",
1700+ "wayland-server",
1701+]
1702+
1703+[[package]]
1704+name = "cosmic-settings-daemon"
1705+version = "0.1.0"
1706+source = "git+https://github.com/pop-os/dbus-settings-bindings#eed01dd3609e90e3c8cd043656734c500956c793"
1707+dependencies = [
1708+ "zbus",
1709+]
1710+
1711+[[package]]
1712+name = "cosmic-text"
1713+version = "0.19.0"
1714+source = "registry+https://github.com/rust-lang/crates.io-index"
1715+checksum = "be17b688510d934ce13f48a2beba700e11583e281e0fda99c22bb256a14eda73"
1716+dependencies = [
1717+ "bitflags 2.13.1",
1718+ "fontdb",
1719+ "harfrust",
1720+ "linebender_resource_handle",
1721+ "log",
1722+ "rangemap",
1723+ "rustc-hash 2.1.3",
1724+ "self_cell",
1725+ "skrifa 0.40.0",
1726+ "smol_str 0.3.6",
1727+ "swash",
1728+ "sys-locale",
1729+ "unicode-bidi",
1730+ "unicode-linebreak",
1731+ "unicode-script",
1732+ "unicode-segmentation",
1733+]
1734+
1735+[[package]]
1736+name = "cosmic-theme"
1737+version = "1.0.0"
1738+source = "git+https://github.com/pop-os/libcosmic?rev=a401af8b1c54a8abd393b8c5b7c8809402f83850#a401af8b1c54a8abd393b8c5b7c8809402f83850"
1739+dependencies = [
1740+ "almost",
1741+ "configparser",
1742+ "cosmic-config",
1743+ "csscolorparser",
1744+ "dirs",
1745+ "hex_color",
1746+ "palette",
1747+ "ron",
1748+ "serde",
1749+ "serde_json",
1750+ "thiserror 2.0.19",
1751+]
1752+
11041753 [[package]]
11051754 name = "cpal"
11061755 version = "0.18.2"
@@ -1128,8 +1777,8 @@ dependencies = [
11281777 "objc2-foundation 0.3.2",
11291778 "pipewire",
11301779 "web-sys",
1131- "windows",
1132- "windows-core",
1780+ "windows 0.62.2",
1781+ "windows-core 0.62.2",
11331782 ]
11341783
11351784 [[package]]
@@ -1219,6 +1868,18 @@ version = "0.2.4"
12191868 source = "registry+https://github.com/rust-lang/crates.io-index"
12201869 checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5"
12211870
1871+[[package]]
1872+name = "cryoglyph"
1873+version = "0.1.0"
1874+source = "git+https://github.com/iced-rs/cryoglyph.git?rev=e429a025df36ab8145708acb309080ae3deec17a#e429a025df36ab8145708acb309080ae3deec17a"
1875+dependencies = [
1876+ "cosmic-text",
1877+ "etagere",
1878+ "lru 0.16.4",
1879+ "rustc-hash 2.1.3",
1880+ "wgpu",
1881+]
1882+
12221883 [[package]]
12231884 name = "crypto-common"
12241885 version = "0.1.6"
@@ -1239,6 +1900,33 @@ dependencies = [
12391900 "rand_core 0.10.1",
12401901 ]
12411902
1903+[[package]]
1904+name = "css-color"
1905+version = "0.2.8"
1906+source = "registry+https://github.com/rust-lang/crates.io-index"
1907+checksum = "42aaeae719fd78ce501d77c6cdf01f7e96f26bcd5617a4903a1c2b97e388543a"
1908+
1909+[[package]]
1910+name = "csscolorparser"
1911+version = "0.8.4"
1912+source = "registry+https://github.com/rust-lang/crates.io-index"
1913+checksum = "168dbdf4dced8f57fa4246ac9080598452b49d70bb2d0e46422142f113140dd8"
1914+dependencies = [
1915+ "num-traits",
1916+ "phf",
1917+ "serde",
1918+ "uncased",
1919+]
1920+
1921+[[package]]
1922+name = "ctor"
1923+version = "0.10.1"
1924+source = "registry+https://github.com/rust-lang/crates.io-index"
1925+checksum = "83cf0d42651b16c6dfe68685716d18480d18a9c39c62d76e8cf3eb6ed5d8bcbf"
1926+dependencies = [
1927+ "dtor",
1928+]
1929+
12421930 [[package]]
12431931 name = "ctr"
12441932 version = "0.9.2"
@@ -1292,14 +1980,38 @@ dependencies = [
12921980 "syn 2.0.119",
12931981 ]
12941982
1983+[[package]]
1984+name = "darling"
1985+version = "0.21.3"
1986+source = "registry+https://github.com/rust-lang/crates.io-index"
1987+checksum = "9cdf337090841a411e2a7f3deb9187445851f91b309c0c0a29e05f74a00a48c0"
1988+dependencies = [
1989+ "darling_core 0.21.3",
1990+ "darling_macro 0.21.3",
1991+]
1992+
12951993 [[package]]
12961994 name = "darling"
12971995 version = "0.23.0"
12981996 source = "registry+https://github.com/rust-lang/crates.io-index"
12991997 checksum = "25ae13da2f202d56bd7f91c25fba009e7717a1e4a1cc98a76d844b65ae912e9d"
13001998 dependencies = [
1301- "darling_core",
1302- "darling_macro",
1999+ "darling_core 0.23.0",
2000+ "darling_macro 0.23.0",
2001+]
2002+
2003+[[package]]
2004+name = "darling_core"
2005+version = "0.21.3"
2006+source = "registry+https://github.com/rust-lang/crates.io-index"
2007+checksum = "1247195ecd7e3c85f83c8d2a366e4210d588e802133e1e355180a9870b517ea4"
2008+dependencies = [
2009+ "fnv",
2010+ "ident_case",
2011+ "proc-macro2",
2012+ "quote",
2013+ "strsim",
2014+ "syn 2.0.119",
13032015 ]
13042016
13052017 [[package]]
@@ -1315,13 +2027,24 @@ dependencies = [
13152027 "syn 2.0.119",
13162028 ]
13172029
2030+[[package]]
2031+name = "darling_macro"
2032+version = "0.21.3"
2033+source = "registry+https://github.com/rust-lang/crates.io-index"
2034+checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81"
2035+dependencies = [
2036+ "darling_core 0.21.3",
2037+ "quote",
2038+ "syn 2.0.119",
2039+]
2040+
13182041 [[package]]
13192042 name = "darling_macro"
13202043 version = "0.23.0"
13212044 source = "registry+https://github.com/rust-lang/crates.io-index"
13222045 checksum = "ac3984ec7bd6cfa798e62b4a642426a5be0e68f9401cfc2a01e3fa9ea2fcdb8d"
13232046 dependencies = [
1324- "darling_core",
2047+ "darling_core 0.23.0",
13252048 "quote",
13262049 "syn 2.0.119",
13272050 ]
@@ -1358,6 +2081,12 @@ dependencies = [
13582081 "syn 2.0.119",
13592082 ]
13602083
2084+[[package]]
2085+name = "data-url"
2086+version = "0.3.2"
2087+source = "registry+https://github.com/rust-lang/crates.io-index"
2088+checksum = "be1e0bca6c3637f992fc1cc7cbc52a78c1ef6db076dbf1059c4323d6a2048376"
2089+
13612090 [[package]]
13622091 name = "defmt"
13632092 version = "1.1.1"
@@ -1457,6 +2186,29 @@ dependencies = [
14572186 "unicode-xid",
14582187 ]
14592188
2189+[[package]]
2190+name = "derive_setters"
2191+version = "0.1.9"
2192+source = "registry+https://github.com/rust-lang/crates.io-index"
2193+checksum = "b7e6f6fa1f03c14ae082120b84b3c7fbd7b8588d924cf2d7c3daf9afd49df8b9"
2194+dependencies = [
2195+ "darling 0.21.3",
2196+ "proc-macro2",
2197+ "quote",
2198+ "syn 2.0.119",
2199+]
2200+
2201+[[package]]
2202+name = "derive_utils"
2203+version = "0.16.0"
2204+source = "registry+https://github.com/rust-lang/crates.io-index"
2205+checksum = "dc05a5d33db20c784f873e84934ad94bb209a090987ac5f62fede2c178234f23"
2206+dependencies = [
2207+ "proc-macro2",
2208+ "quote",
2209+ "syn 3.0.3",
2210+]
2211+
14602212 [[package]]
14612213 name = "diatomic-waker"
14622214 version = "0.2.3"
@@ -1480,14 +2232,36 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
14802232 checksum = "f1dd6dbb5841937940781866fa1281a1ff7bd3bf827091440879f9994983d5c2"
14812233 dependencies = [
14822234 "block-buffer 0.12.1",
2235+ "const-oid",
14832236 "crypto-common 0.2.2",
14842237 ]
14852238
14862239 [[package]]
1487-name = "dispatch"
1488-version = "0.2.0"
2240+name = "dirs"
2241+version = "6.0.0"
14892242 source = "registry+https://github.com/rust-lang/crates.io-index"
1490-checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b"
2243+checksum = "c3e8aa94d75141228480295a7d0e7feb620b1a5ad9f12bc40be62411e38cce4e"
2244+dependencies = [
2245+ "dirs-sys",
2246+]
2247+
2248+[[package]]
2249+name = "dirs-sys"
2250+version = "0.5.0"
2251+source = "registry+https://github.com/rust-lang/crates.io-index"
2252+checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab"
2253+dependencies = [
2254+ "libc",
2255+ "option-ext",
2256+ "redox_users",
2257+ "windows-sys 0.59.0",
2258+]
2259+
2260+[[package]]
2261+name = "dispatch"
2262+version = "0.2.0"
2263+source = "registry+https://github.com/rust-lang/crates.io-index"
2264+checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b"
14912265
14922266 [[package]]
14932267 name = "dispatch2"
@@ -1532,6 +2306,27 @@ dependencies = [
15322306 "winapi",
15332307 ]
15342308
2309+[[package]]
2310+name = "dnd"
2311+version = "0.1.0"
2312+source = "git+https://github.com/pop-os/window_clipboard.git?tag=sctk-0.20#f68595ee0e62fbd6589f4709b5aaa5c3c7ea5f6c"
2313+dependencies = [
2314+ "bitflags 2.13.1",
2315+ "mime 0.1.0",
2316+ "raw-window-handle",
2317+ "smithay-client-toolkit 0.20.0",
2318+ "smithay-clipboard 0.8.0",
2319+]
2320+
2321+[[package]]
2322+name = "document-features"
2323+version = "0.2.12"
2324+source = "registry+https://github.com/rust-lang/crates.io-index"
2325+checksum = "d4b8a88685455ed29a21542a33abd9cb6510b6b129abadabdcef0f4c55bc8f61"
2326+dependencies = [
2327+ "litrs",
2328+]
2329+
15352330 [[package]]
15362331 name = "downcast-rs"
15372332 version = "1.2.1"
@@ -1544,6 +2339,56 @@ version = "0.1.2"
15442339 source = "registry+https://github.com/rust-lang/crates.io-index"
15452340 checksum = "d8b14ccef22fc6f5a8f4d7d768562a182c04ce9a3b3157b91390b52ddfdf1a76"
15462341
2342+[[package]]
2343+name = "dpi"
2344+version = "0.1.2"
2345+source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#71ce08c043814514a8fd92d9d0599f115ae854e8"
2346+
2347+[[package]]
2348+name = "drm"
2349+version = "0.11.1"
2350+source = "registry+https://github.com/rust-lang/crates.io-index"
2351+checksum = "a0f8a69e60d75ae7dab4ef26a59ca99f2a89d4c142089b537775ae0c198bdcde"
2352+dependencies = [
2353+ "bitflags 2.13.1",
2354+ "bytemuck",
2355+ "drm-ffi",
2356+ "drm-fourcc",
2357+ "rustix 0.38.44",
2358+]
2359+
2360+[[package]]
2361+name = "drm-ffi"
2362+version = "0.7.1"
2363+source = "registry+https://github.com/rust-lang/crates.io-index"
2364+checksum = "41334f8405792483e32ad05fbb9c5680ff4e84491883d2947a4757dc54cb2ac6"
2365+dependencies = [
2366+ "drm-sys",
2367+ "rustix 0.38.44",
2368+]
2369+
2370+[[package]]
2371+name = "drm-fourcc"
2372+version = "2.2.0"
2373+source = "registry+https://github.com/rust-lang/crates.io-index"
2374+checksum = "0aafbcdb8afc29c1a7ee5fbe53b5d62f4565b35a042a662ca9fecd0b54dae6f4"
2375+
2376+[[package]]
2377+name = "drm-sys"
2378+version = "0.6.1"
2379+source = "registry+https://github.com/rust-lang/crates.io-index"
2380+checksum = "2d09ff881f92f118b11105ba5e34ff8f4adf27b30dae8f12e28c193af1c83176"
2381+dependencies = [
2382+ "libc",
2383+ "linux-raw-sys 0.6.5",
2384+]
2385+
2386+[[package]]
2387+name = "dtor"
2388+version = "0.8.1"
2389+source = "registry+https://github.com/rust-lang/crates.io-index"
2390+checksum = "edf234dd1594d6dd434a8fb8cada51ddbbc593e40e4a01556a0b31c62da2775b"
2391+
15472392 [[package]]
15482393 name = "dunce"
15492394 version = "1.0.5"
@@ -1650,10 +2495,10 @@ dependencies = [
16502495 "log",
16512496 "profiling",
16522497 "raw-window-handle",
1653- "smithay-clipboard",
2498+ "smithay-clipboard 0.7.3",
16542499 "web-time",
16552500 "webbrowser",
1656- "winit",
2501+ "winit 0.30.13",
16572502 ]
16582503
16592504 [[package]]
@@ -1709,6 +2554,12 @@ dependencies = [
17092554 "cfg-if",
17102555 ]
17112556
2557+[[package]]
2558+name = "endi"
2559+version = "1.1.1"
2560+source = "registry+https://github.com/rust-lang/crates.io-index"
2561+checksum = "66b7e2430c6dff6a955451e2cfc438f09cea1965a9d6f87f7e3b90decc014099"
2562+
17122563 [[package]]
17132564 name = "enum-assoc"
17142565 version = "1.3.0"
@@ -1720,6 +2571,27 @@ dependencies = [
17202571 "syn 2.0.119",
17212572 ]
17222573
2574+[[package]]
2575+name = "enumflags2"
2576+version = "0.7.12"
2577+source = "registry+https://github.com/rust-lang/crates.io-index"
2578+checksum = "1027f7680c853e056ebcec683615fb6fbbc07dbaa13b4d5d9442b146ded4ecef"
2579+dependencies = [
2580+ "enumflags2_derive",
2581+ "serde",
2582+]
2583+
2584+[[package]]
2585+name = "enumflags2_derive"
2586+version = "0.7.12"
2587+source = "registry+https://github.com/rust-lang/crates.io-index"
2588+checksum = "67c78a4d8fdf9953a5c9d458f9efe940fd97a0cab0941c075a813ac594733827"
2589+dependencies = [
2590+ "proc-macro2",
2591+ "quote",
2592+ "syn 2.0.119",
2593+]
2594+
17232595 [[package]]
17242596 name = "enumn"
17252597 version = "0.1.14"
@@ -1809,6 +2681,45 @@ dependencies = [
18092681 "num-traits",
18102682 ]
18112683
2684+[[package]]
2685+name = "etagere"
2686+version = "0.2.15"
2687+source = "registry+https://github.com/rust-lang/crates.io-index"
2688+checksum = "fc89bf99e5dc15954a60f707c1e09d7540e5cd9af85fa75caa0b510bc08c5342"
2689+dependencies = [
2690+ "euclid",
2691+ "svg_fmt",
2692+]
2693+
2694+[[package]]
2695+name = "euclid"
2696+version = "0.22.14"
2697+source = "registry+https://github.com/rust-lang/crates.io-index"
2698+checksum = "f1a05365e3b1c6d1650318537c7460c6923f1abdd272ad6842baa2b509957a06"
2699+dependencies = [
2700+ "num-traits",
2701+]
2702+
2703+[[package]]
2704+name = "event-listener"
2705+version = "5.4.2"
2706+source = "registry+https://github.com/rust-lang/crates.io-index"
2707+checksum = "5a23add41df1562121a9393cb065eab5146a1242410f23a644851e90cfd669d2"
2708+dependencies = [
2709+ "parking",
2710+ "pin-project-lite",
2711+]
2712+
2713+[[package]]
2714+name = "event-listener-strategy"
2715+version = "0.5.4"
2716+source = "registry+https://github.com/rust-lang/crates.io-index"
2717+checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93"
2718+dependencies = [
2719+ "event-listener",
2720+ "pin-project-lite",
2721+]
2722+
18122723 [[package]]
18132724 name = "extended"
18142725 version = "0.1.0"
@@ -1827,7 +2738,7 @@ version = "0.17.0"
18272738 source = "registry+https://github.com/rust-lang/crates.io-index"
18282739 checksum = "ef975e30683b2d965054bb0a836f8973857c4ebf6acf274fe46617cd285060d8"
18292740 dependencies = [
1830- "foldhash",
2741+ "foldhash 0.2.0",
18312742 "libm",
18322743 "portable-atomic",
18332744 "siphasher",
@@ -1860,6 +2771,15 @@ version = "0.3.0"
18602771 source = "registry+https://github.com/rust-lang/crates.io-index"
18612772 checksum = "64cd1e32ddd350061ae6edb1b082d7c54915b5c672c389143b9a63403a109f24"
18622773
2774+[[package]]
2775+name = "find-crate"
2776+version = "0.6.3"
2777+source = "registry+https://github.com/rust-lang/crates.io-index"
2778+checksum = "59a98bbaacea1c0eb6a0876280051b892eb73594fd90cf3b20e9c817029c57d2"
2779+dependencies = [
2780+ "toml 0.5.11",
2781+]
2782+
18632783 [[package]]
18642784 name = "find-msvc-tools"
18652785 version = "0.1.9"
@@ -1901,18 +2821,131 @@ dependencies = [
19012821 "zlib-rs",
19022822 ]
19032823
2824+[[package]]
2825+name = "float-cmp"
2826+version = "0.9.0"
2827+source = "registry+https://github.com/rust-lang/crates.io-index"
2828+checksum = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4"
2829+
2830+[[package]]
2831+name = "float-cmp"
2832+version = "0.10.0"
2833+source = "registry+https://github.com/rust-lang/crates.io-index"
2834+checksum = "b09cf3155332e944990140d967ff5eceb70df778b34f77d8075db46e4704e6d8"
2835+dependencies = [
2836+ "num-traits",
2837+]
2838+
2839+[[package]]
2840+name = "float_next_after"
2841+version = "1.0.0"
2842+source = "registry+https://github.com/rust-lang/crates.io-index"
2843+checksum = "8bf7cc16383c4b8d58b9905a8509f02926ce3058053c056376248d958c9df1e8"
2844+
2845+[[package]]
2846+name = "fluent"
2847+version = "0.17.0"
2848+source = "registry+https://github.com/rust-lang/crates.io-index"
2849+checksum = "8137a6d5a2c50d6b0ebfcb9aaa91a28154e0a70605f112d30cb0cd4a78670477"
2850+dependencies = [
2851+ "fluent-bundle",
2852+ "unic-langid",
2853+]
2854+
2855+[[package]]
2856+name = "fluent-bundle"
2857+version = "0.16.0"
2858+source = "registry+https://github.com/rust-lang/crates.io-index"
2859+checksum = "01203cb8918f5711e73891b347816d932046f95f54207710bda99beaeb423bf4"
2860+dependencies = [
2861+ "fluent-langneg",
2862+ "fluent-syntax",
2863+ "intl-memoizer",
2864+ "intl_pluralrules",
2865+ "rustc-hash 2.1.3",
2866+ "self_cell",
2867+ "smallvec",
2868+ "unic-langid",
2869+]
2870+
2871+[[package]]
2872+name = "fluent-langneg"
2873+version = "0.13.1"
2874+source = "registry+https://github.com/rust-lang/crates.io-index"
2875+checksum = "7eebbe59450baee8282d71676f3bfed5689aeab00b27545e83e5f14b1195e8b0"
2876+dependencies = [
2877+ "unic-langid",
2878+]
2879+
2880+[[package]]
2881+name = "fluent-syntax"
2882+version = "0.12.0"
2883+source = "registry+https://github.com/rust-lang/crates.io-index"
2884+checksum = "54f0d287c53ffd184d04d8677f590f4ac5379785529e5e08b1c8083acdd5c198"
2885+dependencies = [
2886+ "memchr",
2887+ "thiserror 2.0.19",
2888+]
2889+
19042890 [[package]]
19052891 name = "fnv"
19062892 version = "1.0.7"
19072893 source = "registry+https://github.com/rust-lang/crates.io-index"
19082894 checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
19092895
2896+[[package]]
2897+name = "foldhash"
2898+version = "0.1.5"
2899+source = "registry+https://github.com/rust-lang/crates.io-index"
2900+checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2"
2901+
19102902 [[package]]
19112903 name = "foldhash"
19122904 version = "0.2.0"
19132905 source = "registry+https://github.com/rust-lang/crates.io-index"
19142906 checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb"
19152907
2908+[[package]]
2909+name = "font-types"
2910+version = "0.11.3"
2911+source = "registry+https://github.com/rust-lang/crates.io-index"
2912+checksum = "5b38ad915f6dadd993ced50848a8291a543bd41ca62bc10740d5e64e2ab4cfd7"
2913+dependencies = [
2914+ "bytemuck",
2915+]
2916+
2917+[[package]]
2918+name = "font-types"
2919+version = "0.12.5"
2920+source = "registry+https://github.com/rust-lang/crates.io-index"
2921+checksum = "b8eb065f3251655b3c90e22e5e363f310fc5332fb3402e37bbc94752283248f6"
2922+dependencies = [
2923+ "bytemuck",
2924+]
2925+
2926+[[package]]
2927+name = "fontconfig-parser"
2928+version = "0.5.8"
2929+source = "registry+https://github.com/rust-lang/crates.io-index"
2930+checksum = "bbc773e24e02d4ddd8395fd30dc147524273a83e54e0f312d986ea30de5f5646"
2931+dependencies = [
2932+ "roxmltree",
2933+]
2934+
2935+[[package]]
2936+name = "fontdb"
2937+version = "0.23.0"
2938+source = "registry+https://github.com/rust-lang/crates.io-index"
2939+checksum = "457e789b3d1202543297a350643cf459f836cade38934e7a4cf6a39e7cde2905"
2940+dependencies = [
2941+ "fontconfig-parser",
2942+ "log",
2943+ "memmap2 0.9.11",
2944+ "slotmap",
2945+ "tinyvec",
2946+ "ttf-parser",
2947+]
2948+
19162949 [[package]]
19172950 name = "foreign-types"
19182951 version = "0.5.0"
@@ -2102,8 +3135,8 @@ dependencies = [
21023135 "libc",
21033136 "log",
21043137 "rustversion",
2105- "windows-link",
2106- "windows-result",
3138+ "windows-link 0.2.1",
3139+ "windows-result 0.4.1",
21073140 ]
21083141
21093142 [[package]]
@@ -2123,7 +3156,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
21233156 checksum = "1bd49230192a3797a9a4d6abe9b3eed6f7fa4c8a8a4947977c6f80025f92cbd8"
21243157 dependencies = [
21253158 "rustix 1.1.4",
2126- "windows-link",
3159+ "windows-link 0.2.1",
21273160 ]
21283161
21293162 [[package]]
@@ -2175,6 +3208,16 @@ dependencies = [
21753208 "polyval",
21763209 ]
21773210
3211+[[package]]
3212+name = "gif"
3213+version = "0.13.3"
3214+source = "registry+https://github.com/rust-lang/crates.io-index"
3215+checksum = "4ae047235e33e2829703574b54fdec96bfbad892062d97fed2f76022287de61b"
3216+dependencies = [
3217+ "color_quant",
3218+ "weezl",
3219+]
3220+
21783221 [[package]]
21793222 name = "gimli"
21803223 version = "0.32.3"
@@ -2192,6 +3235,12 @@ dependencies = [
21923235 "xml-rs",
21933236 ]
21943237
3238+[[package]]
3239+name = "glam"
3240+version = "0.25.0"
3241+source = "registry+https://github.com/rust-lang/crates.io-index"
3242+checksum = "151665d9be52f9bb40fc7966565d39666f2d1e69233571b71b87791c7e0528b3"
3243+
21953244 [[package]]
21963245 name = "glob"
21973246 version = "0.3.4"
@@ -2256,7 +3305,7 @@ dependencies = [
22563305 "cfg_aliases 0.2.2",
22573306 "glutin",
22583307 "raw-window-handle",
2259- "winit",
3308+ "winit 0.30.13",
22603309 ]
22613310
22623311 [[package]]
@@ -2288,6 +3337,56 @@ dependencies = [
22883337 "gl_generator",
22893338 ]
22903339
3340+[[package]]
3341+name = "gpu-allocator"
3342+version = "0.28.0"
3343+source = "registry+https://github.com/rust-lang/crates.io-index"
3344+checksum = "51255ea7cfaadb6c5f1528d43e92a82acb2b96c43365989a28b2d44ee38f8795"
3345+dependencies = [
3346+ "ash",
3347+ "hashbrown 0.16.1",
3348+ "log",
3349+ "presser",
3350+ "thiserror 2.0.19",
3351+ "windows 0.62.2",
3352+]
3353+
3354+[[package]]
3355+name = "gpu-descriptor"
3356+version = "0.3.2"
3357+source = "registry+https://github.com/rust-lang/crates.io-index"
3358+checksum = "b89c83349105e3732062a895becfc71a8f921bb71ecbbdd8ff99263e3b53a0ca"
3359+dependencies = [
3360+ "bitflags 2.13.1",
3361+ "gpu-descriptor-types",
3362+ "hashbrown 0.15.5",
3363+]
3364+
3365+[[package]]
3366+name = "gpu-descriptor-types"
3367+version = "0.2.0"
3368+source = "registry+https://github.com/rust-lang/crates.io-index"
3369+checksum = "fdf242682df893b86f33a73828fb09ca4b2d3bb6cc95249707fc684d27484b91"
3370+dependencies = [
3371+ "bitflags 2.13.1",
3372+]
3373+
3374+[[package]]
3375+name = "grid"
3376+version = "1.0.1"
3377+source = "registry+https://github.com/rust-lang/crates.io-index"
3378+checksum = "b40ca9252762c466af32d0b1002e91e4e1bc5398f77455e55474deb466355ff5"
3379+
3380+[[package]]
3381+name = "guillotiere"
3382+version = "0.6.2"
3383+source = "registry+https://github.com/rust-lang/crates.io-index"
3384+checksum = "b62d5865c036cb1393e23c50693df631d3f5d7bcca4c04fe4cc0fd592e74a782"
3385+dependencies = [
3386+ "euclid",
3387+ "svg_fmt",
3388+]
3389+
22913390 [[package]]
22923391 name = "h2"
22933392 version = "0.4.15"
@@ -2321,6 +3420,7 @@ checksum = "6ea2d84b969582b4b1864a92dc5d27cd2b77b622a8d79306834f1be5ba20d84b"
23213420 dependencies = [
23223421 "cfg-if",
23233422 "crunchy",
3423+ "num-traits",
23243424 "zerocopy",
23253425 ]
23263426
@@ -2343,6 +3443,19 @@ dependencies = [
23433443 "url",
23443444 ]
23453445
3446+[[package]]
3447+name = "harfrust"
3448+version = "0.5.2"
3449+source = "registry+https://github.com/rust-lang/crates.io-index"
3450+checksum = "9da2e5ae821f6e96664977bf974d6d6a2d6682f9ccee23e62ec1d134246845f9"
3451+dependencies = [
3452+ "bitflags 2.13.1",
3453+ "bytemuck",
3454+ "core_maths",
3455+ "read-fonts 0.37.0",
3456+ "smallvec",
3457+]
3458+
23463459 [[package]]
23473460 name = "hash32"
23483461 version = "0.2.1"
@@ -2358,6 +3471,26 @@ version = "0.12.3"
23583471 source = "registry+https://github.com/rust-lang/crates.io-index"
23593472 checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
23603473
3474+[[package]]
3475+name = "hashbrown"
3476+version = "0.15.5"
3477+source = "registry+https://github.com/rust-lang/crates.io-index"
3478+checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1"
3479+dependencies = [
3480+ "foldhash 0.1.5",
3481+]
3482+
3483+[[package]]
3484+name = "hashbrown"
3485+version = "0.16.1"
3486+source = "registry+https://github.com/rust-lang/crates.io-index"
3487+checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100"
3488+dependencies = [
3489+ "allocator-api2",
3490+ "equivalent",
3491+ "foldhash 0.2.0",
3492+]
3493+
23613494 [[package]]
23623495 name = "hashbrown"
23633496 version = "0.17.1"
@@ -2366,7 +3499,7 @@ checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a"
23663499 dependencies = [
23673500 "allocator-api2",
23683501 "equivalent",
2369- "foldhash",
3502+ "foldhash 0.2.0",
23703503 ]
23713504
23723505 [[package]]
@@ -2385,7 +3518,13 @@ dependencies = [
23853518
23863519 [[package]]
23873520 name = "heck"
2388-version = "0.5.0"
3521+version = "0.4.1"
3522+source = "registry+https://github.com/rust-lang/crates.io-index"
3523+checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
3524+
3525+[[package]]
3526+name = "heck"
3527+version = "0.5.0"
23893528 source = "registry+https://github.com/rust-lang/crates.io-index"
23903529 checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
23913530
@@ -2401,6 +3540,23 @@ version = "0.4.3"
24013540 source = "registry+https://github.com/rust-lang/crates.io-index"
24023541 checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
24033542
3543+[[package]]
3544+name = "hex_color"
3545+version = "3.0.0"
3546+source = "registry+https://github.com/rust-lang/crates.io-index"
3547+checksum = "d37f101bf4c633f7ca2e4b5e136050314503dd198e78e325ea602c327c484ef0"
3548+dependencies = [
3549+ "arrayvec",
3550+ "rand 0.8.7",
3551+ "serde",
3552+]
3553+
3554+[[package]]
3555+name = "hexf-parse"
3556+version = "0.2.1"
3557+source = "registry+https://github.com/rust-lang/crates.io-index"
3558+checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df"
3559+
24043560 [[package]]
24053561 name = "hickory-net"
24063562 version = "0.26.2"
@@ -2609,6 +3765,73 @@ dependencies = [
26093765 "tracing",
26103766 ]
26113767
3768+[[package]]
3769+name = "i18n-config"
3770+version = "0.4.8"
3771+source = "registry+https://github.com/rust-lang/crates.io-index"
3772+checksum = "3e06b90c8a0d252e203c94344b21e35a30f3a3a85dc7db5af8f8df9f3e0c63ef"
3773+dependencies = [
3774+ "basic-toml",
3775+ "log",
3776+ "serde",
3777+ "serde_derive",
3778+ "thiserror 1.0.69",
3779+ "unic-langid",
3780+]
3781+
3782+[[package]]
3783+name = "i18n-embed"
3784+version = "0.16.0"
3785+source = "registry+https://github.com/rust-lang/crates.io-index"
3786+checksum = "a217bbb075dcaefb292efa78897fc0678245ca67f265d12c351e42268fcb0305"
3787+dependencies = [
3788+ "arc-swap",
3789+ "fluent",
3790+ "fluent-langneg",
3791+ "fluent-syntax",
3792+ "i18n-embed-impl",
3793+ "intl-memoizer",
3794+ "log",
3795+ "parking_lot",
3796+ "rust-embed",
3797+ "sys-locale",
3798+ "thiserror 1.0.69",
3799+ "unic-langid",
3800+ "walkdir",
3801+]
3802+
3803+[[package]]
3804+name = "i18n-embed-fl"
3805+version = "0.10.1"
3806+source = "registry+https://github.com/rust-lang/crates.io-index"
3807+checksum = "602e6bd30c3db2749e13e38b363a3d98d9d41de1d8de7a79c31bb69e45b47cda"
3808+dependencies = [
3809+ "find-crate",
3810+ "fluent",
3811+ "fluent-syntax",
3812+ "i18n-config",
3813+ "i18n-embed",
3814+ "proc-macro-error3",
3815+ "proc-macro2",
3816+ "quote",
3817+ "strsim",
3818+ "syn 2.0.119",
3819+ "unic-langid",
3820+]
3821+
3822+[[package]]
3823+name = "i18n-embed-impl"
3824+version = "0.8.4"
3825+source = "registry+https://github.com/rust-lang/crates.io-index"
3826+checksum = "0f2cc0e0523d1fe6fc2c6f66e5038624ea8091b3e7748b5e8e0c84b1698db6c2"
3827+dependencies = [
3828+ "find-crate",
3829+ "i18n-config",
3830+ "proc-macro2",
3831+ "quote",
3832+ "syn 2.0.119",
3833+]
3834+
26123835 [[package]]
26133836 name = "iana-time-zone"
26143837 version = "0.1.65"
@@ -2621,7 +3844,7 @@ dependencies = [
26213844 "js-sys",
26223845 "log",
26233846 "wasm-bindgen",
2624- "windows-core",
3847+ "windows-core 0.62.2",
26253848 ]
26263849
26273850 [[package]]
@@ -2633,6 +3856,246 @@ dependencies = [
26333856 "cc",
26343857 ]
26353858
3859+[[package]]
3860+name = "iced"
3861+version = "0.14.0"
3862+source = "git+https://github.com/pop-os/libcosmic?rev=a401af8b1c54a8abd393b8c5b7c8809402f83850#a401af8b1c54a8abd393b8c5b7c8809402f83850"
3863+dependencies = [
3864+ "build_helpers",
3865+ "dnd",
3866+ "iced_accessibility",
3867+ "iced_core",
3868+ "iced_debug",
3869+ "iced_futures",
3870+ "iced_program",
3871+ "iced_renderer",
3872+ "iced_runtime",
3873+ "iced_widget",
3874+ "iced_winit",
3875+ "image",
3876+ "mime 0.1.0",
3877+ "thiserror 2.0.19",
3878+ "window_clipboard",
3879+]
3880+
3881+[[package]]
3882+name = "iced_accessibility"
3883+version = "0.1.0"
3884+source = "git+https://github.com/pop-os/libcosmic?rev=a401af8b1c54a8abd393b8c5b7c8809402f83850#a401af8b1c54a8abd393b8c5b7c8809402f83850"
3885+dependencies = [
3886+ "accesskit",
3887+ "accesskit_winit",
3888+]
3889+
3890+[[package]]
3891+name = "iced_core"
3892+version = "0.14.0"
3893+source = "git+https://github.com/pop-os/libcosmic?rev=a401af8b1c54a8abd393b8c5b7c8809402f83850#a401af8b1c54a8abd393b8c5b7c8809402f83850"
3894+dependencies = [
3895+ "bitflags 2.13.1",
3896+ "build_helpers",
3897+ "bytes",
3898+ "cosmic-client-toolkit",
3899+ "dnd",
3900+ "glam",
3901+ "lilt",
3902+ "log",
3903+ "mime 0.1.0",
3904+ "num-traits",
3905+ "palette",
3906+ "raw-window-handle",
3907+ "rustc-hash 2.1.3",
3908+ "serde",
3909+ "smol_str 0.3.6",
3910+ "thiserror 2.0.19",
3911+ "unicode-segmentation",
3912+ "web-time",
3913+ "window_clipboard",
3914+]
3915+
3916+[[package]]
3917+name = "iced_debug"
3918+version = "0.14.0"
3919+source = "git+https://github.com/pop-os/libcosmic?rev=a401af8b1c54a8abd393b8c5b7c8809402f83850#a401af8b1c54a8abd393b8c5b7c8809402f83850"
3920+dependencies = [
3921+ "iced_core",
3922+ "iced_futures",
3923+ "log",
3924+]
3925+
3926+[[package]]
3927+name = "iced_futures"
3928+version = "0.14.0"
3929+source = "git+https://github.com/pop-os/libcosmic?rev=a401af8b1c54a8abd393b8c5b7c8809402f83850#a401af8b1c54a8abd393b8c5b7c8809402f83850"
3930+dependencies = [
3931+ "futures",
3932+ "iced_core",
3933+ "log",
3934+ "rustc-hash 2.1.3",
3935+ "tokio",
3936+ "wasm-bindgen-futures",
3937+ "wasmtimer",
3938+]
3939+
3940+[[package]]
3941+name = "iced_graphics"
3942+version = "0.14.0"
3943+source = "git+https://github.com/pop-os/libcosmic?rev=a401af8b1c54a8abd393b8c5b7c8809402f83850#a401af8b1c54a8abd393b8c5b7c8809402f83850"
3944+dependencies = [
3945+ "bitflags 2.13.1",
3946+ "bytemuck",
3947+ "cosmic-text",
3948+ "half",
3949+ "iced_core",
3950+ "iced_futures",
3951+ "image",
3952+ "kamadak-exif",
3953+ "log",
3954+ "lyon_path",
3955+ "raw-window-handle",
3956+ "rustc-hash 2.1.3",
3957+ "thiserror 2.0.19",
3958+ "unicode-segmentation",
3959+]
3960+
3961+[[package]]
3962+name = "iced_program"
3963+version = "0.14.0"
3964+source = "git+https://github.com/pop-os/libcosmic?rev=a401af8b1c54a8abd393b8c5b7c8809402f83850#a401af8b1c54a8abd393b8c5b7c8809402f83850"
3965+dependencies = [
3966+ "iced_graphics",
3967+ "iced_runtime",
3968+]
3969+
3970+[[package]]
3971+name = "iced_renderer"
3972+version = "0.14.0"
3973+source = "git+https://github.com/pop-os/libcosmic?rev=a401af8b1c54a8abd393b8c5b7c8809402f83850#a401af8b1c54a8abd393b8c5b7c8809402f83850"
3974+dependencies = [
3975+ "iced_graphics",
3976+ "iced_tiny_skia",
3977+ "iced_wgpu",
3978+ "log",
3979+ "thiserror 2.0.19",
3980+]
3981+
3982+[[package]]
3983+name = "iced_runtime"
3984+version = "0.14.0"
3985+source = "git+https://github.com/pop-os/libcosmic?rev=a401af8b1c54a8abd393b8c5b7c8809402f83850#a401af8b1c54a8abd393b8c5b7c8809402f83850"
3986+dependencies = [
3987+ "build_helpers",
3988+ "bytes",
3989+ "cosmic-client-toolkit",
3990+ "dnd",
3991+ "iced_core",
3992+ "iced_futures",
3993+ "raw-window-handle",
3994+ "thiserror 2.0.19",
3995+ "window_clipboard",
3996+]
3997+
3998+[[package]]
3999+name = "iced_tiny_skia"
4000+version = "0.14.0"
4001+source = "git+https://github.com/pop-os/libcosmic?rev=a401af8b1c54a8abd393b8c5b7c8809402f83850#a401af8b1c54a8abd393b8c5b7c8809402f83850"
4002+dependencies = [
4003+ "bytemuck",
4004+ "cosmic-text",
4005+ "iced_debug",
4006+ "iced_graphics",
4007+ "kurbo 0.10.4",
4008+ "log",
4009+ "resvg",
4010+ "rustc-hash 2.1.3",
4011+ "softbuffer",
4012+ "tiny-skia 0.11.4",
4013+]
4014+
4015+[[package]]
4016+name = "iced_wgpu"
4017+version = "0.14.0"
4018+source = "git+https://github.com/pop-os/libcosmic?rev=a401af8b1c54a8abd393b8c5b7c8809402f83850#a401af8b1c54a8abd393b8c5b7c8809402f83850"
4019+dependencies = [
4020+ "as-raw-xcb-connection",
4021+ "bitflags 2.13.1",
4022+ "build_helpers",
4023+ "bytemuck",
4024+ "cosmic-client-toolkit",
4025+ "cryoglyph",
4026+ "futures",
4027+ "glam",
4028+ "guillotiere",
4029+ "iced_debug",
4030+ "iced_graphics",
4031+ "log",
4032+ "lyon",
4033+ "raw-window-handle",
4034+ "resvg",
4035+ "rustc-hash 2.1.3",
4036+ "rustix 0.38.44",
4037+ "thiserror 2.0.19",
4038+ "tiny-xlib",
4039+ "wayland-backend",
4040+ "wayland-client",
4041+ "wayland-protocols",
4042+ "wayland-sys",
4043+ "wgpu",
4044+ "x11rb",
4045+]
4046+
4047+[[package]]
4048+name = "iced_widget"
4049+version = "0.14.2"
4050+source = "git+https://github.com/pop-os/libcosmic?rev=a401af8b1c54a8abd393b8c5b7c8809402f83850#a401af8b1c54a8abd393b8c5b7c8809402f83850"
4051+dependencies = [
4052+ "build_helpers",
4053+ "cosmic-client-toolkit",
4054+ "dnd",
4055+ "iced_renderer",
4056+ "iced_runtime",
4057+ "log",
4058+ "num-traits",
4059+ "ouroboros",
4060+ "rustc-hash 2.1.3",
4061+ "thiserror 2.0.19",
4062+ "unicode-segmentation",
4063+ "window_clipboard",
4064+]
4065+
4066+[[package]]
4067+name = "iced_winit"
4068+version = "0.14.0"
4069+source = "git+https://github.com/pop-os/libcosmic?rev=a401af8b1c54a8abd393b8c5b7c8809402f83850#a401af8b1c54a8abd393b8c5b7c8809402f83850"
4070+dependencies = [
4071+ "build_helpers",
4072+ "cosmic-client-toolkit",
4073+ "cursor-icon",
4074+ "dnd",
4075+ "iced_debug",
4076+ "iced_futures",
4077+ "iced_graphics",
4078+ "iced_program",
4079+ "iced_runtime",
4080+ "log",
4081+ "raw-window-handle",
4082+ "rustc-hash 2.1.3",
4083+ "rustix 0.38.44",
4084+ "thiserror 2.0.19",
4085+ "wasm-bindgen-futures",
4086+ "wayland-backend",
4087+ "wayland-client",
4088+ "wayland-protocols",
4089+ "web-sys",
4090+ "winapi",
4091+ "window_clipboard",
4092+ "winit 0.31.0-beta.2",
4093+ "winit-core",
4094+ "xkbcommon 0.7.0",
4095+ "xkbcommon-dl",
4096+ "xkeysym",
4097+]
4098+
26364099 [[package]]
26374100 name = "icu_collections"
26384101 version = "2.2.0"
@@ -2780,10 +4243,26 @@ dependencies = [
27804243 "num-traits",
27814244 "png 0.18.1",
27824245 "tiff",
2783- "zune-core",
2784- "zune-jpeg",
4246+ "zune-core 0.5.1",
4247+ "zune-jpeg 0.5.15",
4248+]
4249+
4250+[[package]]
4251+name = "image-webp"
4252+version = "0.2.4"
4253+source = "registry+https://github.com/rust-lang/crates.io-index"
4254+checksum = "525e9ff3e1a4be2fbea1fdf0e98686a6d98b4d8f937e1bf7402245af1909e8c3"
4255+dependencies = [
4256+ "byteorder-lite",
4257+ "quick-error",
27854258 ]
27864259
4260+[[package]]
4261+name = "imagesize"
4262+version = "0.13.0"
4263+source = "registry+https://github.com/rust-lang/crates.io-index"
4264+checksum = "edcd27d72f2f071c64249075f42e205ff93c9a4c5f6c6da53e79ed9f9832c285"
4265+
27874266 [[package]]
27884267 name = "indexmap"
27894268 version = "1.9.3"
@@ -2836,6 +4315,25 @@ dependencies = [
28364315 "generic-array",
28374316 ]
28384317
4318+[[package]]
4319+name = "intl-memoizer"
4320+version = "0.5.3"
4321+source = "registry+https://github.com/rust-lang/crates.io-index"
4322+checksum = "310da2e345f5eb861e7a07ee182262e94975051db9e4223e909ba90f392f163f"
4323+dependencies = [
4324+ "type-map",
4325+ "unic-langid",
4326+]
4327+
4328+[[package]]
4329+name = "intl_pluralrules"
4330+version = "7.0.2"
4331+source = "registry+https://github.com/rust-lang/crates.io-index"
4332+checksum = "078ea7b7c29a2b4df841a7f6ac8775ff6074020c6776d48491ce2268e068f972"
4333+dependencies = [
4334+ "unic-langid",
4335+]
4336+
28394337 [[package]]
28404338 name = "ipconfig"
28414339 version = "0.3.4"
@@ -2845,7 +4343,7 @@ dependencies = [
28454343 "socket2",
28464344 "widestring",
28474345 "windows-registry",
2848- "windows-result",
4346+ "windows-result 0.4.1",
28494347 "windows-sys 0.61.2",
28504348 ]
28514349
@@ -3030,7 +4528,7 @@ version = "1.0.1"
30304528 source = "registry+https://github.com/rust-lang/crates.io-index"
30314529 checksum = "1ae5f0c4405d1fbc9fb16ff422ca40620e93dc36c30ecaba0c2aee3992b7bd48"
30324530 dependencies = [
3033- "heck",
4531+ "heck 0.5.0",
30344532 "proc-macro2",
30354533 "quote",
30364534 "syn 2.0.119",
@@ -3072,7 +4570,7 @@ dependencies = [
30724570 "iroh-base",
30734571 "iroh-dns",
30744572 "iroh-metrics",
3075- "lru",
4573+ "lru 0.18.4",
30764574 "n0-error",
30774575 "n0-future",
30784576 "noq",
@@ -3195,10 +4693,12 @@ dependencies = [
31954693 "defmt",
31964694 "jiff-core",
31974695 "jiff-static",
4696+ "jiff-tzdb-platform",
31984697 "log",
31994698 "portable-atomic",
32004699 "portable-atomic-util",
32014700 "serde_core",
4701+ "windows-link 0.2.1",
32024702 ]
32034703
32044704 [[package]]
@@ -3222,6 +4722,21 @@ dependencies = [
32224722 "syn 2.0.119",
32234723 ]
32244724
4725+[[package]]
4726+name = "jiff-tzdb"
4727+version = "0.1.8"
4728+source = "registry+https://github.com/rust-lang/crates.io-index"
4729+checksum = "142bd39932ad231f10513df9ab62661fead8719872150b7ad02a2df79f4e141e"
4730+
4731+[[package]]
4732+name = "jiff-tzdb-platform"
4733+version = "0.1.3"
4734+source = "registry+https://github.com/rust-lang/crates.io-index"
4735+checksum = "875a5a69ac2bab1a891711cf5eccbec1ce0341ea805560dcd90b7a2e925132e8"
4736+dependencies = [
4737+ "jiff-tzdb",
4738+]
4739+
32254740 [[package]]
32264741 name = "jni"
32274742 version = "0.21.1"
@@ -3252,7 +4767,7 @@ dependencies = [
32524767 "simd_cesu8",
32534768 "thiserror 2.0.19",
32544769 "walkdir",
3255- "windows-link",
4770+ "windows-link 0.2.1",
32564771 ]
32574772
32584773 [[package]]
@@ -3313,6 +4828,15 @@ dependencies = [
33134828 "log",
33144829 ]
33154830
4831+[[package]]
4832+name = "jolt-cosmic"
4833+version = "0.1.0"
4834+dependencies = [
4835+ "jolt-abi",
4836+ "libcosmic",
4837+ "log",
4838+]
4839+
33164840 [[package]]
33174841 name = "jolt-moq"
33184842 version = "0.1.0"
@@ -3381,40 +4905,100 @@ dependencies = [
33814905 ]
33824906
33834907 [[package]]
3384-name = "khronos_api"
3385-version = "3.1.0"
4908+name = "kamadak-exif"
4909+version = "0.6.1"
33864910 source = "registry+https://github.com/rust-lang/crates.io-index"
3387-checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc"
4911+checksum = "1130d80c7374efad55a117d715a3af9368f0fa7a2c54573afc15a188cd984837"
4912+dependencies = [
4913+ "mutate_once",
4914+]
33884915
33894916 [[package]]
3390-name = "kio"
3391-version = "0.4.4"
4917+name = "keyboard-types"
4918+version = "0.8.3"
33924919 source = "registry+https://github.com/rust-lang/crates.io-index"
3393-checksum = "b31d86314938a5b2c2bea39f271424a3a2432d5b01412555a02181ecbb656af3"
4920+checksum = "0fbe853b403ae61a04233030ae8a79d94975281ed9770a1f9e246732b534b28d"
33944921 dependencies = [
3395- "smallvec",
4922+ "bitflags 2.13.1",
4923+ "serde",
33964924 ]
33974925
33984926 [[package]]
3399-name = "kqueue"
3400-version = "1.2.1"
4927+name = "khronos-egl"
4928+version = "6.0.0"
34014929 source = "registry+https://github.com/rust-lang/crates.io-index"
3402-checksum = "8d763e5b24120b4ddf50de6c92308156765aabfbbccebf401da7cff2d70a41ea"
4930+checksum = "6aae1df220ece3c0ada96b8153459b67eebe9ae9212258bb0134ae60416fdf76"
34034931 dependencies = [
3404- "kqueue-sys",
34054932 "libc",
4933+ "libloading",
4934+ "pkg-config",
34064935 ]
34074936
34084937 [[package]]
3409-name = "kqueue-sys"
3410-version = "1.1.2"
4938+name = "khronos_api"
4939+version = "3.1.0"
34114940 source = "registry+https://github.com/rust-lang/crates.io-index"
3412-checksum = "07293a4e297ac234359b510362495713f75ea345d5307140414f20c69ffeb087"
4941+checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc"
4942+
4943+[[package]]
4944+name = "kio"
4945+version = "0.4.4"
4946+source = "registry+https://github.com/rust-lang/crates.io-index"
4947+checksum = "b31d86314938a5b2c2bea39f271424a3a2432d5b01412555a02181ecbb656af3"
4948+dependencies = [
4949+ "smallvec",
4950+]
4951+
4952+[[package]]
4953+name = "known-folders"
4954+version = "1.4.2"
4955+source = "registry+https://github.com/rust-lang/crates.io-index"
4956+checksum = "7a1886916523694cd6ea3d175f03a1e5010699a2a4cc13696d83d7bea1d80638"
4957+dependencies = [
4958+ "windows-sys 0.59.0",
4959+]
4960+
4961+[[package]]
4962+name = "kqueue"
4963+version = "1.2.1"
4964+source = "registry+https://github.com/rust-lang/crates.io-index"
4965+checksum = "8d763e5b24120b4ddf50de6c92308156765aabfbbccebf401da7cff2d70a41ea"
4966+dependencies = [
4967+ "kqueue-sys",
4968+ "libc",
4969+]
4970+
4971+[[package]]
4972+name = "kqueue-sys"
4973+version = "1.1.2"
4974+source = "registry+https://github.com/rust-lang/crates.io-index"
4975+checksum = "07293a4e297ac234359b510362495713f75ea345d5307140414f20c69ffeb087"
34134976 dependencies = [
34144977 "bitflags 2.13.1",
34154978 "libc",
34164979 ]
34174980
4981+[[package]]
4982+name = "kurbo"
4983+version = "0.10.4"
4984+source = "registry+https://github.com/rust-lang/crates.io-index"
4985+checksum = "1618d4ebd923e97d67e7cd363d80aef35fe961005cbbbb3d2dad8bdd1bc63440"
4986+dependencies = [
4987+ "arrayvec",
4988+ "smallvec",
4989+]
4990+
4991+[[package]]
4992+name = "kurbo"
4993+version = "0.11.3"
4994+source = "registry+https://github.com/rust-lang/crates.io-index"
4995+checksum = "c62026ae44756f8a599ba21140f350303d4f08dcdcc71b5ad9c9bb8128c13c62"
4996+dependencies = [
4997+ "arrayvec",
4998+ "euclid",
4999+ "smallvec",
5000+]
5001+
34185002 [[package]]
34195003 name = "lazy_static"
34205004 version = "1.5.0"
@@ -3427,6 +5011,55 @@ version = "0.2.189"
34275011 source = "registry+https://github.com/rust-lang/crates.io-index"
34285012 checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2"
34295013
5014+[[package]]
5015+name = "libcosmic"
5016+version = "1.0.0"
5017+source = "git+https://github.com/pop-os/libcosmic?rev=a401af8b1c54a8abd393b8c5b7c8809402f83850#a401af8b1c54a8abd393b8c5b7c8809402f83850"
5018+dependencies = [
5019+ "apply",
5020+ "ashpd 0.12.3",
5021+ "auto_enums",
5022+ "build_helpers",
5023+ "cosmic-client-toolkit",
5024+ "cosmic-config",
5025+ "cosmic-freedesktop-icons",
5026+ "cosmic-settings-daemon",
5027+ "cosmic-theme",
5028+ "css-color",
5029+ "derive_setters",
5030+ "enumflags2",
5031+ "float-cmp 0.10.0",
5032+ "futures",
5033+ "i18n-embed",
5034+ "i18n-embed-fl",
5035+ "iced",
5036+ "iced_core",
5037+ "iced_futures",
5038+ "iced_renderer",
5039+ "iced_runtime",
5040+ "iced_tiny_skia",
5041+ "iced_wgpu",
5042+ "iced_widget",
5043+ "iced_winit",
5044+ "image",
5045+ "jiff",
5046+ "log",
5047+ "palette",
5048+ "phf",
5049+ "rfd",
5050+ "roxmltree",
5051+ "rust-embed",
5052+ "serde",
5053+ "slotmap",
5054+ "taffy",
5055+ "thiserror 2.0.19",
5056+ "tokio",
5057+ "tracing",
5058+ "unicode-segmentation",
5059+ "url",
5060+ "zbus",
5061+]
5062+
34305063 [[package]]
34315064 name = "libloading"
34325065 version = "0.8.9"
@@ -3434,7 +5067,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
34345067 checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55"
34355068 dependencies = [
34365069 "cfg-if",
3437- "windows-link",
5070+ "windows-link 0.2.1",
34385071 ]
34395072
34405073 [[package]]
@@ -3482,12 +5115,33 @@ dependencies = [
34825115 "system-deps",
34835116 ]
34845117
5118+[[package]]
5119+name = "lilt"
5120+version = "0.8.2"
5121+source = "registry+https://github.com/rust-lang/crates.io-index"
5122+checksum = "337d4c256f7d9f2dbd633891d48ace853efa5b1554122d9220b172ad9c03c3a9"
5123+dependencies = [
5124+ "web-time",
5125+]
5126+
5127+[[package]]
5128+name = "linebender_resource_handle"
5129+version = "0.1.1"
5130+source = "registry+https://github.com/rust-lang/crates.io-index"
5131+checksum = "d4a5ff6bcca6c4867b1c4fd4ef63e4db7436ef363e0ad7531d1558856bae64f4"
5132+
34855133 [[package]]
34865134 name = "linux-raw-sys"
34875135 version = "0.4.15"
34885136 source = "registry+https://github.com/rust-lang/crates.io-index"
34895137 checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab"
34905138
5139+[[package]]
5140+name = "linux-raw-sys"
5141+version = "0.6.5"
5142+source = "registry+https://github.com/rust-lang/crates.io-index"
5143+checksum = "2a385b1be4e5c3e362ad2ffa73c392e53f031eaa5b7d648e64cd87f27f6063d7"
5144+
34915145 [[package]]
34925146 name = "linux-raw-sys"
34935147 version = "0.12.1"
@@ -3500,6 +5154,12 @@ version = "0.8.2"
35005154 source = "registry+https://github.com/rust-lang/crates.io-index"
35015155 checksum = "92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0"
35025156
5157+[[package]]
5158+name = "litrs"
5159+version = "1.0.0"
5160+source = "registry+https://github.com/rust-lang/crates.io-index"
5161+checksum = "11d3d7f243d5c5a8b9bb5d6dd2b1602c0cb0b9db1621bafc7ed66e35ff9fe092"
5162+
35035163 [[package]]
35045164 name = "lock_api"
35055165 version = "0.4.14"
@@ -3528,6 +5188,12 @@ dependencies = [
35285188 "tracing-subscriber",
35295189 ]
35305190
5191+[[package]]
5192+name = "lru"
5193+version = "0.16.4"
5194+source = "registry+https://github.com/rust-lang/crates.io-index"
5195+checksum = "7f66e8d5d03f609abc3a39e6f08e4164ebf1447a732906d39eb9b99b7919ef39"
5196+
35315197 [[package]]
35325198 name = "lru"
35335199 version = "0.18.4"
@@ -3543,6 +5209,58 @@ version = "0.1.2"
35435209 source = "registry+https://github.com/rust-lang/crates.io-index"
35445210 checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154"
35455211
5212+[[package]]
5213+name = "lyon"
5214+version = "1.0.19"
5215+source = "registry+https://github.com/rust-lang/crates.io-index"
5216+checksum = "bd0578bdecb7d6d88987b8b2b1e3a4e2f81df9d0ece1078623324a567904e7b7"
5217+dependencies = [
5218+ "lyon_algorithms",
5219+ "lyon_tessellation",
5220+]
5221+
5222+[[package]]
5223+name = "lyon_algorithms"
5224+version = "1.0.21"
5225+source = "registry+https://github.com/rust-lang/crates.io-index"
5226+checksum = "cdfa8785f95e57914ddb35e3b59994aeba6f5e79e9cfd03da1c269f010f36009"
5227+dependencies = [
5228+ "lyon_path",
5229+ "num-traits",
5230+]
5231+
5232+[[package]]
5233+name = "lyon_geom"
5234+version = "1.0.19"
5235+source = "registry+https://github.com/rust-lang/crates.io-index"
5236+checksum = "4336502e29e32af93cf2dad2214ed6003c17ceb5bd499df77b1de663b9042b92"
5237+dependencies = [
5238+ "arrayvec",
5239+ "euclid",
5240+ "num-traits",
5241+]
5242+
5243+[[package]]
5244+name = "lyon_path"
5245+version = "1.0.19"
5246+source = "registry+https://github.com/rust-lang/crates.io-index"
5247+checksum = "5c463f9c428b7fc5ec885dcd39ce4aa61e29111d0e33483f6f98c74e89d8621e"
5248+dependencies = [
5249+ "lyon_geom",
5250+ "num-traits",
5251+]
5252+
5253+[[package]]
5254+name = "lyon_tessellation"
5255+version = "1.0.22"
5256+source = "registry+https://github.com/rust-lang/crates.io-index"
5257+checksum = "43b8dcf906637ecef61b3c0740c7a4e7f27caeb31257cfac0cc579ce15be6005"
5258+dependencies = [
5259+ "float_next_after",
5260+ "lyon_path",
5261+ "num-traits",
5262+]
5263+
35465264 [[package]]
35475265 name = "m3u8-rs"
35485266 version = "6.0.1"
@@ -3565,6 +5283,15 @@ version = "0.6.0"
35655283 source = "registry+https://github.com/rust-lang/crates.io-index"
35665284 checksum = "dae608c151f68243f2b000364e1f7b186d9c29845f7d2d85bd31b9ad77ad552b"
35675285
5286+[[package]]
5287+name = "malloc_buf"
5288+version = "0.0.6"
5289+source = "registry+https://github.com/rust-lang/crates.io-index"
5290+checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb"
5291+dependencies = [
5292+ "libc",
5293+]
5294+
35685295 [[package]]
35695296 name = "matchers"
35705297 version = "0.2.0"
@@ -3580,6 +5307,15 @@ version = "2.8.3"
35805307 source = "registry+https://github.com/rust-lang/crates.io-index"
35815308 checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98"
35825309
5310+[[package]]
5311+name = "memmap2"
5312+version = "0.8.0"
5313+source = "registry+https://github.com/rust-lang/crates.io-index"
5314+checksum = "43a5a03cefb0d953ec0be133036f14e109412fa594edc2f77227249db66cc3ed"
5315+dependencies = [
5316+ "libc",
5317+]
5318+
35835319 [[package]]
35845320 name = "memmap2"
35855321 version = "0.9.11"
@@ -3598,6 +5334,45 @@ dependencies = [
35985334 "autocfg",
35995335 ]
36005336
5337+[[package]]
5338+name = "metal"
5339+version = "0.33.0"
5340+source = "registry+https://github.com/rust-lang/crates.io-index"
5341+checksum = "c7047791b5bc903b8cd963014b355f71dc9864a9a0b727057676c1dcae5cbc15"
5342+dependencies = [
5343+ "bitflags 2.13.1",
5344+ "block",
5345+ "core-graphics-types 0.2.0",
5346+ "foreign-types",
5347+ "log",
5348+ "objc",
5349+ "paste",
5350+]
5351+
5352+[[package]]
5353+name = "mime"
5354+version = "0.1.0"
5355+source = "git+https://github.com/pop-os/window_clipboard.git?tag=sctk-0.20#f68595ee0e62fbd6589f4709b5aaa5c3c7ea5f6c"
5356+dependencies = [
5357+ "smithay-clipboard 0.8.0",
5358+]
5359+
5360+[[package]]
5361+name = "mime"
5362+version = "0.3.17"
5363+source = "registry+https://github.com/rust-lang/crates.io-index"
5364+checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
5365+
5366+[[package]]
5367+name = "mime_guess"
5368+version = "2.0.5"
5369+source = "registry+https://github.com/rust-lang/crates.io-index"
5370+checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e"
5371+dependencies = [
5372+ "mime 0.3.17",
5373+ "unicase",
5374+]
5375+
36015376 [[package]]
36025377 name = "minimal-lexical"
36035378 version = "0.2.1"
@@ -3859,6 +5634,12 @@ version = "0.6.1"
38595634 source = "registry+https://github.com/rust-lang/crates.io-index"
38605635 checksum = "83c1d679004305ea6e44eb53526da5816934a05b4b5b3b9a470e708a41d70a18"
38615636
5637+[[package]]
5638+name = "mutate_once"
5639+version = "0.1.2"
5640+source = "registry+https://github.com/rust-lang/crates.io-index"
5641+checksum = "13d2233c9842d08cfe13f9eac96e207ca6a2ea10b80259ebe8ad0268be27d2af"
5642+
38625643 [[package]]
38635644 name = "n0-error"
38645645 version = "1.0.1"
@@ -3913,6 +5694,32 @@ dependencies = [
39135694 "n0-future",
39145695 ]
39155696
5697+[[package]]
5698+name = "naga"
5699+version = "28.0.0"
5700+source = "registry+https://github.com/rust-lang/crates.io-index"
5701+checksum = "618f667225063219ddfc61251087db8a9aec3c3f0950c916b614e403486f1135"
5702+dependencies = [
5703+ "arrayvec",
5704+ "bit-set",
5705+ "bitflags 2.13.1",
5706+ "cfg-if",
5707+ "cfg_aliases 0.2.2",
5708+ "codespan-reporting",
5709+ "half",
5710+ "hashbrown 0.16.1",
5711+ "hexf-parse",
5712+ "indexmap 2.14.0",
5713+ "libm",
5714+ "log",
5715+ "num-traits",
5716+ "once_cell",
5717+ "rustc-hash 1.1.0",
5718+ "spirv",
5719+ "thiserror 2.0.19",
5720+ "unicode-ident",
5721+]
5722+
39165723 [[package]]
39175724 name = "nasm-rs"
39185725 version = "0.3.2"
@@ -4115,8 +5922,8 @@ dependencies = [
41155922 "tokio-util",
41165923 "tracing",
41175924 "web-sys",
4118- "windows",
4119- "windows-result",
5925+ "windows 0.62.2",
5926+ "windows-result 0.4.1",
41205927 "wmi",
41215928 ]
41225929
@@ -4366,6 +6173,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
43666173 checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
43676174 dependencies = [
43686175 "autocfg",
6176+ "libm",
43696177 ]
43706178
43716179 [[package]]
@@ -4409,6 +6217,26 @@ dependencies = [
44096217 "scuffle-workspace-hack",
44106218 ]
44116219
6220+[[package]]
6221+name = "objc"
6222+version = "0.2.7"
6223+source = "registry+https://github.com/rust-lang/crates.io-index"
6224+checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1"
6225+dependencies = [
6226+ "malloc_buf",
6227+]
6228+
6229+[[package]]
6230+name = "objc-foundation"
6231+version = "0.1.1"
6232+source = "registry+https://github.com/rust-lang/crates.io-index"
6233+checksum = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9"
6234+dependencies = [
6235+ "block",
6236+ "objc",
6237+ "objc_id",
6238+]
6239+
44126240 [[package]]
44136241 name = "objc-sys"
44146242 version = "0.3.5"
@@ -4457,6 +6285,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
44576285 checksum = "d49e936b501e5c5bf01fda3a9452ff86dc3ea98ad5f283e1455153142d97518c"
44586286 dependencies = [
44596287 "bitflags 2.13.1",
6288+ "block2 0.6.2",
44606289 "objc2 0.6.4",
44616290 "objc2-core-foundation",
44626291 "objc2-core-graphics",
@@ -4591,6 +6420,7 @@ checksum = "e022c9d066895efa1345f8e33e584b9f958da2fd4cd116792e15e07e4720a807"
45916420 dependencies = [
45926421 "bitflags 2.13.1",
45936422 "dispatch2",
6423+ "libc",
45946424 "objc2 0.6.4",
45956425 "objc2-core-foundation",
45966426 "objc2-io-surface",
@@ -4866,6 +6696,18 @@ dependencies = [
48666696 "objc2-user-notifications",
48676697 ]
48686698
6699+[[package]]
6700+name = "objc2-ui-kit"
6701+version = "0.3.2"
6702+source = "registry+https://github.com/rust-lang/crates.io-index"
6703+checksum = "d87d638e33c06f577498cbcc50491496a3ed4246998a7fbba7ccb98b1e7eab22"
6704+dependencies = [
6705+ "bitflags 2.13.1",
6706+ "objc2 0.6.4",
6707+ "objc2-core-foundation",
6708+ "objc2-foundation 0.3.2",
6709+]
6710+
48696711 [[package]]
48706712 name = "objc2-uniform-type-identifiers"
48716713 version = "0.2.2"
@@ -4890,6 +6732,15 @@ dependencies = [
48906732 "objc2-foundation 0.2.2",
48916733 ]
48926734
6735+[[package]]
6736+name = "objc_id"
6737+version = "0.1.1"
6738+source = "registry+https://github.com/rust-lang/crates.io-index"
6739+checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b"
6740+dependencies = [
6741+ "objc",
6742+]
6743+
48936744 [[package]]
48946745 name = "object"
48956746 version = "0.37.3"
@@ -4957,6 +6808,12 @@ version = "0.2.1"
49576808 source = "registry+https://github.com/rust-lang/crates.io-index"
49586809 checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe"
49596810
6811+[[package]]
6812+name = "option-ext"
6813+version = "0.2.0"
6814+source = "registry+https://github.com/rust-lang/crates.io-index"
6815+checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d"
6816+
49606817 [[package]]
49616818 name = "orbclient"
49626819 version = "0.3.55"
@@ -4968,58 +6825,132 @@ dependencies = [
49686825 ]
49696826
49706827 [[package]]
4971-name = "owned_ttf_parser"
4972-version = "0.25.1"
6828+name = "ordered-float"
6829+version = "5.5.0"
49736830 source = "registry+https://github.com/rust-lang/crates.io-index"
4974-checksum = "36820e9051aca1014ddc75770aab4d68bc1e9e632f0f5627c4086bc216fb583b"
6831+checksum = "8c7c9e0d9b23589f26070720bac724174bfec1083e82f7854cdd0267518343c0"
49756832 dependencies = [
4976- "ttf-parser",
6833+ "num-traits",
49776834 ]
49786835
49796836 [[package]]
4980-name = "papaya"
4981-version = "0.2.4"
6837+name = "ordered-stream"
6838+version = "0.2.0"
49826839 source = "registry+https://github.com/rust-lang/crates.io-index"
4983-checksum = "997ee03cd38c01469a7046643714f0ad28880bcb9e6679ff0666e24817ca19b7"
6840+checksum = "9aa2b01e1d916879f73a53d01d1d6cee68adbb31d6d9177a8cfce093cced1d50"
49846841 dependencies = [
4985- "equivalent",
4986- "seize",
6842+ "futures-core",
6843+ "pin-project-lite",
49876844 ]
49886845
49896846 [[package]]
4990-name = "parking"
4991-version = "2.2.1"
6847+name = "ouroboros"
6848+version = "0.18.5"
49926849 source = "registry+https://github.com/rust-lang/crates.io-index"
4993-checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba"
6850+checksum = "1e0f050db9c44b97a94723127e6be766ac5c340c48f2c4bb3ffa11713744be59"
6851+dependencies = [
6852+ "aliasable",
6853+ "ouroboros_macro",
6854+ "static_assertions",
6855+]
49946856
49956857 [[package]]
4996-name = "parking_lot"
4997-version = "0.12.5"
6858+name = "ouroboros_macro"
6859+version = "0.18.5"
49986860 source = "registry+https://github.com/rust-lang/crates.io-index"
4999-checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a"
6861+checksum = "3c7028bdd3d43083f6d8d4d5187680d0d3560d54df4cc9d752005268b41e64d0"
50006862 dependencies = [
5001- "lock_api",
5002- "parking_lot_core",
6863+ "heck 0.4.1",
6864+ "proc-macro2",
6865+ "proc-macro2-diagnostics",
6866+ "quote",
6867+ "syn 2.0.119",
50036868 ]
50046869
50056870 [[package]]
5006-name = "parking_lot_core"
5007-version = "0.9.12"
6871+name = "owned_ttf_parser"
6872+version = "0.25.1"
50086873 source = "registry+https://github.com/rust-lang/crates.io-index"
5009-checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1"
6874+checksum = "36820e9051aca1014ddc75770aab4d68bc1e9e632f0f5627c4086bc216fb583b"
50106875 dependencies = [
5011- "backtrace",
5012- "cfg-if",
5013- "libc",
5014- "petgraph",
5015- "redox_syscall 0.5.18",
5016- "smallvec",
5017- "windows-link",
6876+ "ttf-parser",
50186877 ]
50196878
50206879 [[package]]
5021-name = "paste"
5022-version = "1.0.15"
6880+name = "palette"
6881+version = "0.7.7"
6882+source = "registry+https://github.com/rust-lang/crates.io-index"
6883+checksum = "ddeed8580d347d2abf3dcf06a5f0b3dc020258338526b277847cd4248a70fc64"
6884+dependencies = [
6885+ "approx",
6886+ "palette_derive",
6887+ "palette_math",
6888+ "phf",
6889+ "serde",
6890+]
6891+
6892+[[package]]
6893+name = "palette_derive"
6894+version = "0.7.7"
6895+source = "registry+https://github.com/rust-lang/crates.io-index"
6896+checksum = "88537020289b719d81be994ccf1bbf4990f477e2f69ee52fe3e45f43a02e56be"
6897+dependencies = [
6898+ "by_address",
6899+ "proc-macro2",
6900+ "quote",
6901+ "syn 2.0.119",
6902+]
6903+
6904+[[package]]
6905+name = "palette_math"
6906+version = "0.7.7"
6907+source = "registry+https://github.com/rust-lang/crates.io-index"
6908+checksum = "6e6eb142958d64335fb0e345c5b9ead2ecd6fc438c307e9d7d3c4fd428dbaf12"
6909+
6910+[[package]]
6911+name = "papaya"
6912+version = "0.2.4"
6913+source = "registry+https://github.com/rust-lang/crates.io-index"
6914+checksum = "997ee03cd38c01469a7046643714f0ad28880bcb9e6679ff0666e24817ca19b7"
6915+dependencies = [
6916+ "equivalent",
6917+ "seize",
6918+]
6919+
6920+[[package]]
6921+name = "parking"
6922+version = "2.2.1"
6923+source = "registry+https://github.com/rust-lang/crates.io-index"
6924+checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba"
6925+
6926+[[package]]
6927+name = "parking_lot"
6928+version = "0.12.5"
6929+source = "registry+https://github.com/rust-lang/crates.io-index"
6930+checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a"
6931+dependencies = [
6932+ "lock_api",
6933+ "parking_lot_core",
6934+]
6935+
6936+[[package]]
6937+name = "parking_lot_core"
6938+version = "0.9.12"
6939+source = "registry+https://github.com/rust-lang/crates.io-index"
6940+checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1"
6941+dependencies = [
6942+ "backtrace",
6943+ "cfg-if",
6944+ "libc",
6945+ "petgraph",
6946+ "redox_syscall 0.5.18",
6947+ "smallvec",
6948+ "windows-link 0.2.1",
6949+]
6950+
6951+[[package]]
6952+name = "paste"
6953+version = "1.0.15"
50236954 source = "registry+https://github.com/rust-lang/crates.io-index"
50246955 checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a"
50256956
@@ -5064,6 +6995,51 @@ dependencies = [
50646995 "rustc_version",
50656996 ]
50666997
6998+[[package]]
6999+name = "phf"
7000+version = "0.13.1"
7001+source = "registry+https://github.com/rust-lang/crates.io-index"
7002+checksum = "c1562dc717473dbaa4c1f85a36410e03c047b2e7df7f45ee938fbef64ae7fadf"
7003+dependencies = [
7004+ "phf_macros",
7005+ "phf_shared",
7006+ "serde",
7007+]
7008+
7009+[[package]]
7010+name = "phf_generator"
7011+version = "0.13.1"
7012+source = "registry+https://github.com/rust-lang/crates.io-index"
7013+checksum = "135ace3a761e564ec88c03a77317a7c6b80bb7f7135ef2544dbe054243b89737"
7014+dependencies = [
7015+ "fastrand",
7016+ "phf_shared",
7017+]
7018+
7019+[[package]]
7020+name = "phf_macros"
7021+version = "0.13.1"
7022+source = "registry+https://github.com/rust-lang/crates.io-index"
7023+checksum = "812f032b54b1e759ccd5f8b6677695d5268c588701effba24601f6932f8269ef"
7024+dependencies = [
7025+ "phf_generator",
7026+ "phf_shared",
7027+ "proc-macro2",
7028+ "quote",
7029+ "syn 2.0.119",
7030+ "uncased",
7031+]
7032+
7033+[[package]]
7034+name = "phf_shared"
7035+version = "0.13.1"
7036+source = "registry+https://github.com/rust-lang/crates.io-index"
7037+checksum = "e57fef6bc5981e38c2ce2d63bfa546861309f875b8a75f092d1d54ae2d64f266"
7038+dependencies = [
7039+ "siphasher",
7040+ "uncased",
7041+]
7042+
50677043 [[package]]
50687044 name = "pic-scale"
50697045 version = "0.6.15"
@@ -5077,6 +7053,12 @@ dependencies = [
50777053 "rayon",
50787054 ]
50797055
7056+[[package]]
7057+name = "pico-args"
7058+version = "0.5.0"
7059+source = "registry+https://github.com/rust-lang/crates.io-index"
7060+checksum = "5be167a7af36ee22fe3115051bc51f6e6c7054c9348e28deb4f49bd6f705a315"
7061+
50807062 [[package]]
50817063 name = "pin-project"
50827064 version = "1.1.13"
@@ -5109,6 +7091,17 @@ version = "0.1.0"
51097091 source = "registry+https://github.com/rust-lang/crates.io-index"
51107092 checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
51117093
7094+[[package]]
7095+name = "piper"
7096+version = "0.2.5"
7097+source = "registry+https://github.com/rust-lang/crates.io-index"
7098+checksum = "c835479a4443ded371d6c535cbfd8d31ad92c5d23ae9770a61bc155e4992a3c1"
7099+dependencies = [
7100+ "atomic-waker",
7101+ "fastrand",
7102+ "futures-io",
7103+]
7104+
51127105 [[package]]
51137106 name = "pipewire"
51147107 version = "0.10.1"
@@ -5209,6 +7202,12 @@ dependencies = [
52097202 "windows-sys 0.61.2",
52107203 ]
52117204
7205+[[package]]
7206+name = "pollster"
7207+version = "0.4.0"
7208+source = "registry+https://github.com/rust-lang/crates.io-index"
7209+checksum = "2f3a9f18d041e6d0e102a0a46750538147e5e8992d3b4873aaafee2520b00ce3"
7210+
52127211 [[package]]
52137212 name = "polyval"
52147213 version = "0.6.2"
@@ -5328,6 +7327,12 @@ dependencies = [
53287327 "num-traits",
53297328 ]
53307329
7330+[[package]]
7331+name = "presser"
7332+version = "0.3.1"
7333+source = "registry+https://github.com/rust-lang/crates.io-index"
7334+checksum = "e8cf8e6a8aa66ce33f63993ffc4ea4271eb5b0530a9002db8455ea6050c77bfa"
7335+
53317336 [[package]]
53327337 name = "prettyplease"
53337338 version = "0.2.37"
@@ -5356,6 +7361,28 @@ dependencies = [
53567361 "toml_edit",
53577362 ]
53587363
7364+[[package]]
7365+name = "proc-macro-error-attr3"
7366+version = "3.1.1"
7367+source = "registry+https://github.com/rust-lang/crates.io-index"
7368+checksum = "9e564d14133360e1ae169ffde5da25881b5fa47261665b8e5713c212c27799da"
7369+dependencies = [
7370+ "proc-macro2",
7371+ "quote",
7372+]
7373+
7374+[[package]]
7375+name = "proc-macro-error3"
7376+version = "3.1.1"
7377+source = "registry+https://github.com/rust-lang/crates.io-index"
7378+checksum = "8f0d4471b3436c22106b21913b1dda531558918ae9b7ec55d58aa84b43552233"
7379+dependencies = [
7380+ "proc-macro-error-attr3",
7381+ "proc-macro2",
7382+ "quote",
7383+ "syn 3.0.3",
7384+]
7385+
53597386 [[package]]
53607387 name = "proc-macro2"
53617388 version = "1.0.107"
@@ -5365,6 +7392,19 @@ dependencies = [
53657392 "unicode-ident",
53667393 ]
53677394
7395+[[package]]
7396+name = "proc-macro2-diagnostics"
7397+version = "0.10.1"
7398+source = "registry+https://github.com/rust-lang/crates.io-index"
7399+checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8"
7400+dependencies = [
7401+ "proc-macro2",
7402+ "quote",
7403+ "syn 2.0.119",
7404+ "version_check",
7405+ "yansi",
7406+]
7407+
53687408 [[package]]
53697409 name = "profiling"
53707410 version = "1.0.18"
@@ -5575,6 +7615,18 @@ dependencies = [
55757615 "rand_core 0.10.1",
55767616 ]
55777617
7618+[[package]]
7619+name = "range-alloc"
7620+version = "0.1.5"
7621+source = "registry+https://github.com/rust-lang/crates.io-index"
7622+checksum = "ca45419789ae5a7899559e9512e58ca889e41f04f1f2445e9f4b290ceccd1d08"
7623+
7624+[[package]]
7625+name = "rangemap"
7626+version = "1.8.0"
7627+source = "registry+https://github.com/rust-lang/crates.io-index"
7628+checksum = "a611d15b50743feb4c76b7d03edcb0e64f399c26961e4efe6975bc398be6aa3d"
7629+
55787630 [[package]]
55797631 name = "raw-window-handle"
55807632 version = "0.6.2"
@@ -5614,6 +7666,28 @@ dependencies = [
56147666 "yasna",
56157667 ]
56167668
7669+[[package]]
7670+name = "read-fonts"
7671+version = "0.37.0"
7672+source = "registry+https://github.com/rust-lang/crates.io-index"
7673+checksum = "7b634fabf032fab15307ffd272149b622260f55974d9fad689292a5d33df02e5"
7674+dependencies = [
7675+ "bytemuck",
7676+ "core_maths",
7677+ "font-types 0.11.3",
7678+]
7679+
7680+[[package]]
7681+name = "read-fonts"
7682+version = "0.41.0"
7683+source = "registry+https://github.com/rust-lang/crates.io-index"
7684+checksum = "046a7d674daf459825b32f5062056d6882db0d2f5a479fbd76ccfc870ac18709"
7685+dependencies = [
7686+ "bytemuck",
7687+ "font-types 0.12.5",
7688+ "once_cell",
7689+]
7690+
56177691 [[package]]
56187692 name = "realfft"
56197693 version = "3.5.0"
@@ -5623,6 +7697,16 @@ dependencies = [
56237697 "rustfft",
56247698 ]
56257699
7700+[[package]]
7701+name = "redox_event"
7702+version = "0.4.8"
7703+source = "registry+https://github.com/rust-lang/crates.io-index"
7704+checksum = "c5018d583d6d2f5499352aea8d177e9067d1eb03ab17c78169d5ba7a30001b15"
7705+dependencies = [
7706+ "bitflags 2.13.1",
7707+ "libredox",
7708+]
7709+
56267710 [[package]]
56277711 name = "redox_syscall"
56287712 version = "0.4.1"
@@ -5650,6 +7734,17 @@ dependencies = [
56507734 "bitflags 2.13.1",
56517735 ]
56527736
7737+[[package]]
7738+name = "redox_users"
7739+version = "0.5.2"
7740+source = "registry+https://github.com/rust-lang/crates.io-index"
7741+checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac"
7742+dependencies = [
7743+ "getrandom 0.2.17",
7744+ "libredox",
7745+ "thiserror 2.0.19",
7746+]
7747+
56537748 [[package]]
56547749 name = "ref-cast"
56557750 version = "1.0.26"
@@ -5699,6 +7794,12 @@ version = "0.8.11"
56997794 source = "registry+https://github.com/rust-lang/crates.io-index"
57007795 checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4"
57017796
7797+[[package]]
7798+name = "renderdoc-sys"
7799+version = "1.1.0"
7800+source = "registry+https://github.com/rust-lang/crates.io-index"
7801+checksum = "19b30a45b0cd0bcca8037f3d0dc3421eaf95327a17cad11964fb8179b4fc4832"
7802+
57027803 [[package]]
57037804 name = "reqwest"
57047805 version = "0.12.28"
@@ -5780,6 +7881,56 @@ version = "0.7.6"
57807881 source = "registry+https://github.com/rust-lang/crates.io-index"
57817882 checksum = "1e061d1b48cb8d38042de4ae0a7a6401009d6143dc80d2e2d6f31f0bdd6470c7"
57827883
7884+[[package]]
7885+name = "resvg"
7886+version = "0.45.1"
7887+source = "registry+https://github.com/rust-lang/crates.io-index"
7888+checksum = "a8928798c0a55e03c9ca6c4c6846f76377427d2c1e1f7e6de3c06ae57942df43"
7889+dependencies = [
7890+ "gif",
7891+ "image-webp",
7892+ "log",
7893+ "pico-args",
7894+ "rgb",
7895+ "svgtypes",
7896+ "tiny-skia 0.11.4",
7897+ "usvg",
7898+ "zune-jpeg 0.4.21",
7899+]
7900+
7901+[[package]]
7902+name = "rfd"
7903+version = "0.16.0"
7904+source = "registry+https://github.com/rust-lang/crates.io-index"
7905+checksum = "a15ad77d9e70a92437d8f74c35d99b4e4691128df018833e99f90bcd36152672"
7906+dependencies = [
7907+ "ashpd 0.11.1",
7908+ "block2 0.6.2",
7909+ "dispatch2",
7910+ "js-sys",
7911+ "log",
7912+ "objc2 0.6.4",
7913+ "objc2-app-kit 0.3.2",
7914+ "objc2-core-foundation",
7915+ "objc2-foundation 0.3.2",
7916+ "pollster",
7917+ "raw-window-handle",
7918+ "urlencoding",
7919+ "wasm-bindgen",
7920+ "wasm-bindgen-futures",
7921+ "web-sys",
7922+ "windows-sys 0.60.2",
7923+]
7924+
7925+[[package]]
7926+name = "rgb"
7927+version = "0.8.53"
7928+source = "registry+https://github.com/rust-lang/crates.io-index"
7929+checksum = "47b34b781b31e5d73e9fbc8689c70551fd1ade9a19e3e28cfec8580a79290cc4"
7930+dependencies = [
7931+ "bytemuck",
7932+]
7933+
57837934 [[package]]
57847935 name = "ring"
57857936 version = "0.17.14"
@@ -5805,6 +7956,26 @@ dependencies = [
58057956 "portable-atomic-util",
58067957 ]
58077958
7959+[[package]]
7960+name = "ron"
7961+version = "0.12.2"
7962+source = "registry+https://github.com/rust-lang/crates.io-index"
7963+checksum = "81116b9531d61eabc41aeb228e4b6b2435bcca3233b98cf3b3077d4e6e9debb3"
7964+dependencies = [
7965+ "bitflags 2.13.1",
7966+ "once_cell",
7967+ "serde",
7968+ "serde_derive",
7969+ "typeid",
7970+ "unicode-ident",
7971+]
7972+
7973+[[package]]
7974+name = "roxmltree"
7975+version = "0.20.0"
7976+source = "registry+https://github.com/rust-lang/crates.io-index"
7977+checksum = "6c20b6793b5c2fa6553b250154b78d6d0db37e72700ae35fad9387a46f487c97"
7978+
58087979 [[package]]
58097980 name = "rpds"
58107981 version = "1.2.1"
@@ -5844,6 +8015,41 @@ dependencies = [
58448015 "windowfunctions",
58458016 ]
58468017
8018+[[package]]
8019+name = "rust-embed"
8020+version = "8.12.0"
8021+source = "registry+https://github.com/rust-lang/crates.io-index"
8022+checksum = "e9e7760e252aaba7b09f4be00e36476cf585bdb68a53552ac954cdf504ab4bc9"
8023+dependencies = [
8024+ "rust-embed-impl",
8025+ "rust-embed-utils",
8026+ "walkdir",
8027+]
8028+
8029+[[package]]
8030+name = "rust-embed-impl"
8031+version = "8.12.0"
8032+source = "registry+https://github.com/rust-lang/crates.io-index"
8033+checksum = "3bcfc4d6f53af43755f7a723e4b6b8794fcce052a178dd8c6c1dadc5f5343097"
8034+dependencies = [
8035+ "mime_guess",
8036+ "proc-macro2",
8037+ "quote",
8038+ "rust-embed-utils",
8039+ "syn 2.0.119",
8040+ "walkdir",
8041+]
8042+
8043+[[package]]
8044+name = "rust-embed-utils"
8045+version = "8.12.0"
8046+source = "registry+https://github.com/rust-lang/crates.io-index"
8047+checksum = "42ffa149f6aa81b58a5b3011d01a857c4ed12c7a732d2c51947a4c7c692185f0"
8048+dependencies = [
8049+ "sha2",
8050+ "walkdir",
8051+]
8052+
58478053 [[package]]
58488054 name = "rustc-demangle"
58498055 version = "0.1.28"
@@ -6051,6 +8257,24 @@ dependencies = [
60518257 "yuv",
60528258 ]
60538259
8260+[[package]]
8261+name = "rustybuzz"
8262+version = "0.20.1"
8263+source = "registry+https://github.com/rust-lang/crates.io-index"
8264+checksum = "fd3c7c96f8a08ee34eff8857b11b49b07d71d1c3f4e88f8a88d4c9e9f90b1702"
8265+dependencies = [
8266+ "bitflags 2.13.1",
8267+ "bytemuck",
8268+ "core_maths",
8269+ "log",
8270+ "smallvec",
8271+ "ttf-parser",
8272+ "unicode-bidi-mirroring",
8273+ "unicode-ccc",
8274+ "unicode-properties",
8275+ "unicode-script",
8276+]
8277+
60548278 [[package]]
60558279 name = "ryu"
60568280 version = "1.0.23"
@@ -6128,14 +8352,27 @@ checksum = "b6277f0217056f77f1d8f49f2950ac6c278c0d607c45f5ee99328d792ede24ec"
61288352 dependencies = [
61298353 "ab_glyph",
61308354 "log",
6131- "memmap2",
8355+ "memmap2 0.9.11",
61328356 "smithay-client-toolkit 0.19.2",
6133- "tiny-skia",
8357+ "tiny-skia 0.11.4",
61348358 ]
61358359
61368360 [[package]]
6137-name = "scuffle-av1"
6138-version = "0.1.4"
8361+name = "sctk-adwaita"
8362+version = "0.11.1"
8363+source = "registry+https://github.com/rust-lang/crates.io-index"
8364+checksum = "ea2a4360b9abcdcee43809e6fc11d6d61ca5d25734026a8fc46c2883eea3f13f"
8365+dependencies = [
8366+ "ab_glyph",
8367+ "log",
8368+ "memmap2 0.9.11",
8369+ "smithay-client-toolkit 0.20.0",
8370+ "tiny-skia 0.12.0",
8371+]
8372+
8373+[[package]]
8374+name = "scuffle-av1"
8375+version = "0.1.4"
61398376 source = "registry+https://github.com/rust-lang/crates.io-index"
61408377 checksum = "028eddc8b17fe9dba817b238c56d3acf03748bdbed4c35783cfb93857ef15955"
61418378 dependencies = [
@@ -6221,6 +8458,12 @@ dependencies = [
62218458 "windows-sys 0.61.2",
62228459 ]
62238460
8461+[[package]]
8462+name = "self_cell"
8463+version = "1.3.0"
8464+source = "registry+https://github.com/rust-lang/crates.io-index"
8465+checksum = "2ab42ca02749e120097e328d91d415325bdf43b1c72c4c8badf37375fe40a813"
8466+
62248467 [[package]]
62258468 name = "semver"
62268469 version = "1.0.28"
@@ -6288,6 +8531,7 @@ version = "1.0.151"
62888531 source = "registry+https://github.com/rust-lang/crates.io-index"
62898532 checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14"
62908533 dependencies = [
8534+ "indexmap 2.14.0",
62918535 "itoa",
62928536 "memchr",
62938537 "serde",
@@ -6295,6 +8539,17 @@ dependencies = [
62958539 "zmij",
62968540 ]
62978541
8542+[[package]]
8543+name = "serde_repr"
8544+version = "0.1.21"
8545+source = "registry+https://github.com/rust-lang/crates.io-index"
8546+checksum = "8d3b1629de253c70a0508c3899572da79ca359fdab27c7920ff00406df418906"
8547+dependencies = [
8548+ "proc-macro2",
8549+ "quote",
8550+ "syn 3.0.3",
8551+]
8552+
62988553 [[package]]
62998554 name = "serde_spanned"
63008555 version = "1.1.1"
@@ -6342,7 +8597,7 @@ version = "3.21.0"
63428597 source = "registry+https://github.com/rust-lang/crates.io-index"
63438598 checksum = "84d57bc0c8b9a17920c178daa6bb924850d54a9c97ab45194bb8c17ad66bb660"
63448599 dependencies = [
6345- "darling",
8600+ "darling 0.23.0",
63468601 "proc-macro2",
63478602 "quote",
63488603 "syn 2.0.119",
@@ -6489,12 +8744,41 @@ dependencies = [
64898744 "bitflags 2.13.1",
64908745 ]
64918746
8747+[[package]]
8748+name = "simplecss"
8749+version = "0.2.2"
8750+source = "registry+https://github.com/rust-lang/crates.io-index"
8751+checksum = "7a9c6883ca9c3c7c90e888de77b7a5c849c779d25d74a1269b0218b14e8b136c"
8752+dependencies = [
8753+ "log",
8754+]
8755+
64928756 [[package]]
64938757 name = "siphasher"
64948758 version = "1.0.3"
64958759 source = "registry+https://github.com/rust-lang/crates.io-index"
64968760 checksum = "8ee5873ec9cce0195efcb7a4e9507a04cd49aec9c83d0389df45b1ef7ba2e649"
64978761
8762+[[package]]
8763+name = "skrifa"
8764+version = "0.40.0"
8765+source = "registry+https://github.com/rust-lang/crates.io-index"
8766+checksum = "7fbdfe3d2475fbd7ddd1f3e5cf8288a30eb3e5f95832829570cd88115a7434ac"
8767+dependencies = [
8768+ "bytemuck",
8769+ "read-fonts 0.37.0",
8770+]
8771+
8772+[[package]]
8773+name = "skrifa"
8774+version = "0.44.0"
8775+source = "registry+https://github.com/rust-lang/crates.io-index"
8776+checksum = "819ab7d62b1d3e72d9d9dea5650bac30424f9111364bb94928dbf5ecad1baa68"
8777+dependencies = [
8778+ "bytemuck",
8779+ "read-fonts 0.41.0",
8780+]
8781+
64988782 [[package]]
64998783 name = "slab"
65008784 version = "0.4.12"
@@ -6528,7 +8812,7 @@ dependencies = [
65288812 "cursor-icon",
65298813 "libc",
65308814 "log",
6531- "memmap2",
8815+ "memmap2 0.9.11",
65328816 "rustix 0.38.44",
65338817 "thiserror 1.0.69",
65348818 "wayland-backend",
@@ -6548,12 +8832,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
65488832 checksum = "0512da38f5e2b31201a93524adb8d3136276fa4fe4aafab4e1f727a82b534cc0"
65498833 dependencies = [
65508834 "bitflags 2.13.1",
8835+ "bytemuck",
65518836 "calloop 0.14.4",
65528837 "calloop-wayland-source 0.4.1",
65538838 "cursor-icon",
65548839 "libc",
65558840 "log",
6556- "memmap2",
8841+ "memmap2 0.9.11",
8842+ "pkg-config",
65578843 "rustix 1.1.4",
65588844 "thiserror 2.0.19",
65598845 "wayland-backend",
@@ -6565,6 +8851,7 @@ dependencies = [
65658851 "wayland-protocols-misc",
65668852 "wayland-protocols-wlr",
65678853 "wayland-scanner",
8854+ "xkbcommon 0.8.0",
65688855 "xkeysym",
65698856 ]
65708857
@@ -6579,6 +8866,17 @@ dependencies = [
65798866 "wayland-backend",
65808867 ]
65818868
8869+[[package]]
8870+name = "smithay-clipboard"
8871+version = "0.8.0"
8872+source = "git+https://github.com/pop-os/smithay-clipboard?tag=sctk-0.20#859b02c88f45c554049a67c6ddeec1692ce0e20b"
8873+dependencies = [
8874+ "libc",
8875+ "raw-window-handle",
8876+ "smithay-client-toolkit 0.20.0",
8877+ "wayland-backend",
8878+]
8879+
65828880 [[package]]
65838881 name = "smol_str"
65848882 version = "0.2.2"
@@ -6588,6 +8886,16 @@ dependencies = [
65888886 "serde",
65898887 ]
65908888
8889+[[package]]
8890+name = "smol_str"
8891+version = "0.3.6"
8892+source = "registry+https://github.com/rust-lang/crates.io-index"
8893+checksum = "4aaa7368fcf4852a4c2dd92df0cace6a71f2091ca0a23391ce7f3a31833f1523"
8894+dependencies = [
8895+ "borsh",
8896+ "serde_core",
8897+]
8898+
65918899 [[package]]
65928900 name = "socket2"
65938901 version = "0.6.5"
@@ -6598,6 +8906,36 @@ dependencies = [
65988906 "windows-sys 0.61.2",
65998907 ]
66008908
8909+[[package]]
8910+name = "softbuffer"
8911+version = "0.4.1"
8912+source = "git+https://github.com/pop-os/softbuffer?tag=cosmic-4.0#c2b2c19ddb38ff17495643699f97cb1f2064a1be"
8913+dependencies = [
8914+ "as-raw-xcb-connection",
8915+ "bytemuck",
8916+ "cfg_aliases 0.2.2",
8917+ "cocoa",
8918+ "core-graphics",
8919+ "drm",
8920+ "fastrand",
8921+ "foreign-types",
8922+ "js-sys",
8923+ "log",
8924+ "memmap2 0.9.11",
8925+ "objc",
8926+ "raw-window-handle",
8927+ "redox_syscall 0.5.18",
8928+ "rustix 0.38.44",
8929+ "tiny-xlib",
8930+ "wasm-bindgen",
8931+ "wayland-backend",
8932+ "wayland-client",
8933+ "wayland-sys",
8934+ "web-sys",
8935+ "windows-sys 0.52.0",
8936+ "x11rb",
8937+]
8938+
66018939 [[package]]
66028940 name = "sonora"
66038941 version = "0.1.0"
@@ -6703,6 +9041,15 @@ version = "0.10.1"
67039041 source = "registry+https://github.com/rust-lang/crates.io-index"
67049042 checksum = "023a211cb3138dbc438680b32560ad89f699977624c9f8dbb95a47d5b4c07dd3"
67059043
9044+[[package]]
9045+name = "spirv"
9046+version = "0.3.0+sdk-1.3.268.0"
9047+source = "registry+https://github.com/rust-lang/crates.io-index"
9048+checksum = "eda41003dc44290527a59b13432d4a0379379fa074b70174882adfbdfd917844"
9049+dependencies = [
9050+ "bitflags 2.13.1",
9051+]
9052+
67069053 [[package]]
67079054 name = "spki"
67089055 version = "0.8.0"
@@ -6719,6 +9066,12 @@ version = "1.2.1"
67199066 source = "registry+https://github.com/rust-lang/crates.io-index"
67209067 checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596"
67219068
9069+[[package]]
9070+name = "static_assertions"
9071+version = "1.1.0"
9072+source = "registry+https://github.com/rust-lang/crates.io-index"
9073+checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
9074+
67229075 [[package]]
67239076 name = "strength_reduce"
67249077 version = "0.2.4"
@@ -6730,6 +9083,9 @@ name = "strict-num"
67309083 version = "0.1.1"
67319084 source = "registry+https://github.com/rust-lang/crates.io-index"
67329085 checksum = "6637bab7722d379c8b41ba849228d680cc12d0a45ba1fa2b48f2a30577a06731"
9086+dependencies = [
9087+ "float-cmp 0.9.0",
9088+]
67339089
67349090 [[package]]
67359091 name = "strsim"
@@ -6752,7 +9108,7 @@ version = "0.28.0"
67529108 source = "registry+https://github.com/rust-lang/crates.io-index"
67539109 checksum = "ab85eea0270ee17587ed4156089e10b9e6880ee688791d45a905f5b1ca36f664"
67549110 dependencies = [
6755- "heck",
9111+ "heck 0.5.0",
67569112 "proc-macro2",
67579113 "quote",
67589114 "syn 2.0.119",
@@ -6764,6 +9120,33 @@ version = "2.6.1"
67649120 source = "registry+https://github.com/rust-lang/crates.io-index"
67659121 checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292"
67669122
9123+[[package]]
9124+name = "svg_fmt"
9125+version = "0.4.5"
9126+source = "registry+https://github.com/rust-lang/crates.io-index"
9127+checksum = "0193cc4331cfd2f3d2011ef287590868599a2f33c3e69bc22c1a3d3acf9e02fb"
9128+
9129+[[package]]
9130+name = "svgtypes"
9131+version = "0.15.3"
9132+source = "registry+https://github.com/rust-lang/crates.io-index"
9133+checksum = "68c7541fff44b35860c1a7a47a7cadf3e4a304c457b58f9870d9706ece028afc"
9134+dependencies = [
9135+ "kurbo 0.11.3",
9136+ "siphasher",
9137+]
9138+
9139+[[package]]
9140+name = "swash"
9141+version = "0.2.10"
9142+source = "registry+https://github.com/rust-lang/crates.io-index"
9143+checksum = "6c2499c2d826531388872b2268718aed907a39bd785ab0dcfe57fab26283f92e"
9144+dependencies = [
9145+ "skrifa 0.44.0",
9146+ "yazi",
9147+ "zeno",
9148+]
9149+
67679150 [[package]]
67689151 name = "symphonia"
67699152 version = "0.5.5"
@@ -6890,6 +9273,15 @@ dependencies = [
68909273 "syn 2.0.119",
68919274 ]
68929275
9276+[[package]]
9277+name = "sys-locale"
9278+version = "0.3.2"
9279+source = "registry+https://github.com/rust-lang/crates.io-index"
9280+checksum = "8eab9a99a024a169fe8a903cf9d4a3b3601109bcc13bd9e3c6fff259138626c4"
9281+dependencies = [
9282+ "libc",
9283+]
9284+
68939285 [[package]]
68949286 name = "system-configuration"
68959287 version = "0.7.0"
@@ -6918,12 +9310,24 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
69189310 checksum = "396a35feb67335377e0251fcbc1092fc85c484bd4e3a7a54319399da127796e7"
69199311 dependencies = [
69209312 "cfg-expr",
6921- "heck",
9313+ "heck 0.5.0",
69229314 "pkg-config",
6923- "toml",
9315+ "toml 1.1.4+spec-1.1.0",
69249316 "version-compare",
69259317 ]
69269318
9319+[[package]]
9320+name = "taffy"
9321+version = "0.9.2"
9322+source = "registry+https://github.com/rust-lang/crates.io-index"
9323+checksum = "41ba83ebaf2954d31d05d67340fd46cebe99da2b7133b0dd68d70c65473a437b"
9324+dependencies = [
9325+ "arrayvec",
9326+ "grid",
9327+ "serde",
9328+ "slotmap",
9329+]
9330+
69279331 [[package]]
69289332 name = "tagptr"
69299333 version = "0.2.0"
@@ -6936,6 +9340,28 @@ version = "0.13.5"
69369340 source = "registry+https://github.com/rust-lang/crates.io-index"
69379341 checksum = "adb6935a6f5c20170eeceb1a3835a49e12e19d792f6dd344ccc76a985ca5a6ca"
69389342
9343+[[package]]
9344+name = "tempfile"
9345+version = "3.27.0"
9346+source = "registry+https://github.com/rust-lang/crates.io-index"
9347+checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd"
9348+dependencies = [
9349+ "fastrand",
9350+ "getrandom 0.3.4",
9351+ "once_cell",
9352+ "rustix 1.1.4",
9353+ "windows-sys 0.52.0",
9354+]
9355+
9356+[[package]]
9357+name = "termcolor"
9358+version = "1.4.1"
9359+source = "registry+https://github.com/rust-lang/crates.io-index"
9360+checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755"
9361+dependencies = [
9362+ "winapi-util",
9363+]
9364+
69399365 [[package]]
69409366 name = "thiserror"
69419367 version = "1.0.69"
@@ -7007,7 +9433,7 @@ dependencies = [
70079433 "half",
70089434 "quick-error",
70099435 "weezl",
7010- "zune-jpeg",
9436+ "zune-jpeg 0.5.15",
70119437 ]
70129438
70139439 [[package]]
@@ -7052,7 +9478,22 @@ dependencies = [
70529478 "bytemuck",
70539479 "cfg-if",
70549480 "log",
7055- "tiny-skia-path",
9481+ "png 0.17.16",
9482+ "tiny-skia-path 0.11.4",
9483+]
9484+
9485+[[package]]
9486+name = "tiny-skia"
9487+version = "0.12.0"
9488+source = "registry+https://github.com/rust-lang/crates.io-index"
9489+checksum = "47ffee5eaaf5527f630fb0e356b90ebdec84d5d18d937c5e440350f88c5a91ea"
9490+dependencies = [
9491+ "arrayref",
9492+ "arrayvec",
9493+ "bytemuck",
9494+ "cfg-if",
9495+ "log",
9496+ "tiny-skia-path 0.12.0",
70569497 ]
70579498
70589499 [[package]]
@@ -7066,6 +9507,30 @@ dependencies = [
70669507 "strict-num",
70679508 ]
70689509
9510+[[package]]
9511+name = "tiny-skia-path"
9512+version = "0.12.0"
9513+source = "registry+https://github.com/rust-lang/crates.io-index"
9514+checksum = "edca365c3faccca67d06593c5980fa6c57687de727a03131735bb85f01fdeeb9"
9515+dependencies = [
9516+ "arrayref",
9517+ "bytemuck",
9518+ "strict-num",
9519+]
9520+
9521+[[package]]
9522+name = "tiny-xlib"
9523+version = "0.2.5"
9524+source = "registry+https://github.com/rust-lang/crates.io-index"
9525+checksum = "a90a0ca3ee6a69f2ad28fd11621a4c3f03b371f366be500b64df260c4ffbafb4"
9526+dependencies = [
9527+ "as-raw-xcb-connection",
9528+ "ctor",
9529+ "libloading",
9530+ "pkg-config",
9531+ "tracing",
9532+]
9533+
70699534 [[package]]
70709535 name = "tinystr"
70719536 version = "0.8.3"
@@ -7073,6 +9538,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
70739538 checksum = "c8323304221c2a851516f22236c5722a72eaa19749016521d6dff0824447d96d"
70749539 dependencies = [
70759540 "displaydoc",
9541+ "serde_core",
70769542 "zerovec",
70779543 ]
70789544
@@ -7105,6 +9571,7 @@ dependencies = [
71059571 "signal-hook-registry",
71069572 "socket2",
71079573 "tokio-macros",
9574+ "tracing",
71089575 "windows-sys 0.61.2",
71099576 ]
71109577
@@ -7195,6 +9662,15 @@ dependencies = [
71959662 "tokio-util",
71969663 ]
71979664
9665+[[package]]
9666+name = "toml"
9667+version = "0.5.11"
9668+source = "registry+https://github.com/rust-lang/crates.io-index"
9669+checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234"
9670+dependencies = [
9671+ "serde",
9672+]
9673+
71989674 [[package]]
71999675 name = "toml"
72009676 version = "1.1.4+spec-1.1.0"
@@ -7385,6 +9861,9 @@ name = "ttf-parser"
73859861 version = "0.25.1"
73869862 source = "registry+https://github.com/rust-lang/crates.io-index"
73879863 checksum = "d2df906b07856748fa3f6e0ad0cbaa047052d4a7dd609e231c4f72cee8c36f31"
9864+dependencies = [
9865+ "core_maths",
9866+]
73889867
73899868 [[package]]
73909869 name = "tungstenite"
@@ -7405,89 +9884,218 @@ dependencies = [
74059884 ]
74069885
74079886 [[package]]
7408-name = "typenum"
7409-version = "1.20.1"
9887+name = "type-map"
9888+version = "0.5.1"
74109889 source = "registry+https://github.com/rust-lang/crates.io-index"
7411-checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20"
9890+checksum = "cb30dbbd9036155e74adad6812e9898d03ec374946234fbcebd5dfc7b9187b90"
9891+dependencies = [
9892+ "rustc-hash 2.1.3",
9893+]
74129894
74139895 [[package]]
7414-name = "unicode-ident"
7415-version = "1.0.24"
9896+name = "typeid"
9897+version = "1.0.3"
74169898 source = "registry+https://github.com/rust-lang/crates.io-index"
7417-checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75"
9899+checksum = "bc7d623258602320d5c55d1bc22793b57daff0ec7efc270ea7d55ce1d5f5471c"
74189900
74199901 [[package]]
7420-name = "unicode-segmentation"
7421-version = "1.13.3"
9902+name = "typenum"
9903+version = "1.20.1"
74229904 source = "registry+https://github.com/rust-lang/crates.io-index"
7423-checksum = "c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8"
9905+checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20"
74249906
74259907 [[package]]
7426-name = "unicode-width"
7427-version = "0.2.2"
9908+name = "uds_windows"
9909+version = "1.2.1"
74289910 source = "registry+https://github.com/rust-lang/crates.io-index"
7429-checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254"
9911+checksum = "f2f6fb2847f6742cd76af783a2a2c49e9375d0a111c7bef6f71cd9e738c72d6e"
9912+dependencies = [
9913+ "memoffset",
9914+ "tempfile",
9915+ "windows-sys 0.60.2",
9916+]
74309917
74319918 [[package]]
7432-name = "unicode-xid"
7433-version = "0.2.6"
9919+name = "uncased"
9920+version = "0.9.10"
74349921 source = "registry+https://github.com/rust-lang/crates.io-index"
7435-checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853"
9922+checksum = "e1b88fcfe09e89d3866a5c11019378088af2d24c3fbd4f0543f96b479ec90697"
9923+dependencies = [
9924+ "version_check",
9925+]
74369926
74379927 [[package]]
7438-name = "universal-hash"
7439-version = "0.5.1"
9928+name = "unic-langid"
9929+version = "0.9.6"
74409930 source = "registry+https://github.com/rust-lang/crates.io-index"
7441-checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea"
9931+checksum = "a28ba52c9b05311f4f6e62d5d9d46f094bd6e84cb8df7b3ef952748d752a7d05"
74429932 dependencies = [
7443- "crypto-common 0.1.6",
7444- "subtle",
9933+ "unic-langid-impl",
74459934 ]
74469935
74479936 [[package]]
7448-name = "unsafe-libopus"
7449-version = "0.2.0"
9937+name = "unic-langid-impl"
9938+version = "0.9.6"
74509939 source = "registry+https://github.com/rust-lang/crates.io-index"
7451-checksum = "c757408e7256c910343c7b215c8c8b878948630eecc774baabcca0972376eb73"
9940+checksum = "dce1bf08044d4b7a94028c93786f8566047edc11110595914de93362559bc658"
74529941 dependencies = [
7453- "arrayref",
7454- "num-complex",
7455- "num-traits",
9942+ "serde",
9943+ "tinystr",
74569944 ]
74579945
74589946 [[package]]
7459-name = "untrusted"
7460-version = "0.7.1"
9947+name = "unicase"
9948+version = "2.9.0"
74619949 source = "registry+https://github.com/rust-lang/crates.io-index"
7462-checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a"
9950+checksum = "dbc4bc3a9f746d862c45cb89d705aa10f187bb96c76001afab07a0d35ce60142"
74639951
74649952 [[package]]
7465-name = "untrusted"
7466-version = "0.9.0"
9953+name = "unicode-bidi"
9954+version = "0.3.18"
74679955 source = "registry+https://github.com/rust-lang/crates.io-index"
7468-checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1"
9956+checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5"
74699957
74709958 [[package]]
7471-name = "url"
7472-version = "2.5.8"
9959+name = "unicode-bidi-mirroring"
9960+version = "0.4.0"
74739961 source = "registry+https://github.com/rust-lang/crates.io-index"
7474-checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed"
7475-dependencies = [
7476- "form_urlencoded",
7477- "idna",
7478- "percent-encoding",
7479- "serde",
7480- "serde_derive",
7481-]
9962+checksum = "5dfa6e8c60bb66d49db113e0125ee8711b7647b5579dc7f5f19c42357ed039fe"
74829963
74839964 [[package]]
7484-name = "urlencoding"
7485-version = "2.1.3"
9965+name = "unicode-ccc"
9966+version = "0.4.0"
74869967 source = "registry+https://github.com/rust-lang/crates.io-index"
7487-checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da"
9968+checksum = "ce61d488bcdc9bc8b5d1772c404828b17fc481c0a582b5581e95fb233aef503e"
74889969
74899970 [[package]]
7490-name = "utf8_iter"
9971+name = "unicode-ident"
9972+version = "1.0.24"
9973+source = "registry+https://github.com/rust-lang/crates.io-index"
9974+checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75"
9975+
9976+[[package]]
9977+name = "unicode-linebreak"
9978+version = "0.1.5"
9979+source = "registry+https://github.com/rust-lang/crates.io-index"
9980+checksum = "3b09c83c3c29d37506a3e260c08c03743a6bb66a9cd432c6934ab501a190571f"
9981+
9982+[[package]]
9983+name = "unicode-properties"
9984+version = "0.1.4"
9985+source = "registry+https://github.com/rust-lang/crates.io-index"
9986+checksum = "7df058c713841ad818f1dc5d3fd88063241cc61f49f5fbea4b951e8cf5a8d71d"
9987+
9988+[[package]]
9989+name = "unicode-script"
9990+version = "0.5.8"
9991+source = "registry+https://github.com/rust-lang/crates.io-index"
9992+checksum = "383ad40bb927465ec0ce7720e033cb4ca06912855fc35db31b5755d0de75b1ee"
9993+
9994+[[package]]
9995+name = "unicode-segmentation"
9996+version = "1.13.3"
9997+source = "registry+https://github.com/rust-lang/crates.io-index"
9998+checksum = "c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8"
9999+
10000+[[package]]
10001+name = "unicode-vo"
10002+version = "0.1.0"
10003+source = "registry+https://github.com/rust-lang/crates.io-index"
10004+checksum = "b1d386ff53b415b7fe27b50bb44679e2cc4660272694b7b6f3326d8480823a94"
10005+
10006+[[package]]
10007+name = "unicode-width"
10008+version = "0.2.2"
10009+source = "registry+https://github.com/rust-lang/crates.io-index"
10010+checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254"
10011+
10012+[[package]]
10013+name = "unicode-xid"
10014+version = "0.2.6"
10015+source = "registry+https://github.com/rust-lang/crates.io-index"
10016+checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853"
10017+
10018+[[package]]
10019+name = "universal-hash"
10020+version = "0.5.1"
10021+source = "registry+https://github.com/rust-lang/crates.io-index"
10022+checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea"
10023+dependencies = [
10024+ "crypto-common 0.1.6",
10025+ "subtle",
10026+]
10027+
10028+[[package]]
10029+name = "unsafe-libopus"
10030+version = "0.2.0"
10031+source = "registry+https://github.com/rust-lang/crates.io-index"
10032+checksum = "c757408e7256c910343c7b215c8c8b878948630eecc774baabcca0972376eb73"
10033+dependencies = [
10034+ "arrayref",
10035+ "num-complex",
10036+ "num-traits",
10037+]
10038+
10039+[[package]]
10040+name = "untrusted"
10041+version = "0.7.1"
10042+source = "registry+https://github.com/rust-lang/crates.io-index"
10043+checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a"
10044+
10045+[[package]]
10046+name = "untrusted"
10047+version = "0.9.0"
10048+source = "registry+https://github.com/rust-lang/crates.io-index"
10049+checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1"
10050+
10051+[[package]]
10052+name = "url"
10053+version = "2.5.8"
10054+source = "registry+https://github.com/rust-lang/crates.io-index"
10055+checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed"
10056+dependencies = [
10057+ "form_urlencoded",
10058+ "idna",
10059+ "percent-encoding",
10060+ "serde",
10061+ "serde_derive",
10062+]
10063+
10064+[[package]]
10065+name = "urlencoding"
10066+version = "2.1.3"
10067+source = "registry+https://github.com/rust-lang/crates.io-index"
10068+checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da"
10069+
10070+[[package]]
10071+name = "usvg"
10072+version = "0.45.1"
10073+source = "registry+https://github.com/rust-lang/crates.io-index"
10074+checksum = "80be9b06fbae3b8b303400ab20778c80bbaf338f563afe567cf3c9eea17b47ef"
10075+dependencies = [
10076+ "base64",
10077+ "data-url",
10078+ "flate2",
10079+ "fontdb",
10080+ "imagesize",
10081+ "kurbo 0.11.3",
10082+ "log",
10083+ "pico-args",
10084+ "roxmltree",
10085+ "rustybuzz",
10086+ "simplecss",
10087+ "siphasher",
10088+ "strict-num",
10089+ "svgtypes",
10090+ "tiny-skia-path 0.11.4",
10091+ "unicode-bidi",
10092+ "unicode-script",
10093+ "unicode-vo",
10094+ "xmlwriter",
10095+]
10096+
10097+[[package]]
10098+name = "utf8_iter"
749110099 version = "1.0.4"
749210100 source = "registry+https://github.com/rust-lang/crates.io-index"
749310101 checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be"
@@ -7506,6 +10114,7 @@ checksum = "bf3923a6f5c4c6382e0b653c4117f48d631ea17f38ed86e2a828e6f7412f5239"
750610114 dependencies = [
750710115 "getrandom 0.4.3",
750810116 "js-sys",
10117+ "serde_core",
750910118 "wasm-bindgen",
751010119 ]
751110120
@@ -7551,7 +10160,7 @@ dependencies = [
755110160 "mp4",
755210161 "openh264",
755310162 "png 0.17.16",
7554- "winit",
10163+ "winit 0.30.13",
755510164 "zip",
755610165 ]
755710166
@@ -7569,7 +10178,7 @@ dependencies = [
756910178 "jni 0.22.4",
757010179 "png 0.17.16",
757110180 "vidya",
7572- "winit",
10181+ "winit 0.30.13",
757310182 ]
757410183
757510184 [[package]]
@@ -7695,6 +10304,7 @@ dependencies = [
769510304 "js-sys",
769610305 "parking_lot",
769710306 "pin-utils",
10307+ "slab",
769810308 "wasm-bindgen",
769910309 ]
770010310
@@ -7756,6 +10366,7 @@ dependencies = [
775610366 "wayland-backend",
775710367 "wayland-client",
775810368 "wayland-scanner",
10369+ "wayland-server",
775910370 ]
776010371
776110372 [[package]]
@@ -7808,6 +10419,7 @@ dependencies = [
780810419 "wayland-client",
780910420 "wayland-protocols",
781010421 "wayland-scanner",
10422+ "wayland-server",
781110423 ]
781210424
781310425 [[package]]
@@ -7821,6 +10433,19 @@ dependencies = [
782110433 "quote",
782210434 ]
782310435
10436+[[package]]
10437+name = "wayland-server"
10438+version = "0.31.14"
10439+source = "registry+https://github.com/rust-lang/crates.io-index"
10440+checksum = "0dde9c29be0f723a573977de51ee455bf3dfa03652730a74f9dd3b337e374d75"
10441+dependencies = [
10442+ "bitflags 2.13.1",
10443+ "downcast-rs",
10444+ "rustix 1.1.4",
10445+ "wayland-backend",
10446+ "wayland-scanner",
10447+]
10448+
782410449 [[package]]
782510450 name = "wayland-sys"
782610451 version = "0.31.11"
@@ -7975,6 +10600,156 @@ version = "0.1.12"
797510600 source = "registry+https://github.com/rust-lang/crates.io-index"
797610601 checksum = "a28ac98ddc8b9274cb41bb4d9d4d5c425b6020c50c46f25559911905610b4a88"
797710602
10603+[[package]]
10604+name = "wgpu"
10605+version = "28.0.0"
10606+source = "registry+https://github.com/rust-lang/crates.io-index"
10607+checksum = "f9cb534d5ffd109c7d1135f34cdae29e60eab94855a625dcfe1705f8bc7ad79f"
10608+dependencies = [
10609+ "arrayvec",
10610+ "bitflags 2.13.1",
10611+ "bytemuck",
10612+ "cfg-if",
10613+ "cfg_aliases 0.2.2",
10614+ "document-features",
10615+ "hashbrown 0.16.1",
10616+ "js-sys",
10617+ "log",
10618+ "naga",
10619+ "parking_lot",
10620+ "portable-atomic",
10621+ "profiling",
10622+ "raw-window-handle",
10623+ "smallvec",
10624+ "static_assertions",
10625+ "wasm-bindgen",
10626+ "wasm-bindgen-futures",
10627+ "web-sys",
10628+ "wgpu-core",
10629+ "wgpu-hal",
10630+ "wgpu-types",
10631+]
10632+
10633+[[package]]
10634+name = "wgpu-core"
10635+version = "28.0.1"
10636+source = "registry+https://github.com/rust-lang/crates.io-index"
10637+checksum = "d23f4642f53f666adcfd2d3218ab174d1e6681101aef18696b90cbe64d1c10f9"
10638+dependencies = [
10639+ "arrayvec",
10640+ "bit-set",
10641+ "bit-vec 0.8.0",
10642+ "bitflags 2.13.1",
10643+ "bytemuck",
10644+ "cfg_aliases 0.2.2",
10645+ "document-features",
10646+ "hashbrown 0.16.1",
10647+ "indexmap 2.14.0",
10648+ "log",
10649+ "naga",
10650+ "once_cell",
10651+ "parking_lot",
10652+ "portable-atomic",
10653+ "profiling",
10654+ "raw-window-handle",
10655+ "rustc-hash 1.1.0",
10656+ "smallvec",
10657+ "thiserror 2.0.19",
10658+ "wgpu-core-deps-apple",
10659+ "wgpu-core-deps-emscripten",
10660+ "wgpu-core-deps-windows-linux-android",
10661+ "wgpu-hal",
10662+ "wgpu-types",
10663+]
10664+
10665+[[package]]
10666+name = "wgpu-core-deps-apple"
10667+version = "28.0.0"
10668+source = "registry+https://github.com/rust-lang/crates.io-index"
10669+checksum = "87b7b696b918f337c486bf93142454080a32a37832ba8a31e4f48221890047da"
10670+dependencies = [
10671+ "wgpu-hal",
10672+]
10673+
10674+[[package]]
10675+name = "wgpu-core-deps-emscripten"
10676+version = "28.0.0"
10677+source = "registry+https://github.com/rust-lang/crates.io-index"
10678+checksum = "34b251c331f84feac147de3c4aa3aa45112622a95dd7ee1b74384fa0458dbd79"
10679+dependencies = [
10680+ "wgpu-hal",
10681+]
10682+
10683+[[package]]
10684+name = "wgpu-core-deps-windows-linux-android"
10685+version = "28.0.0"
10686+source = "registry+https://github.com/rust-lang/crates.io-index"
10687+checksum = "68ca976e72b2c9964eb243e281f6ce7f14a514e409920920dcda12ae40febaae"
10688+dependencies = [
10689+ "wgpu-hal",
10690+]
10691+
10692+[[package]]
10693+name = "wgpu-hal"
10694+version = "28.0.1"
10695+source = "registry+https://github.com/rust-lang/crates.io-index"
10696+checksum = "44d6cb474beb218824dcc9e1ce679d973f719262789bfb27407da560cac20eeb"
10697+dependencies = [
10698+ "android_system_properties",
10699+ "arrayvec",
10700+ "ash",
10701+ "bit-set",
10702+ "bitflags 2.13.1",
10703+ "block",
10704+ "bytemuck",
10705+ "cfg-if",
10706+ "cfg_aliases 0.2.2",
10707+ "core-graphics-types 0.2.0",
10708+ "glow",
10709+ "glutin_wgl_sys",
10710+ "gpu-allocator",
10711+ "gpu-descriptor",
10712+ "hashbrown 0.16.1",
10713+ "js-sys",
10714+ "khronos-egl",
10715+ "libc",
10716+ "libloading",
10717+ "log",
10718+ "metal",
10719+ "naga",
10720+ "ndk-sys",
10721+ "objc",
10722+ "once_cell",
10723+ "ordered-float",
10724+ "parking_lot",
10725+ "portable-atomic",
10726+ "portable-atomic-util",
10727+ "profiling",
10728+ "range-alloc",
10729+ "raw-window-handle",
10730+ "renderdoc-sys",
10731+ "smallvec",
10732+ "thiserror 2.0.19",
10733+ "wasm-bindgen",
10734+ "web-sys",
10735+ "wgpu-types",
10736+ "windows 0.62.2",
10737+ "windows-core 0.62.2",
10738+]
10739+
10740+[[package]]
10741+name = "wgpu-types"
10742+version = "28.0.0"
10743+source = "registry+https://github.com/rust-lang/crates.io-index"
10744+checksum = "e18308757e594ed2cd27dddbb16a139c42a683819d32a2e0b1b0167552f5840c"
10745+dependencies = [
10746+ "bitflags 2.13.1",
10747+ "bytemuck",
10748+ "js-sys",
10749+ "log",
10750+ "web-sys",
10751+]
10752+
797810753 [[package]]
797910754 name = "wide"
798010755 version = "1.5.0"
@@ -8022,6 +10797,21 @@ version = "0.4.0"
802210797 source = "registry+https://github.com/rust-lang/crates.io-index"
802310798 checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
802410799
10800+[[package]]
10801+name = "window_clipboard"
10802+version = "0.4.1"
10803+source = "git+https://github.com/pop-os/window_clipboard.git?tag=sctk-0.20#f68595ee0e62fbd6589f4709b5aaa5c3c7ea5f6c"
10804+dependencies = [
10805+ "clipboard-win",
10806+ "clipboard_macos",
10807+ "clipboard_wayland",
10808+ "clipboard_x11",
10809+ "dnd",
10810+ "mime 0.1.0",
10811+ "raw-window-handle",
10812+ "thiserror 1.0.69",
10813+]
10814+
802510815 [[package]]
802610816 name = "windowfunctions"
802710817 version = "0.1.1"
@@ -8031,16 +10821,38 @@ dependencies = [
803110821 "num-traits",
803210822 ]
803310823
10824+[[package]]
10825+name = "windows"
10826+version = "0.61.3"
10827+source = "registry+https://github.com/rust-lang/crates.io-index"
10828+checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893"
10829+dependencies = [
10830+ "windows-collections 0.2.0",
10831+ "windows-core 0.61.2",
10832+ "windows-future 0.2.1",
10833+ "windows-link 0.1.3",
10834+ "windows-numerics 0.2.0",
10835+]
10836+
803410837 [[package]]
803510838 name = "windows"
803610839 version = "0.62.2"
803710840 source = "registry+https://github.com/rust-lang/crates.io-index"
803810841 checksum = "527fadee13e0c05939a6a05d5bd6eec6cd2e3dbd648b9f8e447c6518133d8580"
803910842 dependencies = [
8040- "windows-collections",
8041- "windows-core",
8042- "windows-future",
8043- "windows-numerics",
10843+ "windows-collections 0.3.2",
10844+ "windows-core 0.62.2",
10845+ "windows-future 0.3.2",
10846+ "windows-numerics 0.3.1",
10847+]
10848+
10849+[[package]]
10850+name = "windows-collections"
10851+version = "0.2.0"
10852+source = "registry+https://github.com/rust-lang/crates.io-index"
10853+checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8"
10854+dependencies = [
10855+ "windows-core 0.61.2",
804410856 ]
804510857
804610858 [[package]]
@@ -8049,7 +10861,20 @@ version = "0.3.2"
804910861 source = "registry+https://github.com/rust-lang/crates.io-index"
805010862 checksum = "23b2d95af1a8a14a3c7367e1ed4fc9c20e0a26e79551b1454d72583c97cc6610"
805110863 dependencies = [
8052- "windows-core",
10864+ "windows-core 0.62.2",
10865+]
10866+
10867+[[package]]
10868+name = "windows-core"
10869+version = "0.61.2"
10870+source = "registry+https://github.com/rust-lang/crates.io-index"
10871+checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3"
10872+dependencies = [
10873+ "windows-implement",
10874+ "windows-interface",
10875+ "windows-link 0.1.3",
10876+ "windows-result 0.3.4",
10877+ "windows-strings 0.4.2",
805310878 ]
805410879
805510880 [[package]]
@@ -8060,9 +10885,20 @@ checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb"
806010885 dependencies = [
806110886 "windows-implement",
806210887 "windows-interface",
8063- "windows-link",
8064- "windows-result",
8065- "windows-strings",
10888+ "windows-link 0.2.1",
10889+ "windows-result 0.4.1",
10890+ "windows-strings 0.5.1",
10891+]
10892+
10893+[[package]]
10894+name = "windows-future"
10895+version = "0.2.1"
10896+source = "registry+https://github.com/rust-lang/crates.io-index"
10897+checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e"
10898+dependencies = [
10899+ "windows-core 0.61.2",
10900+ "windows-link 0.1.3",
10901+ "windows-threading 0.1.0",
806610902 ]
806710903
806810904 [[package]]
@@ -8071,9 +10907,9 @@ version = "0.3.2"
807110907 source = "registry+https://github.com/rust-lang/crates.io-index"
807210908 checksum = "e1d6f90251fe18a279739e78025bd6ddc52a7e22f921070ccdc67dde84c605cb"
807310909 dependencies = [
8074- "windows-core",
8075- "windows-link",
8076- "windows-threading",
10910+ "windows-core 0.62.2",
10911+ "windows-link 0.2.1",
10912+ "windows-threading 0.2.1",
807710913 ]
807810914
807910915 [[package]]
@@ -8098,6 +10934,12 @@ dependencies = [
809810934 "syn 2.0.119",
809910935 ]
810010936
10937+[[package]]
10938+name = "windows-link"
10939+version = "0.1.3"
10940+source = "registry+https://github.com/rust-lang/crates.io-index"
10941+checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a"
10942+
810110943 [[package]]
810210944 name = "windows-link"
810310945 version = "0.2.1"
@@ -8106,23 +10948,42 @@ checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5"
810610948
810710949 [[package]]
810810950 name = "windows-numerics"
8109-version = "0.3.1"
10951+version = "0.2.0"
811010952 source = "registry+https://github.com/rust-lang/crates.io-index"
8111-checksum = "6e2e40844ac143cdb44aead537bbf727de9b044e107a0f1220392177d15b0f26"
10953+checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1"
811210954 dependencies = [
8113- "windows-core",
8114- "windows-link",
10955+ "windows-core 0.61.2",
10956+ "windows-link 0.1.3",
811510957 ]
811610958
811710959 [[package]]
8118-name = "windows-registry"
8119-version = "0.6.1"
10960+name = "windows-numerics"
10961+version = "0.3.1"
10962+source = "registry+https://github.com/rust-lang/crates.io-index"
10963+checksum = "6e2e40844ac143cdb44aead537bbf727de9b044e107a0f1220392177d15b0f26"
10964+dependencies = [
10965+ "windows-core 0.62.2",
10966+ "windows-link 0.2.1",
10967+]
10968+
10969+[[package]]
10970+name = "windows-registry"
10971+version = "0.6.1"
812010972 source = "registry+https://github.com/rust-lang/crates.io-index"
812110973 checksum = "02752bf7fbdcce7f2a27a742f798510f3e5ad88dbe84871e5168e2120c3d5720"
812210974 dependencies = [
8123- "windows-link",
8124- "windows-result",
8125- "windows-strings",
10975+ "windows-link 0.2.1",
10976+ "windows-result 0.4.1",
10977+ "windows-strings 0.5.1",
10978+]
10979+
10980+[[package]]
10981+name = "windows-result"
10982+version = "0.3.4"
10983+source = "registry+https://github.com/rust-lang/crates.io-index"
10984+checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6"
10985+dependencies = [
10986+ "windows-link 0.1.3",
812610987 ]
812710988
812810989 [[package]]
@@ -8131,7 +10992,16 @@ version = "0.4.1"
813110992 source = "registry+https://github.com/rust-lang/crates.io-index"
813210993 checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5"
813310994 dependencies = [
8134- "windows-link",
10995+ "windows-link 0.2.1",
10996+]
10997+
10998+[[package]]
10999+name = "windows-strings"
11000+version = "0.4.2"
11001+source = "registry+https://github.com/rust-lang/crates.io-index"
11002+checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57"
11003+dependencies = [
11004+ "windows-link 0.1.3",
813511005 ]
813611006
813711007 [[package]]
@@ -8140,7 +11010,7 @@ version = "0.5.1"
814011010 source = "registry+https://github.com/rust-lang/crates.io-index"
814111011 checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091"
814211012 dependencies = [
8143- "windows-link",
11013+ "windows-link 0.2.1",
814411014 ]
814511015
814611016 [[package]]
@@ -8152,6 +11022,15 @@ dependencies = [
815211022 "windows-targets 0.42.2",
815311023 ]
815411024
11025+[[package]]
11026+name = "windows-sys"
11027+version = "0.48.0"
11028+source = "registry+https://github.com/rust-lang/crates.io-index"
11029+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
11030+dependencies = [
11031+ "windows-targets 0.48.5",
11032+]
11033+
815511034 [[package]]
815611035 name = "windows-sys"
815711036 version = "0.52.0"
@@ -8185,7 +11064,7 @@ version = "0.61.2"
818511064 source = "registry+https://github.com/rust-lang/crates.io-index"
818611065 checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc"
818711066 dependencies = [
8188- "windows-link",
11067+ "windows-link 0.2.1",
818911068 ]
819011069
819111070 [[package]]
@@ -8203,6 +11082,21 @@ dependencies = [
820311082 "windows_x86_64_msvc 0.42.2",
820411083 ]
820511084
11085+[[package]]
11086+name = "windows-targets"
11087+version = "0.48.5"
11088+source = "registry+https://github.com/rust-lang/crates.io-index"
11089+checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
11090+dependencies = [
11091+ "windows_aarch64_gnullvm 0.48.5",
11092+ "windows_aarch64_msvc 0.48.5",
11093+ "windows_i686_gnu 0.48.5",
11094+ "windows_i686_msvc 0.48.5",
11095+ "windows_x86_64_gnu 0.48.5",
11096+ "windows_x86_64_gnullvm 0.48.5",
11097+ "windows_x86_64_msvc 0.48.5",
11098+]
11099+
820611100 [[package]]
820711101 name = "windows-targets"
820811102 version = "0.52.6"
@@ -8225,7 +11119,7 @@ version = "0.53.5"
822511119 source = "registry+https://github.com/rust-lang/crates.io-index"
822611120 checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3"
822711121 dependencies = [
8228- "windows-link",
11122+ "windows-link 0.2.1",
822911123 "windows_aarch64_gnullvm 0.53.1",
823011124 "windows_aarch64_msvc 0.53.1",
823111125 "windows_i686_gnu 0.53.1",
@@ -8236,13 +11130,22 @@ dependencies = [
823611130 "windows_x86_64_msvc 0.53.1",
823711131 ]
823811132
11133+[[package]]
11134+name = "windows-threading"
11135+version = "0.1.0"
11136+source = "registry+https://github.com/rust-lang/crates.io-index"
11137+checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6"
11138+dependencies = [
11139+ "windows-link 0.1.3",
11140+]
11141+
823911142 [[package]]
824011143 name = "windows-threading"
824111144 version = "0.2.1"
824211145 source = "registry+https://github.com/rust-lang/crates.io-index"
824311146 checksum = "3949bd5b99cafdf1c7ca86b43ca564028dfe27d66958f2470940f73d86d75b37"
824411147 dependencies = [
8245- "windows-link",
11148+ "windows-link 0.2.1",
824611149 ]
824711150
824811151 [[package]]
@@ -8251,6 +11154,12 @@ version = "0.42.2"
825111154 source = "registry+https://github.com/rust-lang/crates.io-index"
825211155 checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
825311156
11157+[[package]]
11158+name = "windows_aarch64_gnullvm"
11159+version = "0.48.5"
11160+source = "registry+https://github.com/rust-lang/crates.io-index"
11161+checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
11162+
825411163 [[package]]
825511164 name = "windows_aarch64_gnullvm"
825611165 version = "0.52.6"
@@ -8269,6 +11178,12 @@ version = "0.42.2"
826911178 source = "registry+https://github.com/rust-lang/crates.io-index"
827011179 checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
827111180
11181+[[package]]
11182+name = "windows_aarch64_msvc"
11183+version = "0.48.5"
11184+source = "registry+https://github.com/rust-lang/crates.io-index"
11185+checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
11186+
827211187 [[package]]
827311188 name = "windows_aarch64_msvc"
827411189 version = "0.52.6"
@@ -8287,6 +11202,12 @@ version = "0.42.2"
828711202 source = "registry+https://github.com/rust-lang/crates.io-index"
828811203 checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
828911204
11205+[[package]]
11206+name = "windows_i686_gnu"
11207+version = "0.48.5"
11208+source = "registry+https://github.com/rust-lang/crates.io-index"
11209+checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
11210+
829011211 [[package]]
829111212 name = "windows_i686_gnu"
829211213 version = "0.52.6"
@@ -8317,6 +11238,12 @@ version = "0.42.2"
831711238 source = "registry+https://github.com/rust-lang/crates.io-index"
831811239 checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
831911240
11241+[[package]]
11242+name = "windows_i686_msvc"
11243+version = "0.48.5"
11244+source = "registry+https://github.com/rust-lang/crates.io-index"
11245+checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
11246+
832011247 [[package]]
832111248 name = "windows_i686_msvc"
832211249 version = "0.52.6"
@@ -8335,6 +11262,12 @@ version = "0.42.2"
833511262 source = "registry+https://github.com/rust-lang/crates.io-index"
833611263 checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
833711264
11265+[[package]]
11266+name = "windows_x86_64_gnu"
11267+version = "0.48.5"
11268+source = "registry+https://github.com/rust-lang/crates.io-index"
11269+checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
11270+
833811271 [[package]]
833911272 name = "windows_x86_64_gnu"
834011273 version = "0.52.6"
@@ -8353,6 +11286,12 @@ version = "0.42.2"
835311286 source = "registry+https://github.com/rust-lang/crates.io-index"
835411287 checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
835511288
11289+[[package]]
11290+name = "windows_x86_64_gnullvm"
11291+version = "0.48.5"
11292+source = "registry+https://github.com/rust-lang/crates.io-index"
11293+checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
11294+
835611295 [[package]]
835711296 name = "windows_x86_64_gnullvm"
835811297 version = "0.52.6"
@@ -8371,6 +11310,12 @@ version = "0.42.2"
837111310 source = "registry+https://github.com/rust-lang/crates.io-index"
837211311 checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
837311312
11313+[[package]]
11314+name = "windows_x86_64_msvc"
11315+version = "0.48.5"
11316+source = "registry+https://github.com/rust-lang/crates.io-index"
11317+checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
11318+
837411319 [[package]]
837511320 name = "windows_x86_64_msvc"
837611321 version = "0.52.6"
@@ -8401,24 +11346,24 @@ dependencies = [
840111346 "core-foundation 0.9.4",
840211347 "core-graphics",
840311348 "cursor-icon",
8404- "dpi",
11349+ "dpi 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
840511350 "js-sys",
840611351 "libc",
8407- "memmap2",
11352+ "memmap2 0.9.11",
840811353 "ndk",
840911354 "objc2 0.5.2",
841011355 "objc2-app-kit 0.2.2",
841111356 "objc2-foundation 0.2.2",
8412- "objc2-ui-kit",
11357+ "objc2-ui-kit 0.2.2",
841311358 "orbclient",
841411359 "percent-encoding",
841511360 "pin-project",
841611361 "raw-window-handle",
841711362 "redox_syscall 0.4.1",
841811363 "rustix 0.38.44",
8419- "sctk-adwaita",
11364+ "sctk-adwaita 0.10.1",
842011365 "smithay-client-toolkit 0.19.2",
8421- "smol_str",
11366+ "smol_str 0.2.2",
842211367 "tracing",
842311368 "unicode-segmentation",
842411369 "wasm-bindgen",
@@ -8435,6 +11380,221 @@ dependencies = [
843511380 "xkbcommon-dl",
843611381 ]
843711382
11383+[[package]]
11384+name = "winit"
11385+version = "0.31.0-beta.2"
11386+source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#71ce08c043814514a8fd92d9d0599f115ae854e8"
11387+dependencies = [
11388+ "bitflags 2.13.1",
11389+ "cfg_aliases 0.2.2",
11390+ "cursor-icon",
11391+ "dpi 0.1.2 (git+https://github.com/pop-os/winit.git?tag=cosmic-0.14)",
11392+ "libc",
11393+ "raw-window-handle",
11394+ "rustix 1.1.4",
11395+ "smol_str 0.3.6",
11396+ "tracing",
11397+ "winit-android",
11398+ "winit-appkit",
11399+ "winit-common",
11400+ "winit-core",
11401+ "winit-orbital",
11402+ "winit-uikit",
11403+ "winit-wayland",
11404+ "winit-web",
11405+ "winit-win32",
11406+ "winit-x11",
11407+]
11408+
11409+[[package]]
11410+name = "winit-android"
11411+version = "0.31.0-beta.2"
11412+source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#71ce08c043814514a8fd92d9d0599f115ae854e8"
11413+dependencies = [
11414+ "android-activity",
11415+ "bitflags 2.13.1",
11416+ "dpi 0.1.2 (git+https://github.com/pop-os/winit.git?tag=cosmic-0.14)",
11417+ "ndk",
11418+ "raw-window-handle",
11419+ "smol_str 0.3.6",
11420+ "tracing",
11421+ "winit-core",
11422+]
11423+
11424+[[package]]
11425+name = "winit-appkit"
11426+version = "0.31.0-beta.2"
11427+source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#71ce08c043814514a8fd92d9d0599f115ae854e8"
11428+dependencies = [
11429+ "bitflags 2.13.1",
11430+ "block2 0.6.2",
11431+ "dispatch2",
11432+ "dpi 0.1.2 (git+https://github.com/pop-os/winit.git?tag=cosmic-0.14)",
11433+ "objc2 0.6.4",
11434+ "objc2-app-kit 0.3.2",
11435+ "objc2-core-foundation",
11436+ "objc2-core-graphics",
11437+ "objc2-core-video",
11438+ "objc2-foundation 0.3.2",
11439+ "raw-window-handle",
11440+ "smol_str 0.3.6",
11441+ "tracing",
11442+ "winit-common",
11443+ "winit-core",
11444+]
11445+
11446+[[package]]
11447+name = "winit-common"
11448+version = "0.31.0-beta.2"
11449+source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#71ce08c043814514a8fd92d9d0599f115ae854e8"
11450+dependencies = [
11451+ "memmap2 0.9.11",
11452+ "objc2 0.6.4",
11453+ "objc2-core-foundation",
11454+ "smol_str 0.3.6",
11455+ "tracing",
11456+ "winit-core",
11457+ "x11-dl",
11458+ "xkbcommon-dl",
11459+]
11460+
11461+[[package]]
11462+name = "winit-core"
11463+version = "0.31.0-beta.2"
11464+source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#71ce08c043814514a8fd92d9d0599f115ae854e8"
11465+dependencies = [
11466+ "bitflags 2.13.1",
11467+ "cursor-icon",
11468+ "dpi 0.1.2 (git+https://github.com/pop-os/winit.git?tag=cosmic-0.14)",
11469+ "keyboard-types",
11470+ "raw-window-handle",
11471+ "smol_str 0.3.6",
11472+ "web-time",
11473+]
11474+
11475+[[package]]
11476+name = "winit-orbital"
11477+version = "0.31.0-beta.2"
11478+source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#71ce08c043814514a8fd92d9d0599f115ae854e8"
11479+dependencies = [
11480+ "bitflags 2.13.1",
11481+ "dpi 0.1.2 (git+https://github.com/pop-os/winit.git?tag=cosmic-0.14)",
11482+ "libredox",
11483+ "orbclient",
11484+ "raw-window-handle",
11485+ "redox_event",
11486+ "smol_str 0.3.6",
11487+ "tracing",
11488+ "winit-core",
11489+]
11490+
11491+[[package]]
11492+name = "winit-uikit"
11493+version = "0.31.0-beta.2"
11494+source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#71ce08c043814514a8fd92d9d0599f115ae854e8"
11495+dependencies = [
11496+ "bitflags 2.13.1",
11497+ "block2 0.6.2",
11498+ "dispatch2",
11499+ "dpi 0.1.2 (git+https://github.com/pop-os/winit.git?tag=cosmic-0.14)",
11500+ "objc2 0.6.4",
11501+ "objc2-core-foundation",
11502+ "objc2-foundation 0.3.2",
11503+ "objc2-ui-kit 0.3.2",
11504+ "raw-window-handle",
11505+ "smol_str 0.3.6",
11506+ "tracing",
11507+ "winit-common",
11508+ "winit-core",
11509+]
11510+
11511+[[package]]
11512+name = "winit-wayland"
11513+version = "0.31.0-beta.2"
11514+source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#71ce08c043814514a8fd92d9d0599f115ae854e8"
11515+dependencies = [
11516+ "ahash",
11517+ "bitflags 2.13.1",
11518+ "calloop 0.14.4",
11519+ "cursor-icon",
11520+ "dpi 0.1.2 (git+https://github.com/pop-os/winit.git?tag=cosmic-0.14)",
11521+ "libc",
11522+ "memmap2 0.9.11",
11523+ "raw-window-handle",
11524+ "rustix 1.1.4",
11525+ "sctk-adwaita 0.11.1",
11526+ "smithay-client-toolkit 0.20.0",
11527+ "smol_str 0.3.6",
11528+ "tracing",
11529+ "wayland-backend",
11530+ "wayland-client",
11531+ "wayland-protocols",
11532+ "wayland-protocols-plasma",
11533+ "winit-common",
11534+ "winit-core",
11535+]
11536+
11537+[[package]]
11538+name = "winit-web"
11539+version = "0.31.0-beta.2"
11540+source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#71ce08c043814514a8fd92d9d0599f115ae854e8"
11541+dependencies = [
11542+ "atomic-waker",
11543+ "bitflags 2.13.1",
11544+ "concurrent-queue",
11545+ "cursor-icon",
11546+ "dpi 0.1.2 (git+https://github.com/pop-os/winit.git?tag=cosmic-0.14)",
11547+ "js-sys",
11548+ "pin-project",
11549+ "raw-window-handle",
11550+ "smol_str 0.3.6",
11551+ "tracing",
11552+ "wasm-bindgen",
11553+ "wasm-bindgen-futures",
11554+ "web-sys",
11555+ "web-time",
11556+ "winit-core",
11557+]
11558+
11559+[[package]]
11560+name = "winit-win32"
11561+version = "0.31.0-beta.2"
11562+source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#71ce08c043814514a8fd92d9d0599f115ae854e8"
11563+dependencies = [
11564+ "bitflags 2.13.1",
11565+ "cursor-icon",
11566+ "dpi 0.1.2 (git+https://github.com/pop-os/winit.git?tag=cosmic-0.14)",
11567+ "raw-window-handle",
11568+ "smol_str 0.3.6",
11569+ "tracing",
11570+ "unicode-segmentation",
11571+ "windows-sys 0.59.0",
11572+ "winit-core",
11573+]
11574+
11575+[[package]]
11576+name = "winit-x11"
11577+version = "0.31.0-beta.2"
11578+source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#71ce08c043814514a8fd92d9d0599f115ae854e8"
11579+dependencies = [
11580+ "bitflags 2.13.1",
11581+ "bytemuck",
11582+ "calloop 0.14.4",
11583+ "cursor-icon",
11584+ "dpi 0.1.2 (git+https://github.com/pop-os/winit.git?tag=cosmic-0.14)",
11585+ "libc",
11586+ "percent-encoding",
11587+ "raw-window-handle",
11588+ "rustix 1.1.4",
11589+ "smol_str 0.3.6",
11590+ "tracing",
11591+ "winit-common",
11592+ "winit-core",
11593+ "x11-dl",
11594+ "x11rb",
11595+ "xkbcommon-dl",
11596+]
11597+
843811598 [[package]]
843911599 name = "winnow"
844011600 version = "1.0.4"
@@ -8461,8 +11621,8 @@ dependencies = [
846111621 "log",
846211622 "serde",
846311623 "thiserror 2.0.19",
8464- "windows",
8465- "windows-core",
11624+ "windows 0.62.2",
11625+ "windows-core 0.62.2",
846611626 ]
846711627
846811628 [[package]]
@@ -8514,6 +11674,7 @@ dependencies = [
851411674 "once_cell",
851511675 "rustix 1.1.4",
851611676 "x11rb-protocol",
11677+ "xcursor",
851711678 ]
851811679
851911680 [[package]]
@@ -8546,6 +11707,34 @@ version = "0.3.11"
854611707 source = "registry+https://github.com/rust-lang/crates.io-index"
854711708 checksum = "163b33ed8786455e2fa5d72f554057ce3f3182425434f756cd39c99839d88e23"
854811709
11710+[[package]]
11711+name = "xdg"
11712+version = "3.0.0"
11713+source = "registry+https://github.com/rust-lang/crates.io-index"
11714+checksum = "2fb433233f2df9344722454bc7e96465c9d03bff9d77c248f9e7523fe79585b5"
11715+
11716+[[package]]
11717+name = "xkbcommon"
11718+version = "0.7.0"
11719+source = "registry+https://github.com/rust-lang/crates.io-index"
11720+checksum = "13867d259930edc7091a6c41b4ce6eee464328c6ff9659b7e4c668ca20d4c91e"
11721+dependencies = [
11722+ "libc",
11723+ "memmap2 0.8.0",
11724+ "xkeysym",
11725+]
11726+
11727+[[package]]
11728+name = "xkbcommon"
11729+version = "0.8.0"
11730+source = "registry+https://github.com/rust-lang/crates.io-index"
11731+checksum = "8d66ca9352cbd4eecbbc40871d8a11b4ac8107cfc528a6e14d7c19c69d0e1ac9"
11732+dependencies = [
11733+ "libc",
11734+ "memmap2 0.9.11",
11735+ "xkeysym",
11736+]
11737+
854911738 [[package]]
855011739 name = "xkbcommon-dl"
855111740 version = "0.4.2"
@@ -8564,6 +11753,9 @@ name = "xkeysym"
856411753 version = "0.2.1"
856511754 source = "registry+https://github.com/rust-lang/crates.io-index"
856611755 checksum = "b9cc00251562a284751c9973bace760d86c0276c471b4be569fe6b068ee97a56"
11756+dependencies = [
11757+ "bytemuck",
11758+]
856711759
856811760 [[package]]
856911761 name = "xml-rs"
@@ -8580,16 +11772,34 @@ dependencies = [
858011772 "xml-rs",
858111773 ]
858211774
11775+[[package]]
11776+name = "xmlwriter"
11777+version = "0.1.0"
11778+source = "registry+https://github.com/rust-lang/crates.io-index"
11779+checksum = "ec7a2a501ed189703dba8b08142f057e887dfc4b2cc4db2d343ac6376ba3e0b9"
11780+
11781+[[package]]
11782+name = "yansi"
11783+version = "1.0.1"
11784+source = "registry+https://github.com/rust-lang/crates.io-index"
11785+checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049"
11786+
858311787 [[package]]
858411788 name = "yasna"
858511789 version = "0.6.0"
858611790 source = "registry+https://github.com/rust-lang/crates.io-index"
858711791 checksum = "b5f6765e852b9b4dc8e2a76843e4d64d1cea8e79bcde0b6901aea8e7c7f08282"
858811792 dependencies = [
8589- "bit-vec",
11793+ "bit-vec 0.9.1",
859011794 "time",
859111795 ]
859211796
11797+[[package]]
11798+name = "yazi"
11799+version = "0.2.1"
11800+source = "registry+https://github.com/rust-lang/crates.io-index"
11801+checksum = "e01738255b5a16e78bbb83e7fbba0a1e7dd506905cfc53f4622d89015a03fbb5"
11802+
859311803 [[package]]
859411804 name = "yoke"
859511805 version = "0.8.3"
@@ -8622,6 +11832,119 @@ dependencies = [
862211832 "num-traits",
862311833 ]
862411834
11835+[[package]]
11836+name = "zbus"
11837+version = "5.19.0"
11838+source = "registry+https://github.com/rust-lang/crates.io-index"
11839+checksum = "5db4be7c075cb421e4b7ee645541604239bd243ba7c357511f4ff3a74b555907"
11840+dependencies = [
11841+ "async-broadcast",
11842+ "async-executor",
11843+ "async-io",
11844+ "async-lock",
11845+ "async-process",
11846+ "async-recursion",
11847+ "async-task",
11848+ "async-trait",
11849+ "blocking",
11850+ "enumflags2",
11851+ "event-listener",
11852+ "futures-core",
11853+ "futures-lite",
11854+ "hex",
11855+ "libc",
11856+ "ordered-stream",
11857+ "rustix 1.1.4",
11858+ "serde",
11859+ "serde_repr",
11860+ "tokio",
11861+ "tracing",
11862+ "uds_windows",
11863+ "uuid",
11864+ "windows-sys 0.61.2",
11865+ "winnow",
11866+ "zbus_macros",
11867+ "zbus_names",
11868+ "zvariant",
11869+]
11870+
11871+[[package]]
11872+name = "zbus-lockstep"
11873+version = "0.5.2"
11874+source = "registry+https://github.com/rust-lang/crates.io-index"
11875+checksum = "6998de05217a084b7578728a9443d04ea4cd80f2a0839b8d78770b76ccd45863"
11876+dependencies = [
11877+ "zbus_xml",
11878+ "zvariant",
11879+]
11880+
11881+[[package]]
11882+name = "zbus-lockstep-macros"
11883+version = "0.5.2"
11884+source = "registry+https://github.com/rust-lang/crates.io-index"
11885+checksum = "10da05367f3a7b7553c8cdf8fa91aee6b64afebe32b51c95177957efc47ca3a0"
11886+dependencies = [
11887+ "proc-macro2",
11888+ "quote",
11889+ "syn 2.0.119",
11890+ "zbus-lockstep",
11891+ "zbus_xml",
11892+ "zvariant",
11893+]
11894+
11895+[[package]]
11896+name = "zbus_macros"
11897+version = "5.19.0"
11898+source = "registry+https://github.com/rust-lang/crates.io-index"
11899+checksum = "2990635d09ade6df1868f72f8cac69a876a90981e8bd3c40b1be413f8dc88f40"
11900+dependencies = [
11901+ "proc-macro-crate",
11902+ "proc-macro2",
11903+ "quote",
11904+ "syn 3.0.3",
11905+ "zbus_names",
11906+ "zvariant",
11907+ "zvariant_utils",
11908+]
11909+
11910+[[package]]
11911+name = "zbus_names"
11912+version = "4.3.4"
11913+source = "registry+https://github.com/rust-lang/crates.io-index"
11914+checksum = "d8bf88b4a3ff53e883001e0e0115b297a9d53c31b9c1edd2bfdd853e3428624e"
11915+dependencies = [
11916+ "serde",
11917+ "winnow",
11918+ "zvariant",
11919+]
11920+
11921+[[package]]
11922+name = "zbus_xml"
11923+version = "5.2.1"
11924+source = "registry+https://github.com/rust-lang/crates.io-index"
11925+checksum = "d1586c021a01ca0a9216dcd874e546382e156a5cbab5fab6cb5f10087e22682a"
11926+dependencies = [
11927+ "serde",
11928+ "winnow",
11929+ "zbus_names",
11930+ "zvariant",
11931+]
11932+
11933+[[package]]
11934+name = "zcheapstr"
11935+version = "1.1.0"
11936+source = "registry+https://github.com/rust-lang/crates.io-index"
11937+checksum = "d1afec51604565183aeb5c54c20aeab286120d4e4460f7f76e3e8bb8c0d99473"
11938+dependencies = [
11939+ "serde",
11940+]
11941+
11942+[[package]]
11943+name = "zeno"
11944+version = "0.3.3"
11945+source = "registry+https://github.com/rust-lang/crates.io-index"
11946+checksum = "6df3dc4292935e51816d896edcd52aa30bc297907c26167fec31e2b0c6a32524"
11947+
862511948 [[package]]
862611949 name = "zerocopy"
862711950 version = "0.8.55"
@@ -8700,6 +12023,7 @@ version = "0.11.6"
870012023 source = "registry+https://github.com/rust-lang/crates.io-index"
870112024 checksum = "90f911cbc359ab6af17377d242225f4d75119aec87ea711a880987b18cd7b239"
870212025 dependencies = [
12026+ "serde",
870312027 "yoke",
870412028 "zerofrom",
870512029 "zerovec-derive",
@@ -8757,17 +12081,74 @@ dependencies = [
875712081 "simd-adler32",
875812082 ]
875912083
12084+[[package]]
12085+name = "zune-core"
12086+version = "0.4.12"
12087+source = "registry+https://github.com/rust-lang/crates.io-index"
12088+checksum = "3f423a2c17029964870cfaabb1f13dfab7d092a62a29a89264f4d36990ca414a"
12089+
876012090 [[package]]
876112091 name = "zune-core"
876212092 version = "0.5.1"
876312093 source = "registry+https://github.com/rust-lang/crates.io-index"
876412094 checksum = "cb8a0807f7c01457d0379ba880ba6322660448ddebc890ce29bb64da71fb40f9"
876512095
12096+[[package]]
12097+name = "zune-jpeg"
12098+version = "0.4.21"
12099+source = "registry+https://github.com/rust-lang/crates.io-index"
12100+checksum = "29ce2c8a9384ad323cf564b67da86e21d3cfdff87908bc1223ed5c99bc792713"
12101+dependencies = [
12102+ "zune-core 0.4.12",
12103+]
12104+
876612105 [[package]]
876712106 name = "zune-jpeg"
876812107 version = "0.5.15"
876912108 source = "registry+https://github.com/rust-lang/crates.io-index"
877012109 checksum = "27bc9d5b815bc103f142aa054f561d9187d191692ec7c2d1e2b4737f8dbd7296"
877112110 dependencies = [
8772- "zune-core",
12111+ "zune-core 0.5.1",
12112+]
12113+
12114+[[package]]
12115+name = "zvariant"
12116+version = "5.15.0"
12117+source = "registry+https://github.com/rust-lang/crates.io-index"
12118+checksum = "c1d34c27cc6cdd1f458427519dd6b8612f7b7e3f7b9a0b2355d041dda9869147"
12119+dependencies = [
12120+ "endi",
12121+ "enumflags2",
12122+ "serde",
12123+ "url",
12124+ "winnow",
12125+ "zcheapstr",
12126+ "zvariant_derive",
12127+ "zvariant_utils",
12128+]
12129+
12130+[[package]]
12131+name = "zvariant_derive"
12132+version = "5.15.0"
12133+source = "registry+https://github.com/rust-lang/crates.io-index"
12134+checksum = "864155e69b4352db0c7f374917bf45d1e0c8d17659c8b3dbf9795f3673f8c497"
12135+dependencies = [
12136+ "proc-macro-crate",
12137+ "proc-macro2",
12138+ "quote",
12139+ "syn 3.0.3",
12140+ "zvariant_utils",
12141+]
12142+
12143+[[package]]
12144+name = "zvariant_utils"
12145+version = "4.2.0"
12146+source = "registry+https://github.com/rust-lang/crates.io-index"
12147+checksum = "bad0294361a320b694a328460dc73add56c306150f5cb6bfafc44446120008a3"
12148+dependencies = [
12149+ "proc-macro2",
12150+ "quote",
12151+ "serde",
12152+ "syn 3.0.3",
12153+ "winnow",
877312154 ]
@@ -18,6 +18,89 @@ version = "0.1.10"
18 source = "registry+https://github.com/rust-lang/crates.io-index"18 source = "registry+https://github.com/rust-lang/crates.io-index"
19 checksum = "366ffbaa4442f4684d91e2cd7c5ea7c4ed8add41959a31447066e279e432b618"19 checksum = "366ffbaa4442f4684d91e2cd7c5ea7c4ed8add41959a31447066e279e432b618"
20 20
21+[[package]]
22+name = "accesskit"
23+version = "0.22.0"
24+source = "git+https://github.com/wash2/accesskit?tag=cosmic-0.14#f0599eed5f18111228266fe3f28991cc48b5964f"
25+dependencies = [
26+ "uuid",
27+]
28+
29+[[package]]
30+name = "accesskit_atspi_common"
31+version = "0.15.0"
32+source = "git+https://github.com/wash2/accesskit?tag=cosmic-0.14#f0599eed5f18111228266fe3f28991cc48b5964f"
33+dependencies = [
34+ "accesskit",
35+ "accesskit_consumer",
36+ "atspi-common",
37+ "serde",
38+ "zvariant",
39+]
40+
41+[[package]]
42+name = "accesskit_consumer"
43+version = "0.32.0"
44+source = "git+https://github.com/wash2/accesskit?tag=cosmic-0.14#f0599eed5f18111228266fe3f28991cc48b5964f"
45+dependencies = [
46+ "accesskit",
47+ "hashbrown 0.16.1",
48+]
49+
50+[[package]]
51+name = "accesskit_macos"
52+version = "0.23.0"
53+source = "git+https://github.com/wash2/accesskit?tag=cosmic-0.14#f0599eed5f18111228266fe3f28991cc48b5964f"
54+dependencies = [
55+ "accesskit",
56+ "accesskit_consumer",
57+ "hashbrown 0.16.1",
58+ "objc2 0.5.2",
59+ "objc2-app-kit 0.2.2",
60+ "objc2-foundation 0.2.2",
61+]
62+
63+[[package]]
64+name = "accesskit_unix"
65+version = "0.18.0"
66+source = "git+https://github.com/wash2/accesskit?tag=cosmic-0.14#f0599eed5f18111228266fe3f28991cc48b5964f"
67+dependencies = [
68+ "accesskit",
69+ "accesskit_atspi_common",
70+ "atspi",
71+ "futures-lite",
72+ "serde",
73+ "tokio",
74+ "tokio-stream",
75+ "zbus",
76+]
77+
78+[[package]]
79+name = "accesskit_windows"
80+version = "0.30.0"
81+source = "git+https://github.com/wash2/accesskit?tag=cosmic-0.14#f0599eed5f18111228266fe3f28991cc48b5964f"
82+dependencies = [
83+ "accesskit",
84+ "accesskit_consumer",
85+ "hashbrown 0.16.1",
86+ "static_assertions",
87+ "windows 0.61.3",
88+ "windows-core 0.61.2",
89+]
90+
91+[[package]]
92+name = "accesskit_winit"
93+version = "0.30.0"
94+source = "git+https://github.com/wash2/accesskit?tag=cosmic-0.14#f0599eed5f18111228266fe3f28991cc48b5964f"
95+dependencies = [
96+ "accesskit",
97+ "accesskit_macos",
98+ "accesskit_unix",
99+ "accesskit_windows",
100+ "raw-window-handle",
101+ "winit 0.31.0-beta.2",
102+]
103+
21 [[package]]104 [[package]]
22 name = "addr2line"105 name = "addr2line"
23 version = "0.25.1"106 version = "0.25.1"
@@ -90,12 +173,24 @@ dependencies = [
90 "memchr",173 "memchr",
91 ]174 ]
92 175
176+[[package]]
177+name = "aliasable"
178+version = "0.1.3"
179+source = "registry+https://github.com/rust-lang/crates.io-index"
180+checksum = "250f629c0161ad8107cf89319e990051fae62832fd343083bea452d93e2205fd"
181+
93 [[package]]182 [[package]]
94 name = "allocator-api2"183 name = "allocator-api2"
95 version = "0.2.21"184 version = "0.2.21"
96 source = "registry+https://github.com/rust-lang/crates.io-index"185 source = "registry+https://github.com/rust-lang/crates.io-index"
97 checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923"186 checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923"
98 187
188+[[package]]
189+name = "almost"
190+version = "0.2.0"
191+source = "registry+https://github.com/rust-lang/crates.io-index"
192+checksum = "3aa2999eb46af81abb65c2d30d446778d7e613b60bbf4e174a027e80f90a3c14"
193+
99 [[package]]194 [[package]]
100 name = "alsa"195 name = "alsa"
101 version = "0.11.0"196 version = "0.11.0"
@@ -242,6 +337,21 @@ version = "1.0.104"
242 source = "registry+https://github.com/rust-lang/crates.io-index"337 source = "registry+https://github.com/rust-lang/crates.io-index"
243 checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470"338 checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470"
244 339
340+[[package]]
341+name = "apply"
342+version = "0.3.0"
343+source = "registry+https://github.com/rust-lang/crates.io-index"
344+checksum = "f47b57fc4521e3cae26a4d45b5227f8fadee4c345be0fefd8d5d1711afb8aeb9"
345+
346+[[package]]
347+name = "approx"
348+version = "0.5.1"
349+source = "registry+https://github.com/rust-lang/crates.io-index"
350+checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6"
351+dependencies = [
352+ "num-traits",
353+]
354+
245 [[package]]355 [[package]]
246 name = "arbitrary"356 name = "arbitrary"
247 version = "1.4.2"357 version = "1.4.2"
@@ -307,6 +417,53 @@ version = "1.0.1"
307 source = "registry+https://github.com/rust-lang/crates.io-index"417 source = "registry+https://github.com/rust-lang/crates.io-index"
308 checksum = "175571dd1d178ced59193a6fc02dde1b972eb0bc56c892cde9beeceac5bf0f6b"418 checksum = "175571dd1d178ced59193a6fc02dde1b972eb0bc56c892cde9beeceac5bf0f6b"
309 419
420+[[package]]
421+name = "ash"
422+version = "0.38.0+1.3.281"
423+source = "registry+https://github.com/rust-lang/crates.io-index"
424+checksum = "0bb44936d800fea8f016d7f2311c6a4f97aebd5dc86f09906139ec848cf3a46f"
425+dependencies = [
426+ "libloading",
427+]
428+
429+[[package]]
430+name = "ashpd"
431+version = "0.11.1"
432+source = "registry+https://github.com/rust-lang/crates.io-index"
433+checksum = "d2f3f79755c74fd155000314eb349864caa787c6592eace6c6882dad873d9c39"
434+dependencies = [
435+ "enumflags2",
436+ "futures-channel",
437+ "futures-util",
438+ "rand 0.9.5",
439+ "raw-window-handle",
440+ "serde",
441+ "serde_repr",
442+ "tokio",
443+ "url",
444+ "zbus",
445+]
446+
447+[[package]]
448+name = "ashpd"
449+version = "0.12.3"
450+source = "registry+https://github.com/rust-lang/crates.io-index"
451+checksum = "33a3c86f3fd70c0ffa500ed189abfa90b5a52398a45d5dc372fcc38ebeb7a645"
452+dependencies = [
453+ "enumflags2",
454+ "futures-channel",
455+ "futures-util",
456+ "rand 0.9.5",
457+ "serde",
458+ "serde_repr",
459+ "tokio",
460+ "url",
461+ "wayland-backend",
462+ "wayland-client",
463+ "wayland-protocols",
464+ "zbus",
465+]
466+
310 [[package]]467 [[package]]
311 name = "asn1-rs"468 name = "asn1-rs"
312 version = "0.7.2"469 version = "0.7.2"
@@ -346,6 +503,30 @@ dependencies = [
346 "syn 2.0.119",503 "syn 2.0.119",
347 ]504 ]
348 505
506+[[package]]
507+name = "async-broadcast"
508+version = "0.7.2"
509+source = "registry+https://github.com/rust-lang/crates.io-index"
510+checksum = "435a87a52755b8f27fcf321ac4f04b2802e337c8c4872923137471ec39c37532"
511+dependencies = [
512+ "event-listener",
513+ "event-listener-strategy",
514+ "futures-core",
515+ "pin-project-lite",
516+]
517+
518+[[package]]
519+name = "async-channel"
520+version = "2.5.0"
521+source = "registry+https://github.com/rust-lang/crates.io-index"
522+checksum = "924ed96dd52d1b75e9c1a3e6275715fd320f5f9439fb5a4a11fa51f4221158d2"
523+dependencies = [
524+ "concurrent-queue",
525+ "event-listener-strategy",
526+ "futures-core",
527+ "pin-project-lite",
528+]
529+
349 [[package]]530 [[package]]
350 name = "async-compression"531 name = "async-compression"
351 version = "0.4.45"532 version = "0.4.45"
@@ -358,6 +539,102 @@ dependencies = [
358 "tokio",539 "tokio",
359 ]540 ]
360 541
542+[[package]]
543+name = "async-executor"
544+version = "1.14.0"
545+source = "registry+https://github.com/rust-lang/crates.io-index"
546+checksum = "c96bf972d85afc50bf5ab8fe2d54d1586b4e0b46c97c50a0c9e71e2f7bcd812a"
547+dependencies = [
548+ "async-task",
549+ "concurrent-queue",
550+ "fastrand",
551+ "futures-lite",
552+ "pin-project-lite",
553+ "slab",
554+]
555+
556+[[package]]
557+name = "async-io"
558+version = "2.6.0"
559+source = "registry+https://github.com/rust-lang/crates.io-index"
560+checksum = "456b8a8feb6f42d237746d4b3e9a178494627745c3c56c6ea55d92ba50d026fc"
561+dependencies = [
562+ "autocfg",
563+ "cfg-if",
564+ "concurrent-queue",
565+ "futures-io",
566+ "futures-lite",
567+ "parking",
568+ "polling",
569+ "rustix 1.1.4",
570+ "slab",
571+ "windows-sys 0.61.2",
572+]
573+
574+[[package]]
575+name = "async-lock"
576+version = "3.4.2"
577+source = "registry+https://github.com/rust-lang/crates.io-index"
578+checksum = "290f7f2596bd5b78a9fec8088ccd89180d7f9f55b94b0576823bbbdc72ee8311"
579+dependencies = [
580+ "event-listener",
581+ "event-listener-strategy",
582+ "pin-project-lite",
583+]
584+
585+[[package]]
586+name = "async-process"
587+version = "2.5.0"
588+source = "registry+https://github.com/rust-lang/crates.io-index"
589+checksum = "fc50921ec0055cdd8a16de48773bfeec5c972598674347252c0399676be7da75"
590+dependencies = [
591+ "async-channel",
592+ "async-io",
593+ "async-lock",
594+ "async-signal",
595+ "async-task",
596+ "blocking",
597+ "cfg-if",
598+ "event-listener",
599+ "futures-lite",
600+ "rustix 1.1.4",
601+]
602+
603+[[package]]
604+name = "async-recursion"
605+version = "1.1.1"
606+source = "registry+https://github.com/rust-lang/crates.io-index"
607+checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11"
608+dependencies = [
609+ "proc-macro2",
610+ "quote",
611+ "syn 2.0.119",
612+]
613+
614+[[package]]
615+name = "async-signal"
616+version = "0.2.14"
617+source = "registry+https://github.com/rust-lang/crates.io-index"
618+checksum = "52b5aaafa020cf5053a01f2a60e8ff5dccf550f0f77ec54a4e47285ac2bab485"
619+dependencies = [
620+ "async-io",
621+ "async-lock",
622+ "atomic-waker",
623+ "cfg-if",
624+ "futures-core",
625+ "futures-io",
626+ "rustix 1.1.4",
627+ "signal-hook-registry",
628+ "slab",
629+ "windows-sys 0.61.2",
630+]
631+
632+[[package]]
633+name = "async-task"
634+version = "4.7.1"
635+source = "registry+https://github.com/rust-lang/crates.io-index"
636+checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de"
637+
361 [[package]]638 [[package]]
362 name = "async-trait"639 name = "async-trait"
363 version = "0.1.91"640 version = "0.1.91"
@@ -395,6 +672,53 @@ version = "1.1.2"
395 source = "registry+https://github.com/rust-lang/crates.io-index"672 source = "registry+https://github.com/rust-lang/crates.io-index"
396 checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0"673 checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0"
397 674
675+[[package]]
676+name = "atomicwrites"
677+version = "0.4.2"
678+source = "git+https://github.com/jackpot51/rust-atomicwrites#043ab4859d53ffd3d55334685303d8df39c9f768"
679+dependencies = [
680+ "rustix 0.38.44",
681+ "tempfile",
682+ "windows-sys 0.48.0",
683+]
684+
685+[[package]]
686+name = "atspi"
687+version = "0.29.0"
688+source = "registry+https://github.com/rust-lang/crates.io-index"
689+checksum = "c77886257be21c9cd89a4ae7e64860c6f0eefca799bb79127913052bd0eefb3d"
690+dependencies = [
691+ "atspi-common",
692+ "atspi-proxies",
693+]
694+
695+[[package]]
696+name = "atspi-common"
697+version = "0.13.0"
698+source = "registry+https://github.com/rust-lang/crates.io-index"
699+checksum = "20c5617155740c98003016429ad13fe43ce7a77b007479350a9f8bf95a29f63d"
700+dependencies = [
701+ "enumflags2",
702+ "serde",
703+ "static_assertions",
704+ "zbus",
705+ "zbus-lockstep",
706+ "zbus-lockstep-macros",
707+ "zbus_names",
708+ "zvariant",
709+]
710+
711+[[package]]
712+name = "atspi-proxies"
713+version = "0.13.0"
714+source = "registry+https://github.com/rust-lang/crates.io-index"
715+checksum = "2230e48787ed3eb4088996eab66a32ca20c0b67bbd4fd6cdfe79f04f1f04c9fc"
716+dependencies = [
717+ "atspi-common",
718+ "serde",
719+ "zbus",
720+]
721+
398 [[package]]722 [[package]]
399 name = "attohttpc"723 name = "attohttpc"
400 version = "0.30.1"724 version = "0.30.1"
@@ -445,6 +769,18 @@ dependencies = [
445 "num-traits",769 "num-traits",
446 ]770 ]
447 771
772+[[package]]
773+name = "auto_enums"
774+version = "0.8.10"
775+source = "registry+https://github.com/rust-lang/crates.io-index"
776+checksum = "3091d68264354f211516b91dce6f71046e444fab1867716035f736667243affb"
777+dependencies = [
778+ "derive_utils",
779+ "proc-macro2",
780+ "quote",
781+ "syn 3.0.3",
782+]
783+
448 [[package]]784 [[package]]
449 name = "autocfg"785 name = "autocfg"
450 version = "1.5.1"786 version = "1.5.1"
@@ -498,7 +834,7 @@ dependencies = [
498 "miniz_oxide 0.8.9",834 "miniz_oxide 0.8.9",
499 "object",835 "object",
500 "rustc-demangle",836 "rustc-demangle",
501- "windows-link",837+ "windows-link 0.2.1",
502 ]838 ]
503 839
504 [[package]]840 [[package]]
@@ -519,6 +855,15 @@ version = "1.8.3"
519 source = "registry+https://github.com/rust-lang/crates.io-index"855 source = "registry+https://github.com/rust-lang/crates.io-index"
520 checksum = "2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06"856 checksum = "2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06"
521 857
858+[[package]]
859+name = "basic-toml"
860+version = "0.1.10"
861+source = "registry+https://github.com/rust-lang/crates.io-index"
862+checksum = "ba62675e8242a4c4e806d12f11d136e626e6c8361d6b829310732241652a178a"
863+dependencies = [
864+ "serde",
865+]
866+
522 [[package]]867 [[package]]
523 name = "bindgen"868 name = "bindgen"
524 version = "0.70.1"869 version = "0.70.1"
@@ -558,6 +903,21 @@ dependencies = [
558 "syn 2.0.119",903 "syn 2.0.119",
559 ]904 ]
560 905
906+[[package]]
907+name = "bit-set"
908+version = "0.8.0"
909+source = "registry+https://github.com/rust-lang/crates.io-index"
910+checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3"
911+dependencies = [
912+ "bit-vec 0.8.0",
913+]
914+
915+[[package]]
916+name = "bit-vec"
917+version = "0.8.0"
918+source = "registry+https://github.com/rust-lang/crates.io-index"
919+checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7"
920+
561 [[package]]921 [[package]]
562 name = "bit-vec"922 name = "bit-vec"
563 version = "0.9.1"923 version = "0.9.1"
@@ -578,6 +938,9 @@ name = "bitflags"
578 version = "2.13.1"938 version = "2.13.1"
579 source = "registry+https://github.com/rust-lang/crates.io-index"939 source = "registry+https://github.com/rust-lang/crates.io-index"
580 checksum = "b588b76d00fde79687d7646a9b5bdf3cc0f655e0bbd080335a95d7e96f3587da"940 checksum = "b588b76d00fde79687d7646a9b5bdf3cc0f655e0bbd080335a95d7e96f3587da"
941+dependencies = [
942+ "serde_core",
943+]
581 944
582 [[package]]945 [[package]]
583 name = "blake3"946 name = "blake3"
@@ -593,6 +956,12 @@ dependencies = [
593 "cpufeatures 0.3.0",956 "cpufeatures 0.3.0",
594 ]957 ]
595 958
959+[[package]]
960+name = "block"
961+version = "0.1.6"
962+source = "registry+https://github.com/rust-lang/crates.io-index"
963+checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a"
964+
596 [[package]]965 [[package]]
597 name = "block-buffer"966 name = "block-buffer"
598 version = "0.10.4"967 version = "0.10.4"
@@ -630,32 +999,89 @@ dependencies = [
630 ]999 ]
631 1000
632 [[package]]1001 [[package]]
633-name = "bs58"1002+name = "blocking"
634-version = "0.5.1"1003+version = "1.7.0"
635 source = "registry+https://github.com/rust-lang/crates.io-index"1004 source = "registry+https://github.com/rust-lang/crates.io-index"
636-checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4"1005+checksum = "a70e4329df6cb94385eed412ec92375c3cdd8a6e502493d1229b6414e4036dfa"
637 dependencies = [1006 dependencies = [
638- "tinyvec",1007+ "async-channel",
1008+ "async-task",
1009+ "futures-io",
1010+ "futures-lite",
1011+ "piper",
639 ]1012 ]
640 1013
641 [[package]]1014 [[package]]
642-name = "buf-list"1015+name = "borsh"
643-version = "1.1.2"1016+version = "1.8.1"
644 source = "registry+https://github.com/rust-lang/crates.io-index"1017 source = "registry+https://github.com/rust-lang/crates.io-index"
645-checksum = "a6b175f9cf8fffedd4c4b18bcfef092356e952b81f596e148f18e98280994593"1018+checksum = "553c5d846a6ba5150c65e3b1b8ec073bcf1abc20f9b7220de384a4443ea4e20a"
646 dependencies = [1019 dependencies = [
647 "bytes",1020 "bytes",
1021+ "cfg_aliases 0.2.2",
648 ]1022 ]
649 1023
650 [[package]]1024 [[package]]
651-name = "bumpalo"1025+name = "bs58"
652-version = "3.20.3"1026+version = "0.5.1"
653 source = "registry+https://github.com/rust-lang/crates.io-index"1027 source = "registry+https://github.com/rust-lang/crates.io-index"
654-checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649"1028+checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4"
1029+dependencies = [
1030+ "tinyvec",
1031+]
655 1032
656 [[package]]1033 [[package]]
657-name = "bytemuck"1034+name = "bstr"
658-version = "1.25.2"1035+version = "1.13.1"
1036+source = "registry+https://github.com/rust-lang/crates.io-index"
1037+checksum = "6bb31b46c14244e20ee9984b11bf5c992b91fb6939fea616e3512c8baecdbe5f"
1038+dependencies = [
1039+ "memchr",
1040+ "regex-automata",
1041+ "serde_core",
1042+]
1043+
1044+[[package]]
1045+name = "btoi"
1046+version = "0.5.0"
1047+source = "registry+https://github.com/rust-lang/crates.io-index"
1048+checksum = "3b5ab9db53bcda568284df0fd39f6eac24ad6f7ba7ff1168b9e76eba6576b976"
1049+dependencies = [
1050+ "num-traits",
1051+]
1052+
1053+[[package]]
1054+name = "buf-list"
1055+version = "1.1.2"
1056+source = "registry+https://github.com/rust-lang/crates.io-index"
1057+checksum = "a6b175f9cf8fffedd4c4b18bcfef092356e952b81f596e148f18e98280994593"
1058+dependencies = [
1059+ "bytes",
1060+]
1061+
1062+[[package]]
1063+name = "build_helpers"
1064+version = "0.14.0"
1065+source = "git+https://github.com/pop-os/libcosmic?rev=a401af8b1c54a8abd393b8c5b7c8809402f83850#a401af8b1c54a8abd393b8c5b7c8809402f83850"
1066+dependencies = [
1067+ "cfg_aliases 0.2.2",
1068+]
1069+
1070+[[package]]
1071+name = "bumpalo"
1072+version = "3.20.3"
1073+source = "registry+https://github.com/rust-lang/crates.io-index"
1074+checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649"
1075+
1076+[[package]]
1077+name = "by_address"
1078+version = "1.2.1"
1079+source = "registry+https://github.com/rust-lang/crates.io-index"
1080+checksum = "64fa3c856b712db6612c019f14756e64e4bcea13337a6b33b696333a9eaa2d06"
1081+
1082+[[package]]
1083+name = "bytemuck"
1084+version = "1.25.2"
659 source = "registry+https://github.com/rust-lang/crates.io-index"1085 source = "registry+https://github.com/rust-lang/crates.io-index"
660 checksum = "95832e849adfb21180ccb6826a99da14e5d266ae5c2e668e1602cf234f153797"1086 checksum = "95832e849adfb21180ccb6826a99da14e5d266ae5c2e668e1602cf234f153797"
661 dependencies = [1087 dependencies = [
@@ -838,7 +1264,7 @@ dependencies = [
838 "iana-time-zone",1264 "iana-time-zone",
839 "num-traits",1265 "num-traits",
840 "serde",1266 "serde",
841- "windows-link",1267+ "windows-link 0.2.1",
842 ]1268 ]
843 1269
844 [[package]]1270 [[package]]
@@ -890,7 +1316,7 @@ version = "4.5.55"
890 source = "registry+https://github.com/rust-lang/crates.io-index"1316 source = "registry+https://github.com/rust-lang/crates.io-index"
891 checksum = "a92793da1a46a5f2a02a6f4c46c6496b28c43638adea8306fcb0caa1634f24e5"1317 checksum = "a92793da1a46a5f2a02a6f4c46c6496b28c43638adea8306fcb0caa1634f24e5"
892 dependencies = [1318 dependencies = [
893- "heck",1319+ "heck 0.5.0",
894 "proc-macro2",1320 "proc-macro2",
895 "quote",1321 "quote",
896 "syn 2.0.119",1322 "syn 2.0.119",
@@ -911,6 +1337,35 @@ dependencies = [
911 "error-code",1337 "error-code",
912 ]1338 ]
913 1339
1340+[[package]]
1341+name = "clipboard_macos"
1342+version = "0.1.0"
1343+source = "git+https://github.com/pop-os/window_clipboard.git?tag=sctk-0.20#f68595ee0e62fbd6589f4709b5aaa5c3c7ea5f6c"
1344+dependencies = [
1345+ "objc",
1346+ "objc-foundation",
1347+ "objc_id",
1348+]
1349+
1350+[[package]]
1351+name = "clipboard_wayland"
1352+version = "0.2.2"
1353+source = "git+https://github.com/pop-os/window_clipboard.git?tag=sctk-0.20#f68595ee0e62fbd6589f4709b5aaa5c3c7ea5f6c"
1354+dependencies = [
1355+ "dnd",
1356+ "mime 0.1.0",
1357+ "smithay-clipboard 0.8.0",
1358+]
1359+
1360+[[package]]
1361+name = "clipboard_x11"
1362+version = "0.4.2"
1363+source = "git+https://github.com/pop-os/window_clipboard.git?tag=sctk-0.20#f68595ee0e62fbd6589f4709b5aaa5c3c7ea5f6c"
1364+dependencies = [
1365+ "thiserror 1.0.69",
1366+ "x11rb",
1367+]
1368+
914 [[package]]1369 [[package]]
915 name = "cmake"1370 name = "cmake"
916 version = "0.1.58"1371 version = "0.1.58"
@@ -935,6 +1390,53 @@ dependencies = [
935 "thiserror 2.0.19",1390 "thiserror 2.0.19",
936 ]1391 ]
937 1392
1393+[[package]]
1394+name = "cocoa"
1395+version = "0.25.0"
1396+source = "registry+https://github.com/rust-lang/crates.io-index"
1397+checksum = "f6140449f97a6e97f9511815c5632d84c8aacf8ac271ad77c559218161a1373c"
1398+dependencies = [
1399+ "bitflags 1.3.2",
1400+ "block",
1401+ "cocoa-foundation",
1402+ "core-foundation 0.9.4",
1403+ "core-graphics",
1404+ "foreign-types",
1405+ "libc",
1406+ "objc",
1407+]
1408+
1409+[[package]]
1410+name = "cocoa-foundation"
1411+version = "0.1.2"
1412+source = "registry+https://github.com/rust-lang/crates.io-index"
1413+checksum = "8c6234cbb2e4c785b456c0644748b1ac416dd045799740356f8363dfe00c93f7"
1414+dependencies = [
1415+ "bitflags 1.3.2",
1416+ "block",
1417+ "core-foundation 0.9.4",
1418+ "core-graphics-types 0.1.3",
1419+ "libc",
1420+ "objc",
1421+]
1422+
1423+[[package]]
1424+name = "codespan-reporting"
1425+version = "0.12.0"
1426+source = "registry+https://github.com/rust-lang/crates.io-index"
1427+checksum = "fe6d2e5af09e8c8ad56c969f2157a3d4238cebc7c55f0a517728c38f7b200f81"
1428+dependencies = [
1429+ "serde",
1430+ "termcolor",
1431+ "unicode-width",
1432+]
1433+
1434+[[package]]
1435+name = "color_quant"
1436+version = "1.1.0"
1437+source = "registry+https://github.com/rust-lang/crates.io-index"
1438+checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b"
1439+
938 [[package]]1440 [[package]]
939 name = "colorchoice"1441 name = "colorchoice"
940 version = "1.0.5"1442 version = "1.0.5"
@@ -989,6 +1491,12 @@ dependencies = [
989 "crossbeam-utils",1491 "crossbeam-utils",
990 ]1492 ]
991 1493
1494+[[package]]
1495+name = "configparser"
1496+version = "3.3.0"
1497+source = "registry+https://github.com/rust-lang/crates.io-index"
1498+checksum = "031ad3d167622974ed636505ae4556267ed4aa2aea0464122fa6bc9698a32825"
1499+
992 [[package]]1500 [[package]]
993 name = "const-oid"1501 name = "const-oid"
994 version = "0.10.2"1502 version = "0.10.2"
@@ -1060,7 +1568,7 @@ checksum = "c07782be35f9e1140080c6b96f0d44b739e2278479f64e02fdab4e32dfd8b081"
1060 dependencies = [1568 dependencies = [
1061 "bitflags 1.3.2",1569 "bitflags 1.3.2",
1062 "core-foundation 0.9.4",1570 "core-foundation 0.9.4",
1063- "core-graphics-types",1571+ "core-graphics-types 0.1.3",
1064 "foreign-types",1572 "foreign-types",
1065 "libc",1573 "libc",
1066 ]1574 ]
@@ -1076,6 +1584,17 @@ dependencies = [
1076 "libc",1584 "libc",
1077 ]1585 ]
1078 1586
1587+[[package]]
1588+name = "core-graphics-types"
1589+version = "0.2.0"
1590+source = "registry+https://github.com/rust-lang/crates.io-index"
1591+checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb"
1592+dependencies = [
1593+ "bitflags 2.13.1",
1594+ "core-foundation 0.10.1",
1595+ "libc",
1596+]
1597+
1079 [[package]]1598 [[package]]
1080 name = "core_affinity"1599 name = "core_affinity"
1081 version = "0.8.3"1600 version = "0.8.3"
@@ -1087,6 +1606,15 @@ dependencies = [
1087 "winapi",1606 "winapi",
1088 ]1607 ]
1089 1608
1609+[[package]]
1610+name = "core_maths"
1611+version = "0.1.1"
1612+source = "registry+https://github.com/rust-lang/crates.io-index"
1613+checksum = "77745e017f5edba1a9c1d854f6f3a52dac8a12dd5af5d2f54aecf61e43d80d30"
1614+dependencies = [
1615+ "libm",
1616+]
1617+
1090 [[package]]1618 [[package]]
1091 name = "coreaudio-rs"1619 name = "coreaudio-rs"
1092 version = "0.14.2"1620 version = "0.14.2"
@@ -1101,6 +1629,127 @@ dependencies = [
1101 "objc2-core-foundation",1629 "objc2-core-foundation",
1102 ]1630 ]
1103 1631
1632+[[package]]
1633+name = "cosmic-client-toolkit"
1634+version = "0.2.0"
1635+source = "git+https://github.com/pop-os/cosmic-protocols?rev=32283d7#32283d76a8d0342da74c4cc022a533c52dcf378f"
1636+dependencies = [
1637+ "bitflags 2.13.1",
1638+ "cosmic-protocols",
1639+ "libc",
1640+ "smithay-client-toolkit 0.20.0",
1641+ "wayland-client",
1642+ "wayland-protocols",
1643+]
1644+
1645+[[package]]
1646+name = "cosmic-config"
1647+version = "1.0.0"
1648+source = "git+https://github.com/pop-os/libcosmic?rev=a401af8b1c54a8abd393b8c5b7c8809402f83850#a401af8b1c54a8abd393b8c5b7c8809402f83850"
1649+dependencies = [
1650+ "atomicwrites",
1651+ "cosmic-config-derive",
1652+ "cosmic-settings-daemon",
1653+ "dirs",
1654+ "futures-util",
1655+ "iced_futures",
1656+ "known-folders",
1657+ "notify",
1658+ "ron",
1659+ "serde",
1660+ "tokio",
1661+ "tracing",
1662+ "xdg",
1663+ "zbus",
1664+]
1665+
1666+[[package]]
1667+name = "cosmic-config-derive"
1668+version = "1.0.0"
1669+source = "git+https://github.com/pop-os/libcosmic?rev=a401af8b1c54a8abd393b8c5b7c8809402f83850#a401af8b1c54a8abd393b8c5b7c8809402f83850"
1670+dependencies = [
1671+ "quote",
1672+ "syn 2.0.119",
1673+]
1674+
1675+[[package]]
1676+name = "cosmic-freedesktop-icons"
1677+version = "0.4.0"
1678+source = "git+https://github.com/pop-os/freedesktop-icons#ab4c57b8e416c6af9297cb04d101889896fd9a92"
1679+dependencies = [
1680+ "bstr",
1681+ "btoi",
1682+ "memchr",
1683+ "memmap2 0.9.11",
1684+ "thiserror 2.0.19",
1685+ "tracing",
1686+ "xdg",
1687+]
1688+
1689+[[package]]
1690+name = "cosmic-protocols"
1691+version = "0.2.0"
1692+source = "git+https://github.com/pop-os/cosmic-protocols?rev=32283d7#32283d76a8d0342da74c4cc022a533c52dcf378f"
1693+dependencies = [
1694+ "bitflags 2.13.1",
1695+ "wayland-backend",
1696+ "wayland-client",
1697+ "wayland-protocols",
1698+ "wayland-protocols-wlr",
1699+ "wayland-scanner",
1700+ "wayland-server",
1701+]
1702+
1703+[[package]]
1704+name = "cosmic-settings-daemon"
1705+version = "0.1.0"
1706+source = "git+https://github.com/pop-os/dbus-settings-bindings#eed01dd3609e90e3c8cd043656734c500956c793"
1707+dependencies = [
1708+ "zbus",
1709+]
1710+
1711+[[package]]
1712+name = "cosmic-text"
1713+version = "0.19.0"
1714+source = "registry+https://github.com/rust-lang/crates.io-index"
1715+checksum = "be17b688510d934ce13f48a2beba700e11583e281e0fda99c22bb256a14eda73"
1716+dependencies = [
1717+ "bitflags 2.13.1",
1718+ "fontdb",
1719+ "harfrust",
1720+ "linebender_resource_handle",
1721+ "log",
1722+ "rangemap",
1723+ "rustc-hash 2.1.3",
1724+ "self_cell",
1725+ "skrifa 0.40.0",
1726+ "smol_str 0.3.6",
1727+ "swash",
1728+ "sys-locale",
1729+ "unicode-bidi",
1730+ "unicode-linebreak",
1731+ "unicode-script",
1732+ "unicode-segmentation",
1733+]
1734+
1735+[[package]]
1736+name = "cosmic-theme"
1737+version = "1.0.0"
1738+source = "git+https://github.com/pop-os/libcosmic?rev=a401af8b1c54a8abd393b8c5b7c8809402f83850#a401af8b1c54a8abd393b8c5b7c8809402f83850"
1739+dependencies = [
1740+ "almost",
1741+ "configparser",
1742+ "cosmic-config",
1743+ "csscolorparser",
1744+ "dirs",
1745+ "hex_color",
1746+ "palette",
1747+ "ron",
1748+ "serde",
1749+ "serde_json",
1750+ "thiserror 2.0.19",
1751+]
1752+
1104 [[package]]1753 [[package]]
1105 name = "cpal"1754 name = "cpal"
1106 version = "0.18.2"1755 version = "0.18.2"
@@ -1128,8 +1777,8 @@ dependencies = [
1128 "objc2-foundation 0.3.2",1777 "objc2-foundation 0.3.2",
1129 "pipewire",1778 "pipewire",
1130 "web-sys",1779 "web-sys",
1131- "windows",1780+ "windows 0.62.2",
1132- "windows-core",1781+ "windows-core 0.62.2",
1133 ]1782 ]
1134 1783
1135 [[package]]1784 [[package]]
@@ -1219,6 +1868,18 @@ version = "0.2.4"
1219 source = "registry+https://github.com/rust-lang/crates.io-index"1868 source = "registry+https://github.com/rust-lang/crates.io-index"
1220 checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5"1869 checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5"
1221 1870
1871+[[package]]
1872+name = "cryoglyph"
1873+version = "0.1.0"
1874+source = "git+https://github.com/iced-rs/cryoglyph.git?rev=e429a025df36ab8145708acb309080ae3deec17a#e429a025df36ab8145708acb309080ae3deec17a"
1875+dependencies = [
1876+ "cosmic-text",
1877+ "etagere",
1878+ "lru 0.16.4",
1879+ "rustc-hash 2.1.3",
1880+ "wgpu",
1881+]
1882+
1222 [[package]]1883 [[package]]
1223 name = "crypto-common"1884 name = "crypto-common"
1224 version = "0.1.6"1885 version = "0.1.6"
@@ -1239,6 +1900,33 @@ dependencies = [
1239 "rand_core 0.10.1",1900 "rand_core 0.10.1",
1240 ]1901 ]
1241 1902
1903+[[package]]
1904+name = "css-color"
1905+version = "0.2.8"
1906+source = "registry+https://github.com/rust-lang/crates.io-index"
1907+checksum = "42aaeae719fd78ce501d77c6cdf01f7e96f26bcd5617a4903a1c2b97e388543a"
1908+
1909+[[package]]
1910+name = "csscolorparser"
1911+version = "0.8.4"
1912+source = "registry+https://github.com/rust-lang/crates.io-index"
1913+checksum = "168dbdf4dced8f57fa4246ac9080598452b49d70bb2d0e46422142f113140dd8"
1914+dependencies = [
1915+ "num-traits",
1916+ "phf",
1917+ "serde",
1918+ "uncased",
1919+]
1920+
1921+[[package]]
1922+name = "ctor"
1923+version = "0.10.1"
1924+source = "registry+https://github.com/rust-lang/crates.io-index"
1925+checksum = "83cf0d42651b16c6dfe68685716d18480d18a9c39c62d76e8cf3eb6ed5d8bcbf"
1926+dependencies = [
1927+ "dtor",
1928+]
1929+
1242 [[package]]1930 [[package]]
1243 name = "ctr"1931 name = "ctr"
1244 version = "0.9.2"1932 version = "0.9.2"
@@ -1292,14 +1980,38 @@ dependencies = [
1292 "syn 2.0.119",1980 "syn 2.0.119",
1293 ]1981 ]
1294 1982
1983+[[package]]
1984+name = "darling"
1985+version = "0.21.3"
1986+source = "registry+https://github.com/rust-lang/crates.io-index"
1987+checksum = "9cdf337090841a411e2a7f3deb9187445851f91b309c0c0a29e05f74a00a48c0"
1988+dependencies = [
1989+ "darling_core 0.21.3",
1990+ "darling_macro 0.21.3",
1991+]
1992+
1295 [[package]]1993 [[package]]
1296 name = "darling"1994 name = "darling"
1297 version = "0.23.0"1995 version = "0.23.0"
1298 source = "registry+https://github.com/rust-lang/crates.io-index"1996 source = "registry+https://github.com/rust-lang/crates.io-index"
1299 checksum = "25ae13da2f202d56bd7f91c25fba009e7717a1e4a1cc98a76d844b65ae912e9d"1997 checksum = "25ae13da2f202d56bd7f91c25fba009e7717a1e4a1cc98a76d844b65ae912e9d"
1300 dependencies = [1998 dependencies = [
1301- "darling_core",1999+ "darling_core 0.23.0",
1302- "darling_macro",2000+ "darling_macro 0.23.0",
2001+]
2002+
2003+[[package]]
2004+name = "darling_core"
2005+version = "0.21.3"
2006+source = "registry+https://github.com/rust-lang/crates.io-index"
2007+checksum = "1247195ecd7e3c85f83c8d2a366e4210d588e802133e1e355180a9870b517ea4"
2008+dependencies = [
2009+ "fnv",
2010+ "ident_case",
2011+ "proc-macro2",
2012+ "quote",
2013+ "strsim",
2014+ "syn 2.0.119",
1303 ]2015 ]
1304 2016
1305 [[package]]2017 [[package]]
@@ -1315,13 +2027,24 @@ dependencies = [
1315 "syn 2.0.119",2027 "syn 2.0.119",
1316 ]2028 ]
1317 2029
2030+[[package]]
2031+name = "darling_macro"
2032+version = "0.21.3"
2033+source = "registry+https://github.com/rust-lang/crates.io-index"
2034+checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81"
2035+dependencies = [
2036+ "darling_core 0.21.3",
2037+ "quote",
2038+ "syn 2.0.119",
2039+]
2040+
1318 [[package]]2041 [[package]]
1319 name = "darling_macro"2042 name = "darling_macro"
1320 version = "0.23.0"2043 version = "0.23.0"
1321 source = "registry+https://github.com/rust-lang/crates.io-index"2044 source = "registry+https://github.com/rust-lang/crates.io-index"
1322 checksum = "ac3984ec7bd6cfa798e62b4a642426a5be0e68f9401cfc2a01e3fa9ea2fcdb8d"2045 checksum = "ac3984ec7bd6cfa798e62b4a642426a5be0e68f9401cfc2a01e3fa9ea2fcdb8d"
1323 dependencies = [2046 dependencies = [
1324- "darling_core",2047+ "darling_core 0.23.0",
1325 "quote",2048 "quote",
1326 "syn 2.0.119",2049 "syn 2.0.119",
1327 ]2050 ]
@@ -1358,6 +2081,12 @@ dependencies = [
1358 "syn 2.0.119",2081 "syn 2.0.119",
1359 ]2082 ]
1360 2083
2084+[[package]]
2085+name = "data-url"
2086+version = "0.3.2"
2087+source = "registry+https://github.com/rust-lang/crates.io-index"
2088+checksum = "be1e0bca6c3637f992fc1cc7cbc52a78c1ef6db076dbf1059c4323d6a2048376"
2089+
1361 [[package]]2090 [[package]]
1362 name = "defmt"2091 name = "defmt"
1363 version = "1.1.1"2092 version = "1.1.1"
@@ -1457,6 +2186,29 @@ dependencies = [
1457 "unicode-xid",2186 "unicode-xid",
1458 ]2187 ]
1459 2188
2189+[[package]]
2190+name = "derive_setters"
2191+version = "0.1.9"
2192+source = "registry+https://github.com/rust-lang/crates.io-index"
2193+checksum = "b7e6f6fa1f03c14ae082120b84b3c7fbd7b8588d924cf2d7c3daf9afd49df8b9"
2194+dependencies = [
2195+ "darling 0.21.3",
2196+ "proc-macro2",
2197+ "quote",
2198+ "syn 2.0.119",
2199+]
2200+
2201+[[package]]
2202+name = "derive_utils"
2203+version = "0.16.0"
2204+source = "registry+https://github.com/rust-lang/crates.io-index"
2205+checksum = "dc05a5d33db20c784f873e84934ad94bb209a090987ac5f62fede2c178234f23"
2206+dependencies = [
2207+ "proc-macro2",
2208+ "quote",
2209+ "syn 3.0.3",
2210+]
2211+
1460 [[package]]2212 [[package]]
1461 name = "diatomic-waker"2213 name = "diatomic-waker"
1462 version = "0.2.3"2214 version = "0.2.3"
@@ -1480,14 +2232,36 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
1480 checksum = "f1dd6dbb5841937940781866fa1281a1ff7bd3bf827091440879f9994983d5c2"2232 checksum = "f1dd6dbb5841937940781866fa1281a1ff7bd3bf827091440879f9994983d5c2"
1481 dependencies = [2233 dependencies = [
1482 "block-buffer 0.12.1",2234 "block-buffer 0.12.1",
2235+ "const-oid",
1483 "crypto-common 0.2.2",2236 "crypto-common 0.2.2",
1484 ]2237 ]
1485 2238
1486 [[package]]2239 [[package]]
1487-name = "dispatch"2240+name = "dirs"
1488-version = "0.2.0"2241+version = "6.0.0"
1489 source = "registry+https://github.com/rust-lang/crates.io-index"2242 source = "registry+https://github.com/rust-lang/crates.io-index"
1490-checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b"2243+checksum = "c3e8aa94d75141228480295a7d0e7feb620b1a5ad9f12bc40be62411e38cce4e"
2244+dependencies = [
2245+ "dirs-sys",
2246+]
2247+
2248+[[package]]
2249+name = "dirs-sys"
2250+version = "0.5.0"
2251+source = "registry+https://github.com/rust-lang/crates.io-index"
2252+checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab"
2253+dependencies = [
2254+ "libc",
2255+ "option-ext",
2256+ "redox_users",
2257+ "windows-sys 0.59.0",
2258+]
2259+
2260+[[package]]
2261+name = "dispatch"
2262+version = "0.2.0"
2263+source = "registry+https://github.com/rust-lang/crates.io-index"
2264+checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b"
1491 2265
1492 [[package]]2266 [[package]]
1493 name = "dispatch2"2267 name = "dispatch2"
@@ -1532,6 +2306,27 @@ dependencies = [
1532 "winapi",2306 "winapi",
1533 ]2307 ]
1534 2308
2309+[[package]]
2310+name = "dnd"
2311+version = "0.1.0"
2312+source = "git+https://github.com/pop-os/window_clipboard.git?tag=sctk-0.20#f68595ee0e62fbd6589f4709b5aaa5c3c7ea5f6c"
2313+dependencies = [
2314+ "bitflags 2.13.1",
2315+ "mime 0.1.0",
2316+ "raw-window-handle",
2317+ "smithay-client-toolkit 0.20.0",
2318+ "smithay-clipboard 0.8.0",
2319+]
2320+
2321+[[package]]
2322+name = "document-features"
2323+version = "0.2.12"
2324+source = "registry+https://github.com/rust-lang/crates.io-index"
2325+checksum = "d4b8a88685455ed29a21542a33abd9cb6510b6b129abadabdcef0f4c55bc8f61"
2326+dependencies = [
2327+ "litrs",
2328+]
2329+
1535 [[package]]2330 [[package]]
1536 name = "downcast-rs"2331 name = "downcast-rs"
1537 version = "1.2.1"2332 version = "1.2.1"
@@ -1544,6 +2339,56 @@ version = "0.1.2"
1544 source = "registry+https://github.com/rust-lang/crates.io-index"2339 source = "registry+https://github.com/rust-lang/crates.io-index"
1545 checksum = "d8b14ccef22fc6f5a8f4d7d768562a182c04ce9a3b3157b91390b52ddfdf1a76"2340 checksum = "d8b14ccef22fc6f5a8f4d7d768562a182c04ce9a3b3157b91390b52ddfdf1a76"
1546 2341
2342+[[package]]
2343+name = "dpi"
2344+version = "0.1.2"
2345+source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#71ce08c043814514a8fd92d9d0599f115ae854e8"
2346+
2347+[[package]]
2348+name = "drm"
2349+version = "0.11.1"
2350+source = "registry+https://github.com/rust-lang/crates.io-index"
2351+checksum = "a0f8a69e60d75ae7dab4ef26a59ca99f2a89d4c142089b537775ae0c198bdcde"
2352+dependencies = [
2353+ "bitflags 2.13.1",
2354+ "bytemuck",
2355+ "drm-ffi",
2356+ "drm-fourcc",
2357+ "rustix 0.38.44",
2358+]
2359+
2360+[[package]]
2361+name = "drm-ffi"
2362+version = "0.7.1"
2363+source = "registry+https://github.com/rust-lang/crates.io-index"
2364+checksum = "41334f8405792483e32ad05fbb9c5680ff4e84491883d2947a4757dc54cb2ac6"
2365+dependencies = [
2366+ "drm-sys",
2367+ "rustix 0.38.44",
2368+]
2369+
2370+[[package]]
2371+name = "drm-fourcc"
2372+version = "2.2.0"
2373+source = "registry+https://github.com/rust-lang/crates.io-index"
2374+checksum = "0aafbcdb8afc29c1a7ee5fbe53b5d62f4565b35a042a662ca9fecd0b54dae6f4"
2375+
2376+[[package]]
2377+name = "drm-sys"
2378+version = "0.6.1"
2379+source = "registry+https://github.com/rust-lang/crates.io-index"
2380+checksum = "2d09ff881f92f118b11105ba5e34ff8f4adf27b30dae8f12e28c193af1c83176"
2381+dependencies = [
2382+ "libc",
2383+ "linux-raw-sys 0.6.5",
2384+]
2385+
2386+[[package]]
2387+name = "dtor"
2388+version = "0.8.1"
2389+source = "registry+https://github.com/rust-lang/crates.io-index"
2390+checksum = "edf234dd1594d6dd434a8fb8cada51ddbbc593e40e4a01556a0b31c62da2775b"
2391+
1547 [[package]]2392 [[package]]
1548 name = "dunce"2393 name = "dunce"
1549 version = "1.0.5"2394 version = "1.0.5"
@@ -1650,10 +2495,10 @@ dependencies = [
1650 "log",2495 "log",
1651 "profiling",2496 "profiling",
1652 "raw-window-handle",2497 "raw-window-handle",
1653- "smithay-clipboard",2498+ "smithay-clipboard 0.7.3",
1654 "web-time",2499 "web-time",
1655 "webbrowser",2500 "webbrowser",
1656- "winit",2501+ "winit 0.30.13",
1657 ]2502 ]
1658 2503
1659 [[package]]2504 [[package]]
@@ -1709,6 +2554,12 @@ dependencies = [
1709 "cfg-if",2554 "cfg-if",
1710 ]2555 ]
1711 2556
2557+[[package]]
2558+name = "endi"
2559+version = "1.1.1"
2560+source = "registry+https://github.com/rust-lang/crates.io-index"
2561+checksum = "66b7e2430c6dff6a955451e2cfc438f09cea1965a9d6f87f7e3b90decc014099"
2562+
1712 [[package]]2563 [[package]]
1713 name = "enum-assoc"2564 name = "enum-assoc"
1714 version = "1.3.0"2565 version = "1.3.0"
@@ -1720,6 +2571,27 @@ dependencies = [
1720 "syn 2.0.119",2571 "syn 2.0.119",
1721 ]2572 ]
1722 2573
2574+[[package]]
2575+name = "enumflags2"
2576+version = "0.7.12"
2577+source = "registry+https://github.com/rust-lang/crates.io-index"
2578+checksum = "1027f7680c853e056ebcec683615fb6fbbc07dbaa13b4d5d9442b146ded4ecef"
2579+dependencies = [
2580+ "enumflags2_derive",
2581+ "serde",
2582+]
2583+
2584+[[package]]
2585+name = "enumflags2_derive"
2586+version = "0.7.12"
2587+source = "registry+https://github.com/rust-lang/crates.io-index"
2588+checksum = "67c78a4d8fdf9953a5c9d458f9efe940fd97a0cab0941c075a813ac594733827"
2589+dependencies = [
2590+ "proc-macro2",
2591+ "quote",
2592+ "syn 2.0.119",
2593+]
2594+
1723 [[package]]2595 [[package]]
1724 name = "enumn"2596 name = "enumn"
1725 version = "0.1.14"2597 version = "0.1.14"
@@ -1809,6 +2681,45 @@ dependencies = [
1809 "num-traits",2681 "num-traits",
1810 ]2682 ]
1811 2683
2684+[[package]]
2685+name = "etagere"
2686+version = "0.2.15"
2687+source = "registry+https://github.com/rust-lang/crates.io-index"
2688+checksum = "fc89bf99e5dc15954a60f707c1e09d7540e5cd9af85fa75caa0b510bc08c5342"
2689+dependencies = [
2690+ "euclid",
2691+ "svg_fmt",
2692+]
2693+
2694+[[package]]
2695+name = "euclid"
2696+version = "0.22.14"
2697+source = "registry+https://github.com/rust-lang/crates.io-index"
2698+checksum = "f1a05365e3b1c6d1650318537c7460c6923f1abdd272ad6842baa2b509957a06"
2699+dependencies = [
2700+ "num-traits",
2701+]
2702+
2703+[[package]]
2704+name = "event-listener"
2705+version = "5.4.2"
2706+source = "registry+https://github.com/rust-lang/crates.io-index"
2707+checksum = "5a23add41df1562121a9393cb065eab5146a1242410f23a644851e90cfd669d2"
2708+dependencies = [
2709+ "parking",
2710+ "pin-project-lite",
2711+]
2712+
2713+[[package]]
2714+name = "event-listener-strategy"
2715+version = "0.5.4"
2716+source = "registry+https://github.com/rust-lang/crates.io-index"
2717+checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93"
2718+dependencies = [
2719+ "event-listener",
2720+ "pin-project-lite",
2721+]
2722+
1812 [[package]]2723 [[package]]
1813 name = "extended"2724 name = "extended"
1814 version = "0.1.0"2725 version = "0.1.0"
@@ -1827,7 +2738,7 @@ version = "0.17.0"
1827 source = "registry+https://github.com/rust-lang/crates.io-index"2738 source = "registry+https://github.com/rust-lang/crates.io-index"
1828 checksum = "ef975e30683b2d965054bb0a836f8973857c4ebf6acf274fe46617cd285060d8"2739 checksum = "ef975e30683b2d965054bb0a836f8973857c4ebf6acf274fe46617cd285060d8"
1829 dependencies = [2740 dependencies = [
1830- "foldhash",2741+ "foldhash 0.2.0",
1831 "libm",2742 "libm",
1832 "portable-atomic",2743 "portable-atomic",
1833 "siphasher",2744 "siphasher",
@@ -1860,6 +2771,15 @@ version = "0.3.0"
1860 source = "registry+https://github.com/rust-lang/crates.io-index"2771 source = "registry+https://github.com/rust-lang/crates.io-index"
1861 checksum = "64cd1e32ddd350061ae6edb1b082d7c54915b5c672c389143b9a63403a109f24"2772 checksum = "64cd1e32ddd350061ae6edb1b082d7c54915b5c672c389143b9a63403a109f24"
1862 2773
2774+[[package]]
2775+name = "find-crate"
2776+version = "0.6.3"
2777+source = "registry+https://github.com/rust-lang/crates.io-index"
2778+checksum = "59a98bbaacea1c0eb6a0876280051b892eb73594fd90cf3b20e9c817029c57d2"
2779+dependencies = [
2780+ "toml 0.5.11",
2781+]
2782+
1863 [[package]]2783 [[package]]
1864 name = "find-msvc-tools"2784 name = "find-msvc-tools"
1865 version = "0.1.9"2785 version = "0.1.9"
@@ -1901,18 +2821,131 @@ dependencies = [
1901 "zlib-rs",2821 "zlib-rs",
1902 ]2822 ]
1903 2823
2824+[[package]]
2825+name = "float-cmp"
2826+version = "0.9.0"
2827+source = "registry+https://github.com/rust-lang/crates.io-index"
2828+checksum = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4"
2829+
2830+[[package]]
2831+name = "float-cmp"
2832+version = "0.10.0"
2833+source = "registry+https://github.com/rust-lang/crates.io-index"
2834+checksum = "b09cf3155332e944990140d967ff5eceb70df778b34f77d8075db46e4704e6d8"
2835+dependencies = [
2836+ "num-traits",
2837+]
2838+
2839+[[package]]
2840+name = "float_next_after"
2841+version = "1.0.0"
2842+source = "registry+https://github.com/rust-lang/crates.io-index"
2843+checksum = "8bf7cc16383c4b8d58b9905a8509f02926ce3058053c056376248d958c9df1e8"
2844+
2845+[[package]]
2846+name = "fluent"
2847+version = "0.17.0"
2848+source = "registry+https://github.com/rust-lang/crates.io-index"
2849+checksum = "8137a6d5a2c50d6b0ebfcb9aaa91a28154e0a70605f112d30cb0cd4a78670477"
2850+dependencies = [
2851+ "fluent-bundle",
2852+ "unic-langid",
2853+]
2854+
2855+[[package]]
2856+name = "fluent-bundle"
2857+version = "0.16.0"
2858+source = "registry+https://github.com/rust-lang/crates.io-index"
2859+checksum = "01203cb8918f5711e73891b347816d932046f95f54207710bda99beaeb423bf4"
2860+dependencies = [
2861+ "fluent-langneg",
2862+ "fluent-syntax",
2863+ "intl-memoizer",
2864+ "intl_pluralrules",
2865+ "rustc-hash 2.1.3",
2866+ "self_cell",
2867+ "smallvec",
2868+ "unic-langid",
2869+]
2870+
2871+[[package]]
2872+name = "fluent-langneg"
2873+version = "0.13.1"
2874+source = "registry+https://github.com/rust-lang/crates.io-index"
2875+checksum = "7eebbe59450baee8282d71676f3bfed5689aeab00b27545e83e5f14b1195e8b0"
2876+dependencies = [
2877+ "unic-langid",
2878+]
2879+
2880+[[package]]
2881+name = "fluent-syntax"
2882+version = "0.12.0"
2883+source = "registry+https://github.com/rust-lang/crates.io-index"
2884+checksum = "54f0d287c53ffd184d04d8677f590f4ac5379785529e5e08b1c8083acdd5c198"
2885+dependencies = [
2886+ "memchr",
2887+ "thiserror 2.0.19",
2888+]
2889+
1904 [[package]]2890 [[package]]
1905 name = "fnv"2891 name = "fnv"
1906 version = "1.0.7"2892 version = "1.0.7"
1907 source = "registry+https://github.com/rust-lang/crates.io-index"2893 source = "registry+https://github.com/rust-lang/crates.io-index"
1908 checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"2894 checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
1909 2895
2896+[[package]]
2897+name = "foldhash"
2898+version = "0.1.5"
2899+source = "registry+https://github.com/rust-lang/crates.io-index"
2900+checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2"
2901+
1910 [[package]]2902 [[package]]
1911 name = "foldhash"2903 name = "foldhash"
1912 version = "0.2.0"2904 version = "0.2.0"
1913 source = "registry+https://github.com/rust-lang/crates.io-index"2905 source = "registry+https://github.com/rust-lang/crates.io-index"
1914 checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb"2906 checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb"
1915 2907
2908+[[package]]
2909+name = "font-types"
2910+version = "0.11.3"
2911+source = "registry+https://github.com/rust-lang/crates.io-index"
2912+checksum = "5b38ad915f6dadd993ced50848a8291a543bd41ca62bc10740d5e64e2ab4cfd7"
2913+dependencies = [
2914+ "bytemuck",
2915+]
2916+
2917+[[package]]
2918+name = "font-types"
2919+version = "0.12.5"
2920+source = "registry+https://github.com/rust-lang/crates.io-index"
2921+checksum = "b8eb065f3251655b3c90e22e5e363f310fc5332fb3402e37bbc94752283248f6"
2922+dependencies = [
2923+ "bytemuck",
2924+]
2925+
2926+[[package]]
2927+name = "fontconfig-parser"
2928+version = "0.5.8"
2929+source = "registry+https://github.com/rust-lang/crates.io-index"
2930+checksum = "bbc773e24e02d4ddd8395fd30dc147524273a83e54e0f312d986ea30de5f5646"
2931+dependencies = [
2932+ "roxmltree",
2933+]
2934+
2935+[[package]]
2936+name = "fontdb"
2937+version = "0.23.0"
2938+source = "registry+https://github.com/rust-lang/crates.io-index"
2939+checksum = "457e789b3d1202543297a350643cf459f836cade38934e7a4cf6a39e7cde2905"
2940+dependencies = [
2941+ "fontconfig-parser",
2942+ "log",
2943+ "memmap2 0.9.11",
2944+ "slotmap",
2945+ "tinyvec",
2946+ "ttf-parser",
2947+]
2948+
1916 [[package]]2949 [[package]]
1917 name = "foreign-types"2950 name = "foreign-types"
1918 version = "0.5.0"2951 version = "0.5.0"
@@ -2102,8 +3135,8 @@ dependencies = [
2102 "libc",3135 "libc",
2103 "log",3136 "log",
2104 "rustversion",3137 "rustversion",
2105- "windows-link",3138+ "windows-link 0.2.1",
2106- "windows-result",3139+ "windows-result 0.4.1",
2107 ]3140 ]
2108 3141
2109 [[package]]3142 [[package]]
@@ -2123,7 +3156,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
2123 checksum = "1bd49230192a3797a9a4d6abe9b3eed6f7fa4c8a8a4947977c6f80025f92cbd8"3156 checksum = "1bd49230192a3797a9a4d6abe9b3eed6f7fa4c8a8a4947977c6f80025f92cbd8"
2124 dependencies = [3157 dependencies = [
2125 "rustix 1.1.4",3158 "rustix 1.1.4",
2126- "windows-link",3159+ "windows-link 0.2.1",
2127 ]3160 ]
2128 3161
2129 [[package]]3162 [[package]]
@@ -2175,6 +3208,16 @@ dependencies = [
2175 "polyval",3208 "polyval",
2176 ]3209 ]
2177 3210
3211+[[package]]
3212+name = "gif"
3213+version = "0.13.3"
3214+source = "registry+https://github.com/rust-lang/crates.io-index"
3215+checksum = "4ae047235e33e2829703574b54fdec96bfbad892062d97fed2f76022287de61b"
3216+dependencies = [
3217+ "color_quant",
3218+ "weezl",
3219+]
3220+
2178 [[package]]3221 [[package]]
2179 name = "gimli"3222 name = "gimli"
2180 version = "0.32.3"3223 version = "0.32.3"
@@ -2192,6 +3235,12 @@ dependencies = [
2192 "xml-rs",3235 "xml-rs",
2193 ]3236 ]
2194 3237
3238+[[package]]
3239+name = "glam"
3240+version = "0.25.0"
3241+source = "registry+https://github.com/rust-lang/crates.io-index"
3242+checksum = "151665d9be52f9bb40fc7966565d39666f2d1e69233571b71b87791c7e0528b3"
3243+
2195 [[package]]3244 [[package]]
2196 name = "glob"3245 name = "glob"
2197 version = "0.3.4"3246 version = "0.3.4"
@@ -2256,7 +3305,7 @@ dependencies = [
2256 "cfg_aliases 0.2.2",3305 "cfg_aliases 0.2.2",
2257 "glutin",3306 "glutin",
2258 "raw-window-handle",3307 "raw-window-handle",
2259- "winit",3308+ "winit 0.30.13",
2260 ]3309 ]
2261 3310
2262 [[package]]3311 [[package]]
@@ -2288,6 +3337,56 @@ dependencies = [
2288 "gl_generator",3337 "gl_generator",
2289 ]3338 ]
2290 3339
3340+[[package]]
3341+name = "gpu-allocator"
3342+version = "0.28.0"
3343+source = "registry+https://github.com/rust-lang/crates.io-index"
3344+checksum = "51255ea7cfaadb6c5f1528d43e92a82acb2b96c43365989a28b2d44ee38f8795"
3345+dependencies = [
3346+ "ash",
3347+ "hashbrown 0.16.1",
3348+ "log",
3349+ "presser",
3350+ "thiserror 2.0.19",
3351+ "windows 0.62.2",
3352+]
3353+
3354+[[package]]
3355+name = "gpu-descriptor"
3356+version = "0.3.2"
3357+source = "registry+https://github.com/rust-lang/crates.io-index"
3358+checksum = "b89c83349105e3732062a895becfc71a8f921bb71ecbbdd8ff99263e3b53a0ca"
3359+dependencies = [
3360+ "bitflags 2.13.1",
3361+ "gpu-descriptor-types",
3362+ "hashbrown 0.15.5",
3363+]
3364+
3365+[[package]]
3366+name = "gpu-descriptor-types"
3367+version = "0.2.0"
3368+source = "registry+https://github.com/rust-lang/crates.io-index"
3369+checksum = "fdf242682df893b86f33a73828fb09ca4b2d3bb6cc95249707fc684d27484b91"
3370+dependencies = [
3371+ "bitflags 2.13.1",
3372+]
3373+
3374+[[package]]
3375+name = "grid"
3376+version = "1.0.1"
3377+source = "registry+https://github.com/rust-lang/crates.io-index"
3378+checksum = "b40ca9252762c466af32d0b1002e91e4e1bc5398f77455e55474deb466355ff5"
3379+
3380+[[package]]
3381+name = "guillotiere"
3382+version = "0.6.2"
3383+source = "registry+https://github.com/rust-lang/crates.io-index"
3384+checksum = "b62d5865c036cb1393e23c50693df631d3f5d7bcca4c04fe4cc0fd592e74a782"
3385+dependencies = [
3386+ "euclid",
3387+ "svg_fmt",
3388+]
3389+
2291 [[package]]3390 [[package]]
2292 name = "h2"3391 name = "h2"
2293 version = "0.4.15"3392 version = "0.4.15"
@@ -2321,6 +3420,7 @@ checksum = "6ea2d84b969582b4b1864a92dc5d27cd2b77b622a8d79306834f1be5ba20d84b"
2321 dependencies = [3420 dependencies = [
2322 "cfg-if",3421 "cfg-if",
2323 "crunchy",3422 "crunchy",
3423+ "num-traits",
2324 "zerocopy",3424 "zerocopy",
2325 ]3425 ]
2326 3426
@@ -2343,6 +3443,19 @@ dependencies = [
2343 "url",3443 "url",
2344 ]3444 ]
2345 3445
3446+[[package]]
3447+name = "harfrust"
3448+version = "0.5.2"
3449+source = "registry+https://github.com/rust-lang/crates.io-index"
3450+checksum = "9da2e5ae821f6e96664977bf974d6d6a2d6682f9ccee23e62ec1d134246845f9"
3451+dependencies = [
3452+ "bitflags 2.13.1",
3453+ "bytemuck",
3454+ "core_maths",
3455+ "read-fonts 0.37.0",
3456+ "smallvec",
3457+]
3458+
2346 [[package]]3459 [[package]]
2347 name = "hash32"3460 name = "hash32"
2348 version = "0.2.1"3461 version = "0.2.1"
@@ -2358,6 +3471,26 @@ version = "0.12.3"
2358 source = "registry+https://github.com/rust-lang/crates.io-index"3471 source = "registry+https://github.com/rust-lang/crates.io-index"
2359 checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"3472 checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
2360 3473
3474+[[package]]
3475+name = "hashbrown"
3476+version = "0.15.5"
3477+source = "registry+https://github.com/rust-lang/crates.io-index"
3478+checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1"
3479+dependencies = [
3480+ "foldhash 0.1.5",
3481+]
3482+
3483+[[package]]
3484+name = "hashbrown"
3485+version = "0.16.1"
3486+source = "registry+https://github.com/rust-lang/crates.io-index"
3487+checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100"
3488+dependencies = [
3489+ "allocator-api2",
3490+ "equivalent",
3491+ "foldhash 0.2.0",
3492+]
3493+
2361 [[package]]3494 [[package]]
2362 name = "hashbrown"3495 name = "hashbrown"
2363 version = "0.17.1"3496 version = "0.17.1"
@@ -2366,7 +3499,7 @@ checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a"
2366 dependencies = [3499 dependencies = [
2367 "allocator-api2",3500 "allocator-api2",
2368 "equivalent",3501 "equivalent",
2369- "foldhash",3502+ "foldhash 0.2.0",
2370 ]3503 ]
2371 3504
2372 [[package]]3505 [[package]]
@@ -2385,7 +3518,13 @@ dependencies = [
2385 3518
2386 [[package]]3519 [[package]]
2387 name = "heck"3520 name = "heck"
2388-version = "0.5.0"3521+version = "0.4.1"
3522+source = "registry+https://github.com/rust-lang/crates.io-index"
3523+checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
3524+
3525+[[package]]
3526+name = "heck"
3527+version = "0.5.0"
2389 source = "registry+https://github.com/rust-lang/crates.io-index"3528 source = "registry+https://github.com/rust-lang/crates.io-index"
2390 checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"3529 checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
2391 3530
@@ -2401,6 +3540,23 @@ version = "0.4.3"
2401 source = "registry+https://github.com/rust-lang/crates.io-index"3540 source = "registry+https://github.com/rust-lang/crates.io-index"
2402 checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"3541 checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
2403 3542
3543+[[package]]
3544+name = "hex_color"
3545+version = "3.0.0"
3546+source = "registry+https://github.com/rust-lang/crates.io-index"
3547+checksum = "d37f101bf4c633f7ca2e4b5e136050314503dd198e78e325ea602c327c484ef0"
3548+dependencies = [
3549+ "arrayvec",
3550+ "rand 0.8.7",
3551+ "serde",
3552+]
3553+
3554+[[package]]
3555+name = "hexf-parse"
3556+version = "0.2.1"
3557+source = "registry+https://github.com/rust-lang/crates.io-index"
3558+checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df"
3559+
2404 [[package]]3560 [[package]]
2405 name = "hickory-net"3561 name = "hickory-net"
2406 version = "0.26.2"3562 version = "0.26.2"
@@ -2609,6 +3765,73 @@ dependencies = [
2609 "tracing",3765 "tracing",
2610 ]3766 ]
2611 3767
3768+[[package]]
3769+name = "i18n-config"
3770+version = "0.4.8"
3771+source = "registry+https://github.com/rust-lang/crates.io-index"
3772+checksum = "3e06b90c8a0d252e203c94344b21e35a30f3a3a85dc7db5af8f8df9f3e0c63ef"
3773+dependencies = [
3774+ "basic-toml",
3775+ "log",
3776+ "serde",
3777+ "serde_derive",
3778+ "thiserror 1.0.69",
3779+ "unic-langid",
3780+]
3781+
3782+[[package]]
3783+name = "i18n-embed"
3784+version = "0.16.0"
3785+source = "registry+https://github.com/rust-lang/crates.io-index"
3786+checksum = "a217bbb075dcaefb292efa78897fc0678245ca67f265d12c351e42268fcb0305"
3787+dependencies = [
3788+ "arc-swap",
3789+ "fluent",
3790+ "fluent-langneg",
3791+ "fluent-syntax",
3792+ "i18n-embed-impl",
3793+ "intl-memoizer",
3794+ "log",
3795+ "parking_lot",
3796+ "rust-embed",
3797+ "sys-locale",
3798+ "thiserror 1.0.69",
3799+ "unic-langid",
3800+ "walkdir",
3801+]
3802+
3803+[[package]]
3804+name = "i18n-embed-fl"
3805+version = "0.10.1"
3806+source = "registry+https://github.com/rust-lang/crates.io-index"
3807+checksum = "602e6bd30c3db2749e13e38b363a3d98d9d41de1d8de7a79c31bb69e45b47cda"
3808+dependencies = [
3809+ "find-crate",
3810+ "fluent",
3811+ "fluent-syntax",
3812+ "i18n-config",
3813+ "i18n-embed",
3814+ "proc-macro-error3",
3815+ "proc-macro2",
3816+ "quote",
3817+ "strsim",
3818+ "syn 2.0.119",
3819+ "unic-langid",
3820+]
3821+
3822+[[package]]
3823+name = "i18n-embed-impl"
3824+version = "0.8.4"
3825+source = "registry+https://github.com/rust-lang/crates.io-index"
3826+checksum = "0f2cc0e0523d1fe6fc2c6f66e5038624ea8091b3e7748b5e8e0c84b1698db6c2"
3827+dependencies = [
3828+ "find-crate",
3829+ "i18n-config",
3830+ "proc-macro2",
3831+ "quote",
3832+ "syn 2.0.119",
3833+]
3834+
2612 [[package]]3835 [[package]]
2613 name = "iana-time-zone"3836 name = "iana-time-zone"
2614 version = "0.1.65"3837 version = "0.1.65"
@@ -2621,7 +3844,7 @@ dependencies = [
2621 "js-sys",3844 "js-sys",
2622 "log",3845 "log",
2623 "wasm-bindgen",3846 "wasm-bindgen",
2624- "windows-core",3847+ "windows-core 0.62.2",
2625 ]3848 ]
2626 3849
2627 [[package]]3850 [[package]]
@@ -2633,6 +3856,246 @@ dependencies = [
2633 "cc",3856 "cc",
2634 ]3857 ]
2635 3858
3859+[[package]]
3860+name = "iced"
3861+version = "0.14.0"
3862+source = "git+https://github.com/pop-os/libcosmic?rev=a401af8b1c54a8abd393b8c5b7c8809402f83850#a401af8b1c54a8abd393b8c5b7c8809402f83850"
3863+dependencies = [
3864+ "build_helpers",
3865+ "dnd",
3866+ "iced_accessibility",
3867+ "iced_core",
3868+ "iced_debug",
3869+ "iced_futures",
3870+ "iced_program",
3871+ "iced_renderer",
3872+ "iced_runtime",
3873+ "iced_widget",
3874+ "iced_winit",
3875+ "image",
3876+ "mime 0.1.0",
3877+ "thiserror 2.0.19",
3878+ "window_clipboard",
3879+]
3880+
3881+[[package]]
3882+name = "iced_accessibility"
3883+version = "0.1.0"
3884+source = "git+https://github.com/pop-os/libcosmic?rev=a401af8b1c54a8abd393b8c5b7c8809402f83850#a401af8b1c54a8abd393b8c5b7c8809402f83850"
3885+dependencies = [
3886+ "accesskit",
3887+ "accesskit_winit",
3888+]
3889+
3890+[[package]]
3891+name = "iced_core"
3892+version = "0.14.0"
3893+source = "git+https://github.com/pop-os/libcosmic?rev=a401af8b1c54a8abd393b8c5b7c8809402f83850#a401af8b1c54a8abd393b8c5b7c8809402f83850"
3894+dependencies = [
3895+ "bitflags 2.13.1",
3896+ "build_helpers",
3897+ "bytes",
3898+ "cosmic-client-toolkit",
3899+ "dnd",
3900+ "glam",
3901+ "lilt",
3902+ "log",
3903+ "mime 0.1.0",
3904+ "num-traits",
3905+ "palette",
3906+ "raw-window-handle",
3907+ "rustc-hash 2.1.3",
3908+ "serde",
3909+ "smol_str 0.3.6",
3910+ "thiserror 2.0.19",
3911+ "unicode-segmentation",
3912+ "web-time",
3913+ "window_clipboard",
3914+]
3915+
3916+[[package]]
3917+name = "iced_debug"
3918+version = "0.14.0"
3919+source = "git+https://github.com/pop-os/libcosmic?rev=a401af8b1c54a8abd393b8c5b7c8809402f83850#a401af8b1c54a8abd393b8c5b7c8809402f83850"
3920+dependencies = [
3921+ "iced_core",
3922+ "iced_futures",
3923+ "log",
3924+]
3925+
3926+[[package]]
3927+name = "iced_futures"
3928+version = "0.14.0"
3929+source = "git+https://github.com/pop-os/libcosmic?rev=a401af8b1c54a8abd393b8c5b7c8809402f83850#a401af8b1c54a8abd393b8c5b7c8809402f83850"
3930+dependencies = [
3931+ "futures",
3932+ "iced_core",
3933+ "log",
3934+ "rustc-hash 2.1.3",
3935+ "tokio",
3936+ "wasm-bindgen-futures",
3937+ "wasmtimer",
3938+]
3939+
3940+[[package]]
3941+name = "iced_graphics"
3942+version = "0.14.0"
3943+source = "git+https://github.com/pop-os/libcosmic?rev=a401af8b1c54a8abd393b8c5b7c8809402f83850#a401af8b1c54a8abd393b8c5b7c8809402f83850"
3944+dependencies = [
3945+ "bitflags 2.13.1",
3946+ "bytemuck",
3947+ "cosmic-text",
3948+ "half",
3949+ "iced_core",
3950+ "iced_futures",
3951+ "image",
3952+ "kamadak-exif",
3953+ "log",
3954+ "lyon_path",
3955+ "raw-window-handle",
3956+ "rustc-hash 2.1.3",
3957+ "thiserror 2.0.19",
3958+ "unicode-segmentation",
3959+]
3960+
3961+[[package]]
3962+name = "iced_program"
3963+version = "0.14.0"
3964+source = "git+https://github.com/pop-os/libcosmic?rev=a401af8b1c54a8abd393b8c5b7c8809402f83850#a401af8b1c54a8abd393b8c5b7c8809402f83850"
3965+dependencies = [
3966+ "iced_graphics",
3967+ "iced_runtime",
3968+]
3969+
3970+[[package]]
3971+name = "iced_renderer"
3972+version = "0.14.0"
3973+source = "git+https://github.com/pop-os/libcosmic?rev=a401af8b1c54a8abd393b8c5b7c8809402f83850#a401af8b1c54a8abd393b8c5b7c8809402f83850"
3974+dependencies = [
3975+ "iced_graphics",
3976+ "iced_tiny_skia",
3977+ "iced_wgpu",
3978+ "log",
3979+ "thiserror 2.0.19",
3980+]
3981+
3982+[[package]]
3983+name = "iced_runtime"
3984+version = "0.14.0"
3985+source = "git+https://github.com/pop-os/libcosmic?rev=a401af8b1c54a8abd393b8c5b7c8809402f83850#a401af8b1c54a8abd393b8c5b7c8809402f83850"
3986+dependencies = [
3987+ "build_helpers",
3988+ "bytes",
3989+ "cosmic-client-toolkit",
3990+ "dnd",
3991+ "iced_core",
3992+ "iced_futures",
3993+ "raw-window-handle",
3994+ "thiserror 2.0.19",
3995+ "window_clipboard",
3996+]
3997+
3998+[[package]]
3999+name = "iced_tiny_skia"
4000+version = "0.14.0"
4001+source = "git+https://github.com/pop-os/libcosmic?rev=a401af8b1c54a8abd393b8c5b7c8809402f83850#a401af8b1c54a8abd393b8c5b7c8809402f83850"
4002+dependencies = [
4003+ "bytemuck",
4004+ "cosmic-text",
4005+ "iced_debug",
4006+ "iced_graphics",
4007+ "kurbo 0.10.4",
4008+ "log",
4009+ "resvg",
4010+ "rustc-hash 2.1.3",
4011+ "softbuffer",
4012+ "tiny-skia 0.11.4",
4013+]
4014+
4015+[[package]]
4016+name = "iced_wgpu"
4017+version = "0.14.0"
4018+source = "git+https://github.com/pop-os/libcosmic?rev=a401af8b1c54a8abd393b8c5b7c8809402f83850#a401af8b1c54a8abd393b8c5b7c8809402f83850"
4019+dependencies = [
4020+ "as-raw-xcb-connection",
4021+ "bitflags 2.13.1",
4022+ "build_helpers",
4023+ "bytemuck",
4024+ "cosmic-client-toolkit",
4025+ "cryoglyph",
4026+ "futures",
4027+ "glam",
4028+ "guillotiere",
4029+ "iced_debug",
4030+ "iced_graphics",
4031+ "log",
4032+ "lyon",
4033+ "raw-window-handle",
4034+ "resvg",
4035+ "rustc-hash 2.1.3",
4036+ "rustix 0.38.44",
4037+ "thiserror 2.0.19",
4038+ "tiny-xlib",
4039+ "wayland-backend",
4040+ "wayland-client",
4041+ "wayland-protocols",
4042+ "wayland-sys",
4043+ "wgpu",
4044+ "x11rb",
4045+]
4046+
4047+[[package]]
4048+name = "iced_widget"
4049+version = "0.14.2"
4050+source = "git+https://github.com/pop-os/libcosmic?rev=a401af8b1c54a8abd393b8c5b7c8809402f83850#a401af8b1c54a8abd393b8c5b7c8809402f83850"
4051+dependencies = [
4052+ "build_helpers",
4053+ "cosmic-client-toolkit",
4054+ "dnd",
4055+ "iced_renderer",
4056+ "iced_runtime",
4057+ "log",
4058+ "num-traits",
4059+ "ouroboros",
4060+ "rustc-hash 2.1.3",
4061+ "thiserror 2.0.19",
4062+ "unicode-segmentation",
4063+ "window_clipboard",
4064+]
4065+
4066+[[package]]
4067+name = "iced_winit"
4068+version = "0.14.0"
4069+source = "git+https://github.com/pop-os/libcosmic?rev=a401af8b1c54a8abd393b8c5b7c8809402f83850#a401af8b1c54a8abd393b8c5b7c8809402f83850"
4070+dependencies = [
4071+ "build_helpers",
4072+ "cosmic-client-toolkit",
4073+ "cursor-icon",
4074+ "dnd",
4075+ "iced_debug",
4076+ "iced_futures",
4077+ "iced_graphics",
4078+ "iced_program",
4079+ "iced_runtime",
4080+ "log",
4081+ "raw-window-handle",
4082+ "rustc-hash 2.1.3",
4083+ "rustix 0.38.44",
4084+ "thiserror 2.0.19",
4085+ "wasm-bindgen-futures",
4086+ "wayland-backend",
4087+ "wayland-client",
4088+ "wayland-protocols",
4089+ "web-sys",
4090+ "winapi",
4091+ "window_clipboard",
4092+ "winit 0.31.0-beta.2",
4093+ "winit-core",
4094+ "xkbcommon 0.7.0",
4095+ "xkbcommon-dl",
4096+ "xkeysym",
4097+]
4098+
2636 [[package]]4099 [[package]]
2637 name = "icu_collections"4100 name = "icu_collections"
2638 version = "2.2.0"4101 version = "2.2.0"
@@ -2780,10 +4243,26 @@ dependencies = [
2780 "num-traits",4243 "num-traits",
2781 "png 0.18.1",4244 "png 0.18.1",
2782 "tiff",4245 "tiff",
2783- "zune-core",4246+ "zune-core 0.5.1",
2784- "zune-jpeg",4247+ "zune-jpeg 0.5.15",
4248+]
4249+
4250+[[package]]
4251+name = "image-webp"
4252+version = "0.2.4"
4253+source = "registry+https://github.com/rust-lang/crates.io-index"
4254+checksum = "525e9ff3e1a4be2fbea1fdf0e98686a6d98b4d8f937e1bf7402245af1909e8c3"
4255+dependencies = [
4256+ "byteorder-lite",
4257+ "quick-error",
2785 ]4258 ]
2786 4259
4260+[[package]]
4261+name = "imagesize"
4262+version = "0.13.0"
4263+source = "registry+https://github.com/rust-lang/crates.io-index"
4264+checksum = "edcd27d72f2f071c64249075f42e205ff93c9a4c5f6c6da53e79ed9f9832c285"
4265+
2787 [[package]]4266 [[package]]
2788 name = "indexmap"4267 name = "indexmap"
2789 version = "1.9.3"4268 version = "1.9.3"
@@ -2836,6 +4315,25 @@ dependencies = [
2836 "generic-array",4315 "generic-array",
2837 ]4316 ]
2838 4317
4318+[[package]]
4319+name = "intl-memoizer"
4320+version = "0.5.3"
4321+source = "registry+https://github.com/rust-lang/crates.io-index"
4322+checksum = "310da2e345f5eb861e7a07ee182262e94975051db9e4223e909ba90f392f163f"
4323+dependencies = [
4324+ "type-map",
4325+ "unic-langid",
4326+]
4327+
4328+[[package]]
4329+name = "intl_pluralrules"
4330+version = "7.0.2"
4331+source = "registry+https://github.com/rust-lang/crates.io-index"
4332+checksum = "078ea7b7c29a2b4df841a7f6ac8775ff6074020c6776d48491ce2268e068f972"
4333+dependencies = [
4334+ "unic-langid",
4335+]
4336+
2839 [[package]]4337 [[package]]
2840 name = "ipconfig"4338 name = "ipconfig"
2841 version = "0.3.4"4339 version = "0.3.4"
@@ -2845,7 +4343,7 @@ dependencies = [
2845 "socket2",4343 "socket2",
2846 "widestring",4344 "widestring",
2847 "windows-registry",4345 "windows-registry",
2848- "windows-result",4346+ "windows-result 0.4.1",
2849 "windows-sys 0.61.2",4347 "windows-sys 0.61.2",
2850 ]4348 ]
2851 4349
@@ -3030,7 +4528,7 @@ version = "1.0.1"
3030 source = "registry+https://github.com/rust-lang/crates.io-index"4528 source = "registry+https://github.com/rust-lang/crates.io-index"
3031 checksum = "1ae5f0c4405d1fbc9fb16ff422ca40620e93dc36c30ecaba0c2aee3992b7bd48"4529 checksum = "1ae5f0c4405d1fbc9fb16ff422ca40620e93dc36c30ecaba0c2aee3992b7bd48"
3032 dependencies = [4530 dependencies = [
3033- "heck",4531+ "heck 0.5.0",
3034 "proc-macro2",4532 "proc-macro2",
3035 "quote",4533 "quote",
3036 "syn 2.0.119",4534 "syn 2.0.119",
@@ -3072,7 +4570,7 @@ dependencies = [
3072 "iroh-base",4570 "iroh-base",
3073 "iroh-dns",4571 "iroh-dns",
3074 "iroh-metrics",4572 "iroh-metrics",
3075- "lru",4573+ "lru 0.18.4",
3076 "n0-error",4574 "n0-error",
3077 "n0-future",4575 "n0-future",
3078 "noq",4576 "noq",
@@ -3195,10 +4693,12 @@ dependencies = [
3195 "defmt",4693 "defmt",
3196 "jiff-core",4694 "jiff-core",
3197 "jiff-static",4695 "jiff-static",
4696+ "jiff-tzdb-platform",
3198 "log",4697 "log",
3199 "portable-atomic",4698 "portable-atomic",
3200 "portable-atomic-util",4699 "portable-atomic-util",
3201 "serde_core",4700 "serde_core",
4701+ "windows-link 0.2.1",
3202 ]4702 ]
3203 4703
3204 [[package]]4704 [[package]]
@@ -3222,6 +4722,21 @@ dependencies = [
3222 "syn 2.0.119",4722 "syn 2.0.119",
3223 ]4723 ]
3224 4724
4725+[[package]]
4726+name = "jiff-tzdb"
4727+version = "0.1.8"
4728+source = "registry+https://github.com/rust-lang/crates.io-index"
4729+checksum = "142bd39932ad231f10513df9ab62661fead8719872150b7ad02a2df79f4e141e"
4730+
4731+[[package]]
4732+name = "jiff-tzdb-platform"
4733+version = "0.1.3"
4734+source = "registry+https://github.com/rust-lang/crates.io-index"
4735+checksum = "875a5a69ac2bab1a891711cf5eccbec1ce0341ea805560dcd90b7a2e925132e8"
4736+dependencies = [
4737+ "jiff-tzdb",
4738+]
4739+
3225 [[package]]4740 [[package]]
3226 name = "jni"4741 name = "jni"
3227 version = "0.21.1"4742 version = "0.21.1"
@@ -3252,7 +4767,7 @@ dependencies = [
3252 "simd_cesu8",4767 "simd_cesu8",
3253 "thiserror 2.0.19",4768 "thiserror 2.0.19",
3254 "walkdir",4769 "walkdir",
3255- "windows-link",4770+ "windows-link 0.2.1",
3256 ]4771 ]
3257 4772
3258 [[package]]4773 [[package]]
@@ -3313,6 +4828,15 @@ dependencies = [
3313 "log",4828 "log",
3314 ]4829 ]
3315 4830
4831+[[package]]
4832+name = "jolt-cosmic"
4833+version = "0.1.0"
4834+dependencies = [
4835+ "jolt-abi",
4836+ "libcosmic",
4837+ "log",
4838+]
4839+
3316 [[package]]4840 [[package]]
3317 name = "jolt-moq"4841 name = "jolt-moq"
3318 version = "0.1.0"4842 version = "0.1.0"
@@ -3381,40 +4905,100 @@ dependencies = [
3381 ]4905 ]
3382 4906
3383 [[package]]4907 [[package]]
3384-name = "khronos_api"4908+name = "kamadak-exif"
3385-version = "3.1.0"4909+version = "0.6.1"
3386 source = "registry+https://github.com/rust-lang/crates.io-index"4910 source = "registry+https://github.com/rust-lang/crates.io-index"
3387-checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc"4911+checksum = "1130d80c7374efad55a117d715a3af9368f0fa7a2c54573afc15a188cd984837"
4912+dependencies = [
4913+ "mutate_once",
4914+]
3388 4915
3389 [[package]]4916 [[package]]
3390-name = "kio"4917+name = "keyboard-types"
3391-version = "0.4.4"4918+version = "0.8.3"
3392 source = "registry+https://github.com/rust-lang/crates.io-index"4919 source = "registry+https://github.com/rust-lang/crates.io-index"
3393-checksum = "b31d86314938a5b2c2bea39f271424a3a2432d5b01412555a02181ecbb656af3"4920+checksum = "0fbe853b403ae61a04233030ae8a79d94975281ed9770a1f9e246732b534b28d"
3394 dependencies = [4921 dependencies = [
3395- "smallvec",4922+ "bitflags 2.13.1",
4923+ "serde",
3396 ]4924 ]
3397 4925
3398 [[package]]4926 [[package]]
3399-name = "kqueue"4927+name = "khronos-egl"
3400-version = "1.2.1"4928+version = "6.0.0"
3401 source = "registry+https://github.com/rust-lang/crates.io-index"4929 source = "registry+https://github.com/rust-lang/crates.io-index"
3402-checksum = "8d763e5b24120b4ddf50de6c92308156765aabfbbccebf401da7cff2d70a41ea"4930+checksum = "6aae1df220ece3c0ada96b8153459b67eebe9ae9212258bb0134ae60416fdf76"
3403 dependencies = [4931 dependencies = [
3404- "kqueue-sys",
3405 "libc",4932 "libc",
4933+ "libloading",
4934+ "pkg-config",
3406 ]4935 ]
3407 4936
3408 [[package]]4937 [[package]]
3409-name = "kqueue-sys"4938+name = "khronos_api"
3410-version = "1.1.2"4939+version = "3.1.0"
3411 source = "registry+https://github.com/rust-lang/crates.io-index"4940 source = "registry+https://github.com/rust-lang/crates.io-index"
3412-checksum = "07293a4e297ac234359b510362495713f75ea345d5307140414f20c69ffeb087"4941+checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc"
4942+
4943+[[package]]
4944+name = "kio"
4945+version = "0.4.4"
4946+source = "registry+https://github.com/rust-lang/crates.io-index"
4947+checksum = "b31d86314938a5b2c2bea39f271424a3a2432d5b01412555a02181ecbb656af3"
4948+dependencies = [
4949+ "smallvec",
4950+]
4951+
4952+[[package]]
4953+name = "known-folders"
4954+version = "1.4.2"
4955+source = "registry+https://github.com/rust-lang/crates.io-index"
4956+checksum = "7a1886916523694cd6ea3d175f03a1e5010699a2a4cc13696d83d7bea1d80638"
4957+dependencies = [
4958+ "windows-sys 0.59.0",
4959+]
4960+
4961+[[package]]
4962+name = "kqueue"
4963+version = "1.2.1"
4964+source = "registry+https://github.com/rust-lang/crates.io-index"
4965+checksum = "8d763e5b24120b4ddf50de6c92308156765aabfbbccebf401da7cff2d70a41ea"
4966+dependencies = [
4967+ "kqueue-sys",
4968+ "libc",
4969+]
4970+
4971+[[package]]
4972+name = "kqueue-sys"
4973+version = "1.1.2"
4974+source = "registry+https://github.com/rust-lang/crates.io-index"
4975+checksum = "07293a4e297ac234359b510362495713f75ea345d5307140414f20c69ffeb087"
3413 dependencies = [4976 dependencies = [
3414 "bitflags 2.13.1",4977 "bitflags 2.13.1",
3415 "libc",4978 "libc",
3416 ]4979 ]
3417 4980
4981+[[package]]
4982+name = "kurbo"
4983+version = "0.10.4"
4984+source = "registry+https://github.com/rust-lang/crates.io-index"
4985+checksum = "1618d4ebd923e97d67e7cd363d80aef35fe961005cbbbb3d2dad8bdd1bc63440"
4986+dependencies = [
4987+ "arrayvec",
4988+ "smallvec",
4989+]
4990+
4991+[[package]]
4992+name = "kurbo"
4993+version = "0.11.3"
4994+source = "registry+https://github.com/rust-lang/crates.io-index"
4995+checksum = "c62026ae44756f8a599ba21140f350303d4f08dcdcc71b5ad9c9bb8128c13c62"
4996+dependencies = [
4997+ "arrayvec",
4998+ "euclid",
4999+ "smallvec",
5000+]
5001+
3418 [[package]]5002 [[package]]
3419 name = "lazy_static"5003 name = "lazy_static"
3420 version = "1.5.0"5004 version = "1.5.0"
@@ -3427,6 +5011,55 @@ version = "0.2.189"
3427 source = "registry+https://github.com/rust-lang/crates.io-index"5011 source = "registry+https://github.com/rust-lang/crates.io-index"
3428 checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2"5012 checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2"
3429 5013
5014+[[package]]
5015+name = "libcosmic"
5016+version = "1.0.0"
5017+source = "git+https://github.com/pop-os/libcosmic?rev=a401af8b1c54a8abd393b8c5b7c8809402f83850#a401af8b1c54a8abd393b8c5b7c8809402f83850"
5018+dependencies = [
5019+ "apply",
5020+ "ashpd 0.12.3",
5021+ "auto_enums",
5022+ "build_helpers",
5023+ "cosmic-client-toolkit",
5024+ "cosmic-config",
5025+ "cosmic-freedesktop-icons",
5026+ "cosmic-settings-daemon",
5027+ "cosmic-theme",
5028+ "css-color",
5029+ "derive_setters",
5030+ "enumflags2",
5031+ "float-cmp 0.10.0",
5032+ "futures",
5033+ "i18n-embed",
5034+ "i18n-embed-fl",
5035+ "iced",
5036+ "iced_core",
5037+ "iced_futures",
5038+ "iced_renderer",
5039+ "iced_runtime",
5040+ "iced_tiny_skia",
5041+ "iced_wgpu",
5042+ "iced_widget",
5043+ "iced_winit",
5044+ "image",
5045+ "jiff",
5046+ "log",
5047+ "palette",
5048+ "phf",
5049+ "rfd",
5050+ "roxmltree",
5051+ "rust-embed",
5052+ "serde",
5053+ "slotmap",
5054+ "taffy",
5055+ "thiserror 2.0.19",
5056+ "tokio",
5057+ "tracing",
5058+ "unicode-segmentation",
5059+ "url",
5060+ "zbus",
5061+]
5062+
3430 [[package]]5063 [[package]]
3431 name = "libloading"5064 name = "libloading"
3432 version = "0.8.9"5065 version = "0.8.9"
@@ -3434,7 +5067,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
3434 checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55"5067 checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55"
3435 dependencies = [5068 dependencies = [
3436 "cfg-if",5069 "cfg-if",
3437- "windows-link",5070+ "windows-link 0.2.1",
3438 ]5071 ]
3439 5072
3440 [[package]]5073 [[package]]
@@ -3482,12 +5115,33 @@ dependencies = [
3482 "system-deps",5115 "system-deps",
3483 ]5116 ]
3484 5117
5118+[[package]]
5119+name = "lilt"
5120+version = "0.8.2"
5121+source = "registry+https://github.com/rust-lang/crates.io-index"
5122+checksum = "337d4c256f7d9f2dbd633891d48ace853efa5b1554122d9220b172ad9c03c3a9"
5123+dependencies = [
5124+ "web-time",
5125+]
5126+
5127+[[package]]
5128+name = "linebender_resource_handle"
5129+version = "0.1.1"
5130+source = "registry+https://github.com/rust-lang/crates.io-index"
5131+checksum = "d4a5ff6bcca6c4867b1c4fd4ef63e4db7436ef363e0ad7531d1558856bae64f4"
5132+
3485 [[package]]5133 [[package]]
3486 name = "linux-raw-sys"5134 name = "linux-raw-sys"
3487 version = "0.4.15"5135 version = "0.4.15"
3488 source = "registry+https://github.com/rust-lang/crates.io-index"5136 source = "registry+https://github.com/rust-lang/crates.io-index"
3489 checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab"5137 checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab"
3490 5138
5139+[[package]]
5140+name = "linux-raw-sys"
5141+version = "0.6.5"
5142+source = "registry+https://github.com/rust-lang/crates.io-index"
5143+checksum = "2a385b1be4e5c3e362ad2ffa73c392e53f031eaa5b7d648e64cd87f27f6063d7"
5144+
3491 [[package]]5145 [[package]]
3492 name = "linux-raw-sys"5146 name = "linux-raw-sys"
3493 version = "0.12.1"5147 version = "0.12.1"
@@ -3500,6 +5154,12 @@ version = "0.8.2"
3500 source = "registry+https://github.com/rust-lang/crates.io-index"5154 source = "registry+https://github.com/rust-lang/crates.io-index"
3501 checksum = "92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0"5155 checksum = "92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0"
3502 5156
5157+[[package]]
5158+name = "litrs"
5159+version = "1.0.0"
5160+source = "registry+https://github.com/rust-lang/crates.io-index"
5161+checksum = "11d3d7f243d5c5a8b9bb5d6dd2b1602c0cb0b9db1621bafc7ed66e35ff9fe092"
5162+
3503 [[package]]5163 [[package]]
3504 name = "lock_api"5164 name = "lock_api"
3505 version = "0.4.14"5165 version = "0.4.14"
@@ -3528,6 +5188,12 @@ dependencies = [
3528 "tracing-subscriber",5188 "tracing-subscriber",
3529 ]5189 ]
3530 5190
5191+[[package]]
5192+name = "lru"
5193+version = "0.16.4"
5194+source = "registry+https://github.com/rust-lang/crates.io-index"
5195+checksum = "7f66e8d5d03f609abc3a39e6f08e4164ebf1447a732906d39eb9b99b7919ef39"
5196+
3531 [[package]]5197 [[package]]
3532 name = "lru"5198 name = "lru"
3533 version = "0.18.4"5199 version = "0.18.4"
@@ -3543,6 +5209,58 @@ version = "0.1.2"
3543 source = "registry+https://github.com/rust-lang/crates.io-index"5209 source = "registry+https://github.com/rust-lang/crates.io-index"
3544 checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154"5210 checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154"
3545 5211
5212+[[package]]
5213+name = "lyon"
5214+version = "1.0.19"
5215+source = "registry+https://github.com/rust-lang/crates.io-index"
5216+checksum = "bd0578bdecb7d6d88987b8b2b1e3a4e2f81df9d0ece1078623324a567904e7b7"
5217+dependencies = [
5218+ "lyon_algorithms",
5219+ "lyon_tessellation",
5220+]
5221+
5222+[[package]]
5223+name = "lyon_algorithms"
5224+version = "1.0.21"
5225+source = "registry+https://github.com/rust-lang/crates.io-index"
5226+checksum = "cdfa8785f95e57914ddb35e3b59994aeba6f5e79e9cfd03da1c269f010f36009"
5227+dependencies = [
5228+ "lyon_path",
5229+ "num-traits",
5230+]
5231+
5232+[[package]]
5233+name = "lyon_geom"
5234+version = "1.0.19"
5235+source = "registry+https://github.com/rust-lang/crates.io-index"
5236+checksum = "4336502e29e32af93cf2dad2214ed6003c17ceb5bd499df77b1de663b9042b92"
5237+dependencies = [
5238+ "arrayvec",
5239+ "euclid",
5240+ "num-traits",
5241+]
5242+
5243+[[package]]
5244+name = "lyon_path"
5245+version = "1.0.19"
5246+source = "registry+https://github.com/rust-lang/crates.io-index"
5247+checksum = "5c463f9c428b7fc5ec885dcd39ce4aa61e29111d0e33483f6f98c74e89d8621e"
5248+dependencies = [
5249+ "lyon_geom",
5250+ "num-traits",
5251+]
5252+
5253+[[package]]
5254+name = "lyon_tessellation"
5255+version = "1.0.22"
5256+source = "registry+https://github.com/rust-lang/crates.io-index"
5257+checksum = "43b8dcf906637ecef61b3c0740c7a4e7f27caeb31257cfac0cc579ce15be6005"
5258+dependencies = [
5259+ "float_next_after",
5260+ "lyon_path",
5261+ "num-traits",
5262+]
5263+
3546 [[package]]5264 [[package]]
3547 name = "m3u8-rs"5265 name = "m3u8-rs"
3548 version = "6.0.1"5266 version = "6.0.1"
@@ -3565,6 +5283,15 @@ version = "0.6.0"
3565 source = "registry+https://github.com/rust-lang/crates.io-index"5283 source = "registry+https://github.com/rust-lang/crates.io-index"
3566 checksum = "dae608c151f68243f2b000364e1f7b186d9c29845f7d2d85bd31b9ad77ad552b"5284 checksum = "dae608c151f68243f2b000364e1f7b186d9c29845f7d2d85bd31b9ad77ad552b"
3567 5285
5286+[[package]]
5287+name = "malloc_buf"
5288+version = "0.0.6"
5289+source = "registry+https://github.com/rust-lang/crates.io-index"
5290+checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb"
5291+dependencies = [
5292+ "libc",
5293+]
5294+
3568 [[package]]5295 [[package]]
3569 name = "matchers"5296 name = "matchers"
3570 version = "0.2.0"5297 version = "0.2.0"
@@ -3580,6 +5307,15 @@ version = "2.8.3"
3580 source = "registry+https://github.com/rust-lang/crates.io-index"5307 source = "registry+https://github.com/rust-lang/crates.io-index"
3581 checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98"5308 checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98"
3582 5309
5310+[[package]]
5311+name = "memmap2"
5312+version = "0.8.0"
5313+source = "registry+https://github.com/rust-lang/crates.io-index"
5314+checksum = "43a5a03cefb0d953ec0be133036f14e109412fa594edc2f77227249db66cc3ed"
5315+dependencies = [
5316+ "libc",
5317+]
5318+
3583 [[package]]5319 [[package]]
3584 name = "memmap2"5320 name = "memmap2"
3585 version = "0.9.11"5321 version = "0.9.11"
@@ -3598,6 +5334,45 @@ dependencies = [
3598 "autocfg",5334 "autocfg",
3599 ]5335 ]
3600 5336
5337+[[package]]
5338+name = "metal"
5339+version = "0.33.0"
5340+source = "registry+https://github.com/rust-lang/crates.io-index"
5341+checksum = "c7047791b5bc903b8cd963014b355f71dc9864a9a0b727057676c1dcae5cbc15"
5342+dependencies = [
5343+ "bitflags 2.13.1",
5344+ "block",
5345+ "core-graphics-types 0.2.0",
5346+ "foreign-types",
5347+ "log",
5348+ "objc",
5349+ "paste",
5350+]
5351+
5352+[[package]]
5353+name = "mime"
5354+version = "0.1.0"
5355+source = "git+https://github.com/pop-os/window_clipboard.git?tag=sctk-0.20#f68595ee0e62fbd6589f4709b5aaa5c3c7ea5f6c"
5356+dependencies = [
5357+ "smithay-clipboard 0.8.0",
5358+]
5359+
5360+[[package]]
5361+name = "mime"
5362+version = "0.3.17"
5363+source = "registry+https://github.com/rust-lang/crates.io-index"
5364+checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
5365+
5366+[[package]]
5367+name = "mime_guess"
5368+version = "2.0.5"
5369+source = "registry+https://github.com/rust-lang/crates.io-index"
5370+checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e"
5371+dependencies = [
5372+ "mime 0.3.17",
5373+ "unicase",
5374+]
5375+
3601 [[package]]5376 [[package]]
3602 name = "minimal-lexical"5377 name = "minimal-lexical"
3603 version = "0.2.1"5378 version = "0.2.1"
@@ -3859,6 +5634,12 @@ version = "0.6.1"
3859 source = "registry+https://github.com/rust-lang/crates.io-index"5634 source = "registry+https://github.com/rust-lang/crates.io-index"
3860 checksum = "83c1d679004305ea6e44eb53526da5816934a05b4b5b3b9a470e708a41d70a18"5635 checksum = "83c1d679004305ea6e44eb53526da5816934a05b4b5b3b9a470e708a41d70a18"
3861 5636
5637+[[package]]
5638+name = "mutate_once"
5639+version = "0.1.2"
5640+source = "registry+https://github.com/rust-lang/crates.io-index"
5641+checksum = "13d2233c9842d08cfe13f9eac96e207ca6a2ea10b80259ebe8ad0268be27d2af"
5642+
3862 [[package]]5643 [[package]]
3863 name = "n0-error"5644 name = "n0-error"
3864 version = "1.0.1"5645 version = "1.0.1"
@@ -3913,6 +5694,32 @@ dependencies = [
3913 "n0-future",5694 "n0-future",
3914 ]5695 ]
3915 5696
5697+[[package]]
5698+name = "naga"
5699+version = "28.0.0"
5700+source = "registry+https://github.com/rust-lang/crates.io-index"
5701+checksum = "618f667225063219ddfc61251087db8a9aec3c3f0950c916b614e403486f1135"
5702+dependencies = [
5703+ "arrayvec",
5704+ "bit-set",
5705+ "bitflags 2.13.1",
5706+ "cfg-if",
5707+ "cfg_aliases 0.2.2",
5708+ "codespan-reporting",
5709+ "half",
5710+ "hashbrown 0.16.1",
5711+ "hexf-parse",
5712+ "indexmap 2.14.0",
5713+ "libm",
5714+ "log",
5715+ "num-traits",
5716+ "once_cell",
5717+ "rustc-hash 1.1.0",
5718+ "spirv",
5719+ "thiserror 2.0.19",
5720+ "unicode-ident",
5721+]
5722+
3916 [[package]]5723 [[package]]
3917 name = "nasm-rs"5724 name = "nasm-rs"
3918 version = "0.3.2"5725 version = "0.3.2"
@@ -4115,8 +5922,8 @@ dependencies = [
4115 "tokio-util",5922 "tokio-util",
4116 "tracing",5923 "tracing",
4117 "web-sys",5924 "web-sys",
4118- "windows",5925+ "windows 0.62.2",
4119- "windows-result",5926+ "windows-result 0.4.1",
4120 "wmi",5927 "wmi",
4121 ]5928 ]
4122 5929
@@ -4366,6 +6173,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
4366 checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"6173 checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
4367 dependencies = [6174 dependencies = [
4368 "autocfg",6175 "autocfg",
6176+ "libm",
4369 ]6177 ]
4370 6178
4371 [[package]]6179 [[package]]
@@ -4409,6 +6217,26 @@ dependencies = [
4409 "scuffle-workspace-hack",6217 "scuffle-workspace-hack",
4410 ]6218 ]
4411 6219
6220+[[package]]
6221+name = "objc"
6222+version = "0.2.7"
6223+source = "registry+https://github.com/rust-lang/crates.io-index"
6224+checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1"
6225+dependencies = [
6226+ "malloc_buf",
6227+]
6228+
6229+[[package]]
6230+name = "objc-foundation"
6231+version = "0.1.1"
6232+source = "registry+https://github.com/rust-lang/crates.io-index"
6233+checksum = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9"
6234+dependencies = [
6235+ "block",
6236+ "objc",
6237+ "objc_id",
6238+]
6239+
4412 [[package]]6240 [[package]]
4413 name = "objc-sys"6241 name = "objc-sys"
4414 version = "0.3.5"6242 version = "0.3.5"
@@ -4457,6 +6285,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
4457 checksum = "d49e936b501e5c5bf01fda3a9452ff86dc3ea98ad5f283e1455153142d97518c"6285 checksum = "d49e936b501e5c5bf01fda3a9452ff86dc3ea98ad5f283e1455153142d97518c"
4458 dependencies = [6286 dependencies = [
4459 "bitflags 2.13.1",6287 "bitflags 2.13.1",
6288+ "block2 0.6.2",
4460 "objc2 0.6.4",6289 "objc2 0.6.4",
4461 "objc2-core-foundation",6290 "objc2-core-foundation",
4462 "objc2-core-graphics",6291 "objc2-core-graphics",
@@ -4591,6 +6420,7 @@ checksum = "e022c9d066895efa1345f8e33e584b9f958da2fd4cd116792e15e07e4720a807"
4591 dependencies = [6420 dependencies = [
4592 "bitflags 2.13.1",6421 "bitflags 2.13.1",
4593 "dispatch2",6422 "dispatch2",
6423+ "libc",
4594 "objc2 0.6.4",6424 "objc2 0.6.4",
4595 "objc2-core-foundation",6425 "objc2-core-foundation",
4596 "objc2-io-surface",6426 "objc2-io-surface",
@@ -4866,6 +6696,18 @@ dependencies = [
4866 "objc2-user-notifications",6696 "objc2-user-notifications",
4867 ]6697 ]
4868 6698
6699+[[package]]
6700+name = "objc2-ui-kit"
6701+version = "0.3.2"
6702+source = "registry+https://github.com/rust-lang/crates.io-index"
6703+checksum = "d87d638e33c06f577498cbcc50491496a3ed4246998a7fbba7ccb98b1e7eab22"
6704+dependencies = [
6705+ "bitflags 2.13.1",
6706+ "objc2 0.6.4",
6707+ "objc2-core-foundation",
6708+ "objc2-foundation 0.3.2",
6709+]
6710+
4869 [[package]]6711 [[package]]
4870 name = "objc2-uniform-type-identifiers"6712 name = "objc2-uniform-type-identifiers"
4871 version = "0.2.2"6713 version = "0.2.2"
@@ -4890,6 +6732,15 @@ dependencies = [
4890 "objc2-foundation 0.2.2",6732 "objc2-foundation 0.2.2",
4891 ]6733 ]
4892 6734
6735+[[package]]
6736+name = "objc_id"
6737+version = "0.1.1"
6738+source = "registry+https://github.com/rust-lang/crates.io-index"
6739+checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b"
6740+dependencies = [
6741+ "objc",
6742+]
6743+
4893 [[package]]6744 [[package]]
4894 name = "object"6745 name = "object"
4895 version = "0.37.3"6746 version = "0.37.3"
@@ -4957,6 +6808,12 @@ version = "0.2.1"
4957 source = "registry+https://github.com/rust-lang/crates.io-index"6808 source = "registry+https://github.com/rust-lang/crates.io-index"
4958 checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe"6809 checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe"
4959 6810
6811+[[package]]
6812+name = "option-ext"
6813+version = "0.2.0"
6814+source = "registry+https://github.com/rust-lang/crates.io-index"
6815+checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d"
6816+
4960 [[package]]6817 [[package]]
4961 name = "orbclient"6818 name = "orbclient"
4962 version = "0.3.55"6819 version = "0.3.55"
@@ -4968,58 +6825,132 @@ dependencies = [
4968 ]6825 ]
4969 6826
4970 [[package]]6827 [[package]]
4971-name = "owned_ttf_parser"6828+name = "ordered-float"
4972-version = "0.25.1"6829+version = "5.5.0"
4973 source = "registry+https://github.com/rust-lang/crates.io-index"6830 source = "registry+https://github.com/rust-lang/crates.io-index"
4974-checksum = "36820e9051aca1014ddc75770aab4d68bc1e9e632f0f5627c4086bc216fb583b"6831+checksum = "8c7c9e0d9b23589f26070720bac724174bfec1083e82f7854cdd0267518343c0"
4975 dependencies = [6832 dependencies = [
4976- "ttf-parser",6833+ "num-traits",
4977 ]6834 ]
4978 6835
4979 [[package]]6836 [[package]]
4980-name = "papaya"6837+name = "ordered-stream"
4981-version = "0.2.4"6838+version = "0.2.0"
4982 source = "registry+https://github.com/rust-lang/crates.io-index"6839 source = "registry+https://github.com/rust-lang/crates.io-index"
4983-checksum = "997ee03cd38c01469a7046643714f0ad28880bcb9e6679ff0666e24817ca19b7"6840+checksum = "9aa2b01e1d916879f73a53d01d1d6cee68adbb31d6d9177a8cfce093cced1d50"
4984 dependencies = [6841 dependencies = [
4985- "equivalent",6842+ "futures-core",
4986- "seize",6843+ "pin-project-lite",
4987 ]6844 ]
4988 6845
4989 [[package]]6846 [[package]]
4990-name = "parking"6847+name = "ouroboros"
4991-version = "2.2.1"6848+version = "0.18.5"
4992 source = "registry+https://github.com/rust-lang/crates.io-index"6849 source = "registry+https://github.com/rust-lang/crates.io-index"
4993-checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba"6850+checksum = "1e0f050db9c44b97a94723127e6be766ac5c340c48f2c4bb3ffa11713744be59"
6851+dependencies = [
6852+ "aliasable",
6853+ "ouroboros_macro",
6854+ "static_assertions",
6855+]
4994 6856
4995 [[package]]6857 [[package]]
4996-name = "parking_lot"6858+name = "ouroboros_macro"
4997-version = "0.12.5"6859+version = "0.18.5"
4998 source = "registry+https://github.com/rust-lang/crates.io-index"6860 source = "registry+https://github.com/rust-lang/crates.io-index"
4999-checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a"6861+checksum = "3c7028bdd3d43083f6d8d4d5187680d0d3560d54df4cc9d752005268b41e64d0"
5000 dependencies = [6862 dependencies = [
5001- "lock_api",6863+ "heck 0.4.1",
5002- "parking_lot_core",6864+ "proc-macro2",
6865+ "proc-macro2-diagnostics",
6866+ "quote",
6867+ "syn 2.0.119",
5003 ]6868 ]
5004 6869
5005 [[package]]6870 [[package]]
5006-name = "parking_lot_core"6871+name = "owned_ttf_parser"
5007-version = "0.9.12"6872+version = "0.25.1"
5008 source = "registry+https://github.com/rust-lang/crates.io-index"6873 source = "registry+https://github.com/rust-lang/crates.io-index"
5009-checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1"6874+checksum = "36820e9051aca1014ddc75770aab4d68bc1e9e632f0f5627c4086bc216fb583b"
5010 dependencies = [6875 dependencies = [
5011- "backtrace",6876+ "ttf-parser",
5012- "cfg-if",
5013- "libc",
5014- "petgraph",
5015- "redox_syscall 0.5.18",
5016- "smallvec",
5017- "windows-link",
5018 ]6877 ]
5019 6878
5020 [[package]]6879 [[package]]
5021-name = "paste"6880+name = "palette"
5022-version = "1.0.15"6881+version = "0.7.7"
6882+source = "registry+https://github.com/rust-lang/crates.io-index"
6883+checksum = "ddeed8580d347d2abf3dcf06a5f0b3dc020258338526b277847cd4248a70fc64"
6884+dependencies = [
6885+ "approx",
6886+ "palette_derive",
6887+ "palette_math",
6888+ "phf",
6889+ "serde",
6890+]
6891+
6892+[[package]]
6893+name = "palette_derive"
6894+version = "0.7.7"
6895+source = "registry+https://github.com/rust-lang/crates.io-index"
6896+checksum = "88537020289b719d81be994ccf1bbf4990f477e2f69ee52fe3e45f43a02e56be"
6897+dependencies = [
6898+ "by_address",
6899+ "proc-macro2",
6900+ "quote",
6901+ "syn 2.0.119",
6902+]
6903+
6904+[[package]]
6905+name = "palette_math"
6906+version = "0.7.7"
6907+source = "registry+https://github.com/rust-lang/crates.io-index"
6908+checksum = "6e6eb142958d64335fb0e345c5b9ead2ecd6fc438c307e9d7d3c4fd428dbaf12"
6909+
6910+[[package]]
6911+name = "papaya"
6912+version = "0.2.4"
6913+source = "registry+https://github.com/rust-lang/crates.io-index"
6914+checksum = "997ee03cd38c01469a7046643714f0ad28880bcb9e6679ff0666e24817ca19b7"
6915+dependencies = [
6916+ "equivalent",
6917+ "seize",
6918+]
6919+
6920+[[package]]
6921+name = "parking"
6922+version = "2.2.1"
6923+source = "registry+https://github.com/rust-lang/crates.io-index"
6924+checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba"
6925+
6926+[[package]]
6927+name = "parking_lot"
6928+version = "0.12.5"
6929+source = "registry+https://github.com/rust-lang/crates.io-index"
6930+checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a"
6931+dependencies = [
6932+ "lock_api",
6933+ "parking_lot_core",
6934+]
6935+
6936+[[package]]
6937+name = "parking_lot_core"
6938+version = "0.9.12"
6939+source = "registry+https://github.com/rust-lang/crates.io-index"
6940+checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1"
6941+dependencies = [
6942+ "backtrace",
6943+ "cfg-if",
6944+ "libc",
6945+ "petgraph",
6946+ "redox_syscall 0.5.18",
6947+ "smallvec",
6948+ "windows-link 0.2.1",
6949+]
6950+
6951+[[package]]
6952+name = "paste"
6953+version = "1.0.15"
5023 source = "registry+https://github.com/rust-lang/crates.io-index"6954 source = "registry+https://github.com/rust-lang/crates.io-index"
5024 checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a"6955 checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a"
5025 6956
@@ -5064,6 +6995,51 @@ dependencies = [
5064 "rustc_version",6995 "rustc_version",
5065 ]6996 ]
5066 6997
6998+[[package]]
6999+name = "phf"
7000+version = "0.13.1"
7001+source = "registry+https://github.com/rust-lang/crates.io-index"
7002+checksum = "c1562dc717473dbaa4c1f85a36410e03c047b2e7df7f45ee938fbef64ae7fadf"
7003+dependencies = [
7004+ "phf_macros",
7005+ "phf_shared",
7006+ "serde",
7007+]
7008+
7009+[[package]]
7010+name = "phf_generator"
7011+version = "0.13.1"
7012+source = "registry+https://github.com/rust-lang/crates.io-index"
7013+checksum = "135ace3a761e564ec88c03a77317a7c6b80bb7f7135ef2544dbe054243b89737"
7014+dependencies = [
7015+ "fastrand",
7016+ "phf_shared",
7017+]
7018+
7019+[[package]]
7020+name = "phf_macros"
7021+version = "0.13.1"
7022+source = "registry+https://github.com/rust-lang/crates.io-index"
7023+checksum = "812f032b54b1e759ccd5f8b6677695d5268c588701effba24601f6932f8269ef"
7024+dependencies = [
7025+ "phf_generator",
7026+ "phf_shared",
7027+ "proc-macro2",
7028+ "quote",
7029+ "syn 2.0.119",
7030+ "uncased",
7031+]
7032+
7033+[[package]]
7034+name = "phf_shared"
7035+version = "0.13.1"
7036+source = "registry+https://github.com/rust-lang/crates.io-index"
7037+checksum = "e57fef6bc5981e38c2ce2d63bfa546861309f875b8a75f092d1d54ae2d64f266"
7038+dependencies = [
7039+ "siphasher",
7040+ "uncased",
7041+]
7042+
5067 [[package]]7043 [[package]]
5068 name = "pic-scale"7044 name = "pic-scale"
5069 version = "0.6.15"7045 version = "0.6.15"
@@ -5077,6 +7053,12 @@ dependencies = [
5077 "rayon",7053 "rayon",
5078 ]7054 ]
5079 7055
7056+[[package]]
7057+name = "pico-args"
7058+version = "0.5.0"
7059+source = "registry+https://github.com/rust-lang/crates.io-index"
7060+checksum = "5be167a7af36ee22fe3115051bc51f6e6c7054c9348e28deb4f49bd6f705a315"
7061+
5080 [[package]]7062 [[package]]
5081 name = "pin-project"7063 name = "pin-project"
5082 version = "1.1.13"7064 version = "1.1.13"
@@ -5109,6 +7091,17 @@ version = "0.1.0"
5109 source = "registry+https://github.com/rust-lang/crates.io-index"7091 source = "registry+https://github.com/rust-lang/crates.io-index"
5110 checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"7092 checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
5111 7093
7094+[[package]]
7095+name = "piper"
7096+version = "0.2.5"
7097+source = "registry+https://github.com/rust-lang/crates.io-index"
7098+checksum = "c835479a4443ded371d6c535cbfd8d31ad92c5d23ae9770a61bc155e4992a3c1"
7099+dependencies = [
7100+ "atomic-waker",
7101+ "fastrand",
7102+ "futures-io",
7103+]
7104+
5112 [[package]]7105 [[package]]
5113 name = "pipewire"7106 name = "pipewire"
5114 version = "0.10.1"7107 version = "0.10.1"
@@ -5209,6 +7202,12 @@ dependencies = [
5209 "windows-sys 0.61.2",7202 "windows-sys 0.61.2",
5210 ]7203 ]
5211 7204
7205+[[package]]
7206+name = "pollster"
7207+version = "0.4.0"
7208+source = "registry+https://github.com/rust-lang/crates.io-index"
7209+checksum = "2f3a9f18d041e6d0e102a0a46750538147e5e8992d3b4873aaafee2520b00ce3"
7210+
5212 [[package]]7211 [[package]]
5213 name = "polyval"7212 name = "polyval"
5214 version = "0.6.2"7213 version = "0.6.2"
@@ -5328,6 +7327,12 @@ dependencies = [
5328 "num-traits",7327 "num-traits",
5329 ]7328 ]
5330 7329
7330+[[package]]
7331+name = "presser"
7332+version = "0.3.1"
7333+source = "registry+https://github.com/rust-lang/crates.io-index"
7334+checksum = "e8cf8e6a8aa66ce33f63993ffc4ea4271eb5b0530a9002db8455ea6050c77bfa"
7335+
5331 [[package]]7336 [[package]]
5332 name = "prettyplease"7337 name = "prettyplease"
5333 version = "0.2.37"7338 version = "0.2.37"
@@ -5356,6 +7361,28 @@ dependencies = [
5356 "toml_edit",7361 "toml_edit",
5357 ]7362 ]
5358 7363
7364+[[package]]
7365+name = "proc-macro-error-attr3"
7366+version = "3.1.1"
7367+source = "registry+https://github.com/rust-lang/crates.io-index"
7368+checksum = "9e564d14133360e1ae169ffde5da25881b5fa47261665b8e5713c212c27799da"
7369+dependencies = [
7370+ "proc-macro2",
7371+ "quote",
7372+]
7373+
7374+[[package]]
7375+name = "proc-macro-error3"
7376+version = "3.1.1"
7377+source = "registry+https://github.com/rust-lang/crates.io-index"
7378+checksum = "8f0d4471b3436c22106b21913b1dda531558918ae9b7ec55d58aa84b43552233"
7379+dependencies = [
7380+ "proc-macro-error-attr3",
7381+ "proc-macro2",
7382+ "quote",
7383+ "syn 3.0.3",
7384+]
7385+
5359 [[package]]7386 [[package]]
5360 name = "proc-macro2"7387 name = "proc-macro2"
5361 version = "1.0.107"7388 version = "1.0.107"
@@ -5365,6 +7392,19 @@ dependencies = [
5365 "unicode-ident",7392 "unicode-ident",
5366 ]7393 ]
5367 7394
7395+[[package]]
7396+name = "proc-macro2-diagnostics"
7397+version = "0.10.1"
7398+source = "registry+https://github.com/rust-lang/crates.io-index"
7399+checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8"
7400+dependencies = [
7401+ "proc-macro2",
7402+ "quote",
7403+ "syn 2.0.119",
7404+ "version_check",
7405+ "yansi",
7406+]
7407+
5368 [[package]]7408 [[package]]
5369 name = "profiling"7409 name = "profiling"
5370 version = "1.0.18"7410 version = "1.0.18"
@@ -5575,6 +7615,18 @@ dependencies = [
5575 "rand_core 0.10.1",7615 "rand_core 0.10.1",
5576 ]7616 ]
5577 7617
7618+[[package]]
7619+name = "range-alloc"
7620+version = "0.1.5"
7621+source = "registry+https://github.com/rust-lang/crates.io-index"
7622+checksum = "ca45419789ae5a7899559e9512e58ca889e41f04f1f2445e9f4b290ceccd1d08"
7623+
7624+[[package]]
7625+name = "rangemap"
7626+version = "1.8.0"
7627+source = "registry+https://github.com/rust-lang/crates.io-index"
7628+checksum = "a611d15b50743feb4c76b7d03edcb0e64f399c26961e4efe6975bc398be6aa3d"
7629+
5578 [[package]]7630 [[package]]
5579 name = "raw-window-handle"7631 name = "raw-window-handle"
5580 version = "0.6.2"7632 version = "0.6.2"
@@ -5614,6 +7666,28 @@ dependencies = [
5614 "yasna",7666 "yasna",
5615 ]7667 ]
5616 7668
7669+[[package]]
7670+name = "read-fonts"
7671+version = "0.37.0"
7672+source = "registry+https://github.com/rust-lang/crates.io-index"
7673+checksum = "7b634fabf032fab15307ffd272149b622260f55974d9fad689292a5d33df02e5"
7674+dependencies = [
7675+ "bytemuck",
7676+ "core_maths",
7677+ "font-types 0.11.3",
7678+]
7679+
7680+[[package]]
7681+name = "read-fonts"
7682+version = "0.41.0"
7683+source = "registry+https://github.com/rust-lang/crates.io-index"
7684+checksum = "046a7d674daf459825b32f5062056d6882db0d2f5a479fbd76ccfc870ac18709"
7685+dependencies = [
7686+ "bytemuck",
7687+ "font-types 0.12.5",
7688+ "once_cell",
7689+]
7690+
5617 [[package]]7691 [[package]]
5618 name = "realfft"7692 name = "realfft"
5619 version = "3.5.0"7693 version = "3.5.0"
@@ -5623,6 +7697,16 @@ dependencies = [
5623 "rustfft",7697 "rustfft",
5624 ]7698 ]
5625 7699
7700+[[package]]
7701+name = "redox_event"
7702+version = "0.4.8"
7703+source = "registry+https://github.com/rust-lang/crates.io-index"
7704+checksum = "c5018d583d6d2f5499352aea8d177e9067d1eb03ab17c78169d5ba7a30001b15"
7705+dependencies = [
7706+ "bitflags 2.13.1",
7707+ "libredox",
7708+]
7709+
5626 [[package]]7710 [[package]]
5627 name = "redox_syscall"7711 name = "redox_syscall"
5628 version = "0.4.1"7712 version = "0.4.1"
@@ -5650,6 +7734,17 @@ dependencies = [
5650 "bitflags 2.13.1",7734 "bitflags 2.13.1",
5651 ]7735 ]
5652 7736
7737+[[package]]
7738+name = "redox_users"
7739+version = "0.5.2"
7740+source = "registry+https://github.com/rust-lang/crates.io-index"
7741+checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac"
7742+dependencies = [
7743+ "getrandom 0.2.17",
7744+ "libredox",
7745+ "thiserror 2.0.19",
7746+]
7747+
5653 [[package]]7748 [[package]]
5654 name = "ref-cast"7749 name = "ref-cast"
5655 version = "1.0.26"7750 version = "1.0.26"
@@ -5699,6 +7794,12 @@ version = "0.8.11"
5699 source = "registry+https://github.com/rust-lang/crates.io-index"7794 source = "registry+https://github.com/rust-lang/crates.io-index"
5700 checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4"7795 checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4"
5701 7796
7797+[[package]]
7798+name = "renderdoc-sys"
7799+version = "1.1.0"
7800+source = "registry+https://github.com/rust-lang/crates.io-index"
7801+checksum = "19b30a45b0cd0bcca8037f3d0dc3421eaf95327a17cad11964fb8179b4fc4832"
7802+
5702 [[package]]7803 [[package]]
5703 name = "reqwest"7804 name = "reqwest"
5704 version = "0.12.28"7805 version = "0.12.28"
@@ -5780,6 +7881,56 @@ version = "0.7.6"
5780 source = "registry+https://github.com/rust-lang/crates.io-index"7881 source = "registry+https://github.com/rust-lang/crates.io-index"
5781 checksum = "1e061d1b48cb8d38042de4ae0a7a6401009d6143dc80d2e2d6f31f0bdd6470c7"7882 checksum = "1e061d1b48cb8d38042de4ae0a7a6401009d6143dc80d2e2d6f31f0bdd6470c7"
5782 7883
7884+[[package]]
7885+name = "resvg"
7886+version = "0.45.1"
7887+source = "registry+https://github.com/rust-lang/crates.io-index"
7888+checksum = "a8928798c0a55e03c9ca6c4c6846f76377427d2c1e1f7e6de3c06ae57942df43"
7889+dependencies = [
7890+ "gif",
7891+ "image-webp",
7892+ "log",
7893+ "pico-args",
7894+ "rgb",
7895+ "svgtypes",
7896+ "tiny-skia 0.11.4",
7897+ "usvg",
7898+ "zune-jpeg 0.4.21",
7899+]
7900+
7901+[[package]]
7902+name = "rfd"
7903+version = "0.16.0"
7904+source = "registry+https://github.com/rust-lang/crates.io-index"
7905+checksum = "a15ad77d9e70a92437d8f74c35d99b4e4691128df018833e99f90bcd36152672"
7906+dependencies = [
7907+ "ashpd 0.11.1",
7908+ "block2 0.6.2",
7909+ "dispatch2",
7910+ "js-sys",
7911+ "log",
7912+ "objc2 0.6.4",
7913+ "objc2-app-kit 0.3.2",
7914+ "objc2-core-foundation",
7915+ "objc2-foundation 0.3.2",
7916+ "pollster",
7917+ "raw-window-handle",
7918+ "urlencoding",
7919+ "wasm-bindgen",
7920+ "wasm-bindgen-futures",
7921+ "web-sys",
7922+ "windows-sys 0.60.2",
7923+]
7924+
7925+[[package]]
7926+name = "rgb"
7927+version = "0.8.53"
7928+source = "registry+https://github.com/rust-lang/crates.io-index"
7929+checksum = "47b34b781b31e5d73e9fbc8689c70551fd1ade9a19e3e28cfec8580a79290cc4"
7930+dependencies = [
7931+ "bytemuck",
7932+]
7933+
5783 [[package]]7934 [[package]]
5784 name = "ring"7935 name = "ring"
5785 version = "0.17.14"7936 version = "0.17.14"
@@ -5805,6 +7956,26 @@ dependencies = [
5805 "portable-atomic-util",7956 "portable-atomic-util",
5806 ]7957 ]
5807 7958
7959+[[package]]
7960+name = "ron"
7961+version = "0.12.2"
7962+source = "registry+https://github.com/rust-lang/crates.io-index"
7963+checksum = "81116b9531d61eabc41aeb228e4b6b2435bcca3233b98cf3b3077d4e6e9debb3"
7964+dependencies = [
7965+ "bitflags 2.13.1",
7966+ "once_cell",
7967+ "serde",
7968+ "serde_derive",
7969+ "typeid",
7970+ "unicode-ident",
7971+]
7972+
7973+[[package]]
7974+name = "roxmltree"
7975+version = "0.20.0"
7976+source = "registry+https://github.com/rust-lang/crates.io-index"
7977+checksum = "6c20b6793b5c2fa6553b250154b78d6d0db37e72700ae35fad9387a46f487c97"
7978+
5808 [[package]]7979 [[package]]
5809 name = "rpds"7980 name = "rpds"
5810 version = "1.2.1"7981 version = "1.2.1"
@@ -5844,6 +8015,41 @@ dependencies = [
5844 "windowfunctions",8015 "windowfunctions",
5845 ]8016 ]
5846 8017
8018+[[package]]
8019+name = "rust-embed"
8020+version = "8.12.0"
8021+source = "registry+https://github.com/rust-lang/crates.io-index"
8022+checksum = "e9e7760e252aaba7b09f4be00e36476cf585bdb68a53552ac954cdf504ab4bc9"
8023+dependencies = [
8024+ "rust-embed-impl",
8025+ "rust-embed-utils",
8026+ "walkdir",
8027+]
8028+
8029+[[package]]
8030+name = "rust-embed-impl"
8031+version = "8.12.0"
8032+source = "registry+https://github.com/rust-lang/crates.io-index"
8033+checksum = "3bcfc4d6f53af43755f7a723e4b6b8794fcce052a178dd8c6c1dadc5f5343097"
8034+dependencies = [
8035+ "mime_guess",
8036+ "proc-macro2",
8037+ "quote",
8038+ "rust-embed-utils",
8039+ "syn 2.0.119",
8040+ "walkdir",
8041+]
8042+
8043+[[package]]
8044+name = "rust-embed-utils"
8045+version = "8.12.0"
8046+source = "registry+https://github.com/rust-lang/crates.io-index"
8047+checksum = "42ffa149f6aa81b58a5b3011d01a857c4ed12c7a732d2c51947a4c7c692185f0"
8048+dependencies = [
8049+ "sha2",
8050+ "walkdir",
8051+]
8052+
5847 [[package]]8053 [[package]]
5848 name = "rustc-demangle"8054 name = "rustc-demangle"
5849 version = "0.1.28"8055 version = "0.1.28"
@@ -6051,6 +8257,24 @@ dependencies = [
6051 "yuv",8257 "yuv",
6052 ]8258 ]
6053 8259
8260+[[package]]
8261+name = "rustybuzz"
8262+version = "0.20.1"
8263+source = "registry+https://github.com/rust-lang/crates.io-index"
8264+checksum = "fd3c7c96f8a08ee34eff8857b11b49b07d71d1c3f4e88f8a88d4c9e9f90b1702"
8265+dependencies = [
8266+ "bitflags 2.13.1",
8267+ "bytemuck",
8268+ "core_maths",
8269+ "log",
8270+ "smallvec",
8271+ "ttf-parser",
8272+ "unicode-bidi-mirroring",
8273+ "unicode-ccc",
8274+ "unicode-properties",
8275+ "unicode-script",
8276+]
8277+
6054 [[package]]8278 [[package]]
6055 name = "ryu"8279 name = "ryu"
6056 version = "1.0.23"8280 version = "1.0.23"
@@ -6128,14 +8352,27 @@ checksum = "b6277f0217056f77f1d8f49f2950ac6c278c0d607c45f5ee99328d792ede24ec"
6128 dependencies = [8352 dependencies = [
6129 "ab_glyph",8353 "ab_glyph",
6130 "log",8354 "log",
6131- "memmap2",8355+ "memmap2 0.9.11",
6132 "smithay-client-toolkit 0.19.2",8356 "smithay-client-toolkit 0.19.2",
6133- "tiny-skia",8357+ "tiny-skia 0.11.4",
6134 ]8358 ]
6135 8359
6136 [[package]]8360 [[package]]
6137-name = "scuffle-av1"8361+name = "sctk-adwaita"
6138-version = "0.1.4"8362+version = "0.11.1"
8363+source = "registry+https://github.com/rust-lang/crates.io-index"
8364+checksum = "ea2a4360b9abcdcee43809e6fc11d6d61ca5d25734026a8fc46c2883eea3f13f"
8365+dependencies = [
8366+ "ab_glyph",
8367+ "log",
8368+ "memmap2 0.9.11",
8369+ "smithay-client-toolkit 0.20.0",
8370+ "tiny-skia 0.12.0",
8371+]
8372+
8373+[[package]]
8374+name = "scuffle-av1"
8375+version = "0.1.4"
6139 source = "registry+https://github.com/rust-lang/crates.io-index"8376 source = "registry+https://github.com/rust-lang/crates.io-index"
6140 checksum = "028eddc8b17fe9dba817b238c56d3acf03748bdbed4c35783cfb93857ef15955"8377 checksum = "028eddc8b17fe9dba817b238c56d3acf03748bdbed4c35783cfb93857ef15955"
6141 dependencies = [8378 dependencies = [
@@ -6221,6 +8458,12 @@ dependencies = [
6221 "windows-sys 0.61.2",8458 "windows-sys 0.61.2",
6222 ]8459 ]
6223 8460
8461+[[package]]
8462+name = "self_cell"
8463+version = "1.3.0"
8464+source = "registry+https://github.com/rust-lang/crates.io-index"
8465+checksum = "2ab42ca02749e120097e328d91d415325bdf43b1c72c4c8badf37375fe40a813"
8466+
6224 [[package]]8467 [[package]]
6225 name = "semver"8468 name = "semver"
6226 version = "1.0.28"8469 version = "1.0.28"
@@ -6288,6 +8531,7 @@ version = "1.0.151"
6288 source = "registry+https://github.com/rust-lang/crates.io-index"8531 source = "registry+https://github.com/rust-lang/crates.io-index"
6289 checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14"8532 checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14"
6290 dependencies = [8533 dependencies = [
8534+ "indexmap 2.14.0",
6291 "itoa",8535 "itoa",
6292 "memchr",8536 "memchr",
6293 "serde",8537 "serde",
@@ -6295,6 +8539,17 @@ dependencies = [
6295 "zmij",8539 "zmij",
6296 ]8540 ]
6297 8541
8542+[[package]]
8543+name = "serde_repr"
8544+version = "0.1.21"
8545+source = "registry+https://github.com/rust-lang/crates.io-index"
8546+checksum = "8d3b1629de253c70a0508c3899572da79ca359fdab27c7920ff00406df418906"
8547+dependencies = [
8548+ "proc-macro2",
8549+ "quote",
8550+ "syn 3.0.3",
8551+]
8552+
6298 [[package]]8553 [[package]]
6299 name = "serde_spanned"8554 name = "serde_spanned"
6300 version = "1.1.1"8555 version = "1.1.1"
@@ -6342,7 +8597,7 @@ version = "3.21.0"
6342 source = "registry+https://github.com/rust-lang/crates.io-index"8597 source = "registry+https://github.com/rust-lang/crates.io-index"
6343 checksum = "84d57bc0c8b9a17920c178daa6bb924850d54a9c97ab45194bb8c17ad66bb660"8598 checksum = "84d57bc0c8b9a17920c178daa6bb924850d54a9c97ab45194bb8c17ad66bb660"
6344 dependencies = [8599 dependencies = [
6345- "darling",8600+ "darling 0.23.0",
6346 "proc-macro2",8601 "proc-macro2",
6347 "quote",8602 "quote",
6348 "syn 2.0.119",8603 "syn 2.0.119",
@@ -6489,12 +8744,41 @@ dependencies = [
6489 "bitflags 2.13.1",8744 "bitflags 2.13.1",
6490 ]8745 ]
6491 8746
8747+[[package]]
8748+name = "simplecss"
8749+version = "0.2.2"
8750+source = "registry+https://github.com/rust-lang/crates.io-index"
8751+checksum = "7a9c6883ca9c3c7c90e888de77b7a5c849c779d25d74a1269b0218b14e8b136c"
8752+dependencies = [
8753+ "log",
8754+]
8755+
6492 [[package]]8756 [[package]]
6493 name = "siphasher"8757 name = "siphasher"
6494 version = "1.0.3"8758 version = "1.0.3"
6495 source = "registry+https://github.com/rust-lang/crates.io-index"8759 source = "registry+https://github.com/rust-lang/crates.io-index"
6496 checksum = "8ee5873ec9cce0195efcb7a4e9507a04cd49aec9c83d0389df45b1ef7ba2e649"8760 checksum = "8ee5873ec9cce0195efcb7a4e9507a04cd49aec9c83d0389df45b1ef7ba2e649"
6497 8761
8762+[[package]]
8763+name = "skrifa"
8764+version = "0.40.0"
8765+source = "registry+https://github.com/rust-lang/crates.io-index"
8766+checksum = "7fbdfe3d2475fbd7ddd1f3e5cf8288a30eb3e5f95832829570cd88115a7434ac"
8767+dependencies = [
8768+ "bytemuck",
8769+ "read-fonts 0.37.0",
8770+]
8771+
8772+[[package]]
8773+name = "skrifa"
8774+version = "0.44.0"
8775+source = "registry+https://github.com/rust-lang/crates.io-index"
8776+checksum = "819ab7d62b1d3e72d9d9dea5650bac30424f9111364bb94928dbf5ecad1baa68"
8777+dependencies = [
8778+ "bytemuck",
8779+ "read-fonts 0.41.0",
8780+]
8781+
6498 [[package]]8782 [[package]]
6499 name = "slab"8783 name = "slab"
6500 version = "0.4.12"8784 version = "0.4.12"
@@ -6528,7 +8812,7 @@ dependencies = [
6528 "cursor-icon",8812 "cursor-icon",
6529 "libc",8813 "libc",
6530 "log",8814 "log",
6531- "memmap2",8815+ "memmap2 0.9.11",
6532 "rustix 0.38.44",8816 "rustix 0.38.44",
6533 "thiserror 1.0.69",8817 "thiserror 1.0.69",
6534 "wayland-backend",8818 "wayland-backend",
@@ -6548,12 +8832,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
6548 checksum = "0512da38f5e2b31201a93524adb8d3136276fa4fe4aafab4e1f727a82b534cc0"8832 checksum = "0512da38f5e2b31201a93524adb8d3136276fa4fe4aafab4e1f727a82b534cc0"
6549 dependencies = [8833 dependencies = [
6550 "bitflags 2.13.1",8834 "bitflags 2.13.1",
8835+ "bytemuck",
6551 "calloop 0.14.4",8836 "calloop 0.14.4",
6552 "calloop-wayland-source 0.4.1",8837 "calloop-wayland-source 0.4.1",
6553 "cursor-icon",8838 "cursor-icon",
6554 "libc",8839 "libc",
6555 "log",8840 "log",
6556- "memmap2",8841+ "memmap2 0.9.11",
8842+ "pkg-config",
6557 "rustix 1.1.4",8843 "rustix 1.1.4",
6558 "thiserror 2.0.19",8844 "thiserror 2.0.19",
6559 "wayland-backend",8845 "wayland-backend",
@@ -6565,6 +8851,7 @@ dependencies = [
6565 "wayland-protocols-misc",8851 "wayland-protocols-misc",
6566 "wayland-protocols-wlr",8852 "wayland-protocols-wlr",
6567 "wayland-scanner",8853 "wayland-scanner",
8854+ "xkbcommon 0.8.0",
6568 "xkeysym",8855 "xkeysym",
6569 ]8856 ]
6570 8857
@@ -6579,6 +8866,17 @@ dependencies = [
6579 "wayland-backend",8866 "wayland-backend",
6580 ]8867 ]
6581 8868
8869+[[package]]
8870+name = "smithay-clipboard"
8871+version = "0.8.0"
8872+source = "git+https://github.com/pop-os/smithay-clipboard?tag=sctk-0.20#859b02c88f45c554049a67c6ddeec1692ce0e20b"
8873+dependencies = [
8874+ "libc",
8875+ "raw-window-handle",
8876+ "smithay-client-toolkit 0.20.0",
8877+ "wayland-backend",
8878+]
8879+
6582 [[package]]8880 [[package]]
6583 name = "smol_str"8881 name = "smol_str"
6584 version = "0.2.2"8882 version = "0.2.2"
@@ -6588,6 +8886,16 @@ dependencies = [
6588 "serde",8886 "serde",
6589 ]8887 ]
6590 8888
8889+[[package]]
8890+name = "smol_str"
8891+version = "0.3.6"
8892+source = "registry+https://github.com/rust-lang/crates.io-index"
8893+checksum = "4aaa7368fcf4852a4c2dd92df0cace6a71f2091ca0a23391ce7f3a31833f1523"
8894+dependencies = [
8895+ "borsh",
8896+ "serde_core",
8897+]
8898+
6591 [[package]]8899 [[package]]
6592 name = "socket2"8900 name = "socket2"
6593 version = "0.6.5"8901 version = "0.6.5"
@@ -6598,6 +8906,36 @@ dependencies = [
6598 "windows-sys 0.61.2",8906 "windows-sys 0.61.2",
6599 ]8907 ]
6600 8908
8909+[[package]]
8910+name = "softbuffer"
8911+version = "0.4.1"
8912+source = "git+https://github.com/pop-os/softbuffer?tag=cosmic-4.0#c2b2c19ddb38ff17495643699f97cb1f2064a1be"
8913+dependencies = [
8914+ "as-raw-xcb-connection",
8915+ "bytemuck",
8916+ "cfg_aliases 0.2.2",
8917+ "cocoa",
8918+ "core-graphics",
8919+ "drm",
8920+ "fastrand",
8921+ "foreign-types",
8922+ "js-sys",
8923+ "log",
8924+ "memmap2 0.9.11",
8925+ "objc",
8926+ "raw-window-handle",
8927+ "redox_syscall 0.5.18",
8928+ "rustix 0.38.44",
8929+ "tiny-xlib",
8930+ "wasm-bindgen",
8931+ "wayland-backend",
8932+ "wayland-client",
8933+ "wayland-sys",
8934+ "web-sys",
8935+ "windows-sys 0.52.0",
8936+ "x11rb",
8937+]
8938+
6601 [[package]]8939 [[package]]
6602 name = "sonora"8940 name = "sonora"
6603 version = "0.1.0"8941 version = "0.1.0"
@@ -6703,6 +9041,15 @@ version = "0.10.1"
6703 source = "registry+https://github.com/rust-lang/crates.io-index"9041 source = "registry+https://github.com/rust-lang/crates.io-index"
6704 checksum = "023a211cb3138dbc438680b32560ad89f699977624c9f8dbb95a47d5b4c07dd3"9042 checksum = "023a211cb3138dbc438680b32560ad89f699977624c9f8dbb95a47d5b4c07dd3"
6705 9043
9044+[[package]]
9045+name = "spirv"
9046+version = "0.3.0+sdk-1.3.268.0"
9047+source = "registry+https://github.com/rust-lang/crates.io-index"
9048+checksum = "eda41003dc44290527a59b13432d4a0379379fa074b70174882adfbdfd917844"
9049+dependencies = [
9050+ "bitflags 2.13.1",
9051+]
9052+
6706 [[package]]9053 [[package]]
6707 name = "spki"9054 name = "spki"
6708 version = "0.8.0"9055 version = "0.8.0"
@@ -6719,6 +9066,12 @@ version = "1.2.1"
6719 source = "registry+https://github.com/rust-lang/crates.io-index"9066 source = "registry+https://github.com/rust-lang/crates.io-index"
6720 checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596"9067 checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596"
6721 9068
9069+[[package]]
9070+name = "static_assertions"
9071+version = "1.1.0"
9072+source = "registry+https://github.com/rust-lang/crates.io-index"
9073+checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
9074+
6722 [[package]]9075 [[package]]
6723 name = "strength_reduce"9076 name = "strength_reduce"
6724 version = "0.2.4"9077 version = "0.2.4"
@@ -6730,6 +9083,9 @@ name = "strict-num"
6730 version = "0.1.1"9083 version = "0.1.1"
6731 source = "registry+https://github.com/rust-lang/crates.io-index"9084 source = "registry+https://github.com/rust-lang/crates.io-index"
6732 checksum = "6637bab7722d379c8b41ba849228d680cc12d0a45ba1fa2b48f2a30577a06731"9085 checksum = "6637bab7722d379c8b41ba849228d680cc12d0a45ba1fa2b48f2a30577a06731"
9086+dependencies = [
9087+ "float-cmp 0.9.0",
9088+]
6733 9089
6734 [[package]]9090 [[package]]
6735 name = "strsim"9091 name = "strsim"
@@ -6752,7 +9108,7 @@ version = "0.28.0"
6752 source = "registry+https://github.com/rust-lang/crates.io-index"9108 source = "registry+https://github.com/rust-lang/crates.io-index"
6753 checksum = "ab85eea0270ee17587ed4156089e10b9e6880ee688791d45a905f5b1ca36f664"9109 checksum = "ab85eea0270ee17587ed4156089e10b9e6880ee688791d45a905f5b1ca36f664"
6754 dependencies = [9110 dependencies = [
6755- "heck",9111+ "heck 0.5.0",
6756 "proc-macro2",9112 "proc-macro2",
6757 "quote",9113 "quote",
6758 "syn 2.0.119",9114 "syn 2.0.119",
@@ -6764,6 +9120,33 @@ version = "2.6.1"
6764 source = "registry+https://github.com/rust-lang/crates.io-index"9120 source = "registry+https://github.com/rust-lang/crates.io-index"
6765 checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292"9121 checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292"
6766 9122
9123+[[package]]
9124+name = "svg_fmt"
9125+version = "0.4.5"
9126+source = "registry+https://github.com/rust-lang/crates.io-index"
9127+checksum = "0193cc4331cfd2f3d2011ef287590868599a2f33c3e69bc22c1a3d3acf9e02fb"
9128+
9129+[[package]]
9130+name = "svgtypes"
9131+version = "0.15.3"
9132+source = "registry+https://github.com/rust-lang/crates.io-index"
9133+checksum = "68c7541fff44b35860c1a7a47a7cadf3e4a304c457b58f9870d9706ece028afc"
9134+dependencies = [
9135+ "kurbo 0.11.3",
9136+ "siphasher",
9137+]
9138+
9139+[[package]]
9140+name = "swash"
9141+version = "0.2.10"
9142+source = "registry+https://github.com/rust-lang/crates.io-index"
9143+checksum = "6c2499c2d826531388872b2268718aed907a39bd785ab0dcfe57fab26283f92e"
9144+dependencies = [
9145+ "skrifa 0.44.0",
9146+ "yazi",
9147+ "zeno",
9148+]
9149+
6767 [[package]]9150 [[package]]
6768 name = "symphonia"9151 name = "symphonia"
6769 version = "0.5.5"9152 version = "0.5.5"
@@ -6890,6 +9273,15 @@ dependencies = [
6890 "syn 2.0.119",9273 "syn 2.0.119",
6891 ]9274 ]
6892 9275
9276+[[package]]
9277+name = "sys-locale"
9278+version = "0.3.2"
9279+source = "registry+https://github.com/rust-lang/crates.io-index"
9280+checksum = "8eab9a99a024a169fe8a903cf9d4a3b3601109bcc13bd9e3c6fff259138626c4"
9281+dependencies = [
9282+ "libc",
9283+]
9284+
6893 [[package]]9285 [[package]]
6894 name = "system-configuration"9286 name = "system-configuration"
6895 version = "0.7.0"9287 version = "0.7.0"
@@ -6918,12 +9310,24 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
6918 checksum = "396a35feb67335377e0251fcbc1092fc85c484bd4e3a7a54319399da127796e7"9310 checksum = "396a35feb67335377e0251fcbc1092fc85c484bd4e3a7a54319399da127796e7"
6919 dependencies = [9311 dependencies = [
6920 "cfg-expr",9312 "cfg-expr",
6921- "heck",9313+ "heck 0.5.0",
6922 "pkg-config",9314 "pkg-config",
6923- "toml",9315+ "toml 1.1.4+spec-1.1.0",
6924 "version-compare",9316 "version-compare",
6925 ]9317 ]
6926 9318
9319+[[package]]
9320+name = "taffy"
9321+version = "0.9.2"
9322+source = "registry+https://github.com/rust-lang/crates.io-index"
9323+checksum = "41ba83ebaf2954d31d05d67340fd46cebe99da2b7133b0dd68d70c65473a437b"
9324+dependencies = [
9325+ "arrayvec",
9326+ "grid",
9327+ "serde",
9328+ "slotmap",
9329+]
9330+
6927 [[package]]9331 [[package]]
6928 name = "tagptr"9332 name = "tagptr"
6929 version = "0.2.0"9333 version = "0.2.0"
@@ -6936,6 +9340,28 @@ version = "0.13.5"
6936 source = "registry+https://github.com/rust-lang/crates.io-index"9340 source = "registry+https://github.com/rust-lang/crates.io-index"
6937 checksum = "adb6935a6f5c20170eeceb1a3835a49e12e19d792f6dd344ccc76a985ca5a6ca"9341 checksum = "adb6935a6f5c20170eeceb1a3835a49e12e19d792f6dd344ccc76a985ca5a6ca"
6938 9342
9343+[[package]]
9344+name = "tempfile"
9345+version = "3.27.0"
9346+source = "registry+https://github.com/rust-lang/crates.io-index"
9347+checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd"
9348+dependencies = [
9349+ "fastrand",
9350+ "getrandom 0.3.4",
9351+ "once_cell",
9352+ "rustix 1.1.4",
9353+ "windows-sys 0.52.0",
9354+]
9355+
9356+[[package]]
9357+name = "termcolor"
9358+version = "1.4.1"
9359+source = "registry+https://github.com/rust-lang/crates.io-index"
9360+checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755"
9361+dependencies = [
9362+ "winapi-util",
9363+]
9364+
6939 [[package]]9365 [[package]]
6940 name = "thiserror"9366 name = "thiserror"
6941 version = "1.0.69"9367 version = "1.0.69"
@@ -7007,7 +9433,7 @@ dependencies = [
7007 "half",9433 "half",
7008 "quick-error",9434 "quick-error",
7009 "weezl",9435 "weezl",
7010- "zune-jpeg",9436+ "zune-jpeg 0.5.15",
7011 ]9437 ]
7012 9438
7013 [[package]]9439 [[package]]
@@ -7052,7 +9478,22 @@ dependencies = [
7052 "bytemuck",9478 "bytemuck",
7053 "cfg-if",9479 "cfg-if",
7054 "log",9480 "log",
7055- "tiny-skia-path",9481+ "png 0.17.16",
9482+ "tiny-skia-path 0.11.4",
9483+]
9484+
9485+[[package]]
9486+name = "tiny-skia"
9487+version = "0.12.0"
9488+source = "registry+https://github.com/rust-lang/crates.io-index"
9489+checksum = "47ffee5eaaf5527f630fb0e356b90ebdec84d5d18d937c5e440350f88c5a91ea"
9490+dependencies = [
9491+ "arrayref",
9492+ "arrayvec",
9493+ "bytemuck",
9494+ "cfg-if",
9495+ "log",
9496+ "tiny-skia-path 0.12.0",
7056 ]9497 ]
7057 9498
7058 [[package]]9499 [[package]]
@@ -7066,6 +9507,30 @@ dependencies = [
7066 "strict-num",9507 "strict-num",
7067 ]9508 ]
7068 9509
9510+[[package]]
9511+name = "tiny-skia-path"
9512+version = "0.12.0"
9513+source = "registry+https://github.com/rust-lang/crates.io-index"
9514+checksum = "edca365c3faccca67d06593c5980fa6c57687de727a03131735bb85f01fdeeb9"
9515+dependencies = [
9516+ "arrayref",
9517+ "bytemuck",
9518+ "strict-num",
9519+]
9520+
9521+[[package]]
9522+name = "tiny-xlib"
9523+version = "0.2.5"
9524+source = "registry+https://github.com/rust-lang/crates.io-index"
9525+checksum = "a90a0ca3ee6a69f2ad28fd11621a4c3f03b371f366be500b64df260c4ffbafb4"
9526+dependencies = [
9527+ "as-raw-xcb-connection",
9528+ "ctor",
9529+ "libloading",
9530+ "pkg-config",
9531+ "tracing",
9532+]
9533+
7069 [[package]]9534 [[package]]
7070 name = "tinystr"9535 name = "tinystr"
7071 version = "0.8.3"9536 version = "0.8.3"
@@ -7073,6 +9538,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
7073 checksum = "c8323304221c2a851516f22236c5722a72eaa19749016521d6dff0824447d96d"9538 checksum = "c8323304221c2a851516f22236c5722a72eaa19749016521d6dff0824447d96d"
7074 dependencies = [9539 dependencies = [
7075 "displaydoc",9540 "displaydoc",
9541+ "serde_core",
7076 "zerovec",9542 "zerovec",
7077 ]9543 ]
7078 9544
@@ -7105,6 +9571,7 @@ dependencies = [
7105 "signal-hook-registry",9571 "signal-hook-registry",
7106 "socket2",9572 "socket2",
7107 "tokio-macros",9573 "tokio-macros",
9574+ "tracing",
7108 "windows-sys 0.61.2",9575 "windows-sys 0.61.2",
7109 ]9576 ]
7110 9577
@@ -7195,6 +9662,15 @@ dependencies = [
7195 "tokio-util",9662 "tokio-util",
7196 ]9663 ]
7197 9664
9665+[[package]]
9666+name = "toml"
9667+version = "0.5.11"
9668+source = "registry+https://github.com/rust-lang/crates.io-index"
9669+checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234"
9670+dependencies = [
9671+ "serde",
9672+]
9673+
7198 [[package]]9674 [[package]]
7199 name = "toml"9675 name = "toml"
7200 version = "1.1.4+spec-1.1.0"9676 version = "1.1.4+spec-1.1.0"
@@ -7385,6 +9861,9 @@ name = "ttf-parser"
7385 version = "0.25.1"9861 version = "0.25.1"
7386 source = "registry+https://github.com/rust-lang/crates.io-index"9862 source = "registry+https://github.com/rust-lang/crates.io-index"
7387 checksum = "d2df906b07856748fa3f6e0ad0cbaa047052d4a7dd609e231c4f72cee8c36f31"9863 checksum = "d2df906b07856748fa3f6e0ad0cbaa047052d4a7dd609e231c4f72cee8c36f31"
9864+dependencies = [
9865+ "core_maths",
9866+]
7388 9867
7389 [[package]]9868 [[package]]
7390 name = "tungstenite"9869 name = "tungstenite"
@@ -7405,89 +9884,218 @@ dependencies = [
7405 ]9884 ]
7406 9885
7407 [[package]]9886 [[package]]
7408-name = "typenum"9887+name = "type-map"
7409-version = "1.20.1"9888+version = "0.5.1"
7410 source = "registry+https://github.com/rust-lang/crates.io-index"9889 source = "registry+https://github.com/rust-lang/crates.io-index"
7411-checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20"9890+checksum = "cb30dbbd9036155e74adad6812e9898d03ec374946234fbcebd5dfc7b9187b90"
9891+dependencies = [
9892+ "rustc-hash 2.1.3",
9893+]
7412 9894
7413 [[package]]9895 [[package]]
7414-name = "unicode-ident"9896+name = "typeid"
7415-version = "1.0.24"9897+version = "1.0.3"
7416 source = "registry+https://github.com/rust-lang/crates.io-index"9898 source = "registry+https://github.com/rust-lang/crates.io-index"
7417-checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75"9899+checksum = "bc7d623258602320d5c55d1bc22793b57daff0ec7efc270ea7d55ce1d5f5471c"
7418 9900
7419 [[package]]9901 [[package]]
7420-name = "unicode-segmentation"9902+name = "typenum"
7421-version = "1.13.3"9903+version = "1.20.1"
7422 source = "registry+https://github.com/rust-lang/crates.io-index"9904 source = "registry+https://github.com/rust-lang/crates.io-index"
7423-checksum = "c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8"9905+checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20"
7424 9906
7425 [[package]]9907 [[package]]
7426-name = "unicode-width"9908+name = "uds_windows"
7427-version = "0.2.2"9909+version = "1.2.1"
7428 source = "registry+https://github.com/rust-lang/crates.io-index"9910 source = "registry+https://github.com/rust-lang/crates.io-index"
7429-checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254"9911+checksum = "f2f6fb2847f6742cd76af783a2a2c49e9375d0a111c7bef6f71cd9e738c72d6e"
9912+dependencies = [
9913+ "memoffset",
9914+ "tempfile",
9915+ "windows-sys 0.60.2",
9916+]
7430 9917
7431 [[package]]9918 [[package]]
7432-name = "unicode-xid"9919+name = "uncased"
7433-version = "0.2.6"9920+version = "0.9.10"
7434 source = "registry+https://github.com/rust-lang/crates.io-index"9921 source = "registry+https://github.com/rust-lang/crates.io-index"
7435-checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853"9922+checksum = "e1b88fcfe09e89d3866a5c11019378088af2d24c3fbd4f0543f96b479ec90697"
9923+dependencies = [
9924+ "version_check",
9925+]
7436 9926
7437 [[package]]9927 [[package]]
7438-name = "universal-hash"9928+name = "unic-langid"
7439-version = "0.5.1"9929+version = "0.9.6"
7440 source = "registry+https://github.com/rust-lang/crates.io-index"9930 source = "registry+https://github.com/rust-lang/crates.io-index"
7441-checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea"9931+checksum = "a28ba52c9b05311f4f6e62d5d9d46f094bd6e84cb8df7b3ef952748d752a7d05"
7442 dependencies = [9932 dependencies = [
7443- "crypto-common 0.1.6",9933+ "unic-langid-impl",
7444- "subtle",
7445 ]9934 ]
7446 9935
7447 [[package]]9936 [[package]]
7448-name = "unsafe-libopus"9937+name = "unic-langid-impl"
7449-version = "0.2.0"9938+version = "0.9.6"
7450 source = "registry+https://github.com/rust-lang/crates.io-index"9939 source = "registry+https://github.com/rust-lang/crates.io-index"
7451-checksum = "c757408e7256c910343c7b215c8c8b878948630eecc774baabcca0972376eb73"9940+checksum = "dce1bf08044d4b7a94028c93786f8566047edc11110595914de93362559bc658"
7452 dependencies = [9941 dependencies = [
7453- "arrayref",9942+ "serde",
7454- "num-complex",9943+ "tinystr",
7455- "num-traits",
7456 ]9944 ]
7457 9945
7458 [[package]]9946 [[package]]
7459-name = "untrusted"9947+name = "unicase"
7460-version = "0.7.1"9948+version = "2.9.0"
7461 source = "registry+https://github.com/rust-lang/crates.io-index"9949 source = "registry+https://github.com/rust-lang/crates.io-index"
7462-checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a"9950+checksum = "dbc4bc3a9f746d862c45cb89d705aa10f187bb96c76001afab07a0d35ce60142"
7463 9951
7464 [[package]]9952 [[package]]
7465-name = "untrusted"9953+name = "unicode-bidi"
7466-version = "0.9.0"9954+version = "0.3.18"
7467 source = "registry+https://github.com/rust-lang/crates.io-index"9955 source = "registry+https://github.com/rust-lang/crates.io-index"
7468-checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1"9956+checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5"
7469 9957
7470 [[package]]9958 [[package]]
7471-name = "url"9959+name = "unicode-bidi-mirroring"
7472-version = "2.5.8"9960+version = "0.4.0"
7473 source = "registry+https://github.com/rust-lang/crates.io-index"9961 source = "registry+https://github.com/rust-lang/crates.io-index"
7474-checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed"9962+checksum = "5dfa6e8c60bb66d49db113e0125ee8711b7647b5579dc7f5f19c42357ed039fe"
7475-dependencies = [
7476- "form_urlencoded",
7477- "idna",
7478- "percent-encoding",
7479- "serde",
7480- "serde_derive",
7481-]
7482 9963
7483 [[package]]9964 [[package]]
7484-name = "urlencoding"9965+name = "unicode-ccc"
7485-version = "2.1.3"9966+version = "0.4.0"
7486 source = "registry+https://github.com/rust-lang/crates.io-index"9967 source = "registry+https://github.com/rust-lang/crates.io-index"
7487-checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da"9968+checksum = "ce61d488bcdc9bc8b5d1772c404828b17fc481c0a582b5581e95fb233aef503e"
7488 9969
7489 [[package]]9970 [[package]]
7490-name = "utf8_iter"9971+name = "unicode-ident"
9972+version = "1.0.24"
9973+source = "registry+https://github.com/rust-lang/crates.io-index"
9974+checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75"
9975+
9976+[[package]]
9977+name = "unicode-linebreak"
9978+version = "0.1.5"
9979+source = "registry+https://github.com/rust-lang/crates.io-index"
9980+checksum = "3b09c83c3c29d37506a3e260c08c03743a6bb66a9cd432c6934ab501a190571f"
9981+
9982+[[package]]
9983+name = "unicode-properties"
9984+version = "0.1.4"
9985+source = "registry+https://github.com/rust-lang/crates.io-index"
9986+checksum = "7df058c713841ad818f1dc5d3fd88063241cc61f49f5fbea4b951e8cf5a8d71d"
9987+
9988+[[package]]
9989+name = "unicode-script"
9990+version = "0.5.8"
9991+source = "registry+https://github.com/rust-lang/crates.io-index"
9992+checksum = "383ad40bb927465ec0ce7720e033cb4ca06912855fc35db31b5755d0de75b1ee"
9993+
9994+[[package]]
9995+name = "unicode-segmentation"
9996+version = "1.13.3"
9997+source = "registry+https://github.com/rust-lang/crates.io-index"
9998+checksum = "c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8"
9999+
10000+[[package]]
10001+name = "unicode-vo"
10002+version = "0.1.0"
10003+source = "registry+https://github.com/rust-lang/crates.io-index"
10004+checksum = "b1d386ff53b415b7fe27b50bb44679e2cc4660272694b7b6f3326d8480823a94"
10005+
10006+[[package]]
10007+name = "unicode-width"
10008+version = "0.2.2"
10009+source = "registry+https://github.com/rust-lang/crates.io-index"
10010+checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254"
10011+
10012+[[package]]
10013+name = "unicode-xid"
10014+version = "0.2.6"
10015+source = "registry+https://github.com/rust-lang/crates.io-index"
10016+checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853"
10017+
10018+[[package]]
10019+name = "universal-hash"
10020+version = "0.5.1"
10021+source = "registry+https://github.com/rust-lang/crates.io-index"
10022+checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea"
10023+dependencies = [
10024+ "crypto-common 0.1.6",
10025+ "subtle",
10026+]
10027+
10028+[[package]]
10029+name = "unsafe-libopus"
10030+version = "0.2.0"
10031+source = "registry+https://github.com/rust-lang/crates.io-index"
10032+checksum = "c757408e7256c910343c7b215c8c8b878948630eecc774baabcca0972376eb73"
10033+dependencies = [
10034+ "arrayref",
10035+ "num-complex",
10036+ "num-traits",
10037+]
10038+
10039+[[package]]
10040+name = "untrusted"
10041+version = "0.7.1"
10042+source = "registry+https://github.com/rust-lang/crates.io-index"
10043+checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a"
10044+
10045+[[package]]
10046+name = "untrusted"
10047+version = "0.9.0"
10048+source = "registry+https://github.com/rust-lang/crates.io-index"
10049+checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1"
10050+
10051+[[package]]
10052+name = "url"
10053+version = "2.5.8"
10054+source = "registry+https://github.com/rust-lang/crates.io-index"
10055+checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed"
10056+dependencies = [
10057+ "form_urlencoded",
10058+ "idna",
10059+ "percent-encoding",
10060+ "serde",
10061+ "serde_derive",
10062+]
10063+
10064+[[package]]
10065+name = "urlencoding"
10066+version = "2.1.3"
10067+source = "registry+https://github.com/rust-lang/crates.io-index"
10068+checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da"
10069+
10070+[[package]]
10071+name = "usvg"
10072+version = "0.45.1"
10073+source = "registry+https://github.com/rust-lang/crates.io-index"
10074+checksum = "80be9b06fbae3b8b303400ab20778c80bbaf338f563afe567cf3c9eea17b47ef"
10075+dependencies = [
10076+ "base64",
10077+ "data-url",
10078+ "flate2",
10079+ "fontdb",
10080+ "imagesize",
10081+ "kurbo 0.11.3",
10082+ "log",
10083+ "pico-args",
10084+ "roxmltree",
10085+ "rustybuzz",
10086+ "simplecss",
10087+ "siphasher",
10088+ "strict-num",
10089+ "svgtypes",
10090+ "tiny-skia-path 0.11.4",
10091+ "unicode-bidi",
10092+ "unicode-script",
10093+ "unicode-vo",
10094+ "xmlwriter",
10095+]
10096+
10097+[[package]]
10098+name = "utf8_iter"
7491 version = "1.0.4"10099 version = "1.0.4"
7492 source = "registry+https://github.com/rust-lang/crates.io-index"10100 source = "registry+https://github.com/rust-lang/crates.io-index"
7493 checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be"10101 checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be"
@@ -7506,6 +10114,7 @@ checksum = "bf3923a6f5c4c6382e0b653c4117f48d631ea17f38ed86e2a828e6f7412f5239"
7506 dependencies = [10114 dependencies = [
7507 "getrandom 0.4.3",10115 "getrandom 0.4.3",
7508 "js-sys",10116 "js-sys",
10117+ "serde_core",
7509 "wasm-bindgen",10118 "wasm-bindgen",
7510 ]10119 ]
7511 10120
@@ -7551,7 +10160,7 @@ dependencies = [
7551 "mp4",10160 "mp4",
7552 "openh264",10161 "openh264",
7553 "png 0.17.16",10162 "png 0.17.16",
7554- "winit",10163+ "winit 0.30.13",
7555 "zip",10164 "zip",
7556 ]10165 ]
7557 10166
@@ -7569,7 +10178,7 @@ dependencies = [
7569 "jni 0.22.4",10178 "jni 0.22.4",
7570 "png 0.17.16",10179 "png 0.17.16",
7571 "vidya",10180 "vidya",
7572- "winit",10181+ "winit 0.30.13",
7573 ]10182 ]
7574 10183
7575 [[package]]10184 [[package]]
@@ -7695,6 +10304,7 @@ dependencies = [
7695 "js-sys",10304 "js-sys",
7696 "parking_lot",10305 "parking_lot",
7697 "pin-utils",10306 "pin-utils",
10307+ "slab",
7698 "wasm-bindgen",10308 "wasm-bindgen",
7699 ]10309 ]
7700 10310
@@ -7756,6 +10366,7 @@ dependencies = [
7756 "wayland-backend",10366 "wayland-backend",
7757 "wayland-client",10367 "wayland-client",
7758 "wayland-scanner",10368 "wayland-scanner",
10369+ "wayland-server",
7759 ]10370 ]
7760 10371
7761 [[package]]10372 [[package]]
@@ -7808,6 +10419,7 @@ dependencies = [
7808 "wayland-client",10419 "wayland-client",
7809 "wayland-protocols",10420 "wayland-protocols",
7810 "wayland-scanner",10421 "wayland-scanner",
10422+ "wayland-server",
7811 ]10423 ]
7812 10424
7813 [[package]]10425 [[package]]
@@ -7821,6 +10433,19 @@ dependencies = [
7821 "quote",10433 "quote",
7822 ]10434 ]
7823 10435
10436+[[package]]
10437+name = "wayland-server"
10438+version = "0.31.14"
10439+source = "registry+https://github.com/rust-lang/crates.io-index"
10440+checksum = "0dde9c29be0f723a573977de51ee455bf3dfa03652730a74f9dd3b337e374d75"
10441+dependencies = [
10442+ "bitflags 2.13.1",
10443+ "downcast-rs",
10444+ "rustix 1.1.4",
10445+ "wayland-backend",
10446+ "wayland-scanner",
10447+]
10448+
7824 [[package]]10449 [[package]]
7825 name = "wayland-sys"10450 name = "wayland-sys"
7826 version = "0.31.11"10451 version = "0.31.11"
@@ -7975,6 +10600,156 @@ version = "0.1.12"
7975 source = "registry+https://github.com/rust-lang/crates.io-index"10600 source = "registry+https://github.com/rust-lang/crates.io-index"
7976 checksum = "a28ac98ddc8b9274cb41bb4d9d4d5c425b6020c50c46f25559911905610b4a88"10601 checksum = "a28ac98ddc8b9274cb41bb4d9d4d5c425b6020c50c46f25559911905610b4a88"
7977 10602
10603+[[package]]
10604+name = "wgpu"
10605+version = "28.0.0"
10606+source = "registry+https://github.com/rust-lang/crates.io-index"
10607+checksum = "f9cb534d5ffd109c7d1135f34cdae29e60eab94855a625dcfe1705f8bc7ad79f"
10608+dependencies = [
10609+ "arrayvec",
10610+ "bitflags 2.13.1",
10611+ "bytemuck",
10612+ "cfg-if",
10613+ "cfg_aliases 0.2.2",
10614+ "document-features",
10615+ "hashbrown 0.16.1",
10616+ "js-sys",
10617+ "log",
10618+ "naga",
10619+ "parking_lot",
10620+ "portable-atomic",
10621+ "profiling",
10622+ "raw-window-handle",
10623+ "smallvec",
10624+ "static_assertions",
10625+ "wasm-bindgen",
10626+ "wasm-bindgen-futures",
10627+ "web-sys",
10628+ "wgpu-core",
10629+ "wgpu-hal",
10630+ "wgpu-types",
10631+]
10632+
10633+[[package]]
10634+name = "wgpu-core"
10635+version = "28.0.1"
10636+source = "registry+https://github.com/rust-lang/crates.io-index"
10637+checksum = "d23f4642f53f666adcfd2d3218ab174d1e6681101aef18696b90cbe64d1c10f9"
10638+dependencies = [
10639+ "arrayvec",
10640+ "bit-set",
10641+ "bit-vec 0.8.0",
10642+ "bitflags 2.13.1",
10643+ "bytemuck",
10644+ "cfg_aliases 0.2.2",
10645+ "document-features",
10646+ "hashbrown 0.16.1",
10647+ "indexmap 2.14.0",
10648+ "log",
10649+ "naga",
10650+ "once_cell",
10651+ "parking_lot",
10652+ "portable-atomic",
10653+ "profiling",
10654+ "raw-window-handle",
10655+ "rustc-hash 1.1.0",
10656+ "smallvec",
10657+ "thiserror 2.0.19",
10658+ "wgpu-core-deps-apple",
10659+ "wgpu-core-deps-emscripten",
10660+ "wgpu-core-deps-windows-linux-android",
10661+ "wgpu-hal",
10662+ "wgpu-types",
10663+]
10664+
10665+[[package]]
10666+name = "wgpu-core-deps-apple"
10667+version = "28.0.0"
10668+source = "registry+https://github.com/rust-lang/crates.io-index"
10669+checksum = "87b7b696b918f337c486bf93142454080a32a37832ba8a31e4f48221890047da"
10670+dependencies = [
10671+ "wgpu-hal",
10672+]
10673+
10674+[[package]]
10675+name = "wgpu-core-deps-emscripten"
10676+version = "28.0.0"
10677+source = "registry+https://github.com/rust-lang/crates.io-index"
10678+checksum = "34b251c331f84feac147de3c4aa3aa45112622a95dd7ee1b74384fa0458dbd79"
10679+dependencies = [
10680+ "wgpu-hal",
10681+]
10682+
10683+[[package]]
10684+name = "wgpu-core-deps-windows-linux-android"
10685+version = "28.0.0"
10686+source = "registry+https://github.com/rust-lang/crates.io-index"
10687+checksum = "68ca976e72b2c9964eb243e281f6ce7f14a514e409920920dcda12ae40febaae"
10688+dependencies = [
10689+ "wgpu-hal",
10690+]
10691+
10692+[[package]]
10693+name = "wgpu-hal"
10694+version = "28.0.1"
10695+source = "registry+https://github.com/rust-lang/crates.io-index"
10696+checksum = "44d6cb474beb218824dcc9e1ce679d973f719262789bfb27407da560cac20eeb"
10697+dependencies = [
10698+ "android_system_properties",
10699+ "arrayvec",
10700+ "ash",
10701+ "bit-set",
10702+ "bitflags 2.13.1",
10703+ "block",
10704+ "bytemuck",
10705+ "cfg-if",
10706+ "cfg_aliases 0.2.2",
10707+ "core-graphics-types 0.2.0",
10708+ "glow",
10709+ "glutin_wgl_sys",
10710+ "gpu-allocator",
10711+ "gpu-descriptor",
10712+ "hashbrown 0.16.1",
10713+ "js-sys",
10714+ "khronos-egl",
10715+ "libc",
10716+ "libloading",
10717+ "log",
10718+ "metal",
10719+ "naga",
10720+ "ndk-sys",
10721+ "objc",
10722+ "once_cell",
10723+ "ordered-float",
10724+ "parking_lot",
10725+ "portable-atomic",
10726+ "portable-atomic-util",
10727+ "profiling",
10728+ "range-alloc",
10729+ "raw-window-handle",
10730+ "renderdoc-sys",
10731+ "smallvec",
10732+ "thiserror 2.0.19",
10733+ "wasm-bindgen",
10734+ "web-sys",
10735+ "wgpu-types",
10736+ "windows 0.62.2",
10737+ "windows-core 0.62.2",
10738+]
10739+
10740+[[package]]
10741+name = "wgpu-types"
10742+version = "28.0.0"
10743+source = "registry+https://github.com/rust-lang/crates.io-index"
10744+checksum = "e18308757e594ed2cd27dddbb16a139c42a683819d32a2e0b1b0167552f5840c"
10745+dependencies = [
10746+ "bitflags 2.13.1",
10747+ "bytemuck",
10748+ "js-sys",
10749+ "log",
10750+ "web-sys",
10751+]
10752+
7978 [[package]]10753 [[package]]
7979 name = "wide"10754 name = "wide"
7980 version = "1.5.0"10755 version = "1.5.0"
@@ -8022,6 +10797,21 @@ version = "0.4.0"
8022 source = "registry+https://github.com/rust-lang/crates.io-index"10797 source = "registry+https://github.com/rust-lang/crates.io-index"
8023 checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"10798 checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
8024 10799
10800+[[package]]
10801+name = "window_clipboard"
10802+version = "0.4.1"
10803+source = "git+https://github.com/pop-os/window_clipboard.git?tag=sctk-0.20#f68595ee0e62fbd6589f4709b5aaa5c3c7ea5f6c"
10804+dependencies = [
10805+ "clipboard-win",
10806+ "clipboard_macos",
10807+ "clipboard_wayland",
10808+ "clipboard_x11",
10809+ "dnd",
10810+ "mime 0.1.0",
10811+ "raw-window-handle",
10812+ "thiserror 1.0.69",
10813+]
10814+
8025 [[package]]10815 [[package]]
8026 name = "windowfunctions"10816 name = "windowfunctions"
8027 version = "0.1.1"10817 version = "0.1.1"
@@ -8031,16 +10821,38 @@ dependencies = [
8031 "num-traits",10821 "num-traits",
8032 ]10822 ]
8033 10823
10824+[[package]]
10825+name = "windows"
10826+version = "0.61.3"
10827+source = "registry+https://github.com/rust-lang/crates.io-index"
10828+checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893"
10829+dependencies = [
10830+ "windows-collections 0.2.0",
10831+ "windows-core 0.61.2",
10832+ "windows-future 0.2.1",
10833+ "windows-link 0.1.3",
10834+ "windows-numerics 0.2.0",
10835+]
10836+
8034 [[package]]10837 [[package]]
8035 name = "windows"10838 name = "windows"
8036 version = "0.62.2"10839 version = "0.62.2"
8037 source = "registry+https://github.com/rust-lang/crates.io-index"10840 source = "registry+https://github.com/rust-lang/crates.io-index"
8038 checksum = "527fadee13e0c05939a6a05d5bd6eec6cd2e3dbd648b9f8e447c6518133d8580"10841 checksum = "527fadee13e0c05939a6a05d5bd6eec6cd2e3dbd648b9f8e447c6518133d8580"
8039 dependencies = [10842 dependencies = [
8040- "windows-collections",10843+ "windows-collections 0.3.2",
8041- "windows-core",10844+ "windows-core 0.62.2",
8042- "windows-future",10845+ "windows-future 0.3.2",
8043- "windows-numerics",10846+ "windows-numerics 0.3.1",
10847+]
10848+
10849+[[package]]
10850+name = "windows-collections"
10851+version = "0.2.0"
10852+source = "registry+https://github.com/rust-lang/crates.io-index"
10853+checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8"
10854+dependencies = [
10855+ "windows-core 0.61.2",
8044 ]10856 ]
8045 10857
8046 [[package]]10858 [[package]]
@@ -8049,7 +10861,20 @@ version = "0.3.2"
8049 source = "registry+https://github.com/rust-lang/crates.io-index"10861 source = "registry+https://github.com/rust-lang/crates.io-index"
8050 checksum = "23b2d95af1a8a14a3c7367e1ed4fc9c20e0a26e79551b1454d72583c97cc6610"10862 checksum = "23b2d95af1a8a14a3c7367e1ed4fc9c20e0a26e79551b1454d72583c97cc6610"
8051 dependencies = [10863 dependencies = [
8052- "windows-core",10864+ "windows-core 0.62.2",
10865+]
10866+
10867+[[package]]
10868+name = "windows-core"
10869+version = "0.61.2"
10870+source = "registry+https://github.com/rust-lang/crates.io-index"
10871+checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3"
10872+dependencies = [
10873+ "windows-implement",
10874+ "windows-interface",
10875+ "windows-link 0.1.3",
10876+ "windows-result 0.3.4",
10877+ "windows-strings 0.4.2",
8053 ]10878 ]
8054 10879
8055 [[package]]10880 [[package]]
@@ -8060,9 +10885,20 @@ checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb"
8060 dependencies = [10885 dependencies = [
8061 "windows-implement",10886 "windows-implement",
8062 "windows-interface",10887 "windows-interface",
8063- "windows-link",10888+ "windows-link 0.2.1",
8064- "windows-result",10889+ "windows-result 0.4.1",
8065- "windows-strings",10890+ "windows-strings 0.5.1",
10891+]
10892+
10893+[[package]]
10894+name = "windows-future"
10895+version = "0.2.1"
10896+source = "registry+https://github.com/rust-lang/crates.io-index"
10897+checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e"
10898+dependencies = [
10899+ "windows-core 0.61.2",
10900+ "windows-link 0.1.3",
10901+ "windows-threading 0.1.0",
8066 ]10902 ]
8067 10903
8068 [[package]]10904 [[package]]
@@ -8071,9 +10907,9 @@ version = "0.3.2"
8071 source = "registry+https://github.com/rust-lang/crates.io-index"10907 source = "registry+https://github.com/rust-lang/crates.io-index"
8072 checksum = "e1d6f90251fe18a279739e78025bd6ddc52a7e22f921070ccdc67dde84c605cb"10908 checksum = "e1d6f90251fe18a279739e78025bd6ddc52a7e22f921070ccdc67dde84c605cb"
8073 dependencies = [10909 dependencies = [
8074- "windows-core",10910+ "windows-core 0.62.2",
8075- "windows-link",10911+ "windows-link 0.2.1",
8076- "windows-threading",10912+ "windows-threading 0.2.1",
8077 ]10913 ]
8078 10914
8079 [[package]]10915 [[package]]
@@ -8098,6 +10934,12 @@ dependencies = [
8098 "syn 2.0.119",10934 "syn 2.0.119",
8099 ]10935 ]
8100 10936
10937+[[package]]
10938+name = "windows-link"
10939+version = "0.1.3"
10940+source = "registry+https://github.com/rust-lang/crates.io-index"
10941+checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a"
10942+
8101 [[package]]10943 [[package]]
8102 name = "windows-link"10944 name = "windows-link"
8103 version = "0.2.1"10945 version = "0.2.1"
@@ -8106,23 +10948,42 @@ checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5"
8106 10948
8107 [[package]]10949 [[package]]
8108 name = "windows-numerics"10950 name = "windows-numerics"
8109-version = "0.3.1"10951+version = "0.2.0"
8110 source = "registry+https://github.com/rust-lang/crates.io-index"10952 source = "registry+https://github.com/rust-lang/crates.io-index"
8111-checksum = "6e2e40844ac143cdb44aead537bbf727de9b044e107a0f1220392177d15b0f26"10953+checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1"
8112 dependencies = [10954 dependencies = [
8113- "windows-core",10955+ "windows-core 0.61.2",
8114- "windows-link",10956+ "windows-link 0.1.3",
8115 ]10957 ]
8116 10958
8117 [[package]]10959 [[package]]
8118-name = "windows-registry"10960+name = "windows-numerics"
8119-version = "0.6.1"10961+version = "0.3.1"
10962+source = "registry+https://github.com/rust-lang/crates.io-index"
10963+checksum = "6e2e40844ac143cdb44aead537bbf727de9b044e107a0f1220392177d15b0f26"
10964+dependencies = [
10965+ "windows-core 0.62.2",
10966+ "windows-link 0.2.1",
10967+]
10968+
10969+[[package]]
10970+name = "windows-registry"
10971+version = "0.6.1"
8120 source = "registry+https://github.com/rust-lang/crates.io-index"10972 source = "registry+https://github.com/rust-lang/crates.io-index"
8121 checksum = "02752bf7fbdcce7f2a27a742f798510f3e5ad88dbe84871e5168e2120c3d5720"10973 checksum = "02752bf7fbdcce7f2a27a742f798510f3e5ad88dbe84871e5168e2120c3d5720"
8122 dependencies = [10974 dependencies = [
8123- "windows-link",10975+ "windows-link 0.2.1",
8124- "windows-result",10976+ "windows-result 0.4.1",
8125- "windows-strings",10977+ "windows-strings 0.5.1",
10978+]
10979+
10980+[[package]]
10981+name = "windows-result"
10982+version = "0.3.4"
10983+source = "registry+https://github.com/rust-lang/crates.io-index"
10984+checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6"
10985+dependencies = [
10986+ "windows-link 0.1.3",
8126 ]10987 ]
8127 10988
8128 [[package]]10989 [[package]]
@@ -8131,7 +10992,16 @@ version = "0.4.1"
8131 source = "registry+https://github.com/rust-lang/crates.io-index"10992 source = "registry+https://github.com/rust-lang/crates.io-index"
8132 checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5"10993 checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5"
8133 dependencies = [10994 dependencies = [
8134- "windows-link",10995+ "windows-link 0.2.1",
10996+]
10997+
10998+[[package]]
10999+name = "windows-strings"
11000+version = "0.4.2"
11001+source = "registry+https://github.com/rust-lang/crates.io-index"
11002+checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57"
11003+dependencies = [
11004+ "windows-link 0.1.3",
8135 ]11005 ]
8136 11006
8137 [[package]]11007 [[package]]
@@ -8140,7 +11010,7 @@ version = "0.5.1"
8140 source = "registry+https://github.com/rust-lang/crates.io-index"11010 source = "registry+https://github.com/rust-lang/crates.io-index"
8141 checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091"11011 checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091"
8142 dependencies = [11012 dependencies = [
8143- "windows-link",11013+ "windows-link 0.2.1",
8144 ]11014 ]
8145 11015
8146 [[package]]11016 [[package]]
@@ -8152,6 +11022,15 @@ dependencies = [
8152 "windows-targets 0.42.2",11022 "windows-targets 0.42.2",
8153 ]11023 ]
8154 11024
11025+[[package]]
11026+name = "windows-sys"
11027+version = "0.48.0"
11028+source = "registry+https://github.com/rust-lang/crates.io-index"
11029+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
11030+dependencies = [
11031+ "windows-targets 0.48.5",
11032+]
11033+
8155 [[package]]11034 [[package]]
8156 name = "windows-sys"11035 name = "windows-sys"
8157 version = "0.52.0"11036 version = "0.52.0"
@@ -8185,7 +11064,7 @@ version = "0.61.2"
8185 source = "registry+https://github.com/rust-lang/crates.io-index"11064 source = "registry+https://github.com/rust-lang/crates.io-index"
8186 checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc"11065 checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc"
8187 dependencies = [11066 dependencies = [
8188- "windows-link",11067+ "windows-link 0.2.1",
8189 ]11068 ]
8190 11069
8191 [[package]]11070 [[package]]
@@ -8203,6 +11082,21 @@ dependencies = [
8203 "windows_x86_64_msvc 0.42.2",11082 "windows_x86_64_msvc 0.42.2",
8204 ]11083 ]
8205 11084
11085+[[package]]
11086+name = "windows-targets"
11087+version = "0.48.5"
11088+source = "registry+https://github.com/rust-lang/crates.io-index"
11089+checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
11090+dependencies = [
11091+ "windows_aarch64_gnullvm 0.48.5",
11092+ "windows_aarch64_msvc 0.48.5",
11093+ "windows_i686_gnu 0.48.5",
11094+ "windows_i686_msvc 0.48.5",
11095+ "windows_x86_64_gnu 0.48.5",
11096+ "windows_x86_64_gnullvm 0.48.5",
11097+ "windows_x86_64_msvc 0.48.5",
11098+]
11099+
8206 [[package]]11100 [[package]]
8207 name = "windows-targets"11101 name = "windows-targets"
8208 version = "0.52.6"11102 version = "0.52.6"
@@ -8225,7 +11119,7 @@ version = "0.53.5"
8225 source = "registry+https://github.com/rust-lang/crates.io-index"11119 source = "registry+https://github.com/rust-lang/crates.io-index"
8226 checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3"11120 checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3"
8227 dependencies = [11121 dependencies = [
8228- "windows-link",11122+ "windows-link 0.2.1",
8229 "windows_aarch64_gnullvm 0.53.1",11123 "windows_aarch64_gnullvm 0.53.1",
8230 "windows_aarch64_msvc 0.53.1",11124 "windows_aarch64_msvc 0.53.1",
8231 "windows_i686_gnu 0.53.1",11125 "windows_i686_gnu 0.53.1",
@@ -8236,13 +11130,22 @@ dependencies = [
8236 "windows_x86_64_msvc 0.53.1",11130 "windows_x86_64_msvc 0.53.1",
8237 ]11131 ]
8238 11132
11133+[[package]]
11134+name = "windows-threading"
11135+version = "0.1.0"
11136+source = "registry+https://github.com/rust-lang/crates.io-index"
11137+checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6"
11138+dependencies = [
11139+ "windows-link 0.1.3",
11140+]
11141+
8239 [[package]]11142 [[package]]
8240 name = "windows-threading"11143 name = "windows-threading"
8241 version = "0.2.1"11144 version = "0.2.1"
8242 source = "registry+https://github.com/rust-lang/crates.io-index"11145 source = "registry+https://github.com/rust-lang/crates.io-index"
8243 checksum = "3949bd5b99cafdf1c7ca86b43ca564028dfe27d66958f2470940f73d86d75b37"11146 checksum = "3949bd5b99cafdf1c7ca86b43ca564028dfe27d66958f2470940f73d86d75b37"
8244 dependencies = [11147 dependencies = [
8245- "windows-link",11148+ "windows-link 0.2.1",
8246 ]11149 ]
8247 11150
8248 [[package]]11151 [[package]]
@@ -8251,6 +11154,12 @@ version = "0.42.2"
8251 source = "registry+https://github.com/rust-lang/crates.io-index"11154 source = "registry+https://github.com/rust-lang/crates.io-index"
8252 checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"11155 checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
8253 11156
11157+[[package]]
11158+name = "windows_aarch64_gnullvm"
11159+version = "0.48.5"
11160+source = "registry+https://github.com/rust-lang/crates.io-index"
11161+checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
11162+
8254 [[package]]11163 [[package]]
8255 name = "windows_aarch64_gnullvm"11164 name = "windows_aarch64_gnullvm"
8256 version = "0.52.6"11165 version = "0.52.6"
@@ -8269,6 +11178,12 @@ version = "0.42.2"
8269 source = "registry+https://github.com/rust-lang/crates.io-index"11178 source = "registry+https://github.com/rust-lang/crates.io-index"
8270 checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"11179 checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
8271 11180
11181+[[package]]
11182+name = "windows_aarch64_msvc"
11183+version = "0.48.5"
11184+source = "registry+https://github.com/rust-lang/crates.io-index"
11185+checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
11186+
8272 [[package]]11187 [[package]]
8273 name = "windows_aarch64_msvc"11188 name = "windows_aarch64_msvc"
8274 version = "0.52.6"11189 version = "0.52.6"
@@ -8287,6 +11202,12 @@ version = "0.42.2"
8287 source = "registry+https://github.com/rust-lang/crates.io-index"11202 source = "registry+https://github.com/rust-lang/crates.io-index"
8288 checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"11203 checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
8289 11204
11205+[[package]]
11206+name = "windows_i686_gnu"
11207+version = "0.48.5"
11208+source = "registry+https://github.com/rust-lang/crates.io-index"
11209+checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
11210+
8290 [[package]]11211 [[package]]
8291 name = "windows_i686_gnu"11212 name = "windows_i686_gnu"
8292 version = "0.52.6"11213 version = "0.52.6"
@@ -8317,6 +11238,12 @@ version = "0.42.2"
8317 source = "registry+https://github.com/rust-lang/crates.io-index"11238 source = "registry+https://github.com/rust-lang/crates.io-index"
8318 checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"11239 checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
8319 11240
11241+[[package]]
11242+name = "windows_i686_msvc"
11243+version = "0.48.5"
11244+source = "registry+https://github.com/rust-lang/crates.io-index"
11245+checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
11246+
8320 [[package]]11247 [[package]]
8321 name = "windows_i686_msvc"11248 name = "windows_i686_msvc"
8322 version = "0.52.6"11249 version = "0.52.6"
@@ -8335,6 +11262,12 @@ version = "0.42.2"
8335 source = "registry+https://github.com/rust-lang/crates.io-index"11262 source = "registry+https://github.com/rust-lang/crates.io-index"
8336 checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"11263 checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
8337 11264
11265+[[package]]
11266+name = "windows_x86_64_gnu"
11267+version = "0.48.5"
11268+source = "registry+https://github.com/rust-lang/crates.io-index"
11269+checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
11270+
8338 [[package]]11271 [[package]]
8339 name = "windows_x86_64_gnu"11272 name = "windows_x86_64_gnu"
8340 version = "0.52.6"11273 version = "0.52.6"
@@ -8353,6 +11286,12 @@ version = "0.42.2"
8353 source = "registry+https://github.com/rust-lang/crates.io-index"11286 source = "registry+https://github.com/rust-lang/crates.io-index"
8354 checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"11287 checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
8355 11288
11289+[[package]]
11290+name = "windows_x86_64_gnullvm"
11291+version = "0.48.5"
11292+source = "registry+https://github.com/rust-lang/crates.io-index"
11293+checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
11294+
8356 [[package]]11295 [[package]]
8357 name = "windows_x86_64_gnullvm"11296 name = "windows_x86_64_gnullvm"
8358 version = "0.52.6"11297 version = "0.52.6"
@@ -8371,6 +11310,12 @@ version = "0.42.2"
8371 source = "registry+https://github.com/rust-lang/crates.io-index"11310 source = "registry+https://github.com/rust-lang/crates.io-index"
8372 checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"11311 checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
8373 11312
11313+[[package]]
11314+name = "windows_x86_64_msvc"
11315+version = "0.48.5"
11316+source = "registry+https://github.com/rust-lang/crates.io-index"
11317+checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
11318+
8374 [[package]]11319 [[package]]
8375 name = "windows_x86_64_msvc"11320 name = "windows_x86_64_msvc"
8376 version = "0.52.6"11321 version = "0.52.6"
@@ -8401,24 +11346,24 @@ dependencies = [
8401 "core-foundation 0.9.4",11346 "core-foundation 0.9.4",
8402 "core-graphics",11347 "core-graphics",
8403 "cursor-icon",11348 "cursor-icon",
8404- "dpi",11349+ "dpi 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
8405 "js-sys",11350 "js-sys",
8406 "libc",11351 "libc",
8407- "memmap2",11352+ "memmap2 0.9.11",
8408 "ndk",11353 "ndk",
8409 "objc2 0.5.2",11354 "objc2 0.5.2",
8410 "objc2-app-kit 0.2.2",11355 "objc2-app-kit 0.2.2",
8411 "objc2-foundation 0.2.2",11356 "objc2-foundation 0.2.2",
8412- "objc2-ui-kit",11357+ "objc2-ui-kit 0.2.2",
8413 "orbclient",11358 "orbclient",
8414 "percent-encoding",11359 "percent-encoding",
8415 "pin-project",11360 "pin-project",
8416 "raw-window-handle",11361 "raw-window-handle",
8417 "redox_syscall 0.4.1",11362 "redox_syscall 0.4.1",
8418 "rustix 0.38.44",11363 "rustix 0.38.44",
8419- "sctk-adwaita",11364+ "sctk-adwaita 0.10.1",
8420 "smithay-client-toolkit 0.19.2",11365 "smithay-client-toolkit 0.19.2",
8421- "smol_str",11366+ "smol_str 0.2.2",
8422 "tracing",11367 "tracing",
8423 "unicode-segmentation",11368 "unicode-segmentation",
8424 "wasm-bindgen",11369 "wasm-bindgen",
@@ -8435,6 +11380,221 @@ dependencies = [
8435 "xkbcommon-dl",11380 "xkbcommon-dl",
8436 ]11381 ]
8437 11382
11383+[[package]]
11384+name = "winit"
11385+version = "0.31.0-beta.2"
11386+source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#71ce08c043814514a8fd92d9d0599f115ae854e8"
11387+dependencies = [
11388+ "bitflags 2.13.1",
11389+ "cfg_aliases 0.2.2",
11390+ "cursor-icon",
11391+ "dpi 0.1.2 (git+https://github.com/pop-os/winit.git?tag=cosmic-0.14)",
11392+ "libc",
11393+ "raw-window-handle",
11394+ "rustix 1.1.4",
11395+ "smol_str 0.3.6",
11396+ "tracing",
11397+ "winit-android",
11398+ "winit-appkit",
11399+ "winit-common",
11400+ "winit-core",
11401+ "winit-orbital",
11402+ "winit-uikit",
11403+ "winit-wayland",
11404+ "winit-web",
11405+ "winit-win32",
11406+ "winit-x11",
11407+]
11408+
11409+[[package]]
11410+name = "winit-android"
11411+version = "0.31.0-beta.2"
11412+source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#71ce08c043814514a8fd92d9d0599f115ae854e8"
11413+dependencies = [
11414+ "android-activity",
11415+ "bitflags 2.13.1",
11416+ "dpi 0.1.2 (git+https://github.com/pop-os/winit.git?tag=cosmic-0.14)",
11417+ "ndk",
11418+ "raw-window-handle",
11419+ "smol_str 0.3.6",
11420+ "tracing",
11421+ "winit-core",
11422+]
11423+
11424+[[package]]
11425+name = "winit-appkit"
11426+version = "0.31.0-beta.2"
11427+source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#71ce08c043814514a8fd92d9d0599f115ae854e8"
11428+dependencies = [
11429+ "bitflags 2.13.1",
11430+ "block2 0.6.2",
11431+ "dispatch2",
11432+ "dpi 0.1.2 (git+https://github.com/pop-os/winit.git?tag=cosmic-0.14)",
11433+ "objc2 0.6.4",
11434+ "objc2-app-kit 0.3.2",
11435+ "objc2-core-foundation",
11436+ "objc2-core-graphics",
11437+ "objc2-core-video",
11438+ "objc2-foundation 0.3.2",
11439+ "raw-window-handle",
11440+ "smol_str 0.3.6",
11441+ "tracing",
11442+ "winit-common",
11443+ "winit-core",
11444+]
11445+
11446+[[package]]
11447+name = "winit-common"
11448+version = "0.31.0-beta.2"
11449+source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#71ce08c043814514a8fd92d9d0599f115ae854e8"
11450+dependencies = [
11451+ "memmap2 0.9.11",
11452+ "objc2 0.6.4",
11453+ "objc2-core-foundation",
11454+ "smol_str 0.3.6",
11455+ "tracing",
11456+ "winit-core",
11457+ "x11-dl",
11458+ "xkbcommon-dl",
11459+]
11460+
11461+[[package]]
11462+name = "winit-core"
11463+version = "0.31.0-beta.2"
11464+source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#71ce08c043814514a8fd92d9d0599f115ae854e8"
11465+dependencies = [
11466+ "bitflags 2.13.1",
11467+ "cursor-icon",
11468+ "dpi 0.1.2 (git+https://github.com/pop-os/winit.git?tag=cosmic-0.14)",
11469+ "keyboard-types",
11470+ "raw-window-handle",
11471+ "smol_str 0.3.6",
11472+ "web-time",
11473+]
11474+
11475+[[package]]
11476+name = "winit-orbital"
11477+version = "0.31.0-beta.2"
11478+source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#71ce08c043814514a8fd92d9d0599f115ae854e8"
11479+dependencies = [
11480+ "bitflags 2.13.1",
11481+ "dpi 0.1.2 (git+https://github.com/pop-os/winit.git?tag=cosmic-0.14)",
11482+ "libredox",
11483+ "orbclient",
11484+ "raw-window-handle",
11485+ "redox_event",
11486+ "smol_str 0.3.6",
11487+ "tracing",
11488+ "winit-core",
11489+]
11490+
11491+[[package]]
11492+name = "winit-uikit"
11493+version = "0.31.0-beta.2"
11494+source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#71ce08c043814514a8fd92d9d0599f115ae854e8"
11495+dependencies = [
11496+ "bitflags 2.13.1",
11497+ "block2 0.6.2",
11498+ "dispatch2",
11499+ "dpi 0.1.2 (git+https://github.com/pop-os/winit.git?tag=cosmic-0.14)",
11500+ "objc2 0.6.4",
11501+ "objc2-core-foundation",
11502+ "objc2-foundation 0.3.2",
11503+ "objc2-ui-kit 0.3.2",
11504+ "raw-window-handle",
11505+ "smol_str 0.3.6",
11506+ "tracing",
11507+ "winit-common",
11508+ "winit-core",
11509+]
11510+
11511+[[package]]
11512+name = "winit-wayland"
11513+version = "0.31.0-beta.2"
11514+source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#71ce08c043814514a8fd92d9d0599f115ae854e8"
11515+dependencies = [
11516+ "ahash",
11517+ "bitflags 2.13.1",
11518+ "calloop 0.14.4",
11519+ "cursor-icon",
11520+ "dpi 0.1.2 (git+https://github.com/pop-os/winit.git?tag=cosmic-0.14)",
11521+ "libc",
11522+ "memmap2 0.9.11",
11523+ "raw-window-handle",
11524+ "rustix 1.1.4",
11525+ "sctk-adwaita 0.11.1",
11526+ "smithay-client-toolkit 0.20.0",
11527+ "smol_str 0.3.6",
11528+ "tracing",
11529+ "wayland-backend",
11530+ "wayland-client",
11531+ "wayland-protocols",
11532+ "wayland-protocols-plasma",
11533+ "winit-common",
11534+ "winit-core",
11535+]
11536+
11537+[[package]]
11538+name = "winit-web"
11539+version = "0.31.0-beta.2"
11540+source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#71ce08c043814514a8fd92d9d0599f115ae854e8"
11541+dependencies = [
11542+ "atomic-waker",
11543+ "bitflags 2.13.1",
11544+ "concurrent-queue",
11545+ "cursor-icon",
11546+ "dpi 0.1.2 (git+https://github.com/pop-os/winit.git?tag=cosmic-0.14)",
11547+ "js-sys",
11548+ "pin-project",
11549+ "raw-window-handle",
11550+ "smol_str 0.3.6",
11551+ "tracing",
11552+ "wasm-bindgen",
11553+ "wasm-bindgen-futures",
11554+ "web-sys",
11555+ "web-time",
11556+ "winit-core",
11557+]
11558+
11559+[[package]]
11560+name = "winit-win32"
11561+version = "0.31.0-beta.2"
11562+source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#71ce08c043814514a8fd92d9d0599f115ae854e8"
11563+dependencies = [
11564+ "bitflags 2.13.1",
11565+ "cursor-icon",
11566+ "dpi 0.1.2 (git+https://github.com/pop-os/winit.git?tag=cosmic-0.14)",
11567+ "raw-window-handle",
11568+ "smol_str 0.3.6",
11569+ "tracing",
11570+ "unicode-segmentation",
11571+ "windows-sys 0.59.0",
11572+ "winit-core",
11573+]
11574+
11575+[[package]]
11576+name = "winit-x11"
11577+version = "0.31.0-beta.2"
11578+source = "git+https://github.com/pop-os/winit.git?tag=cosmic-0.14#71ce08c043814514a8fd92d9d0599f115ae854e8"
11579+dependencies = [
11580+ "bitflags 2.13.1",
11581+ "bytemuck",
11582+ "calloop 0.14.4",
11583+ "cursor-icon",
11584+ "dpi 0.1.2 (git+https://github.com/pop-os/winit.git?tag=cosmic-0.14)",
11585+ "libc",
11586+ "percent-encoding",
11587+ "raw-window-handle",
11588+ "rustix 1.1.4",
11589+ "smol_str 0.3.6",
11590+ "tracing",
11591+ "winit-common",
11592+ "winit-core",
11593+ "x11-dl",
11594+ "x11rb",
11595+ "xkbcommon-dl",
11596+]
11597+
8438 [[package]]11598 [[package]]
8439 name = "winnow"11599 name = "winnow"
8440 version = "1.0.4"11600 version = "1.0.4"
@@ -8461,8 +11621,8 @@ dependencies = [
8461 "log",11621 "log",
8462 "serde",11622 "serde",
8463 "thiserror 2.0.19",11623 "thiserror 2.0.19",
8464- "windows",11624+ "windows 0.62.2",
8465- "windows-core",11625+ "windows-core 0.62.2",
8466 ]11626 ]
8467 11627
8468 [[package]]11628 [[package]]
@@ -8514,6 +11674,7 @@ dependencies = [
8514 "once_cell",11674 "once_cell",
8515 "rustix 1.1.4",11675 "rustix 1.1.4",
8516 "x11rb-protocol",11676 "x11rb-protocol",
11677+ "xcursor",
8517 ]11678 ]
8518 11679
8519 [[package]]11680 [[package]]
@@ -8546,6 +11707,34 @@ version = "0.3.11"
8546 source = "registry+https://github.com/rust-lang/crates.io-index"11707 source = "registry+https://github.com/rust-lang/crates.io-index"
8547 checksum = "163b33ed8786455e2fa5d72f554057ce3f3182425434f756cd39c99839d88e23"11708 checksum = "163b33ed8786455e2fa5d72f554057ce3f3182425434f756cd39c99839d88e23"
8548 11709
11710+[[package]]
11711+name = "xdg"
11712+version = "3.0.0"
11713+source = "registry+https://github.com/rust-lang/crates.io-index"
11714+checksum = "2fb433233f2df9344722454bc7e96465c9d03bff9d77c248f9e7523fe79585b5"
11715+
11716+[[package]]
11717+name = "xkbcommon"
11718+version = "0.7.0"
11719+source = "registry+https://github.com/rust-lang/crates.io-index"
11720+checksum = "13867d259930edc7091a6c41b4ce6eee464328c6ff9659b7e4c668ca20d4c91e"
11721+dependencies = [
11722+ "libc",
11723+ "memmap2 0.8.0",
11724+ "xkeysym",
11725+]
11726+
11727+[[package]]
11728+name = "xkbcommon"
11729+version = "0.8.0"
11730+source = "registry+https://github.com/rust-lang/crates.io-index"
11731+checksum = "8d66ca9352cbd4eecbbc40871d8a11b4ac8107cfc528a6e14d7c19c69d0e1ac9"
11732+dependencies = [
11733+ "libc",
11734+ "memmap2 0.9.11",
11735+ "xkeysym",
11736+]
11737+
8549 [[package]]11738 [[package]]
8550 name = "xkbcommon-dl"11739 name = "xkbcommon-dl"
8551 version = "0.4.2"11740 version = "0.4.2"
@@ -8564,6 +11753,9 @@ name = "xkeysym"
8564 version = "0.2.1"11753 version = "0.2.1"
8565 source = "registry+https://github.com/rust-lang/crates.io-index"11754 source = "registry+https://github.com/rust-lang/crates.io-index"
8566 checksum = "b9cc00251562a284751c9973bace760d86c0276c471b4be569fe6b068ee97a56"11755 checksum = "b9cc00251562a284751c9973bace760d86c0276c471b4be569fe6b068ee97a56"
11756+dependencies = [
11757+ "bytemuck",
11758+]
8567 11759
8568 [[package]]11760 [[package]]
8569 name = "xml-rs"11761 name = "xml-rs"
@@ -8580,16 +11772,34 @@ dependencies = [
8580 "xml-rs",11772 "xml-rs",
8581 ]11773 ]
8582 11774
11775+[[package]]
11776+name = "xmlwriter"
11777+version = "0.1.0"
11778+source = "registry+https://github.com/rust-lang/crates.io-index"
11779+checksum = "ec7a2a501ed189703dba8b08142f057e887dfc4b2cc4db2d343ac6376ba3e0b9"
11780+
11781+[[package]]
11782+name = "yansi"
11783+version = "1.0.1"
11784+source = "registry+https://github.com/rust-lang/crates.io-index"
11785+checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049"
11786+
8583 [[package]]11787 [[package]]
8584 name = "yasna"11788 name = "yasna"
8585 version = "0.6.0"11789 version = "0.6.0"
8586 source = "registry+https://github.com/rust-lang/crates.io-index"11790 source = "registry+https://github.com/rust-lang/crates.io-index"
8587 checksum = "b5f6765e852b9b4dc8e2a76843e4d64d1cea8e79bcde0b6901aea8e7c7f08282"11791 checksum = "b5f6765e852b9b4dc8e2a76843e4d64d1cea8e79bcde0b6901aea8e7c7f08282"
8588 dependencies = [11792 dependencies = [
8589- "bit-vec",11793+ "bit-vec 0.9.1",
8590 "time",11794 "time",
8591 ]11795 ]
8592 11796
11797+[[package]]
11798+name = "yazi"
11799+version = "0.2.1"
11800+source = "registry+https://github.com/rust-lang/crates.io-index"
11801+checksum = "e01738255b5a16e78bbb83e7fbba0a1e7dd506905cfc53f4622d89015a03fbb5"
11802+
8593 [[package]]11803 [[package]]
8594 name = "yoke"11804 name = "yoke"
8595 version = "0.8.3"11805 version = "0.8.3"
@@ -8622,6 +11832,119 @@ dependencies = [
8622 "num-traits",11832 "num-traits",
8623 ]11833 ]
8624 11834
11835+[[package]]
11836+name = "zbus"
11837+version = "5.19.0"
11838+source = "registry+https://github.com/rust-lang/crates.io-index"
11839+checksum = "5db4be7c075cb421e4b7ee645541604239bd243ba7c357511f4ff3a74b555907"
11840+dependencies = [
11841+ "async-broadcast",
11842+ "async-executor",
11843+ "async-io",
11844+ "async-lock",
11845+ "async-process",
11846+ "async-recursion",
11847+ "async-task",
11848+ "async-trait",
11849+ "blocking",
11850+ "enumflags2",
11851+ "event-listener",
11852+ "futures-core",
11853+ "futures-lite",
11854+ "hex",
11855+ "libc",
11856+ "ordered-stream",
11857+ "rustix 1.1.4",
11858+ "serde",
11859+ "serde_repr",
11860+ "tokio",
11861+ "tracing",
11862+ "uds_windows",
11863+ "uuid",
11864+ "windows-sys 0.61.2",
11865+ "winnow",
11866+ "zbus_macros",
11867+ "zbus_names",
11868+ "zvariant",
11869+]
11870+
11871+[[package]]
11872+name = "zbus-lockstep"
11873+version = "0.5.2"
11874+source = "registry+https://github.com/rust-lang/crates.io-index"
11875+checksum = "6998de05217a084b7578728a9443d04ea4cd80f2a0839b8d78770b76ccd45863"
11876+dependencies = [
11877+ "zbus_xml",
11878+ "zvariant",
11879+]
11880+
11881+[[package]]
11882+name = "zbus-lockstep-macros"
11883+version = "0.5.2"
11884+source = "registry+https://github.com/rust-lang/crates.io-index"
11885+checksum = "10da05367f3a7b7553c8cdf8fa91aee6b64afebe32b51c95177957efc47ca3a0"
11886+dependencies = [
11887+ "proc-macro2",
11888+ "quote",
11889+ "syn 2.0.119",
11890+ "zbus-lockstep",
11891+ "zbus_xml",
11892+ "zvariant",
11893+]
11894+
11895+[[package]]
11896+name = "zbus_macros"
11897+version = "5.19.0"
11898+source = "registry+https://github.com/rust-lang/crates.io-index"
11899+checksum = "2990635d09ade6df1868f72f8cac69a876a90981e8bd3c40b1be413f8dc88f40"
11900+dependencies = [
11901+ "proc-macro-crate",
11902+ "proc-macro2",
11903+ "quote",
11904+ "syn 3.0.3",
11905+ "zbus_names",
11906+ "zvariant",
11907+ "zvariant_utils",
11908+]
11909+
11910+[[package]]
11911+name = "zbus_names"
11912+version = "4.3.4"
11913+source = "registry+https://github.com/rust-lang/crates.io-index"
11914+checksum = "d8bf88b4a3ff53e883001e0e0115b297a9d53c31b9c1edd2bfdd853e3428624e"
11915+dependencies = [
11916+ "serde",
11917+ "winnow",
11918+ "zvariant",
11919+]
11920+
11921+[[package]]
11922+name = "zbus_xml"
11923+version = "5.2.1"
11924+source = "registry+https://github.com/rust-lang/crates.io-index"
11925+checksum = "d1586c021a01ca0a9216dcd874e546382e156a5cbab5fab6cb5f10087e22682a"
11926+dependencies = [
11927+ "serde",
11928+ "winnow",
11929+ "zbus_names",
11930+ "zvariant",
11931+]
11932+
11933+[[package]]
11934+name = "zcheapstr"
11935+version = "1.1.0"
11936+source = "registry+https://github.com/rust-lang/crates.io-index"
11937+checksum = "d1afec51604565183aeb5c54c20aeab286120d4e4460f7f76e3e8bb8c0d99473"
11938+dependencies = [
11939+ "serde",
11940+]
11941+
11942+[[package]]
11943+name = "zeno"
11944+version = "0.3.3"
11945+source = "registry+https://github.com/rust-lang/crates.io-index"
11946+checksum = "6df3dc4292935e51816d896edcd52aa30bc297907c26167fec31e2b0c6a32524"
11947+
8625 [[package]]11948 [[package]]
8626 name = "zerocopy"11949 name = "zerocopy"
8627 version = "0.8.55"11950 version = "0.8.55"
@@ -8700,6 +12023,7 @@ version = "0.11.6"
8700 source = "registry+https://github.com/rust-lang/crates.io-index"12023 source = "registry+https://github.com/rust-lang/crates.io-index"
8701 checksum = "90f911cbc359ab6af17377d242225f4d75119aec87ea711a880987b18cd7b239"12024 checksum = "90f911cbc359ab6af17377d242225f4d75119aec87ea711a880987b18cd7b239"
8702 dependencies = [12025 dependencies = [
12026+ "serde",
8703 "yoke",12027 "yoke",
8704 "zerofrom",12028 "zerofrom",
8705 "zerovec-derive",12029 "zerovec-derive",
@@ -8757,17 +12081,74 @@ dependencies = [
8757 "simd-adler32",12081 "simd-adler32",
8758 ]12082 ]
8759 12083
12084+[[package]]
12085+name = "zune-core"
12086+version = "0.4.12"
12087+source = "registry+https://github.com/rust-lang/crates.io-index"
12088+checksum = "3f423a2c17029964870cfaabb1f13dfab7d092a62a29a89264f4d36990ca414a"
12089+
8760 [[package]]12090 [[package]]
8761 name = "zune-core"12091 name = "zune-core"
8762 version = "0.5.1"12092 version = "0.5.1"
8763 source = "registry+https://github.com/rust-lang/crates.io-index"12093 source = "registry+https://github.com/rust-lang/crates.io-index"
8764 checksum = "cb8a0807f7c01457d0379ba880ba6322660448ddebc890ce29bb64da71fb40f9"12094 checksum = "cb8a0807f7c01457d0379ba880ba6322660448ddebc890ce29bb64da71fb40f9"
8765 12095
12096+[[package]]
12097+name = "zune-jpeg"
12098+version = "0.4.21"
12099+source = "registry+https://github.com/rust-lang/crates.io-index"
12100+checksum = "29ce2c8a9384ad323cf564b67da86e21d3cfdff87908bc1223ed5c99bc792713"
12101+dependencies = [
12102+ "zune-core 0.4.12",
12103+]
12104+
8766 [[package]]12105 [[package]]
8767 name = "zune-jpeg"12106 name = "zune-jpeg"
8768 version = "0.5.15"12107 version = "0.5.15"
8769 source = "registry+https://github.com/rust-lang/crates.io-index"12108 source = "registry+https://github.com/rust-lang/crates.io-index"
8770 checksum = "27bc9d5b815bc103f142aa054f561d9187d191692ec7c2d1e2b4737f8dbd7296"12109 checksum = "27bc9d5b815bc103f142aa054f561d9187d191692ec7c2d1e2b4737f8dbd7296"
8771 dependencies = [12110 dependencies = [
8772- "zune-core",12111+ "zune-core 0.5.1",
12112+]
12113+
12114+[[package]]
12115+name = "zvariant"
12116+version = "5.15.0"
12117+source = "registry+https://github.com/rust-lang/crates.io-index"
12118+checksum = "c1d34c27cc6cdd1f458427519dd6b8612f7b7e3f7b9a0b2355d041dda9869147"
12119+dependencies = [
12120+ "endi",
12121+ "enumflags2",
12122+ "serde",
12123+ "url",
12124+ "winnow",
12125+ "zcheapstr",
12126+ "zvariant_derive",
12127+ "zvariant_utils",
12128+]
12129+
12130+[[package]]
12131+name = "zvariant_derive"
12132+version = "5.15.0"
12133+source = "registry+https://github.com/rust-lang/crates.io-index"
12134+checksum = "864155e69b4352db0c7f374917bf45d1e0c8d17659c8b3dbf9795f3673f8c497"
12135+dependencies = [
12136+ "proc-macro-crate",
12137+ "proc-macro2",
12138+ "quote",
12139+ "syn 3.0.3",
12140+ "zvariant_utils",
12141+]
12142+
12143+[[package]]
12144+name = "zvariant_utils"
12145+version = "4.2.0"
12146+source = "registry+https://github.com/rust-lang/crates.io-index"
12147+checksum = "bad0294361a320b694a328460dc73add56c306150f5cb6bfafc44446120008a3"
12148+dependencies = [
12149+ "proc-macro2",
12150+ "quote",
12151+ "serde",
12152+ "syn 3.0.3",
12153+ "winnow",
8773 ]12154 ]
modified Cargo.toml +1 -0
@@ -20,6 +20,7 @@
2020 resolver = "2"
2121 members = [
2222 "crates/jolt-abi",
23+ "crates/jolt-cosmic",
2324 "crates/jolt-moq",
2425 "crates/jolt-tui",
2526 "crates/jolt-vidya",
@@ -20,6 +20,7 @@
20 resolver = "2"20 resolver = "2"
21 members = [21 members = [
22 "crates/jolt-abi",22 "crates/jolt-abi",
23+ "crates/jolt-cosmic",
23 "crates/jolt-moq",24 "crates/jolt-moq",
24 "crates/jolt-tui",25 "crates/jolt-tui",
25 "crates/jolt-vidya",26 "crates/jolt-vidya",
modified README.md +2 -0
@@ -16,6 +16,8 @@ crates/vidya-core the egui semantic layer behind it (theme, widget
1616 crates/jolt-tui the same tree ABI, painted into a terminal → libjolttui.so
1717 crates/jolt-moq freeq's AV media plane → libjoltmoq.so
1818 glimmer-backends/glimmer-vidya the jolt side of libvidya: glimmer's backend
19+crates/jolt-cosmic the same tree ABI, painted by libcosmic → libjoltcosmic.so
20+glimmer-backends/glimmer-cosmic glimmer's backend over libjoltcosmic (a spike)
1921 jvui no .so at all: dvui's shape, in jolt, on SDL3
2022 glimmer-backends/glimmer-jvui glimmer's backend over jvui
2123 wayland-bar-compositor no .so either: a wlroots compositor in jolt, for panels on X11
@@ -16,6 +16,8 @@ crates/vidya-core the egui semantic layer behind it (theme, widget
16 crates/jolt-tui the same tree ABI, painted into a terminal → libjolttui.so16 crates/jolt-tui the same tree ABI, painted into a terminal → libjolttui.so
17 crates/jolt-moq freeq's AV media plane → libjoltmoq.so17 crates/jolt-moq freeq's AV media plane → libjoltmoq.so
18 glimmer-backends/glimmer-vidya the jolt side of libvidya: glimmer's backend18 glimmer-backends/glimmer-vidya the jolt side of libvidya: glimmer's backend
19+crates/jolt-cosmic the same tree ABI, painted by libcosmic → libjoltcosmic.so
20+glimmer-backends/glimmer-cosmic glimmer's backend over libjoltcosmic (a spike)
19 jvui no .so at all: dvui's shape, in jolt, on SDL321 jvui no .so at all: dvui's shape, in jolt, on SDL3
20 glimmer-backends/glimmer-jvui glimmer's backend over jvui22 glimmer-backends/glimmer-jvui glimmer's backend over jvui
21 wayland-bar-compositor no .so either: a wlroots compositor in jolt, for panels on X1123 wayland-bar-compositor no .so either: a wlroots compositor in jolt, for panels on X11
added crates/jolt-cosmic/Cargo.toml +30 -0
new file mode 100644
@@ -0,0 +1,30 @@
1+[package]
2+name = "jolt-cosmic"
3+version.workspace = true
4+edition.workspace = true
5+license.workspace = true
6+description = "glimmer's libcosmic backend behind a C ABI"
7+publish = false
8+
9+# Produces `libjoltcosmic.so`. The retained-tree ABI `libvidya` and
10+# `libjolttui` export, painted by libcosmic — so the jolt side picks a backend
11+# by naming a different shared object.
12+#
13+# Its own crate for the reason the workspace gives: libcosmic brings iced,
14+# wgpu, cosmic-text and zbus with it, and nobody who asked for a terminal
15+# should link any of that. It is also MPL-2.0 where the rest of this repo is
16+# MIT; linking it dynamically, as a separate object, keeps that boundary clean.
17+[lib]
18+name = "joltcosmic"
19+crate-type = ["cdylib", "rlib"]
20+
21+[dependencies]
22+jolt-abi.workspace = true
23+log.workspace = true
24+
25+# Pinned to the rev the COSMIC applet in wayland-bar already builds against.
26+[dependencies.libcosmic]
27+git = "https://github.com/pop-os/libcosmic"
28+rev = "a401af8b1c54a8abd393b8c5b7c8809402f83850"
29+default-features = false
30+features = ["winit", "tokio", "wgpu", "x11", "wayland"]
new file mode 100644
@@ -0,0 +1,30 @@
1+[package]
2+name = "jolt-cosmic"
3+version.workspace = true
4+edition.workspace = true
5+license.workspace = true
6+description = "glimmer's libcosmic backend behind a C ABI"
7+publish = false
8+
9+# Produces `libjoltcosmic.so`. The retained-tree ABI `libvidya` and
10+# `libjolttui` export, painted by libcosmic — so the jolt side picks a backend
11+# by naming a different shared object.
12+#
13+# Its own crate for the reason the workspace gives: libcosmic brings iced,
14+# wgpu, cosmic-text and zbus with it, and nobody who asked for a terminal
15+# should link any of that. It is also MPL-2.0 where the rest of this repo is
16+# MIT; linking it dynamically, as a separate object, keeps that boundary clean.
17+[lib]
18+name = "joltcosmic"
19+crate-type = ["cdylib", "rlib"]
20+
21+[dependencies]
22+jolt-abi.workspace = true
23+log.workspace = true
24+
25+# Pinned to the rev the COSMIC applet in wayland-bar already builds against.
26+[dependencies.libcosmic]
27+git = "https://github.com/pop-os/libcosmic"
28+rev = "a401af8b1c54a8abd393b8c5b7c8809402f83850"
29+default-features = false
30+features = ["winit", "tokio", "wgpu", "x11", "wayland"]
added crates/jolt-cosmic/src/lib.rs +613 -0
new file mode 100644
@@ -0,0 +1,613 @@
1+//! glimmer's libcosmic backend: the retained-tree ABI, with iced reading it.
2+//!
3+//! The edit half is libvidya's — integer node handles, string-keyed props,
4+//! events queued and polled — so `glimmer-cosmic` is `glimmer-vidya` pointed
5+//! at a different object. What changes is who owns the loop.
6+//!
7+//! egui lets its caller drive frames; iced does not. `cosmic::app::run` takes
8+//! the main thread (winit insists) and returns when the window closes. So the
9+//! arrangement is inverted:
10+//!
11+//! * `cosmic_run` blocks the process main thread inside libcosmic.
12+//! * jolt reconciles on a worker thread, mutating the arena under a mutex.
13+//! Nothing it does is visible until `cosmic_tree_commit`, which snapshots the
14+//! tree and wakes iced — so a reconcile half-way through a patch is never
15+//! painted, and a commit with no edits behind it costs nothing.
16+//! * Interactions are queued, and `cosmic_wait` blocks the worker until there
17+//! is one (or `cosmic_wake`, or a timeout), so an idle window burns no CPU on
18+//! either side.
19+//!
20+//! Every call except `cosmic_run` may come from any thread.
21+
22+mod tree;
23+
24+pub use tree::{Node, Prop, Tree};
25+
26+use std::collections::VecDeque;
27+use std::ffi::{c_char, c_int};
28+use std::sync::atomic::{AtomicBool, Ordering::SeqCst};
29+use std::sync::{Arc, Condvar, LazyLock, Mutex, MutexGuard};
30+use std::time::Duration;
31+
32+use cosmic::app::{Core, Task};
33+use cosmic::iced::futures::channel::mpsc;
34+use cosmic::iced::futures::{Stream, StreamExt};
35+use cosmic::iced::{Alignment, Length, Subscription};
36+use cosmic::widget::{self, Column, Row};
37+use cosmic::{ApplicationExt, Element};
38+use jolt_abi::{borrowed, empty_str, guard, Scratch};
39+
40+fn lock<T>(m: &Mutex<T>) -> MutexGuard<'_, T> {
41+ m.lock().unwrap_or_else(|poisoned| poisoned.into_inner())
42+}
43+
44+// --- the arena ---------------------------------------------------------------
45+
46+struct Edits {
47+ tree: Tree,
48+ /// Set by every mutation, cleared by a commit that published it.
49+ dirty: bool,
50+}
51+
52+static EDITS: LazyLock<Mutex<Edits>> = LazyLock::new(|| {
53+ Mutex::new(Edits {
54+ tree: Tree::default(),
55+ dirty: false,
56+ })
57+});
58+
59+/// What `view` paints: the tree as of the last commit.
60+static COMMITTED: LazyLock<Mutex<Arc<Tree>>> = LazyLock::new(Default::default);
61+
62+fn edit<R>(f: impl FnOnce(&mut Tree) -> R) -> R {
63+ let mut e = lock(&EDITS);
64+ e.dirty = true;
65+ f(&mut e.tree)
66+}
67+
68+fn read<R>(f: impl FnOnce(&Tree) -> R) -> R {
69+ f(&lock(&EDITS).tree)
70+}
71+
72+// --- events, towards jolt ----------------------------------------------------
73+
74+struct Event {
75+ node: i32,
76+ name: &'static str,
77+ text: String,
78+ num: f64,
79+}
80+
81+struct Inbox {
82+ queue: VecDeque<Event>,
83+ current: Option<Event>,
84+ woken: bool,
85+}
86+
87+static INBOX: Mutex<Inbox> = Mutex::new(Inbox {
88+ queue: VecDeque::new(),
89+ current: None,
90+ woken: false,
91+});
92+static BELL: Condvar = Condvar::new();
93+
94+fn post(node: i32, name: &'static str, text: String, num: f64) {
95+ lock(&INBOX).queue.push_back(Event {
96+ node,
97+ name,
98+ text,
99+ num,
100+ });
101+ BELL.notify_all();
102+}
103+
104+// --- wakes, towards iced -----------------------------------------------------
105+
106+enum Wake {
107+ Tree,
108+ Quit,
109+}
110+
111+static TO_APP: Mutex<Option<mpsc::UnboundedSender<Wake>>> = Mutex::new(None);
112+static QUIT_ASKED: AtomicBool = AtomicBool::new(false);
113+static RAN: AtomicBool = AtomicBool::new(false);
114+static CLOSED: AtomicBool = AtomicBool::new(false);
115+
116+fn tell_app(wake: Wake) {
117+ if let Some(tx) = lock(&TO_APP).as_ref() {
118+ let _ = tx.unbounded_send(wake);
119+ }
120+}
121+
122+/// The subscription's stream. It opens with a `Tree` wake so a commit made
123+/// between `init` and the subscription starting is not missed, and repeats a
124+/// quit asked for before there was anyone to tell.
125+fn wakes() -> impl Stream<Item = Message> {
126+ let (tx, rx) = mpsc::unbounded();
127+ let _ = tx.unbounded_send(Wake::Tree);
128+ if QUIT_ASKED.load(SeqCst) {
129+ let _ = tx.unbounded_send(Wake::Quit);
130+ }
131+ *lock(&TO_APP) = Some(tx);
132+ rx.map(|wake| match wake {
133+ Wake::Tree => Message::Tree,
134+ Wake::Quit => Message::Quit,
135+ })
136+}
137+
138+// --- the app -----------------------------------------------------------------
139+
140+struct App {
141+ core: Core,
142+ tree: Arc<Tree>,
143+}
144+
145+#[derive(Clone, Debug)]
146+enum Message {
147+ Tree,
148+ Quit,
149+ Click(i32),
150+ Toggled(i32, bool),
151+ Change(i32, String),
152+ Activate(i32),
153+}
154+
155+impl App {
156+ /// A widget does not own its value: the new state goes into the arena and
157+ /// into what is painted, so a caller that ignores the event still sees a
158+ /// working control, and its next render is what settles it.
159+ fn write_back(&mut self, node: i32, key: &str, value: Prop) {
160+ edit(|t| t.set(node, key, value.clone()));
161+ Arc::make_mut(&mut self.tree).set(node, key, value);
162+ }
163+}
164+
165+impl cosmic::Application for App {
166+ type Executor = cosmic::executor::Default;
167+ type Flags = String;
168+ type Message = Message;
169+ const APP_ID: &'static str = "dev.jolt.Glimmer";
170+
171+ fn core(&self) -> &Core {
172+ &self.core
173+ }
174+
175+ fn core_mut(&mut self) -> &mut Core {
176+ &mut self.core
177+ }
178+
179+ fn init(core: Core, title: String) -> (Self, Task<Message>) {
180+ let mut app = App {
181+ core,
182+ tree: lock(&COMMITTED).clone(),
183+ };
184+ // libcosmic's `wayland` feature brings `multi-window` with it, which
185+ // makes a window title a per-window thing.
186+ app.set_header_title(title.clone());
187+ let task = match app.core.main_window_id() {
188+ Some(id) => app.set_window_title(title, id),
189+ None => Task::none(),
190+ };
191+ (app, task)
192+ }
193+
194+ fn subscription(&self) -> Subscription<Message> {
195+ Subscription::run(wakes)
196+ }
197+
198+ fn update(&mut self, message: Message) -> Task<Message> {
199+ match message {
200+ Message::Tree => self.tree = lock(&COMMITTED).clone(),
201+ Message::Quit => return cosmic::iced::exit(),
202+ Message::Click(node) => post(node, "click", String::new(), 0.0),
203+ Message::Toggled(node, on) => {
204+ self.write_back(node, "active", Prop::Bool(on));
205+ post(node, "toggled", String::new(), f64::from(u8::from(on)));
206+ }
207+ Message::Change(node, text) => {
208+ self.write_back(node, "text", Prop::Str(text.clone()));
209+ post(node, "change", text, 0.0);
210+ }
211+ Message::Activate(node) => post(node, "activate", String::new(), 0.0),
212+ }
213+ Task::none()
214+ }
215+
216+ fn view(&self) -> Element<'_, Message> {
217+ let tree = &*self.tree;
218+ element(tree, tree.root_id(), true)
219+ }
220+}
221+
222+/// One node and everything under it, as widgets. `enabled` is inherited: an
223+/// insensitive container takes its whole subtree out of interaction.
224+fn element(t: &Tree, id: i32, enabled: bool) -> Element<'_, Message> {
225+ let Some(n) = t.get(id) else {
226+ return Column::new().into();
227+ };
228+ let enabled = enabled && n.bool("sensitive") != Some(false);
229+ let spacing = n.num("spacing").unwrap_or(8.0) as f32;
230+ let children = || n.children.iter().map(move |c| element(t, *c, enabled));
231+
232+ let el: Element<'_, Message> = match n.tag.as_str() {
233+ "window" => Column::with_children(children())
234+ .width(Length::Fill)
235+ .height(Length::Fill)
236+ .into(),
237+ "box" => {
238+ let margin = n.num("margin").unwrap_or(0.0) as f32;
239+ if n.str("orientation") == "horizontal" {
240+ Row::with_children(children())
241+ .spacing(spacing)
242+ .padding(margin)
243+ .align_y(Alignment::Center)
244+ .into()
245+ } else {
246+ Column::with_children(children())
247+ .spacing(spacing)
248+ .padding(margin)
249+ .into()
250+ }
251+ }
252+ "page" => {
253+ let column = Column::with_children(children())
254+ .spacing(spacing)
255+ .padding(24)
256+ .width(Length::Fill);
257+ let mut inner = widget::container(column).width(Length::Fill);
258+ if let Some(max) = n.num("max-width") {
259+ inner = inner.max_width(max as f32);
260+ }
261+ widget::scrollable(widget::container(inner).center_x(Length::Fill))
262+ .height(Length::Fill)
263+ .into()
264+ }
265+ "card" | "frame" => {
266+ let mut column = Column::new().spacing(spacing);
267+ if n.tag == "frame" && !n.label().is_empty() {
268+ column = column.push(widget::text::heading(n.label()));
269+ }
270+ widget::container(column.extend(children()))
271+ .padding(16)
272+ .width(Length::Fill)
273+ .class(cosmic::theme::Container::Card)
274+ .into()
275+ }
276+ "scroll" => widget::scrollable(Column::with_children(children()).spacing(spacing)).into(),
277+ "label" => widget::text::body(n.label()).into(),
278+ "title" => widget::text::title3(n.label()).into(),
279+ "title-2" => widget::text::title4(n.label()).into(),
280+ "dim-label" => widget::text::caption(n.label()).into(),
281+ "button" => {
282+ let button = match n.str("kind") {
283+ "primary" => widget::button::suggested(n.label()),
284+ "destructive" => widget::button::destructive(n.label()),
285+ _ => widget::button::standard(n.label()),
286+ };
287+ button
288+ .on_press_maybe(enabled.then_some(Message::Click(id)))
289+ .into()
290+ }
291+ "checkbutton" => {
292+ let mut check = widget::checkbox(n.bool("active").unwrap_or(false)).label(n.label());
293+ if enabled {
294+ check = check.on_toggle(move |on| Message::Toggled(id, on));
295+ }
296+ check.into()
297+ }
298+ "entry" => {
299+ let mut entry = widget::text_input(n.str("placeholder"), n.str("text"));
300+ if enabled {
301+ entry = entry
302+ .on_input(move |text| Message::Change(id, text))
303+ .on_submit(move |_| Message::Activate(id));
304+ }
305+ entry.into()
306+ }
307+ "separator" => widget::divider::horizontal::default().into(),
308+ "spacer" => {
309+ let size = n.num("size").unwrap_or(8.0) as f32;
310+ widget::Space::new().width(size).height(size).into()
311+ }
312+ "progress" => {
313+ let bar =
314+ widget::progress_bar::determinate_linear(n.num("value").unwrap_or(0.0) as f32);
315+ if n.label().is_empty() {
316+ bar.into()
317+ } else {
318+ Column::new()
319+ .spacing(4)
320+ .push(widget::text::caption(n.label()))
321+ .push(bar)
322+ .into()
323+ }
324+ }
325+ // Kept rather than refused, as in libvidya: a tag this backend has not
326+ // grown yet still shows its children.
327+ _ => Column::with_children(children()).spacing(spacing).into(),
328+ };
329+
330+ match n.num("width-request") {
331+ Some(width) => widget::container(el).width(width as f32).into(),
332+ None => el,
333+ }
334+}
335+
336+// --- the C ABI: the loop -------------------------------------------------------
337+
338+static TITLE: Mutex<String> = Mutex::new(String::new());
339+
340+/// The window's title, read when `cosmic_run` opens it. A call of its own
341+/// because jolt will not pass a string to a `:blocking` foreign procedure, and
342+/// `cosmic_run` has to be one.
343+///
344+/// # Safety
345+/// `title` is null or a NUL-terminated string.
346+#[no_mangle]
347+pub unsafe extern "C" fn cosmic_set_title(title: *const c_char) {
348+ let title = borrowed(title);
349+ guard((), || *lock(&TITLE) = title)
350+}
351+
352+/// Open the window and run libcosmic until it closes. Blocks; call it on the
353+/// process main thread. `mode` is 0 for the system theme, 1 dark, 2 light.
354+///
355+/// Answers 0 on a clean exit, 1 on an error, 2 when a window was already run
356+/// in this process — winit's event loop cannot be made twice.
357+#[no_mangle]
358+pub extern "C" fn cosmic_run(width: c_int, height: c_int, mode: c_int) -> c_int {
359+ let status = guard(1, || {
360+ let title = lock(&TITLE).clone();
361+ if RAN.swap(true, SeqCst) {
362+ log::error!("jolt-cosmic: a window already ran in this process");
363+ return 2;
364+ }
365+ let size = cosmic::iced::Size::new(width.max(1) as f32, height.max(1) as f32);
366+ let mut settings = cosmic::app::Settings::default().size(size);
367+ match mode {
368+ 1 => settings = settings.theme(cosmic::Theme::dark()),
369+ 2 => settings = settings.theme(cosmic::Theme::light()),
370+ _ => {}
371+ }
372+ match cosmic::app::run::<App>(settings, title) {
373+ Ok(()) => 0,
374+ Err(err) => {
375+ eprintln!("jolt-cosmic: {err}");
376+ 1
377+ }
378+ }
379+ });
380+ // Outside the guard, so a panic in libcosmic still releases the worker.
381+ *lock(&TO_APP) = None;
382+ CLOSED.store(true, SeqCst);
383+ BELL.notify_all();
384+ status
385+}
386+
387+/// 1 once `cosmic_run` has returned.
388+#[no_mangle]
389+pub extern "C" fn cosmic_should_close() -> c_int {
390+ c_int::from(CLOSED.load(SeqCst))
391+}
392+
393+/// Close the window. Asked before the window exists, it closes on opening.
394+#[no_mangle]
395+pub extern "C" fn cosmic_quit() {
396+ guard((), || {
397+ QUIT_ASKED.store(true, SeqCst);
398+ tell_app(Wake::Quit);
399+ })
400+}
401+
402+/// Publish the edits since the last commit. Answers 1 when there were any.
403+#[no_mangle]
404+pub extern "C" fn cosmic_tree_commit() -> c_int {
405+ guard(0, || {
406+ let snapshot = {
407+ let mut e = lock(&EDITS);
408+ if !e.dirty {
409+ return 0;
410+ }
411+ e.dirty = false;
412+ Arc::new(e.tree.clone())
413+ };
414+ *lock(&COMMITTED) = snapshot;
415+ tell_app(Wake::Tree);
416+ 1
417+ })
418+}
419+
420+/// Block up to `timeout_ms` for an event, a `cosmic_wake`, or the window
421+/// closing. Answers 1 when an event is waiting.
422+#[no_mangle]
423+pub extern "C" fn cosmic_wait(timeout_ms: c_int) -> c_int {
424+ guard(0, || {
425+ let timeout = Duration::from_millis(timeout_ms.max(0) as u64);
426+ let (mut inbox, _) = BELL
427+ .wait_timeout_while(lock(&INBOX), timeout, |i| {
428+ i.queue.is_empty() && !i.woken && !CLOSED.load(SeqCst)
429+ })
430+ .unwrap_or_else(|poisoned| poisoned.into_inner());
431+ inbox.woken = false;
432+ c_int::from(!inbox.queue.is_empty())
433+ })
434+}
435+
436+/// Cut a `cosmic_wait` short — for work queued for the worker from elsewhere.
437+#[no_mangle]
438+pub extern "C" fn cosmic_wake() {
439+ guard((), || {
440+ lock(&INBOX).woken = true;
441+ BELL.notify_all();
442+ })
443+}
444+
445+// --- the C ABI: events -----------------------------------------------------------
446+
447+static EVENT_NAME: Scratch = Scratch::new();
448+static EVENT_TEXT: Scratch = Scratch::new();
449+
450+/// Dequeue one event; 1 while there was one. The accessors describe it.
451+#[no_mangle]
452+pub extern "C" fn cosmic_tree_poll_event() -> c_int {
453+ guard(0, || {
454+ let mut inbox = lock(&INBOX);
455+ let next = inbox.queue.pop_front();
456+ let got = next.is_some();
457+ inbox.current = next;
458+ c_int::from(got)
459+ })
460+}
461+
462+#[no_mangle]
463+pub extern "C" fn cosmic_tree_event_node() -> c_int {
464+ guard(0, || lock(&INBOX).current.as_ref().map_or(0, |e| e.node))
465+}
466+
467+#[no_mangle]
468+pub extern "C" fn cosmic_tree_event_name() -> *const c_char {
469+ guard(empty_str(), || {
470+ EVENT_NAME.lend(lock(&INBOX).current.as_ref().map_or("", |e| e.name))
471+ })
472+}
473+
474+#[no_mangle]
475+pub extern "C" fn cosmic_tree_event_text() -> *const c_char {
476+ guard(empty_str(), || {
477+ let text = lock(&INBOX)
478+ .current
479+ .as_ref()
480+ .map(|e| e.text.clone())
481+ .unwrap_or_default();
482+ EVENT_TEXT.lend(text)
483+ })
484+}
485+
486+#[no_mangle]
487+pub extern "C" fn cosmic_tree_event_num() -> f64 {
488+ guard(0.0, || lock(&INBOX).current.as_ref().map_or(0.0, |e| e.num))
489+}
490+
491+// --- the C ABI: nodes --------------------------------------------------------------
492+
493+static PROPS: Scratch = Scratch::new();
494+static DUMP: Scratch = Scratch::new();
495+
496+#[no_mangle]
497+pub extern "C" fn cosmic_tree_root() -> c_int {
498+ guard(0, || edit(Tree::root))
499+}
500+
501+/// # Safety
502+/// `tag` is null or a NUL-terminated string.
503+#[no_mangle]
504+pub unsafe extern "C" fn cosmic_node_new(tag: *const c_char) -> c_int {
505+ let tag = borrowed(tag);
506+ guard(0, || edit(|t| t.new_node(&tag)))
507+}
508+
509+#[no_mangle]
510+pub extern "C" fn cosmic_node_free(node: c_int) {
511+ guard((), || edit(|t| t.free(node)))
512+}
513+
514+#[no_mangle]
515+pub extern "C" fn cosmic_node_exists(node: c_int) -> c_int {
516+ guard(0, || c_int::from(read(|t| t.exists(node))))
517+}
518+
519+/// # Safety
520+/// `key` and `value` are null or NUL-terminated strings.
521+#[no_mangle]
522+pub unsafe extern "C" fn cosmic_node_set_str(
523+ node: c_int,
524+ key: *const c_char,
525+ value: *const c_char,
526+) {
527+ let (key, value) = (borrowed(key), borrowed(value));
528+ guard((), || edit(|t| t.set(node, &key, Prop::Str(value))))
529+}
530+
531+/// # Safety
532+/// `key` is null or a NUL-terminated string.
533+#[no_mangle]
534+pub unsafe extern "C" fn cosmic_node_set_num(node: c_int, key: *const c_char, value: f64) {
535+ let key = borrowed(key);
536+ guard((), || edit(|t| t.set(node, &key, Prop::Num(value))))
537+}
538+
539+/// # Safety
540+/// `key` is null or a NUL-terminated string.
541+#[no_mangle]
542+pub unsafe extern "C" fn cosmic_node_set_bool(node: c_int, key: *const c_char, value: c_int) {
543+ let key = borrowed(key);
544+ guard((), || edit(|t| t.set(node, &key, Prop::Bool(value != 0))))
545+}
546+
547+#[no_mangle]
548+pub extern "C" fn cosmic_node_clear_props(node: c_int) {
549+ guard((), || edit(|t| t.clear_props(node)))
550+}
551+
552+#[no_mangle]
553+pub extern "C" fn cosmic_node_tag(node: c_int) -> *const c_char {
554+ guard(empty_str(), || {
555+ PROPS.lend(read(|t| {
556+ t.get(node).map(|n| n.tag.clone()).unwrap_or_default()
557+ }))
558+ })
559+}
560+
561+#[no_mangle]
562+pub extern "C" fn cosmic_node_child_count(node: c_int) -> c_int {
563+ guard(0, || {
564+ read(|t| t.get(node).map_or(0, |n| n.children.len() as c_int))
565+ })
566+}
567+
568+#[no_mangle]
569+pub extern "C" fn cosmic_node_child_at(node: c_int, index: c_int) -> c_int {
570+ guard(0, || {
571+ read(|t| {
572+ t.get(node)
573+ .and_then(|n| n.children.get(usize::try_from(index).ok()?).copied())
574+ .unwrap_or(0)
575+ })
576+ })
577+}
578+
579+#[no_mangle]
580+pub extern "C" fn cosmic_node_append(parent: c_int, child: c_int) -> c_int {
581+ guard(0, || c_int::from(edit(|t| t.append(parent, child))))
582+}
583+
584+/// Unparents AND frees `child` with everything under it.
585+#[no_mangle]
586+pub extern "C" fn cosmic_node_remove(parent: c_int, child: c_int) {
587+ guard((), || edit(|t| t.remove(parent, child)))
588+}
589+
590+#[no_mangle]
591+pub extern "C" fn cosmic_node_insert_after(parent: c_int, child: c_int, sibling: c_int) -> c_int {
592+ guard(0, || {
593+ c_int::from(edit(|t| t.insert_after(parent, child, sibling)))
594+ })
595+}
596+
597+#[no_mangle]
598+pub extern "C" fn cosmic_node_replace(parent: c_int, old_child: c_int, new_child: c_int) -> c_int {
599+ guard(0, || {
600+ c_int::from(edit(|t| t.replace(parent, old_child, new_child)))
601+ })
602+}
603+
604+/// The subtree at `node` as hiccup; 0 is the root.
605+#[no_mangle]
606+pub extern "C" fn cosmic_tree_dump(node: c_int) -> *const c_char {
607+ guard(empty_str(), || {
608+ DUMP.lend(read(|t| {
609+ let id = if node == 0 { t.root_id() } else { node };
610+ t.dump(id)
611+ }))
612+ })
613+}
new file mode 100644
@@ -0,0 +1,613 @@
1+//! glimmer's libcosmic backend: the retained-tree ABI, with iced reading it.
2+//!
3+//! The edit half is libvidya's — integer node handles, string-keyed props,
4+//! events queued and polled — so `glimmer-cosmic` is `glimmer-vidya` pointed
5+//! at a different object. What changes is who owns the loop.
6+//!
7+//! egui lets its caller drive frames; iced does not. `cosmic::app::run` takes
8+//! the main thread (winit insists) and returns when the window closes. So the
9+//! arrangement is inverted:
10+//!
11+//! * `cosmic_run` blocks the process main thread inside libcosmic.
12+//! * jolt reconciles on a worker thread, mutating the arena under a mutex.
13+//! Nothing it does is visible until `cosmic_tree_commit`, which snapshots the
14+//! tree and wakes iced — so a reconcile half-way through a patch is never
15+//! painted, and a commit with no edits behind it costs nothing.
16+//! * Interactions are queued, and `cosmic_wait` blocks the worker until there
17+//! is one (or `cosmic_wake`, or a timeout), so an idle window burns no CPU on
18+//! either side.
19+//!
20+//! Every call except `cosmic_run` may come from any thread.
21+
22+mod tree;
23+
24+pub use tree::{Node, Prop, Tree};
25+
26+use std::collections::VecDeque;
27+use std::ffi::{c_char, c_int};
28+use std::sync::atomic::{AtomicBool, Ordering::SeqCst};
29+use std::sync::{Arc, Condvar, LazyLock, Mutex, MutexGuard};
30+use std::time::Duration;
31+
32+use cosmic::app::{Core, Task};
33+use cosmic::iced::futures::channel::mpsc;
34+use cosmic::iced::futures::{Stream, StreamExt};
35+use cosmic::iced::{Alignment, Length, Subscription};
36+use cosmic::widget::{self, Column, Row};
37+use cosmic::{ApplicationExt, Element};
38+use jolt_abi::{borrowed, empty_str, guard, Scratch};
39+
40+fn lock<T>(m: &Mutex<T>) -> MutexGuard<'_, T> {
41+ m.lock().unwrap_or_else(|poisoned| poisoned.into_inner())
42+}
43+
44+// --- the arena ---------------------------------------------------------------
45+
46+struct Edits {
47+ tree: Tree,
48+ /// Set by every mutation, cleared by a commit that published it.
49+ dirty: bool,
50+}
51+
52+static EDITS: LazyLock<Mutex<Edits>> = LazyLock::new(|| {
53+ Mutex::new(Edits {
54+ tree: Tree::default(),
55+ dirty: false,
56+ })
57+});
58+
59+/// What `view` paints: the tree as of the last commit.
60+static COMMITTED: LazyLock<Mutex<Arc<Tree>>> = LazyLock::new(Default::default);
61+
62+fn edit<R>(f: impl FnOnce(&mut Tree) -> R) -> R {
63+ let mut e = lock(&EDITS);
64+ e.dirty = true;
65+ f(&mut e.tree)
66+}
67+
68+fn read<R>(f: impl FnOnce(&Tree) -> R) -> R {
69+ f(&lock(&EDITS).tree)
70+}
71+
72+// --- events, towards jolt ----------------------------------------------------
73+
74+struct Event {
75+ node: i32,
76+ name: &'static str,
77+ text: String,
78+ num: f64,
79+}
80+
81+struct Inbox {
82+ queue: VecDeque<Event>,
83+ current: Option<Event>,
84+ woken: bool,
85+}
86+
87+static INBOX: Mutex<Inbox> = Mutex::new(Inbox {
88+ queue: VecDeque::new(),
89+ current: None,
90+ woken: false,
91+});
92+static BELL: Condvar = Condvar::new();
93+
94+fn post(node: i32, name: &'static str, text: String, num: f64) {
95+ lock(&INBOX).queue.push_back(Event {
96+ node,
97+ name,
98+ text,
99+ num,
100+ });
101+ BELL.notify_all();
102+}
103+
104+// --- wakes, towards iced -----------------------------------------------------
105+
106+enum Wake {
107+ Tree,
108+ Quit,
109+}
110+
111+static TO_APP: Mutex<Option<mpsc::UnboundedSender<Wake>>> = Mutex::new(None);
112+static QUIT_ASKED: AtomicBool = AtomicBool::new(false);
113+static RAN: AtomicBool = AtomicBool::new(false);
114+static CLOSED: AtomicBool = AtomicBool::new(false);
115+
116+fn tell_app(wake: Wake) {
117+ if let Some(tx) = lock(&TO_APP).as_ref() {
118+ let _ = tx.unbounded_send(wake);
119+ }
120+}
121+
122+/// The subscription's stream. It opens with a `Tree` wake so a commit made
123+/// between `init` and the subscription starting is not missed, and repeats a
124+/// quit asked for before there was anyone to tell.
125+fn wakes() -> impl Stream<Item = Message> {
126+ let (tx, rx) = mpsc::unbounded();
127+ let _ = tx.unbounded_send(Wake::Tree);
128+ if QUIT_ASKED.load(SeqCst) {
129+ let _ = tx.unbounded_send(Wake::Quit);
130+ }
131+ *lock(&TO_APP) = Some(tx);
132+ rx.map(|wake| match wake {
133+ Wake::Tree => Message::Tree,
134+ Wake::Quit => Message::Quit,
135+ })
136+}
137+
138+// --- the app -----------------------------------------------------------------
139+
140+struct App {
141+ core: Core,
142+ tree: Arc<Tree>,
143+}
144+
145+#[derive(Clone, Debug)]
146+enum Message {
147+ Tree,
148+ Quit,
149+ Click(i32),
150+ Toggled(i32, bool),
151+ Change(i32, String),
152+ Activate(i32),
153+}
154+
155+impl App {
156+ /// A widget does not own its value: the new state goes into the arena and
157+ /// into what is painted, so a caller that ignores the event still sees a
158+ /// working control, and its next render is what settles it.
159+ fn write_back(&mut self, node: i32, key: &str, value: Prop) {
160+ edit(|t| t.set(node, key, value.clone()));
161+ Arc::make_mut(&mut self.tree).set(node, key, value);
162+ }
163+}
164+
165+impl cosmic::Application for App {
166+ type Executor = cosmic::executor::Default;
167+ type Flags = String;
168+ type Message = Message;
169+ const APP_ID: &'static str = "dev.jolt.Glimmer";
170+
171+ fn core(&self) -> &Core {
172+ &self.core
173+ }
174+
175+ fn core_mut(&mut self) -> &mut Core {
176+ &mut self.core
177+ }
178+
179+ fn init(core: Core, title: String) -> (Self, Task<Message>) {
180+ let mut app = App {
181+ core,
182+ tree: lock(&COMMITTED).clone(),
183+ };
184+ // libcosmic's `wayland` feature brings `multi-window` with it, which
185+ // makes a window title a per-window thing.
186+ app.set_header_title(title.clone());
187+ let task = match app.core.main_window_id() {
188+ Some(id) => app.set_window_title(title, id),
189+ None => Task::none(),
190+ };
191+ (app, task)
192+ }
193+
194+ fn subscription(&self) -> Subscription<Message> {
195+ Subscription::run(wakes)
196+ }
197+
198+ fn update(&mut self, message: Message) -> Task<Message> {
199+ match message {
200+ Message::Tree => self.tree = lock(&COMMITTED).clone(),
201+ Message::Quit => return cosmic::iced::exit(),
202+ Message::Click(node) => post(node, "click", String::new(), 0.0),
203+ Message::Toggled(node, on) => {
204+ self.write_back(node, "active", Prop::Bool(on));
205+ post(node, "toggled", String::new(), f64::from(u8::from(on)));
206+ }
207+ Message::Change(node, text) => {
208+ self.write_back(node, "text", Prop::Str(text.clone()));
209+ post(node, "change", text, 0.0);
210+ }
211+ Message::Activate(node) => post(node, "activate", String::new(), 0.0),
212+ }
213+ Task::none()
214+ }
215+
216+ fn view(&self) -> Element<'_, Message> {
217+ let tree = &*self.tree;
218+ element(tree, tree.root_id(), true)
219+ }
220+}
221+
222+/// One node and everything under it, as widgets. `enabled` is inherited: an
223+/// insensitive container takes its whole subtree out of interaction.
224+fn element(t: &Tree, id: i32, enabled: bool) -> Element<'_, Message> {
225+ let Some(n) = t.get(id) else {
226+ return Column::new().into();
227+ };
228+ let enabled = enabled && n.bool("sensitive") != Some(false);
229+ let spacing = n.num("spacing").unwrap_or(8.0) as f32;
230+ let children = || n.children.iter().map(move |c| element(t, *c, enabled));
231+
232+ let el: Element<'_, Message> = match n.tag.as_str() {
233+ "window" => Column::with_children(children())
234+ .width(Length::Fill)
235+ .height(Length::Fill)
236+ .into(),
237+ "box" => {
238+ let margin = n.num("margin").unwrap_or(0.0) as f32;
239+ if n.str("orientation") == "horizontal" {
240+ Row::with_children(children())
241+ .spacing(spacing)
242+ .padding(margin)
243+ .align_y(Alignment::Center)
244+ .into()
245+ } else {
246+ Column::with_children(children())
247+ .spacing(spacing)
248+ .padding(margin)
249+ .into()
250+ }
251+ }
252+ "page" => {
253+ let column = Column::with_children(children())
254+ .spacing(spacing)
255+ .padding(24)
256+ .width(Length::Fill);
257+ let mut inner = widget::container(column).width(Length::Fill);
258+ if let Some(max) = n.num("max-width") {
259+ inner = inner.max_width(max as f32);
260+ }
261+ widget::scrollable(widget::container(inner).center_x(Length::Fill))
262+ .height(Length::Fill)
263+ .into()
264+ }
265+ "card" | "frame" => {
266+ let mut column = Column::new().spacing(spacing);
267+ if n.tag == "frame" && !n.label().is_empty() {
268+ column = column.push(widget::text::heading(n.label()));
269+ }
270+ widget::container(column.extend(children()))
271+ .padding(16)
272+ .width(Length::Fill)
273+ .class(cosmic::theme::Container::Card)
274+ .into()
275+ }
276+ "scroll" => widget::scrollable(Column::with_children(children()).spacing(spacing)).into(),
277+ "label" => widget::text::body(n.label()).into(),
278+ "title" => widget::text::title3(n.label()).into(),
279+ "title-2" => widget::text::title4(n.label()).into(),
280+ "dim-label" => widget::text::caption(n.label()).into(),
281+ "button" => {
282+ let button = match n.str("kind") {
283+ "primary" => widget::button::suggested(n.label()),
284+ "destructive" => widget::button::destructive(n.label()),
285+ _ => widget::button::standard(n.label()),
286+ };
287+ button
288+ .on_press_maybe(enabled.then_some(Message::Click(id)))
289+ .into()
290+ }
291+ "checkbutton" => {
292+ let mut check = widget::checkbox(n.bool("active").unwrap_or(false)).label(n.label());
293+ if enabled {
294+ check = check.on_toggle(move |on| Message::Toggled(id, on));
295+ }
296+ check.into()
297+ }
298+ "entry" => {
299+ let mut entry = widget::text_input(n.str("placeholder"), n.str("text"));
300+ if enabled {
301+ entry = entry
302+ .on_input(move |text| Message::Change(id, text))
303+ .on_submit(move |_| Message::Activate(id));
304+ }
305+ entry.into()
306+ }
307+ "separator" => widget::divider::horizontal::default().into(),
308+ "spacer" => {
309+ let size = n.num("size").unwrap_or(8.0) as f32;
310+ widget::Space::new().width(size).height(size).into()
311+ }
312+ "progress" => {
313+ let bar =
314+ widget::progress_bar::determinate_linear(n.num("value").unwrap_or(0.0) as f32);
315+ if n.label().is_empty() {
316+ bar.into()
317+ } else {
318+ Column::new()
319+ .spacing(4)
320+ .push(widget::text::caption(n.label()))
321+ .push(bar)
322+ .into()
323+ }
324+ }
325+ // Kept rather than refused, as in libvidya: a tag this backend has not
326+ // grown yet still shows its children.
327+ _ => Column::with_children(children()).spacing(spacing).into(),
328+ };
329+
330+ match n.num("width-request") {
331+ Some(width) => widget::container(el).width(width as f32).into(),
332+ None => el,
333+ }
334+}
335+
336+// --- the C ABI: the loop -------------------------------------------------------
337+
338+static TITLE: Mutex<String> = Mutex::new(String::new());
339+
340+/// The window's title, read when `cosmic_run` opens it. A call of its own
341+/// because jolt will not pass a string to a `:blocking` foreign procedure, and
342+/// `cosmic_run` has to be one.
343+///
344+/// # Safety
345+/// `title` is null or a NUL-terminated string.
346+#[no_mangle]
347+pub unsafe extern "C" fn cosmic_set_title(title: *const c_char) {
348+ let title = borrowed(title);
349+ guard((), || *lock(&TITLE) = title)
350+}
351+
352+/// Open the window and run libcosmic until it closes. Blocks; call it on the
353+/// process main thread. `mode` is 0 for the system theme, 1 dark, 2 light.
354+///
355+/// Answers 0 on a clean exit, 1 on an error, 2 when a window was already run
356+/// in this process — winit's event loop cannot be made twice.
357+#[no_mangle]
358+pub extern "C" fn cosmic_run(width: c_int, height: c_int, mode: c_int) -> c_int {
359+ let status = guard(1, || {
360+ let title = lock(&TITLE).clone();
361+ if RAN.swap(true, SeqCst) {
362+ log::error!("jolt-cosmic: a window already ran in this process");
363+ return 2;
364+ }
365+ let size = cosmic::iced::Size::new(width.max(1) as f32, height.max(1) as f32);
366+ let mut settings = cosmic::app::Settings::default().size(size);
367+ match mode {
368+ 1 => settings = settings.theme(cosmic::Theme::dark()),
369+ 2 => settings = settings.theme(cosmic::Theme::light()),
370+ _ => {}
371+ }
372+ match cosmic::app::run::<App>(settings, title) {
373+ Ok(()) => 0,
374+ Err(err) => {
375+ eprintln!("jolt-cosmic: {err}");
376+ 1
377+ }
378+ }
379+ });
380+ // Outside the guard, so a panic in libcosmic still releases the worker.
381+ *lock(&TO_APP) = None;
382+ CLOSED.store(true, SeqCst);
383+ BELL.notify_all();
384+ status
385+}
386+
387+/// 1 once `cosmic_run` has returned.
388+#[no_mangle]
389+pub extern "C" fn cosmic_should_close() -> c_int {
390+ c_int::from(CLOSED.load(SeqCst))
391+}
392+
393+/// Close the window. Asked before the window exists, it closes on opening.
394+#[no_mangle]
395+pub extern "C" fn cosmic_quit() {
396+ guard((), || {
397+ QUIT_ASKED.store(true, SeqCst);
398+ tell_app(Wake::Quit);
399+ })
400+}
401+
402+/// Publish the edits since the last commit. Answers 1 when there were any.
403+#[no_mangle]
404+pub extern "C" fn cosmic_tree_commit() -> c_int {
405+ guard(0, || {
406+ let snapshot = {
407+ let mut e = lock(&EDITS);
408+ if !e.dirty {
409+ return 0;
410+ }
411+ e.dirty = false;
412+ Arc::new(e.tree.clone())
413+ };
414+ *lock(&COMMITTED) = snapshot;
415+ tell_app(Wake::Tree);
416+ 1
417+ })
418+}
419+
420+/// Block up to `timeout_ms` for an event, a `cosmic_wake`, or the window
421+/// closing. Answers 1 when an event is waiting.
422+#[no_mangle]
423+pub extern "C" fn cosmic_wait(timeout_ms: c_int) -> c_int {
424+ guard(0, || {
425+ let timeout = Duration::from_millis(timeout_ms.max(0) as u64);
426+ let (mut inbox, _) = BELL
427+ .wait_timeout_while(lock(&INBOX), timeout, |i| {
428+ i.queue.is_empty() && !i.woken && !CLOSED.load(SeqCst)
429+ })
430+ .unwrap_or_else(|poisoned| poisoned.into_inner());
431+ inbox.woken = false;
432+ c_int::from(!inbox.queue.is_empty())
433+ })
434+}
435+
436+/// Cut a `cosmic_wait` short — for work queued for the worker from elsewhere.
437+#[no_mangle]
438+pub extern "C" fn cosmic_wake() {
439+ guard((), || {
440+ lock(&INBOX).woken = true;
441+ BELL.notify_all();
442+ })
443+}
444+
445+// --- the C ABI: events -----------------------------------------------------------
446+
447+static EVENT_NAME: Scratch = Scratch::new();
448+static EVENT_TEXT: Scratch = Scratch::new();
449+
450+/// Dequeue one event; 1 while there was one. The accessors describe it.
451+#[no_mangle]
452+pub extern "C" fn cosmic_tree_poll_event() -> c_int {
453+ guard(0, || {
454+ let mut inbox = lock(&INBOX);
455+ let next = inbox.queue.pop_front();
456+ let got = next.is_some();
457+ inbox.current = next;
458+ c_int::from(got)
459+ })
460+}
461+
462+#[no_mangle]
463+pub extern "C" fn cosmic_tree_event_node() -> c_int {
464+ guard(0, || lock(&INBOX).current.as_ref().map_or(0, |e| e.node))
465+}
466+
467+#[no_mangle]
468+pub extern "C" fn cosmic_tree_event_name() -> *const c_char {
469+ guard(empty_str(), || {
470+ EVENT_NAME.lend(lock(&INBOX).current.as_ref().map_or("", |e| e.name))
471+ })
472+}
473+
474+#[no_mangle]
475+pub extern "C" fn cosmic_tree_event_text() -> *const c_char {
476+ guard(empty_str(), || {
477+ let text = lock(&INBOX)
478+ .current
479+ .as_ref()
480+ .map(|e| e.text.clone())
481+ .unwrap_or_default();
482+ EVENT_TEXT.lend(text)
483+ })
484+}
485+
486+#[no_mangle]
487+pub extern "C" fn cosmic_tree_event_num() -> f64 {
488+ guard(0.0, || lock(&INBOX).current.as_ref().map_or(0.0, |e| e.num))
489+}
490+
491+// --- the C ABI: nodes --------------------------------------------------------------
492+
493+static PROPS: Scratch = Scratch::new();
494+static DUMP: Scratch = Scratch::new();
495+
496+#[no_mangle]
497+pub extern "C" fn cosmic_tree_root() -> c_int {
498+ guard(0, || edit(Tree::root))
499+}
500+
501+/// # Safety
502+/// `tag` is null or a NUL-terminated string.
503+#[no_mangle]
504+pub unsafe extern "C" fn cosmic_node_new(tag: *const c_char) -> c_int {
505+ let tag = borrowed(tag);
506+ guard(0, || edit(|t| t.new_node(&tag)))
507+}
508+
509+#[no_mangle]
510+pub extern "C" fn cosmic_node_free(node: c_int) {
511+ guard((), || edit(|t| t.free(node)))
512+}
513+
514+#[no_mangle]
515+pub extern "C" fn cosmic_node_exists(node: c_int) -> c_int {
516+ guard(0, || c_int::from(read(|t| t.exists(node))))
517+}
518+
519+/// # Safety
520+/// `key` and `value` are null or NUL-terminated strings.
521+#[no_mangle]
522+pub unsafe extern "C" fn cosmic_node_set_str(
523+ node: c_int,
524+ key: *const c_char,
525+ value: *const c_char,
526+) {
527+ let (key, value) = (borrowed(key), borrowed(value));
528+ guard((), || edit(|t| t.set(node, &key, Prop::Str(value))))
529+}
530+
531+/// # Safety
532+/// `key` is null or a NUL-terminated string.
533+#[no_mangle]
534+pub unsafe extern "C" fn cosmic_node_set_num(node: c_int, key: *const c_char, value: f64) {
535+ let key = borrowed(key);
536+ guard((), || edit(|t| t.set(node, &key, Prop::Num(value))))
537+}
538+
539+/// # Safety
540+/// `key` is null or a NUL-terminated string.
541+#[no_mangle]
542+pub unsafe extern "C" fn cosmic_node_set_bool(node: c_int, key: *const c_char, value: c_int) {
543+ let key = borrowed(key);
544+ guard((), || edit(|t| t.set(node, &key, Prop::Bool(value != 0))))
545+}
546+
547+#[no_mangle]
548+pub extern "C" fn cosmic_node_clear_props(node: c_int) {
549+ guard((), || edit(|t| t.clear_props(node)))
550+}
551+
552+#[no_mangle]
553+pub extern "C" fn cosmic_node_tag(node: c_int) -> *const c_char {
554+ guard(empty_str(), || {
555+ PROPS.lend(read(|t| {
556+ t.get(node).map(|n| n.tag.clone()).unwrap_or_default()
557+ }))
558+ })
559+}
560+
561+#[no_mangle]
562+pub extern "C" fn cosmic_node_child_count(node: c_int) -> c_int {
563+ guard(0, || {
564+ read(|t| t.get(node).map_or(0, |n| n.children.len() as c_int))
565+ })
566+}
567+
568+#[no_mangle]
569+pub extern "C" fn cosmic_node_child_at(node: c_int, index: c_int) -> c_int {
570+ guard(0, || {
571+ read(|t| {
572+ t.get(node)
573+ .and_then(|n| n.children.get(usize::try_from(index).ok()?).copied())
574+ .unwrap_or(0)
575+ })
576+ })
577+}
578+
579+#[no_mangle]
580+pub extern "C" fn cosmic_node_append(parent: c_int, child: c_int) -> c_int {
581+ guard(0, || c_int::from(edit(|t| t.append(parent, child))))
582+}
583+
584+/// Unparents AND frees `child` with everything under it.
585+#[no_mangle]
586+pub extern "C" fn cosmic_node_remove(parent: c_int, child: c_int) {
587+ guard((), || edit(|t| t.remove(parent, child)))
588+}
589+
590+#[no_mangle]
591+pub extern "C" fn cosmic_node_insert_after(parent: c_int, child: c_int, sibling: c_int) -> c_int {
592+ guard(0, || {
593+ c_int::from(edit(|t| t.insert_after(parent, child, sibling)))
594+ })
595+}
596+
597+#[no_mangle]
598+pub extern "C" fn cosmic_node_replace(parent: c_int, old_child: c_int, new_child: c_int) -> c_int {
599+ guard(0, || {
600+ c_int::from(edit(|t| t.replace(parent, old_child, new_child)))
601+ })
602+}
603+
604+/// The subtree at `node` as hiccup; 0 is the root.
605+#[no_mangle]
606+pub extern "C" fn cosmic_tree_dump(node: c_int) -> *const c_char {
607+ guard(empty_str(), || {
608+ DUMP.lend(read(|t| {
609+ let id = if node == 0 { t.root_id() } else { node };
610+ t.dump(id)
611+ }))
612+ })
613+}
added crates/jolt-cosmic/src/tree.rs +349 -0
new file mode 100644
@@ -0,0 +1,349 @@
1+//! The node arena: what the reconciler patches, and what `view` reads.
2+//!
3+//! Plain data with no libcosmic in it, so the edit half of the ABI is testable
4+//! without a window, a GPU or a display. libvidya and libjolttui keep the same
5+//! shape; what is different here is who reads it. There, the caller's thread
6+//! paints the tree; here iced's thread does, so the arena sits behind a mutex
7+//! and `view` works from a snapshot taken at the last commit.
8+
9+use std::collections::BTreeMap;
10+use std::fmt::Write;
11+
12+#[derive(Clone, Debug, PartialEq)]
13+pub enum Prop {
14+ Str(String),
15+ Num(f64),
16+ Bool(bool),
17+}
18+
19+#[derive(Clone, Debug)]
20+pub struct Node {
21+ pub tag: String,
22+ pub props: BTreeMap<String, Prop>,
23+ pub children: Vec<i32>,
24+ pub parent: i32,
25+}
26+
27+impl Node {
28+ pub fn str(&self, key: &str) -> &str {
29+ match self.props.get(key) {
30+ Some(Prop::Str(s)) => s,
31+ _ => "",
32+ }
33+ }
34+
35+ pub fn num(&self, key: &str) -> Option<f64> {
36+ match self.props.get(key) {
37+ Some(Prop::Num(n)) => Some(*n),
38+ _ => None,
39+ }
40+ }
41+
42+ pub fn bool(&self, key: &str) -> Option<bool> {
43+ match self.props.get(key) {
44+ Some(Prop::Bool(b)) => Some(*b),
45+ _ => None,
46+ }
47+ }
48+
49+ /// The label a text-shaped widget shows: `label`, or `text` failing that.
50+ pub fn label(&self) -> &str {
51+ match self.str("label") {
52+ "" => self.str("text"),
53+ s => s,
54+ }
55+ }
56+}
57+
58+/// `hbox` and `vbox` are one node here, as in libvidya; the tag only implies
59+/// an orientation, and the jolt side writes it as a prop.
60+fn canonical(tag: &str) -> &str {
61+ match tag {
62+ "hbox" | "vbox" => "box",
63+ "checkbox" => "checkbutton",
64+ other => other,
65+ }
66+}
67+
68+#[derive(Clone, Debug, Default)]
69+pub struct Tree {
70+ /// Slot `i` holds handle `i + 1`; `None` is a freed handle waiting for reuse.
71+ slots: Vec<Option<Node>>,
72+ free: Vec<i32>,
73+ root: i32,
74+}
75+
76+impl Tree {
77+ pub fn get(&self, id: i32) -> Option<&Node> {
78+ if id <= 0 {
79+ return None;
80+ }
81+ self.slots.get(id as usize - 1)?.as_ref()
82+ }
83+
84+ fn get_mut(&mut self, id: i32) -> Option<&mut Node> {
85+ if id <= 0 {
86+ return None;
87+ }
88+ self.slots.get_mut(id as usize - 1)?.as_mut()
89+ }
90+
91+ pub fn exists(&self, id: i32) -> bool {
92+ self.get(id).is_some()
93+ }
94+
95+ pub fn root(&mut self) -> i32 {
96+ if !self.exists(self.root) {
97+ self.root = self.new_node("window");
98+ }
99+ self.root
100+ }
101+
102+ /// The root without creating it, for a reader holding a snapshot.
103+ pub fn root_id(&self) -> i32 {
104+ self.root
105+ }
106+
107+ pub fn new_node(&mut self, tag: &str) -> i32 {
108+ let node = Node {
109+ tag: canonical(tag).to_owned(),
110+ props: BTreeMap::new(),
111+ children: Vec::new(),
112+ parent: 0,
113+ };
114+ match self.free.pop() {
115+ Some(id) => {
116+ self.slots[id as usize - 1] = Some(node);
117+ id
118+ }
119+ None => {
120+ self.slots.push(Some(node));
121+ self.slots.len() as i32
122+ }
123+ }
124+ }
125+
126+ /// Free `id` and everything under it, detaching it from its parent first.
127+ pub fn free(&mut self, id: i32) {
128+ let Some(node) = self.get(id) else { return };
129+ let parent = node.parent;
130+ if let Some(p) = self.get_mut(parent) {
131+ p.children.retain(|c| *c != id);
132+ }
133+ self.free_subtree(id);
134+ }
135+
136+ fn free_subtree(&mut self, id: i32) {
137+ let Some(node) = self.slots.get_mut(id as usize - 1).and_then(Option::take) else {
138+ return;
139+ };
140+ for child in node.children {
141+ self.free_subtree(child);
142+ }
143+ if id == self.root {
144+ self.root = 0;
145+ }
146+ self.free.push(id);
147+ }
148+
149+ pub fn set(&mut self, id: i32, key: &str, value: Prop) {
150+ if let Some(n) = self.get_mut(id) {
151+ n.props.insert(key.to_owned(), value);
152+ }
153+ }
154+
155+ pub fn clear_props(&mut self, id: i32) {
156+ if let Some(n) = self.get_mut(id) {
157+ n.props.clear();
158+ }
159+ }
160+
161+ fn detach(&mut self, child: i32) {
162+ let parent = match self.get(child) {
163+ Some(n) => n.parent,
164+ None => return,
165+ };
166+ if let Some(p) = self.get_mut(parent) {
167+ p.children.retain(|c| *c != child);
168+ }
169+ if let Some(c) = self.get_mut(child) {
170+ c.parent = 0;
171+ }
172+ }
173+
174+ /// A node may not become its own ancestor; the reconciler never asks, but
175+ /// a cycle would make `view` recurse forever, so it is refused here.
176+ fn is_ancestor(&self, ancestor: i32, mut id: i32) -> bool {
177+ while id > 0 {
178+ if id == ancestor {
179+ return true;
180+ }
181+ id = self.get(id).map_or(0, |n| n.parent);
182+ }
183+ false
184+ }
185+
186+ pub fn append(&mut self, parent: i32, child: i32) -> bool {
187+ if !self.exists(parent) || !self.exists(child) || self.is_ancestor(child, parent) {
188+ return false;
189+ }
190+ self.detach(child);
191+ self.get_mut(parent).unwrap().children.push(child);
192+ self.get_mut(child).unwrap().parent = parent;
193+ true
194+ }
195+
196+ /// Unparents and frees `child`, under `parent` only.
197+ pub fn remove(&mut self, parent: i32, child: i32) {
198+ if self.get(child).is_some_and(|n| n.parent == parent) {
199+ self.free(child);
200+ }
201+ }
202+
203+ /// Move `child` after `sibling`; `sibling` 0 is the first position.
204+ pub fn insert_after(&mut self, parent: i32, child: i32, sibling: i32) -> bool {
205+ if !self.exists(parent) || !self.exists(child) || self.is_ancestor(child, parent) {
206+ return false;
207+ }
208+ if sibling != 0 && self.get(sibling).is_none_or(|n| n.parent != parent) {
209+ return false;
210+ }
211+ self.detach(child);
212+ let p = self.get_mut(parent).unwrap();
213+ let at = if sibling == 0 {
214+ 0
215+ } else {
216+ p.children.iter().position(|c| *c == sibling).unwrap() + 1
217+ };
218+ p.children.insert(at, child);
219+ self.get_mut(child).unwrap().parent = parent;
220+ true
221+ }
222+
223+ /// Put `new` where `old` was under `parent`, and free `old`.
224+ pub fn replace(&mut self, parent: i32, old: i32, new: i32) -> bool {
225+ if !self.exists(new) || self.get(old).is_none_or(|n| n.parent != parent) {
226+ return false;
227+ }
228+ if self.is_ancestor(new, parent) {
229+ return false;
230+ }
231+ self.detach(new);
232+ let p = self.get_mut(parent).unwrap();
233+ let at = p.children.iter().position(|c| *c == old).unwrap();
234+ p.children[at] = new;
235+ self.get_mut(new).unwrap().parent = parent;
236+ // `old` is no longer among the parent's children, so free only its subtree.
237+ self.get_mut(old).unwrap().parent = 0;
238+ self.free_subtree(old);
239+ true
240+ }
241+
242+ /// The subtree at `id` as hiccup, one node to a line, props sorted — so two
243+ /// dumps of the same tree compare as text.
244+ pub fn dump(&self, id: i32) -> String {
245+ let mut out = String::new();
246+ self.dump_into(id, 0, &mut out);
247+ out
248+ }
249+
250+ fn dump_into(&self, id: i32, depth: usize, out: &mut String) {
251+ let Some(n) = self.get(id) else { return };
252+ let _ = write!(out, "{}[:{} {{", " ".repeat(depth), n.tag);
253+ for (i, (k, v)) in n.props.iter().enumerate() {
254+ if i > 0 {
255+ out.push(' ');
256+ }
257+ let _ = match v {
258+ Prop::Str(s) => write!(out, ":{k} {s:?}"),
259+ Prop::Num(x) => write!(out, ":{k} {x}"),
260+ Prop::Bool(b) => write!(out, ":{k} {b}"),
261+ };
262+ }
263+ out.push('}');
264+ for child in &n.children {
265+ out.push('\n');
266+ self.dump_into(*child, depth + 1, out);
267+ }
268+ out.push(']');
269+ }
270+}
271+
272+#[cfg(test)]
273+mod tests {
274+ use super::*;
275+
276+ #[test]
277+ fn a_removed_subtree_frees_every_node_under_it() {
278+ let mut t = Tree::default();
279+ let root = t.root();
280+ let card = t.new_node("card");
281+ let label = t.new_node("label");
282+ assert!(t.append(root, card));
283+ assert!(t.append(card, label));
284+ t.remove(root, card);
285+ assert!(!t.exists(card));
286+ assert!(!t.exists(label));
287+ assert!(t.get(root).unwrap().children.is_empty());
288+ }
289+
290+ #[test]
291+ fn insert_after_zero_moves_to_the_front() {
292+ let mut t = Tree::default();
293+ let root = t.root();
294+ let (a, b, c) = (
295+ t.new_node("label"),
296+ t.new_node("label"),
297+ t.new_node("label"),
298+ );
299+ for n in [a, b, c] {
300+ t.append(root, n);
301+ }
302+ assert!(t.insert_after(root, c, 0));
303+ assert_eq!(t.get(root).unwrap().children, vec![c, a, b]);
304+ assert!(t.insert_after(root, c, b));
305+ assert_eq!(t.get(root).unwrap().children, vec![a, b, c]);
306+ }
307+
308+ #[test]
309+ fn replace_keeps_the_position_and_frees_the_old_node() {
310+ let mut t = Tree::default();
311+ let root = t.root();
312+ let (a, b, c) = (
313+ t.new_node("label"),
314+ t.new_node("button"),
315+ t.new_node("label"),
316+ );
317+ t.append(root, a);
318+ t.append(root, b);
319+ assert!(t.replace(root, a, c));
320+ assert_eq!(t.get(root).unwrap().children, vec![c, b]);
321+ assert!(!t.exists(a));
322+ }
323+
324+ #[test]
325+ fn a_node_cannot_be_appended_under_itself() {
326+ let mut t = Tree::default();
327+ let root = t.root();
328+ let card = t.new_node("card");
329+ t.append(root, card);
330+ assert!(!t.append(card, root));
331+ }
332+
333+ #[test]
334+ fn dump_reads_back_as_hiccup() {
335+ let mut t = Tree::default();
336+ let root = t.root();
337+ let row = t.new_node("hbox");
338+ t.set(row, "orientation", Prop::Str("horizontal".into()));
339+ let b = t.new_node("button");
340+ t.set(b, "label", Prop::Str("+ 1".into()));
341+ t.set(b, "kind", Prop::Str("primary".into()));
342+ t.append(root, row);
343+ t.append(row, b);
344+ assert_eq!(
345+ t.dump(root),
346+ "[:window {}\n [:box {:orientation \"horizontal\"}\n [:button {:kind \"primary\" :label \"+ 1\"}]]]"
347+ );
348+ }
349+}
new file mode 100644
@@ -0,0 +1,349 @@
1+//! The node arena: what the reconciler patches, and what `view` reads.
2+//!
3+//! Plain data with no libcosmic in it, so the edit half of the ABI is testable
4+//! without a window, a GPU or a display. libvidya and libjolttui keep the same
5+//! shape; what is different here is who reads it. There, the caller's thread
6+//! paints the tree; here iced's thread does, so the arena sits behind a mutex
7+//! and `view` works from a snapshot taken at the last commit.
8+
9+use std::collections::BTreeMap;
10+use std::fmt::Write;
11+
12+#[derive(Clone, Debug, PartialEq)]
13+pub enum Prop {
14+ Str(String),
15+ Num(f64),
16+ Bool(bool),
17+}
18+
19+#[derive(Clone, Debug)]
20+pub struct Node {
21+ pub tag: String,
22+ pub props: BTreeMap<String, Prop>,
23+ pub children: Vec<i32>,
24+ pub parent: i32,
25+}
26+
27+impl Node {
28+ pub fn str(&self, key: &str) -> &str {
29+ match self.props.get(key) {
30+ Some(Prop::Str(s)) => s,
31+ _ => "",
32+ }
33+ }
34+
35+ pub fn num(&self, key: &str) -> Option<f64> {
36+ match self.props.get(key) {
37+ Some(Prop::Num(n)) => Some(*n),
38+ _ => None,
39+ }
40+ }
41+
42+ pub fn bool(&self, key: &str) -> Option<bool> {
43+ match self.props.get(key) {
44+ Some(Prop::Bool(b)) => Some(*b),
45+ _ => None,
46+ }
47+ }
48+
49+ /// The label a text-shaped widget shows: `label`, or `text` failing that.
50+ pub fn label(&self) -> &str {
51+ match self.str("label") {
52+ "" => self.str("text"),
53+ s => s,
54+ }
55+ }
56+}
57+
58+/// `hbox` and `vbox` are one node here, as in libvidya; the tag only implies
59+/// an orientation, and the jolt side writes it as a prop.
60+fn canonical(tag: &str) -> &str {
61+ match tag {
62+ "hbox" | "vbox" => "box",
63+ "checkbox" => "checkbutton",
64+ other => other,
65+ }
66+}
67+
68+#[derive(Clone, Debug, Default)]
69+pub struct Tree {
70+ /// Slot `i` holds handle `i + 1`; `None` is a freed handle waiting for reuse.
71+ slots: Vec<Option<Node>>,
72+ free: Vec<i32>,
73+ root: i32,
74+}
75+
76+impl Tree {
77+ pub fn get(&self, id: i32) -> Option<&Node> {
78+ if id <= 0 {
79+ return None;
80+ }
81+ self.slots.get(id as usize - 1)?.as_ref()
82+ }
83+
84+ fn get_mut(&mut self, id: i32) -> Option<&mut Node> {
85+ if id <= 0 {
86+ return None;
87+ }
88+ self.slots.get_mut(id as usize - 1)?.as_mut()
89+ }
90+
91+ pub fn exists(&self, id: i32) -> bool {
92+ self.get(id).is_some()
93+ }
94+
95+ pub fn root(&mut self) -> i32 {
96+ if !self.exists(self.root) {
97+ self.root = self.new_node("window");
98+ }
99+ self.root
100+ }
101+
102+ /// The root without creating it, for a reader holding a snapshot.
103+ pub fn root_id(&self) -> i32 {
104+ self.root
105+ }
106+
107+ pub fn new_node(&mut self, tag: &str) -> i32 {
108+ let node = Node {
109+ tag: canonical(tag).to_owned(),
110+ props: BTreeMap::new(),
111+ children: Vec::new(),
112+ parent: 0,
113+ };
114+ match self.free.pop() {
115+ Some(id) => {
116+ self.slots[id as usize - 1] = Some(node);
117+ id
118+ }
119+ None => {
120+ self.slots.push(Some(node));
121+ self.slots.len() as i32
122+ }
123+ }
124+ }
125+
126+ /// Free `id` and everything under it, detaching it from its parent first.
127+ pub fn free(&mut self, id: i32) {
128+ let Some(node) = self.get(id) else { return };
129+ let parent = node.parent;
130+ if let Some(p) = self.get_mut(parent) {
131+ p.children.retain(|c| *c != id);
132+ }
133+ self.free_subtree(id);
134+ }
135+
136+ fn free_subtree(&mut self, id: i32) {
137+ let Some(node) = self.slots.get_mut(id as usize - 1).and_then(Option::take) else {
138+ return;
139+ };
140+ for child in node.children {
141+ self.free_subtree(child);
142+ }
143+ if id == self.root {
144+ self.root = 0;
145+ }
146+ self.free.push(id);
147+ }
148+
149+ pub fn set(&mut self, id: i32, key: &str, value: Prop) {
150+ if let Some(n) = self.get_mut(id) {
151+ n.props.insert(key.to_owned(), value);
152+ }
153+ }
154+
155+ pub fn clear_props(&mut self, id: i32) {
156+ if let Some(n) = self.get_mut(id) {
157+ n.props.clear();
158+ }
159+ }
160+
161+ fn detach(&mut self, child: i32) {
162+ let parent = match self.get(child) {
163+ Some(n) => n.parent,
164+ None => return,
165+ };
166+ if let Some(p) = self.get_mut(parent) {
167+ p.children.retain(|c| *c != child);
168+ }
169+ if let Some(c) = self.get_mut(child) {
170+ c.parent = 0;
171+ }
172+ }
173+
174+ /// A node may not become its own ancestor; the reconciler never asks, but
175+ /// a cycle would make `view` recurse forever, so it is refused here.
176+ fn is_ancestor(&self, ancestor: i32, mut id: i32) -> bool {
177+ while id > 0 {
178+ if id == ancestor {
179+ return true;
180+ }
181+ id = self.get(id).map_or(0, |n| n.parent);
182+ }
183+ false
184+ }
185+
186+ pub fn append(&mut self, parent: i32, child: i32) -> bool {
187+ if !self.exists(parent) || !self.exists(child) || self.is_ancestor(child, parent) {
188+ return false;
189+ }
190+ self.detach(child);
191+ self.get_mut(parent).unwrap().children.push(child);
192+ self.get_mut(child).unwrap().parent = parent;
193+ true
194+ }
195+
196+ /// Unparents and frees `child`, under `parent` only.
197+ pub fn remove(&mut self, parent: i32, child: i32) {
198+ if self.get(child).is_some_and(|n| n.parent == parent) {
199+ self.free(child);
200+ }
201+ }
202+
203+ /// Move `child` after `sibling`; `sibling` 0 is the first position.
204+ pub fn insert_after(&mut self, parent: i32, child: i32, sibling: i32) -> bool {
205+ if !self.exists(parent) || !self.exists(child) || self.is_ancestor(child, parent) {
206+ return false;
207+ }
208+ if sibling != 0 && self.get(sibling).is_none_or(|n| n.parent != parent) {
209+ return false;
210+ }
211+ self.detach(child);
212+ let p = self.get_mut(parent).unwrap();
213+ let at = if sibling == 0 {
214+ 0
215+ } else {
216+ p.children.iter().position(|c| *c == sibling).unwrap() + 1
217+ };
218+ p.children.insert(at, child);
219+ self.get_mut(child).unwrap().parent = parent;
220+ true
221+ }
222+
223+ /// Put `new` where `old` was under `parent`, and free `old`.
224+ pub fn replace(&mut self, parent: i32, old: i32, new: i32) -> bool {
225+ if !self.exists(new) || self.get(old).is_none_or(|n| n.parent != parent) {
226+ return false;
227+ }
228+ if self.is_ancestor(new, parent) {
229+ return false;
230+ }
231+ self.detach(new);
232+ let p = self.get_mut(parent).unwrap();
233+ let at = p.children.iter().position(|c| *c == old).unwrap();
234+ p.children[at] = new;
235+ self.get_mut(new).unwrap().parent = parent;
236+ // `old` is no longer among the parent's children, so free only its subtree.
237+ self.get_mut(old).unwrap().parent = 0;
238+ self.free_subtree(old);
239+ true
240+ }
241+
242+ /// The subtree at `id` as hiccup, one node to a line, props sorted — so two
243+ /// dumps of the same tree compare as text.
244+ pub fn dump(&self, id: i32) -> String {
245+ let mut out = String::new();
246+ self.dump_into(id, 0, &mut out);
247+ out
248+ }
249+
250+ fn dump_into(&self, id: i32, depth: usize, out: &mut String) {
251+ let Some(n) = self.get(id) else { return };
252+ let _ = write!(out, "{}[:{} {{", " ".repeat(depth), n.tag);
253+ for (i, (k, v)) in n.props.iter().enumerate() {
254+ if i > 0 {
255+ out.push(' ');
256+ }
257+ let _ = match v {
258+ Prop::Str(s) => write!(out, ":{k} {s:?}"),
259+ Prop::Num(x) => write!(out, ":{k} {x}"),
260+ Prop::Bool(b) => write!(out, ":{k} {b}"),
261+ };
262+ }
263+ out.push('}');
264+ for child in &n.children {
265+ out.push('\n');
266+ self.dump_into(*child, depth + 1, out);
267+ }
268+ out.push(']');
269+ }
270+}
271+
272+#[cfg(test)]
273+mod tests {
274+ use super::*;
275+
276+ #[test]
277+ fn a_removed_subtree_frees_every_node_under_it() {
278+ let mut t = Tree::default();
279+ let root = t.root();
280+ let card = t.new_node("card");
281+ let label = t.new_node("label");
282+ assert!(t.append(root, card));
283+ assert!(t.append(card, label));
284+ t.remove(root, card);
285+ assert!(!t.exists(card));
286+ assert!(!t.exists(label));
287+ assert!(t.get(root).unwrap().children.is_empty());
288+ }
289+
290+ #[test]
291+ fn insert_after_zero_moves_to_the_front() {
292+ let mut t = Tree::default();
293+ let root = t.root();
294+ let (a, b, c) = (
295+ t.new_node("label"),
296+ t.new_node("label"),
297+ t.new_node("label"),
298+ );
299+ for n in [a, b, c] {
300+ t.append(root, n);
301+ }
302+ assert!(t.insert_after(root, c, 0));
303+ assert_eq!(t.get(root).unwrap().children, vec![c, a, b]);
304+ assert!(t.insert_after(root, c, b));
305+ assert_eq!(t.get(root).unwrap().children, vec![a, b, c]);
306+ }
307+
308+ #[test]
309+ fn replace_keeps_the_position_and_frees_the_old_node() {
310+ let mut t = Tree::default();
311+ let root = t.root();
312+ let (a, b, c) = (
313+ t.new_node("label"),
314+ t.new_node("button"),
315+ t.new_node("label"),
316+ );
317+ t.append(root, a);
318+ t.append(root, b);
319+ assert!(t.replace(root, a, c));
320+ assert_eq!(t.get(root).unwrap().children, vec![c, b]);
321+ assert!(!t.exists(a));
322+ }
323+
324+ #[test]
325+ fn a_node_cannot_be_appended_under_itself() {
326+ let mut t = Tree::default();
327+ let root = t.root();
328+ let card = t.new_node("card");
329+ t.append(root, card);
330+ assert!(!t.append(card, root));
331+ }
332+
333+ #[test]
334+ fn dump_reads_back_as_hiccup() {
335+ let mut t = Tree::default();
336+ let root = t.root();
337+ let row = t.new_node("hbox");
338+ t.set(row, "orientation", Prop::Str("horizontal".into()));
339+ let b = t.new_node("button");
340+ t.set(b, "label", Prop::Str("+ 1".into()));
341+ t.set(b, "kind", Prop::Str("primary".into()));
342+ t.append(root, row);
343+ t.append(row, b);
344+ assert_eq!(
345+ t.dump(root),
346+ "[:window {}\n [:box {:orientation \"horizontal\"}\n [:button {:kind \"primary\" :label \"+ 1\"}]]]"
347+ );
348+ }
349+}
added glimmer-backends/glimmer-cosmic/README.md +52 -0
new file mode 100644
@@ -0,0 +1,52 @@
1+# glimmer-cosmic
2+
3+The **libcosmic** backend for glimmer — a spike. The same hiccup that
4+[glimmer-vidya](../glimmer-vidya) paints with egui and [glimmer-tui](../glimmer-tui)
5+paints in a terminal, painted with COSMIC's widgets and theme through
6+[`crates/jolt-cosmic`](../../crates/jolt-cosmic).
7+
8+```bash
9+cargo build --release -p jolt-cosmic
10+LD_LIBRARY_PATH=../../target/release jolt counter
11+LD_LIBRARY_PATH=../../target/release jolt smoke # non-interactive, quits itself
12+```
13+
14+## What is the same
15+
16+The tree half is glimmer-vidya's. Nodes are integer handles in a Rust arena,
17+props are written across by name, handlers stay on the jolt side and are found
18+by node id when an event comes back, and a widget writes its new value into its
19+own props so a control that ignores its event still works.
20+
21+## What is not: who owns the loop
22+
23+egui lets its caller drive frames. libcosmic does not: `cosmic::app::run` takes
24+the main thread (winit insists) and keeps it until the window closes. So the
25+loop is inverted:
26+
27+```
28+main thread cosmic_run ──────────────────────────────────── returns on close
29+ ▲ wake(tree) │ click / change / toggled
30+worker (future) mount → commit → wait ─ drain, dispatch, timers → commit → wait …
31+```
32+
33+* The reconciler runs on a worker, which is the "UI thread" as glimmer sees it:
34+ `schedule` queues onto it, handlers and timers run on it.
35+* Its edits land in the arena under a mutex, but libcosmic paints a snapshot
36+ taken at `cosmic_tree_commit`, once per pass. A reconcile half-way through a
37+ patch is never on screen, and a pass that changed nothing commits nothing.
38+* The worker sleeps in `cosmic_wait` until there is an event, a `schedule`, a
39+ due timer or a close — an idle window costs neither side anything.
40+* Every call but `cosmic_run` is safe from any thread, which is not true of
41+ libvidya.
42+
43+## Spike limits
44+
45+* Tags: `:window` `:box`/`:hbox`/`:vbox` `:page` `:card` `:frame` `:scroll`
46+ `:label` `:title` `:title-2` `:dim-label` `:button` `:checkbutton` `:entry`
47+ `:separator` `:spacer` `:progress`. Anything else paints as a column.
48+* Events: `click`, `toggled`, `change`, `activate`.
49+* One window per process — winit cannot make a second event loop — so there is
50+ no REPL `start!`/`stop!` yet, and no headless test beyond the arena's own
51+ Rust tests.
52+* libcosmic is MPL-2.0 and a git dependency; see `crates/jolt-cosmic/Cargo.toml`.
new file mode 100644
@@ -0,0 +1,52 @@
1+# glimmer-cosmic
2+
3+The **libcosmic** backend for glimmer — a spike. The same hiccup that
4+[glimmer-vidya](../glimmer-vidya) paints with egui and [glimmer-tui](../glimmer-tui)
5+paints in a terminal, painted with COSMIC's widgets and theme through
6+[`crates/jolt-cosmic`](../../crates/jolt-cosmic).
7+
8+```bash
9+cargo build --release -p jolt-cosmic
10+LD_LIBRARY_PATH=../../target/release jolt counter
11+LD_LIBRARY_PATH=../../target/release jolt smoke # non-interactive, quits itself
12+```
13+
14+## What is the same
15+
16+The tree half is glimmer-vidya's. Nodes are integer handles in a Rust arena,
17+props are written across by name, handlers stay on the jolt side and are found
18+by node id when an event comes back, and a widget writes its new value into its
19+own props so a control that ignores its event still works.
20+
21+## What is not: who owns the loop
22+
23+egui lets its caller drive frames. libcosmic does not: `cosmic::app::run` takes
24+the main thread (winit insists) and keeps it until the window closes. So the
25+loop is inverted:
26+
27+```
28+main thread cosmic_run ──────────────────────────────────── returns on close
29+ ▲ wake(tree) │ click / change / toggled
30+worker (future) mount → commit → wait ─ drain, dispatch, timers → commit → wait …
31+```
32+
33+* The reconciler runs on a worker, which is the "UI thread" as glimmer sees it:
34+ `schedule` queues onto it, handlers and timers run on it.
35+* Its edits land in the arena under a mutex, but libcosmic paints a snapshot
36+ taken at `cosmic_tree_commit`, once per pass. A reconcile half-way through a
37+ patch is never on screen, and a pass that changed nothing commits nothing.
38+* The worker sleeps in `cosmic_wait` until there is an event, a `schedule`, a
39+ due timer or a close — an idle window costs neither side anything.
40+* Every call but `cosmic_run` is safe from any thread, which is not true of
41+ libvidya.
42+
43+## Spike limits
44+
45+* Tags: `:window` `:box`/`:hbox`/`:vbox` `:page` `:card` `:frame` `:scroll`
46+ `:label` `:title` `:title-2` `:dim-label` `:button` `:checkbutton` `:entry`
47+ `:separator` `:spacer` `:progress`. Anything else paints as a column.
48+* Events: `click`, `toggled`, `change`, `activate`.
49+* One window per process — winit cannot make a second event loop — so there is
50+ no REPL `start!`/`stop!` yet, and no headless test beyond the arena's own
51+ Rust tests.
52+* libcosmic is MPL-2.0 and a git dependency; see `crates/jolt-cosmic/Cargo.toml`.
added glimmer-backends/glimmer-cosmic/deps.edn +24 -0
new file mode 100644
@@ -0,0 +1,24 @@
1+{:paths ["src"]
2+
3+ ;; glimmer-cosmic is a backend for glimmer, beside glimmer-vidya and
4+ ;; glimmer-tui and against the same reconciler. It binds libjoltcosmic
5+ ;; (crates/jolt-cosmic), which keeps libvidya's retained-tree ABI and paints it
6+ ;; with libcosmic. The one difference a caller can feel is that libcosmic owns
7+ ;; the main thread, so the reconciler runs on a worker.
8+ :deps {jolt-lang/glimmer {:git/url "https://github.com/jolt-lang/glimmer"
9+ :git/tag "v0.1.0"
10+ :git/sha "5581c331c51aff989259b9e8e92ec920fe5e6741"}}
11+
12+ ;; libjoltcosmic, built from ../../crates/jolt-cosmic:
13+ ;; cargo build --release -p jolt-cosmic
14+ ;; LD_LIBRARY_PATH=../../target/release jolt -M:counter
15+ :jolt/native [{:name "joltcosmic"
16+ :linux ["libjoltcosmic.so"]}]
17+
18+ :aliases {:counter {:extra-paths ["examples"]
19+ :main-opts ["-m" "glimmer-cosmic.counter"]}
20+ :smoke {:extra-paths ["examples"]
21+ :main-opts ["-m" "glimmer-cosmic.smoke"]}}
22+
23+ :tasks {counter "jolt -M:counter"
24+ smoke "jolt -M:smoke"}}
new file mode 100644
@@ -0,0 +1,24 @@
1+{:paths ["src"]
2+
3+ ;; glimmer-cosmic is a backend for glimmer, beside glimmer-vidya and
4+ ;; glimmer-tui and against the same reconciler. It binds libjoltcosmic
5+ ;; (crates/jolt-cosmic), which keeps libvidya's retained-tree ABI and paints it
6+ ;; with libcosmic. The one difference a caller can feel is that libcosmic owns
7+ ;; the main thread, so the reconciler runs on a worker.
8+ :deps {jolt-lang/glimmer {:git/url "https://github.com/jolt-lang/glimmer"
9+ :git/tag "v0.1.0"
10+ :git/sha "5581c331c51aff989259b9e8e92ec920fe5e6741"}}
11+
12+ ;; libjoltcosmic, built from ../../crates/jolt-cosmic:
13+ ;; cargo build --release -p jolt-cosmic
14+ ;; LD_LIBRARY_PATH=../../target/release jolt -M:counter
15+ :jolt/native [{:name "joltcosmic"
16+ :linux ["libjoltcosmic.so"]}]
17+
18+ :aliases {:counter {:extra-paths ["examples"]
19+ :main-opts ["-m" "glimmer-cosmic.counter"]}
20+ :smoke {:extra-paths ["examples"]
21+ :main-opts ["-m" "glimmer-cosmic.smoke"]}}
22+
23+ :tasks {counter "jolt -M:counter"
24+ smoke "jolt -M:smoke"}}
added glimmer-backends/glimmer-cosmic/examples/glimmer_cosmic/counter.clj +23 -0
new file mode 100644
@@ -0,0 +1,23 @@
1+(ns glimmer-cosmic.counter
2+ "glimmer's counter, rendered by libcosmic.
3+
4+ The component is glimmer-vidya's, character for character; only the backend
5+ require differs."
6+ (:require [glimmer.ratom :as r :refer [atom]]
7+ [glimmer.core :as ui]
8+ [glimmer-cosmic.core]))
9+
10+(defn counter []
11+ (let [count (atom 0)]
12+ (fn []
13+ [:page {:max-width 420}
14+ [:card {}
15+ [:title {:label "Counter"}]
16+ [:label {:label (str "Count: " @count)}]
17+ [:hbox {:spacing 8}
18+ [:button {:label "- 1" :on-click #(swap! count dec)}]
19+ [:button {:label "+ 1" :kind :primary :on-click #(swap! count inc)}]
20+ [:button {:label "reset" :on-click #(reset! count 0)}]]]])))
21+
22+(defn -main [& _]
23+ (ui/run counter :title "counter" :width 480 :height 320))
new file mode 100644
@@ -0,0 +1,23 @@
1+(ns glimmer-cosmic.counter
2+ "glimmer's counter, rendered by libcosmic.
3+
4+ The component is glimmer-vidya's, character for character; only the backend
5+ require differs."
6+ (:require [glimmer.ratom :as r :refer [atom]]
7+ [glimmer.core :as ui]
8+ [glimmer-cosmic.core]))
9+
10+(defn counter []
11+ (let [count (atom 0)]
12+ (fn []
13+ [:page {:max-width 420}
14+ [:card {}
15+ [:title {:label "Counter"}]
16+ [:label {:label (str "Count: " @count)}]
17+ [:hbox {:spacing 8}
18+ [:button {:label "- 1" :on-click #(swap! count dec)}]
19+ [:button {:label "+ 1" :kind :primary :on-click #(swap! count inc)}]
20+ [:button {:label "reset" :on-click #(reset! count 0)}]]]])))
21+
22+(defn -main [& _]
23+ (ui/run counter :title "counter" :width 480 :height 320))
added glimmer-backends/glimmer-cosmic/examples/glimmer_cosmic/smoke.clj +25 -0
new file mode 100644
@@ -0,0 +1,25 @@
1+(ns glimmer-cosmic.smoke
2+ "Non-interactive: opens the window, re-renders from a timer on the worker
3+ while libcosmic paints, prints the tree, and quits. Exercises the parts of
4+ this backend that differ from glimmer-vidya — mounting before the loop, the
5+ worker, schedule, commit, and quit from off the main thread."
6+ (:require [glimmer.ratom :as r :refer [atom]]
7+ [glimmer.core :as ui]
8+ [glimmer-cosmic.core :as backend]))
9+
10+(def ticks (atom 0))
11+
12+(defn app []
13+ [:page {:max-width 420}
14+ [:card {}
15+ [:title {:label "smoke"}]
16+ [:label {:label (str "ticks: " @ticks)}]
17+ [:progress {:value (/ (min @ticks 10) 10.0) :label "re-rendering from a timer"}]
18+ [:checkbutton {:label "a checkbox" :active (odd? @ticks)}]
19+ [:entry {:placeholder "an entry"}]]])
20+
21+(defn -main [& _]
22+ (backend/every! 100 #(swap! ticks inc))
23+ (backend/after! 1500 #(do (backend/dump!) (backend/quit!)))
24+ (ui/run app :title "glimmer-cosmic smoke" :width 480 :height 360)
25+ (println "run returned; ticks =" @ticks))
new file mode 100644
@@ -0,0 +1,25 @@
1+(ns glimmer-cosmic.smoke
2+ "Non-interactive: opens the window, re-renders from a timer on the worker
3+ while libcosmic paints, prints the tree, and quits. Exercises the parts of
4+ this backend that differ from glimmer-vidya — mounting before the loop, the
5+ worker, schedule, commit, and quit from off the main thread."
6+ (:require [glimmer.ratom :as r :refer [atom]]
7+ [glimmer.core :as ui]
8+ [glimmer-cosmic.core :as backend]))
9+
10+(def ticks (atom 0))
11+
12+(defn app []
13+ [:page {:max-width 420}
14+ [:card {}
15+ [:title {:label "smoke"}]
16+ [:label {:label (str "ticks: " @ticks)}]
17+ [:progress {:value (/ (min @ticks 10) 10.0) :label "re-rendering from a timer"}]
18+ [:checkbutton {:label "a checkbox" :active (odd? @ticks)}]
19+ [:entry {:placeholder "an entry"}]]])
20+
21+(defn -main [& _]
22+ (backend/every! 100 #(swap! ticks inc))
23+ (backend/after! 1500 #(do (backend/dump!) (backend/quit!)))
24+ (ui/run app :title "glimmer-cosmic smoke" :width 480 :height 360)
25+ (println "run returned; ticks =" @ticks))
added glimmer-backends/glimmer-cosmic/src/glimmer_cosmic/core.clj +284 -0
new file mode 100644
@@ -0,0 +1,284 @@
1+(ns glimmer-cosmic.core
2+ "The libcosmic backend for glimmer. Requiring this namespace installs it:
3+
4+ (ns myapp
5+ (:require [glimmer.core :as ui]
6+ [glimmer-cosmic.core])) ; installs this backend
7+
8+ (defn -main [& _] (ui/run my-app :title \"myapp\"))
9+
10+ The tree half is glimmer-vidya's: node handles in a Rust arena, props written
11+ across, handlers kept here and found by node id when an event comes back.
12+
13+ The loop half is inverted. libcosmic will not be driven a frame at a time —
14+ it takes the main thread and keeps it until the window closes — so `run`
15+ blocks the main thread there and the reconciler lives on a worker. The worker
16+ is \"the UI thread\" as far as glimmer is concerned: `schedule` queues onto it,
17+ handlers run on it, and at the end of each pass it commits, which is the only
18+ moment libcosmic sees what changed."
19+ (:require [glimmer.backend :as b]
20+ [glimmer-cosmic.ffi :as ffi]))
21+
22+;; Node id -> the :on-* props that node was last rendered with.
23+(defonce ^:private handlers (atom {}))
24+
25+;; Work posted from other threads, run on the worker at the top of a pass.
26+(defonce ^:private pending (atom []))
27+
28+(defonce ^:private quit-requested (atom false))
29+
30+;; --- props -------------------------------------------------------------------
31+(def ^:private tag-orientation {:hbox "horizontal" :vbox "vertical"})
32+
33+(defn- handler-key? [k]
34+ (let [s (name k)]
35+ (and (> (count s) 3) (= "on-" (subs s 0 3)))))
36+
37+(defn- set-prop! [node k v]
38+ (let [key (name k)]
39+ (cond
40+ (nil? v) nil
41+ (true? v) (ffi/node-set-bool! node key true)
42+ (false? v) (ffi/node-set-bool! node key false)
43+ (number? v) (ffi/node-set-num! node key (double v))
44+ (string? v) (ffi/node-set-str! node key v)
45+ (keyword? v) (ffi/node-set-str! node key (name v))
46+ :else (ffi/node-set-str! node key (str v)))))
47+
48+(defn- write-props!
49+ "Replace a node's props with `props`, cleared first so a prop a re-render
50+ stops setting is gone — and so the value libcosmic wrote back when someone
51+ typed is overwritten by the component's own state."
52+ [node tag props]
53+ (ffi/node-clear-props! node)
54+ (when-let [orientation (tag-orientation tag)]
55+ (when-not (contains? props :orientation)
56+ (ffi/node-set-str! node "orientation" orientation)))
57+ (doseq [[k v] props]
58+ (when-not (handler-key? k)
59+ (set-prop! node k v)))
60+ (swap! handlers assoc node
61+ (reduce (fn [acc [k v]]
62+ (if (and (handler-key? k) (fn? v)) (assoc acc k v) acc))
63+ {}
64+ props))
65+ nil)
66+
67+(defn- forget-dead-handlers! []
68+ (swap! handlers
69+ (fn [m]
70+ (reduce (fn [acc [id hs]]
71+ (if (ffi/node-exists? id) (assoc acc id hs) acc))
72+ {}
73+ m)))
74+ nil)
75+
76+;; --- the backend operations --------------------------------------------------
77+(defn- create! [tag props]
78+ (let [node (ffi/node-new (name tag))]
79+ (when (zero? node)
80+ (throw (ex-info "jolt-cosmic could not allocate a node" {:tag tag})))
81+ (write-props! node tag props)
82+ node))
83+
84+(defn- apply-props! [tag node props] (write-props! node tag props))
85+
86+(defn- append-child! [_parent-tag parent child]
87+ (ffi/node-append! parent child)
88+ nil)
89+
90+(defn- remove-child! [_parent-tag parent child]
91+ (ffi/node-remove! parent child)
92+ (forget-dead-handlers!)
93+ nil)
94+
95+(defn- replace-child! [_parent-tag parent old-child new-child]
96+ (ffi/node-replace! parent old-child new-child)
97+ (forget-dead-handlers!)
98+ nil)
99+
100+(defn- reorder-child! [_parent-tag parent child sibling]
101+ (ffi/node-insert-after! parent child (or sibling 0))
102+ nil)
103+
104+;; --- the worker --------------------------------------------------------------
105+(defn- schedule
106+ "glimmer.backend's :schedule. Queues `work` for the worker and wakes it, so a
107+ `swap!` from anywhere re-renders on the next pass rather than the next
108+ timeout."
109+ [work]
110+ (swap! pending conj work)
111+ (ffi/wake!)
112+ nil)
113+
114+(defn- drain! []
115+ (loop []
116+ (let [q @pending]
117+ (when (seq q)
118+ (if (compare-and-set! pending q [])
119+ (doseq [f q] (f))
120+ (recur))))))
121+
122+;; --- timers ------------------------------------------------------------------
123+(defonce ^:private timers (atom {:next-id 0 :entries {}}))
124+
125+(defn- now-ms [] (System/currentTimeMillis))
126+
127+(defn- add-timer! [ms every? f]
128+ (let [id (:next-id (swap! timers update :next-id inc))]
129+ (swap! timers assoc-in [:entries id]
130+ {:due (+ (now-ms) ms) :every (when every? ms) :f f})
131+ (ffi/wake!)
132+ id))
133+
134+(defn after!
135+ "Run `f` on the worker in about `ms` milliseconds. Returns an id for
136+ `cancel!`."
137+ [ms f] (add-timer! ms false f))
138+
139+(defn every!
140+ "Run `f` on the worker about every `ms` milliseconds until cancelled."
141+ [ms f] (add-timer! ms true f))
142+
143+(defn cancel! [id] (swap! timers update :entries dissoc id) nil)
144+
145+(defn cancel-all! [] (swap! timers assoc :entries {}) nil)
146+
147+(defn- pump-timers! []
148+ (let [t (now-ms)
149+ due (reduce (fn [acc [id e]] (if (<= (:due e) t) (conj acc [id e]) acc))
150+ []
151+ (:entries @timers))]
152+ (doseq [[id e] due]
153+ (if-let [period (:every e)]
154+ (swap! timers assoc-in [:entries id :due] (+ t period))
155+ (swap! timers update :entries dissoc id))
156+ ((:f e)))
157+ nil))
158+
159+(defn- next-timeout
160+ "How long the worker may sleep: until the nearest timer, capped so a quit or
161+ an auto-quit deadline is noticed within a quarter second."
162+ []
163+ (let [dues (map :due (vals (:entries @timers)))]
164+ (if (seq dues)
165+ (max 0 (min 250 (- (apply min dues) (now-ms))))
166+ 250)))
167+
168+;; --- events ------------------------------------------------------------------
169+(defn- dispatch-events! []
170+ (loop []
171+ (when (ffi/poll-event!)
172+ (let [node (ffi/event-node)
173+ kind (ffi/event-name)
174+ hs (get @handlers node)]
175+ (case kind
176+ "click" (when-let [f (:on-click hs)] (f))
177+ "toggled" (when-let [f (:on-toggled hs)] (f))
178+ "change" (when-let [f (:on-change hs)] (f (ffi/event-text)))
179+ "activate" (when-let [f (:on-activate hs)] (f))
180+ nil))
181+ (recur))))
182+
183+;; --- running -----------------------------------------------------------------
184+(defn- clear-children! [node]
185+ (loop []
186+ (when (pos? (ffi/node-child-count node))
187+ (ffi/node-remove! node (ffi/node-child-at node 0))
188+ (recur)))
189+ (forget-dead-handlers!)
190+ nil)
191+
192+(defn quit!
193+ "Close the window; `run` returns once libcosmic has."
194+ []
195+ (reset! quit-requested true)
196+ (ffi/quit!)
197+ nil)
198+
199+(defn- work-loop
200+ "The worker: sleep until something happens, then run queued work, handlers
201+ and timers, and publish whatever they changed in one commit."
202+ [started auto-quit-ms]
203+ (try
204+ (loop []
205+ (ffi/wait! (next-timeout))
206+ (drain!)
207+ (dispatch-events!)
208+ (pump-timers!)
209+ (ffi/commit!)
210+ (when (and auto-quit-ms (>= (- (now-ms) started) auto-quit-ms))
211+ (quit!))
212+ (when-not (ffi/should-close?)
213+ (recur)))
214+ (finally
215+ ;; A handler that throws takes the window with it, rather than leaving
216+ ;; one on screen that nothing is listening to.
217+ (ffi/quit!))))
218+
219+(defn- run!
220+ "glimmer.backend's :run. Mounts the root component, starts the worker, and
221+ blocks the calling thread — which must be the main thread — in libcosmic
222+ until the window closes or `quit!` is called.
223+
224+ Options (on top of glimmer's own :title :width :height :auto-quit-ms):
225+ :mode :system (default), :dark or :light"
226+ [opts mount-root!]
227+ (let [{:keys [title width height mode auto-quit-ms]
228+ :or {title "glimmer" width 900 height 640}} opts
229+ root (ffi/tree-root)
230+ started (now-ms)]
231+ (reset! quit-requested false)
232+ ;; Mounted here, before the loop, so it reconciles inline; the first commit
233+ ;; is what libcosmic opens with.
234+ (clear-children! root)
235+ (mount-root! root :window)
236+ (ffi/commit!)
237+ (reset! b/loop-running? true)
238+ (let [worker (future (work-loop started auto-quit-ms))
239+ status (ffi/run! width height title
240+ (case mode
241+ :dark ffi/dark-mode
242+ :light ffi/light-mode
243+ ffi/system-mode))]
244+ (try
245+ ;; Rethrows whatever ended the worker, on the thread that called run.
246+ @worker
247+ (finally
248+ (reset! b/loop-running? false)
249+ (cancel-all!)
250+ (reset! handlers {})))
251+ (when-not (zero? status)
252+ (throw (ex-info "jolt-cosmic's window did not run cleanly"
253+ {:status status}))))))
254+
255+;; --- looking at what was rendered --------------------------------------------
256+(defn dump-str
257+ "The tree as it is in the arena — after the reconciler, before any commit —
258+ as hiccup text."
259+ ([] (dump-str 0))
260+ ([node] (ffi/tree-dump node)))
261+
262+(defn dump
263+ ([] (dump 0))
264+ ([node] (read-string (dump-str node))))
265+
266+(defn dump!
267+ ([] (dump! 0))
268+ ([node] (println (dump-str node)) nil))
269+
270+;; --- the backend -------------------------------------------------------------
271+(def backend
272+ {:name :cosmic
273+ :create! create!
274+ :apply-props! apply-props!
275+ :append-child! append-child!
276+ :remove-child! remove-child!
277+ :replace-child! replace-child!
278+ :reorder-child! reorder-child!
279+ :schedule schedule
280+ :run run!})
281+
282+(defn install! [] (b/register! backend) nil)
283+
284+(defonce ^:private installed (do (install!) true))
new file mode 100644
@@ -0,0 +1,284 @@
1+(ns glimmer-cosmic.core
2+ "The libcosmic backend for glimmer. Requiring this namespace installs it:
3+
4+ (ns myapp
5+ (:require [glimmer.core :as ui]
6+ [glimmer-cosmic.core])) ; installs this backend
7+
8+ (defn -main [& _] (ui/run my-app :title \"myapp\"))
9+
10+ The tree half is glimmer-vidya's: node handles in a Rust arena, props written
11+ across, handlers kept here and found by node id when an event comes back.
12+
13+ The loop half is inverted. libcosmic will not be driven a frame at a time —
14+ it takes the main thread and keeps it until the window closes — so `run`
15+ blocks the main thread there and the reconciler lives on a worker. The worker
16+ is \"the UI thread\" as far as glimmer is concerned: `schedule` queues onto it,
17+ handlers run on it, and at the end of each pass it commits, which is the only
18+ moment libcosmic sees what changed."
19+ (:require [glimmer.backend :as b]
20+ [glimmer-cosmic.ffi :as ffi]))
21+
22+;; Node id -> the :on-* props that node was last rendered with.
23+(defonce ^:private handlers (atom {}))
24+
25+;; Work posted from other threads, run on the worker at the top of a pass.
26+(defonce ^:private pending (atom []))
27+
28+(defonce ^:private quit-requested (atom false))
29+
30+;; --- props -------------------------------------------------------------------
31+(def ^:private tag-orientation {:hbox "horizontal" :vbox "vertical"})
32+
33+(defn- handler-key? [k]
34+ (let [s (name k)]
35+ (and (> (count s) 3) (= "on-" (subs s 0 3)))))
36+
37+(defn- set-prop! [node k v]
38+ (let [key (name k)]
39+ (cond
40+ (nil? v) nil
41+ (true? v) (ffi/node-set-bool! node key true)
42+ (false? v) (ffi/node-set-bool! node key false)
43+ (number? v) (ffi/node-set-num! node key (double v))
44+ (string? v) (ffi/node-set-str! node key v)
45+ (keyword? v) (ffi/node-set-str! node key (name v))
46+ :else (ffi/node-set-str! node key (str v)))))
47+
48+(defn- write-props!
49+ "Replace a node's props with `props`, cleared first so a prop a re-render
50+ stops setting is gone — and so the value libcosmic wrote back when someone
51+ typed is overwritten by the component's own state."
52+ [node tag props]
53+ (ffi/node-clear-props! node)
54+ (when-let [orientation (tag-orientation tag)]
55+ (when-not (contains? props :orientation)
56+ (ffi/node-set-str! node "orientation" orientation)))
57+ (doseq [[k v] props]
58+ (when-not (handler-key? k)
59+ (set-prop! node k v)))
60+ (swap! handlers assoc node
61+ (reduce (fn [acc [k v]]
62+ (if (and (handler-key? k) (fn? v)) (assoc acc k v) acc))
63+ {}
64+ props))
65+ nil)
66+
67+(defn- forget-dead-handlers! []
68+ (swap! handlers
69+ (fn [m]
70+ (reduce (fn [acc [id hs]]
71+ (if (ffi/node-exists? id) (assoc acc id hs) acc))
72+ {}
73+ m)))
74+ nil)
75+
76+;; --- the backend operations --------------------------------------------------
77+(defn- create! [tag props]
78+ (let [node (ffi/node-new (name tag))]
79+ (when (zero? node)
80+ (throw (ex-info "jolt-cosmic could not allocate a node" {:tag tag})))
81+ (write-props! node tag props)
82+ node))
83+
84+(defn- apply-props! [tag node props] (write-props! node tag props))
85+
86+(defn- append-child! [_parent-tag parent child]
87+ (ffi/node-append! parent child)
88+ nil)
89+
90+(defn- remove-child! [_parent-tag parent child]
91+ (ffi/node-remove! parent child)
92+ (forget-dead-handlers!)
93+ nil)
94+
95+(defn- replace-child! [_parent-tag parent old-child new-child]
96+ (ffi/node-replace! parent old-child new-child)
97+ (forget-dead-handlers!)
98+ nil)
99+
100+(defn- reorder-child! [_parent-tag parent child sibling]
101+ (ffi/node-insert-after! parent child (or sibling 0))
102+ nil)
103+
104+;; --- the worker --------------------------------------------------------------
105+(defn- schedule
106+ "glimmer.backend's :schedule. Queues `work` for the worker and wakes it, so a
107+ `swap!` from anywhere re-renders on the next pass rather than the next
108+ timeout."
109+ [work]
110+ (swap! pending conj work)
111+ (ffi/wake!)
112+ nil)
113+
114+(defn- drain! []
115+ (loop []
116+ (let [q @pending]
117+ (when (seq q)
118+ (if (compare-and-set! pending q [])
119+ (doseq [f q] (f))
120+ (recur))))))
121+
122+;; --- timers ------------------------------------------------------------------
123+(defonce ^:private timers (atom {:next-id 0 :entries {}}))
124+
125+(defn- now-ms [] (System/currentTimeMillis))
126+
127+(defn- add-timer! [ms every? f]
128+ (let [id (:next-id (swap! timers update :next-id inc))]
129+ (swap! timers assoc-in [:entries id]
130+ {:due (+ (now-ms) ms) :every (when every? ms) :f f})
131+ (ffi/wake!)
132+ id))
133+
134+(defn after!
135+ "Run `f` on the worker in about `ms` milliseconds. Returns an id for
136+ `cancel!`."
137+ [ms f] (add-timer! ms false f))
138+
139+(defn every!
140+ "Run `f` on the worker about every `ms` milliseconds until cancelled."
141+ [ms f] (add-timer! ms true f))
142+
143+(defn cancel! [id] (swap! timers update :entries dissoc id) nil)
144+
145+(defn cancel-all! [] (swap! timers assoc :entries {}) nil)
146+
147+(defn- pump-timers! []
148+ (let [t (now-ms)
149+ due (reduce (fn [acc [id e]] (if (<= (:due e) t) (conj acc [id e]) acc))
150+ []
151+ (:entries @timers))]
152+ (doseq [[id e] due]
153+ (if-let [period (:every e)]
154+ (swap! timers assoc-in [:entries id :due] (+ t period))
155+ (swap! timers update :entries dissoc id))
156+ ((:f e)))
157+ nil))
158+
159+(defn- next-timeout
160+ "How long the worker may sleep: until the nearest timer, capped so a quit or
161+ an auto-quit deadline is noticed within a quarter second."
162+ []
163+ (let [dues (map :due (vals (:entries @timers)))]
164+ (if (seq dues)
165+ (max 0 (min 250 (- (apply min dues) (now-ms))))
166+ 250)))
167+
168+;; --- events ------------------------------------------------------------------
169+(defn- dispatch-events! []
170+ (loop []
171+ (when (ffi/poll-event!)
172+ (let [node (ffi/event-node)
173+ kind (ffi/event-name)
174+ hs (get @handlers node)]
175+ (case kind
176+ "click" (when-let [f (:on-click hs)] (f))
177+ "toggled" (when-let [f (:on-toggled hs)] (f))
178+ "change" (when-let [f (:on-change hs)] (f (ffi/event-text)))
179+ "activate" (when-let [f (:on-activate hs)] (f))
180+ nil))
181+ (recur))))
182+
183+;; --- running -----------------------------------------------------------------
184+(defn- clear-children! [node]
185+ (loop []
186+ (when (pos? (ffi/node-child-count node))
187+ (ffi/node-remove! node (ffi/node-child-at node 0))
188+ (recur)))
189+ (forget-dead-handlers!)
190+ nil)
191+
192+(defn quit!
193+ "Close the window; `run` returns once libcosmic has."
194+ []
195+ (reset! quit-requested true)
196+ (ffi/quit!)
197+ nil)
198+
199+(defn- work-loop
200+ "The worker: sleep until something happens, then run queued work, handlers
201+ and timers, and publish whatever they changed in one commit."
202+ [started auto-quit-ms]
203+ (try
204+ (loop []
205+ (ffi/wait! (next-timeout))
206+ (drain!)
207+ (dispatch-events!)
208+ (pump-timers!)
209+ (ffi/commit!)
210+ (when (and auto-quit-ms (>= (- (now-ms) started) auto-quit-ms))
211+ (quit!))
212+ (when-not (ffi/should-close?)
213+ (recur)))
214+ (finally
215+ ;; A handler that throws takes the window with it, rather than leaving
216+ ;; one on screen that nothing is listening to.
217+ (ffi/quit!))))
218+
219+(defn- run!
220+ "glimmer.backend's :run. Mounts the root component, starts the worker, and
221+ blocks the calling thread — which must be the main thread — in libcosmic
222+ until the window closes or `quit!` is called.
223+
224+ Options (on top of glimmer's own :title :width :height :auto-quit-ms):
225+ :mode :system (default), :dark or :light"
226+ [opts mount-root!]
227+ (let [{:keys [title width height mode auto-quit-ms]
228+ :or {title "glimmer" width 900 height 640}} opts
229+ root (ffi/tree-root)
230+ started (now-ms)]
231+ (reset! quit-requested false)
232+ ;; Mounted here, before the loop, so it reconciles inline; the first commit
233+ ;; is what libcosmic opens with.
234+ (clear-children! root)
235+ (mount-root! root :window)
236+ (ffi/commit!)
237+ (reset! b/loop-running? true)
238+ (let [worker (future (work-loop started auto-quit-ms))
239+ status (ffi/run! width height title
240+ (case mode
241+ :dark ffi/dark-mode
242+ :light ffi/light-mode
243+ ffi/system-mode))]
244+ (try
245+ ;; Rethrows whatever ended the worker, on the thread that called run.
246+ @worker
247+ (finally
248+ (reset! b/loop-running? false)
249+ (cancel-all!)
250+ (reset! handlers {})))
251+ (when-not (zero? status)
252+ (throw (ex-info "jolt-cosmic's window did not run cleanly"
253+ {:status status}))))))
254+
255+;; --- looking at what was rendered --------------------------------------------
256+(defn dump-str
257+ "The tree as it is in the arena — after the reconciler, before any commit —
258+ as hiccup text."
259+ ([] (dump-str 0))
260+ ([node] (ffi/tree-dump node)))
261+
262+(defn dump
263+ ([] (dump 0))
264+ ([node] (read-string (dump-str node))))
265+
266+(defn dump!
267+ ([] (dump! 0))
268+ ([node] (println (dump-str node)) nil))
269+
270+;; --- the backend -------------------------------------------------------------
271+(def backend
272+ {:name :cosmic
273+ :create! create!
274+ :apply-props! apply-props!
275+ :append-child! append-child!
276+ :remove-child! remove-child!
277+ :replace-child! replace-child!
278+ :reorder-child! reorder-child!
279+ :schedule schedule
280+ :run run!})
281+
282+(defn install! [] (b/register! backend) nil)
283+
284+(defonce ^:private installed (do (install!) true))
added glimmer-backends/glimmer-cosmic/src/glimmer_cosmic/ffi.clj +84 -0
new file mode 100644
@@ -0,0 +1,84 @@
1+(ns glimmer-cosmic.ffi
2+ "Raw bindings for libjoltcosmic (`crates/jolt-cosmic/src/lib.rs`).
3+
4+ The node half is libvidya's tree ABI under a `cosmic_` prefix. The loop half
5+ is not: libcosmic owns the main thread, so `run!` blocks there while the
6+ reconciler works from another thread, and its edits are published with
7+ `commit!`.
8+
9+ **Any thread may call anything here except `raw-run`.** The arena sits behind
10+ a mutex; nothing is thread-local.
11+
12+ **Strings returned are borrowed** until the next call of the same family —
13+ jolt copies a `:string` return as it crosses, so holding the value is safe."
14+ (:require [jolt.ffi :as ffi]))
15+
16+;; --- the loop ----------------------------------------------------------------
17+;; :blocking releases the calling thread to Chez for the life of the call.
18+;; Without it, the worker would stall at its first collection waiting on a
19+;; thread parked inside libcosmic. A :blocking procedure may not take a string,
20+;; which is why the title is set by a call of its own.
21+(ffi/defcfn set-title! "cosmic_set_title" [:string] :void)
22+(ffi/defcfn raw-run "cosmic_run" [:int :int :int] :int {:blocking true})
23+(ffi/defcfn raw-wait "cosmic_wait" [:int] :int {:blocking true})
24+(ffi/defcfn wake! "cosmic_wake" [] :void)
25+(ffi/defcfn quit! "cosmic_quit" [] :void)
26+(ffi/defcfn raw-should-close "cosmic_should_close" [] :int)
27+(ffi/defcfn raw-commit "cosmic_tree_commit" [] :int)
28+
29+;; --- the tree ----------------------------------------------------------------
30+(ffi/defcfn tree-root "cosmic_tree_root" [] :int)
31+(ffi/defcfn node-new "cosmic_node_new" [:string] :int)
32+(ffi/defcfn node-free! "cosmic_node_free" [:int] :void)
33+(ffi/defcfn raw-node-exists "cosmic_node_exists" [:int] :int)
34+
35+(ffi/defcfn node-set-str! "cosmic_node_set_str" [:int :string :string] :void)
36+(ffi/defcfn node-set-num! "cosmic_node_set_num" [:int :string :double] :void)
37+(ffi/defcfn raw-node-set-bool "cosmic_node_set_bool" [:int :string :int] :void)
38+(ffi/defcfn node-clear-props! "cosmic_node_clear_props" [:int] :void)
39+
40+(ffi/defcfn node-tag "cosmic_node_tag" [:int] :string)
41+(ffi/defcfn node-child-count "cosmic_node_child_count" [:int] :int)
42+(ffi/defcfn node-child-at "cosmic_node_child_at" [:int :int] :int)
43+(ffi/defcfn tree-dump "cosmic_tree_dump" [:int] :string)
44+
45+(ffi/defcfn raw-node-append "cosmic_node_append" [:int :int] :int)
46+(ffi/defcfn node-remove! "cosmic_node_remove" [:int :int] :void)
47+(ffi/defcfn raw-node-insert-after "cosmic_node_insert_after" [:int :int :int] :int)
48+(ffi/defcfn raw-node-replace "cosmic_node_replace" [:int :int :int] :int)
49+
50+;; --- events ------------------------------------------------------------------
51+(ffi/defcfn raw-poll-event "cosmic_tree_poll_event" [] :int)
52+(ffi/defcfn event-node "cosmic_tree_event_node" [] :int)
53+(ffi/defcfn event-name "cosmic_tree_event_name" [] :string)
54+(ffi/defcfn event-text "cosmic_tree_event_text" [] :string)
55+(ffi/defcfn event-num "cosmic_tree_event_num" [] :double)
56+
57+;; --- the int/bool seam -------------------------------------------------------
58+(def system-mode 0)
59+(def dark-mode 1)
60+(def light-mode 2)
61+
62+(defn run!
63+ "Open the window and block in libcosmic until it closes. Main thread only.
64+ Answers 0 on a clean exit, 1 on an error, 2 if a window already ran in this
65+ process."
66+ [width height title mode]
67+ (set-title! title)
68+ (raw-run width height mode))
69+
70+(defn wait!
71+ "Block up to `ms` for an event, a `wake!`, or the window closing. True when
72+ an event is waiting."
73+ [ms]
74+ (not (zero? (raw-wait ms))))
75+
76+(defn commit! [] (not (zero? (raw-commit))))
77+(defn should-close? [] (not (zero? (raw-should-close))))
78+(defn node-exists? [node] (not (zero? (raw-node-exists node))))
79+(defn node-set-bool! [node key value] (raw-node-set-bool node key (if value 1 0)))
80+(defn node-append! [parent child] (not (zero? (raw-node-append parent child))))
81+(defn node-insert-after! [parent child sibling]
82+ (not (zero? (raw-node-insert-after parent child sibling))))
83+(defn node-replace! [parent old new] (not (zero? (raw-node-replace parent old new))))
84+(defn poll-event! [] (not (zero? (raw-poll-event))))
new file mode 100644
@@ -0,0 +1,84 @@
1+(ns glimmer-cosmic.ffi
2+ "Raw bindings for libjoltcosmic (`crates/jolt-cosmic/src/lib.rs`).
3+
4+ The node half is libvidya's tree ABI under a `cosmic_` prefix. The loop half
5+ is not: libcosmic owns the main thread, so `run!` blocks there while the
6+ reconciler works from another thread, and its edits are published with
7+ `commit!`.
8+
9+ **Any thread may call anything here except `raw-run`.** The arena sits behind
10+ a mutex; nothing is thread-local.
11+
12+ **Strings returned are borrowed** until the next call of the same family —
13+ jolt copies a `:string` return as it crosses, so holding the value is safe."
14+ (:require [jolt.ffi :as ffi]))
15+
16+;; --- the loop ----------------------------------------------------------------
17+;; :blocking releases the calling thread to Chez for the life of the call.
18+;; Without it, the worker would stall at its first collection waiting on a
19+;; thread parked inside libcosmic. A :blocking procedure may not take a string,
20+;; which is why the title is set by a call of its own.
21+(ffi/defcfn set-title! "cosmic_set_title" [:string] :void)
22+(ffi/defcfn raw-run "cosmic_run" [:int :int :int] :int {:blocking true})
23+(ffi/defcfn raw-wait "cosmic_wait" [:int] :int {:blocking true})
24+(ffi/defcfn wake! "cosmic_wake" [] :void)
25+(ffi/defcfn quit! "cosmic_quit" [] :void)
26+(ffi/defcfn raw-should-close "cosmic_should_close" [] :int)
27+(ffi/defcfn raw-commit "cosmic_tree_commit" [] :int)
28+
29+;; --- the tree ----------------------------------------------------------------
30+(ffi/defcfn tree-root "cosmic_tree_root" [] :int)
31+(ffi/defcfn node-new "cosmic_node_new" [:string] :int)
32+(ffi/defcfn node-free! "cosmic_node_free" [:int] :void)
33+(ffi/defcfn raw-node-exists "cosmic_node_exists" [:int] :int)
34+
35+(ffi/defcfn node-set-str! "cosmic_node_set_str" [:int :string :string] :void)
36+(ffi/defcfn node-set-num! "cosmic_node_set_num" [:int :string :double] :void)
37+(ffi/defcfn raw-node-set-bool "cosmic_node_set_bool" [:int :string :int] :void)
38+(ffi/defcfn node-clear-props! "cosmic_node_clear_props" [:int] :void)
39+
40+(ffi/defcfn node-tag "cosmic_node_tag" [:int] :string)
41+(ffi/defcfn node-child-count "cosmic_node_child_count" [:int] :int)
42+(ffi/defcfn node-child-at "cosmic_node_child_at" [:int :int] :int)
43+(ffi/defcfn tree-dump "cosmic_tree_dump" [:int] :string)
44+
45+(ffi/defcfn raw-node-append "cosmic_node_append" [:int :int] :int)
46+(ffi/defcfn node-remove! "cosmic_node_remove" [:int :int] :void)
47+(ffi/defcfn raw-node-insert-after "cosmic_node_insert_after" [:int :int :int] :int)
48+(ffi/defcfn raw-node-replace "cosmic_node_replace" [:int :int :int] :int)
49+
50+;; --- events ------------------------------------------------------------------
51+(ffi/defcfn raw-poll-event "cosmic_tree_poll_event" [] :int)
52+(ffi/defcfn event-node "cosmic_tree_event_node" [] :int)
53+(ffi/defcfn event-name "cosmic_tree_event_name" [] :string)
54+(ffi/defcfn event-text "cosmic_tree_event_text" [] :string)
55+(ffi/defcfn event-num "cosmic_tree_event_num" [] :double)
56+
57+;; --- the int/bool seam -------------------------------------------------------
58+(def system-mode 0)
59+(def dark-mode 1)
60+(def light-mode 2)
61+
62+(defn run!
63+ "Open the window and block in libcosmic until it closes. Main thread only.
64+ Answers 0 on a clean exit, 1 on an error, 2 if a window already ran in this
65+ process."
66+ [width height title mode]
67+ (set-title! title)
68+ (raw-run width height mode))
69+
70+(defn wait!
71+ "Block up to `ms` for an event, a `wake!`, or the window closing. True when
72+ an event is waiting."
73+ [ms]
74+ (not (zero? (raw-wait ms))))
75+
76+(defn commit! [] (not (zero? (raw-commit))))
77+(defn should-close? [] (not (zero? (raw-should-close))))
78+(defn node-exists? [node] (not (zero? (raw-node-exists node))))
79+(defn node-set-bool! [node key value] (raw-node-set-bool node key (if value 1 0)))
80+(defn node-append! [parent child] (not (zero? (raw-node-append parent child))))
81+(defn node-insert-after! [parent child sibling]
82+ (not (zero? (raw-node-insert-after parent child sibling))))
83+(defn node-replace! [parent old new] (not (zero? (raw-node-replace parent old new))))
84+(defn poll-event! [] (not (zero? (raw-poll-event))))