From 69ed612077a40f3689e3b54c2ae208ffb89ec824 Mon Sep 17 00:00:00 2001 From: vicrodh <103399283+vicrodh@users.noreply.github.com> Date: Wed, 26 Aug 2026 11:10:18 -0600 Subject: [PATCH] refactor(frontend): retire Slint application cx --- crates/Cargo.lock | 3657 +-- crates/Cargo.toml | 73 +- crates/qbz-app/src/session_persist.rs | 7 +- crates/qbz-dac-wizard-core/Cargo.toml | 2 +- crates/qbz-dac-wizard-core/src/lib.rs | 24 +- crates/qbz-dac-wizard/Cargo.toml | 18 - crates/qbz-dac-wizard/src/lib.rs | 794 - crates/qbz-models/Cargo.toml | 2 +- .../src/purchases_service.rs | 78 - crates/qbz-qt/Cargo.toml | 111 +- crates/qbz-slint-common/Cargo.toml | 11 - crates/qbz-slint-common/src/lib.rs | 3 - crates/qbz-slint-common/src/toast.rs | 115 - crates/qbz-source/Cargo.toml | 4 +- crates/qbz-ui/Cargo.toml | 22 - crates/qbz-ui/build.rs | 22 - crates/qbz-ui/src/lib.rs | 8 - .../qbz-ui/ui/album/AlbumBookletModal.slint | 309 - .../qbz-ui/ui/album/AlbumCreditsModal.slint | 476 - crates/qbz-ui/ui/album/AlbumPageView.slint | 1260 - crates/qbz-ui/ui/album/LocalAlbumView.slint | 617 - crates/qbz-ui/ui/album/TrackInfoModal.slint | 364 - crates/qbz-ui/ui/app.slint | 305 - crates/qbz-ui/ui/artist/ArtistPageView.slint | 1880 -- .../qbz-ui/ui/artist/ArtistReleasesView.slint | 257 - crates/qbz-ui/ui/artist/ReleaseGrid.slint | 142 - crates/qbz-ui/ui/assets/cd.svg | 15 - .../ui/assets/fonts/Inter_18pt-Bold.ttf | Bin 344152 -> 0 bytes .../ui/assets/fonts/Inter_18pt-Medium.ttf | Bin 343200 -> 0 bytes .../ui/assets/fonts/Inter_18pt-Regular.ttf | Bin 342680 -> 0 bytes .../ui/assets/fonts/Inter_18pt-SemiBold.ttf | Bin 343828 -> 0 bytes crates/qbz-ui/ui/assets/hi-res.svg | 293 - crates/qbz-ui/ui/assets/icons/add-to-list.svg | 7 - .../ui/assets/icons/align-start-vertical.svg | 5 - .../ui/assets/icons/apple-music-logo.svg | 6 - crates/qbz-ui/ui/assets/icons/arrow-left.svg | 4 - .../qbz-ui/ui/assets/icons/arrow-up-down.svg | 6 - crates/qbz-ui/ui/assets/icons/audio-lines.svg | 8 - crates/qbz-ui/ui/assets/icons/award.svg | 5 - crates/qbz-ui/ui/assets/icons/blind-eye.svg | 2 - crates/qbz-ui/ui/assets/icons/book-open.svg | 4 - .../qbz-ui/ui/assets/icons/brand-discogs.svg | 2 - .../qbz-ui/ui/assets/icons/brand-lastfm.svg | 7 - .../ui/assets/icons/brand-musicbrainz.svg | 2 - crates/qbz-ui/ui/assets/icons/bug.svg | 13 - crates/qbz-ui/ui/assets/icons/captions.svg | 7 - .../qbz-ui/ui/assets/icons/cassette-tape.svg | 7 - crates/qbz-ui/ui/assets/icons/cassette.svg | 2 - crates/qbz-ui/ui/assets/icons/cast.svg | 6 - crates/qbz-ui/ui/assets/icons/cat.svg | 18 - .../ui/assets/icons/chart-no-axes-column.svg | 5 - crates/qbz-ui/ui/assets/icons/check.svg | 3 - .../qbz-ui/ui/assets/icons/chevron-down.svg | 3 - .../qbz-ui/ui/assets/icons/chevron-left.svg | 3 - .../qbz-ui/ui/assets/icons/chevron-right.svg | 3 - crates/qbz-ui/ui/assets/icons/chevron-up.svg | 3 - .../qbz-ui/ui/assets/icons/circle-alert.svg | 5 - .../ui/assets/icons/circle-check-big.svg | 4 - crates/qbz-ui/ui/assets/icons/circle-dot.svg | 4 - crates/qbz-ui/ui/assets/icons/circle-stop.svg | 4 - crates/qbz-ui/ui/assets/icons/circle.svg | 3 - crates/qbz-ui/ui/assets/icons/clock.svg | 4 - .../qbz-ui/ui/assets/icons/cloud-download.svg | 5 - crates/qbz-ui/ui/assets/icons/cloud-off.svg | 5 - .../qbz-ui/ui/assets/icons/cloud-upload.svg | 5 - crates/qbz-ui/ui/assets/icons/collection.svg | 30 - crates/qbz-ui/ui/assets/icons/compass.svg | 4 - crates/qbz-ui/ui/assets/icons/copy.svg | 1 - crates/qbz-ui/ui/assets/icons/crown.svg | 1 - crates/qbz-ui/ui/assets/icons/deezer-logo.svg | 8 - crates/qbz-ui/ui/assets/icons/disc-3.svg | 6 - crates/qbz-ui/ui/assets/icons/disc-album.svg | 5 - crates/qbz-ui/ui/assets/icons/disc.svg | 4 - crates/qbz-ui/ui/assets/icons/download.svg | 5 - .../ui/assets/icons/element-connect.svg | 13 - crates/qbz-ui/ui/assets/icons/ellipsis.svg | 5 - .../qbz-ui/ui/assets/icons/external-link.svg | 5 - crates/qbz-ui/ui/assets/icons/eye-off.svg | 6 - crates/qbz-ui/ui/assets/icons/eye.svg | 4 - .../qbz-ui/ui/assets/icons/folder-check.svg | 4 - crates/qbz-ui/ui/assets/icons/folder-open.svg | 3 - crates/qbz-ui/ui/assets/icons/folder-plus.svg | 5 - crates/qbz-ui/ui/assets/icons/folder-tree.svg | 6 - crates/qbz-ui/ui/assets/icons/folder.svg | 3 - crates/qbz-ui/ui/assets/icons/gandalf.svg | 162 - crates/qbz-ui/ui/assets/icons/globe.svg | 5 - .../qbz-ui/ui/assets/icons/grip-vertical.svg | 8 - crates/qbz-ui/ui/assets/icons/hard-drive.svg | 6 - crates/qbz-ui/ui/assets/icons/heart-crack.svg | 14 - .../qbz-ui/ui/assets/icons/heart-filled.svg | 3 - crates/qbz-ui/ui/assets/icons/heart.svg | 3 - crates/qbz-ui/ui/assets/icons/home-gear.svg | 7 - crates/qbz-ui/ui/assets/icons/image-plus.svg | 7 - crates/qbz-ui/ui/assets/icons/image.svg | 1 - crates/qbz-ui/ui/assets/icons/import.svg | 5 - crates/qbz-ui/ui/assets/icons/infinity.svg | 3 - crates/qbz-ui/ui/assets/icons/info.svg | 5 - crates/qbz-ui/ui/assets/icons/keyboard.svg | 11 - crates/qbz-ui/ui/assets/icons/layers.svg | 5 - crates/qbz-ui/ui/assets/icons/layout-grid.svg | 6 - crates/qbz-ui/ui/assets/icons/library-big.svg | 5 - crates/qbz-ui/ui/assets/icons/library.svg | 6 - crates/qbz-ui/ui/assets/icons/link.svg | 1 - crates/qbz-ui/ui/assets/icons/list-end.svg | 7 - crates/qbz-ui/ui/assets/icons/list-filter.svg | 5 - .../ui/assets/icons/list-indent-increase.svg | 6 - crates/qbz-ui/ui/assets/icons/list-music.svg | 7 - .../qbz-ui/ui/assets/icons/list-ordered.svg | 8 - crates/qbz-ui/ui/assets/icons/list-plus.svg | 7 - crates/qbz-ui/ui/assets/icons/list-start.svg | 7 - crates/qbz-ui/ui/assets/icons/list-x.svg | 7 - crates/qbz-ui/ui/assets/icons/list.svg | 8 - .../qbz-ui/ui/assets/icons/loader-circle.svg | 1 - crates/qbz-ui/ui/assets/icons/lock-open.svg | 4 - crates/qbz-ui/ui/assets/icons/lock.svg | 4 - crates/qbz-ui/ui/assets/icons/log-out.svg | 5 - crates/qbz-ui/ui/assets/icons/map-pin.svg | 4 - crates/qbz-ui/ui/assets/icons/maximize-2.svg | 6 - crates/qbz-ui/ui/assets/icons/menu.svg | 5 - crates/qbz-ui/ui/assets/icons/mic-vocal.svg | 17 - crates/qbz-ui/ui/assets/icons/minimize-2.svg | 6 - crates/qbz-ui/ui/assets/icons/minus.svg | 3 - .../ui/assets/icons/monitor-speaker.svg | 19 - crates/qbz-ui/ui/assets/icons/monitor.svg | 5 - crates/qbz-ui/ui/assets/icons/moon.svg | 3 - crates/qbz-ui/ui/assets/icons/move.svg | 8 - .../ui/assets/icons/music-library-2.svg | 7 - crates/qbz-ui/ui/assets/icons/music.svg | 5 - crates/qbz-ui/ui/assets/icons/my-qbz.svg | 28 - crates/qbz-ui/ui/assets/icons/network.svg | 7 - crates/qbz-ui/ui/assets/icons/panel-left.svg | 4 - .../ui/assets/icons/panel-right-close.svg | 5 - crates/qbz-ui/ui/assets/icons/pause.svg | 4 - crates/qbz-ui/ui/assets/icons/pen-line.svg | 4 - crates/qbz-ui/ui/assets/icons/pencil.svg | 4 - .../ui/assets/icons/picture-in-picture-2.svg | 4 - crates/qbz-ui/ui/assets/icons/pin-filled.svg | 6 - crates/qbz-ui/ui/assets/icons/pin.svg | 6 - crates/qbz-ui/ui/assets/icons/play-fill.svg | 3 - crates/qbz-ui/ui/assets/icons/play.svg | 3 - crates/qbz-ui/ui/assets/icons/plex-logo.svg | 7 - crates/qbz-ui/ui/assets/icons/plus.svg | 4 - .../qbz-ui/ui/assets/icons/qbz-symbolic.svg | 32 - .../ui/assets/icons/qobuz-logo-filled.svg | 723 - crates/qbz-ui/ui/assets/icons/qobuz-logo.svg | 2 - crates/qbz-ui/ui/assets/icons/radio.svg | 7 - crates/qbz-ui/ui/assets/icons/refresh-cw.svg | 6 - crates/qbz-ui/ui/assets/icons/repeat-1.svg | 7 - crates/qbz-ui/ui/assets/icons/repeat.svg | 6 - crates/qbz-ui/ui/assets/icons/rotate-ccw.svg | 4 - crates/qbz-ui/ui/assets/icons/rows-3.svg | 5 - crates/qbz-ui/ui/assets/icons/search.svg | 4 - crates/qbz-ui/ui/assets/icons/settings-2.svg | 18 - crates/qbz-ui/ui/assets/icons/settings.svg | 4 - .../qbz-ui/ui/assets/icons/shopping-bag.svg | 5 - crates/qbz-ui/ui/assets/icons/shuffle.svg | 7 - crates/qbz-ui/ui/assets/icons/skip-back.svg | 4 - .../qbz-ui/ui/assets/icons/skip-forward.svg | 4 - .../ui/assets/icons/sliders-horizontal.svg | 23 - crates/qbz-ui/ui/assets/icons/smartphone.svg | 4 - crates/qbz-ui/ui/assets/icons/speaker.svg | 5 - .../qbz-ui/ui/assets/icons/spotify-logo.svg | 16 - .../ui/assets/icons/square-check-big.svg | 4 - crates/qbz-ui/ui/assets/icons/square.svg | 3 - crates/qbz-ui/ui/assets/icons/star.svg | 3 - crates/qbz-ui/ui/assets/icons/sun-moon.svg | 11 - crates/qbz-ui/ui/assets/icons/sun.svg | 11 - crates/qbz-ui/ui/assets/icons/thumbs-down.svg | 4 - crates/qbz-ui/ui/assets/icons/tidal-tidal.svg | 4 - crates/qbz-ui/ui/assets/icons/translate.svg | 8 - crates/qbz-ui/ui/assets/icons/trash-2.svg | 7 - crates/qbz-ui/ui/assets/icons/trash-list.svg | 4 - .../qbz-ui/ui/assets/icons/triangle-alert.svg | 5 - crates/qbz-ui/ui/assets/icons/turntable.svg | 6 - crates/qbz-ui/ui/assets/icons/user-plus.svg | 1 - crates/qbz-ui/ui/assets/icons/user.svg | 4 - crates/qbz-ui/ui/assets/icons/volume-2.svg | 5 - crates/qbz-ui/ui/assets/icons/volume-x.svg | 5 - .../qbz-ui/ui/assets/icons/wand-sparkles.svg | 10 - crates/qbz-ui/ui/assets/icons/wifi.svg | 6 - crates/qbz-ui/ui/assets/icons/x.svg | 4 - crates/qbz-ui/ui/assets/laurels.svg | 2 - crates/qbz-ui/ui/assets/mexico-flag.svg | 1721 -- crates/qbz-ui/ui/assets/mp3.svg | 2 - crates/qbz-ui/ui/assets/qbz-logo-128.png | Bin 17279 -> 0 bytes crates/qbz-ui/ui/assets/qbz-logo.png | Bin 80834 -> 0 bytes crates/qbz-ui/ui/award/AwardAlbumsView.slint | 364 - crates/qbz-ui/ui/award/AwardView.slint | 346 - crates/qbz-ui/ui/discover/AlbumCard.slint | 529 - .../ui/discover/AlbumCollectionView.slint | 345 - crates/qbz-ui/ui/discover/ArtistCard.slint | 145 - .../qbz-ui/ui/discover/ArtistCarousel.slint | 225 - .../qbz-ui/ui/discover/ArtistGridCard.slint | 328 - .../ui/discover/BrowseHeaderTools.slint | 173 - crates/qbz-ui/ui/discover/Carousel.slint | 316 - .../ui/discover/DiscoverBrowseView.slint | 237 - .../ui/discover/DiscoverConfigModal.slint | 370 - .../qbz-ui/ui/discover/ExternalRecoView.slint | 211 - crates/qbz-ui/ui/discover/ForYouView.slint | 221 - .../qbz-ui/ui/discover/GenreFilterPopup.slint | 388 - crates/qbz-ui/ui/discover/GridSection.slint | 50 - crates/qbz-ui/ui/discover/HomeSkeleton.slint | 170 - crates/qbz-ui/ui/discover/HomeView.slint | 658 - crates/qbz-ui/ui/discover/LabelCard.slint | 107 - .../ui/discover/MostPlayedAlbumsView.slint | 198 - .../qbz-ui/ui/discover/PinnedCarousel.slint | 175 - .../ui/discover/PlaylistBrowseView.slint | 338 - crates/qbz-ui/ui/discover/PlaylistCard.slint | 298 - .../qbz-ui/ui/discover/PlaylistCarousel.slint | 180 - .../qbz-ui/ui/discover/PlaylistCollage.slint | 125 - .../ui/discover/PlaylistTagFilter.slint | 184 - crates/qbz-ui/ui/discover/QobuzMixesRow.slint | 107 - crates/qbz-ui/ui/discover/RadioCard.slint | 124 - crates/qbz-ui/ui/discover/RadioCarousel.slint | 119 - .../qbz-ui/ui/discover/RecentAlbumsView.slint | 173 - crates/qbz-ui/ui/discover/SlimCard.slint | 77 - crates/qbz-ui/ui/discover/SlimCarousel.slint | 220 - crates/qbz-ui/ui/discover/Spotlight.slint | 194 - crates/qbz-ui/ui/discover/TrackCard.slint | 330 - .../ui/favorites/FavoritesOfflineRail.slint | 51 - .../qbz-ui/ui/favorites/FavoritesView.slint | 2204 -- crates/qbz-ui/ui/focus-state.slint | 22 - crates/qbz-ui/ui/foundation/layout.slint | 12 - crates/qbz-ui/ui/foundation/palette.slint | 29 - crates/qbz-ui/ui/foundation/radius.slint | 8 - .../ui/foundation/semantic-colors.slint | 13 - crates/qbz-ui/ui/foundation/spacing.slint | 10 - crates/qbz-ui/ui/foundation/theme-state.slint | 11 - crates/qbz-ui/ui/foundation/theme.slint | 260 - crates/qbz-ui/ui/foundation/typography.slint | 28 - .../ui/immersive/AlbumReactivePanel.slint | 178 - .../qbz-ui/ui/immersive/CoverflowPanel.slint | 285 - .../ui/immersive/ImmersiveAtmosphere.slint | 83 - .../immersive/ImmersiveLyricsFocusPanel.slint | 154 - .../ui/immersive/ImmersiveQueuePanel.slint | 554 - .../immersive/ImmersiveSearchCortinilla.slint | 386 - .../ui/immersive/ImmersiveSongCard.slint | 114 - .../immersive/ImmersiveSpectralOverlay.slint | 95 - .../immersive/ImmersiveSuggestionsPanel.slint | 492 - .../ui/immersive/ImmersiveTrackInfo.slint | 143 - .../immersive/ImmersiveTrackInfoPanel.slint | 282 - .../qbz-ui/ui/immersive/ImmersiveView.slint | 1706 -- .../ui/immersive/ImmersiveWaveBedPanel.slint | 74 - .../qbz-ui/ui/immersive/SpectrumPanel.slint | 251 - crates/qbz-ui/ui/immersive/StaticPanel.slint | 111 - crates/qbz-ui/ui/label/LabelPageView.slint | 690 - .../qbz-ui/ui/label/LabelReleasesView.slint | 335 - .../ui/locallibrary/LocalLibraryView.slint | 2671 -- .../ui/location/ArtistsByLocationView.slint | 173 - crates/qbz-ui/ui/login/LoginScreen.slint | 294 - .../ui/miniplayer/MiniArtworkSurface.slint | 73 - crates/qbz-ui/ui/miniplayer/MiniBits.slint | 44 - .../ui/miniplayer/MiniCompactSurface.slint | 57 - crates/qbz-ui/ui/miniplayer/MiniFooter.slint | 396 - .../ui/miniplayer/MiniLyricsSurface.slint | 46 - .../ui/miniplayer/MiniQueueSurface.slint | 139 - crates/qbz-ui/ui/miniplayer/MiniShell.slint | 65 - .../ui/miniplayer/MiniWindowControls.slint | 184 - crates/qbz-ui/ui/mix/MixView.slint | 323 - .../qbz-ui/ui/musician/MusicianPageView.slint | 296 - .../qbz-ui/ui/myqbz/AddToMixtapeModal.slint | 553 - crates/qbz-ui/ui/myqbz/CollectionMosaic.slint | 121 - crates/qbz-ui/ui/myqbz/CollectionsView.slint | 237 - crates/qbz-ui/ui/myqbz/CreateMyQbzModal.slint | 199 - .../ui/myqbz/DiscographyBuilderView.slint | 787 - .../qbz-ui/ui/myqbz/MixtapeDetailView.slint | 1272 - crates/qbz-ui/ui/myqbz/MixtapesView.slint | 222 - crates/qbz-ui/ui/myqbz/MyQbzEditModal.slint | 147 - crates/qbz-ui/ui/myqbz/MyQbzMixModal.slint | 184 - crates/qbz-ui/ui/myqbz/MyQbzShared.slint | 163 - .../ui/offline/OfflineManagerView.slint | 576 - .../ui/offline/OfflinePlaceholder.slint | 71 - .../ui/playlist/PlaylistManagerView.slint | 1498 - crates/qbz-ui/ui/playlist/PlaylistView.slint | 1530 - .../ui/primitives/AlbumContextMenu.slint | 174 - .../qbz-ui/ui/primitives/AlbumListRow.slint | 447 - crates/qbz-ui/ui/primitives/BarControls.slint | 127 - .../qbz-ui/ui/primitives/CircleAction.slint | 132 - crates/qbz-ui/ui/primitives/ColorPicker.slint | 249 - .../qbz-ui/ui/primitives/CommandBlock.slint | 96 - crates/qbz-ui/ui/primitives/ContextMenu.slint | 22 - .../ui/primitives/ContextMenuItem.slint | 74 - .../ui/primitives/CreateFolderModal.slint | 109 - .../ui/primitives/CreatePlaylistModal.slint | 285 - .../qbz-ui/ui/primitives/DacWizardModal.slint | 861 - .../ui/primitives/DiscContextMenu.slint | 67 - .../qbz-ui/ui/primitives/DiscHeaderMenu.slint | 46 - crates/qbz-ui/ui/primitives/DragGhost.slint | 45 - .../ui/primitives/EditPlaylistModal.slint | 192 - .../primitives/EphemeralPlayChoiceModal.slint | 127 - .../ui/primitives/ExpandableSearch.slint | 164 - .../ui/primitives/FolderEditModal.slint | 277 - crates/qbz-ui/ui/primitives/JumpNavBar.slint | 286 - .../qbz-ui/ui/primitives/ListScrollbar.slint | 89 - crates/qbz-ui/ui/primitives/LoadingDots.slint | 43 - .../qbz-ui/ui/primitives/LoadingSpinner.slint | 30 - .../qbz-ui/ui/primitives/MultiSelectBar.slint | 100 - .../PlaylistDuplicateConfirmModal.slint | 130 - .../ui/primitives/PlaylistImportModal.slint | 562 - .../ui/primitives/PlaylistListRow.slint | 161 - .../ui/primitives/PlaylistPickerModal.slint | 627 - crates/qbz-ui/ui/primitives/PmCollage.slint | 81 - .../qbz-ui/ui/primitives/PmFolderIcon.slint | 48 - crates/qbz-ui/ui/primitives/QbzCheckbox.slint | 63 - crates/qbz-ui/ui/primitives/QbzIcon.slint | 14 - .../ui/primitives/QbzPrimaryButton.slint | 87 - crates/qbz-ui/ui/primitives/QbzSelect.slint | 326 - crates/qbz-ui/ui/primitives/QbzSlider.slint | 113 - crates/qbz-ui/ui/primitives/QbzTextLink.slint | 36 - crates/qbz-ui/ui/primitives/QbzToggle.slint | 67 - .../ui/primitives/QbzVerticalSlider.slint | 111 - .../qbz-ui/ui/primitives/QualityBadge.slint | 123 - .../ui/primitives/QualityBadgeFull.slint | 106 - .../ui/primitives/SearchTrackHero.slint | 249 - .../ui/primitives/SecondaryButton.slint | 80 - .../ui/primitives/SegmentedTabBar.slint | 123 - .../ui/primitives/SelectionCheckbox.slint | 44 - .../primitives/SidebarPlaylistCollage.slint | 69 - crates/qbz-ui/ui/primitives/SourceGlyph.slint | 32 - .../qbz-ui/ui/primitives/TagEditorModal.slint | 539 - crates/qbz-ui/ui/primitives/Toast.slint | 118 - .../qbz-ui/ui/primitives/ToggleButton.slint | 85 - .../ui/primitives/TrackContextMenu.slint | 222 - .../qbz-ui/ui/primitives/TrackPlayCell.slint | 244 - crates/qbz-ui/ui/primitives/TrackRow.slint | 787 - .../qbz-ui/ui/primitives/WarningBanner.slint | 74 - .../ui/purchases/PurchaseDetailView.slint | 774 - .../qbz-ui/ui/purchases/PurchasesView.slint | 1549 - crates/qbz-ui/ui/search/Cortinilla.slint | 483 - .../qbz-ui/ui/search/SearchResultsView.slint | 775 - .../ui/settings/AppearanceSettings.slint | 1047 - crates/qbz-ui/ui/settings/AudioSettings.slint | 383 - .../ui/settings/BlacklistManagerView.slint | 1114 - .../settings/ContentFilteringSettings.slint | 116 - .../ui/settings/DeveloperSettings.slint | 93 - .../qbz-ui/ui/settings/DiagnosticsPanel.slint | 390 - .../ui/settings/IntegrationsSettings.slint | 336 - .../ui/settings/LibFolderEditModal.slint | 402 - .../ui/settings/LocalLibrarySettings.slint | 856 - .../qbz-ui/ui/settings/OfflineSettings.slint | 191 - .../qbz-ui/ui/settings/PlaybackSettings.slint | 227 - .../qbz-ui/ui/settings/SandboxSettings.slint | 176 - crates/qbz-ui/ui/settings/SettingRow.slint | 42 - .../ui/settings/SettingsExportModal.slint | 192 - crates/qbz-ui/ui/settings/SettingsView.slint | 314 - crates/qbz-ui/ui/shaders/ambient.wgsl | 179 - crates/qbz-ui/ui/shaders/aurora.wgsl | 124 - crates/qbz-ui/ui/shaders/line_bed.wgsl | 144 - crates/qbz-ui/ui/shaders/liquid_spectrum.wgsl | 125 - crates/qbz-ui/ui/shaders/plasma.wgsl | 153 - crates/qbz-ui/ui/shaders/spectral_ribbon.wgsl | 119 - crates/qbz-ui/ui/shaders/tunnel.wgsl | 185 - crates/qbz-ui/ui/shell/AboutModal.slint | 531 - crates/qbz-ui/ui/shell/AppShell.slint | 1039 - .../qbz-ui/ui/shell/ArtPreviewOverlay.slint | 46 - crates/qbz-ui/ui/shell/AudioStamp.slint | 191 - crates/qbz-ui/ui/shell/CastPicker.slint | 361 - .../ui/shell/CustomizeShortcutsModal.slint | 366 - crates/qbz-ui/ui/shell/HeaderBar.slint | 1258 - .../qbz-ui/ui/shell/HeaderMenuOverlay.slint | 163 - .../ui/shell/KeyboardShortcutsModal.slint | 260 - crates/qbz-ui/ui/shell/KioskAlbum.slint | 217 - crates/qbz-ui/ui/shell/KioskAlbumGrid.slint | 83 - crates/qbz-ui/ui/shell/KioskArtist.slint | 223 - crates/qbz-ui/ui/shell/KioskArtistCard.slint | 55 - crates/qbz-ui/ui/shell/KioskCard.slint | 91 - crates/qbz-ui/ui/shell/KioskDiscover.slint | 261 - crates/qbz-ui/ui/shell/KioskLibrary.slint | 366 - .../qbz-ui/ui/shell/KioskLocalLibrary.slint | 234 - crates/qbz-ui/ui/shell/KioskMyQBZ.slint | 233 - crates/qbz-ui/ui/shell/KioskNowPlaying.slint | 474 - crates/qbz-ui/ui/shell/KioskSearch.slint | 579 - crates/qbz-ui/ui/shell/KioskShell.slint | 748 - crates/qbz-ui/ui/shell/KioskTrackRow.slint | 79 - .../qbz-ui/ui/shell/LinkResolverModal.slint | 290 - crates/qbz-ui/ui/shell/LogViewerModal.slint | 516 - .../ui/shell/LyricsControlsFlyout.slint | 252 - crates/qbz-ui/ui/shell/LyricsLinesView.slint | 436 - crates/qbz-ui/ui/shell/LyricsSidebar.slint | 361 - crates/qbz-ui/ui/shell/NavButtons.slint | 8 - crates/qbz-ui/ui/shell/NavMenuItem.slint | 60 - crates/qbz-ui/ui/shell/NavRail.slint | 193 - crates/qbz-ui/ui/shell/NowPlayingBar.slint | 81 - crates/qbz-ui/ui/shell/PlayerBar.slint | 921 - crates/qbz-ui/ui/shell/PlayerBarSmall.slint | 1000 - crates/qbz-ui/ui/shell/QconnectDevModal.slint | 152 - crates/qbz-ui/ui/shell/QueueSidebar.slint | 1131 - crates/qbz-ui/ui/shell/ReportIssueModal.slint | 141 - crates/qbz-ui/ui/shell/SeekBar.slint | 154 - crates/qbz-ui/ui/shell/Sidebar.slint | 1165 - .../qbz-ui/ui/shell/SidebarFolderPopup.slint | 146 - .../ui/shell/SidebarNowPlayingDock.slint | 253 - .../ui/shell/SidebarPlaylistsPopup.slint | 275 - crates/qbz-ui/ui/shell/SidebarTooltip.slint | 44 - crates/qbz-ui/ui/shell/SongCard.slint | 696 - crates/qbz-ui/ui/shell/TooltipOverlay.slint | 66 - .../qbz-ui/ui/shell/TransportControls.slint | 243 - crates/qbz-ui/ui/shell/WhatsNewModal.slint | 253 - crates/qbz-ui/ui/shell/WindowControls.slint | 78 - crates/qbz-ui/ui/splash/SplashScreen.slint | 87 - crates/qbz-ui/ui/state.slint | 6157 ---- crates/qbz/Cargo.toml | 220 - crates/qbz/build.rs | 75 - crates/qbz/icons/tray-color-22.png | Bin 1314 -> 0 bytes crates/qbz/icons/tray-color-32.png | Bin 2160 -> 0 bytes crates/qbz/icons/tray-color-44.png | Bin 3195 -> 0 bytes crates/qbz/icons/tray-color-64.png | Bin 4839 -> 0 bytes crates/qbz/icons/tray-dark-22.png | Bin 730 -> 0 bytes crates/qbz/icons/tray-dark-32.png | Bin 988 -> 0 bytes crates/qbz/icons/tray-dark-44.png | Bin 1330 -> 0 bytes crates/qbz/icons/tray-dark-64.png | Bin 1899 -> 0 bytes crates/qbz/icons/tray-light-22.png | Bin 705 -> 0 bytes crates/qbz/icons/tray-light-32.png | Bin 970 -> 0 bytes crates/qbz/icons/tray-light-44.png | Bin 1292 -> 0 bytes crates/qbz/icons/tray-light-64.png | Bin 1818 -> 0 bytes crates/qbz/packaging/qbz.desktop | 12 - crates/qbz/packaging/qbz.png | Bin 32239 -> 0 bytes crates/qbz/src/about.rs | 204 - crates/qbz/src/adapter.rs | 33 - crates/qbz/src/album.rs | 1082 - crates/qbz/src/album_map.rs | 264 - crates/qbz/src/artist.rs | 1927 -- crates/qbz/src/artist_blacklist.rs | 367 - crates/qbz/src/artist_prefs.rs | 78 - crates/qbz/src/artist_releases.rs | 99 - crates/qbz/src/artwork.rs | 1828 -- crates/qbz/src/auth.rs | 428 - crates/qbz/src/auto_theme.rs | 149 - crates/qbz/src/award.rs | 642 - crates/qbz/src/blacklist_manager.rs | 352 - crates/qbz/src/booklet.rs | 97 - crates/qbz/src/cast_service.rs | 1606 -- crates/qbz/src/commands.rs | 50 - crates/qbz/src/custom_artwork.rs | 108 - crates/qbz/src/custom_theme.rs | 276 - crates/qbz/src/deep_link.rs | 236 - crates/qbz/src/device_cap.rs | 197 - crates/qbz/src/diagnostics.rs | 1234 - crates/qbz/src/discord_rpc.rs | 97 - crates/qbz/src/discover_browse.rs | 244 - crates/qbz/src/discover_prefs.rs | 385 - crates/qbz/src/discovery_dismiss.rs | 88 - crates/qbz/src/drag.rs | 44 - crates/qbz/src/ephemeral.rs | 76 - crates/qbz/src/external_reco.rs | 945 - crates/qbz/src/fav_cache.rs | 372 - crates/qbz/src/favorites.rs | 1794 -- crates/qbz/src/favorites_prefs.rs | 152 - crates/qbz/src/folders.rs | 236 - crates/qbz/src/foryou.rs | 1053 - crates/qbz/src/gamepad.rs | 190 - crates/qbz/src/genre_filter.rs | 484 - crates/qbz/src/glibc_compat.rs | 44 - crates/qbz/src/home.rs | 1226 - crates/qbz/src/immersive.rs | 425 - crates/qbz/src/info_modals.rs | 563 - crates/qbz/src/keybindings.rs | 648 - crates/qbz/src/label.rs | 1204 - crates/qbz/src/library_all.rs | 948 - crates/qbz/src/library_by_artist.rs | 134 - crates/qbz/src/library_by_label.rs | 64 - crates/qbz/src/library_db.rs | 107 - crates/qbz/src/link_resolver.rs | 88 - crates/qbz/src/local_favorites.rs | 103 - crates/qbz/src/local_library.rs | 4211 --- crates/qbz/src/local_library_settings.rs | 816 - crates/qbz/src/local_playlist.rs | 2111 -- crates/qbz/src/locallibrary_prefs.rs | 114 - crates/qbz/src/location_view.rs | 164 - crates/qbz/src/log_viewer.rs | 277 - crates/qbz/src/lyrics.rs | 750 - crates/qbz/src/lyrics_measure.rs | 291 - crates/qbz/src/lyrics_prefs.rs | 395 - crates/qbz/src/lyrics_sync.rs | 422 - crates/qbz/src/macos_chrome.rs | 100 - crates/qbz/src/main.rs | 23354 ---------------- crates/qbz/src/media_controls.rs | 112 - crates/qbz/src/miniplayer.rs | 660 - crates/qbz/src/mix.rs | 515 - crates/qbz/src/musician.rs | 203 - crates/qbz/src/myqbz.rs | 649 - crates/qbz/src/myqbz_add.rs | 379 - crates/qbz/src/myqbz_builder.rs | 956 - crates/qbz/src/myqbz_cover.rs | 232 - crates/qbz/src/myqbz_detail.rs | 1415 - crates/qbz/src/myqbz_edit.rs | 344 - crates/qbz/src/myqbz_mix.rs | 245 - crates/qbz/src/myqbz_play.rs | 834 - crates/qbz/src/myqbz_prefs.rs | 257 - crates/qbz/src/myqbz_view_prefs.rs | 203 - crates/qbz/src/nav.rs | 465 - crates/qbz/src/offline.rs | 109 - crates/qbz/src/offline_cache.rs | 597 - crates/qbz/src/offline_favorites.rs | 246 - crates/qbz/src/offline_manager.rs | 438 - crates/qbz/src/offline_mode.rs | 330 - crates/qbz/src/pinned.rs | 210 - crates/qbz/src/pinned_section.rs | 118 - crates/qbz/src/play_history.rs | 155 - crates/qbz/src/playback.rs | 5802 ---- crates/qbz/src/playlist.rs | 1112 - crates/qbz/src/playlist_browse.rs | 383 - crates/qbz/src/playlist_import.rs | 494 - crates/qbz/src/playlist_manager.rs | 1053 - crates/qbz/src/playlist_picker.rs | 141 - crates/qbz/src/playlist_snapshot.rs | 142 - crates/qbz/src/playlist_suggestions.rs | 683 - .../qbz/src/playlist_suggestions_dismiss.rs | 86 - crates/qbz/src/plex_auth.rs | 1030 - crates/qbz/src/plex_settings.rs | 122 - crates/qbz/src/purchases.rs | 3191 --- crates/qbz/src/qconnect_engine.rs | 251 - crates/qbz/src/qconnect_event_sink.rs | 630 - crates/qbz/src/qconnect_service.rs | 3057 -- crates/qbz/src/qconnect_transport.rs | 601 - crates/qbz/src/quality.rs | 117 - crates/qbz/src/queue.rs | 1287 - crates/qbz/src/recently.rs | 281 - crates/qbz/src/reco.rs | 299 - crates/qbz/src/reco_dismiss.rs | 234 - crates/qbz/src/remote_stream.rs | 318 - crates/qbz/src/scrobble.rs | 777 - crates/qbz/src/scrobbler_settings.rs | 119 - crates/qbz/src/search.rs | 1919 -- crates/qbz/src/search_service.rs | 186 - crates/qbz/src/selection.rs | 133 - crates/qbz/src/session_persist.rs | 326 - crates/qbz/src/settings.rs | 1619 -- crates/qbz/src/shader_underlay.rs | 1036 - crates/qbz/src/share.rs | 184 - crates/qbz/src/sidebar.rs | 794 - crates/qbz/src/single_instance.rs | 169 - crates/qbz/src/sleep_timer.rs | 80 - crates/qbz/src/steam_osk.rs | 55 - crates/qbz/src/suggestions.rs | 425 - crates/qbz/src/tag_editor.rs | 611 - crates/qbz/src/theme.rs | 412 - crates/qbz/src/tray/linux.rs | 485 - crates/qbz/src/tray/macos.rs | 331 - crates/qbz/src/tray/mod.rs | 391 - crates/qbz/src/tray_settings.rs | 129 - crates/qbz/src/ui_prefs.rs | 995 - crates/qbz/src/ui_watchdog.rs | 98 - crates/qbz/src/viewport.rs | 77 - crates/qbz/src/visualizer.rs | 317 - crates/qbz/src/whats_new.rs | 412 - crates/qbzd/Cargo.toml | 7 +- .../femtovg-0.23.2/.cargo_vcs_info.json | 6 - crates/vendor/femtovg-0.23.2/CHANGELOG.md | 382 - crates/vendor/femtovg-0.23.2/Cargo.lock | 3833 --- crates/vendor/femtovg-0.23.2/Cargo.toml | 271 - crates/vendor/femtovg-0.23.2/Cargo.toml.orig | 110 - crates/vendor/femtovg-0.23.2/LICENSE-APACHE | 13 - crates/vendor/femtovg-0.23.2/LICENSE-MIT | 25 - crates/vendor/femtovg-0.23.2/README.md | 86 - crates/vendor/femtovg-0.23.2/rustfmt.toml | 4 - crates/vendor/femtovg-0.23.2/src/color.rs | 161 - crates/vendor/femtovg-0.23.2/src/error.rs | 72 - crates/vendor/femtovg-0.23.2/src/geometry.rs | 531 - .../femtovg-0.23.2/src/gradient_store.rs | 146 - crates/vendor/femtovg-0.23.2/src/image.rs | 295 - crates/vendor/femtovg-0.23.2/src/lib.rs | 1836 -- crates/vendor/femtovg-0.23.2/src/paint.rs | 1185 - crates/vendor/femtovg-0.23.2/src/path.rs | 550 - .../vendor/femtovg-0.23.2/src/path/cache.rs | 1176 - crates/vendor/femtovg-0.23.2/src/renderer.rs | 257 - .../femtovg-0.23.2/src/renderer/opengl.rs | 909 - .../src/renderer/opengl/framebuffer.rs | 137 - .../src/renderer/opengl/gl_texture.rs | 290 - .../src/renderer/opengl/main-fs.glsl | 225 - .../src/renderer/opengl/main-vs.glsl | 15 - .../src/renderer/opengl/program.rs | 220 - .../src/renderer/opengl/uniform_array.rs | 115 - .../femtovg-0.23.2/src/renderer/params.rs | 257 - .../femtovg-0.23.2/src/renderer/void.rs | 73 - .../femtovg-0.23.2/src/renderer/wgpu.rs | 1713 -- .../src/renderer/wgpu/shader.wgsl | 280 - crates/vendor/femtovg-0.23.2/src/text.rs | 1070 - .../vendor/femtovg-0.23.2/src/text/atlas.rs | 166 - crates/vendor/femtovg-0.23.2/src/text/font.rs | 665 - .../femtovg-0.23.2/src/text/textlayout.rs | 558 - .../femtovg-0.23.2/tests/integration.rs | 450 - .../femtovg-0.23.2/tests/transform2D.rs | 85 - .../.cargo_vcs_info.json | 6 - .../vendor/i-slint-common-1.16.1/Cargo.lock | 496 - .../vendor/i-slint-common-1.16.1/Cargo.toml | 85 - .../i-slint-common-1.16.1/Cargo.toml.orig | 34 - .../LICENSES/GPL-3.0-only.txt | 232 - .../LicenseRef-Slint-Royalty-free-2.0.md | 43 - .../LICENSES/LicenseRef-Slint-Software-3.0.md | 117 - crates/vendor/i-slint-common-1.16.1/README.md | 10 - .../i-slint-common-1.16.1/builtin_structs.rs | 220 - .../i-slint-common-1.16.1/color_parsing.rs | 216 - crates/vendor/i-slint-common-1.16.1/enums.rs | 614 - .../vendor/i-slint-common-1.16.1/key_codes.rs | 207 - crates/vendor/i-slint-common-1.16.1/lib.rs | 57 - .../i-slint-common-1.16.1/sharedfontique.rs | 234 - .../sharedfontique/Inter-VariableFont.ttf | Bin 874708 -> 0 bytes .../Inter-VariableFont.ttf.license | 3 - .../i-slint-common-1.16.1/styled_text.rs | 752 - .../i-slint-core-1.16.1/.cargo_vcs_info.json | 6 - crates/vendor/i-slint-core-1.16.1/Cargo.lock | 3376 --- crates/vendor/i-slint-core-1.16.1/Cargo.toml | 390 - .../i-slint-core-1.16.1/Cargo.toml.orig | 174 - .../LICENSES/GPL-3.0-only.txt | 232 - .../LicenseRef-Slint-Royalty-free-2.0.md | 43 - .../LICENSES/LicenseRef-Slint-Software-3.0.md | 117 - crates/vendor/i-slint-core-1.16.1/README.md | 9 - .../i-slint-core-1.16.1/accessibility.rs | 147 - .../vendor/i-slint-core-1.16.1/animations.rs | 426 - .../animations/physics_simulation.rs | 823 - crates/vendor/i-slint-core-1.16.1/api.rs | 1379 - .../vendor/i-slint-core-1.16.1/callbacks.rs | 164 - .../i-slint-core-1.16.1/component_factory.rs | 71 - crates/vendor/i-slint-core-1.16.1/context.rs | 173 - .../vendor/i-slint-core-1.16.1/date_time.rs | 128 - crates/vendor/i-slint-core-1.16.1/future.rs | 148 - .../gdb_pretty_printers.py | 158 - crates/vendor/i-slint-core-1.16.1/graphics.rs | 309 - .../graphics/bitmapfont.rs | 76 - .../graphics/border_radius.rs | 528 - .../graphics/boxshadowcache.rs | 112 - .../i-slint-core-1.16.1/graphics/brush.rs | 778 - .../i-slint-core-1.16.1/graphics/color.rs | 905 - .../i-slint-core-1.16.1/graphics/image.rs | 1519 - .../graphics/image/cache.rs | 241 - .../graphics/image/htmlimage.rs | 72 - .../i-slint-core-1.16.1/graphics/image/svg.rs | 93 - .../i-slint-core-1.16.1/graphics/path.rs | 442 - .../graphics/rendering_metrics_collector.rs | 193 - .../i-slint-core-1.16.1/graphics/wgpu_27.rs | 442 - .../i-slint-core-1.16.1/graphics/wgpu_28.rs | 442 - crates/vendor/i-slint-core-1.16.1/input.rs | 2435 -- .../vendor/i-slint-core-1.16.1/item_focus.rs | 298 - .../i-slint-core-1.16.1/item_rendering.rs | 610 - .../vendor/i-slint-core-1.16.1/item_tree.rs | 2863 -- crates/vendor/i-slint-core-1.16.1/items.rs | 1917 -- .../items/component_container.rs | 278 - .../i-slint-core-1.16.1/items/drag_n_drop.rs | 345 - .../i-slint-core-1.16.1/items/flickable.rs | 846 - .../items/flickable/data_ringbuffer.rs | 192 - .../vendor/i-slint-core-1.16.1/items/image.rs | 359 - .../i-slint-core-1.16.1/items/input_items.rs | 1201 - .../vendor/i-slint-core-1.16.1/items/path.rs | 199 - .../vendor/i-slint-core-1.16.1/items/text.rs | 2421 -- crates/vendor/i-slint-core-1.16.1/layout.rs | 2771 -- crates/vendor/i-slint-core-1.16.1/lengths.rs | 209 - crates/vendor/i-slint-core-1.16.1/lib.rs | 173 - crates/vendor/i-slint-core-1.16.1/menus.rs | 321 - crates/vendor/i-slint-core-1.16.1/model.rs | 1126 - .../i-slint-core-1.16.1/model/adapters.rs | 1561 -- .../i-slint-core-1.16.1/model/model_peer.rs | 179 - .../i-slint-core-1.16.1/model/repeater.rs | 882 - .../i-slint-core-1.16.1/partial_renderer.rs | 840 - crates/vendor/i-slint-core-1.16.1/platform.rs | 445 - .../vendor/i-slint-core-1.16.1/properties.rs | 1504 - .../properties/change_tracker.rs | 425 - .../i-slint-core-1.16.1/properties/ffi.rs | 568 - .../properties/properties_animations.rs | 1084 - .../properties/two_way_binding.rs | 614 - crates/vendor/i-slint-core-1.16.1/renderer.rs | 151 - crates/vendor/i-slint-core-1.16.1/rtti.rs | 457 - .../i-slint-core-1.16.1/sharedvector.rs | 702 - crates/vendor/i-slint-core-1.16.1/slice.rs | 100 - crates/vendor/i-slint-core-1.16.1/string.rs | 708 - .../vendor/i-slint-core-1.16.1/styled_text.rs | 118 - crates/vendor/i-slint-core-1.16.1/tests.rs | 149 - .../vendor/i-slint-core-1.16.1/textlayout.rs | 709 - .../textlayout/fragments.rs | 362 - .../textlayout/glyphclusters.rs | 102 - .../textlayout/linebreak_simple.rs | 39 - .../textlayout/linebreak_unicode.rs | 41 - .../textlayout/linebreaker.rs | 640 - .../i-slint-core-1.16.1/textlayout/shaping.rs | 403 - .../textlayout/sharedparley.rs | 1542 - crates/vendor/i-slint-core-1.16.1/timers.rs | 1209 - .../i-slint-core-1.16.1/translations.rs | 558 - .../unsafe_single_threaded.rs | 88 - crates/vendor/i-slint-core-1.16.1/window.rs | 2490 -- .../i-slint-core-1.16.1/window/popup.rs | 293 - .../i-slint-renderer-femtovg-1.16.1/.cargo-ok | 1 - .../.cargo_vcs_info.json | 6 - .../Cargo.toml | 145 - .../Cargo.toml.orig | 55 - .../LICENSES/GPL-3.0-only.txt | 232 - .../LicenseRef-Slint-Royalty-free-2.0.md | 43 - .../LICENSES/LicenseRef-Slint-Software-3.0.md | 117 - .../i-slint-renderer-femtovg-1.16.1/README.md | 7 - .../font_cache.rs | 36 - .../i-slint-renderer-femtovg-1.16.1/images.rs | 344 - .../itemrenderer.rs | 1615 -- .../i-slint-renderer-femtovg-1.16.1/lib.rs | 1018 - .../i-slint-renderer-femtovg-1.16.1/opengl.rs | 266 - .../i-slint-renderer-femtovg-1.16.1/wgpu.rs | 574 - .../.cargo_vcs_info.json | 6 - .../i-slint-renderer-skia-1.16.1/Cargo.lock | 3800 --- .../i-slint-renderer-skia-1.16.1/Cargo.toml | 369 - .../Cargo.toml.orig | 135 - .../LICENSES/GPL-3.0-only.txt | 232 - .../LicenseRef-Slint-Royalty-free-2.0.md | 43 - .../LICENSES/LicenseRef-Slint-Software-3.0.md | 117 - .../i-slint-renderer-skia-1.16.1/README.md | 7 - .../i-slint-renderer-skia-1.16.1/build.rs | 16 - .../cached_image.rs | 151 - .../d3d_surface.rs | 442 - .../font_cache.rs | 172 - .../itemrenderer.rs | 1114 - .../i-slint-renderer-skia-1.16.1/lib.rs | 1134 - .../metal_surface.rs | 268 - .../opengl_surface.rs | 527 - .../software_surface.rs | 254 - .../vulkan_surface.rs | 505 - .../wgpu_27_surface.rs | 339 - .../wgpu_27_surface/dx12.rs | 139 - .../wgpu_27_surface/metal.rs | 95 - .../wgpu_27_surface/vulkan.rs | 164 - .../wgpu_28_surface.rs | 339 - .../wgpu_28_surface/dx12.rs | 139 - .../wgpu_28_surface/metal.rs | 95 - .../wgpu_28_surface/vulkan.rs | 164 - 720 files changed, 93 insertions(+), 273809 deletions(-) delete mode 100644 crates/qbz-dac-wizard/Cargo.toml delete mode 100644 crates/qbz-dac-wizard/src/lib.rs delete mode 100644 crates/qbz-slint-common/Cargo.toml delete mode 100644 crates/qbz-slint-common/src/lib.rs delete mode 100644 crates/qbz-slint-common/src/toast.rs delete mode 100644 crates/qbz-ui/Cargo.toml delete mode 100644 crates/qbz-ui/build.rs delete mode 100644 crates/qbz-ui/src/lib.rs delete mode 100644 crates/qbz-ui/ui/album/AlbumBookletModal.slint delete mode 100644 crates/qbz-ui/ui/album/AlbumCreditsModal.slint delete mode 100644 crates/qbz-ui/ui/album/AlbumPageView.slint delete mode 100644 crates/qbz-ui/ui/album/LocalAlbumView.slint delete mode 100644 crates/qbz-ui/ui/album/TrackInfoModal.slint delete mode 100644 crates/qbz-ui/ui/app.slint delete mode 100644 crates/qbz-ui/ui/artist/ArtistPageView.slint delete mode 100644 crates/qbz-ui/ui/artist/ArtistReleasesView.slint delete mode 100644 crates/qbz-ui/ui/artist/ReleaseGrid.slint delete mode 100644 crates/qbz-ui/ui/assets/cd.svg delete mode 100644 crates/qbz-ui/ui/assets/fonts/Inter_18pt-Bold.ttf delete mode 100644 crates/qbz-ui/ui/assets/fonts/Inter_18pt-Medium.ttf delete mode 100644 crates/qbz-ui/ui/assets/fonts/Inter_18pt-Regular.ttf delete mode 100644 crates/qbz-ui/ui/assets/fonts/Inter_18pt-SemiBold.ttf delete mode 100644 crates/qbz-ui/ui/assets/hi-res.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/add-to-list.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/align-start-vertical.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/apple-music-logo.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/arrow-left.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/arrow-up-down.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/audio-lines.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/award.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/blind-eye.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/book-open.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/brand-discogs.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/brand-lastfm.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/brand-musicbrainz.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/bug.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/captions.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/cassette-tape.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/cassette.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/cast.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/cat.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/chart-no-axes-column.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/check.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/chevron-down.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/chevron-left.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/chevron-right.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/chevron-up.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/circle-alert.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/circle-check-big.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/circle-dot.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/circle-stop.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/circle.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/clock.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/cloud-download.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/cloud-off.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/cloud-upload.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/collection.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/compass.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/copy.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/crown.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/deezer-logo.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/disc-3.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/disc-album.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/disc.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/download.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/element-connect.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/ellipsis.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/external-link.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/eye-off.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/eye.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/folder-check.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/folder-open.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/folder-plus.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/folder-tree.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/folder.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/gandalf.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/globe.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/grip-vertical.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/hard-drive.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/heart-crack.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/heart-filled.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/heart.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/home-gear.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/image-plus.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/image.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/import.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/infinity.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/info.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/keyboard.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/layers.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/layout-grid.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/library-big.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/library.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/link.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/list-end.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/list-filter.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/list-indent-increase.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/list-music.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/list-ordered.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/list-plus.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/list-start.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/list-x.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/list.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/loader-circle.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/lock-open.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/lock.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/log-out.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/map-pin.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/maximize-2.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/menu.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/mic-vocal.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/minimize-2.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/minus.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/monitor-speaker.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/monitor.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/moon.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/move.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/music-library-2.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/music.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/my-qbz.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/network.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/panel-left.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/panel-right-close.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/pause.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/pen-line.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/pencil.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/picture-in-picture-2.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/pin-filled.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/pin.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/play-fill.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/play.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/plex-logo.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/plus.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/qbz-symbolic.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/qobuz-logo-filled.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/qobuz-logo.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/radio.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/refresh-cw.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/repeat-1.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/repeat.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/rotate-ccw.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/rows-3.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/search.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/settings-2.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/settings.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/shopping-bag.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/shuffle.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/skip-back.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/skip-forward.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/sliders-horizontal.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/smartphone.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/speaker.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/spotify-logo.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/square-check-big.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/square.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/star.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/sun-moon.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/sun.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/thumbs-down.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/tidal-tidal.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/translate.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/trash-2.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/trash-list.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/triangle-alert.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/turntable.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/user-plus.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/user.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/volume-2.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/volume-x.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/wand-sparkles.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/wifi.svg delete mode 100644 crates/qbz-ui/ui/assets/icons/x.svg delete mode 100644 crates/qbz-ui/ui/assets/laurels.svg delete mode 100644 crates/qbz-ui/ui/assets/mexico-flag.svg delete mode 100644 crates/qbz-ui/ui/assets/mp3.svg delete mode 100644 crates/qbz-ui/ui/assets/qbz-logo-128.png delete mode 100644 crates/qbz-ui/ui/assets/qbz-logo.png delete mode 100644 crates/qbz-ui/ui/award/AwardAlbumsView.slint delete mode 100644 crates/qbz-ui/ui/award/AwardView.slint delete mode 100644 crates/qbz-ui/ui/discover/AlbumCard.slint delete mode 100644 crates/qbz-ui/ui/discover/AlbumCollectionView.slint delete mode 100644 crates/qbz-ui/ui/discover/ArtistCard.slint delete mode 100644 crates/qbz-ui/ui/discover/ArtistCarousel.slint delete mode 100644 crates/qbz-ui/ui/discover/ArtistGridCard.slint delete mode 100644 crates/qbz-ui/ui/discover/BrowseHeaderTools.slint delete mode 100644 crates/qbz-ui/ui/discover/Carousel.slint delete mode 100644 crates/qbz-ui/ui/discover/DiscoverBrowseView.slint delete mode 100644 crates/qbz-ui/ui/discover/DiscoverConfigModal.slint delete mode 100644 crates/qbz-ui/ui/discover/ExternalRecoView.slint delete mode 100644 crates/qbz-ui/ui/discover/ForYouView.slint delete mode 100644 crates/qbz-ui/ui/discover/GenreFilterPopup.slint delete mode 100644 crates/qbz-ui/ui/discover/GridSection.slint delete mode 100644 crates/qbz-ui/ui/discover/HomeSkeleton.slint delete mode 100644 crates/qbz-ui/ui/discover/HomeView.slint delete mode 100644 crates/qbz-ui/ui/discover/LabelCard.slint delete mode 100644 crates/qbz-ui/ui/discover/MostPlayedAlbumsView.slint delete mode 100644 crates/qbz-ui/ui/discover/PinnedCarousel.slint delete mode 100644 crates/qbz-ui/ui/discover/PlaylistBrowseView.slint delete mode 100644 crates/qbz-ui/ui/discover/PlaylistCard.slint delete mode 100644 crates/qbz-ui/ui/discover/PlaylistCarousel.slint delete mode 100644 crates/qbz-ui/ui/discover/PlaylistCollage.slint delete mode 100644 crates/qbz-ui/ui/discover/PlaylistTagFilter.slint delete mode 100644 crates/qbz-ui/ui/discover/QobuzMixesRow.slint delete mode 100644 crates/qbz-ui/ui/discover/RadioCard.slint delete mode 100644 crates/qbz-ui/ui/discover/RadioCarousel.slint delete mode 100644 crates/qbz-ui/ui/discover/RecentAlbumsView.slint delete mode 100644 crates/qbz-ui/ui/discover/SlimCard.slint delete mode 100644 crates/qbz-ui/ui/discover/SlimCarousel.slint delete mode 100644 crates/qbz-ui/ui/discover/Spotlight.slint delete mode 100644 crates/qbz-ui/ui/discover/TrackCard.slint delete mode 100644 crates/qbz-ui/ui/favorites/FavoritesOfflineRail.slint delete mode 100644 crates/qbz-ui/ui/favorites/FavoritesView.slint delete mode 100644 crates/qbz-ui/ui/focus-state.slint delete mode 100644 crates/qbz-ui/ui/foundation/layout.slint delete mode 100644 crates/qbz-ui/ui/foundation/palette.slint delete mode 100644 crates/qbz-ui/ui/foundation/radius.slint delete mode 100644 crates/qbz-ui/ui/foundation/semantic-colors.slint delete mode 100644 crates/qbz-ui/ui/foundation/spacing.slint delete mode 100644 crates/qbz-ui/ui/foundation/theme-state.slint delete mode 100644 crates/qbz-ui/ui/foundation/theme.slint delete mode 100644 crates/qbz-ui/ui/foundation/typography.slint delete mode 100644 crates/qbz-ui/ui/immersive/AlbumReactivePanel.slint delete mode 100644 crates/qbz-ui/ui/immersive/CoverflowPanel.slint delete mode 100644 crates/qbz-ui/ui/immersive/ImmersiveAtmosphere.slint delete mode 100644 crates/qbz-ui/ui/immersive/ImmersiveLyricsFocusPanel.slint delete mode 100644 crates/qbz-ui/ui/immersive/ImmersiveQueuePanel.slint delete mode 100644 crates/qbz-ui/ui/immersive/ImmersiveSearchCortinilla.slint delete mode 100644 crates/qbz-ui/ui/immersive/ImmersiveSongCard.slint delete mode 100644 crates/qbz-ui/ui/immersive/ImmersiveSpectralOverlay.slint delete mode 100644 crates/qbz-ui/ui/immersive/ImmersiveSuggestionsPanel.slint delete mode 100644 crates/qbz-ui/ui/immersive/ImmersiveTrackInfo.slint delete mode 100644 crates/qbz-ui/ui/immersive/ImmersiveTrackInfoPanel.slint delete mode 100644 crates/qbz-ui/ui/immersive/ImmersiveView.slint delete mode 100644 crates/qbz-ui/ui/immersive/ImmersiveWaveBedPanel.slint delete mode 100644 crates/qbz-ui/ui/immersive/SpectrumPanel.slint delete mode 100644 crates/qbz-ui/ui/immersive/StaticPanel.slint delete mode 100644 crates/qbz-ui/ui/label/LabelPageView.slint delete mode 100644 crates/qbz-ui/ui/label/LabelReleasesView.slint delete mode 100644 crates/qbz-ui/ui/locallibrary/LocalLibraryView.slint delete mode 100644 crates/qbz-ui/ui/location/ArtistsByLocationView.slint delete mode 100644 crates/qbz-ui/ui/login/LoginScreen.slint delete mode 100644 crates/qbz-ui/ui/miniplayer/MiniArtworkSurface.slint delete mode 100644 crates/qbz-ui/ui/miniplayer/MiniBits.slint delete mode 100644 crates/qbz-ui/ui/miniplayer/MiniCompactSurface.slint delete mode 100644 crates/qbz-ui/ui/miniplayer/MiniFooter.slint delete mode 100644 crates/qbz-ui/ui/miniplayer/MiniLyricsSurface.slint delete mode 100644 crates/qbz-ui/ui/miniplayer/MiniQueueSurface.slint delete mode 100644 crates/qbz-ui/ui/miniplayer/MiniShell.slint delete mode 100644 crates/qbz-ui/ui/miniplayer/MiniWindowControls.slint delete mode 100644 crates/qbz-ui/ui/mix/MixView.slint delete mode 100644 crates/qbz-ui/ui/musician/MusicianPageView.slint delete mode 100644 crates/qbz-ui/ui/myqbz/AddToMixtapeModal.slint delete mode 100644 crates/qbz-ui/ui/myqbz/CollectionMosaic.slint delete mode 100644 crates/qbz-ui/ui/myqbz/CollectionsView.slint delete mode 100644 crates/qbz-ui/ui/myqbz/CreateMyQbzModal.slint delete mode 100644 crates/qbz-ui/ui/myqbz/DiscographyBuilderView.slint delete mode 100644 crates/qbz-ui/ui/myqbz/MixtapeDetailView.slint delete mode 100644 crates/qbz-ui/ui/myqbz/MixtapesView.slint delete mode 100644 crates/qbz-ui/ui/myqbz/MyQbzEditModal.slint delete mode 100644 crates/qbz-ui/ui/myqbz/MyQbzMixModal.slint delete mode 100644 crates/qbz-ui/ui/myqbz/MyQbzShared.slint delete mode 100644 crates/qbz-ui/ui/offline/OfflineManagerView.slint delete mode 100644 crates/qbz-ui/ui/offline/OfflinePlaceholder.slint delete mode 100644 crates/qbz-ui/ui/playlist/PlaylistManagerView.slint delete mode 100644 crates/qbz-ui/ui/playlist/PlaylistView.slint delete mode 100644 crates/qbz-ui/ui/primitives/AlbumContextMenu.slint delete mode 100644 crates/qbz-ui/ui/primitives/AlbumListRow.slint delete mode 100644 crates/qbz-ui/ui/primitives/BarControls.slint delete mode 100644 crates/qbz-ui/ui/primitives/CircleAction.slint delete mode 100644 crates/qbz-ui/ui/primitives/ColorPicker.slint delete mode 100644 crates/qbz-ui/ui/primitives/CommandBlock.slint delete mode 100644 crates/qbz-ui/ui/primitives/ContextMenu.slint delete mode 100644 crates/qbz-ui/ui/primitives/ContextMenuItem.slint delete mode 100644 crates/qbz-ui/ui/primitives/CreateFolderModal.slint delete mode 100644 crates/qbz-ui/ui/primitives/CreatePlaylistModal.slint delete mode 100644 crates/qbz-ui/ui/primitives/DacWizardModal.slint delete mode 100644 crates/qbz-ui/ui/primitives/DiscContextMenu.slint delete mode 100644 crates/qbz-ui/ui/primitives/DiscHeaderMenu.slint delete mode 100644 crates/qbz-ui/ui/primitives/DragGhost.slint delete mode 100644 crates/qbz-ui/ui/primitives/EditPlaylistModal.slint delete mode 100644 crates/qbz-ui/ui/primitives/EphemeralPlayChoiceModal.slint delete mode 100644 crates/qbz-ui/ui/primitives/ExpandableSearch.slint delete mode 100644 crates/qbz-ui/ui/primitives/FolderEditModal.slint delete mode 100644 crates/qbz-ui/ui/primitives/JumpNavBar.slint delete mode 100644 crates/qbz-ui/ui/primitives/ListScrollbar.slint delete mode 100644 crates/qbz-ui/ui/primitives/LoadingDots.slint delete mode 100644 crates/qbz-ui/ui/primitives/LoadingSpinner.slint delete mode 100644 crates/qbz-ui/ui/primitives/MultiSelectBar.slint delete mode 100644 crates/qbz-ui/ui/primitives/PlaylistDuplicateConfirmModal.slint delete mode 100644 crates/qbz-ui/ui/primitives/PlaylistImportModal.slint delete mode 100644 crates/qbz-ui/ui/primitives/PlaylistListRow.slint delete mode 100644 crates/qbz-ui/ui/primitives/PlaylistPickerModal.slint delete mode 100644 crates/qbz-ui/ui/primitives/PmCollage.slint delete mode 100644 crates/qbz-ui/ui/primitives/PmFolderIcon.slint delete mode 100644 crates/qbz-ui/ui/primitives/QbzCheckbox.slint delete mode 100644 crates/qbz-ui/ui/primitives/QbzIcon.slint delete mode 100644 crates/qbz-ui/ui/primitives/QbzPrimaryButton.slint delete mode 100644 crates/qbz-ui/ui/primitives/QbzSelect.slint delete mode 100644 crates/qbz-ui/ui/primitives/QbzSlider.slint delete mode 100644 crates/qbz-ui/ui/primitives/QbzTextLink.slint delete mode 100644 crates/qbz-ui/ui/primitives/QbzToggle.slint delete mode 100644 crates/qbz-ui/ui/primitives/QbzVerticalSlider.slint delete mode 100644 crates/qbz-ui/ui/primitives/QualityBadge.slint delete mode 100644 crates/qbz-ui/ui/primitives/QualityBadgeFull.slint delete mode 100644 crates/qbz-ui/ui/primitives/SearchTrackHero.slint delete mode 100644 crates/qbz-ui/ui/primitives/SecondaryButton.slint delete mode 100644 crates/qbz-ui/ui/primitives/SegmentedTabBar.slint delete mode 100644 crates/qbz-ui/ui/primitives/SelectionCheckbox.slint delete mode 100644 crates/qbz-ui/ui/primitives/SidebarPlaylistCollage.slint delete mode 100644 crates/qbz-ui/ui/primitives/SourceGlyph.slint delete mode 100644 crates/qbz-ui/ui/primitives/TagEditorModal.slint delete mode 100644 crates/qbz-ui/ui/primitives/Toast.slint delete mode 100644 crates/qbz-ui/ui/primitives/ToggleButton.slint delete mode 100644 crates/qbz-ui/ui/primitives/TrackContextMenu.slint delete mode 100644 crates/qbz-ui/ui/primitives/TrackPlayCell.slint delete mode 100644 crates/qbz-ui/ui/primitives/TrackRow.slint delete mode 100644 crates/qbz-ui/ui/primitives/WarningBanner.slint delete mode 100644 crates/qbz-ui/ui/purchases/PurchaseDetailView.slint delete mode 100644 crates/qbz-ui/ui/purchases/PurchasesView.slint delete mode 100644 crates/qbz-ui/ui/search/Cortinilla.slint delete mode 100644 crates/qbz-ui/ui/search/SearchResultsView.slint delete mode 100644 crates/qbz-ui/ui/settings/AppearanceSettings.slint delete mode 100644 crates/qbz-ui/ui/settings/AudioSettings.slint delete mode 100644 crates/qbz-ui/ui/settings/BlacklistManagerView.slint delete mode 100644 crates/qbz-ui/ui/settings/ContentFilteringSettings.slint delete mode 100644 crates/qbz-ui/ui/settings/DeveloperSettings.slint delete mode 100644 crates/qbz-ui/ui/settings/DiagnosticsPanel.slint delete mode 100644 crates/qbz-ui/ui/settings/IntegrationsSettings.slint delete mode 100644 crates/qbz-ui/ui/settings/LibFolderEditModal.slint delete mode 100644 crates/qbz-ui/ui/settings/LocalLibrarySettings.slint delete mode 100644 crates/qbz-ui/ui/settings/OfflineSettings.slint delete mode 100644 crates/qbz-ui/ui/settings/PlaybackSettings.slint delete mode 100644 crates/qbz-ui/ui/settings/SandboxSettings.slint delete mode 100644 crates/qbz-ui/ui/settings/SettingRow.slint delete mode 100644 crates/qbz-ui/ui/settings/SettingsExportModal.slint delete mode 100644 crates/qbz-ui/ui/settings/SettingsView.slint delete mode 100644 crates/qbz-ui/ui/shaders/ambient.wgsl delete mode 100644 crates/qbz-ui/ui/shaders/aurora.wgsl delete mode 100644 crates/qbz-ui/ui/shaders/line_bed.wgsl delete mode 100644 crates/qbz-ui/ui/shaders/liquid_spectrum.wgsl delete mode 100644 crates/qbz-ui/ui/shaders/plasma.wgsl delete mode 100644 crates/qbz-ui/ui/shaders/spectral_ribbon.wgsl delete mode 100644 crates/qbz-ui/ui/shaders/tunnel.wgsl delete mode 100644 crates/qbz-ui/ui/shell/AboutModal.slint delete mode 100644 crates/qbz-ui/ui/shell/AppShell.slint delete mode 100644 crates/qbz-ui/ui/shell/ArtPreviewOverlay.slint delete mode 100644 crates/qbz-ui/ui/shell/AudioStamp.slint delete mode 100644 crates/qbz-ui/ui/shell/CastPicker.slint delete mode 100644 crates/qbz-ui/ui/shell/CustomizeShortcutsModal.slint delete mode 100644 crates/qbz-ui/ui/shell/HeaderBar.slint delete mode 100644 crates/qbz-ui/ui/shell/HeaderMenuOverlay.slint delete mode 100644 crates/qbz-ui/ui/shell/KeyboardShortcutsModal.slint delete mode 100644 crates/qbz-ui/ui/shell/KioskAlbum.slint delete mode 100644 crates/qbz-ui/ui/shell/KioskAlbumGrid.slint delete mode 100644 crates/qbz-ui/ui/shell/KioskArtist.slint delete mode 100644 crates/qbz-ui/ui/shell/KioskArtistCard.slint delete mode 100644 crates/qbz-ui/ui/shell/KioskCard.slint delete mode 100644 crates/qbz-ui/ui/shell/KioskDiscover.slint delete mode 100644 crates/qbz-ui/ui/shell/KioskLibrary.slint delete mode 100644 crates/qbz-ui/ui/shell/KioskLocalLibrary.slint delete mode 100644 crates/qbz-ui/ui/shell/KioskMyQBZ.slint delete mode 100644 crates/qbz-ui/ui/shell/KioskNowPlaying.slint delete mode 100644 crates/qbz-ui/ui/shell/KioskSearch.slint delete mode 100644 crates/qbz-ui/ui/shell/KioskShell.slint delete mode 100644 crates/qbz-ui/ui/shell/KioskTrackRow.slint delete mode 100644 crates/qbz-ui/ui/shell/LinkResolverModal.slint delete mode 100644 crates/qbz-ui/ui/shell/LogViewerModal.slint delete mode 100644 crates/qbz-ui/ui/shell/LyricsControlsFlyout.slint delete mode 100644 crates/qbz-ui/ui/shell/LyricsLinesView.slint delete mode 100644 crates/qbz-ui/ui/shell/LyricsSidebar.slint delete mode 100644 crates/qbz-ui/ui/shell/NavButtons.slint delete mode 100644 crates/qbz-ui/ui/shell/NavMenuItem.slint delete mode 100644 crates/qbz-ui/ui/shell/NavRail.slint delete mode 100644 crates/qbz-ui/ui/shell/NowPlayingBar.slint delete mode 100644 crates/qbz-ui/ui/shell/PlayerBar.slint delete mode 100644 crates/qbz-ui/ui/shell/PlayerBarSmall.slint delete mode 100644 crates/qbz-ui/ui/shell/QconnectDevModal.slint delete mode 100644 crates/qbz-ui/ui/shell/QueueSidebar.slint delete mode 100644 crates/qbz-ui/ui/shell/ReportIssueModal.slint delete mode 100644 crates/qbz-ui/ui/shell/SeekBar.slint delete mode 100644 crates/qbz-ui/ui/shell/Sidebar.slint delete mode 100644 crates/qbz-ui/ui/shell/SidebarFolderPopup.slint delete mode 100644 crates/qbz-ui/ui/shell/SidebarNowPlayingDock.slint delete mode 100644 crates/qbz-ui/ui/shell/SidebarPlaylistsPopup.slint delete mode 100644 crates/qbz-ui/ui/shell/SidebarTooltip.slint delete mode 100644 crates/qbz-ui/ui/shell/SongCard.slint delete mode 100644 crates/qbz-ui/ui/shell/TooltipOverlay.slint delete mode 100644 crates/qbz-ui/ui/shell/TransportControls.slint delete mode 100644 crates/qbz-ui/ui/shell/WhatsNewModal.slint delete mode 100644 crates/qbz-ui/ui/shell/WindowControls.slint delete mode 100644 crates/qbz-ui/ui/splash/SplashScreen.slint delete mode 100644 crates/qbz-ui/ui/state.slint delete mode 100644 crates/qbz/Cargo.toml delete mode 100644 crates/qbz/build.rs delete mode 100644 crates/qbz/icons/tray-color-22.png delete mode 100644 crates/qbz/icons/tray-color-32.png delete mode 100644 crates/qbz/icons/tray-color-44.png delete mode 100644 crates/qbz/icons/tray-color-64.png delete mode 100644 crates/qbz/icons/tray-dark-22.png delete mode 100644 crates/qbz/icons/tray-dark-32.png delete mode 100644 crates/qbz/icons/tray-dark-44.png delete mode 100644 crates/qbz/icons/tray-dark-64.png delete mode 100644 crates/qbz/icons/tray-light-22.png delete mode 100644 crates/qbz/icons/tray-light-32.png delete mode 100644 crates/qbz/icons/tray-light-44.png delete mode 100644 crates/qbz/icons/tray-light-64.png delete mode 100644 crates/qbz/packaging/qbz.desktop delete mode 100644 crates/qbz/packaging/qbz.png delete mode 100644 crates/qbz/src/about.rs delete mode 100644 crates/qbz/src/adapter.rs delete mode 100644 crates/qbz/src/album.rs delete mode 100644 crates/qbz/src/album_map.rs delete mode 100644 crates/qbz/src/artist.rs delete mode 100644 crates/qbz/src/artist_blacklist.rs delete mode 100644 crates/qbz/src/artist_prefs.rs delete mode 100644 crates/qbz/src/artist_releases.rs delete mode 100644 crates/qbz/src/artwork.rs delete mode 100644 crates/qbz/src/auth.rs delete mode 100644 crates/qbz/src/auto_theme.rs delete mode 100644 crates/qbz/src/award.rs delete mode 100644 crates/qbz/src/blacklist_manager.rs delete mode 100644 crates/qbz/src/booklet.rs delete mode 100644 crates/qbz/src/cast_service.rs delete mode 100644 crates/qbz/src/commands.rs delete mode 100644 crates/qbz/src/custom_artwork.rs delete mode 100644 crates/qbz/src/custom_theme.rs delete mode 100644 crates/qbz/src/deep_link.rs delete mode 100644 crates/qbz/src/device_cap.rs delete mode 100644 crates/qbz/src/diagnostics.rs delete mode 100644 crates/qbz/src/discord_rpc.rs delete mode 100644 crates/qbz/src/discover_browse.rs delete mode 100644 crates/qbz/src/discover_prefs.rs delete mode 100644 crates/qbz/src/discovery_dismiss.rs delete mode 100644 crates/qbz/src/drag.rs delete mode 100644 crates/qbz/src/ephemeral.rs delete mode 100644 crates/qbz/src/external_reco.rs delete mode 100644 crates/qbz/src/fav_cache.rs delete mode 100644 crates/qbz/src/favorites.rs delete mode 100644 crates/qbz/src/favorites_prefs.rs delete mode 100644 crates/qbz/src/folders.rs delete mode 100644 crates/qbz/src/foryou.rs delete mode 100644 crates/qbz/src/gamepad.rs delete mode 100644 crates/qbz/src/genre_filter.rs delete mode 100644 crates/qbz/src/glibc_compat.rs delete mode 100644 crates/qbz/src/home.rs delete mode 100644 crates/qbz/src/immersive.rs delete mode 100644 crates/qbz/src/info_modals.rs delete mode 100644 crates/qbz/src/keybindings.rs delete mode 100644 crates/qbz/src/label.rs delete mode 100644 crates/qbz/src/library_all.rs delete mode 100644 crates/qbz/src/library_by_artist.rs delete mode 100644 crates/qbz/src/library_by_label.rs delete mode 100644 crates/qbz/src/library_db.rs delete mode 100644 crates/qbz/src/link_resolver.rs delete mode 100644 crates/qbz/src/local_favorites.rs delete mode 100644 crates/qbz/src/local_library.rs delete mode 100644 crates/qbz/src/local_library_settings.rs delete mode 100644 crates/qbz/src/local_playlist.rs delete mode 100644 crates/qbz/src/locallibrary_prefs.rs delete mode 100644 crates/qbz/src/location_view.rs delete mode 100644 crates/qbz/src/log_viewer.rs delete mode 100644 crates/qbz/src/lyrics.rs delete mode 100644 crates/qbz/src/lyrics_measure.rs delete mode 100644 crates/qbz/src/lyrics_prefs.rs delete mode 100644 crates/qbz/src/lyrics_sync.rs delete mode 100644 crates/qbz/src/macos_chrome.rs delete mode 100644 crates/qbz/src/main.rs delete mode 100644 crates/qbz/src/media_controls.rs delete mode 100644 crates/qbz/src/miniplayer.rs delete mode 100644 crates/qbz/src/mix.rs delete mode 100644 crates/qbz/src/musician.rs delete mode 100644 crates/qbz/src/myqbz.rs delete mode 100644 crates/qbz/src/myqbz_add.rs delete mode 100644 crates/qbz/src/myqbz_builder.rs delete mode 100644 crates/qbz/src/myqbz_cover.rs delete mode 100644 crates/qbz/src/myqbz_detail.rs delete mode 100644 crates/qbz/src/myqbz_edit.rs delete mode 100644 crates/qbz/src/myqbz_mix.rs delete mode 100644 crates/qbz/src/myqbz_play.rs delete mode 100644 crates/qbz/src/myqbz_prefs.rs delete mode 100644 crates/qbz/src/myqbz_view_prefs.rs delete mode 100644 crates/qbz/src/nav.rs delete mode 100644 crates/qbz/src/offline.rs delete mode 100644 crates/qbz/src/offline_cache.rs delete mode 100644 crates/qbz/src/offline_favorites.rs delete mode 100644 crates/qbz/src/offline_manager.rs delete mode 100644 crates/qbz/src/offline_mode.rs delete mode 100644 crates/qbz/src/pinned.rs delete mode 100644 crates/qbz/src/pinned_section.rs delete mode 100644 crates/qbz/src/play_history.rs delete mode 100644 crates/qbz/src/playback.rs delete mode 100644 crates/qbz/src/playlist.rs delete mode 100644 crates/qbz/src/playlist_browse.rs delete mode 100644 crates/qbz/src/playlist_import.rs delete mode 100644 crates/qbz/src/playlist_manager.rs delete mode 100644 crates/qbz/src/playlist_picker.rs delete mode 100644 crates/qbz/src/playlist_snapshot.rs delete mode 100644 crates/qbz/src/playlist_suggestions.rs delete mode 100644 crates/qbz/src/playlist_suggestions_dismiss.rs delete mode 100644 crates/qbz/src/plex_auth.rs delete mode 100644 crates/qbz/src/plex_settings.rs delete mode 100644 crates/qbz/src/purchases.rs delete mode 100644 crates/qbz/src/qconnect_engine.rs delete mode 100644 crates/qbz/src/qconnect_event_sink.rs delete mode 100644 crates/qbz/src/qconnect_service.rs delete mode 100644 crates/qbz/src/qconnect_transport.rs delete mode 100644 crates/qbz/src/quality.rs delete mode 100644 crates/qbz/src/queue.rs delete mode 100644 crates/qbz/src/recently.rs delete mode 100644 crates/qbz/src/reco.rs delete mode 100644 crates/qbz/src/reco_dismiss.rs delete mode 100644 crates/qbz/src/remote_stream.rs delete mode 100644 crates/qbz/src/scrobble.rs delete mode 100644 crates/qbz/src/scrobbler_settings.rs delete mode 100644 crates/qbz/src/search.rs delete mode 100644 crates/qbz/src/search_service.rs delete mode 100644 crates/qbz/src/selection.rs delete mode 100644 crates/qbz/src/session_persist.rs delete mode 100644 crates/qbz/src/settings.rs delete mode 100644 crates/qbz/src/shader_underlay.rs delete mode 100644 crates/qbz/src/share.rs delete mode 100644 crates/qbz/src/sidebar.rs delete mode 100644 crates/qbz/src/single_instance.rs delete mode 100644 crates/qbz/src/sleep_timer.rs delete mode 100644 crates/qbz/src/steam_osk.rs delete mode 100644 crates/qbz/src/suggestions.rs delete mode 100644 crates/qbz/src/tag_editor.rs delete mode 100644 crates/qbz/src/theme.rs delete mode 100644 crates/qbz/src/tray/linux.rs delete mode 100644 crates/qbz/src/tray/macos.rs delete mode 100644 crates/qbz/src/tray/mod.rs delete mode 100644 crates/qbz/src/tray_settings.rs delete mode 100644 crates/qbz/src/ui_prefs.rs delete mode 100644 crates/qbz/src/ui_watchdog.rs delete mode 100644 crates/qbz/src/viewport.rs delete mode 100644 crates/qbz/src/visualizer.rs delete mode 100644 crates/qbz/src/whats_new.rs delete mode 100644 crates/vendor/femtovg-0.23.2/.cargo_vcs_info.json delete mode 100644 crates/vendor/femtovg-0.23.2/CHANGELOG.md delete mode 100644 crates/vendor/femtovg-0.23.2/Cargo.lock delete mode 100644 crates/vendor/femtovg-0.23.2/Cargo.toml delete mode 100644 crates/vendor/femtovg-0.23.2/Cargo.toml.orig delete mode 100644 crates/vendor/femtovg-0.23.2/LICENSE-APACHE delete mode 100644 crates/vendor/femtovg-0.23.2/LICENSE-MIT delete mode 100644 crates/vendor/femtovg-0.23.2/README.md delete mode 100644 crates/vendor/femtovg-0.23.2/rustfmt.toml delete mode 100644 crates/vendor/femtovg-0.23.2/src/color.rs delete mode 100644 crates/vendor/femtovg-0.23.2/src/error.rs delete mode 100644 crates/vendor/femtovg-0.23.2/src/geometry.rs delete mode 100644 crates/vendor/femtovg-0.23.2/src/gradient_store.rs delete mode 100644 crates/vendor/femtovg-0.23.2/src/image.rs delete mode 100644 crates/vendor/femtovg-0.23.2/src/lib.rs delete mode 100644 crates/vendor/femtovg-0.23.2/src/paint.rs delete mode 100644 crates/vendor/femtovg-0.23.2/src/path.rs delete mode 100644 crates/vendor/femtovg-0.23.2/src/path/cache.rs delete mode 100644 crates/vendor/femtovg-0.23.2/src/renderer.rs delete mode 100644 crates/vendor/femtovg-0.23.2/src/renderer/opengl.rs delete mode 100644 crates/vendor/femtovg-0.23.2/src/renderer/opengl/framebuffer.rs delete mode 100644 crates/vendor/femtovg-0.23.2/src/renderer/opengl/gl_texture.rs delete mode 100644 crates/vendor/femtovg-0.23.2/src/renderer/opengl/main-fs.glsl delete mode 100644 crates/vendor/femtovg-0.23.2/src/renderer/opengl/main-vs.glsl delete mode 100644 crates/vendor/femtovg-0.23.2/src/renderer/opengl/program.rs delete mode 100644 crates/vendor/femtovg-0.23.2/src/renderer/opengl/uniform_array.rs delete mode 100644 crates/vendor/femtovg-0.23.2/src/renderer/params.rs delete mode 100644 crates/vendor/femtovg-0.23.2/src/renderer/void.rs delete mode 100644 crates/vendor/femtovg-0.23.2/src/renderer/wgpu.rs delete mode 100644 crates/vendor/femtovg-0.23.2/src/renderer/wgpu/shader.wgsl delete mode 100644 crates/vendor/femtovg-0.23.2/src/text.rs delete mode 100644 crates/vendor/femtovg-0.23.2/src/text/atlas.rs delete mode 100644 crates/vendor/femtovg-0.23.2/src/text/font.rs delete mode 100644 crates/vendor/femtovg-0.23.2/src/text/textlayout.rs delete mode 100644 crates/vendor/femtovg-0.23.2/tests/integration.rs delete mode 100644 crates/vendor/femtovg-0.23.2/tests/transform2D.rs delete mode 100644 crates/vendor/i-slint-common-1.16.1/.cargo_vcs_info.json delete mode 100644 crates/vendor/i-slint-common-1.16.1/Cargo.lock delete mode 100644 crates/vendor/i-slint-common-1.16.1/Cargo.toml delete mode 100644 crates/vendor/i-slint-common-1.16.1/Cargo.toml.orig delete mode 100644 crates/vendor/i-slint-common-1.16.1/LICENSES/GPL-3.0-only.txt delete mode 100644 crates/vendor/i-slint-common-1.16.1/LICENSES/LicenseRef-Slint-Royalty-free-2.0.md delete mode 100644 crates/vendor/i-slint-common-1.16.1/LICENSES/LicenseRef-Slint-Software-3.0.md delete mode 100644 crates/vendor/i-slint-common-1.16.1/README.md delete mode 100644 crates/vendor/i-slint-common-1.16.1/builtin_structs.rs delete mode 100644 crates/vendor/i-slint-common-1.16.1/color_parsing.rs delete mode 100644 crates/vendor/i-slint-common-1.16.1/enums.rs delete mode 100644 crates/vendor/i-slint-common-1.16.1/key_codes.rs delete mode 100644 crates/vendor/i-slint-common-1.16.1/lib.rs delete mode 100644 crates/vendor/i-slint-common-1.16.1/sharedfontique.rs delete mode 100644 crates/vendor/i-slint-common-1.16.1/sharedfontique/Inter-VariableFont.ttf delete mode 100644 crates/vendor/i-slint-common-1.16.1/sharedfontique/Inter-VariableFont.ttf.license delete mode 100644 crates/vendor/i-slint-common-1.16.1/styled_text.rs delete mode 100644 crates/vendor/i-slint-core-1.16.1/.cargo_vcs_info.json delete mode 100644 crates/vendor/i-slint-core-1.16.1/Cargo.lock delete mode 100644 crates/vendor/i-slint-core-1.16.1/Cargo.toml delete mode 100644 crates/vendor/i-slint-core-1.16.1/Cargo.toml.orig delete mode 100644 crates/vendor/i-slint-core-1.16.1/LICENSES/GPL-3.0-only.txt delete mode 100644 crates/vendor/i-slint-core-1.16.1/LICENSES/LicenseRef-Slint-Royalty-free-2.0.md delete mode 100644 crates/vendor/i-slint-core-1.16.1/LICENSES/LicenseRef-Slint-Software-3.0.md delete mode 100644 crates/vendor/i-slint-core-1.16.1/README.md delete mode 100644 crates/vendor/i-slint-core-1.16.1/accessibility.rs delete mode 100644 crates/vendor/i-slint-core-1.16.1/animations.rs delete mode 100644 crates/vendor/i-slint-core-1.16.1/animations/physics_simulation.rs delete mode 100644 crates/vendor/i-slint-core-1.16.1/api.rs delete mode 100644 crates/vendor/i-slint-core-1.16.1/callbacks.rs delete mode 100644 crates/vendor/i-slint-core-1.16.1/component_factory.rs delete mode 100644 crates/vendor/i-slint-core-1.16.1/context.rs delete mode 100644 crates/vendor/i-slint-core-1.16.1/date_time.rs delete mode 100644 crates/vendor/i-slint-core-1.16.1/future.rs delete mode 100644 crates/vendor/i-slint-core-1.16.1/gdb_pretty_printers.py delete mode 100644 crates/vendor/i-slint-core-1.16.1/graphics.rs delete mode 100644 crates/vendor/i-slint-core-1.16.1/graphics/bitmapfont.rs delete mode 100644 crates/vendor/i-slint-core-1.16.1/graphics/border_radius.rs delete mode 100644 crates/vendor/i-slint-core-1.16.1/graphics/boxshadowcache.rs delete mode 100644 crates/vendor/i-slint-core-1.16.1/graphics/brush.rs delete mode 100644 crates/vendor/i-slint-core-1.16.1/graphics/color.rs delete mode 100644 crates/vendor/i-slint-core-1.16.1/graphics/image.rs delete mode 100644 crates/vendor/i-slint-core-1.16.1/graphics/image/cache.rs delete mode 100644 crates/vendor/i-slint-core-1.16.1/graphics/image/htmlimage.rs delete mode 100644 crates/vendor/i-slint-core-1.16.1/graphics/image/svg.rs delete mode 100644 crates/vendor/i-slint-core-1.16.1/graphics/path.rs delete mode 100644 crates/vendor/i-slint-core-1.16.1/graphics/rendering_metrics_collector.rs delete mode 100644 crates/vendor/i-slint-core-1.16.1/graphics/wgpu_27.rs delete mode 100644 crates/vendor/i-slint-core-1.16.1/graphics/wgpu_28.rs delete mode 100644 crates/vendor/i-slint-core-1.16.1/input.rs delete mode 100644 crates/vendor/i-slint-core-1.16.1/item_focus.rs delete mode 100644 crates/vendor/i-slint-core-1.16.1/item_rendering.rs delete mode 100644 crates/vendor/i-slint-core-1.16.1/item_tree.rs delete mode 100644 crates/vendor/i-slint-core-1.16.1/items.rs delete mode 100644 crates/vendor/i-slint-core-1.16.1/items/component_container.rs delete mode 100644 crates/vendor/i-slint-core-1.16.1/items/drag_n_drop.rs delete mode 100644 crates/vendor/i-slint-core-1.16.1/items/flickable.rs delete mode 100644 crates/vendor/i-slint-core-1.16.1/items/flickable/data_ringbuffer.rs delete mode 100644 crates/vendor/i-slint-core-1.16.1/items/image.rs delete mode 100644 crates/vendor/i-slint-core-1.16.1/items/input_items.rs delete mode 100644 crates/vendor/i-slint-core-1.16.1/items/path.rs delete mode 100644 crates/vendor/i-slint-core-1.16.1/items/text.rs delete mode 100644 crates/vendor/i-slint-core-1.16.1/layout.rs delete mode 100644 crates/vendor/i-slint-core-1.16.1/lengths.rs delete mode 100644 crates/vendor/i-slint-core-1.16.1/lib.rs delete mode 100644 crates/vendor/i-slint-core-1.16.1/menus.rs delete mode 100644 crates/vendor/i-slint-core-1.16.1/model.rs delete mode 100644 crates/vendor/i-slint-core-1.16.1/model/adapters.rs delete mode 100644 crates/vendor/i-slint-core-1.16.1/model/model_peer.rs delete mode 100644 crates/vendor/i-slint-core-1.16.1/model/repeater.rs delete mode 100644 crates/vendor/i-slint-core-1.16.1/partial_renderer.rs delete mode 100644 crates/vendor/i-slint-core-1.16.1/platform.rs delete mode 100644 crates/vendor/i-slint-core-1.16.1/properties.rs delete mode 100644 crates/vendor/i-slint-core-1.16.1/properties/change_tracker.rs delete mode 100644 crates/vendor/i-slint-core-1.16.1/properties/ffi.rs delete mode 100644 crates/vendor/i-slint-core-1.16.1/properties/properties_animations.rs delete mode 100644 crates/vendor/i-slint-core-1.16.1/properties/two_way_binding.rs delete mode 100644 crates/vendor/i-slint-core-1.16.1/renderer.rs delete mode 100644 crates/vendor/i-slint-core-1.16.1/rtti.rs delete mode 100644 crates/vendor/i-slint-core-1.16.1/sharedvector.rs delete mode 100644 crates/vendor/i-slint-core-1.16.1/slice.rs delete mode 100644 crates/vendor/i-slint-core-1.16.1/string.rs delete mode 100644 crates/vendor/i-slint-core-1.16.1/styled_text.rs delete mode 100644 crates/vendor/i-slint-core-1.16.1/tests.rs delete mode 100644 crates/vendor/i-slint-core-1.16.1/textlayout.rs delete mode 100644 crates/vendor/i-slint-core-1.16.1/textlayout/fragments.rs delete mode 100644 crates/vendor/i-slint-core-1.16.1/textlayout/glyphclusters.rs delete mode 100644 crates/vendor/i-slint-core-1.16.1/textlayout/linebreak_simple.rs delete mode 100644 crates/vendor/i-slint-core-1.16.1/textlayout/linebreak_unicode.rs delete mode 100644 crates/vendor/i-slint-core-1.16.1/textlayout/linebreaker.rs delete mode 100644 crates/vendor/i-slint-core-1.16.1/textlayout/shaping.rs delete mode 100644 crates/vendor/i-slint-core-1.16.1/textlayout/sharedparley.rs delete mode 100644 crates/vendor/i-slint-core-1.16.1/timers.rs delete mode 100644 crates/vendor/i-slint-core-1.16.1/translations.rs delete mode 100644 crates/vendor/i-slint-core-1.16.1/unsafe_single_threaded.rs delete mode 100644 crates/vendor/i-slint-core-1.16.1/window.rs delete mode 100644 crates/vendor/i-slint-core-1.16.1/window/popup.rs delete mode 100644 crates/vendor/i-slint-renderer-femtovg-1.16.1/.cargo-ok delete mode 100644 crates/vendor/i-slint-renderer-femtovg-1.16.1/.cargo_vcs_info.json delete mode 100644 crates/vendor/i-slint-renderer-femtovg-1.16.1/Cargo.toml delete mode 100644 crates/vendor/i-slint-renderer-femtovg-1.16.1/Cargo.toml.orig delete mode 100644 crates/vendor/i-slint-renderer-femtovg-1.16.1/LICENSES/GPL-3.0-only.txt delete mode 100644 crates/vendor/i-slint-renderer-femtovg-1.16.1/LICENSES/LicenseRef-Slint-Royalty-free-2.0.md delete mode 100644 crates/vendor/i-slint-renderer-femtovg-1.16.1/LICENSES/LicenseRef-Slint-Software-3.0.md delete mode 100644 crates/vendor/i-slint-renderer-femtovg-1.16.1/README.md delete mode 100644 crates/vendor/i-slint-renderer-femtovg-1.16.1/font_cache.rs delete mode 100644 crates/vendor/i-slint-renderer-femtovg-1.16.1/images.rs delete mode 100644 crates/vendor/i-slint-renderer-femtovg-1.16.1/itemrenderer.rs delete mode 100644 crates/vendor/i-slint-renderer-femtovg-1.16.1/lib.rs delete mode 100644 crates/vendor/i-slint-renderer-femtovg-1.16.1/opengl.rs delete mode 100644 crates/vendor/i-slint-renderer-femtovg-1.16.1/wgpu.rs delete mode 100644 crates/vendor/i-slint-renderer-skia-1.16.1/.cargo_vcs_info.json delete mode 100644 crates/vendor/i-slint-renderer-skia-1.16.1/Cargo.lock delete mode 100644 crates/vendor/i-slint-renderer-skia-1.16.1/Cargo.toml delete mode 100644 crates/vendor/i-slint-renderer-skia-1.16.1/Cargo.toml.orig delete mode 100644 crates/vendor/i-slint-renderer-skia-1.16.1/LICENSES/GPL-3.0-only.txt delete mode 100644 crates/vendor/i-slint-renderer-skia-1.16.1/LICENSES/LicenseRef-Slint-Royalty-free-2.0.md delete mode 100644 crates/vendor/i-slint-renderer-skia-1.16.1/LICENSES/LicenseRef-Slint-Software-3.0.md delete mode 100644 crates/vendor/i-slint-renderer-skia-1.16.1/README.md delete mode 100644 crates/vendor/i-slint-renderer-skia-1.16.1/build.rs delete mode 100644 crates/vendor/i-slint-renderer-skia-1.16.1/cached_image.rs delete mode 100644 crates/vendor/i-slint-renderer-skia-1.16.1/d3d_surface.rs delete mode 100644 crates/vendor/i-slint-renderer-skia-1.16.1/font_cache.rs delete mode 100644 crates/vendor/i-slint-renderer-skia-1.16.1/itemrenderer.rs delete mode 100644 crates/vendor/i-slint-renderer-skia-1.16.1/lib.rs delete mode 100644 crates/vendor/i-slint-renderer-skia-1.16.1/metal_surface.rs delete mode 100644 crates/vendor/i-slint-renderer-skia-1.16.1/opengl_surface.rs delete mode 100644 crates/vendor/i-slint-renderer-skia-1.16.1/software_surface.rs delete mode 100644 crates/vendor/i-slint-renderer-skia-1.16.1/vulkan_surface.rs delete mode 100644 crates/vendor/i-slint-renderer-skia-1.16.1/wgpu_27_surface.rs delete mode 100644 crates/vendor/i-slint-renderer-skia-1.16.1/wgpu_27_surface/dx12.rs delete mode 100644 crates/vendor/i-slint-renderer-skia-1.16.1/wgpu_27_surface/metal.rs delete mode 100644 crates/vendor/i-slint-renderer-skia-1.16.1/wgpu_27_surface/vulkan.rs delete mode 100644 crates/vendor/i-slint-renderer-skia-1.16.1/wgpu_28_surface.rs delete mode 100644 crates/vendor/i-slint-renderer-skia-1.16.1/wgpu_28_surface/dx12.rs delete mode 100644 crates/vendor/i-slint-renderer-skia-1.16.1/wgpu_28_surface/metal.rs delete mode 100644 crates/vendor/i-slint-renderer-skia-1.16.1/wgpu_28_surface/vulkan.rs diff --git a/crates/Cargo.lock b/crates/Cargo.lock index 4bbcdcede..cb446a924 100644 --- a/crates/Cargo.lock +++ b/crates/Cargo.lock @@ -2,111 +2,6 @@ # It is not intended for manual editing. version = 4 -[[package]] -name = "ab_glyph" -version = "0.2.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01c0457472c38ea5bd1c3b5ada5e368271cb550be7a4ca4a0b4634e9913f6cc2" -dependencies = [ - "ab_glyph_rasterizer", - "owned_ttf_parser", -] - -[[package]] -name = "ab_glyph_rasterizer" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "366ffbaa4442f4684d91e2cd7c5ea7c4ed8add41959a31447066e279e432b618" - -[[package]] -name = "accesskit" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3eca13c82f9a5cd813120b2e9b6a5d10532c6e4cd140c295cebd1f770095c8a5" - -[[package]] -name = "accesskit_atspi_common" -version = "0.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3eb9cc46b7fb6987c4f891f0301b230b29d9e69b4854f060a0cf41fbc407ab77" -dependencies = [ - "accesskit", - "accesskit_consumer", - "atspi-common", - "serde", - "zvariant 5.11.0", -] - -[[package]] -name = "accesskit_consumer" -version = "0.32.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69d880a613f29621c90e801feec40f5dd61d837d7e20bf9b67676d45e7364a36" -dependencies = [ - "accesskit", - "hashbrown 0.16.1", -] - -[[package]] -name = "accesskit_macos" -version = "0.23.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b0ddfc3fe3d457d11cc1c4989105986a03583a1d54d0c25053118944b62e100" -dependencies = [ - "accesskit", - "accesskit_consumer", - "hashbrown 0.16.1", - "objc2 0.5.2", - "objc2-app-kit 0.2.2", - "objc2-foundation 0.2.2", -] - -[[package]] -name = "accesskit_unix" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5d552169ef018149966ed139bb0311c6947b3343e9140d1b9f88d69da9528fd" -dependencies = [ - "accesskit", - "accesskit_atspi_common", - "async-channel", - "async-executor", - "async-task", - "atspi", - "futures-lite", - "futures-util", - "serde", - "zbus 5.15.0", -] - -[[package]] -name = "accesskit_windows" -version = "0.30.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d277279d0a3b0c0021dd110b55aa1fe326b09ee2cbc338df28f847c7daf94e25" -dependencies = [ - "accesskit", - "accesskit_consumer", - "hashbrown 0.16.1", - "static_assertions", - "windows 0.61.3", - "windows-core 0.61.2", -] - -[[package]] -name = "accesskit_winit" -version = "0.30.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db08dff285306264a1de127ea07bb9e7a1ed71bd8593c168d0731caa782516c9" -dependencies = [ - "accesskit", - "accesskit_macos", - "accesskit_unix", - "accesskit_windows", - "raw-window-handle", - "winit", -] - [[package]] name = "adler2" version = "2.0.1" @@ -155,7 +50,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" dependencies = [ "cfg-if", - "getrandom 0.3.4", "once_cell", "version_check", "zerocopy", @@ -170,24 +64,6 @@ dependencies = [ "memchr", ] -[[package]] -name = "aligned" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee4508988c62edf04abd8d92897fca0c2995d907ce1dfeaf369dac3716a40685" -dependencies = [ - "as-slice", -] - -[[package]] -name = "aligned-vec" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc890384c8602f339876ded803c97ad529f3842aba97f6392b3dba0dd171769b" -dependencies = [ - "equator", -] - [[package]] name = "allocator-api2" version = "0.2.21" @@ -216,40 +92,6 @@ dependencies = [ "pkg-config", ] -[[package]] -name = "android-activity" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f2a1bb052857d5dd49572219344a7332b31b76405648eabac5bc68978251bcd" -dependencies = [ - "android-properties", - "bitflags 2.13.0", - "cc", - "jni 0.22.4", - "libc", - "log", - "ndk", - "ndk-context", - "ndk-sys", - "num_enum", - "thiserror 2.0.18", -] - -[[package]] -name = "android-build" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9fc9904ad2ad097c3c1cfe2eacaaf0fc24710936fa9ed941cb310b7c6ed2ab7" -dependencies = [ - "windows-sys 0.52.0", -] - -[[package]] -name = "android-properties" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc7eb209b1518d6bb87b283c20095f5228ecda460da70b44f0802523dea6da04" - [[package]] name = "android_system_properties" version = "0.1.5" @@ -259,17 +101,6 @@ dependencies = [ "libc", ] -[[package]] -name = "annotate-snippets" -version = "0.12.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f211a51805bc641f3ad5b7664c77d2547af685cc33b4cd8d31964027a46f13f1" -dependencies = [ - "anstyle", - "memchr", - "unicode-width 0.2.2", -] - [[package]] name = "anstream" version = "1.0.0" @@ -335,12 +166,6 @@ dependencies = [ "num-traits", ] -[[package]] -name = "arbitrary" -version = "1.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3d036a3c4ab069c7b410a2ce876bd74808d2d0888a82667669f8e783a898bf1" - [[package]] name = "arboard" version = "3.6.1" @@ -362,44 +187,12 @@ dependencies = [ "x11rb", ] -[[package]] -name = "arg_enum_proc_macro" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ae92a5119aa49cdbcf6b9f893fe4e1d98b04ccbf82ee0584ad948a44a734dea" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "arrayref" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" - [[package]] name = "arrayvec" version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" -[[package]] -name = "as-raw-xcb-connection" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "175571dd1d178ced59193a6fc02dde1b972eb0bc56c892cde9beeceac5bf0f6b" - -[[package]] -name = "as-slice" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "516b6b4f0e40d50dcda9365d53964ec74560ad4284da2e7fc97122cd83174516" -dependencies = [ - "stable_deref_trait", -] - [[package]] name = "ascii" version = "1.1.0" @@ -618,104 +411,12 @@ version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" -[[package]] -name = "atspi" -version = "0.29.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c77886257be21c9cd89a4ae7e64860c6f0eefca799bb79127913052bd0eefb3d" -dependencies = [ - "atspi-common", - "atspi-proxies", -] - -[[package]] -name = "atspi-common" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20c5617155740c98003016429ad13fe43ce7a77b007479350a9f8bf95a29f63d" -dependencies = [ - "enumflags2", - "serde", - "static_assertions", - "zbus 5.15.0", - "zbus-lockstep", - "zbus-lockstep-macros", - "zbus_names 4.3.2", - "zvariant 5.11.0", -] - -[[package]] -name = "atspi-proxies" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2230e48787ed3eb4088996eab66a32ca20c0b67bbd4fd6cdfe79f04f1f04c9fc" -dependencies = [ - "atspi-common", - "serde", - "zbus 5.15.0", -] - -[[package]] -name = "auto_enums" -version = "0.8.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65398a2893f41bce5c9259f6e1a4f03fbae40637c1bdc755b4f387f48c613b03" -dependencies = [ - "derive_utils", - "proc-macro2", - "quote", - "syn 2.0.117", -] - [[package]] name = "autocfg" version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" -[[package]] -name = "av-scenechange" -version = "0.14.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f321d77c20e19b92c39e7471cf986812cbb46659d2af674adc4331ef3f18394" -dependencies = [ - "aligned", - "anyhow", - "arg_enum_proc_macro", - "arrayvec", - "log", - "num-rational", - "num-traits", - "pastey 0.1.1", - "rayon", - "thiserror 2.0.18", - "v_frame", - "y4m", -] - -[[package]] -name = "av1-grain" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8cfddb07216410377231960af4fcab838eaa12e013417781b78bd95ee22077f8" -dependencies = [ - "anyhow", - "arrayvec", - "log", - "nom 8.0.0", - "num-rational", - "v_frame", -] - -[[package]] -name = "avif-serialize" -version = "0.8.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7178fe5f7d460b13895ebb9dcb28a3a6216d2df2574a0806cb51b555d297f38" -dependencies = [ - "arrayvec", -] - [[package]] name = "aws-lc-rs" version = "1.16.2" @@ -744,52 +445,13 @@ version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" -[[package]] -name = "bincode" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36eaf5d7b090263e8150820482d5d93cd964a81e4019913c972f4edcc6edb740" -dependencies = [ - "serde", - "unty", -] - -[[package]] -name = "bindgen" -version = "0.72.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "993776b509cfb49c750f11b8f07a46fa23e0a1386ffc01fb1e7d343efc387895" -dependencies = [ - "bitflags 2.13.0", - "cexpr", - "clang-sys", - "itertools 0.13.0", - "log", - "prettyplease", - "proc-macro2", - "quote", - "regex", - "rustc-hash 2.1.1", - "shlex", - "syn 2.0.117", -] - [[package]] name = "bit-set" version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" dependencies = [ - "bit-vec 0.6.3", -] - -[[package]] -name = "bit-set" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" -dependencies = [ - "bit-vec 0.8.0", + "bit-vec", ] [[package]] @@ -798,18 +460,6 @@ version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" -[[package]] -name = "bit-vec" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" - -[[package]] -name = "bit_field" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e4b40c7323adcfc0a41c4b88143ed58346ff65a288fc144329c5c45e05d70c6" - [[package]] name = "bitflags" version = "1.3.2" @@ -821,18 +471,6 @@ name = "bitflags" version = "2.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8" -dependencies = [ - "serde_core", -] - -[[package]] -name = "bitstream-io" -version = "4.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7eff00be299a18769011411c9def0d827e8f2d7bf0c3dbf53633147a8867fd1f" -dependencies = [ - "no_std_io2", -] [[package]] name = "block" @@ -898,28 +536,12 @@ dependencies = [ "piper", ] -[[package]] -name = "borsh" -version = "1.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfd1e3f8955a5d7de9fab72fc8373fade9fb8a703968cb200ae3dc6cf08e185a" -dependencies = [ - "bytes", - "cfg_aliases", -] - [[package]] name = "built" version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56ed6191a7e78c36abdb16ab65341eefd73d64d303fffccdbb00d51e4205967b" -[[package]] -name = "built" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c0e531d93d39c34eef561e929e8a7f86d77a5af08aac4f6d6e39976c51858e9" - [[package]] name = "bumpalo" version = "3.20.2" @@ -937,20 +559,6 @@ name = "bytemuck" version = "1.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c8efb64bd706a16a1bdde310ae86b351e4d21550d98d056f22f8a7f7a2183fec" -dependencies = [ - "bytemuck_derive", -] - -[[package]] -name = "bytemuck_derive" -version = "1.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9abbd1bc6865053c427f7198e6af43bfdedc55ab791faed4fbd361d789575ff" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] [[package]] name = "byteorder" @@ -970,57 +578,6 @@ version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" -[[package]] -name = "calloop" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b99da2f8558ca23c71f4fd15dc57c906239752dd27ff3c00a1d56b685b7cbfec" -dependencies = [ - "bitflags 2.13.0", - "log", - "polling 3.11.0", - "rustix 0.38.44", - "slab", - "thiserror 1.0.69", -] - -[[package]] -name = "calloop" -version = "0.14.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dbf9978365bac10f54d1d4b04f7ce4427e51f71d61f2fe15e3fed5166474df7" -dependencies = [ - "bitflags 2.13.0", - "polling 3.11.0", - "rustix 1.1.4", - "slab", - "tracing", -] - -[[package]] -name = "calloop-wayland-source" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95a66a987056935f7efce4ab5668920b5d0dac4a7c99991a67395f13702ddd20" -dependencies = [ - "calloop 0.13.0", - "rustix 0.38.44", - "wayland-backend", - "wayland-client", -] - -[[package]] -name = "calloop-wayland-source" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "138efcf0940a02ebf0cc8d1eff41a1682a46b431630f4c52450d6265876021fa" -dependencies = [ - "calloop 0.14.4", - "rustix 1.1.4", - "wayland-backend", - "wayland-client", -] - [[package]] name = "castaway" version = "0.2.4" @@ -1057,15 +614,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" -[[package]] -name = "cexpr" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" -dependencies = [ - "nom 7.1.3", -] - [[package]] name = "cfg-if" version = "1.0.4" @@ -1078,15 +626,6 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" -[[package]] -name = "cgl" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ced0551234e87afee12411d535648dd89d2e7f34c78b753395567aff3d447ff" -dependencies = [ - "libc", -] - [[package]] name = "chacha20" version = "0.10.0" @@ -1137,17 +676,6 @@ dependencies = [ "thiserror 1.0.69", ] -[[package]] -name = "clang-sys" -version = "1.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" -dependencies = [ - "glob", - "libc", - "libloading 0.8.9", -] - [[package]] name = "clap" version = "4.6.1" @@ -1206,15 +734,6 @@ dependencies = [ "error-code", ] -[[package]] -name = "clru" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "197fd99cb113a8d5d9b6376f3aa817f32c1078f2343b714fff7d2ca44fdf67d5" -dependencies = [ - "hashbrown 0.16.1", -] - [[package]] name = "cmake" version = "0.1.58" @@ -1234,8 +753,8 @@ dependencies = [ "block", "cocoa-foundation", "core-foundation 0.9.4", - "core-graphics 0.22.3", - "foreign-types 0.3.2", + "core-graphics", + "foreign-types", "libc", "objc", ] @@ -1249,7 +768,7 @@ dependencies = [ "bitflags 1.3.2", "block", "core-foundation 0.9.4", - "core-graphics-types 0.1.3", + "core-graphics-types", "libc", "objc", ] @@ -1264,17 +783,6 @@ dependencies = [ "unicode-width 0.1.14", ] -[[package]] -name = "codespan-reporting" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe6d2e5af09e8c8ad56c969f2157a3d4238cebc7c55f0a517728c38f7b200f81" -dependencies = [ - "serde", - "termcolor", - "unicode-width 0.2.2", -] - [[package]] name = "codespan-reporting" version = "0.13.1" @@ -1286,12 +794,6 @@ dependencies = [ "unicode-width 0.2.2", ] -[[package]] -name = "color_quant" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" - [[package]] name = "colorchoice" version = "1.0.5" @@ -1331,27 +833,6 @@ dependencies = [ "crossbeam-utils", ] -[[package]] -name = "const-field-offset" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9713489fbc45a2d113f58d17448c73115d533ed27fd2f2d0e5e5c69663eaf19b" -dependencies = [ - "const-field-offset-macro", - "field-offset", -] - -[[package]] -name = "const-field-offset-macro" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b5dc851b7ea80cc4f69aa28632385ffd3e0f88014d53db3f2e5a781896ca783" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - [[package]] name = "const-oid" version = "0.10.2" @@ -1405,20 +886,6 @@ dependencies = [ "url", ] -[[package]] -name = "copypasta" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e6811e17f81fe246ef2bc553f76b6ee6ab41a694845df1d37e52a92b7bbd38a" -dependencies = [ - "clipboard-win", - "objc2 0.5.2", - "objc2-app-kit 0.2.2", - "objc2-foundation 0.2.2", - "smithay-clipboard", - "x11-clipboard", -] - [[package]] name = "core-foundation" version = "0.9.4" @@ -1453,21 +920,8 @@ checksum = "2581bbab3b8ffc6fcbd550bf46c355135d16e9ff2a6ea032ad6b9bf1d7efe4fb" dependencies = [ "bitflags 1.3.2", "core-foundation 0.9.4", - "core-graphics-types 0.1.3", - "foreign-types 0.3.2", - "libc", -] - -[[package]] -name = "core-graphics" -version = "0.23.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c07782be35f9e1140080c6b96f0d44b739e2278479f64e02fdab4e32dfd8b081" -dependencies = [ - "bitflags 1.3.2", - "core-foundation 0.9.4", - "core-graphics-types 0.1.3", - "foreign-types 0.5.0", + "core-graphics-types", + "foreign-types", "libc", ] @@ -1482,26 +936,6 @@ dependencies = [ "libc", ] -[[package]] -name = "core-graphics-types" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb" -dependencies = [ - "bitflags 2.13.0", - "core-foundation 0.10.1", - "libc", -] - -[[package]] -name = "core_maths" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77745e017f5edba1a9c1d854f6f3a52dac8a12dd5af5d2f54aecf61e43d80d30" -dependencies = [ - "libm", -] - [[package]] name = "coreaudio-rs" version = "0.14.1" @@ -1516,12 +950,6 @@ dependencies = [ "objc2-core-foundation", ] -[[package]] -name = "countme" -version = "3.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7704b5fdd17b18ae31c4c1da5a2e0305a2bf17b5249300a9ee9ed7b72114c636" - [[package]] name = "cpal" version = "0.17.3" @@ -1531,7 +959,7 @@ dependencies = [ "alsa", "coreaudio-rs", "dasp_sample", - "jni 0.21.1", + "jni", "js-sys", "libc", "mach2", @@ -1609,25 +1037,6 @@ dependencies = [ "crossbeam-utils", ] -[[package]] -name = "crossbeam-deque" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" -dependencies = [ - "crossbeam-epoch", - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-epoch" -version = "0.9.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" -dependencies = [ - "crossbeam-utils", -] - [[package]] name = "crossbeam-utils" version = "0.8.21" @@ -1697,15 +1106,6 @@ dependencies = [ "phf", ] -[[package]] -name = "ctor" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83cf0d42651b16c6dfe68685716d18480d18a9c39c62d76e8cf3eb6ed5d8bcbf" -dependencies = [ - "dtor", -] - [[package]] name = "ctr" version = "0.9.2" @@ -1715,12 +1115,6 @@ dependencies = [ "cipher", ] -[[package]] -name = "cursor-icon" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f27ae1dd37df86211c42e150270f82743308803d90a6f6e6651cd730d5e1732f" - [[package]] name = "cxx" version = "1.0.198" @@ -1920,12 +1314,6 @@ version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d7a1e2f27636f116493b8b860f5546edb47c8d8f8ea73e1d2a20be88e28d1fea" -[[package]] -name = "data-url" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be1e0bca6c3637f992fc1cc7cbc52a78c1ef6db076dbf1059c4323d6a2048376" - [[package]] name = "dbus" version = "0.9.10" @@ -1999,18 +1387,6 @@ dependencies = [ "quote", "rustc_version", "syn 2.0.117", - "unicode-xid", -] - -[[package]] -name = "derive_utils" -version = "0.15.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "362f47930db19fe7735f527e6595e4900316b893ebf6d48ad3d31be928d57dd6" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", ] [[package]] @@ -2145,58 +1521,6 @@ version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" -[[package]] -name = "dpi" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8b14ccef22fc6f5a8f4d7d768562a182c04ce9a3b3157b91390b52ddfdf1a76" - -[[package]] -name = "drm" -version = "0.14.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80bc8c5c6c2941f70a55c15f8d9f00f9710ebda3ffda98075f996a0e6c92756f" -dependencies = [ - "bitflags 2.13.0", - "bytemuck", - "drm-ffi", - "drm-fourcc", - "libc", - "rustix 0.38.44", -] - -[[package]] -name = "drm-ffi" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51a91c9b32ac4e8105dec255e849e0d66e27d7c34d184364fb93e469db08f690" -dependencies = [ - "drm-sys", - "rustix 1.1.4", -] - -[[package]] -name = "drm-fourcc" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0aafbcdb8afc29c1a7ee5fbe53b5d62f4565b35a042a662ca9fecd0b54dae6f4" - -[[package]] -name = "drm-sys" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecc8e1361066d91f5ffccff060a3c3be9c3ecde15be2959c1937595f7a82a9f8" -dependencies = [ - "libc", - "linux-raw-sys 0.9.4", -] - -[[package]] -name = "dtor" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edf234dd1594d6dd434a8fb8cada51ddbbc593e40e4a01556a0b31c62da2775b" - [[package]] name = "dunce" version = "1.0.5" @@ -2280,26 +1604,6 @@ dependencies = [ "log", ] -[[package]] -name = "equator" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4711b213838dfee0117e3be6ac926007d7f433d7bbe33595975d4190cb07e6fc" -dependencies = [ - "equator-macro", -] - -[[package]] -name = "equator-macro" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44f23cf4b44bfce11a86ace86f8a73ffdec849c9fd00a386a53d278bd9e81fb3" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - [[package]] name = "equivalent" version = "1.0.2" @@ -2352,21 +1656,6 @@ dependencies = [ "pin-project-lite", ] -[[package]] -name = "exr" -version = "1.74.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4300e043a56aa2cb633c01af81ca8f699a321879a7854d3896a0ba89056363be" -dependencies = [ - "bit_field", - "half", - "lebe", - "miniz_oxide", - "rayon-core", - "smallvec", - "zune-inflate", -] - [[package]] name = "extended" version = "0.1.0" @@ -2391,7 +1680,7 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b95f7c0680e4142284cf8b22c14a476e87d61b004a3a0861872b32ef7ead40a2" dependencies = [ - "bit-set 0.5.3", + "bit-set", "regex", ] @@ -2422,35 +1711,6 @@ dependencies = [ "simd-adler32", ] -[[package]] -name = "femtovg" -version = "0.23.2" -dependencies = [ - "bitflags 2.13.0", - "bytemuck", - "fnv", - "glow 0.17.0", - "imgref", - "itertools 0.14.0", - "log", - "rgb", - "slotmap", - "swash", - "wasm-bindgen", - "web-sys", - "wgpu", -] - -[[package]] -name = "field-offset" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38e2275cc4e4fc009b0669731a1e5ab7ebf11f469eaede2bab9309a5b4d6057f" -dependencies = [ - "memoffset", - "rustc_version", -] - [[package]] name = "filedescriptor" version = "0.8.3" @@ -2503,7 +1763,7 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74c892c2b5fa08f967e8b5ad29121570b4762202f2402033ce08479ec65eccd0" dependencies = [ - "built 0.7.7", + "built", "crc", "crossbeam-channel", "heapless", @@ -2525,12 +1785,6 @@ dependencies = [ "miniz_oxide", ] -[[package]] -name = "float-cmp" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4" - [[package]] name = "float-cmp" version = "0.10.0" @@ -2569,77 +1823,13 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" -[[package]] -name = "font-types" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b38ad915f6dadd993ced50848a8291a543bd41ca62bc10740d5e64e2ab4cfd7" -dependencies = [ - "bytemuck", -] - -[[package]] -name = "fontdb" -version = "0.23.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "457e789b3d1202543297a350643cf459f836cade38934e7a4cf6a39e7cde2905" -dependencies = [ - "log", - "slotmap", - "tinyvec", - "ttf-parser", -] - -[[package]] -name = "fontique" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23358480a54a886d51b306718d5ca743fdfe238e5df38ef650f4e72f29c5d9e9" -dependencies = [ - "hashbrown 0.16.1", - "linebender_resource_handle", - "memmap2", - "objc2 0.6.4", - "objc2-core-foundation", - "objc2-core-text", - "objc2-foundation 0.3.2", - "parlance", - "read-fonts", - "roxmltree 0.21.1", - "smallvec", - "windows 0.62.2", - "windows-core 0.62.2", - "yeslogic-fontconfig-sys", -] - [[package]] name = "foreign-types" version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" dependencies = [ - "foreign-types-shared 0.1.1", -] - -[[package]] -name = "foreign-types" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" -dependencies = [ - "foreign-types-macros", - "foreign-types-shared 0.3.1", -] - -[[package]] -name = "foreign-types-macros" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", + "foreign-types-shared", ] [[package]] @@ -2648,12 +1838,6 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" -[[package]] -name = "foreign-types-shared" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" - [[package]] name = "form_urlencoded" version = "1.2.2" @@ -2678,21 +1862,6 @@ dependencies = [ "libc", ] -[[package]] -name = "futures" -version = "0.3.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d" -dependencies = [ - "futures-channel", - "futures-core", - "futures-executor", - "futures-io", - "futures-sink", - "futures-task", - "futures-util", -] - [[package]] name = "futures-channel" version = "0.3.32" @@ -2709,17 +1878,6 @@ version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" -[[package]] -name = "futures-executor" -version = "0.3.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d" -dependencies = [ - "futures-core", - "futures-task", - "futures-util", -] - [[package]] name = "futures-io" version = "0.3.32" @@ -2768,7 +1926,6 @@ version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" dependencies = [ - "futures-channel", "futures-core", "futures-io", "futures-macro", @@ -2779,28 +1936,6 @@ dependencies = [ "slab", ] -[[package]] -name = "gbm" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce852e998d3ca5e4a97014fb31c940dc5ef344ec7d364984525fd11e8a547e6a" -dependencies = [ - "bitflags 2.13.0", - "drm", - "drm-fourcc", - "gbm-sys", - "libc", -] - -[[package]] -name = "gbm-sys" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c13a5f2acc785d8fb6bf6b7ab6bfb0ef5dad4f4d97e8e70bb8e470722312f76f" -dependencies = [ - "libc", -] - [[package]] name = "genawaiter" version = "0.99.1" @@ -2837,15 +1972,6 @@ dependencies = [ "windows-link 0.2.1", ] -[[package]] -name = "getopts" -version = "0.2.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfe4fbac503b8d1f88e6676011885f34b7174f46e59956bba534ba83abded4df" -dependencies = [ - "unicode-width 0.2.2", -] - [[package]] name = "getrandom" version = "0.2.17" @@ -2893,197 +2019,12 @@ dependencies = [ "polyval", ] -[[package]] -name = "gif" -version = "0.14.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee8cfcc411d9adbbaba82fb72661cc1bcca13e8bba98b364e62b2dba8f960159" -dependencies = [ - "color_quant", - "weezl", -] - -[[package]] -name = "gilrs" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "902fb00d3f6398e635be22e5c837b303c501835cca7ac11a47bba138f7aafdd8" -dependencies = [ - "fnv", - "gilrs-core", - "log", - "uuid 1.22.0", - "vec_map", -] - -[[package]] -name = "gilrs-core" -version = "0.6.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc7f0ce6237abcc0523f2a5502b1e3fe5802daaae47ac14e166fe49551301ea9" -dependencies = [ - "inotify", - "js-sys", - "libc", - "libudev-sys", - "log", - "nix 0.31.3", - "objc2-core-foundation", - "objc2-io-kit", - "uuid 1.22.0", - "vec_map", - "wasm-bindgen", - "web-sys", - "windows 0.62.2", -] - -[[package]] -name = "gl_generator" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a95dfc23a2b4a9a2f5ab41d194f8bfda3cabec42af4e39f08c339eb2a0c124d" -dependencies = [ - "khronos_api", - "log", - "xml-rs", -] - [[package]] name = "glob" version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" -[[package]] -name = "glow" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5e5ea60d70410161c8bf5da3fdfeaa1c72ed2c15f8bbb9d19fe3a4fad085f08" -dependencies = [ - "js-sys", - "slotmap", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "glow" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29038e1c483364cc6bb3cf78feee1816002e127c331a1eec55a4d202b9e1adb5" -dependencies = [ - "js-sys", - "slotmap", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "glutin" -version = "0.32.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12124de845cacfebedff80e877bb37b5b75c34c5a4c89e47e1cdd67fb6041325" -dependencies = [ - "bitflags 2.13.0", - "cfg_aliases", - "cgl", - "dispatch2", - "glutin_egl_sys", - "glutin_glx_sys", - "glutin_wgl_sys", - "libloading 0.8.9", - "objc2 0.6.4", - "objc2-app-kit 0.3.2", - "objc2-core-foundation", - "objc2-foundation 0.3.2", - "once_cell", - "raw-window-handle", - "wayland-sys", - "windows-sys 0.52.0", - "x11-dl", -] - -[[package]] -name = "glutin-winit" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85edca7075f8fc728f28cb8fbb111a96c3b89e930574369e3e9c27eb75d3788f" -dependencies = [ - "cfg_aliases", - "glutin", - "raw-window-handle", - "winit", -] - -[[package]] -name = "glutin_egl_sys" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c4680ba6195f424febdc3ba46e7a42a0e58743f2edb115297b86d7f8ecc02d2" -dependencies = [ - "gl_generator", - "windows-sys 0.52.0", -] - -[[package]] -name = "glutin_glx_sys" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a7bb2938045a88b612499fbcba375a77198e01306f52272e692f8c1f3751185" -dependencies = [ - "gl_generator", - "x11-dl", -] - -[[package]] -name = "glutin_wgl_sys" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c4ee00b289aba7a9e5306d57c2d05499b2e5dc427f84ac708bd2c090212cf3e" -dependencies = [ - "gl_generator", -] - -[[package]] -name = "gpu-allocator" -version = "0.28.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51255ea7cfaadb6c5f1528d43e92a82acb2b96c43365989a28b2d44ee38f8795" -dependencies = [ - "ash", - "hashbrown 0.16.1", - "log", - "presser", - "thiserror 2.0.18", - "windows 0.62.2", -] - -[[package]] -name = "gpu-descriptor" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b89c83349105e3732062a895becfc71a8f921bb71ecbbdd8ff99263e3b53a0ca" -dependencies = [ - "bitflags 2.13.0", - "gpu-descriptor-types", - "hashbrown 0.15.5", -] - -[[package]] -name = "gpu-descriptor-types" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdf242682df893b86f33a73828fb09ca4b2d3bb6cc95249707fc684d27484b91" -dependencies = [ - "bitflags 2.13.0", -] - -[[package]] -name = "grid" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b40ca9252762c466af32d0b1002e91e4e1bc5398f77455e55474deb466355ff5" - [[package]] name = "half" version = "2.7.1" @@ -3092,23 +2033,9 @@ checksum = "6ea2d84b969582b4b1864a92dc5d27cd2b77b622a8d79306834f1be5ba20d84b" dependencies = [ "cfg-if", "crunchy", - "num-traits", "zerocopy", ] -[[package]] -name = "harfrust" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9da2e5ae821f6e96664977bf974d6d6a2d6682f9ccee23e62ec1d134246845f9" -dependencies = [ - "bitflags 2.13.0", - "bytemuck", - "core_maths", - "read-fonts", - "smallvec", -] - [[package]] name = "hash32" version = "0.3.1" @@ -3184,12 +2111,6 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" -[[package]] -name = "hermit-abi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" - [[package]] name = "hermit-abi" version = "0.5.2" @@ -3202,12 +2123,6 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" -[[package]] -name = "hexf-parse" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df" - [[package]] name = "hkdf" version = "0.12.4" @@ -3235,12 +2150,6 @@ dependencies = [ "windows-sys 0.61.2", ] -[[package]] -name = "htmlparser" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48ce8546b993eaf241d69ded33b1be6d205dd9857ec879d9d18bd05d3676e144" - [[package]] name = "http" version = "1.4.0" @@ -3356,290 +2265,6 @@ dependencies = [ "tracing", ] -[[package]] -name = "i-slint-backend-android-activity" -version = "1.16.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a318b5aebc2ad8e6fdbac8588984d9ea2e99a210449954717073d8a246e12fe7" -dependencies = [ - "android-build", - "i-slint-core", - "i-slint-renderer-skia", - "jni 0.22.4", - "raw-window-handle", -] - -[[package]] -name = "i-slint-backend-linuxkms" -version = "1.16.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3224c3aa9f3ea568daf38389d0f7ace164eda4d6f1851042eb83750ac43e1a65" -dependencies = [ - "bytemuck", - "calloop 0.14.4", - "cfg_aliases", - "drm", - "gbm", - "glutin", - "i-slint-common", - "i-slint-core", - "i-slint-renderer-femtovg", - "i-slint-renderer-skia", - "i-slint-renderer-software", - "input", - "memmap2", - "nix 0.30.1", - "raw-window-handle", - "xkbcommon", -] - -[[package]] -name = "i-slint-backend-selector" -version = "1.16.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f93c9c4203e0a2c5c396b8f1686160816f73e9b9cadaf3915aa3b888a83448aa" -dependencies = [ - "cfg-if", - "i-slint-backend-linuxkms", - "i-slint-backend-winit", - "i-slint-common", - "i-slint-core", - "i-slint-core-macros", - "i-slint-renderer-femtovg", - "i-slint-renderer-skia", -] - -[[package]] -name = "i-slint-backend-winit" -version = "1.16.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4df6ec88d452e3c22e418d20c96bc1ccbc9509e81e6596426d3388bf226a5f9" -dependencies = [ - "accesskit", - "accesskit_winit", - "block2 0.6.2", - "bytemuck", - "cfg-if", - "cfg_aliases", - "copypasta", - "derive_more", - "futures", - "glutin", - "glutin-winit", - "i-slint-common", - "i-slint-core", - "i-slint-core-macros", - "i-slint-renderer-femtovg", - "i-slint-renderer-skia", - "i-slint-renderer-software", - "imgref", - "lyon_path", - "muda", - "objc2 0.6.4", - "objc2-app-kit 0.3.2", - "objc2-foundation 0.3.2", - "objc2-quartz-core 0.3.2", - "objc2-ui-kit 0.3.2", - "pin-weak", - "raw-window-handle", - "rgb", - "scoped-tls-hkt", - "scopeguard", - "softbuffer", - "strum", - "vtable", - "wasm-bindgen", - "web-sys", - "webbrowser", - "windows 0.62.2", - "winit", - "zbus 5.15.0", -] - -[[package]] -name = "i-slint-common" -version = "1.16.1" -dependencies = [ - "derive_more", - "fontique", - "htmlparser", - "pulldown-cmark", - "skrifa", -] - -[[package]] -name = "i-slint-compiler" -version = "1.16.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7b7f9834faf2a62cc36f01decc7c683e66bb0861b53511723c3da9ad914d9bb" -dependencies = [ - "annotate-snippets", - "by_address", - "data-url", - "derive_more", - "i-slint-common", - "icu_normalizer", - "image", - "itertools 0.14.0", - "linked_hash_set", - "lyon_extra", - "lyon_path", - "num_enum", - "proc-macro2", - "quote", - "rayon", - "resvg", - "rowan", - "rspolib", - "skrifa", - "smol_str 0.3.6", - "strum", - "swash", - "typed-index-collections", - "unicode-segmentation", - "url", -] - -[[package]] -name = "i-slint-core" -version = "1.16.1" -dependencies = [ - "auto_enums", - "bitflags 2.13.0", - "cfg-if", - "chrono", - "clru", - "const-field-offset", - "derive_more", - "euclid", - "i-slint-common", - "i-slint-core-macros", - "icu_normalizer", - "image", - "lyon_algorithms", - "lyon_extra", - "lyon_geom", - "lyon_path", - "num-traits", - "once_cell", - "parley", - "pin-project", - "pin-weak", - "portable-atomic", - "raw-window-handle", - "resvg", - "rgb", - "scoped-tls-hkt", - "scopeguard", - "skrifa", - "slab", - "strum", - "swash", - "sys-locale", - "taffy", - "unicode-linebreak", - "unicode-script", - "unicode-segmentation", - "vtable", - "wasm-bindgen", - "web-sys", - "web-time", - "wgpu", -] - -[[package]] -name = "i-slint-core-macros" -version = "1.16.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7931356d5238281e6be994ec15241fb2d9e66359776d53b4bd6b2fdd9c257c6e" -dependencies = [ - "quote", - "serde_json", - "syn 2.0.117", -] - -[[package]] -name = "i-slint-renderer-femtovg" -version = "1.16.1" -dependencies = [ - "cfg-if", - "const-field-offset", - "derive_more", - "femtovg", - "glow 0.17.0", - "i-slint-common", - "i-slint-core", - "i-slint-core-macros", - "imgref", - "lyon_path", - "pin-weak", - "rgb", - "wasm-bindgen", - "web-sys", - "wgpu", -] - -[[package]] -name = "i-slint-renderer-skia" -version = "1.16.1" -dependencies = [ - "ash", - "bytemuck", - "cfg-if", - "cfg_aliases", - "clru", - "const-field-offset", - "derive_more", - "foreign-types 0.5.0", - "glow 0.17.0", - "glutin", - "i-slint-common", - "i-slint-core", - "i-slint-core-macros", - "lyon_path", - "metal 0.31.0", - "objc2 0.6.4", - "objc2-app-kit 0.3.2", - "objc2-core-foundation", - "objc2-foundation 0.3.2", - "objc2-metal 0.3.2", - "objc2-quartz-core 0.3.2", - "pin-weak", - "raw-window-handle", - "raw-window-metal", - "read-fonts", - "scoped-tls-hkt", - "skia-safe", - "softbuffer", - "spin_on", - "unicode-segmentation", - "vtable", - "wgpu", - "windows 0.62.2", - "windows-core 0.62.2", - "write-fonts", -] - -[[package]] -name = "i-slint-renderer-software" -version = "1.16.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee8a21285f3a81a8e1b1e7c385eefe89bf9487f53fabfd5b238c68bc895d6013" -dependencies = [ - "bytemuck", - "clru", - "derive_more", - "euclid", - "i-slint-common", - "i-slint-core", - "integer-sqrt", - "lyon_path", - "num-traits", - "skrifa", - "swash", - "zeno", -] - [[package]] name = "iana-time-zone" version = "0.1.65" @@ -3677,21 +2302,6 @@ dependencies = [ "zerovec", ] -[[package]] -name = "icu_locale" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "532b11722e350ab6bf916ba6eb0efe3ee54b932666afec989465f9243fe6dd60" -dependencies = [ - "icu_collections", - "icu_locale_core", - "icu_locale_data", - "icu_provider", - "potential_utf", - "tinystr", - "zerovec", -] - [[package]] name = "icu_locale_core" version = "2.1.1" @@ -3700,18 +2310,11 @@ checksum = "edba7861004dd3714265b4db54a3c390e880ab658fec5f7db895fae2046b5bb6" dependencies = [ "displaydoc", "litemap", - "serde", "tinystr", "writeable", "zerovec", ] -[[package]] -name = "icu_locale_data" -version = "2.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c5f1d16b4c3a2642d3a719f18f6b06070ab0aef246a6418130c955ae08aa831" - [[package]] name = "icu_normalizer" version = "2.1.1" @@ -3760,8 +2363,6 @@ checksum = "85962cf0ce02e1e0a629cc34e7ca3e373ce20dda4c4d7294bbd0bf1fdb59e614" dependencies = [ "displaydoc", "icu_locale_core", - "serde", - "stable_deref_trait", "writeable", "yoke", "zerofrom", @@ -3769,27 +2370,6 @@ dependencies = [ "zerovec", ] -[[package]] -name = "icu_segmenter" -version = "2.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a807a7488f3f758629ae86d99d9d30dce24da2fb2945d74c80a4f4a62c71db73" -dependencies = [ - "icu_collections", - "icu_locale", - "icu_provider", - "icu_segmenter_data", - "potential_utf", - "utf8_iter", - "zerovec", -] - -[[package]] -name = "icu_segmenter_data" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ebbb7321d9e21d25f5660366cb6c08201d0175898a3a6f7a41ee9685af21c80" - [[package]] name = "id-arena" version = "2.3.0" @@ -3852,17 +2432,10 @@ checksum = "85ab80394333c02fe689eaf900ab500fbd0c2213da414687ebf995a65d5a6104" dependencies = [ "bytemuck", "byteorder-lite", - "color_quant", - "exr", - "gif", "image-webp", "moxcms", "num-traits", - "png 0.18.1", - "qoi", - "ravif", - "rayon", - "rgb", + "png", "tiff", "zune-core", "zune-jpeg", @@ -3878,18 +2451,6 @@ dependencies = [ "quick-error", ] -[[package]] -name = "imagesize" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09e54e57b4c48b40f7aec75635392b12b3421fa26fe8b4332e63138ed278459c" - -[[package]] -name = "imgref" -version = "1.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40fac9d56ed6437b198fddba683305e8e2d651aa42647f00f5ae542e7f5c94a2" - [[package]] name = "indexmap" version = "2.13.0" @@ -3941,25 +2502,6 @@ dependencies = [ "generic-array", ] -[[package]] -name = "input" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbdc09524a91f9cacd26f16734ff63d7dc650daffadd2b6f84d17a285bd875a9" -dependencies = [ - "bitflags 2.13.0", - "input-sys", - "libc", - "log", - "udev", -] - -[[package]] -name = "input-sys" -version = "1.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36eee07d8e02bd95bf52b2e642cf13d33701b94c6e4b04fbf1d1fb07e9cb19e7" - [[package]] name = "instability" version = "0.3.12" @@ -3973,37 +2515,6 @@ dependencies = [ "syn 2.0.117", ] -[[package]] -name = "integer-sqrt" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "276ec31bcb4a9ee45f58bec6f9ec700ae4cf4f4f8f2fa7e06cb406bd5ffdd770" -dependencies = [ - "num-traits", -] - -[[package]] -name = "interpolate_name" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c34819042dc3d3971c46c2190835914dfbe0c3c13f61449b2997f4e9722dfa60" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "io-lifetimes" -version = "1.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" -dependencies = [ - "hermit-abi 0.3.9", - "libc", - "windows-sys 0.48.0", -] - [[package]] name = "ipnet" version = "2.12.0" @@ -4129,68 +2640,19 @@ dependencies = [ "cesu8", "cfg-if", "combine", - "jni-sys 0.3.0", + "jni-sys", "log", "thiserror 1.0.69", "walkdir", "windows-sys 0.45.0", ] -[[package]] -name = "jni" -version = "0.22.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5efd9a482cf3a427f00d6b35f14332adc7902ce91efb778580e180ff90fa3498" -dependencies = [ - "cfg-if", - "combine", - "jni-macros", - "jni-sys 0.4.1", - "log", - "simd_cesu8", - "thiserror 2.0.18", - "walkdir", - "windows-link 0.2.1", -] - -[[package]] -name = "jni-macros" -version = "0.22.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a00109accc170f0bdb141fed3e393c565b6f5e072365c3bd58f5b062591560a3" -dependencies = [ - "proc-macro2", - "quote", - "rustc_version", - "simd_cesu8", - "syn 2.0.117", -] - [[package]] name = "jni-sys" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" -[[package]] -name = "jni-sys" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6377a88cb3910bee9b0fa88d4f42e1d2da8e79915598f65fb0c7ee14c878af2" -dependencies = [ - "jni-sys-macros", -] - -[[package]] -name = "jni-sys-macros" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38c0b942f458fe50cdac086d2f946512305e5631e720728f2a61aabcd47a6264" -dependencies = [ - "quote", - "syn 2.0.117", -] - [[package]] name = "jobserver" version = "0.1.34" @@ -4222,17 +2684,6 @@ dependencies = [ "thiserror 2.0.18", ] -[[package]] -name = "keyboard-types" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b750dcadc39a09dbadd74e118f6dd6598df77fa01df0cfcdc52c28dece74528a" -dependencies = [ - "bitflags 2.13.0", - "serde", - "unicode-segmentation", -] - [[package]] name = "keyring" version = "3.6.3" @@ -4246,23 +2697,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "khronos-egl" -version = "6.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6aae1df220ece3c0ada96b8153459b67eebe9ae9212258bb0134ae60416fdf76" -dependencies = [ - "libc", - "libloading 0.8.9", - "pkg-config", -] - -[[package]] -name = "khronos_api" -version = "3.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc" - [[package]] name = "kqueue" version = "1.2.1" @@ -4296,23 +2730,11 @@ dependencies = [ "futures-lite", "futures-util", "once_cell", - "pastey 0.2.3", + "pastey", "serde", "zbus 5.15.0", ] -[[package]] -name = "kurbo" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b60dfc32f652b926df6192e55525b16d186c69d47876c3ead4da5cc9f8450e2" -dependencies = [ - "arrayvec", - "euclid", - "polycool", - "smallvec", -] - [[package]] name = "lab" version = "0.11.0" @@ -4331,12 +2753,6 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" -[[package]] -name = "lebe" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a79a3332a6609480d7d0c9eab957bca6b455b91bb84e66d19f5ff66294b85b8" - [[package]] name = "libc" version = "0.2.189" @@ -4352,16 +2768,6 @@ dependencies = [ "pkg-config", ] -[[package]] -name = "libfuzzer-sys" -version = "0.4.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f12a681b7dd8ce12bff52488013ba614b869148d54dd79836ab85aafdd53f08d" -dependencies = [ - "arbitrary", - "cc", -] - [[package]] name = "libloading" version = "0.7.4" @@ -4411,16 +2817,6 @@ dependencies = [ "vcpkg", ] -[[package]] -name = "libudev-sys" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c8469b4a23b962c1396b9b451dda50ef5b283e8dd309d69033475fa9b334324" -dependencies = [ - "libc", - "pkg-config", -] - [[package]] name = "line-clipping" version = "0.3.7" @@ -4430,12 +2826,6 @@ dependencies = [ "bitflags 2.13.0", ] -[[package]] -name = "linebender_resource_handle" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4a5ff6bcca6c4867b1c4fd4ef63e4db7436ef363e0ad7531d1558856bae64f4" - [[package]] name = "link-cplusplus" version = "1.0.12" @@ -4445,33 +2835,12 @@ dependencies = [ "cc", ] -[[package]] -name = "linked-hash-map" -version = "0.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" - -[[package]] -name = "linked_hash_set" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "984fb35d06508d1e69fc91050cceba9c0b748f983e6739fa2c7a9237154c52c8" -dependencies = [ - "linked-hash-map", -] - [[package]] name = "linux-raw-sys" version = "0.4.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" -[[package]] -name = "linux-raw-sys" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" - [[package]] name = "linux-raw-sys" version = "0.12.1" @@ -4531,15 +2900,6 @@ version = "0.4.29" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" -[[package]] -name = "loop9" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fae87c125b03c1d2c0150c90365d7d6bcc53fb73a9acaef207d2d065860f062" -dependencies = [ - "imgref", -] - [[package]] name = "lru" version = "0.18.1" @@ -4549,47 +2909,6 @@ dependencies = [ "hashbrown 0.17.1", ] -[[package]] -name = "lyon_algorithms" -version = "1.0.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8575c0d003ae459399623c4def180c63b77f343b1a7fee64f249b349e7699a31" -dependencies = [ - "lyon_path", - "num-traits", -] - -[[package]] -name = "lyon_extra" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7755f08423275157ad1680aaecc9ccb7e0cc633da3240fea2d1522935cc15c72" -dependencies = [ - "lyon_path", - "thiserror 2.0.18", -] - -[[package]] -name = "lyon_geom" -version = "1.0.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4336502e29e32af93cf2dad2214ed6003c17ceb5bd499df77b1de663b9042b92" -dependencies = [ - "arrayvec", - "euclid", - "num-traits", -] - -[[package]] -name = "lyon_path" -version = "1.0.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c463f9c428b7fc5ec885dcd39ce4aa61e29111d0e33483f6f98c74e89d8621e" -dependencies = [ - "lyon_geom", - "num-traits", -] - [[package]] name = "mac-notification-sys" version = "0.6.12" @@ -4608,7 +2927,7 @@ version = "1.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0aeb26bf5e836cc1c341c8106051b573f1766dfa05aa87f0b98be5e51b02303" dependencies = [ - "nix 0.29.0", + "nix", "winapi", ] @@ -4630,16 +2949,6 @@ dependencies = [ "libc", ] -[[package]] -name = "maybe-rayon" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ea1f30cedd69f0a2954655f7188c6a834246d2bcf1e315e2ac40c4b24dc9519" -dependencies = [ - "cfg-if", - "rayon", -] - [[package]] name = "md-5" version = "0.10.6" @@ -4669,15 +2978,6 @@ version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" -[[package]] -name = "memmap2" -version = "0.9.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "714098028fe011992e1c3962653c96b2d578c4b4bce9036e15ff220319b1e0e3" -dependencies = [ - "libc", -] - [[package]] name = "memmem" version = "0.1.1" @@ -4693,36 +2993,6 @@ dependencies = [ "autocfg", ] -[[package]] -name = "metal" -version = "0.31.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f569fb946490b5743ad69813cb19629130ce9374034abe31614a36402d18f99e" -dependencies = [ - "bitflags 2.13.0", - "block", - "core-graphics-types 0.1.3", - "foreign-types 0.5.0", - "log", - "objc", - "paste", -] - -[[package]] -name = "metal" -version = "0.33.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7047791b5bc903b8cd963014b355f71dc9864a9a0b727057676c1dcae5cbc15" -dependencies = [ - "bitflags 2.13.0", - "block", - "core-graphics-types 0.2.0", - "foreign-types 0.5.0", - "log", - "objc", - "paste", -] - [[package]] name = "microfft" version = "0.6.0" @@ -4785,57 +3055,6 @@ dependencies = [ "zbus 4.4.0", ] -[[package]] -name = "muda" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b20e2339ef964849496bd6dab1bcd8ceb7a3a5a268dc64c8b84c833e75d66dab" -dependencies = [ - "crossbeam-channel", - "dpi", - "keyboard-types", - "objc2 0.6.4", - "objc2-app-kit 0.3.2", - "objc2-core-foundation", - "objc2-foundation 0.3.2", - "once_cell", - "png 0.17.16", - "thiserror 2.0.18", - "windows-sys 0.60.2", -] - -[[package]] -name = "naga" -version = "28.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "618f667225063219ddfc61251087db8a9aec3c3f0950c916b614e403486f1135" -dependencies = [ - "arrayvec", - "bit-set 0.8.0", - "bitflags 2.13.0", - "cfg-if", - "cfg_aliases", - "codespan-reporting 0.12.0", - "half", - "hashbrown 0.16.1", - "hexf-parse", - "indexmap", - "libm", - "log", - "num-traits", - "once_cell", - "rustc-hash 1.1.0", - "spirv", - "thiserror 2.0.18", - "unicode-ident", -] - -[[package]] -name = "natord" -version = "1.0.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "308d96db8debc727c3fd9744aac51751243420e46edf401010908da7f8d5e57c" - [[package]] name = "ndk" version = "0.9.0" @@ -4843,11 +3062,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" dependencies = [ "bitflags 2.13.0", - "jni-sys 0.3.0", + "jni-sys", "log", "ndk-sys", "num_enum", - "raw-window-handle", "thiserror 1.0.69", ] @@ -4863,15 +3081,9 @@ version = "0.6.0+11769913" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ee6cda3051665f1fb8d9e08fc35c96d5a244fb1be711a03b71118828afc9a873" dependencies = [ - "jni-sys 0.3.0", + "jni-sys", ] -[[package]] -name = "new_debug_unreachable" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" - [[package]] name = "nix" version = "0.29.0" @@ -4885,39 +3097,6 @@ dependencies = [ "memoffset", ] -[[package]] -name = "nix" -version = "0.30.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" -dependencies = [ - "bitflags 2.13.0", - "cfg-if", - "cfg_aliases", - "libc", -] - -[[package]] -name = "nix" -version = "0.31.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf20d2fde8ff38632c426f1165ed7436270b44f199fc55284c38276f9db47c3d" -dependencies = [ - "bitflags 2.13.0", - "cfg-if", - "cfg_aliases", - "libc", -] - -[[package]] -name = "no_std_io2" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "418abd1b6d34fbf6cae440dc874771b0525a604428704c76e48b29a5e67b8003" -dependencies = [ - "memchr", -] - [[package]] name = "nom" version = "7.1.3" @@ -4937,12 +3116,6 @@ dependencies = [ "memchr", ] -[[package]] -name = "noop_proc_macro" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0676bb32a98c1a483ce53e500a81ad9c3d5b3f7c920c28c24e9cb0980d0b5bc8" - [[package]] name = "notify" version = "8.2.0" @@ -5150,10 +3323,10 @@ dependencies = [ "block2 0.5.1", "libc", "objc2 0.5.2", - "objc2-core-data 0.2.2", - "objc2-core-image 0.2.2", + "objc2-core-data", + "objc2-core-image", "objc2-foundation 0.2.2", - "objc2-quartz-core 0.2.2", + "objc2-quartz-core", ] [[package]] @@ -5164,17 +3337,9 @@ checksum = "d49e936b501e5c5bf01fda3a9452ff86dc3ea98ad5f283e1455153142d97518c" dependencies = [ "bitflags 2.13.0", "block2 0.6.2", - "libc", "objc2 0.6.4", - "objc2-cloud-kit 0.3.2", - "objc2-core-data 0.3.2", - "objc2-core-foundation", "objc2-core-graphics", - "objc2-core-image 0.3.2", - "objc2-core-text", - "objc2-core-video", "objc2-foundation 0.3.2", - "objc2-quartz-core 0.3.2", ] [[package]] @@ -5202,41 +3367,6 @@ dependencies = [ "objc2-foundation 0.3.2", ] -[[package]] -name = "objc2-cloud-kit" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74dd3b56391c7a0596a295029734d3c1c5e7e510a4cb30245f8221ccea96b009" -dependencies = [ - "bitflags 2.13.0", - "block2 0.5.1", - "objc2 0.5.2", - "objc2-core-location", - "objc2-foundation 0.2.2", -] - -[[package]] -name = "objc2-cloud-kit" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73ad74d880bb43877038da939b7427bba67e9dd42004a18b809ba7d87cee241c" -dependencies = [ - "bitflags 2.13.0", - "objc2 0.6.4", - "objc2-foundation 0.3.2", -] - -[[package]] -name = "objc2-contacts" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5ff520e9c33812fd374d8deecef01d4a840e7b41862d849513de77e44aa4889" -dependencies = [ - "block2 0.5.1", - "objc2 0.5.2", - "objc2-foundation 0.2.2", -] - [[package]] name = "objc2-core-audio" version = "0.3.2" @@ -5274,17 +3404,6 @@ dependencies = [ "objc2-foundation 0.2.2", ] -[[package]] -name = "objc2-core-data" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b402a653efbb5e82ce4df10683b6b28027616a2715e90009947d50b8dd298fa" -dependencies = [ - "bitflags 2.13.0", - "objc2 0.6.4", - "objc2-foundation 0.3.2", -] - [[package]] name = "objc2-core-foundation" version = "0.3.2" @@ -5320,54 +3439,7 @@ dependencies = [ "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", - "objc2-metal 0.2.2", -] - -[[package]] -name = "objc2-core-image" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5d563b38d2b97209f8e861173de434bd0214cf020e3423a52624cd1d989f006" -dependencies = [ - "objc2 0.6.4", - "objc2-foundation 0.3.2", -] - -[[package]] -name = "objc2-core-location" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "000cfee34e683244f284252ee206a27953279d370e309649dc3ee317b37e5781" -dependencies = [ - "block2 0.5.1", - "objc2 0.5.2", - "objc2-contacts", - "objc2-foundation 0.2.2", -] - -[[package]] -name = "objc2-core-text" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cde0dfb48d25d2b4862161a4d5fcc0e3c24367869ad306b0c9ec0073bfed92d" -dependencies = [ - "bitflags 2.13.0", - "objc2 0.6.4", - "objc2-core-foundation", - "objc2-core-graphics", -] - -[[package]] -name = "objc2-core-video" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d425caf1df73233f29fd8a5c3e5edbc30d2d4307870f802d18f00d83dc5141a6" -dependencies = [ - "bitflags 2.13.0", - "objc2 0.6.4", - "objc2-core-foundation", - "objc2-core-graphics", - "objc2-io-surface", + "objc2-metal", ] [[package]] @@ -5384,7 +3456,6 @@ checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" dependencies = [ "bitflags 2.13.0", "block2 0.5.1", - "dispatch", "libc", "objc2 0.5.2", ] @@ -5402,17 +3473,6 @@ dependencies = [ "objc2-core-foundation", ] -[[package]] -name = "objc2-io-kit" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33fafba39597d6dc1fb709123dfa8289d39406734be322956a69f0931c73bb15" -dependencies = [ - "bitflags 2.13.0", - "libc", - "objc2-core-foundation", -] - [[package]] name = "objc2-io-surface" version = "0.3.2" @@ -5424,18 +3484,6 @@ dependencies = [ "objc2-core-foundation", ] -[[package]] -name = "objc2-link-presentation" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1a1ae721c5e35be65f01a03b6d2ac13a54cb4fa70d8a5da293d7b0020261398" -dependencies = [ - "block2 0.5.1", - "objc2 0.5.2", - "objc2-app-kit 0.2.2", - "objc2-foundation 0.2.2", -] - [[package]] name = "objc2-metal" version = "0.2.2" @@ -5448,17 +3496,6 @@ dependencies = [ "objc2-foundation 0.2.2", ] -[[package]] -name = "objc2-metal" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0125f776a10d00af4152d74616409f0d4a2053a6f57fa5b7d6aa2854ac04794" -dependencies = [ - "bitflags 2.13.0", - "objc2 0.6.4", - "objc2-foundation 0.3.2", -] - [[package]] name = "objc2-quartz-core" version = "0.2.2" @@ -5469,89 +3506,7 @@ dependencies = [ "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", - "objc2-metal 0.2.2", -] - -[[package]] -name = "objc2-quartz-core" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96c1358452b371bf9f104e21ec536d37a650eb10f7ee379fff67d2e08d537f1f" -dependencies = [ - "bitflags 2.13.0", - "objc2 0.6.4", - "objc2-core-foundation", - "objc2-foundation 0.3.2", - "objc2-metal 0.3.2", -] - -[[package]] -name = "objc2-symbols" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a684efe3dec1b305badae1a28f6555f6ddd3bb2c2267896782858d5a78404dc" -dependencies = [ - "objc2 0.5.2", - "objc2-foundation 0.2.2", -] - -[[package]] -name = "objc2-ui-kit" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8bb46798b20cd6b91cbd113524c490f1686f4c4e8f49502431415f3512e2b6f" -dependencies = [ - "bitflags 2.13.0", - "block2 0.5.1", - "objc2 0.5.2", - "objc2-cloud-kit 0.2.2", - "objc2-core-data 0.2.2", - "objc2-core-image 0.2.2", - "objc2-core-location", - "objc2-foundation 0.2.2", - "objc2-link-presentation", - "objc2-quartz-core 0.2.2", - "objc2-symbols", - "objc2-uniform-type-identifiers", - "objc2-user-notifications", -] - -[[package]] -name = "objc2-ui-kit" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d87d638e33c06f577498cbcc50491496a3ed4246998a7fbba7ccb98b1e7eab22" -dependencies = [ - "bitflags 2.13.0", - "block2 0.6.2", - "objc2 0.6.4", - "objc2-core-foundation", - "objc2-foundation 0.3.2", - "objc2-quartz-core 0.3.2", -] - -[[package]] -name = "objc2-uniform-type-identifiers" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44fa5f9748dbfe1ca6c0b79ad20725a11eca7c2218bceb4b005cb1be26273bfe" -dependencies = [ - "block2 0.5.1", - "objc2 0.5.2", - "objc2-foundation 0.2.2", -] - -[[package]] -name = "objc2-user-notifications" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76cfcbf642358e8689af64cee815d139339f3ed8ad05103ed5eaf73db8d84cb3" -dependencies = [ - "bitflags 2.13.0", - "block2 0.5.1", - "objc2 0.5.2", - "objc2-core-location", - "objc2-foundation 0.2.2", + "objc2-metal", ] [[package]] @@ -5568,10 +3523,6 @@ name = "once_cell" version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" -dependencies = [ - "critical-section", - "portable-atomic", -] [[package]] name = "once_cell_polyfill" @@ -5608,16 +3559,6 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" -[[package]] -name = "orbclient" -version = "0.3.55" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5df339f526ea9a60e371768d50efc2f2508c7203290731565d1f7a6f71d21747" -dependencies = [ - "libc", - "libredox", -] - [[package]] name = "ordered-float" version = "4.6.0" @@ -5627,15 +3568,6 @@ dependencies = [ "num-traits", ] -[[package]] -name = "ordered-float" -version = "5.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7d950ca161dc355eaf28f82b11345ed76c6e1f6eb1f4f4479e0323b9e2fbd0e" -dependencies = [ - "num-traits", -] - [[package]] name = "ordered-stream" version = "0.2.0" @@ -5656,15 +3588,6 @@ dependencies = [ "windows-sys 0.61.2", ] -[[package]] -name = "owned_ttf_parser" -version = "0.25.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36820e9051aca1014ddc75770aab4d68bc1e9e632f0f5627c4086bc216fb583b" -dependencies = [ - "ttf-parser", -] - [[package]] name = "palette" version = "0.7.6" @@ -5718,51 +3641,12 @@ dependencies = [ "windows-link 0.2.1", ] -[[package]] -name = "parlance" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b6937eda350acc1a5d05872c3cbf99fe78619c269096e2be3d4a350058639d5" - -[[package]] -name = "parley" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6c00ec192e1a402861526eff91a4b4690a2e5a17a4ae2deb772d72b49daf868" -dependencies = [ - "fontique", - "harfrust", - "hashbrown 0.16.1", - "icu_normalizer", - "icu_properties", - "icu_segmenter", - "linebender_resource_handle", - "parlance", - "parley_data", - "skrifa", -] - -[[package]] -name = "parley_data" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "232313eddc02ac27f015e8f8eeb7facce8a896116df7e3eda1bfd9f600a9a39d" -dependencies = [ - "icu_properties", -] - [[package]] name = "paste" version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" -[[package]] -name = "pastey" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35fb2e5f958ec131621fdd531e9fc186ed768cbe395337403ae56c17a74c68ec" - [[package]] name = "pastey" version = "0.2.3" @@ -5886,32 +3770,6 @@ dependencies = [ "siphasher", ] -[[package]] -name = "pico-args" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5be167a7af36ee22fe3115051bc51f6e6c7054c9348e28deb4f49bd6f705a315" - -[[package]] -name = "pin-project" -version = "1.1.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2466b2336ed02bcdca6b294417127b90ec92038d1d5c4fbeac971a922e0e0924" -dependencies = [ - "pin-project-internal", -] - -[[package]] -name = "pin-project-internal" -version = "1.1.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c96395f0a926bc13b1c17622aaddda1ecb55d49c8f1bf9777e4d877800a43f8b" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - [[package]] name = "pin-project-lite" version = "0.2.17" @@ -5924,12 +3782,6 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" -[[package]] -name = "pin-weak" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b330c9d1b92dfe68442ca20b009c717d5f0b1e3cf4965e62f704c3c6e95a1305" - [[package]] name = "piper" version = "0.2.5" @@ -5966,19 +3818,6 @@ dependencies = [ "time", ] -[[package]] -name = "png" -version = "0.17.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82151a2fc869e011c153adc57cf2789ccb8d9906ce52c0b39a6b5697749d7526" -dependencies = [ - "bitflags 1.3.2", - "crc32fast", - "fdeflate", - "flate2", - "miniz_oxide", -] - [[package]] name = "png" version = "0.18.1" @@ -6016,7 +3855,7 @@ checksum = "5d0e4f59085d47d8241c88ead0f274e8a0cb551f3625263c05eb8dd897c34218" dependencies = [ "cfg-if", "concurrent-queue", - "hermit-abi 0.5.2", + "hermit-abi", "pin-project-lite", "rustix 1.1.4", "windows-sys 0.61.2", @@ -6028,15 +3867,6 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2f3a9f18d041e6d0e102a0a46750538147e5e8992d3b4873aaafee2520b00ce3" -[[package]] -name = "polycool" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50596ddc09eb5ad5f75cacd40209568e66df71baf86e1499a0e99c4cff12a5a6" -dependencies = [ - "arrayvec", -] - [[package]] name = "polyval" version = "0.6.2" @@ -6054,9 +3884,6 @@ name = "portable-atomic" version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49" -dependencies = [ - "critical-section", -] [[package]] name = "portable-atomic-util" @@ -6073,8 +3900,6 @@ version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77" dependencies = [ - "serde_core", - "writeable", "zerovec", ] @@ -6093,12 +3918,6 @@ dependencies = [ "zerocopy", ] -[[package]] -name = "presser" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8cf8e6a8aa66ce33f63993ffc4ea4271eb5b0530a9002db8455ea6050c77bfa" - [[package]] name = "prettyplease" version = "0.2.37" @@ -6136,25 +3955,6 @@ dependencies = [ "unicode-ident", ] -[[package]] -name = "profiling" -version = "1.0.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d595e54a326bc53c1c197b32d295e14b169e3cfeaa8dc82b529f947fba6bcf5" -dependencies = [ - "profiling-procmacros", -] - -[[package]] -name = "profiling-procmacros" -version = "1.0.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4488a4a36b9a4ba6b9334a32a39971f77c1436ec82c38707bce707699cc3bbcb" -dependencies = [ - "quote", - "syn 2.0.117", -] - [[package]] name = "prost" version = "0.13.5" @@ -6245,25 +4045,6 @@ dependencies = [ "psl-types", ] -[[package]] -name = "pulldown-cmark" -version = "0.13.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9f068eba8e7071c5f9511831b44f32c740d5adf574e990f946ddb53db2f314e" -dependencies = [ - "bitflags 2.13.0", - "getopts", - "memchr", - "pulldown-cmark-escape", - "unicase", -] - -[[package]] -name = "pulldown-cmark-escape" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "007d8adb5ddab6f8e3f491ac63566a7d5002cc7ed73901f72057943fa71ae1ae" - [[package]] name = "pure-rust-locales" version = "0.8.2" @@ -6276,71 +4057,6 @@ version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b5a041e753da8b807c9255f28de81879c78c876392ff2469cde94799b2896b9d" -[[package]] -name = "qbz" -version = "2.0.2" -dependencies = [ - "arboard", - "async-trait", - "chrono", - "dirs 5.0.1", - "env_logger", - "futures-util", - "gilrs", - "i-slint-backend-winit", - "i-slint-renderer-femtovg", - "image", - "ksni", - "log", - "objc2 0.5.2", - "objc2-app-kit 0.2.2", - "objc2-foundation 0.2.2", - "open", - "qbz-app", - "qbz-audio", - "qbz-cache", - "qbz-cast", - "qbz-core", - "qbz-credentials", - "qbz-dac-wizard", - "qbz-dsd", - "qbz-external-reco", - "qbz-i18n", - "qbz-integrations", - "qbz-library", - "qbz-log", - "qbz-lyrics", - "qbz-media-controls", - "qbz-mixtape", - "qbz-models", - "qbz-music-link", - "qbz-offline-cache", - "qbz-player", - "qbz-playlist-import", - "qbz-plex", - "qbz-qobuz", - "qbz-reco", - "qbz-slint-common", - "qbz-text-utils", - "qbz-theme", - "qbz-ui", - "qconnect-app", - "qconnect-transport-ws", - "rand 0.10.1", - "raw-window-handle", - "reqwest", - "rfd", - "rusqlite", - "serde", - "serde_json", - "slint", - "swash", - "tokio", - "urlencoding", - "uuid 1.22.0", - "zbus 5.15.0", -] - [[package]] name = "qbz-app" version = "2.0.2" @@ -6477,17 +4193,6 @@ dependencies = [ "tokio", ] -[[package]] -name = "qbz-dac-wizard" -version = "2.0.2" -dependencies = [ - "qbz-audio", - "qbz-i18n", - "qbz-models", - "qbz-ui", - "slint", -] - [[package]] name = "qbz-dac-wizard-core" version = "2.0.2" @@ -6762,7 +4467,7 @@ dependencies = [ "qbz-models", "qbz-qobuz", "reqwest", - "roxmltree 0.20.0", + "roxmltree", "serde", "serde_json", "thiserror 2.0.18", @@ -6846,6 +4551,7 @@ dependencies = [ "qbz-media-controls", "qbz-mixtape", "qbz-models", + "qbz-music-link", "qbz-offline-cache", "qbz-player", "qbz-playlist-import", @@ -6868,6 +4574,7 @@ dependencies = [ "tokio", "urlencoding", "uuid 1.22.0", + "zbus 5.15.0", ] [[package]] @@ -6923,14 +4630,6 @@ dependencies = [ "uuid 1.22.0", ] -[[package]] -name = "qbz-slint-common" -version = "2.0.2" -dependencies = [ - "qbz-ui", - "slint", -] - [[package]] name = "qbz-source" version = "2.0.2" @@ -6983,14 +4682,6 @@ dependencies = [ "serde_json", ] -[[package]] -name = "qbz-ui" -version = "2.0.2" -dependencies = [ - "slint", - "slint-build", -] - [[package]] name = "qbzd" version = "2.0.2" @@ -7088,15 +4779,6 @@ dependencies = [ "tokio-tungstenite", ] -[[package]] -name = "qoi" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f6d64c71eb498fe9eae14ce4ec935c555749aef511cca85b5568910d6e48001" -dependencies = [ - "bytemuck", -] - [[package]] name = "qt-build-utils" version = "0.7.3" @@ -7130,7 +4812,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cdcc8dd4e2f670d309a5f0e83fe36dfdc05af317008fea29144da1a2ac858e5e" dependencies = [ "memchr", - "serde", ] [[package]] @@ -7249,12 +4930,6 @@ dependencies = [ "rand 0.10.1", ] -[[package]] -name = "range-alloc" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca45419789ae5a7899559e9512e58ca889e41f04f1f2445e9f4b290ceccd1d08" - [[package]] name = "ratatui" version = "0.30.2" @@ -7356,114 +5031,12 @@ dependencies = [ "unicode-width 0.2.2", ] -[[package]] -name = "rav1e" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43b6dd56e85d9483277cde964fd1bdb0428de4fec5ebba7540995639a21cb32b" -dependencies = [ - "aligned-vec", - "arbitrary", - "arg_enum_proc_macro", - "arrayvec", - "av-scenechange", - "av1-grain", - "bitstream-io", - "built 0.8.1", - "cfg-if", - "interpolate_name", - "itertools 0.14.0", - "libc", - "libfuzzer-sys", - "log", - "maybe-rayon", - "new_debug_unreachable", - "noop_proc_macro", - "num-derive", - "num-traits", - "paste", - "profiling", - "rand 0.9.3", - "rand_chacha 0.9.0", - "simd_helpers", - "thiserror 2.0.18", - "v_frame", - "wasm-bindgen", -] - -[[package]] -name = "ravif" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e52310197d971b0f5be7fe6b57530dcd27beb35c1b013f29d66c1ad73fbbcc45" -dependencies = [ - "avif-serialize", - "imgref", - "loop9", - "quick-error", - "rav1e", - "rayon", - "rgb", -] - [[package]] name = "raw-window-handle" version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539" -[[package]] -name = "raw-window-metal" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40d213455a5f1dc59214213c7330e074ddf8114c9a42411eb890c767357ce135" -dependencies = [ - "objc2 0.6.4", - "objc2-core-foundation", - "objc2-foundation 0.3.2", - "objc2-quartz-core 0.3.2", -] - -[[package]] -name = "rayon" -version = "1.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb39b166781f92d482534ef4b4b1b2568f42613b53e5b6c160e24cfbfa30926d" -dependencies = [ - "either", - "rayon-core", -] - -[[package]] -name = "rayon-core" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91" -dependencies = [ - "crossbeam-deque", - "crossbeam-utils", -] - -[[package]] -name = "read-fonts" -version = "0.37.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b634fabf032fab15307ffd272149b622260f55974d9fad689292a5d33df02e5" -dependencies = [ - "bytemuck", - "core_maths", - "font-types", -] - -[[package]] -name = "redox_syscall" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" -dependencies = [ - "bitflags 1.3.2", -] - [[package]] name = "redox_syscall" version = "0.5.18" @@ -7533,12 +5106,6 @@ version = "0.8.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" -[[package]] -name = "renderdoc-sys" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19b30a45b0cd0bcca8037f3d0dc3421eaf95327a17cad11964fb8179b4fc4832" - [[package]] name = "reqwest" version = "0.12.28" @@ -7582,23 +5149,6 @@ dependencies = [ "webpki-roots 1.0.6", ] -[[package]] -name = "resvg" -version = "0.47.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9be183ad6a216aa96f33e4c8033b0988b8b3ea6fd2359d19af5bac4643fd8e81" -dependencies = [ - "gif", - "image-webp", - "log", - "pico-args", - "rgb", - "svgtypes", - "tiny-skia 0.12.0", - "usvg", - "zune-jpeg", -] - [[package]] name = "rfd" version = "0.15.4" @@ -7623,15 +5173,6 @@ dependencies = [ "windows-sys 0.59.0", ] -[[package]] -name = "rgb" -version = "0.8.53" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47b34b781b31e5d73e9fbc8689c70551fd1ade9a19e3e28cfec8580a79290cc4" -dependencies = [ - "bytemuck", -] - [[package]] name = "ring" version = "0.17.14" @@ -7673,46 +5214,12 @@ dependencies = [ "thiserror 2.0.18", ] -[[package]] -name = "rowan" -version = "0.16.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "417a3a9f582e349834051b8a10c8d71ca88da4211e4093528e36b9845f6b5f21" -dependencies = [ - "countme", - "hashbrown 0.14.5", - "rustc-hash 1.1.0", - "text-size", -] - [[package]] name = "roxmltree" version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c20b6793b5c2fa6553b250154b78d6d0db37e72700ae35fad9387a46f487c97" -[[package]] -name = "roxmltree" -version = "0.21.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1964b10c76125c36f8afe190065a4bf9a87bf324842c05701330bba9f1cacbb" -dependencies = [ - "memchr", -] - -[[package]] -name = "rspolib" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fda9a7796aff63a7b1b39ccc93fffaaf65e20042984b4843041a49ca4677535" -dependencies = [ - "lazy_static", - "natord", - "snafu", - "unicode-linebreak", - "unicode-width 0.2.2", -] - [[package]] name = "rtrb" version = "0.3.3" @@ -7734,7 +5241,7 @@ dependencies = [ "hyper", "hyper-util", "if-addrs", - "roxmltree 0.20.0", + "roxmltree", "ssdp-client", "tokio", ] @@ -7770,18 +5277,6 @@ dependencies = [ "thiserror 2.0.18", ] -[[package]] -name = "rustc-hash" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" - -[[package]] -name = "rustc-hash" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" - [[package]] name = "rustc_version" version = "0.4.1" @@ -7885,24 +5380,6 @@ version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" -[[package]] -name = "rustybuzz" -version = "0.20.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd3c7c96f8a08ee34eff8857b11b49b07d71d1c3f4e88f8a88d4c9e9f90b1702" -dependencies = [ - "bitflags 2.13.0", - "bytemuck", - "core_maths", - "log", - "smallvec", - "ttf-parser", - "unicode-bidi-mirroring", - "unicode-ccc", - "unicode-properties", - "unicode-script", -] - [[package]] name = "ryu" version = "1.0.23" @@ -7933,12 +5410,6 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" -[[package]] -name = "scoped-tls-hkt" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9603871ffe5df3ac39cb624790c296dbd47a400d202f56bf3e414045099524d" - [[package]] name = "scopeguard" version = "1.2.0" @@ -7951,19 +5422,6 @@ version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d68f2ec51b097e4c1a75b681a8bec621909b5e91f15bb7b840c4f2f7b01148b2" -[[package]] -name = "sctk-adwaita" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6277f0217056f77f1d8f49f2950ac6c278c0d607c45f5ee99328d792ede24ec" -dependencies = [ - "ab_glyph", - "log", - "memmap2", - "smithay-client-toolkit 0.19.2", - "tiny-skia 0.11.4", -] - [[package]] name = "secret-service" version = "4.0.0" @@ -8169,258 +5627,24 @@ version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e320a6c5ad31d271ad523dcf3ad13e2767ad8b1cb8f047f75a8aeaf8da139da2" -[[package]] -name = "simd_cesu8" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94f90157bb87cddf702797c5dadfa0be7d266cdf49e22da2fcaa32eff75b2c33" -dependencies = [ - "rustc_version", - "simdutf8", -] - -[[package]] -name = "simd_helpers" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95890f873bec569a0362c235787f3aca6e1e887302ba4840839bcc6459c42da6" -dependencies = [ - "quote", -] - -[[package]] -name = "simdutf8" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" - -[[package]] -name = "simplecss" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a9c6883ca9c3c7c90e888de77b7a5c849c779d25d74a1269b0218b14e8b136c" -dependencies = [ - "log", -] - [[package]] name = "siphasher" version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ee5873ec9cce0195efcb7a4e9507a04cd49aec9c83d0389df45b1ef7ba2e649" -[[package]] -name = "skia-bindings" -version = "0.90.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f6f96e00735f14a781aac8a6870c862b8cc831df6d8e4ad77ab78e11411b9af" -dependencies = [ - "bindgen", - "cc", - "flate2", - "heck", - "pkg-config", - "regex", - "serde_json", - "tar", - "toml", -] - -[[package]] -name = "skia-safe" -version = "0.90.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a71c01d325d40b1031dee67d251a5e0132e79e2a9ec272149a4f4a0d4b8b3be" -dependencies = [ - "bitflags 2.13.0", - "skia-bindings", - "windows 0.62.2", -] - -[[package]] -name = "skrifa" -version = "0.40.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fbdfe3d2475fbd7ddd1f3e5cf8288a30eb3e5f95832829570cd88115a7434ac" -dependencies = [ - "bytemuck", - "read-fonts", -] - [[package]] name = "slab" version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" -[[package]] -name = "slint" -version = "1.16.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d46bc502cc6b113bfd1a7e9a0876532a9454ff4ee905afe09784eaa2ec3f3f33" -dependencies = [ - "const-field-offset", - "i-slint-backend-android-activity", - "i-slint-backend-selector", - "i-slint-backend-winit", - "i-slint-common", - "i-slint-core", - "i-slint-core-macros", - "i-slint-renderer-femtovg", - "i-slint-renderer-software", - "num-traits", - "once_cell", - "pin-weak", - "raw-window-handle", - "slint-macros", - "unicode-segmentation", - "vtable", - "wgpu", -] - -[[package]] -name = "slint-build" -version = "1.16.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a73854b9adf81fa1600b46df488ffc3796400e8e9b40d504a94a36b55c8f3d0a" -dependencies = [ - "derive_more", - "fontique", - "i-slint-compiler", - "spin_on", - "toml_edit", -] - -[[package]] -name = "slint-macros" -version = "1.16.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d5884e06072c329da7096ad1367eb83b98c78e5313f7ac90d66f90d4acc62ee" -dependencies = [ - "i-slint-compiler", - "proc-macro2", - "quote", - "spin_on", -] - -[[package]] -name = "slotmap" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdd58c3c93c3d278ca835519292445cb4b0d4dc59ccfdf7ceadaab3f8aeb4038" -dependencies = [ - "version_check", -] - [[package]] name = "smallvec" version = "1.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" -[[package]] -name = "smithay-client-toolkit" -version = "0.19.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3457dea1f0eb631b4034d61d4d8c32074caa6cd1ab2d59f2327bd8461e2c0016" -dependencies = [ - "bitflags 2.13.0", - "calloop 0.13.0", - "calloop-wayland-source 0.3.0", - "cursor-icon", - "libc", - "log", - "memmap2", - "rustix 0.38.44", - "thiserror 1.0.69", - "wayland-backend", - "wayland-client", - "wayland-csd-frame", - "wayland-cursor", - "wayland-protocols", - "wayland-protocols-wlr", - "wayland-scanner", - "xkeysym", -] - -[[package]] -name = "smithay-client-toolkit" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0512da38f5e2b31201a93524adb8d3136276fa4fe4aafab4e1f727a82b534cc0" -dependencies = [ - "bitflags 2.13.0", - "calloop 0.14.4", - "calloop-wayland-source 0.4.1", - "cursor-icon", - "libc", - "log", - "memmap2", - "rustix 1.1.4", - "thiserror 2.0.18", - "wayland-backend", - "wayland-client", - "wayland-csd-frame", - "wayland-cursor", - "wayland-protocols", - "wayland-protocols-experimental", - "wayland-protocols-misc", - "wayland-protocols-wlr", - "wayland-scanner", - "xkeysym", -] - -[[package]] -name = "smithay-clipboard" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71704c03f739f7745053bde45fa203a46c58d25bc5c4efba1d9a60e9dba81226" -dependencies = [ - "libc", - "smithay-client-toolkit 0.20.0", - "wayland-backend", -] - -[[package]] -name = "smol_str" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd538fb6910ac1099850255cf94a94df6551fbdd602454387d0adb2d1ca6dead" -dependencies = [ - "serde", -] - -[[package]] -name = "smol_str" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4aaa7368fcf4852a4c2dd92df0cace6a71f2091ca0a23391ce7f3a31833f1523" -dependencies = [ - "borsh", - "serde_core", -] - -[[package]] -name = "snafu" -version = "0.8.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e84b3f4eacbf3a1ce05eac6763b4d629d60cbc94d632e4092c54ade71f1e1a2" -dependencies = [ - "snafu-derive", -] - -[[package]] -name = "snafu-derive" -version = "0.8.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1c97747dbf44bb1ca44a561ece23508e99cb592e862f22222dcf42f51d1e451" -dependencies = [ - "heck", - "proc-macro2", - "quote", - "syn 2.0.117", -] - [[package]] name = "socket2" version = "0.5.10" @@ -8441,38 +5665,6 @@ dependencies = [ "windows-sys 0.61.2", ] -[[package]] -name = "softbuffer" -version = "0.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aac18da81ebbf05109ab275b157c22a653bb3c12cf884450179942f81bcbf6c3" -dependencies = [ - "as-raw-xcb-connection", - "bytemuck", - "drm", - "fastrand", - "js-sys", - "memmap2", - "ndk", - "objc2 0.6.4", - "objc2-core-foundation", - "objc2-core-graphics", - "objc2-foundation 0.3.2", - "objc2-quartz-core 0.3.2", - "raw-window-handle", - "redox_syscall 0.5.18", - "rustix 1.1.4", - "tiny-xlib", - "tracing", - "wasm-bindgen", - "wayland-backend", - "wayland-client", - "wayland-sys", - "web-sys", - "windows-sys 0.61.2", - "x11rb", -] - [[package]] name = "souvlaki" version = "0.8.3" @@ -8482,7 +5674,7 @@ dependencies = [ "base64", "block", "cocoa", - "core-graphics 0.22.3", + "core-graphics", "dbus", "dbus-crossroads", "dispatch", @@ -8497,7 +5689,7 @@ version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5f5353405212be77e7f9e95aa77934f0aafb0f80c586571680b9c20ce5bae758" dependencies = [ - "float-cmp 0.10.0", + "float-cmp", "libm", "microfft", "paste", @@ -8512,24 +5704,6 @@ dependencies = [ "lock_api", ] -[[package]] -name = "spin_on" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "076e103ed41b9864aa838287efe5f4e3a7a0362dd00671ae62a212e5e4612da2" -dependencies = [ - "pin-utils", -] - -[[package]] -name = "spirv" -version = "0.3.0+sdk-1.3.268.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eda41003dc44290527a59b13432d4a0379379fa074b70174882adfbdfd917844" -dependencies = [ - "bitflags 2.13.0", -] - [[package]] name = "ssdp-client" version = "2.1.0" @@ -8560,15 +5734,6 @@ version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fe895eb47f22e2ddd4dabc02bce419d2e643c8e3b585c78158b349195bc24d82" -[[package]] -name = "strict-num" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6637bab7722d379c8b41ba849228d680cc12d0a45ba1fa2b48f2a30577a06731" -dependencies = [ - "float-cmp 0.9.0", -] - [[package]] name = "strsim" version = "0.11.1" @@ -8602,27 +5767,6 @@ version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" -[[package]] -name = "svgtypes" -version = "0.16.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "695b5790b3131dafa99b3bbfd25a216edb3d216dad9ca208d4657bfb8f2abc3d" -dependencies = [ - "kurbo", - "siphasher", -] - -[[package]] -name = "swash" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "842f3cd369c2ba38966204f983eaa5e54a8e84a7d7159ed36ade2b6c335aae64" -dependencies = [ - "skrifa", - "yazi", - "zeno", -] - [[package]] name = "symphonia" version = "0.5.5" @@ -8871,41 +6015,6 @@ dependencies = [ "syn 2.0.117", ] -[[package]] -name = "sys-locale" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8eab9a99a024a169fe8a903cf9d4a3b3601109bcc13bd9e3c6fff259138626c4" -dependencies = [ - "js-sys", - "libc", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "taffy" -version = "0.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41ba83ebaf2954d31d05d67340fd46cebe99da2b7133b0dd68d70c65473a437b" -dependencies = [ - "arrayvec", - "grid", - "serde", - "slotmap", -] - -[[package]] -name = "tar" -version = "0.4.46" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f6221d9a6003c78398e3b239969f352578258df48c8eb051caadae0015bc840" -dependencies = [ - "filetime", - "libc", - "xattr", -] - [[package]] name = "tauri-winrt-notification" version = "0.7.2" @@ -8992,10 +6101,10 @@ dependencies = [ "libc", "log", "memmem", - "nix 0.29.0", + "nix", "num-derive", "num-traits", - "ordered-float 4.6.0", + "ordered-float", "pest", "pest_derive", "phf", @@ -9016,12 +6125,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "text-size" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f18aa187839b2bdb1ad2fa35ead8c4c2976b64e4363c386d45ac0f7ee85c9233" - [[package]] name = "thiserror" version = "1.0.69" @@ -9109,70 +6212,6 @@ dependencies = [ "time-core", ] -[[package]] -name = "tiny-skia" -version = "0.11.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83d13394d44dae3207b52a326c0c85a8bf87f1541f23b0d143811088497b09ab" -dependencies = [ - "arrayref", - "arrayvec", - "bytemuck", - "cfg-if", - "log", - "tiny-skia-path 0.11.4", -] - -[[package]] -name = "tiny-skia" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47ffee5eaaf5527f630fb0e356b90ebdec84d5d18d937c5e440350f88c5a91ea" -dependencies = [ - "arrayref", - "arrayvec", - "bytemuck", - "cfg-if", - "log", - "png 0.18.1", - "tiny-skia-path 0.12.0", -] - -[[package]] -name = "tiny-skia-path" -version = "0.11.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c9e7fc0c2e86a30b117d0462aa261b72b7a99b7ebd7deb3a14ceda95c5bdc93" -dependencies = [ - "arrayref", - "bytemuck", - "strict-num", -] - -[[package]] -name = "tiny-skia-path" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edca365c3faccca67d06593c5980fa6c57687de727a03131735bb85f01fdeeb9" -dependencies = [ - "arrayref", - "bytemuck", - "strict-num", -] - -[[package]] -name = "tiny-xlib" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a90a0ca3ee6a69f2ad28fd11621a4c3f03b371f366be500b64df260c4ffbafb4" -dependencies = [ - "as-raw-xcb-connection", - "ctor", - "libloading 0.8.9", - "pkg-config", - "tracing", -] - [[package]] name = "tiny_http" version = "0.12.0" @@ -9192,25 +6231,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42d3e9c45c09de15d06dd8acf5f4e0e399e85927b7f00711024eb7ae10fa4869" dependencies = [ "displaydoc", - "serde_core", "zerovec", ] -[[package]] -name = "tinyvec" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa" -dependencies = [ - "tinyvec_macros", -] - -[[package]] -name = "tinyvec_macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" - [[package]] name = "tokio" version = "1.50.0" @@ -9333,7 +6356,6 @@ dependencies = [ "indexmap", "toml_datetime 1.0.0+spec-1.1.0", "toml_parser", - "toml_writer", "winnow 0.7.15", ] @@ -9403,7 +6425,6 @@ version = "0.1.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" dependencies = [ - "log", "pin-project-lite", "tracing-attributes", "tracing-core", @@ -9467,15 +6488,6 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" -[[package]] -name = "ttf-parser" -version = "0.25.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2df906b07856748fa3f6e0ad0cbaa047052d4a7dd609e231c4f72cee8c36f31" -dependencies = [ - "core_maths", -] - [[package]] name = "tungstenite" version = "0.24.0" @@ -9496,16 +6508,6 @@ dependencies = [ "utf-8", ] -[[package]] -name = "typed-index-collections" -version = "3.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "898160f1dfd383b4e92e17f0512a7d62f3c51c44937b23b6ffc3a1614a8eaccd" -dependencies = [ - "bincode", - "serde", -] - [[package]] name = "typenum" version = "1.20.0" @@ -9518,18 +6520,6 @@ version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" -[[package]] -name = "udev" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af4e37e9ea4401fc841ff54b9ddfc9be1079b1e89434c1a6a865dd68980f7e9f" -dependencies = [ - "io-lifetimes", - "libc", - "libudev-sys", - "pkg-config", -] - [[package]] name = "uds_windows" version = "1.2.1" @@ -9541,54 +6531,12 @@ dependencies = [ "windows-sys 0.61.2", ] -[[package]] -name = "unicase" -version = "2.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbc4bc3a9f746d862c45cb89d705aa10f187bb96c76001afab07a0d35ce60142" - -[[package]] -name = "unicode-bidi" -version = "0.3.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5" - -[[package]] -name = "unicode-bidi-mirroring" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dfa6e8c60bb66d49db113e0125ee8711b7647b5579dc7f5f19c42357ed039fe" - -[[package]] -name = "unicode-ccc" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce61d488bcdc9bc8b5d1772c404828b17fc481c0a582b5581e95fb233aef503e" - [[package]] name = "unicode-ident" version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" -[[package]] -name = "unicode-linebreak" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b09c83c3c29d37506a3e260c08c03743a6bb66a9cd432c6934ab501a190571f" - -[[package]] -name = "unicode-properties" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7df058c713841ad818f1dc5d3fd88063241cc61f49f5fbea4b951e8cf5a8d71d" - -[[package]] -name = "unicode-script" -version = "0.5.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "383ad40bb927465ec0ce7720e033cb4ca06912855fc35db31b5755d0de75b1ee" - [[package]] name = "unicode-segmentation" version = "1.13.2" @@ -9606,12 +6554,6 @@ dependencies = [ "unicode-width 0.2.2", ] -[[package]] -name = "unicode-vo" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1d386ff53b415b7fe27b50bb44679e2cc4660272694b7b6f3326d8480823a94" - [[package]] name = "unicode-width" version = "0.1.14" @@ -9646,12 +6588,6 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" -[[package]] -name = "unty" -version = "0.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d49784317cd0d1ee7ec5c716dd598ec5b4483ea832a2dced265471cc0f690ae" - [[package]] name = "url" version = "2.5.8" @@ -9671,34 +6607,6 @@ version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" -[[package]] -name = "usvg" -version = "0.47.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d46cf96c5f498d36b7a9693bc6a7075c0bb9303189d61b2249b0dc3d309c07de" -dependencies = [ - "base64", - "data-url", - "flate2", - "fontdb", - "imagesize", - "kurbo", - "log", - "pico-args", - "roxmltree 0.21.1", - "rustybuzz", - "simplecss", - "siphasher", - "strict-num", - "svgtypes", - "tiny-skia-path 0.12.0", - "ttf-parser", - "unicode-bidi", - "unicode-script", - "unicode-vo", - "xmlwriter", -] - [[package]] name = "utf-8" version = "0.7.6" @@ -9739,29 +6647,12 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "v_frame" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "666b7727c8875d6ab5db9533418d7c764233ac9c0cff1d469aec8fa127597be2" -dependencies = [ - "aligned-vec", - "num-traits", - "wasm-bindgen", -] - [[package]] name = "vcpkg" version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" -[[package]] -name = "vec_map" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" - [[package]] name = "version_check" version = "0.9.5" @@ -9778,29 +6669,6 @@ dependencies = [ "nom 7.1.3", ] -[[package]] -name = "vtable" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ea953f65593feb5287b022b83c35046d1ff49c7417b6f5851a079d8a231fe31" -dependencies = [ - "const-field-offset", - "portable-atomic", - "stable_deref_trait", - "vtable-macro", -] - -[[package]] -name = "vtable-macro" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "482a37f9777480673d3a99c80ac2edc69f92382230440946855fa27ebc47cba6" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - [[package]] name = "vtparse" version = "0.6.2" @@ -9985,28 +6853,6 @@ dependencies = [ "wayland-scanner", ] -[[package]] -name = "wayland-csd-frame" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "625c5029dbd43d25e6aa9615e88b829a5cad13b2819c4ae129fdbb7c31ab4c7e" -dependencies = [ - "bitflags 2.13.0", - "cursor-icon", - "wayland-backend", -] - -[[package]] -name = "wayland-cursor" -version = "0.31.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a52d18780be9b1314328a3de5f930b73d2200112e3849ca6cb11822793fb34d" -dependencies = [ - "rustix 1.1.4", - "wayland-client", - "xcursor", -] - [[package]] name = "wayland-protocols" version = "0.32.12" @@ -10019,45 +6865,6 @@ dependencies = [ "wayland-scanner", ] -[[package]] -name = "wayland-protocols-experimental" -version = "20250721.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40a1f863128dcaaec790d7b4b396cc9b9a7a079e878e18c47e6c2d2c5a8dcbb1" -dependencies = [ - "bitflags 2.13.0", - "wayland-backend", - "wayland-client", - "wayland-protocols", - "wayland-scanner", -] - -[[package]] -name = "wayland-protocols-misc" -version = "0.3.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e9567599ef23e09b8dad6e429e5738d4509dfc46b3b21f32841a304d16b29c8" -dependencies = [ - "bitflags 2.13.0", - "wayland-backend", - "wayland-client", - "wayland-protocols", - "wayland-scanner", -] - -[[package]] -name = "wayland-protocols-plasma" -version = "0.3.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b6d8cf1eb2c1c31ed1f5643c88a6e53538129d4af80030c8cabd1f9fa884d91" -dependencies = [ - "bitflags 2.13.0", - "wayland-backend", - "wayland-client", - "wayland-protocols", - "wayland-scanner", -] - [[package]] name = "wayland-protocols-wlr" version = "0.3.12" @@ -10090,7 +6897,6 @@ checksum = "d8eab23fefc9e41f8e841df4a9c707e8a8c4ed26e944ef69297184de2785e3be" dependencies = [ "dlib", "log", - "once_cell", "pkg-config", ] @@ -10104,32 +6910,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "web-time" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "webbrowser" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fc95580916af1e68ff6a7be07446fc5db73ebf71cf092de939bbf5f7e189f72" -dependencies = [ - "core-foundation 0.10.1", - "jni 0.22.4", - "log", - "ndk-context", - "objc2 0.6.4", - "objc2-foundation 0.3.2", - "url", - "web-sys", -] - [[package]] name = "webpki-roots" version = "0.26.11" @@ -10196,7 +6976,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5f2ab60e120fd6eaa68d9567f3226e876684639d22a4219b313ff69ec0ccd5ac" dependencies = [ "log", - "ordered-float 4.6.0", + "ordered-float", "strsim", "thiserror 1.0.69", "wezterm-dynamic-derive", @@ -10226,156 +7006,6 @@ dependencies = [ "wezterm-dynamic", ] -[[package]] -name = "wgpu" -version = "28.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9cb534d5ffd109c7d1135f34cdae29e60eab94855a625dcfe1705f8bc7ad79f" -dependencies = [ - "arrayvec", - "bitflags 2.13.0", - "bytemuck", - "cfg-if", - "cfg_aliases", - "document-features", - "hashbrown 0.16.1", - "js-sys", - "log", - "naga", - "parking_lot", - "portable-atomic", - "profiling", - "raw-window-handle", - "smallvec", - "static_assertions", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "wgpu-core", - "wgpu-hal", - "wgpu-types", -] - -[[package]] -name = "wgpu-core" -version = "28.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d23f4642f53f666adcfd2d3218ab174d1e6681101aef18696b90cbe64d1c10f9" -dependencies = [ - "arrayvec", - "bit-set 0.8.0", - "bit-vec 0.8.0", - "bitflags 2.13.0", - "bytemuck", - "cfg_aliases", - "document-features", - "hashbrown 0.16.1", - "indexmap", - "log", - "naga", - "once_cell", - "parking_lot", - "portable-atomic", - "profiling", - "raw-window-handle", - "rustc-hash 1.1.0", - "smallvec", - "thiserror 2.0.18", - "wgpu-core-deps-apple", - "wgpu-core-deps-emscripten", - "wgpu-core-deps-windows-linux-android", - "wgpu-hal", - "wgpu-types", -] - -[[package]] -name = "wgpu-core-deps-apple" -version = "28.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87b7b696b918f337c486bf93142454080a32a37832ba8a31e4f48221890047da" -dependencies = [ - "wgpu-hal", -] - -[[package]] -name = "wgpu-core-deps-emscripten" -version = "28.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34b251c331f84feac147de3c4aa3aa45112622a95dd7ee1b74384fa0458dbd79" -dependencies = [ - "wgpu-hal", -] - -[[package]] -name = "wgpu-core-deps-windows-linux-android" -version = "28.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68ca976e72b2c9964eb243e281f6ce7f14a514e409920920dcda12ae40febaae" -dependencies = [ - "wgpu-hal", -] - -[[package]] -name = "wgpu-hal" -version = "28.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44d6cb474beb218824dcc9e1ce679d973f719262789bfb27407da560cac20eeb" -dependencies = [ - "android_system_properties", - "arrayvec", - "ash", - "bit-set 0.8.0", - "bitflags 2.13.0", - "block", - "bytemuck", - "cfg-if", - "cfg_aliases", - "core-graphics-types 0.2.0", - "glow 0.16.0", - "glutin_wgl_sys", - "gpu-allocator", - "gpu-descriptor", - "hashbrown 0.16.1", - "js-sys", - "khronos-egl", - "libc", - "libloading 0.8.9", - "log", - "metal 0.33.0", - "naga", - "ndk-sys", - "objc", - "once_cell", - "ordered-float 5.3.0", - "parking_lot", - "portable-atomic", - "portable-atomic-util", - "profiling", - "range-alloc", - "raw-window-handle", - "renderdoc-sys", - "smallvec", - "thiserror 2.0.18", - "wasm-bindgen", - "web-sys", - "wgpu-types", - "windows 0.62.2", - "windows-core 0.62.2", -] - -[[package]] -name = "wgpu-types" -version = "28.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e18308757e594ed2cd27dddbb16a139c42a683819d32a2e0b1b0167552f5840c" -dependencies = [ - "bitflags 2.13.0", - "bytemuck", - "js-sys", - "log", - "web-sys", -] - [[package]] name = "which" version = "4.4.2" @@ -10933,58 +7563,6 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" -[[package]] -name = "winit" -version = "0.30.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6755fa58a9f8350bd1e472d4c3fcc25f824ec358933bba33306d0b63df5978d" -dependencies = [ - "ahash", - "android-activity", - "atomic-waker", - "bitflags 2.13.0", - "block2 0.5.1", - "bytemuck", - "calloop 0.13.0", - "cfg_aliases", - "concurrent-queue", - "core-foundation 0.9.4", - "core-graphics 0.23.2", - "cursor-icon", - "dpi", - "js-sys", - "libc", - "memmap2", - "ndk", - "objc2 0.5.2", - "objc2-app-kit 0.2.2", - "objc2-foundation 0.2.2", - "objc2-ui-kit 0.2.2", - "orbclient", - "percent-encoding", - "pin-project", - "raw-window-handle", - "redox_syscall 0.4.1", - "rustix 0.38.44", - "sctk-adwaita", - "smithay-client-toolkit 0.19.2", - "smol_str 0.2.2", - "tracing", - "unicode-segmentation", - "wasm-bindgen", - "wasm-bindgen-futures", - "wayland-backend", - "wayland-client", - "wayland-protocols", - "wayland-protocols-plasma", - "web-sys", - "web-time", - "windows-sys 0.52.0", - "x11-dl", - "x11rb", - "xkbcommon-dl", -] - [[package]] name = "winnow" version = "0.7.15" @@ -11109,57 +7687,19 @@ dependencies = [ "wayland-protocols-wlr", ] -[[package]] -name = "write-fonts" -version = "0.45.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f12725b0845073e20b04e79b500dbfb465904d7cbd84883a1f1bbd084debc515" -dependencies = [ - "font-types", - "indexmap", - "kurbo", - "log", - "read-fonts", -] - [[package]] name = "writeable" version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9" -[[package]] -name = "x11-clipboard" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "662d74b3d77e396b8e5beb00b9cad6a9eccf40b2ef68cc858784b14c41d535a3" -dependencies = [ - "libc", - "x11rb", -] - -[[package]] -name = "x11-dl" -version = "2.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f" -dependencies = [ - "libc", - "once_cell", - "pkg-config", -] - [[package]] name = "x11rb" version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9993aa5be5a26815fe2c3eacfc1fde061fc1a1f094bf1ad2a18bf9c495dd7414" dependencies = [ - "as-raw-xcb-connection", "gethostname", - "libc", - "libloading 0.8.9", - "once_cell", "rustix 1.1.4", "x11rb-protocol", ] @@ -11170,22 +7710,6 @@ version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ea6fc2961e4ef194dcbfe56bb845534d0dc8098940c7e5c012a258bfec6701bd" -[[package]] -name = "xattr" -version = "1.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32e45ad4206f6d2479085147f02bc2ef834ac85886624a23575ae137c8aa8156" -dependencies = [ - "libc", - "rustix 1.1.4", -] - -[[package]] -name = "xcursor" -version = "0.3.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bec9e4a500ca8864c5b47b8b482a73d62e4237670e5b5f1d6b9e3cae50f28f2b" - [[package]] name = "xdg-home" version = "1.3.0" @@ -11196,71 +7720,6 @@ dependencies = [ "windows-sys 0.59.0", ] -[[package]] -name = "xkbcommon" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7a974f48060a14e95705c01f24ad9c3345022f4d97441b8a36beb7ed5c4a02d" -dependencies = [ - "libc", - "memmap2", - "xkeysym", -] - -[[package]] -name = "xkbcommon-dl" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d039de8032a9a8856a6be89cea3e5d12fdd82306ab7c94d74e6deab2460651c5" -dependencies = [ - "bitflags 2.13.0", - "dlib", - "log", - "once_cell", - "xkeysym", -] - -[[package]] -name = "xkeysym" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9cc00251562a284751c9973bace760d86c0276c471b4be569fe6b068ee97a56" - -[[package]] -name = "xml-rs" -version = "0.8.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ae8337f8a065cfc972643663ea4279e04e7256de865aa66fe25cec5fb912d3f" - -[[package]] -name = "xmlwriter" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec7a2a501ed189703dba8b08142f057e887dfc4b2cc4db2d343ac6376ba3e0b9" - -[[package]] -name = "y4m" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a5a4b21e1a62b67a2970e6831bc091d7b87e119e7f9791aef9702e3bef04448" - -[[package]] -name = "yazi" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e01738255b5a16e78bbb83e7fbba0a1e7dd506905cfc53f4622d89015a03fbb5" - -[[package]] -name = "yeslogic-fontconfig-sys" -version = "6.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d8b8abf912b9a29ff112e1671c97c33636903d13a69712037190e6805af4f76" -dependencies = [ - "dlib", - "once_cell", - "pkg-config", -] - [[package]] name = "yoke" version = "0.8.1" @@ -11306,7 +7765,7 @@ dependencies = [ "futures-sink", "futures-util", "hex", - "nix 0.29.0", + "nix", "ordered-stream", "rand 0.8.6", "serde", @@ -11358,30 +7817,6 @@ dependencies = [ "zvariant 5.11.0", ] -[[package]] -name = "zbus-lockstep" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6998de05217a084b7578728a9443d04ea4cd80f2a0839b8d78770b76ccd45863" -dependencies = [ - "zbus_xml", - "zvariant 5.11.0", -] - -[[package]] -name = "zbus-lockstep-macros" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10da05367f3a7b7553c8cdf8fa91aee6b64afebe32b51c95177957efc47ca3a0" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", - "zbus-lockstep", - "zbus_xml", - "zvariant 5.11.0", -] - [[package]] name = "zbus_macros" version = "4.4.0" @@ -11432,24 +7867,6 @@ dependencies = [ "zvariant 5.11.0", ] -[[package]] -name = "zbus_xml" -version = "5.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8067892e940ed1727dea64690378601603b31d62dfde019a5335fbb7c0e0ed9" -dependencies = [ - "quick-xml 0.39.4", - "serde", - "zbus_names 4.3.2", - "zvariant 5.11.0", -] - -[[package]] -name = "zeno" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6df3dc4292935e51816d896edcd52aa30bc297907c26167fec31e2b0c6a32524" - [[package]] name = "zerocopy" version = "0.8.42" @@ -11528,7 +7945,6 @@ version = "0.11.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c28719294829477f525be0186d13efa9a3c602f7ec202ca9e353d310fb9a002" dependencies = [ - "serde", "yoke", "zerofrom", "zerovec-derive", @@ -11557,15 +7973,6 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cb8a0807f7c01457d0379ba880ba6322660448ddebc890ce29bb64da71fb40f9" -[[package]] -name = "zune-inflate" -version = "0.2.54" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73ab332fe2f6680068f3582b16a24f90ad7096d5d39b974d1c0aff0125116f02" -dependencies = [ - "simd-adler32", -] - [[package]] name = "zune-jpeg" version = "0.5.12" diff --git a/crates/Cargo.toml b/crates/Cargo.toml index 6d60aa16f..b51366054 100644 --- a/crates/Cargo.toml +++ b/crates/Cargo.toml @@ -31,19 +31,9 @@ members = [ "qconnect-protocol", "qconnect-transport-ws", "qconnect-app", - "qbz-ui", - # The HiFi Wizard's frontend-agnostic core (ADR-006), extracted for the Qt - # port. `qbz-dac-wizard` is the SLINT one and is deliberately NOT wired to - # this crate: the Slint tree is frozen (owner, 2026-08-11 — "ya no hacemos - # cambios para Slint"), and rewiring it would have been a change to a tree - # nobody compiles or tests any more. The two therefore hold the same logic - # twice; that is safe only BECAUSE the Slint side is frozen, and it is the - # reason a fix here never needs porting back. + # The HiFi Wizard's frontend-agnostic core (ADR-006), consumed by Qt. "qbz-dac-wizard-core", - "qbz-dac-wizard", "qbz-text-utils", - "qbz-slint-common", - "qbz", "qbz-credentials", "qbz-media-controls", "qbz-mixtape", @@ -57,8 +47,7 @@ members = [ "qbzd", "qbz-qt", # The source-agnostic seam (one trait + one registry over Qobuz / local / - # Plex). Purely additive: nothing in `qbz` or `qbz-mixtape` changes, and it - # deliberately does NOT depend on qbz-audio / qbz-player. + # Plex). It deliberately does NOT depend on qbz-audio / qbz-player. "qbz-source", # Media-server protocol crates: siblings of `qbz-plex`, same shape. HTTP + # DTOs only — no cache schema, no settings store, no Qt (ADR-006). @@ -69,9 +58,8 @@ members = [ "qbz-media-cache", ] -# Qt-frontend POC worktree: plain `cargo build`/`cargo check` in this workspace -# produces ONLY the Qt binary (plus its Slint-free dependency closure). The -# Slint crates remain members but are never built by default here. +# The desktop application is Qt/QML. Plain `cargo build`/`cargo check` produces +# that binary plus its frontend-agnostic dependency closure. default-members = ["qbz-qt"] [workspace.package] @@ -126,57 +114,10 @@ strsim = "0.11" [profile.release] # Strip symbol tables from release binaries. Measured on 2026-07-02: -# 400 MB -> 218 MB (-45%). There are no .debug_* sections in a default -# release build — the weight is .strtab (151 MB) + .symtab (22 MB), inflated -# by Slint's generated generic symbol names. Trade-off: panic backtraces show -# addresses instead of names; the release workflow archives the UNSTRIPPED -# binary as an Actions artifact per tag for offline symbolication. +# 400 MB -> 218 MB (-45%). Trade-off: panic backtraces show addresses instead +# of names; release automation retains an unstripped artifact for offline +# symbolication. # Codegen knobs (opt-level / codegen-units / jobs) intentionally stay in the # workflows' env (CARGO_PROFILE_RELEASE_*) — they are CI-memory tuning, not # a property of the package. strip = "symbols" - -[patch.crates-io] -# Slint 1.16's femtovg-wgpu renderer leaves the wgpu surface alpha mode at -# `Auto`, which resolves as an opaque compositor surface on KWin/Wayland and -# makes borderless transparent windows show a black rectangular backing. The -# patch keeps Slint pinned but chooses a supported non-opaque composite alpha -# mode when the surface advertises one, so the miniplayer card can have real -# transparent rounded corners. The non-opaque mode is PER-WINDOW opt-in -# (`wgpu::set_surface_prefers_transparent`, flipped from qbz's winit -# window-attributes hook): only the miniplayer pays the compositor-blend cost, -# the main window keeps an Opaque swapchain. -i-slint-renderer-femtovg = { path = "vendor/i-slint-renderer-femtovg-1.16.1" } -# On modern macOS, fontique's CoreText per-script fallback can fail to resolve -# a Han-script family (the suggested PingFang is not always in the scanned -# family map), so Japanese kanji rendered blank while kana worked. The patch -# pre-registers the known system CJK families (Hiragino/PingFang/Apple SD -# Gothic Neo/Arial Unicode MS, Japanese-biased default) in the fallback map at -# collection creation, which takes priority over the CoreText query. macOS-only -# (#[cfg]); Linux keeps its working fontconfig fallback. -i-slint-common = { path = "vendor/i-slint-common-1.16.1" } -# With `overflow: elide`, sharedparley culled EVERY line whose bottom edge -# exceeded max_height — including the FIRST one, eliding the text to nothing. -# CJK fallback fonts (Hiragino on macOS) report line metrics taller than -# snug fixed-height boxes (TrackRow's 20px title line at 14px), so every -# CJK track title rendered blank on macOS while Latin fit (#543; verified -# with a headless repro matrix on the Mac Mini). The patch always draws the -# first line — it still gets the ellipsis treatment as the last visible one. -i-slint-core = { path = "vendor/i-slint-core-1.16.1" } -# Slint compiles femtovg with the swash raster path. Swash fails to scale -# some variable fonts at a non-default variation instance (the CFF2-based -# CJK system fonts on modern macOS), and femtovg cached those glyphs as -# permanently missing — so CJK text at any non-regular weight rendered -# blank (#543; regular weight = empty coords = renders fine). The patch -# retries the glyph at the font's DEFAULT instance before giving up: worst -# case the glyph draws at regular weight instead of not at all. No effect -# on fonts/instances that already render. -femtovg = { path = "vendor/femtovg-0.23.2" } -# macOS Skia renderer: skia bug 310510989 makes new_from_data fail for TTC -# faces at index > 0, and for some system collections (AppleSDGothicNeo.ttc, -# where EVERY weight sits at index > 0) the upstream read/write-fonts rebuild -# workaround ALSO fails — every Korean glyph run at non-regular weights drew -# nothing. The patch adds a second-chance workaround: resolve the same face -# through CoreText by family name + OS/2 weight, guarded by cmap glyph-id -# spot checks so a wrong match is rejected instead of drawing wrong glyphs. -i-slint-renderer-skia = { path = "vendor/i-slint-renderer-skia-1.16.1" } diff --git a/crates/qbz-app/src/session_persist.rs b/crates/qbz-app/src/session_persist.rs index a84adbdfd..ebd8a852e 100644 --- a/crates/qbz-app/src/session_persist.rs +++ b/crates/qbz-app/src/session_persist.rs @@ -8,12 +8,7 @@ //! for no structural reason at all. ADR-006. //! //! The crash-chain level is injected by the host rather than read from a -//! frontend-local static: both binaries keep their own probe file, and this -//! module only needs the NUMBER. -//! -//! DEBT: the Slint copy is still there, untouched on purpose — moving it forces -//! a rebuild of the Slint binary, which pulls `qbz-ui` and its ~30 GB compile -//! that this box cannot verify. Collapse the two the next time Slint is built. +//! frontend-local static; this module only needs the numeric level. //! What it is: the glue for the `persist_session` / //! `resume_playback_position` playback preferences. diff --git a/crates/qbz-dac-wizard-core/Cargo.toml b/crates/qbz-dac-wizard-core/Cargo.toml index fb8d611e0..77bec4283 100644 --- a/crates/qbz-dac-wizard-core/Cargo.toml +++ b/crates/qbz-dac-wizard-core/Cargo.toml @@ -11,7 +11,7 @@ name = "qbz_dac_wizard_core" path = "src/lib.rs" # Deliberately NO frontend dependency (no slint, no qbz-ui, no cxx-qt). ADR-006: -# the core is frontend-agnostic so Slint, Qt and qbzd consume the SAME logic. +# The core is frontend-agnostic so Qt and future non-GUI consumers can share it. # Everything here returns plain data; pushing it into a UI is the frontend's job. [dependencies] qbz-audio = { path = "../qbz-audio" } diff --git a/crates/qbz-dac-wizard-core/src/lib.rs b/crates/qbz-dac-wizard-core/src/lib.rs index bf68427af..a827b6648 100644 --- a/crates/qbz-dac-wizard-core/src/lib.rs +++ b/crates/qbz-dac-wizard-core/src/lib.rs @@ -2,26 +2,12 @@ //! //! # Why this crate exists //! -//! The wizard shipped as `qbz-dac-wizard`, whose every public function takes a -//! `&AppWindow` and writes straight into Slint globals — so the Qt port could -//! not reach any of it. This crate is that logic, lifted out and returning -//! plain data: `qbz-qt` drives it through `dac_wizard_qt.rs`. ADR-006, -//! frontend-agnostic core. +//! The retired Slint wizard wrote directly into frontend globals. This crate is +//! the surviving logic, returning plain data: `qbz-qt` drives it through +//! `dac_wizard_qt.rs`. ADR-006, frontend-agnostic core. //! -//! # Its relationship to `qbz-dac-wizard` — read before "deduplicating" -//! -//! `qbz-dac-wizard` still holds its own copy of this logic and is NOT wired to -//! this crate. That is deliberate: the Slint tree is FROZEN (owner, -//! 2026-08-11 — "ya no hacemos cambios para Slint"), so rewiring it would have -//! been an unverifiable change to a tree nobody compiles or tests any more, -//! bought for a deduplication that a frozen tree cannot benefit from. -//! -//! The usual objection to two copies is drift. It does not apply while the -//! other copy never changes — and if Slint is ever unfrozen, the merge is the -//! diff of one file. Fixes land HERE; nothing needs porting back. -//! -//! `qbzd` duplicates parts of this again in `tui/wizard_core.rs`. THAT one is -//! live code and is a genuine candidate to fold onto this crate. +//! `qbzd` duplicates parts of this in `tui/wizard_core.rs`. That one is live +//! code and remains a genuine candidate to fold onto this crate. //! //! # What is guaranteed //! diff --git a/crates/qbz-dac-wizard/Cargo.toml b/crates/qbz-dac-wizard/Cargo.toml deleted file mode 100644 index 7de0e79a6..000000000 --- a/crates/qbz-dac-wizard/Cargo.toml +++ /dev/null @@ -1,18 +0,0 @@ -[package] -name = "qbz-dac-wizard" -version.workspace = true -edition.workspace = true -license.workspace = true -repository.workspace = true -description = "HiFi/DAC setup wizard controller (Slint) — extracted feature crate." - -[lib] -name = "qbz_dac_wizard" -path = "src/lib.rs" - -[dependencies] -qbz-ui = { path = "../qbz-ui" } -qbz-audio = { path = "../qbz-audio" } -qbz-models = { path = "../qbz-models" } -qbz-i18n = { path = "../qbz-i18n" } -slint = { version = "=1.16.1", default-features = false, features = ["std", "compat-1-2"] } diff --git a/crates/qbz-dac-wizard/src/lib.rs b/crates/qbz-dac-wizard/src/lib.rs deleted file mode 100644 index 628acf605..000000000 --- a/crates/qbz-dac-wizard/src/lib.rs +++ /dev/null @@ -1,794 +0,0 @@ -//! HiFi Wizard (DAC setup) controller. -//! -//! Slice 6 (check step): runs the frontend-agnostic audio-stack probes -//! (`qbz_audio::health`) on open, maps them to per-distro copy-paste -//! remediations the check step renders, and recomputes them when the user -//! overrides the distro. Read-only — nothing here writes a system file or -//! opens a stream. - -use std::sync::Mutex; - -use qbz_audio::{AudioStackHealth, Distro, InitSystem}; -use slint::{ComponentHandle, Model, ModelRc, VecModel}; - -use qbz_ui::{AppWindow, DacCandidateRow, DacConfigRow, DacWizardState, RemediationRow}; - -// Last probe result, so a distro override recomputes commands without -// re-shelling on every dropdown change. -static LAST_HEALTH: Mutex> = Mutex::new(None); - -/// Synchronous part of opening the wizard: reset, fill the distro dropdown -/// (auto-detected, always overridable), and show a "checking…" state until the -/// async probe lands. -pub fn open_immediate(window: &AppWindow) { - let st = window.global::(); - st.set_open(true); - st.set_step(0); - st.set_welcome_confirmed(false); - - let distro_opts: Vec = - Distro::ALL.iter().map(|d| d.label().into()).collect(); - st.set_distro_options(ModelRc::new(VecModel::from(distro_opts))); - st.set_distro_index(qbz_audio::detect_distro().index() as i32); - - let init_opts: Vec = - InitSystem::ALL.iter().map(|i| i.label().into()).collect(); - st.set_init_options(ModelRc::new(VecModel::from(init_opts))); - st.set_init_index(qbz_audio::detect_init().index() as i32); - - let sandbox = qbz_audio::detect_sandbox(); - st.set_sandboxed(sandbox != qbz_audio::Sandbox::None); - st.set_sandbox_name( - match sandbox { - qbz_audio::Sandbox::Flatpak => "Flatpak", - qbz_audio::Sandbox::Snap => "Snap", - qbz_audio::Sandbox::None => "", - } - .into(), - ); - - st.set_health_ok(false); - st.set_health_summary(qbz_i18n::t("Checking your audio stack…").into()); - st.set_remediations(ModelRc::new(VecModel::from(Vec::::new()))); -} - -/// Apply a completed health probe: cache it and re-render from the current -/// distro/init selections. -pub fn apply_health(window: &AppWindow, health: AudioStackHealth) { - *LAST_HEALTH.lock().unwrap() = Some(health); - recompute(window); -} - -/// User overrode the distro (package manager) — recompute. -pub fn set_distro(window: &AppWindow, index: i32) { - window.global::().set_distro_index(index); - recompute(window); -} - -/// User overrode the init system (service commands) — recompute. -pub fn set_init(window: &AppWindow, index: i32) { - window.global::().set_init_index(index); - recompute(window); -} - -/// Rebuild the remediations from the cached probe + the current distro/init -/// dropdown selections (either of which the user can override). -fn recompute(window: &AppWindow) { - let st = window.global::(); - let health = LAST_HEALTH - .lock() - .unwrap() - .unwrap_or_else(qbz_audio::audio_stack_health); - let distro = Distro::ALL - .get(st.get_distro_index().max(0) as usize) - .copied() - .unwrap_or(Distro::Other); - let init = InitSystem::ALL - .get(st.get_init_index().max(0) as usize) - .copied() - .unwrap_or(InitSystem::Unknown); - - // In a sandbox the host probes are blind, so don't render a health verdict — - // show reference setup commands for the chosen distro/init (Tauri-style, - // which never probed either). The UI shows a sandbox info banner instead. - let rows = if st.get_sandboxed() { - st.set_health_ok(false); - st.set_health_summary("".into()); - reference_commands(distro, init) - } else { - let r = remediations(health, distro, init); - st.set_health_ok(health.is_ready()); - st.set_health_summary(if health.is_ready() { - qbz_i18n::t("Your audio stack is ready for bit-perfect playback.").into() - } else { - let n = r.len(); - qbz_i18n::tf( - "{} item needs attention before bit-perfect playback will work.", - "{} items need attention before bit-perfect playback will work.", - n as i64, - &[&n.to_string()], - ) - .into() - }); - r - }; - let model: Vec = rows - .into_iter() - .map(|(caption, command)| RemediationRow { - caption: caption.into(), - command: command.into(), - }) - .collect(); - st.set_remediations(ModelRc::new(VecModel::from(model))); -} - -/// (caption, copy-paste command) per missing probe, for the given distro. -/// -/// Service/restart commands are INIT-SYSTEM aware per distro (OpenRC on Gentoo, -/// runit on Void, systemd elsewhere), mirroring the Tauri DistroSelector -/// `restartCommands`. Installs and the restart are kept as separate blocks so -/// the multi-line Gentoo guidance never gets `&&`-joined. -fn remediations(h: AudioStackHealth, d: Distro, init: InitSystem) -> Vec<(String, String)> { - // NixOS is declarative: you don't `apt/pacman install` pieces — you enable - // the PipeWire module and rebuild. So collapse all the missing pieces into - // one config block instead of per-package commands. - if d == Distro::NixOS { - if h.is_ready() { - return Vec::new(); - } - return vec![( - qbz_i18n::t("Enable PipeWire in your NixOS configuration"), - NIXOS_PIPEWIRE_BLOCK.to_string(), - )]; - } - - let mut out = Vec::new(); - let mut needs_restart = false; - if !h.has_pw_dump { - out.push(( - qbz_i18n::t("Install the PipeWire tools (pw-dump)"), - install(d, pkg_pw_tools(d)), - )); - needs_restart = true; - } - if !h.cpal_sees_pipewire { - // THE Ubuntu no-list / no-playback bug: the ALSA->PipeWire bridge PCM. - out.push(( - qbz_i18n::t("Install the ALSA bridge so playback can reach PipeWire"), - install(d, "pipewire-alsa"), - )); - needs_restart = true; - } - if !h.has_pactl { - out.push(( - qbz_i18n::t("Install the Pulse compatibility tools (optional fallback)"), - install(d, pkg_pulse(d)), - )); - needs_restart = true; - } - if !h.any_devices { - out.push(( - qbz_i18n::t("No sinks detected — reinstall the ALSA UCM profiles, then reboot"), - install_reinstall(d, "alsa-ucm-conf"), - )); - } - // WirePlumber down, or we just installed something → (re)start the stack - // with the ACTUAL init system running on this machine (not guessed from the - // distro — Gentoo+systemd and Gentoo+OpenRC must differ). - if !h.wireplumber_active || needs_restart { - out.push(( - qbz_i18n::t("(Re)start the PipeWire audio services"), - restart_cmd(init).to_string(), - )); - } - out -} - -/// Init-system-aware "(re)start the audio services" command. PipeWire is a -/// user-session service, so only systemd has a first-class `--user` restart; -/// the others either use their user-service supervisor or a re-login. -fn restart_cmd(init: InitSystem) -> &'static str { - match init { - InitSystem::Systemd => "systemctl --user restart pipewire pipewire-pulse wireplumber", - InitSystem::OpenRc => { - "# OpenRC: PipeWire runs in your user session, not as an OpenRC service.\n\ - # Log out and back in to restart it." - } - InitSystem::Runit => { - "sv restart pipewire wireplumber # if set up as runit user services; otherwise log out and back in" - } - InitSystem::S6 => "# s6: restart via your supervision tree, or log out and back in", - InitSystem::Dinit => "dinitctl restart pipewire wireplumber # or log out and back in", - InitSystem::Unknown => "# Restart PipeWire via your init system, or log out and back in", - } -} - -fn pkg_pw_tools(d: Distro) -> &'static str { - match d { - // Debian-family (incl. antiX) ship pw-* in pipewire-bin. - Distro::Debian | Distro::Antix => "pipewire-bin", - Distro::Fedora => "pipewire-utils", - // Arch (incl. Artix) / openSUSE / Gentoo / Void ship pw-* with pipewire. - _ => "pipewire", - } -} - -fn pkg_pulse(d: Distro) -> &'static str { - match d { - Distro::Debian | Distro::Antix => "pipewire-pulse pulseaudio-utils", - Distro::Fedora => "pipewire-pulseaudio", - _ => "pipewire-pulse", - } -} - -fn install(d: Distro, pkgs: &str) -> String { - match d { - // Package manager is a property of the distro family, NOT the init. - Distro::Debian | Distro::Antix => format!("sudo apt install {pkgs}"), - Distro::Fedora => format!("sudo dnf install {pkgs}"), - Distro::Arch | Distro::Artix => format!("sudo pacman -S {pkgs}"), - Distro::OpenSuse => format!("sudo zypper install {pkgs}"), - Distro::Gentoo => format!("sudo emerge {pkgs} # package name may differ on Gentoo"), - Distro::Void => format!("sudo xbps-install -S {pkgs}"), - // NixOS is special-cased in remediations(); this is an unreached fallback. - Distro::NixOS => format!("# NixOS: add to configuration.nix (see the PipeWire block) — {pkgs}"), - Distro::Other => format!("Install with your package manager: {pkgs}"), - } -} - -fn install_reinstall(d: Distro, pkg: &str) -> String { - match d { - Distro::Debian | Distro::Antix => format!("sudo apt install --reinstall {pkg}"), - Distro::Fedora => format!("sudo dnf reinstall {pkg}"), - _ => install(d, pkg), - } -} - -const NIXOS_PIPEWIRE_BLOCK: &str = "# /etc/nixos/configuration.nix:\n\ - services.pipewire = {\n\ - \u{20}\u{20}enable = true;\n\ - \u{20}\u{20}alsa.enable = true;\n\ - \u{20}\u{20}pulse.enable = true;\n\ - \u{20}\u{20}wireplumber.enable = true;\n\ - };\n\ - # then apply:\n\ - sudo nixos-rebuild switch"; - -/// Full reference setup commands for the chosen distro/init, shown when QBZ -/// can't probe the host (sandbox). Mirrors the Tauri DistroSelector, which -/// always showed per-distro install + restart commands (no probing). -fn reference_commands(d: Distro, init: InitSystem) -> Vec<(String, String)> { - if d == Distro::NixOS { - return vec![( - qbz_i18n::t("Enable PipeWire in your NixOS configuration"), - NIXOS_PIPEWIRE_BLOCK.to_string(), - )]; - } - vec![ - ( - qbz_i18n::t("Install the PipeWire audio stack"), - install(d, full_stack_pkgs(d)), - ), - ( - qbz_i18n::t("(Re)start the PipeWire audio services"), - restart_cmd(init).to_string(), - ), - ] -} - -/// The full recommended package set (incl. `pipewire-alsa`, the bit the old -/// Tauri list omitted — the cause of the Ubuntu empty-list bug). -fn full_stack_pkgs(d: Distro) -> &'static str { - match d { - Distro::Debian | Distro::Antix => { - "pipewire pipewire-pulse pipewire-alsa wireplumber alsa-utils" - } - Distro::Fedora => "pipewire pipewire-pulseaudio pipewire-alsa wireplumber alsa-utils", - Distro::Arch | Distro::Artix => { - "pipewire pipewire-pulse pipewire-alsa wireplumber alsa-utils" - } - Distro::OpenSuse => "pipewire pipewire-pulseaudio pipewire-alsa wireplumber alsa-utils", - Distro::Gentoo => "media-video/pipewire media-video/wireplumber media-sound/alsa-utils", - Distro::Void => "pipewire wireplumber alsa-utils", - Distro::NixOS => "", - Distro::Other => "pipewire pipewire-pulse wireplumber alsa-utils", - } -} - -// ── Slice 7: select-dacs (auto-detect + manual escape hatch) ─────────────── - -/// Plain, `Send` candidate produced on the worker thread. -pub struct DacCandidateData { - id: String, - description: String, - bus: String, - is_default: bool, - looks_like_dac: bool, - rates_label: String, -} - -/// Immediate UI feedback before the (blocking) enumeration runs. -pub fn begin_detect(window: &AppWindow) { - window.global::().set_detecting(true); -} - -/// Heavy work (enumerate sinks via the pw-dump-robust path + probe rates for -/// the likely DACs). Runs on a blocking thread; returns plain data. -pub fn detect_blocking() -> Vec { - let devices = qbz_audio::backend::BackendManager::create_backend( - qbz_audio::backend::AudioBackendType::PipeWire, - ) - .and_then(|b| b.enumerate_devices()) - .unwrap_or_default(); - - let mut out = Vec::new(); - for d in devices { - let bus = d.device_bus.unwrap_or_default(); - let looks_like_dac = d.is_hardware && (bus == "usb" || bus == "pci"); - // Only probe rates for likely DACs (skip virtual/monitor sinks). - let rates_label = if looks_like_dac { - format_rates(&qbz_audio::query_dac_capabilities(&d.id).sample_rates) - } else { - String::new() - }; - let description = if d.name.is_empty() { d.id.clone() } else { d.name }; - out.push(DacCandidateData { - id: d.id, - description, - bus, - is_default: d.is_default, - looks_like_dac, - rates_label, - }); - } - out -} - -/// Apply enumerated candidates to the state. Pre-selects the likely DACs; if -/// nothing enumerated, flips `has-enumeration` off so the manual escape hatch -/// shows. -pub fn apply_candidates(window: &AppWindow, data: Vec) { - let st = window.global::(); - let rows: Vec = data - .iter() - .map(|d| DacCandidateRow { - id: d.id.clone().into(), - description: d.description.clone().into(), - bus: d.bus.clone().into(), - is_default: d.is_default, - looks_like_dac: d.looks_like_dac, - checked: d.looks_like_dac, - rates_label: d.rates_label.clone().into(), - }) - .collect(); - let any = rows.iter().any(|r| r.checked); - st.set_has_enumeration(!data.is_empty()); - st.set_any_dac_selected(any); - st.set_candidates(ModelRc::new(VecModel::from(rows))); - st.set_detecting(false); -} - -/// Flip one candidate's checkbox + recompute the Next gate. -pub fn toggle_dac(window: &AppWindow, index: i32) { - let st = window.global::(); - let model = st.get_candidates(); - if let Some(vm) = model - .as_any() - .downcast_ref::>() - { - if let Some(mut row) = vm.row_data(index.max(0) as usize) { - row.checked = !row.checked; - vm.set_row_data(index.max(0) as usize, row); - } - } - let any = (0..model.row_count()).any(|i| model.row_data(i).map(|r| r.checked).unwrap_or(false)); - st.set_any_dac_selected(any); -} - -/// Validate a manually-pasted node.name (escape hatch). 1:1 with the Tauri -/// `validateNodeName` / `detectDacType`. -pub fn validate_manual(window: &AppWindow, text: &str) { - let st = window.global::(); - st.set_manual_node_name(text.into()); - st.set_manual_valid(validate_node_name(text)); - st.set_manual_dac_type(detect_dac_type(text).into()); -} - -fn validate_node_name(name: &str) -> bool { - let t = name.trim(); - !t.is_empty() && (t.contains("alsa_output") || t.contains("alsa_input")) -} - -fn detect_dac_type(name: &str) -> &'static str { - let l = name.to_lowercase(); - if l.contains("usb-") || l.contains(".usb") { - "usb" - } else if l.contains("pci-") || l.contains(".pci") { - "pci" - } else if l.contains("bluez") || l.contains("bluetooth") { - "bluetooth" - } else if l.contains("virtual") || l.contains("null") || l.contains("dummy") { - "virtual" - } else { - "unknown" - } -} - -/// "44.1 / 96 / 192 kHz" from a rate list (kHz, .1 only when non-integer). -fn format_rates(rates: &[u32]) -> String { - if rates.is_empty() { - return String::new(); - } - let parts: Vec = rates - .iter() - .map(|&r| { - if r % 1000 == 0 { - format!("{}", r / 1000) - } else { - format!("{:.1}", r as f64 / 1000.0) - } - }) - .collect(); - format!("{} kHz", parts.join(" / ")) -} - -#[cfg(test)] -mod slice7_tests { - use super::*; - - #[test] - fn validates_node_names_like_tauri() { - assert!(validate_node_name("alsa_output.usb-Cambridge-00.analog-stereo")); - assert!(validate_node_name("alsa_input.pci-0000_00.analog-stereo")); - assert!(!validate_node_name("")); - assert!(!validate_node_name(" ")); - assert!(!validate_node_name("bluez_output.AA_BB")); - } - - #[test] - fn detects_dac_type() { - assert_eq!(detect_dac_type("alsa_output.usb-Cambridge-00.analog-stereo"), "usb"); - assert_eq!(detect_dac_type("alsa_output.pci-0000_00_1f.3.analog-stereo"), "pci"); - assert_eq!(detect_dac_type("bluez_output.AA"), "bluetooth"); - assert_eq!(detect_dac_type("alsa_output.virtual-dummy"), "virtual"); - assert_eq!(detect_dac_type("something.else"), "unknown"); - } - - #[test] - fn formats_rates_khz() { - assert_eq!(format_rates(&[44100, 96000, 192000]), "44.1 / 96 / 192 kHz"); - assert_eq!(format_rates(&[]), ""); - } -} - -// ── Slice 9: self-service playback test (N6 read-back) ───────────────────── - -/// One curated test track (owner-provided). Resolved by id-hint first, then by -/// "artist title" search if the id 404s (a pulled license) — never raw-id-only. -pub struct TestSeed { - pub depth: u32, - pub rate: f64, - pub id_hint: u64, - pub artist: &'static str, - pub title: &'static str, -} - -pub const TEST_SEEDS: [TestSeed; 4] = [ - TestSeed { depth: 16, rate: 44100.0, id_hint: 19301386, artist: "George Harrison", title: "My Sweet Lord" }, - TestSeed { depth: 24, rate: 44100.0, id_hint: 266725027, artist: "Billie Eilish", title: "LUNCH" }, - TestSeed { depth: 24, rate: 96000.0, id_hint: 126886854, artist: "Iron Maiden", title: "Stratego" }, - TestSeed { depth: 24, rate: 192000.0, id_hint: 52265, artist: "Toto", title: "Africa" }, -]; - -/// True if a resolved track matches this seed's family (rate + bit depth — the -/// two 44.1 seeds only differ by depth). -pub fn track_matches_seed(track: &qbz_models::Track, seed: &TestSeed) -> bool { - let rate_ok = track - .maximum_sampling_rate - .map(|r| (r * 1000.0 - seed.rate).abs() < 1.0 || (r - seed.rate).abs() < 1.0) - .unwrap_or(false); - let depth_ok = track.maximum_bit_depth.map(|d| d == seed.depth).unwrap_or(false); - rate_ok && depth_ok -} - -/// Resolved test tracks, kept so the user can jump straight to any of them -/// (re-set the queue at the chosen index via the working play path). -static TEST_TRACKS: Mutex> = Mutex::new(Vec::new()); - -pub fn stash_test_tracks(tracks: Vec) { - *TEST_TRACKS.lock().unwrap() = tracks; -} - -pub fn test_tracks() -> Vec { - TEST_TRACKS.lock().unwrap().clone() -} - -/// Start the test: show the "playing" state. The read-back probes whichever -/// DAC is actively playing (scan), so no node needs to be stashed. -pub fn begin_test(window: &AppWindow) { - let st = window.global::(); - st.set_test_playing(true); - st.set_test_rate_matched(false); - st.set_test_requested_label(qbz_i18n::t("Starting…").into()); - st.set_test_negotiated_label("".into()); -} - -pub fn end_test(window: &AppWindow) { - window.global::().set_test_playing(false); -} - -/// Guardrail: "Use my current queue" with an empty queue — show a hint instead -/// of starting a read-back that would just sit on "Nothing playing". -pub fn queue_empty_notice(window: &AppWindow) { - let st = window.global::(); - st.set_test_playing(false); - st.set_test_rate_matched(false); - st.set_test_negotiated_label("".into()); - st.set_test_requested_label( - qbz_i18n::t("Your queue is empty — add some tracks first, or press Play test.").into(), - ); -} - -/// Apply one poll: the rate QBZ requested vs the DAC's real negotiated rate (N6). -pub fn apply_poll( - window: &AppWindow, - requested_rate: u32, - requested_bits: u32, - negotiated: Option, -) { - let st = window.global::(); - st.set_test_requested_label(if requested_rate > 0 { - qbz_i18n::t_args( - "QBZ requesting {} · {}-bit", - &[&khz(requested_rate), &requested_bits.to_string()], - ) - .into() - } else { - qbz_i18n::t("Nothing playing").into() - }); - match negotiated { - Some(n) => { - // The DAC's REAL hardware params (N6): rate + ALSA container format - // (e.g. S32_LE = 24-bit in a 32-bit frame) + channels. This is the - // bit-perfect proof — exactly what the hardware is clocked at. - st.set_test_negotiated_label( - qbz_i18n::t_args( - "DAC: {} · {} · {} ch", - &[&khz(n.sample_rate), &n.format, &n.channels.to_string()], - ) - .into(), - ); - // Truth signal: the DAC's real clock matches what QBZ asked for. - st.set_test_rate_matched(requested_rate > 0 && n.sample_rate == requested_rate); - } - None => { - st.set_test_negotiated_label(qbz_i18n::t("Waiting for the DAC to start playing…").into()); - st.set_test_rate_matched(false); - } - } -} - -fn khz(hz: u32) -> String { - if hz % 1000 == 0 { - format!("{} kHz", hz / 1000) - } else { - format!("{:.1} kHz", hz as f64 / 1000.0) - } -} - -// ── Slice 10: review-and-apply (per-DAC config generation) ───────────────── - -/// Plain, `Send` per-DAC generated config (built on a worker thread). -pub struct DacConfigData { - name: String, - node_name: String, - pipewire_conf: String, - pulse_conf: String, - wireplumber_conf: String, -} - -/// (node_name, display_name) for every checked candidate, or a valid manual one. -pub fn checked_dacs(window: &AppWindow) -> Vec<(String, String)> { - let st = window.global::(); - let model = st.get_candidates(); - let mut out = Vec::new(); - for i in 0..model.row_count() { - if let Some(r) = model.row_data(i) { - if r.checked { - out.push((r.id.to_string(), r.description.to_string())); - } - } - } - if out.is_empty() { - let manual = st.get_manual_node_name().to_string(); - if !manual.trim().is_empty() && st.get_manual_valid() { - out.push((manual.clone(), manual)); - } - } - out -} - -/// Re-probe rates + build the three config snippets per DAC (blocking). -pub fn gen_configs_blocking(dacs: Vec<(String, String)>) -> Vec { - dacs.into_iter() - .map(|(node_name, name)| { - let rates = qbz_audio::query_dac_capabilities(&node_name).sample_rates; - let short = short_name(&name, &node_name); - DacConfigData { - pipewire_conf: pipewire_conf(&short, &rates), - pulse_conf: pulse_conf(&short), - wireplumber_conf: wireplumber_conf(&short, &node_name, &rates, &name), - name, - node_name, - } - }) - .collect() -} - -/// Push generated configs + backup/restart/paths to the state. -pub fn apply_configs(window: &AppWindow, data: Vec) { - let st = window.global::(); - let single = data.len() == 1; - let rows: Vec = data - .iter() - .map(|d| DacConfigRow { - name: d.name.clone().into(), - node_name: d.node_name.clone().into(), - pipewire_conf: d.pipewire_conf.clone().into(), - pulse_conf: d.pulse_conf.clone().into(), - wireplumber_conf: d.wireplumber_conf.clone().into(), - expanded: single, // one DAC → expanded; multiple → collapsed accordions - }) - .collect(); - let mut paths: Vec = Vec::new(); - for d in &data { - let short = short_name(&d.name, &d.node_name); - paths.push(format!("~/.config/pipewire/pipewire.conf.d/99-qbz-dac-{short}.conf").into()); - paths.push(format!("~/.config/pipewire/client.conf.d/99-qbz-bitperfect-{short}.conf").into()); - paths - .push(format!("~/.config/wireplumber/wireplumber.conf.d/99-qbz-dac-{short}.conf").into()); - } - st.set_dac_configs(ModelRc::new(VecModel::from(rows))); - st.set_created_paths(ModelRc::new(VecModel::from(paths))); - st.set_backup_cmd(BACKUP_CMD.into()); - let init = InitSystem::ALL - .get(st.get_init_index().max(0) as usize) - .copied() - .unwrap_or(InitSystem::Unknown); - st.set_restart_cmd(restart_cmd(init).into()); -} - -/// Collapse/expand one DAC's generated-config accordion. -pub fn toggle_config(window: &AppWindow, index: i32) { - let model = window.global::().get_dac_configs(); - if let Some(vm) = model.as_any().downcast_ref::>() { - if let Some(mut row) = vm.row_data(index.max(0) as usize) { - row.expanded = !row.expanded; - vm.set_row_data(index.max(0) as usize, row); - } - } -} - -const BACKUP_CMD: &str = "BACKUP=~/.config/qbz/backups/pipewire-$(date +%Y%m%d-%H%M%S)\nmkdir -p \"$BACKUP\"\ncp -a ~/.config/pipewire \"$BACKUP/\" 2>/dev/null || true\ncp -a ~/.config/wireplumber \"$BACKUP/\" 2>/dev/null || true\necho \"Backup created at: $BACKUP\""; - -/// A short, filename-safe DAC name: slug of the description, else the node.name. -fn short_name(name: &str, node_name: &str) -> String { - let slug = slugify(name); - if !slug.is_empty() { - return slug; - } - let nslug = slugify(node_name); - if nslug.is_empty() { - "dac".to_string() - } else { - nslug - } -} - -fn slugify(s: &str) -> String { - let mut out = String::new(); - let mut prev_dash = false; - for ch in s.chars() { - if ch.is_ascii_alphanumeric() { - out.push(ch.to_ascii_lowercase()); - prev_dash = false; - } else if !prev_dash && !out.is_empty() { - out.push('-'); - prev_dash = true; - } - } - out.trim_matches('-').to_string() -} - -fn rates_list(rates: &[u32]) -> String { - if rates.is_empty() { - "44100 48000 88200 96000 176400 192000".to_string() - } else { - rates - .iter() - .map(|r| r.to_string()) - .collect::>() - .join(" ") - } -} - -fn pipewire_conf(short: &str, rates: &[u32]) -> String { - let rates = rates_list(rates); - [ - "mkdir -p ~/.config/pipewire/pipewire.conf.d".to_string(), - format!("cat > ~/.config/pipewire/pipewire.conf.d/99-qbz-dac-{short}.conf << 'EOF'"), - "# QBZ DAC Setup - Sample Rate Switching".to_string(), - "context.properties = {".to_string(), - format!(" default.clock.allowed-rates = [ {rates} ]"), - "}".to_string(), - "EOF".to_string(), - ] - .join("\n") -} - -fn pulse_conf(short: &str) -> String { - [ - "mkdir -p ~/.config/pipewire/client.conf.d".to_string(), - format!("cat > ~/.config/pipewire/client.conf.d/99-qbz-bitperfect-{short}.conf << 'EOF'"), - "# QBZ DAC Setup - Per-App Bit-Perfect".to_string(), - "stream.rules = [".to_string(), - " {".to_string(), - " matches = [".to_string(), - " { application.process.binary = \"qbz\" }".to_string(), - " { application.name = \"PipeWire ALSA [qbz]\" }".to_string(), - " ]".to_string(), - " actions = { update-props = { resample.disable = true, channelmix.disable = true } }" - .to_string(), - " }".to_string(), - "]".to_string(), - "EOF".to_string(), - ] - .join("\n") -} - -fn wireplumber_conf(short: &str, node_name: &str, rates: &[u32], description: &str) -> String { - let rates = rates_list(rates); - [ - "mkdir -p ~/.config/wireplumber/wireplumber.conf.d".to_string(), - format!("cat > ~/.config/wireplumber/wireplumber.conf.d/99-qbz-dac-{short}.conf << 'EOF'"), - format!("# QBZ DAC Setup - {description}"), - "monitor.alsa.rules = [".to_string(), - " {".to_string(), - " matches = [".to_string(), - format!(" {{ node.name = \"{node_name}\", media.class = \"Audio/Sink\" }}"), - " ]".to_string(), - " actions = {".to_string(), - " update-props = {".to_string(), - format!(" audio.allowed-rates = [ {rates} ]"), - " resample.disable = true".to_string(), - " channelmix.disable = true".to_string(), - " }".to_string(), - " }".to_string(), - " }".to_string(), - "]".to_string(), - "EOF".to_string(), - ] - .join("\n") -} - -#[cfg(test)] -mod slice10_tests { - use super::*; - - #[test] - fn slugifies_descriptions() { - assert_eq!(slugify("DacMagic Plus Analog Stereo"), "dacmagic-plus-analog-stereo"); - assert_eq!(slugify("Built-in Audio Analog Stereo"), "built-in-audio-analog-stereo"); - assert_eq!(slugify(" weird__name!! "), "weird-name"); - assert_eq!(slugify(""), ""); - } - - #[test] - fn wireplumber_conf_pins_node_and_rates() { - let c = wireplumber_conf("dacmagic", "alsa_output.usb-x.analog-stereo", &[44100, 192000], "DacMagic"); - assert!(c.contains("node.name = \"alsa_output.usb-x.analog-stereo\"")); - assert!(c.contains("audio.allowed-rates = [ 44100 192000 ]")); - assert!(c.contains("99-qbz-dac-dacmagic.conf")); - assert!(c.contains("resample.disable = true")); - } -} diff --git a/crates/qbz-models/Cargo.toml b/crates/qbz-models/Cargo.toml index 9d75c3e65..3d77fd10e 100644 --- a/crates/qbz-models/Cargo.toml +++ b/crates/qbz-models/Cargo.toml @@ -26,5 +26,5 @@ chrono = { workspace = true } url = "2" # Percent-encoding the Plex transcode `url=`/token params (plex_thumb_url), # matching the Tauri frontend's buildPlexArtworkUrl. Same crate used across -# qbz-slint / qbz-media-controls / qbz-integrations. +# qbz-qt / qbz-media-controls / qbz-integrations. urlencoding = "2" diff --git a/crates/qbz-offline-cache/src/purchases_service.rs b/crates/qbz-offline-cache/src/purchases_service.rs index 1f883356b..2594f8c44 100644 --- a/crates/qbz-offline-cache/src/purchases_service.rs +++ b/crates/qbz-offline-cache/src/purchases_service.rs @@ -1012,84 +1012,6 @@ pub async fn download_purchase_track( Ok(file_path) } -/// Download-ONLY variant of the single-track primitive: identical CDN fetch + -/// `.part`→rename pipeline as `download_purchase_track`, but it does **NOT** -/// write the `downloaded_purchases` registry. Returns the final on-disk path. -/// -/// **This function's original rationale was WRONG, and it is kept only because -/// `qbz-slint` calls it.** New code must not use it. Verified against the -/// reference on 2026-08-16: -/// -/// The comment here used to claim that Svelte's `executeAlbumDownload` marks a -/// track `'complete'` first and then writes the registry as a best-effort step -/// that swallows failure, and therefore that an album-path registry failure -/// leaves the track `'complete'` but unregistered. That misreads the reference. -/// `executeAlbumDownload` awaits `downloadTrack`, which invokes -/// `v2_purchases_download_track` — and THAT command writes the registry itself -/// and propagates the error with `?` (`legacy_compat.rs:3019-3021`). So a -/// registry failure throws out of `downloadTrack`, is caught by the loop's -/// `catch`, and the track is marked **`'failed'`**, exactly as on the -/// single-track path. The `markTrackDownloaded(...).catch(() => {})` that follows -/// (`purchaseDownloadStore.ts:147`) is a SECOND, backfill-only write whose sole -/// effect is filling the `album_id` column; its swallowed failure costs that -/// column and nothing else. -/// -/// Consequence: this "write the file, register separately" split has no basis in -/// the reference, and the Slint controller's use of it is the one silent -/// divergence in the purchases port — it leaves files on disk with no registry -/// row while reporting success. The Qt controller uses -/// `download_purchase_track` with `Some(album_id)` instead, which registers -/// inside the same call and propagates. -/// -/// Addendum B.2 (extension from RESPONSE, registry/qualityDir from REQUESTED), -/// B.3 (silent overwrite), and B.5 (restrictions ignored) hold identically to -/// `download_purchase_track`. -pub async fn download_purchase_track_file_only( - client: &QobuzClient, - track_id: u64, - format_id: u32, - destination: &str, - quality_dir: &str, -) -> Result { - // UNSIGNED on the purchase path (contract §11-6): the vendor's own desktop - // client sends `/track/get` without a signature, and so did the reference. - // The entitlement proof is the signature on `getFileUrl` below, which is - // untouched. - let track = client - .get_track_for_purchase(track_id) - .await - .map_err(|e| format!("Failed to fetch track {}: {}", track_id, e))?; - let stream = client - .get_track_file_url_by_format(track_id, format_id) - .await - .map_err(|e| format!("Failed to get download URL for track {}: {}", track_id, e))?; - - let data = QobuzClient::download_audio(&stream.url).await?; - - let artist_name = track - .performer - .as_ref() - .map(|artist| artist.name.clone()) - .unwrap_or_else(|| "Unknown Artist".to_string()); - let album_title = track - .album - .as_ref() - .map(|album| album.title.clone()) - .unwrap_or_else(|| "Singles".to_string()); - - write_track_file( - &data, - &artist_name, - &album_title, - quality_dir, - track.track_number, - &track.title, - stream.format_id, - &stream.mime_type, - destination, - ) -} - #[cfg(test)] mod tests { use super::*; diff --git a/crates/qbz-qt/Cargo.toml b/crates/qbz-qt/Cargo.toml index 7512208e3..f7b85251b 100644 --- a/crates/qbz-qt/Cargo.toml +++ b/crates/qbz-qt/Cargo.toml @@ -1,21 +1,13 @@ [package] name = "qbz-qt" -description = "Qt/QML frontend POC for QBZ (cxx-qt bridge over the UI-agnostic backend)" +description = "Qt/QML frontend for QBZ (cxx-qt bridge over the UI-agnostic backend)" version.workspace = true edition.workspace = true license.workspace = true [[bin]] -# The SHIPPED name is `qbz` (owner, 2026-08-04). The package stays -# `qbz-qt`, so `cargo build -p qbz-qt` is unchanged; only the artifact -# moves to target//qbz. -# -# ⚠ `crates/qbz` (the Slint binary) declares the SAME bin name and -# shares this workspace's target dir, so both write -# target//qbz and the last build wins. That is survivable only -# because the Slint binary is never built in this worktree (the qbz-ui -# 20-30 GB wall). If it ever is, whoever built last owns the file — and -# a smoke against "the wrong qbz" is silent. +# The shipped executable remains `qbz`; the package name stays `qbz-qt` so +# package-scoped Cargo commands remain unambiguous. name = "qbz" path = "src/main.rs" @@ -41,12 +33,11 @@ urlencoding = "2" open = "5" dirs = "5" -# Share links (src/share_qt.rs, the port of crates/qbz/src/share.rs:32-70). +# Share links (src/share_qt.rs). # Rust owns the clipboard on this side because the toast does: cxx-qt-lib 0.7 # ships no QClipboard binding, and QML cannot publish QbzShell.toastJson, so # splitting the copy and its confirmation across the boundary would buy -# nothing. Same pin as the reference (crates/qbz/Cargo.toml:68), comment -# included: +# nothing. # # wayland-data-control: Wayland-native clipboard via the data-control # protocols (GNOME/KDE/sway/niri/Hyprland), falling back to X11 when Wayland @@ -57,9 +48,7 @@ arboard = { version = "3", features = ["wayland-data-control"] } qbz-core = { path = "../qbz-core" } qbz-app = { path = "../qbz-app" } qbz-audio = { path = "../qbz-audio" } -# The HiFi Wizard's frontend-agnostic core. NOT `qbz-dac-wizard` — that one is -# the Slint adapter and pulls in qbz-ui + slint, the ~1.6 M-line generated -# module this whole track exists to stay out of. +# The HiFi Wizard's frontend-agnostic core; Qt owns the presentation adapter. qbz-dac-wizard-core = { path = "../qbz-dac-wizard-core" } # Vulkan enumeration for the Preferred-GPU row — real adapter NAMES, MODELS and # types, in the exact order `QT_VK_PHYSICAL_DEVICE_INDEX` counts them (both are @@ -67,10 +56,12 @@ qbz-dac-wizard-core = { path = "../qbz-dac-wizard-core" } # does with `wgpu::Instance::enumerate_adapters`. # # `ash` is a thin FFI binding that dlopens libvulkan at RUNTIME: no Vulkan SDK -# at build time, and a box without libvulkan simply enumerates nothing. It was -# already in the workspace lock (wgpu pulls it), so it costs no new compile. +# at build time, and a box without libvulkan simply enumerates nothing. ash = "0.38" qbz-qobuz = { path = "../qbz-qobuz" } +# Cross-provider "Open Music Link" resolver. The crate is frontend-agnostic; +# src/link_resolver_qt.rs supplies the live Qobuz search + Qt navigation seams. +qbz-music-link = { path = "../qbz-music-link" } qbz-models = { path = "../qbz-models" } qbz-cache = { path = "../qbz-cache" } qbz-offline-cache = { path = "../qbz-offline-cache" } @@ -79,9 +70,8 @@ qbz-library = { path = "../qbz-library" } # its background bootstrap here; no Qt type crosses into the catalog crate. qbz-local-catalog = { path = "../qbz-local-catalog" } # MyQBZ: Mixtapes & Collections backend (schema + migrations, repo, shuffle, -# enqueue). Headless and frontend-agnostic (ADR-006) — the same crate the -# Slint app uses (crates/qbz/Cargo.toml:96), so the two frontends share -# library.db's mixtape tables rather than each growing their own. +# enqueue). Headless and frontend-agnostic (ADR-006), with the persistent +# library.db schema owned outside the Qt presentation layer. qbz-mixtape = { path = "../qbz-mixtape" } qbz-source = { path = "../qbz-source" } # The media-server protocol crates. `qbz-qt` needs them directly for the SYNC @@ -96,10 +86,8 @@ qbz-cast = { path = "../qbz-cast" } qbz-plex = { path = "../qbz-plex" } qbz-lyrics = { path = "../qbz-lyrics" } # Playlist Importer: the provider scrapers (Spotify / Apple Music / Tidal / -# Deezer), the Qobuz matcher and the playlist creation. Headless and -# frontend-agnostic (ADR-006) — the same crate the Slint app uses -# (crates/qbz/Cargo.toml), so the two frontends share one importer instead of -# each growing its own. src/playlist_import_qt.rs drives it. +# Deezer), the Qobuz matcher and playlist creation. The implementation stays +# frontend-agnostic (ADR-006); src/playlist_import_qt.rs drives it. qbz-playlist-import = { path = "../qbz-playlist-import" } qbz-text-utils = { path = "../qbz-text-utils" } qbz-credentials = { path = "../qbz-credentials" } @@ -113,11 +101,8 @@ qbz-external-reco = { path = "../qbz-external-reco" } # now-playing widget and the hardware media keys see QBZ), SMTC/MediaRemote # elsewhere. Driven by src/media_controls_qt.rs. # -# Plain, NOT target-gated, and with no features — the same line both other -# consumers use (crates/qbz/Cargo.toml:80, crates/qbzd/Cargo.toml:22). The -# crate carries its own cfg arms internally (qbz-media-controls/src/lib.rs:36-53) -# and is already a workspace member (crates/Cargo.toml:32), so this adds no -# lock entry. +# Plain, NOT target-gated, and with no features. The crate carries its own cfg +# arms internally and is already a workspace member. # # Its Linux backend rides mpris-server -> zbus 4 with its own current-thread # tokio runtime, which is a DIFFERENT major from the zbus 5 that ksni / ashpd / @@ -125,21 +110,19 @@ qbz-external-reco = { path = "../qbz-external-reco" } # process; the rule in the ksni comment below applies here too — never enable a # `tokio` feature on any D-Bus dependency. qbz-media-controls = { path = "../qbz-media-controls" } -# Qobuz Connect (2026-08-01 Qt-port contract): the shared session/renderer -# orchestration and the WS transport, consumed VERBATIM — backend untouchable, -# same edges as the Slint crate (crates/qbz/Cargo.toml:87-88). Driven by -# src/qconnect_transport_qt.rs + src/qconnect_engine_qt.rs (+ the B3/B4 facade -# and sink). +# Qobuz Connect: shared session/renderer orchestration and WS transport, +# consumed without a frontend fork. Driven by src/qconnect_transport_qt.rs, +# src/qconnect_engine_qt.rs and the facade/event sink. qconnect-app = { path = "../qconnect-app" } qconnect-transport-ws = { path = "../qconnect-transport-ws" } # Type-level edge only, sanctioned by contract §1.1: the QConnect renderer # engine trait names `qbz_player::PlaybackState`, and the engine's feeder # reaches the protected player seams THROUGH `runtime.core().player()` — the -# same edge the Slint crate has (crates/qbz/Cargo.toml:85). No -# qbz-player/qbz-audio internals are touched (TRACK-RULES §7). +# shared engine trait. No qbz-player/qbz-audio internals are touched +# (TRACK-RULES §7). qbz-player = { path = "../qbz-player" } -# QConnect: uuid v4 for controller action ids (the B3 facade / B4 sink — same -# as crates/qbz/Cargo.toml:90); futures-util for the engine's HTTP feeder +# QConnect: uuid v4 for controller action ids (the B3 facade / B4 sink); +# futures-util for the engine's HTTP feeder # (StreamExt over the response byte stream). uuid = { version = "1", features = ["v4"] } futures-util = { workspace = true } @@ -152,32 +135,25 @@ image = { version = "0.25", default-features = false, features = ["jpeg", "png"] # cover upload (src/myqbz_cover_qt.rs) and the My-QBZ branding icon picker # (src/myqbz_prefs_qt.rs). # -# The feature set is NOT negotiable and is copied verbatim from the reference -# (crates/qbz/Cargo.toml:72): "async-std" is rfd's name for the -# async-io/ashpd backend. NEVER enable rfd's "tokio" feature — zbus 5's -# tokio feature unifies graph-wide and breaks the accesskit/atspi/ksni -# threads. `default-features = false` keeps the GTK3 backend out; the -# xdg-portal path is the Wayland-correct one and needs no extra system libs. +# "async-std" is rfd's name for the async-io/ashpd backend. NEVER enable +# rfd's "tokio" feature: it would switch the shared zbus 5 executor choice. +# `default-features = false` keeps the GTK3 backend out; the xdg-portal path +# is the Wayland-correct one and needs no extra system libs. rfd = { version = "0.15", default-features = false, features = ["xdg-portal", "async-std"] } -# Linux system tray via StatusNotifierItem (src/tray_linux.rs). Linux only — -# owner ruling K2: `crates/qbz/src/tray/macos.rs` exists because Slint's winit -# backend already bundles `muda`; under Qt that premise is gone, so macOS would -# be a NEW implementation, not a port. Windows has no tray in either tree. -# -# The comment below is copied verbatim from the reference -# (crates/qbz/Cargo.toml:139-143) because the feature set is not negotiable: +# Linux system tray via StatusNotifierItem (src/tray_linux.rs). macOS uses the +# native implementation in src/tray_macos.rs; Windows currently has no tray. # # default-features = false: ksni's default is "tokio", which flips the shared -# zbus 5 executor to tokio graph-wide (breaks accesskit/atspi plain-thread -# connections — see the rfd comment above). We only use the blocking API on +# zbus 5 executor to tokio graph-wide. We only use the blocking API on # worker threads; async-io self-drives the connection from any context. -# -# ksni 0.3.4 is already in the workspace lock (pulled by crates/qbz), so this -# adds no new lock entry. Feature unification is per-crate-graph, not -# per-target: ANY dependency that turns on zbus/tokio poisons the whole binary. +# Feature unification is per-crate-graph, not per-target: any dependency that +# turns on zbus/tokio changes the whole binary. [target.'cfg(target_os = "linux")'.dependencies] ksni = { version = "0.3", default-features = false, features = ["blocking", "async-io"] } +# Session-bus single-instance guard. Keep the same async-io executor as ksni; +# enabling zbus/tokio would poison the graph-wide executor choice. +zbus = { version = "5", default-features = false, features = ["async-io", "blocking-api"] } [build-dependencies] cxx-qt-build = "0.7" @@ -193,11 +169,9 @@ cc = "1" # closed to menu bar" setting (Spotify behaviour — close puts the app in the # menu bar and drops the Dock icon; minimize still goes to the Dock). # -# objc2 0.5 / objc2-app-kit 0.2 are pinned to the SAME generation the Slint -# crate uses (crates/qbz/Cargo.toml:166-172). That matters even though this -# crate has no winit: mixing objc2 generations in one binary registers -# duplicate objc classes, which is the failure the reference documents at -# length. Only the two items `set_mac_dock_hidden` names are enabled. +# objc2 0.5 / objc2-app-kit 0.2 stay on one internally consistent generation; +# mixing objc2 generations in one binary can register duplicate Objective-C +# classes. Only the items used by the native tray/Dock integration are enabled. # # ⚠ NOT COMPILED OR TESTED HERE. This tree builds on Linux; the macOS arm is # behind cfg, so `cargo build` cannot see it. First real check is a macOS @@ -205,15 +179,12 @@ cc = "1" [target.'cfg(target_os = "macos")'.dependencies] # DIRECT objc2, added 2026-08-05 for the menu-bar tray: `declare_class!`, # `msg_send_id!`, `sel!`, `ClassType`, `DeclaredClass`, `mutability` and -# `rc::Retained` all live at the objc2 root. Pinned to 0.5, the SAME -# generation objc2-app-kit 0.2 targets — mixing generations in one binary -# registers duplicate objc classes, which is the failure the reference -# documents at length (qbz/Cargo.toml:150-156). +# `rc::Retained` all live at the objc2 root. Pinned to the generation targeted +# by objc2-app-kit 0.2. objc2 = "0.5" # `MainThreadMarker` — in THIS generation it is exported by objc2-foundation, # not by the objc2 root (objc2-foundation-0.2.2/src/lib.rs:152, ungated). The -# reference imports it from the same place. There is no direct `objc2` -# dependency because nothing here names a type from it. +# native integration imports it from here. objc2-foundation = { version = "0.2", default-features = false, features = [ "std", # NSThread gates `MainThreadMarker::new()` itself diff --git a/crates/qbz-slint-common/Cargo.toml b/crates/qbz-slint-common/Cargo.toml deleted file mode 100644 index 7d7d0ac07..000000000 --- a/crates/qbz-slint-common/Cargo.toml +++ /dev/null @@ -1,11 +0,0 @@ -[package] -name = "qbz-slint-common" -version.workspace = true -edition.workspace = true -license.workspace = true -repository.workspace = true -description = "Shared Slint-coupled frontend helpers for the qbz app (toast; artwork primitives later)." - -[dependencies] -qbz-ui = { path = "../qbz-ui" } -slint = { version = "=1.16.1", default-features = false, features = ["std", "compat-1-2"] } diff --git a/crates/qbz-slint-common/src/lib.rs b/crates/qbz-slint-common/src/lib.rs deleted file mode 100644 index a0d8a9df7..000000000 --- a/crates/qbz-slint-common/src/lib.rs +++ /dev/null @@ -1,3 +0,0 @@ -//! Shared Slint-coupled helpers extracted from the qbz binary. Depends on -//! qbz-ui for the generated types (AppWindow, the globals, structs). -pub mod toast; diff --git a/crates/qbz-slint-common/src/toast.rs b/crates/qbz-slint-common/src/toast.rs deleted file mode 100644 index 57fa61285..000000000 --- a/crates/qbz-slint-common/src/toast.rs +++ /dev/null @@ -1,115 +0,0 @@ -//! In-app toast controller — the Rust side of the Slint port of Tauri's -//! `toastStore`. One toast at a time (a new one replaces the current), -//! auto-hidden after a per-kind delay. `buffering` is persistent. -//! -//! All functions touch Slint globals and the shared hide `Timer`, so they -//! must run on the event-loop thread. From background threads / async -//! tasks use [`show_weak`] / [`error_weak`], which hop onto the event loop -//! for you (the established `upgrade_in_event_loop` pattern). -//! -//! This is the shared toast API surface; not every helper has a call site -//! yet (error surfacing is being wired in incrementally), so the unused -//! ones are intentionally allowed rather than removed. -#![allow(dead_code)] - -use std::time::Duration; - -use slint::{ComponentHandle, Timer, TimerMode, Weak}; - -use qbz_ui::{AppWindow, ToastKind, ToastState}; - -thread_local! { - // Single reusable auto-hide timer. Reused (stop + start) so a fresh - // toast cancels the previous toast's pending hide instead of letting - // it fire and dismiss the newer one early — mirrors the - // `clearTimeout` in Tauri's toastStore. - static HIDE_TIMER: Timer = Timer::default(); -} - -/// Auto-hide delay per kind. `None` = persistent (buffering). Matches -/// Tauri's `defaultDurations`. -fn auto_hide(kind: ToastKind) -> Option { - let ms = match kind { - ToastKind::Success => 3000, - ToastKind::Info => 3000, - ToastKind::Warning => 4000, - ToastKind::Error => 5000, - ToastKind::Buffering => return None, - }; - Some(Duration::from_millis(ms)) -} - -/// Show a toast. Must be called on the event-loop thread. -pub fn show(window: &AppWindow, message: impl Into, kind: ToastKind) { - let message: String = message.into(); - let state = window.global::(); - - // Non-error toasts honor the global toggle; errors always show - // (parity with Tauri's `showToast`). - if !state.get_enabled() && kind != ToastKind::Error { - return; - } - - state.set_message(message.as_str().into()); - state.set_kind(kind); - state.set_persistent(kind == ToastKind::Buffering); - state.set_visible(true); - - HIDE_TIMER.with(|t| t.stop()); - if let Some(delay) = auto_hide(kind) { - let weak = window.as_weak(); - HIDE_TIMER.with(|t| { - t.start(TimerMode::SingleShot, delay, move || { - if let Some(w) = weak.upgrade() { - w.global::().set_visible(false); - } - }); - }); - } -} - -/// Hide the current toast immediately (also stops the pending auto-hide). -pub fn hide(window: &AppWindow) { - HIDE_TIMER.with(|t| t.stop()); - window.global::().set_visible(false); -} - -/// Show a toast from any thread (async / background error paths). Hops -/// onto the event loop, so the message must be owned/`Send`. -pub fn show_weak(weak: &Weak, message: impl Into, kind: ToastKind) { - let message: String = message.into(); - let _ = weak.upgrade_in_event_loop(move |w| show(&w, message, kind)); -} - -// ---- Convenience wrappers ------------------------------------------------- - -pub fn error(window: &AppWindow, message: impl Into) { - show(window, message, ToastKind::Error); -} - -pub fn success(window: &AppWindow, message: impl Into) { - show(window, message, ToastKind::Success); -} - -pub fn info(window: &AppWindow, message: impl Into) { - show(window, message, ToastKind::Info); -} - -pub fn warning(window: &AppWindow, message: impl Into) { - show(window, message, ToastKind::Warning); -} - -/// Error toast from any thread. -pub fn error_weak(weak: &Weak, message: impl Into) { - show_weak(weak, message, ToastKind::Error); -} - -/// Success toast from any thread. -pub fn success_weak(weak: &Weak, message: impl Into) { - show_weak(weak, message, ToastKind::Success); -} - -/// Info toast from any thread. -pub fn info_weak(weak: &Weak, message: impl Into) { - show_weak(weak, message, ToastKind::Info); -} diff --git a/crates/qbz-source/Cargo.toml b/crates/qbz-source/Cargo.toml index d620eda80..60e4d459f 100644 --- a/crates/qbz-source/Cargo.toml +++ b/crates/qbz-source/Cargo.toml @@ -26,8 +26,8 @@ qbz-media-cache = { path = "../qbz-media-cache" } # — every statement lives in `qbz-media-cache` or `qbz-library`. rusqlite = { version = "0.31", features = ["bundled"] } # `ItemResolver` — this crate IMPLEMENTS it (mixtape_adapter.rs). qbz-mixtape is -# NOT modified and NOT absorbed; the dependency is one-directional so the `qbz` -# (Slint) crate keeps compiling untouched. +# NOT modified and NOT absorbed; the dependency remains one-directional so the +# Qt application can consume the adapter without coupling qbz-mixtape to it. qbz-mixtape = { path = "../qbz-mixtape" } async-trait = { workspace = true } diff --git a/crates/qbz-ui/Cargo.toml b/crates/qbz-ui/Cargo.toml deleted file mode 100644 index d397290a6..000000000 --- a/crates/qbz-ui/Cargo.toml +++ /dev/null @@ -1,22 +0,0 @@ -[package] -name = "qbz-ui" -version.workspace = true -edition.workspace = true -license.workspace = true -repository.workspace = true -description = "Slint UI compilation unit for the qbz app — owns the .slint tree + bundled translations and exports the generated Rust types (AppWindow, MiniPlayerWindow, all globals + structs)." - -[lib] -name = "qbz_ui" -path = "src/lib.rs" - -[dependencies] -slint = { version = "=1.16.1", default-features = false, features = [ - "std", - "compat-1-2", - "renderer-software", - "accessibility", -] } - -[build-dependencies] -slint-build = "1.16" diff --git a/crates/qbz-ui/build.rs b/crates/qbz-ui/build.rs deleted file mode 100644 index eec7697bb..000000000 --- a/crates/qbz-ui/build.rs +++ /dev/null @@ -1,22 +0,0 @@ -//! Compiles the Slint UI tree with bundled translations. `ui/app.slint` is the -//! single entry point. Translations are bundled (pure-Rust, no C dep) from -//! `/LC_MESSAGES/qbz-ui.po`; msgid = English source, no context. -//! -//! THE CATALOGUES MOVED OUT of this crate and are now BORROWED. They belong to -//! `qbz-i18n`, which embeds them with `include_str!` and is the crate every -//! frontend uses — it declared itself "frontend-agnostic" while reaching into -//! this directory for its data, so deleting this crate (planned before the Qt -//! release) would have broken the Qt app over a path nobody read as a -//! dependency. This borrow is the temporary half: it dies with the crate. -fn main() { - // SLINT_SCALE_FACTOR is a RUNTIME preference in this app (main.rs sets it - // from the persisted interface-size preset). If it leaks into the BUILD - // environment, the slint compiler const-propagates the factor and the - // runtime override becomes a permanent no-op — strip it unconditionally. - std::env::remove_var("SLINT_SCALE_FACTOR"); - let config = slint_build::CompilerConfiguration::new() - .with_bundled_translations("../qbz-i18n/translations") - .with_default_translation_context(slint_build::DefaultTranslationContext::None); - slint_build::compile_with_config("ui/app.slint", config) - .expect("Slint UI failed to compile"); -} diff --git a/crates/qbz-ui/src/lib.rs b/crates/qbz-ui/src/lib.rs deleted file mode 100644 index 1781cb733..000000000 --- a/crates/qbz-ui/src/lib.rs +++ /dev/null @@ -1,8 +0,0 @@ -//! Slint UI compilation unit. The whole `.slint` tree (entry `ui/app.slint`) -//! is compiled by `build.rs` with bundled translations; `include_modules!` -//! brings the generated Rust types (AppWindow, MiniPlayerWindow, the globals, -//! the structs/enums) into this crate's root. They are `pub`, so the -//! `qbz-slint` binary (and future feature crates) use them via -//! `qbz_slint_ui::AppWindow` etc. — Slint generated TYPES cross crate -//! boundaries fine (only `.slint` file imports do not). -slint::include_modules!(); diff --git a/crates/qbz-ui/ui/album/AlbumBookletModal.slint b/crates/qbz-ui/ui/album/AlbumBookletModal.slint deleted file mode 100644 index d7335af1b..000000000 --- a/crates/qbz-ui/ui/album/AlbumBookletModal.slint +++ /dev/null @@ -1,309 +0,0 @@ -// Album Booklet modal — in-app PDF reader for the digital booklet that -// ships with some Qobuz albums. Opened from the AlbumPageView header -// (book-open) button via media-action("album", id, "booklet"); the Rust -// controller (crate qbz-booklet) downloads the PDF, renders the current -// page to a PNG, and feeds BookletState. Mirrors AlbumCreditsModal's -// scrim + centered card pattern (ADR-009/010). The page area is a -// Flickable sized to the rendered pixel dimensions: centered when the -// page is smaller than the viewport, scrolling when larger. - -import { Theme } from "../foundation/semantic-colors.slint"; -import { Typography } from "../foundation/typography.slint"; -import { Radius } from "../foundation/radius.slint"; -import { BookletState, BookletActions } from "../state.slint"; -import { QbzIcon } from "../primitives/QbzIcon.slint"; -import { LoadingSpinner } from "../primitives/LoadingSpinner.slint"; - -// One toolbar button — a small square with a centered icon, hover fill, -// disable support (dims + gates the click). -component ToolbarButton inherits Rectangle { - in property icon; - in property enabled: true; - callback clicked(); - - width: 32px; - height: 32px; - border-radius: Radius.sm; - opacity: root.enabled ? 1.0 : 0.4; - background: (ta.has-hover && root.enabled) ? Theme.surface-hover : transparent; - - QbzIcon { - source: root.icon; - width: 16px; - height: 16px; - x: Math.round((parent.width - self.width) / 2 / 1px) * 1px; - y: Math.round((parent.height - self.height) / 2 / 1px) * 1px; - tint: ta.has-hover && root.enabled ? Theme.text-primary : Theme.text-secondary; - } - - ta := TouchArea { - mouse-cursor: root.enabled ? pointer : default; - clicked => { - if (root.enabled) { - root.clicked(); - } - } - } -} - -export component AlbumBookletModal inherits Rectangle { - visible: BookletState.open; - - if BookletState.open: Rectangle { - background: #000000bf; - - // Scrim — a click outside the card dismisses. - TouchArea { - mouse-cursor: default; - clicked => { - BookletActions.close(); - } - } - - Rectangle { - width: Math.min(root.width - 40px, 980px); - height: root.height - 80px; - x: Math.round((parent.width - self.width) / 2 / 1px) * 1px; - y: Math.round((parent.height - self.height) / 2 / 1px) * 1px; - border-radius: Radius.md; - background: Theme.surface-card; - border-width: 1px; - border-color: Theme.border-subtle; - drop-shadow-blur: 32px; - drop-shadow-color: Theme.card-shadow; - clip: true; - - // Swallow clicks so they don't reach the scrim. - TouchArea { } - - fs := FocusScope { - Timer { - interval: 30ms; - running: true; - triggered => { - self.running = false; - fs.focus(); - } - } - key-pressed(event) => { - if (event.text == Key.Escape) { - BookletActions.close(); - return accept; - } - return reject; - } - - VerticalLayout { - spacing: 0px; - - // ---- Header: title + close ---------------------------- - HorizontalLayout { - padding-left: 24px; - padding-right: 24px; - padding-top: 16px; - padding-bottom: 16px; - spacing: 16px; - VerticalLayout { - alignment: center; - horizontal-stretch: 1; - Text { - text: BookletState.title; - color: Theme.text-primary; - font-size: 16px; - font-weight: Typography.semibold; - overflow: elide; - } - } - close-x := TouchArea { - width: 32px; - height: 32px; - mouse-cursor: pointer; - clicked => { - BookletActions.close(); - } - QbzIcon { - source: @image-url("../assets/icons/x.svg"); - width: 18px; - height: 18px; - x: (parent.width - self.width) / 2; - y: (parent.height - self.height) / 2; - tint: close-x.has-hover ? Theme.text-primary : Theme.text-muted; - } - } - } - - Rectangle { - height: 1px; - background: Theme.border-subtle; - } - - // ---- Toolbar: paging, zoom, fit, rotate, download ----- - HorizontalLayout { - padding-left: 24px; - padding-right: 24px; - padding-top: 10px; - padding-bottom: 10px; - spacing: 6px; - alignment: start; - - VerticalLayout { - alignment: center; - ToolbarButton { - icon: @image-url("../assets/icons/chevron-left.svg"); - enabled: BookletState.current-page > 1; - clicked => { - BookletActions.prev-page(); - } - } - } - VerticalLayout { - alignment: center; - Text { - text: BookletState.current-page + " / " + BookletState.num-pages; - color: Theme.text-secondary; - font-size: 13px; - vertical-alignment: center; - horizontal-alignment: center; - min-width: 64px; - } - } - VerticalLayout { - alignment: center; - ToolbarButton { - icon: @image-url("../assets/icons/chevron-right.svg"); - enabled: BookletState.current-page < BookletState.num-pages; - clicked => { - BookletActions.next-page(); - } - } - } - - // Spacer between paging and zoom controls. - Rectangle { width: 16px; } - - VerticalLayout { - alignment: center; - ToolbarButton { - icon: @image-url("../assets/icons/minus.svg"); - clicked => { - BookletActions.zoom-out(); - } - } - } - VerticalLayout { - alignment: center; - ToolbarButton { - icon: @image-url("../assets/icons/plus.svg"); - clicked => { - BookletActions.zoom-in(); - } - } - } - VerticalLayout { - alignment: center; - ToolbarButton { - icon: @image-url("../assets/icons/maximize-2.svg"); - clicked => { - BookletActions.fit-width(); - } - } - } - VerticalLayout { - alignment: center; - ToolbarButton { - icon: @image-url("../assets/icons/rotate-ccw.svg"); - clicked => { - BookletActions.rotate(); - } - } - } - - Rectangle { horizontal-stretch: 1; } - - VerticalLayout { - alignment: center; - ToolbarButton { - icon: @image-url("../assets/icons/cloud-download.svg"); - clicked => { - BookletActions.download(); - } - } - } - } - - Rectangle { - height: 1px; - background: Theme.border-subtle; - } - - // ---- Page area ---------------------------------------- - // A neutral viewport holding a Flickable sized to the - // rendered page pixels. When the page is smaller than the - // viewport it centers; when larger, the Flickable scrolls. - Rectangle { - vertical-stretch: 1; - background: Theme.surface-main; - clip: true; - - page-flick := Flickable { - viewport-width: Math.max(self.width, BookletState.page-pixel-width * 1px); - viewport-height: Math.max(self.height, BookletState.page-pixel-height * 1px); - - Image { - source: BookletState.page-image; - width: BookletState.page-pixel-width * 1px; - height: BookletState.page-pixel-height * 1px; - x: Math.max(0px, (parent.width - self.width) / 2); - y: Math.max(0px, (parent.height - self.height) / 2); - } - } - - // Loading overlay — spinner + label while the PDF - // downloads or a page renders. - if BookletState.loading: Rectangle { - background: Theme.surface-main; - TouchArea { } - VerticalLayout { - alignment: center; - spacing: 14px; - HorizontalLayout { - alignment: center; - LoadingSpinner { size: 36px; } - } - Text { - text: @tr("Loading…"); - color: Theme.text-muted; - font-size: Typography.body; - horizontal-alignment: center; - } - } - } - - // Error overlay. - if BookletState.error: Rectangle { - background: Theme.surface-main; - TouchArea { } - VerticalLayout { - alignment: center; - spacing: 8px; - Text { - text: @tr("Failed to load booklet"); - color: Theme.text-muted; - font-size: Typography.body; - horizontal-alignment: center; - } - if BookletState.error-text != "": Text { - text: BookletState.error-text; - color: Theme.text-muted; - font-size: Typography.legal; - horizontal-alignment: center; - wrap: word-wrap; - } - } - } - } - } - } - } - } -} diff --git a/crates/qbz-ui/ui/album/AlbumCreditsModal.slint b/crates/qbz-ui/ui/album/AlbumCreditsModal.slint deleted file mode 100644 index 9864c76b4..000000000 --- a/crates/qbz-ui/ui/album/AlbumCreditsModal.slint +++ /dev/null @@ -1,476 +0,0 @@ -// Album Info (Credits / Review) modal — 1:1 port of Tauri's -// AlbumCreditsModal.svelte. Opened from the AlbumPageView header (i) button via -// media-action("album", id, "info"). The Rust controller (crate::info_modals) -// fetches the album, parses per-track performers, and populates AlbumInfoState. -// Rectangle-scrim + centered fixed-height card, mounted in AppShell after the -// other modals (ADR-009/010). Left column = album info (fixed). Right column = -// Credits (expandable track list) / Review (editorial text), independent scroll. - -import { Theme } from "../foundation/semantic-colors.slint"; -import { Typography } from "../foundation/typography.slint"; -import { Radius } from "../foundation/radius.slint"; -import { AlbumInfoState, AlbumInfoActions, AlbumCreditTrack } from "../state.slint"; -import { QbzIcon } from "../primitives/QbzIcon.slint"; -import { ListScrollbar } from "../primitives/ListScrollbar.slint"; - -// One track row in the Credits tab: number / play-on-hover, title + artist, -// expand chevron; an expanded panel with per-performer credit lines + the -// copyright. Local `expanded` persists while the modal stays open. -component AlbumTrackRow inherits VerticalLayout { - in property track; - in property is-last; - callback play(string /* track-id */); - callback musician(string /* name */, string /* primary-role */); - property expanded: false; - - // ---- Header row ------------------------------------------------------- - Rectangle { - height: 46px; - // Declared FIRST so the per-cell play TouchArea sits on top (footgun: - // a later full-row TouchArea would eat the cell clicks). - rowha := TouchArea { - mouse-cursor: root.track.has-credits ? pointer : default; - clicked => { - if (root.track.has-credits) { - root.expanded = !root.expanded; - } - } - } - HorizontalLayout { - spacing: 12px; - // Whole-row hover dim, 1:1 with Tauri .track-header:hover. - opacity: (rowha.has-hover && root.track.has-credits) ? 0.8 : 1.0; - // Number / play-on-hover cell. - Rectangle { - width: 28px; - if !(rowha.has-hover || pcell.has-hover): Text { - text: root.track.number; - color: Theme.text-muted; - font-size: 14px; - horizontal-alignment: center; - vertical-alignment: center; - } - pcell := TouchArea { - mouse-cursor: pointer; - clicked => { - root.play(root.track.id); - } - if rowha.has-hover || pcell.has-hover: Rectangle { - width: 28px; - height: 28px; - border-radius: 14px; - background: Theme.accent; - x: (parent.width - self.width) / 2; - y: (parent.height - self.height) / 2; - QbzIcon { - source: @image-url("../assets/icons/play-fill.svg"); - width: 14px; - height: 14px; - x: (parent.width - self.width) / 2; - y: (parent.height - self.height) / 2; - tint: Theme.accent-text; - } - } - } - } - // Title + artist. - VerticalLayout { - horizontal-stretch: 1; - alignment: center; - spacing: 2px; - Text { - text: root.track.title; - color: Theme.text-primary; - font-size: 14px; - font-weight: Typography.medium; - overflow: elide; - } - Text { - text: root.track.artist; - color: Theme.text-muted; - font-size: 12px; - overflow: elide; - } - } - // Expand chevron (only when there are credits). - if root.track.has-credits: VerticalLayout { - alignment: center; - QbzIcon { - source: root.expanded - ? @image-url("../assets/icons/chevron-up.svg") - : @image-url("../assets/icons/chevron-down.svg"); - width: 18px; - height: 18px; - tint: root.expanded ? Theme.text-primary : Theme.text-muted; - } - } - } - } - - // ---- Expanded credits ------------------------------------------------- - if root.expanded && root.track.has-credits: VerticalLayout { - padding-left: 40px; - padding-bottom: 12px; - spacing: 0px; - for perf in root.track.performers: HorizontalLayout { - padding-top: 4px; - padding-bottom: 4px; - alignment: start; - pta := TouchArea { - width: pname.preferred-width; - height: pname.preferred-height; - mouse-cursor: pointer; - clicked => { - root.musician(perf.name, perf.primary-role); - } - pname := Text { - text: perf.name; - color: pta.has-hover ? Theme.accent : Theme.text-primary; - font-size: 13px; - font-weight: Typography.medium; - } - } - Text { - text: perf.roles; - color: Theme.text-muted; - font-size: 13px; - // Fill the row's remaining width and wrap the role list instead - // of letting it run off the right edge of the modal. - horizontal-stretch: 1; - wrap: word-wrap; - } - } - if root.track.copyright != "": Rectangle { height: 8px; } - if root.track.copyright != "": Rectangle { - height: 1px; - background: Theme.border-subtle; - } - if root.track.copyright != "": Rectangle { height: 8px; } - if root.track.copyright != "": Text { - text: root.track.copyright; - color: Theme.text-muted; - font-size: 12px; - wrap: word-wrap; - } - } - - // ---- Divider ---------------------------------------------------------- - if !root.is-last: Rectangle { - height: 1px; - background: Theme.border-subtle; - } -} - -export component AlbumCreditsModal inherits Rectangle { - visible: AlbumInfoState.open; - - if AlbumInfoState.open: Rectangle { - background: #000000bf; - - TouchArea { - mouse-cursor: default; - clicked => { - AlbumInfoActions.close(); - } - } - - Rectangle { - width: Math.min(root.width - 40px, 850px); - // Content-sized with a decent cap: as tall as the header + the - // taller of the two columns (left meta vs tabs + the full credit - // list), but never beyond the content area (40px margin each side). - // When the list exceeds the cap, the right column's Flickable - // scrolls. All inputs are width-driven (card width is fixed by - // root.width) so the height binding is acyclic. The +42px is the - // tab strip when a review exists. - height: Math.min( - root.height - 80px, - hdr.preferred-height - + Math.max( - leftcol.preferred-height, - (AlbumInfoState.has-review ? 42px : 0px) + content.preferred-height) - + 24px); - x: Math.round((parent.width - self.width) / 2 / 1px) * 1px; - y: Math.round((parent.height - self.height) / 2 / 1px) * 1px; - border-radius: Radius.md; - background: Theme.surface-card; - border-width: 1px; - border-color: Theme.border-subtle; - drop-shadow-blur: 32px; - drop-shadow-color: Theme.card-shadow; - - TouchArea { } - - fs := FocusScope { - Timer { - interval: 30ms; - running: true; - triggered => { - self.running = false; - fs.focus(); - } - } - key-pressed(event) => { - if (event.text == Key.Escape) { - AlbumInfoActions.close(); - return accept; - } - return reject; - } - - VerticalLayout { - // ---- Header ------------------------------------------- - hdr := HorizontalLayout { - padding-left: 24px; - padding-right: 24px; - padding-top: 16px; - padding-bottom: 16px; - spacing: 16px; - VerticalLayout { - horizontal-stretch: 1; - spacing: 4px; - Text { - text: AlbumInfoState.title; - color: Theme.text-primary; - font-size: 16px; - font-weight: Typography.semibold; - overflow: elide; - } - Text { - text: AlbumInfoState.artist; - color: Theme.text-muted; - font-size: Typography.legal; - overflow: elide; - } - } - close-x := TouchArea { - width: 32px; - height: 32px; - mouse-cursor: pointer; - clicked => { - AlbumInfoActions.close(); - } - QbzIcon { - source: @image-url("../assets/icons/x.svg"); - width: 18px; - height: 18px; - x: (parent.width - self.width) / 2; - y: (parent.height - self.height) / 2; - tint: close-x.has-hover ? Theme.text-primary : Theme.text-muted; - } - } - } - - // ---- Body (two columns) — always rendered so the card - // height can read the real content height (loading/error - // are overlays below, since Slint can't reference elements - // nested in an `if` from the height binding). - HorizontalLayout { - vertical-stretch: 1; - padding-left: 24px; - padding-right: 24px; - padding-bottom: 24px; - spacing: 24px; - - // LEFT — album info (fixed width). alignment:start so - // the meta stacks tightly under the cover instead of - // the layout distributing the tall body's slack between - // the rows. - leftcol := VerticalLayout { - width: 260px; - spacing: 0px; - alignment: start; - Rectangle { - width: 200px; - height: 200px; - border-radius: 8px; - clip: true; - Image { - width: 200px; - height: 200px; - source: AlbumInfoState.artwork; - image-fit: cover; - } - } - Rectangle { height: 16px; } - // Released by