From c8ef2a1b1d0bc1ce8ed87fedda3277926e29d22f Mon Sep 17 00:00:00 2001 From: vicrodh <103399283+vicrodh@users.noreply.github.com> Date: Thu, 25 Jun 2026 17:51:09 -0600 Subject: [PATCH] refactor(slint): split qbz-slint into qbz-ui lib + qbz bin; reclaim `qbz` binary MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Slint cannot split the .slint compilation across crates, but a Slint LIBRARY crate exposes its generated Rust types to dependent crates (verified with a minimal proof). So: - NEW crate `qbz-ui` (lib): owns the whole .slint tree + build.rs + bundled translations; `slint::include_modules!()` + the generated types (AppWindow, MiniPlayerWindow, all globals/structs) are re-exported. Translation domain is now `qbz-ui` (the .po files renamed accordingly). - `qbz-slint` (bin) -> renamed to `qbz` (package + `[[bin]] name = "qbz"`), reclaiming the binary name from the retired Tauri app. It depends on `qbz-ui` and does `pub use qbz_ui::*;` so existing `crate::AppWindow` / `crate::*State` references resolve unchanged. This splits the single ~20 GB rustc into two crates (UI/codegen vs the 75k LOC of logic) — the foundation for lower build peak, incremental caching, and the upcoming per-feature crate extraction. Also fixed for the move: qbz-i18n bundled-.po include paths, the font/WGSL `include_bytes!`/`include_str!` paths (-> ../../qbz-ui/ui/), workspace members, dev scripts (`-p qbz`), and the CI workflows. `cargo check -p qbz` is green. cc --- .github/workflows/build-slint-selfhosted.yml | 12 +- .github/workflows/build-slint.yml | 8 +- crates/Cargo.lock | 118 ++++++++++-------- crates/Cargo.toml | 3 +- crates/qbz-i18n/src/lib.rs | 10 +- crates/qbz-ui/Cargo.toml | 22 ++++ crates/{qbz-slint => qbz-ui}/build.rs | 0 crates/qbz-ui/src/lib.rs | 8 ++ .../translations/de/LC_MESSAGES/qbz-ui.po} | 0 .../translations/en/LC_MESSAGES/qbz-ui.po} | 0 .../translations/es/LC_MESSAGES/qbz-ui.po} | 0 .../translations/fr/LC_MESSAGES/qbz-ui.po} | 0 .../translations/pt/LC_MESSAGES/qbz-ui.po} | 0 .../ui/album/AlbumBookletModal.slint | 0 .../ui/album/AlbumCreditsModal.slint | 0 .../ui/album/AlbumPageView.slint | 0 .../ui/album/LocalAlbumView.slint | 0 .../ui/album/TrackInfoModal.slint | 0 crates/{qbz-slint => qbz-ui}/ui/app.slint | 0 .../ui/artist/ArtistPageView.slint | 0 .../ui/artist/ArtistReleasesView.slint | 0 .../ui/artist/ReleaseGrid.slint | 0 crates/{qbz-slint => qbz-ui}/ui/assets/cd.svg | 0 .../ui/assets/fonts/Inter_18pt-Bold.ttf | Bin .../ui/assets/fonts/Inter_18pt-Medium.ttf | Bin .../ui/assets/fonts/Inter_18pt-Regular.ttf | Bin .../ui/assets/fonts/Inter_18pt-SemiBold.ttf | Bin .../ui/assets/hi-res.svg | 0 .../ui/assets/icons/add-to-list.svg | 0 .../ui/assets/icons/align-start-vertical.svg | 0 .../ui/assets/icons/apple-music-logo.svg | 0 .../ui/assets/icons/arrow-left.svg | 0 .../ui/assets/icons/arrow-up-down.svg | 0 .../ui/assets/icons/audio-lines.svg | 0 .../ui/assets/icons/award.svg | 0 .../ui/assets/icons/blind-eye.svg | 0 .../ui/assets/icons/book-open.svg | 0 .../ui/assets/icons/brand-discogs.svg | 0 .../ui/assets/icons/brand-lastfm.svg | 0 .../ui/assets/icons/brand-musicbrainz.svg | 0 .../ui/assets/icons/bug.svg | 0 .../ui/assets/icons/captions.svg | 0 .../ui/assets/icons/cassette-tape.svg | 0 .../ui/assets/icons/cassette.svg | 0 .../ui/assets/icons/cast.svg | 0 .../ui/assets/icons/cat.svg | 0 .../ui/assets/icons/chart-no-axes-column.svg | 0 .../ui/assets/icons/check.svg | 0 .../ui/assets/icons/chevron-down.svg | 0 .../ui/assets/icons/chevron-left.svg | 0 .../ui/assets/icons/chevron-right.svg | 0 .../ui/assets/icons/chevron-up.svg | 0 .../ui/assets/icons/circle-alert.svg | 0 .../ui/assets/icons/circle-check-big.svg | 0 .../ui/assets/icons/circle-dot.svg | 0 .../ui/assets/icons/circle-stop.svg | 0 .../ui/assets/icons/circle.svg | 0 .../ui/assets/icons/clock.svg | 0 .../ui/assets/icons/cloud-download.svg | 0 .../ui/assets/icons/cloud-off.svg | 0 .../ui/assets/icons/cloud-upload.svg | 0 .../ui/assets/icons/collection.svg | 0 .../ui/assets/icons/compass.svg | 0 .../ui/assets/icons/copy.svg | 0 .../ui/assets/icons/crown.svg | 0 .../ui/assets/icons/deezer-logo.svg | 0 .../ui/assets/icons/disc-3.svg | 0 .../ui/assets/icons/disc-album.svg | 0 .../ui/assets/icons/disc.svg | 0 .../ui/assets/icons/download.svg | 0 .../ui/assets/icons/element-connect.svg | 0 .../ui/assets/icons/ellipsis.svg | 0 .../ui/assets/icons/external-link.svg | 0 .../ui/assets/icons/eye-off.svg | 0 .../ui/assets/icons/eye.svg | 0 .../ui/assets/icons/folder-check.svg | 0 .../ui/assets/icons/folder-open.svg | 0 .../ui/assets/icons/folder-plus.svg | 0 .../ui/assets/icons/folder-tree.svg | 0 .../ui/assets/icons/folder.svg | 0 .../ui/assets/icons/gandalf.svg | 0 .../ui/assets/icons/globe.svg | 0 .../ui/assets/icons/grip-vertical.svg | 0 .../ui/assets/icons/hard-drive.svg | 0 .../ui/assets/icons/heart-filled.svg | 0 .../ui/assets/icons/heart.svg | 0 .../ui/assets/icons/home-gear.svg | 0 .../ui/assets/icons/image-plus.svg | 0 .../ui/assets/icons/image.svg | 0 .../ui/assets/icons/import.svg | 0 .../ui/assets/icons/infinity.svg | 0 .../ui/assets/icons/info.svg | 0 .../ui/assets/icons/keyboard.svg | 0 .../ui/assets/icons/layers.svg | 0 .../ui/assets/icons/layout-grid.svg | 0 .../ui/assets/icons/library-big.svg | 0 .../ui/assets/icons/library.svg | 0 .../ui/assets/icons/link.svg | 0 .../ui/assets/icons/list-end.svg | 0 .../ui/assets/icons/list-filter.svg | 0 .../ui/assets/icons/list-music.svg | 0 .../ui/assets/icons/list-ordered.svg | 0 .../ui/assets/icons/list-plus.svg | 0 .../ui/assets/icons/list-x.svg | 0 .../ui/assets/icons/list.svg | 0 .../ui/assets/icons/loader-circle.svg | 0 .../ui/assets/icons/lock-open.svg | 0 .../ui/assets/icons/lock.svg | 0 .../ui/assets/icons/log-out.svg | 0 .../ui/assets/icons/map-pin.svg | 0 .../ui/assets/icons/maximize-2.svg | 0 .../ui/assets/icons/menu.svg | 0 .../ui/assets/icons/mic-vocal.svg | 0 .../ui/assets/icons/minimize-2.svg | 0 .../ui/assets/icons/minus.svg | 0 .../ui/assets/icons/monitor-speaker.svg | 0 .../ui/assets/icons/monitor.svg | 0 .../ui/assets/icons/move.svg | 0 .../ui/assets/icons/music-library-2.svg | 0 .../ui/assets/icons/music.svg | 0 .../ui/assets/icons/my-qbz.svg | 0 .../ui/assets/icons/network.svg | 0 .../ui/assets/icons/panel-left.svg | 0 .../ui/assets/icons/panel-right-close.svg | 0 .../ui/assets/icons/pause.svg | 0 .../ui/assets/icons/pen-line.svg | 0 .../ui/assets/icons/pencil.svg | 0 .../ui/assets/icons/picture-in-picture-2.svg | 0 .../ui/assets/icons/play-fill.svg | 0 .../ui/assets/icons/play.svg | 0 .../ui/assets/icons/plex-logo.svg | 0 .../ui/assets/icons/plus.svg | 0 .../ui/assets/icons/qbz-symbolic.svg | 0 .../ui/assets/icons/qobuz-logo-filled.svg | 0 .../ui/assets/icons/qobuz-logo.svg | 0 .../ui/assets/icons/radio.svg | 0 .../ui/assets/icons/refresh-cw.svg | 0 .../ui/assets/icons/repeat-1.svg | 0 .../ui/assets/icons/repeat.svg | 0 .../ui/assets/icons/rotate-ccw.svg | 0 .../ui/assets/icons/rows-3.svg | 0 .../ui/assets/icons/search.svg | 0 .../ui/assets/icons/settings-2.svg | 0 .../ui/assets/icons/settings.svg | 0 .../ui/assets/icons/shopping-bag.svg | 0 .../ui/assets/icons/shuffle.svg | 0 .../ui/assets/icons/skip-back.svg | 0 .../ui/assets/icons/skip-forward.svg | 0 .../ui/assets/icons/sliders-horizontal.svg | 0 .../ui/assets/icons/smartphone.svg | 0 .../ui/assets/icons/speaker.svg | 0 .../ui/assets/icons/spotify-logo.svg | 0 .../ui/assets/icons/square-check-big.svg | 0 .../ui/assets/icons/square.svg | 0 .../ui/assets/icons/star.svg | 0 .../ui/assets/icons/thumbs-down.svg | 0 .../ui/assets/icons/tidal-tidal.svg | 0 .../ui/assets/icons/trash-2.svg | 0 .../ui/assets/icons/trash-list.svg | 0 .../ui/assets/icons/triangle-alert.svg | 0 .../ui/assets/icons/turntable.svg | 0 .../ui/assets/icons/user-plus.svg | 0 .../ui/assets/icons/user.svg | 0 .../ui/assets/icons/volume-2.svg | 0 .../ui/assets/icons/volume-x.svg | 0 .../ui/assets/icons/wifi.svg | 0 .../ui/assets/icons/x.svg | 0 .../ui/assets/laurels.svg | 0 .../{qbz-slint => qbz-ui}/ui/assets/mp3.svg | 0 .../ui/assets/qbz-logo.png | Bin .../ui/award/AwardAlbumsView.slint | 0 .../ui/award/AwardView.slint | 0 .../ui/discover/AlbumCard.slint | 0 .../ui/discover/AlbumCollectionView.slint | 0 .../ui/discover/ArtistCard.slint | 0 .../ui/discover/ArtistCarousel.slint | 0 .../ui/discover/Carousel.slint | 0 .../ui/discover/DiscoverBrowseView.slint | 0 .../ui/discover/DiscoverConfigModal.slint | 0 .../ui/discover/ForYouView.slint | 0 .../ui/discover/GenreFilterPopup.slint | 0 .../ui/discover/GridSection.slint | 0 .../ui/discover/HomeSkeleton.slint | 0 .../ui/discover/HomeView.slint | 0 .../ui/discover/PlaylistCard.slint | 0 .../ui/discover/PlaylistCarousel.slint | 0 .../ui/discover/PlaylistCollage.slint | 0 .../ui/discover/PlaylistTagFilter.slint | 0 .../ui/discover/QobuzMixesRow.slint | 0 .../ui/discover/RadioCard.slint | 0 .../ui/discover/SlimCard.slint | 0 .../ui/discover/SlimCarousel.slint | 0 .../ui/discover/Spotlight.slint | 0 .../ui/favorites/FavoritesOfflineRail.slint | 0 .../ui/favorites/FavoritesView.slint | 0 .../ui/focus-state.slint | 0 .../ui/foundation/layout.slint | 0 .../ui/foundation/palette.slint | 0 .../ui/foundation/radius.slint | 0 .../ui/foundation/semantic-colors.slint | 0 .../ui/foundation/spacing.slint | 0 .../ui/foundation/theme-state.slint | 0 .../ui/foundation/theme.slint | 0 .../ui/foundation/typography.slint | 0 .../ui/immersive/AlbumReactivePanel.slint | 0 .../ui/immersive/CoverflowPanel.slint | 0 .../ui/immersive/ImmersiveAtmosphere.slint | 0 .../immersive/ImmersiveLyricsFocusPanel.slint | 0 .../ui/immersive/ImmersiveQueuePanel.slint | 0 .../immersive/ImmersiveSearchCortinilla.slint | 0 .../immersive/ImmersiveSuggestionsPanel.slint | 0 .../ui/immersive/ImmersiveTrackInfo.slint | 0 .../immersive/ImmersiveTrackInfoPanel.slint | 0 .../ui/immersive/ImmersiveView.slint | 0 .../ui/immersive/SpectrumPanel.slint | 0 .../ui/immersive/StaticPanel.slint | 0 .../ui/label/LabelPageView.slint | 0 .../ui/label/LabelReleasesView.slint | 0 .../ui/locallibrary/LocalLibraryView.slint | 0 .../ui/location/ArtistsByLocationView.slint | 0 .../ui/login/LoginScreen.slint | 0 .../ui/miniplayer/MiniArtworkSurface.slint | 0 .../ui/miniplayer/MiniBits.slint | 0 .../ui/miniplayer/MiniCompactSurface.slint | 0 .../ui/miniplayer/MiniFooter.slint | 0 .../ui/miniplayer/MiniLyricsSurface.slint | 0 .../ui/miniplayer/MiniQueueSurface.slint | 0 .../ui/miniplayer/MiniShell.slint | 0 .../ui/miniplayer/MiniWindowControls.slint | 0 .../ui/mix/MixView.slint | 0 .../ui/musician/MusicianPageView.slint | 0 .../ui/myqbz/AddToMixtapeModal.slint | 0 .../ui/myqbz/CollectionMosaic.slint | 0 .../ui/myqbz/CollectionsView.slint | 0 .../ui/myqbz/CreateMyQbzModal.slint | 0 .../ui/myqbz/DiscographyBuilderView.slint | 0 .../ui/myqbz/MixtapeDetailView.slint | 0 .../ui/myqbz/MixtapesView.slint | 0 .../ui/myqbz/MyQbzEditModal.slint | 0 .../ui/myqbz/MyQbzMixModal.slint | 0 .../ui/myqbz/MyQbzShared.slint | 0 .../ui/offline/OfflineManagerView.slint | 0 .../ui/offline/OfflinePlaceholder.slint | 0 .../ui/playlist/PlaylistManagerView.slint | 0 .../ui/playlist/PlaylistView.slint | 0 .../ui/primitives/AlbumContextMenu.slint | 0 .../ui/primitives/AlbumListRow.slint | 0 .../ui/primitives/BarControls.slint | 0 .../ui/primitives/CircleAction.slint | 0 .../ui/primitives/CommandBlock.slint | 0 .../ui/primitives/ContextMenu.slint | 0 .../ui/primitives/ContextMenuItem.slint | 0 .../ui/primitives/CreateFolderModal.slint | 0 .../ui/primitives/CreatePlaylistModal.slint | 0 .../ui/primitives/DacWizardModal.slint | 0 .../ui/primitives/DiscContextMenu.slint | 0 .../ui/primitives/DiscHeaderMenu.slint | 0 .../ui/primitives/DragGhost.slint | 0 .../ui/primitives/EditPlaylistModal.slint | 0 .../primitives/EphemeralPlayChoiceModal.slint | 0 .../ui/primitives/ExpandableSearch.slint | 0 .../ui/primitives/FolderEditModal.slint | 0 .../ui/primitives/JumpNavBar.slint | 0 .../ui/primitives/ListScrollbar.slint | 0 .../ui/primitives/LoadingDots.slint | 0 .../ui/primitives/LoadingSpinner.slint | 0 .../ui/primitives/MultiSelectBar.slint | 0 .../PlaylistDuplicateConfirmModal.slint | 0 .../ui/primitives/PlaylistImportModal.slint | 0 .../ui/primitives/PlaylistPickerModal.slint | 0 .../ui/primitives/PmCollage.slint | 0 .../ui/primitives/PmFolderIcon.slint | 0 .../ui/primitives/QbzCheckbox.slint | 0 .../ui/primitives/QbzIcon.slint | 0 .../ui/primitives/QbzPrimaryButton.slint | 0 .../ui/primitives/QbzSelect.slint | 0 .../ui/primitives/QbzSlider.slint | 0 .../ui/primitives/QbzTextLink.slint | 0 .../ui/primitives/QbzToggle.slint | 0 .../ui/primitives/QbzVerticalSlider.slint | 0 .../ui/primitives/QualityBadge.slint | 0 .../ui/primitives/QualityBadgeFull.slint | 0 .../ui/primitives/SearchTrackHero.slint | 0 .../ui/primitives/SecondaryButton.slint | 0 .../ui/primitives/SegmentedTabBar.slint | 0 .../ui/primitives/SelectionCheckbox.slint | 0 .../primitives/SidebarPlaylistCollage.slint | 0 .../ui/primitives/SourceGlyph.slint | 0 .../ui/primitives/TagEditorModal.slint | 0 .../ui/primitives/Toast.slint | 0 .../ui/primitives/ToggleButton.slint | 0 .../ui/primitives/TrackContextMenu.slint | 0 .../ui/primitives/TrackPlayCell.slint | 0 .../ui/primitives/TrackRow.slint | 0 .../ui/primitives/WarningBanner.slint | 0 .../ui/purchases/PurchaseDetailView.slint | 0 .../ui/purchases/PurchasesView.slint | 0 .../ui/search/Cortinilla.slint | 0 .../ui/search/SearchResultsView.slint | 0 .../ui/settings/AppearanceSettings.slint | 0 .../ui/settings/AudioSettings.slint | 0 .../ui/settings/BlacklistManagerView.slint | 0 .../settings/ContentFilteringSettings.slint | 0 .../ui/settings/DeveloperSettings.slint | 0 .../ui/settings/IntegrationsSettings.slint | 0 .../ui/settings/LibFolderEditModal.slint | 0 .../ui/settings/LocalLibrarySettings.slint | 0 .../ui/settings/OfflineSettings.slint | 0 .../ui/settings/PlaybackSettings.slint | 0 .../ui/settings/SettingRow.slint | 0 .../ui/settings/SettingsView.slint | 0 .../ui/shaders/aurora.wgsl | 0 .../ui/shaders/plasma.wgsl | 0 .../ui/shaders/tunnel.wgsl | 0 .../ui/shell/AppShell.slint | 0 .../ui/shell/ArtPreviewOverlay.slint | 0 .../ui/shell/AudioStamp.slint | 0 .../ui/shell/CastPicker.slint | 0 .../ui/shell/CustomizeShortcutsModal.slint | 0 .../ui/shell/HeaderBar.slint | 0 .../ui/shell/HeaderMenuOverlay.slint | 0 .../ui/shell/KeyboardShortcutsModal.slint | 0 .../ui/shell/LinkResolverModal.slint | 0 .../ui/shell/LyricsControlsFlyout.slint | 0 .../ui/shell/LyricsLinesView.slint | 0 .../ui/shell/LyricsSidebar.slint | 0 .../ui/shell/NavButtons.slint | 0 .../ui/shell/NavMenuItem.slint | 0 .../ui/shell/NowPlayingBar.slint | 0 .../ui/shell/PlayerBar.slint | 0 .../ui/shell/PlayerBarSmall.slint | 0 .../ui/shell/QconnectDevModal.slint | 0 .../ui/shell/QueueSidebar.slint | 0 .../ui/shell/SeekBar.slint | 0 .../ui/shell/Sidebar.slint | 0 .../ui/shell/SidebarFolderPopup.slint | 0 .../ui/shell/SidebarNowPlayingDock.slint | 0 .../ui/shell/SidebarPlaylistsPopup.slint | 0 .../ui/shell/SidebarTooltip.slint | 0 .../ui/shell/SongCard.slint | 0 .../ui/shell/TooltipOverlay.slint | 0 .../ui/shell/TransportControls.slint | 0 .../ui/splash/SplashScreen.slint | 0 crates/{qbz-slint => qbz-ui}/ui/state.slint | 0 crates/{qbz-slint => qbz}/Cargo.toml | 7 +- .../icons/tray-color-22.png | Bin .../icons/tray-color-32.png | Bin .../icons/tray-color-44.png | Bin .../icons/tray-color-64.png | Bin .../{qbz-slint => qbz}/icons/tray-dark-22.png | Bin .../{qbz-slint => qbz}/icons/tray-dark-32.png | Bin .../{qbz-slint => qbz}/icons/tray-dark-44.png | Bin .../{qbz-slint => qbz}/icons/tray-dark-64.png | Bin .../icons/tray-light-22.png | Bin .../icons/tray-light-32.png | Bin .../icons/tray-light-44.png | Bin .../icons/tray-light-64.png | Bin crates/{qbz-slint => qbz}/src/adapter.rs | 0 crates/{qbz-slint => qbz}/src/album.rs | 0 crates/{qbz-slint => qbz}/src/album_map.rs | 0 crates/{qbz-slint => qbz}/src/artist.rs | 0 .../src/artist_blacklist.rs | 0 crates/{qbz-slint => qbz}/src/artist_prefs.rs | 0 .../{qbz-slint => qbz}/src/artist_releases.rs | 0 crates/{qbz-slint => qbz}/src/artwork.rs | 0 crates/{qbz-slint => qbz}/src/auth.rs | 0 crates/{qbz-slint => qbz}/src/award.rs | 0 .../src/blacklist_manager.rs | 0 crates/{qbz-slint => qbz}/src/booklet.rs | 0 crates/{qbz-slint => qbz}/src/cast_service.rs | 0 crates/{qbz-slint => qbz}/src/commands.rs | 0 .../{qbz-slint => qbz}/src/custom_artwork.rs | 0 crates/{qbz-slint => qbz}/src/dac_wizard.rs | 0 crates/{qbz-slint => qbz}/src/dates.rs | 0 crates/{qbz-slint => qbz}/src/discord_rpc.rs | 0 .../{qbz-slint => qbz}/src/discover_browse.rs | 0 .../{qbz-slint => qbz}/src/discover_prefs.rs | 0 .../src/discovery_dismiss.rs | 0 crates/{qbz-slint => qbz}/src/drag.rs | 0 crates/{qbz-slint => qbz}/src/ephemeral.rs | 0 crates/{qbz-slint => qbz}/src/fav_cache.rs | 0 crates/{qbz-slint => qbz}/src/favorites.rs | 0 .../{qbz-slint => qbz}/src/favorites_prefs.rs | 0 crates/{qbz-slint => qbz}/src/folders.rs | 0 crates/{qbz-slint => qbz}/src/foryou.rs | 0 crates/{qbz-slint => qbz}/src/genre_filter.rs | 0 crates/{qbz-slint => qbz}/src/home.rs | 0 crates/{qbz-slint => qbz}/src/immersive.rs | 0 crates/{qbz-slint => qbz}/src/info_modals.rs | 0 crates/{qbz-slint => qbz}/src/keybindings.rs | 0 crates/{qbz-slint => qbz}/src/label.rs | 0 crates/{qbz-slint => qbz}/src/library_db.rs | 0 .../{qbz-slint => qbz}/src/link_resolver.rs | 0 .../{qbz-slint => qbz}/src/local_library.rs | 0 .../src/local_library_settings.rs | 0 .../{qbz-slint => qbz}/src/local_playlist.rs | 0 .../src/locallibrary_prefs.rs | 0 .../{qbz-slint => qbz}/src/location_view.rs | 0 crates/{qbz-slint => qbz}/src/lyrics.rs | 0 .../{qbz-slint => qbz}/src/lyrics_measure.rs | 2 +- crates/{qbz-slint => qbz}/src/lyrics_prefs.rs | 0 crates/{qbz-slint => qbz}/src/lyrics_sync.rs | 0 crates/{qbz-slint => qbz}/src/main.rs | 8 +- .../{qbz-slint => qbz}/src/media_controls.rs | 0 crates/{qbz-slint => qbz}/src/miniplayer.rs | 0 crates/{qbz-slint => qbz}/src/mix.rs | 0 crates/{qbz-slint => qbz}/src/musician.rs | 0 crates/{qbz-slint => qbz}/src/myqbz.rs | 0 crates/{qbz-slint => qbz}/src/myqbz_add.rs | 0 .../{qbz-slint => qbz}/src/myqbz_builder.rs | 0 crates/{qbz-slint => qbz}/src/myqbz_cover.rs | 0 crates/{qbz-slint => qbz}/src/myqbz_detail.rs | 0 crates/{qbz-slint => qbz}/src/myqbz_edit.rs | 0 crates/{qbz-slint => qbz}/src/myqbz_mix.rs | 0 crates/{qbz-slint => qbz}/src/myqbz_play.rs | 0 crates/{qbz-slint => qbz}/src/myqbz_prefs.rs | 0 .../src/myqbz_view_prefs.rs | 0 crates/{qbz-slint => qbz}/src/nav.rs | 0 crates/{qbz-slint => qbz}/src/offline.rs | 0 .../{qbz-slint => qbz}/src/offline_cache.rs | 0 .../src/offline_favorites.rs | 0 .../{qbz-slint => qbz}/src/offline_manager.rs | 0 crates/{qbz-slint => qbz}/src/offline_mode.rs | 0 crates/{qbz-slint => qbz}/src/play_history.rs | 0 crates/{qbz-slint => qbz}/src/playback.rs | 0 crates/{qbz-slint => qbz}/src/playlist.rs | 0 .../{qbz-slint => qbz}/src/playlist_import.rs | 0 .../src/playlist_manager.rs | 0 .../{qbz-slint => qbz}/src/playlist_picker.rs | 0 .../src/playlist_snapshot.rs | 0 crates/{qbz-slint => qbz}/src/plex_auth.rs | 0 .../{qbz-slint => qbz}/src/plex_settings.rs | 0 crates/{qbz-slint => qbz}/src/purchases.rs | 0 .../{qbz-slint => qbz}/src/qconnect_engine.rs | 0 .../src/qconnect_event_sink.rs | 0 .../src/qconnect_service.rs | 0 .../src/qconnect_transport.rs | 0 crates/{qbz-slint => qbz}/src/quality.rs | 0 crates/{qbz-slint => qbz}/src/queue.rs | 0 crates/{qbz-slint => qbz}/src/recently.rs | 0 .../{qbz-slint => qbz}/src/remote_stream.rs | 0 crates/{qbz-slint => qbz}/src/scrobble.rs | 0 .../src/scrobbler_settings.rs | 0 crates/{qbz-slint => qbz}/src/search.rs | 0 .../{qbz-slint => qbz}/src/search_service.rs | 0 .../{qbz-slint => qbz}/src/session_persist.rs | 0 crates/{qbz-slint => qbz}/src/settings.rs | 0 .../{qbz-slint => qbz}/src/shader_underlay.rs | 6 +- crates/{qbz-slint => qbz}/src/share.rs | 0 crates/{qbz-slint => qbz}/src/sidebar.rs | 0 crates/{qbz-slint => qbz}/src/strip_html.rs | 0 crates/{qbz-slint => qbz}/src/suggestions.rs | 0 crates/{qbz-slint => qbz}/src/tag_editor.rs | 0 crates/{qbz-slint => qbz}/src/theme.rs | 0 crates/{qbz-slint => qbz}/src/toast.rs | 0 crates/{qbz-slint => qbz}/src/tray/linux.rs | 0 crates/{qbz-slint => qbz}/src/tray/macos.rs | 0 crates/{qbz-slint => qbz}/src/tray/mod.rs | 0 .../{qbz-slint => qbz}/src/tray_settings.rs | 0 crates/{qbz-slint => qbz}/src/ui_prefs.rs | 0 crates/{qbz-slint => qbz}/src/visualizer.rs | 0 scripts/slint-dev-fast.sh | 2 +- scripts/slint-dev-mac.sh | 4 +- scripts/slint-dev.sh | 2 +- scripts/slint-run.sh | 6 +- 465 files changed, 129 insertions(+), 89 deletions(-) create mode 100644 crates/qbz-ui/Cargo.toml rename crates/{qbz-slint => qbz-ui}/build.rs (100%) create mode 100644 crates/qbz-ui/src/lib.rs rename crates/{qbz-slint/translations/de/LC_MESSAGES/qbz-slint.po => qbz-ui/translations/de/LC_MESSAGES/qbz-ui.po} (100%) rename crates/{qbz-slint/translations/en/LC_MESSAGES/qbz-slint.po => qbz-ui/translations/en/LC_MESSAGES/qbz-ui.po} (100%) rename crates/{qbz-slint/translations/es/LC_MESSAGES/qbz-slint.po => qbz-ui/translations/es/LC_MESSAGES/qbz-ui.po} (100%) rename crates/{qbz-slint/translations/fr/LC_MESSAGES/qbz-slint.po => qbz-ui/translations/fr/LC_MESSAGES/qbz-ui.po} (100%) rename crates/{qbz-slint/translations/pt/LC_MESSAGES/qbz-slint.po => qbz-ui/translations/pt/LC_MESSAGES/qbz-ui.po} (100%) rename crates/{qbz-slint => qbz-ui}/ui/album/AlbumBookletModal.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/album/AlbumCreditsModal.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/album/AlbumPageView.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/album/LocalAlbumView.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/album/TrackInfoModal.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/app.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/artist/ArtistPageView.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/artist/ArtistReleasesView.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/artist/ReleaseGrid.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/cd.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/fonts/Inter_18pt-Bold.ttf (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/fonts/Inter_18pt-Medium.ttf (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/fonts/Inter_18pt-Regular.ttf (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/fonts/Inter_18pt-SemiBold.ttf (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/hi-res.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/add-to-list.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/align-start-vertical.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/apple-music-logo.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/arrow-left.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/arrow-up-down.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/audio-lines.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/award.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/blind-eye.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/book-open.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/brand-discogs.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/brand-lastfm.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/brand-musicbrainz.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/bug.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/captions.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/cassette-tape.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/cassette.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/cast.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/cat.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/chart-no-axes-column.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/check.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/chevron-down.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/chevron-left.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/chevron-right.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/chevron-up.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/circle-alert.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/circle-check-big.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/circle-dot.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/circle-stop.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/circle.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/clock.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/cloud-download.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/cloud-off.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/cloud-upload.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/collection.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/compass.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/copy.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/crown.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/deezer-logo.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/disc-3.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/disc-album.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/disc.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/download.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/element-connect.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/ellipsis.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/external-link.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/eye-off.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/eye.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/folder-check.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/folder-open.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/folder-plus.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/folder-tree.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/folder.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/gandalf.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/globe.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/grip-vertical.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/hard-drive.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/heart-filled.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/heart.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/home-gear.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/image-plus.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/image.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/import.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/infinity.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/info.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/keyboard.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/layers.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/layout-grid.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/library-big.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/library.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/link.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/list-end.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/list-filter.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/list-music.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/list-ordered.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/list-plus.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/list-x.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/list.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/loader-circle.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/lock-open.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/lock.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/log-out.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/map-pin.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/maximize-2.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/menu.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/mic-vocal.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/minimize-2.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/minus.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/monitor-speaker.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/monitor.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/move.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/music-library-2.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/music.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/my-qbz.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/network.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/panel-left.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/panel-right-close.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/pause.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/pen-line.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/pencil.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/picture-in-picture-2.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/play-fill.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/play.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/plex-logo.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/plus.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/qbz-symbolic.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/qobuz-logo-filled.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/qobuz-logo.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/radio.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/refresh-cw.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/repeat-1.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/repeat.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/rotate-ccw.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/rows-3.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/search.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/settings-2.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/settings.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/shopping-bag.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/shuffle.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/skip-back.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/skip-forward.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/sliders-horizontal.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/smartphone.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/speaker.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/spotify-logo.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/square-check-big.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/square.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/star.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/thumbs-down.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/tidal-tidal.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/trash-2.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/trash-list.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/triangle-alert.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/turntable.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/user-plus.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/user.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/volume-2.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/volume-x.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/wifi.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/icons/x.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/laurels.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/mp3.svg (100%) rename crates/{qbz-slint => qbz-ui}/ui/assets/qbz-logo.png (100%) rename crates/{qbz-slint => qbz-ui}/ui/award/AwardAlbumsView.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/award/AwardView.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/discover/AlbumCard.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/discover/AlbumCollectionView.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/discover/ArtistCard.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/discover/ArtistCarousel.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/discover/Carousel.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/discover/DiscoverBrowseView.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/discover/DiscoverConfigModal.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/discover/ForYouView.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/discover/GenreFilterPopup.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/discover/GridSection.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/discover/HomeSkeleton.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/discover/HomeView.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/discover/PlaylistCard.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/discover/PlaylistCarousel.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/discover/PlaylistCollage.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/discover/PlaylistTagFilter.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/discover/QobuzMixesRow.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/discover/RadioCard.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/discover/SlimCard.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/discover/SlimCarousel.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/discover/Spotlight.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/favorites/FavoritesOfflineRail.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/favorites/FavoritesView.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/focus-state.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/foundation/layout.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/foundation/palette.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/foundation/radius.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/foundation/semantic-colors.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/foundation/spacing.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/foundation/theme-state.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/foundation/theme.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/foundation/typography.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/immersive/AlbumReactivePanel.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/immersive/CoverflowPanel.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/immersive/ImmersiveAtmosphere.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/immersive/ImmersiveLyricsFocusPanel.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/immersive/ImmersiveQueuePanel.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/immersive/ImmersiveSearchCortinilla.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/immersive/ImmersiveSuggestionsPanel.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/immersive/ImmersiveTrackInfo.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/immersive/ImmersiveTrackInfoPanel.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/immersive/ImmersiveView.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/immersive/SpectrumPanel.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/immersive/StaticPanel.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/label/LabelPageView.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/label/LabelReleasesView.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/locallibrary/LocalLibraryView.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/location/ArtistsByLocationView.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/login/LoginScreen.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/miniplayer/MiniArtworkSurface.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/miniplayer/MiniBits.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/miniplayer/MiniCompactSurface.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/miniplayer/MiniFooter.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/miniplayer/MiniLyricsSurface.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/miniplayer/MiniQueueSurface.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/miniplayer/MiniShell.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/miniplayer/MiniWindowControls.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/mix/MixView.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/musician/MusicianPageView.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/myqbz/AddToMixtapeModal.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/myqbz/CollectionMosaic.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/myqbz/CollectionsView.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/myqbz/CreateMyQbzModal.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/myqbz/DiscographyBuilderView.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/myqbz/MixtapeDetailView.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/myqbz/MixtapesView.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/myqbz/MyQbzEditModal.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/myqbz/MyQbzMixModal.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/myqbz/MyQbzShared.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/offline/OfflineManagerView.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/offline/OfflinePlaceholder.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/playlist/PlaylistManagerView.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/playlist/PlaylistView.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/primitives/AlbumContextMenu.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/primitives/AlbumListRow.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/primitives/BarControls.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/primitives/CircleAction.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/primitives/CommandBlock.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/primitives/ContextMenu.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/primitives/ContextMenuItem.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/primitives/CreateFolderModal.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/primitives/CreatePlaylistModal.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/primitives/DacWizardModal.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/primitives/DiscContextMenu.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/primitives/DiscHeaderMenu.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/primitives/DragGhost.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/primitives/EditPlaylistModal.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/primitives/EphemeralPlayChoiceModal.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/primitives/ExpandableSearch.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/primitives/FolderEditModal.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/primitives/JumpNavBar.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/primitives/ListScrollbar.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/primitives/LoadingDots.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/primitives/LoadingSpinner.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/primitives/MultiSelectBar.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/primitives/PlaylistDuplicateConfirmModal.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/primitives/PlaylistImportModal.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/primitives/PlaylistPickerModal.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/primitives/PmCollage.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/primitives/PmFolderIcon.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/primitives/QbzCheckbox.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/primitives/QbzIcon.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/primitives/QbzPrimaryButton.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/primitives/QbzSelect.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/primitives/QbzSlider.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/primitives/QbzTextLink.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/primitives/QbzToggle.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/primitives/QbzVerticalSlider.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/primitives/QualityBadge.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/primitives/QualityBadgeFull.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/primitives/SearchTrackHero.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/primitives/SecondaryButton.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/primitives/SegmentedTabBar.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/primitives/SelectionCheckbox.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/primitives/SidebarPlaylistCollage.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/primitives/SourceGlyph.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/primitives/TagEditorModal.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/primitives/Toast.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/primitives/ToggleButton.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/primitives/TrackContextMenu.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/primitives/TrackPlayCell.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/primitives/TrackRow.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/primitives/WarningBanner.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/purchases/PurchaseDetailView.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/purchases/PurchasesView.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/search/Cortinilla.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/search/SearchResultsView.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/settings/AppearanceSettings.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/settings/AudioSettings.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/settings/BlacklistManagerView.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/settings/ContentFilteringSettings.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/settings/DeveloperSettings.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/settings/IntegrationsSettings.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/settings/LibFolderEditModal.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/settings/LocalLibrarySettings.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/settings/OfflineSettings.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/settings/PlaybackSettings.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/settings/SettingRow.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/settings/SettingsView.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/shaders/aurora.wgsl (100%) rename crates/{qbz-slint => qbz-ui}/ui/shaders/plasma.wgsl (100%) rename crates/{qbz-slint => qbz-ui}/ui/shaders/tunnel.wgsl (100%) rename crates/{qbz-slint => qbz-ui}/ui/shell/AppShell.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/shell/ArtPreviewOverlay.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/shell/AudioStamp.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/shell/CastPicker.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/shell/CustomizeShortcutsModal.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/shell/HeaderBar.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/shell/HeaderMenuOverlay.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/shell/KeyboardShortcutsModal.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/shell/LinkResolverModal.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/shell/LyricsControlsFlyout.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/shell/LyricsLinesView.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/shell/LyricsSidebar.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/shell/NavButtons.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/shell/NavMenuItem.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/shell/NowPlayingBar.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/shell/PlayerBar.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/shell/PlayerBarSmall.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/shell/QconnectDevModal.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/shell/QueueSidebar.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/shell/SeekBar.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/shell/Sidebar.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/shell/SidebarFolderPopup.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/shell/SidebarNowPlayingDock.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/shell/SidebarPlaylistsPopup.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/shell/SidebarTooltip.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/shell/SongCard.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/shell/TooltipOverlay.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/shell/TransportControls.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/splash/SplashScreen.slint (100%) rename crates/{qbz-slint => qbz-ui}/ui/state.slint (100%) rename crates/{qbz-slint => qbz}/Cargo.toml (98%) rename crates/{qbz-slint => qbz}/icons/tray-color-22.png (100%) rename crates/{qbz-slint => qbz}/icons/tray-color-32.png (100%) rename crates/{qbz-slint => qbz}/icons/tray-color-44.png (100%) rename crates/{qbz-slint => qbz}/icons/tray-color-64.png (100%) rename crates/{qbz-slint => qbz}/icons/tray-dark-22.png (100%) rename crates/{qbz-slint => qbz}/icons/tray-dark-32.png (100%) rename crates/{qbz-slint => qbz}/icons/tray-dark-44.png (100%) rename crates/{qbz-slint => qbz}/icons/tray-dark-64.png (100%) rename crates/{qbz-slint => qbz}/icons/tray-light-22.png (100%) rename crates/{qbz-slint => qbz}/icons/tray-light-32.png (100%) rename crates/{qbz-slint => qbz}/icons/tray-light-44.png (100%) rename crates/{qbz-slint => qbz}/icons/tray-light-64.png (100%) rename crates/{qbz-slint => qbz}/src/adapter.rs (100%) rename crates/{qbz-slint => qbz}/src/album.rs (100%) rename crates/{qbz-slint => qbz}/src/album_map.rs (100%) rename crates/{qbz-slint => qbz}/src/artist.rs (100%) rename crates/{qbz-slint => qbz}/src/artist_blacklist.rs (100%) rename crates/{qbz-slint => qbz}/src/artist_prefs.rs (100%) rename crates/{qbz-slint => qbz}/src/artist_releases.rs (100%) rename crates/{qbz-slint => qbz}/src/artwork.rs (100%) rename crates/{qbz-slint => qbz}/src/auth.rs (100%) rename crates/{qbz-slint => qbz}/src/award.rs (100%) rename crates/{qbz-slint => qbz}/src/blacklist_manager.rs (100%) rename crates/{qbz-slint => qbz}/src/booklet.rs (100%) rename crates/{qbz-slint => qbz}/src/cast_service.rs (100%) rename crates/{qbz-slint => qbz}/src/commands.rs (100%) rename crates/{qbz-slint => qbz}/src/custom_artwork.rs (100%) rename crates/{qbz-slint => qbz}/src/dac_wizard.rs (100%) rename crates/{qbz-slint => qbz}/src/dates.rs (100%) rename crates/{qbz-slint => qbz}/src/discord_rpc.rs (100%) rename crates/{qbz-slint => qbz}/src/discover_browse.rs (100%) rename crates/{qbz-slint => qbz}/src/discover_prefs.rs (100%) rename crates/{qbz-slint => qbz}/src/discovery_dismiss.rs (100%) rename crates/{qbz-slint => qbz}/src/drag.rs (100%) rename crates/{qbz-slint => qbz}/src/ephemeral.rs (100%) rename crates/{qbz-slint => qbz}/src/fav_cache.rs (100%) rename crates/{qbz-slint => qbz}/src/favorites.rs (100%) rename crates/{qbz-slint => qbz}/src/favorites_prefs.rs (100%) rename crates/{qbz-slint => qbz}/src/folders.rs (100%) rename crates/{qbz-slint => qbz}/src/foryou.rs (100%) rename crates/{qbz-slint => qbz}/src/genre_filter.rs (100%) rename crates/{qbz-slint => qbz}/src/home.rs (100%) rename crates/{qbz-slint => qbz}/src/immersive.rs (100%) rename crates/{qbz-slint => qbz}/src/info_modals.rs (100%) rename crates/{qbz-slint => qbz}/src/keybindings.rs (100%) rename crates/{qbz-slint => qbz}/src/label.rs (100%) rename crates/{qbz-slint => qbz}/src/library_db.rs (100%) rename crates/{qbz-slint => qbz}/src/link_resolver.rs (100%) rename crates/{qbz-slint => qbz}/src/local_library.rs (100%) rename crates/{qbz-slint => qbz}/src/local_library_settings.rs (100%) rename crates/{qbz-slint => qbz}/src/local_playlist.rs (100%) rename crates/{qbz-slint => qbz}/src/locallibrary_prefs.rs (100%) rename crates/{qbz-slint => qbz}/src/location_view.rs (100%) rename crates/{qbz-slint => qbz}/src/lyrics.rs (100%) rename crates/{qbz-slint => qbz}/src/lyrics_measure.rs (99%) rename crates/{qbz-slint => qbz}/src/lyrics_prefs.rs (100%) rename crates/{qbz-slint => qbz}/src/lyrics_sync.rs (100%) rename crates/{qbz-slint => qbz}/src/main.rs (99%) rename crates/{qbz-slint => qbz}/src/media_controls.rs (100%) rename crates/{qbz-slint => qbz}/src/miniplayer.rs (100%) rename crates/{qbz-slint => qbz}/src/mix.rs (100%) rename crates/{qbz-slint => qbz}/src/musician.rs (100%) rename crates/{qbz-slint => qbz}/src/myqbz.rs (100%) rename crates/{qbz-slint => qbz}/src/myqbz_add.rs (100%) rename crates/{qbz-slint => qbz}/src/myqbz_builder.rs (100%) rename crates/{qbz-slint => qbz}/src/myqbz_cover.rs (100%) rename crates/{qbz-slint => qbz}/src/myqbz_detail.rs (100%) rename crates/{qbz-slint => qbz}/src/myqbz_edit.rs (100%) rename crates/{qbz-slint => qbz}/src/myqbz_mix.rs (100%) rename crates/{qbz-slint => qbz}/src/myqbz_play.rs (100%) rename crates/{qbz-slint => qbz}/src/myqbz_prefs.rs (100%) rename crates/{qbz-slint => qbz}/src/myqbz_view_prefs.rs (100%) rename crates/{qbz-slint => qbz}/src/nav.rs (100%) rename crates/{qbz-slint => qbz}/src/offline.rs (100%) rename crates/{qbz-slint => qbz}/src/offline_cache.rs (100%) rename crates/{qbz-slint => qbz}/src/offline_favorites.rs (100%) rename crates/{qbz-slint => qbz}/src/offline_manager.rs (100%) rename crates/{qbz-slint => qbz}/src/offline_mode.rs (100%) rename crates/{qbz-slint => qbz}/src/play_history.rs (100%) rename crates/{qbz-slint => qbz}/src/playback.rs (100%) rename crates/{qbz-slint => qbz}/src/playlist.rs (100%) rename crates/{qbz-slint => qbz}/src/playlist_import.rs (100%) rename crates/{qbz-slint => qbz}/src/playlist_manager.rs (100%) rename crates/{qbz-slint => qbz}/src/playlist_picker.rs (100%) rename crates/{qbz-slint => qbz}/src/playlist_snapshot.rs (100%) rename crates/{qbz-slint => qbz}/src/plex_auth.rs (100%) rename crates/{qbz-slint => qbz}/src/plex_settings.rs (100%) rename crates/{qbz-slint => qbz}/src/purchases.rs (100%) rename crates/{qbz-slint => qbz}/src/qconnect_engine.rs (100%) rename crates/{qbz-slint => qbz}/src/qconnect_event_sink.rs (100%) rename crates/{qbz-slint => qbz}/src/qconnect_service.rs (100%) rename crates/{qbz-slint => qbz}/src/qconnect_transport.rs (100%) rename crates/{qbz-slint => qbz}/src/quality.rs (100%) rename crates/{qbz-slint => qbz}/src/queue.rs (100%) rename crates/{qbz-slint => qbz}/src/recently.rs (100%) rename crates/{qbz-slint => qbz}/src/remote_stream.rs (100%) rename crates/{qbz-slint => qbz}/src/scrobble.rs (100%) rename crates/{qbz-slint => qbz}/src/scrobbler_settings.rs (100%) rename crates/{qbz-slint => qbz}/src/search.rs (100%) rename crates/{qbz-slint => qbz}/src/search_service.rs (100%) rename crates/{qbz-slint => qbz}/src/session_persist.rs (100%) rename crates/{qbz-slint => qbz}/src/settings.rs (100%) rename crates/{qbz-slint => qbz}/src/shader_underlay.rs (98%) rename crates/{qbz-slint => qbz}/src/share.rs (100%) rename crates/{qbz-slint => qbz}/src/sidebar.rs (100%) rename crates/{qbz-slint => qbz}/src/strip_html.rs (100%) rename crates/{qbz-slint => qbz}/src/suggestions.rs (100%) rename crates/{qbz-slint => qbz}/src/tag_editor.rs (100%) rename crates/{qbz-slint => qbz}/src/theme.rs (100%) rename crates/{qbz-slint => qbz}/src/toast.rs (100%) rename crates/{qbz-slint => qbz}/src/tray/linux.rs (100%) rename crates/{qbz-slint => qbz}/src/tray/macos.rs (100%) rename crates/{qbz-slint => qbz}/src/tray/mod.rs (100%) rename crates/{qbz-slint => qbz}/src/tray_settings.rs (100%) rename crates/{qbz-slint => qbz}/src/ui_prefs.rs (100%) rename crates/{qbz-slint => qbz}/src/visualizer.rs (100%) diff --git a/.github/workflows/build-slint-selfhosted.yml b/.github/workflows/build-slint-selfhosted.yml index 16b850e8b..e0ed711c3 100644 --- a/.github/workflows/build-slint-selfhosted.yml +++ b/.github/workflows/build-slint-selfhosted.yml @@ -41,14 +41,14 @@ jobs: - name: Strip + report size run: | - BIN=crates/target/release/qbz-slint + BIN=crates/target/release/qbz echo "unstripped:"; ls -lh "$BIN" | awk '{print $5}' - cp "$BIN" qbz-slint-linux-x86_64 - strip qbz-slint-linux-x86_64 || true - echo "stripped:"; ls -lh qbz-slint-linux-x86_64 | awk '{print $5}' + cp "$BIN" qbz-linux-x86_64 + strip qbz-linux-x86_64 || true + echo "stripped:"; ls -lh qbz-linux-x86_64 | awk '{print $5}' - uses: actions/upload-artifact@v4 with: - name: qbz-slint-linux-x86_64 - path: qbz-slint-linux-x86_64 + name: qbz-linux-x86_64 + path: qbz-linux-x86_64 if-no-files-found: error diff --git a/.github/workflows/build-slint.yml b/.github/workflows/build-slint.yml index a54917ffd..e65ed9e26 100644 --- a/.github/workflows/build-slint.yml +++ b/.github/workflows/build-slint.yml @@ -72,12 +72,12 @@ jobs: CARGO_PROFILE_RELEASE_OPT_LEVEL: '2' RUSTFLAGS: '-C target-feature=+aes,+ssse3 -C link-arg=-fuse-ld=mold -Z threads=1' run: | - cargo +nightly build --release --manifest-path crates/Cargo.toml -p qbz-slint - echo "::group::result"; ls -lh crates/target/release/qbz-slint; df -h /; free -h; echo "::endgroup::" + cargo +nightly build --release --manifest-path crates/Cargo.toml -p qbz + echo "::group::result"; ls -lh crates/target/release/qbz; df -h /; free -h; echo "::endgroup::" - name: Upload binary uses: actions/upload-artifact@v4 with: - name: qbz-slint-linux-x86_64 - path: crates/target/release/qbz-slint + name: qbz-linux-x86_64 + path: crates/target/release/qbz if-no-files-found: error diff --git a/crates/Cargo.lock b/crates/Cargo.lock index d374568be..ada77f1a7 100644 --- a/crates/Cargo.lock +++ b/crates/Cargo.lock @@ -5506,6 +5506,61 @@ version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b5a041e753da8b807c9255f28de81879c78c876392ff2469cde94799b2896b9d" +[[package]] +name = "qbz" +version = "0.1.0" +dependencies = [ + "arboard", + "async-trait", + "chrono", + "dirs 5.0.1", + "env_logger", + "futures-util", + "i-slint-backend-winit", + "image", + "ksni", + "log", + "objc2 0.5.2", + "objc2-app-kit 0.2.2", + "objc2-foundation 0.2.2", + "open", + "qbz-app", + "qbz-audio", + "qbz-booklet", + "qbz-cache", + "qbz-cast", + "qbz-core", + "qbz-credentials", + "qbz-i18n", + "qbz-integrations", + "qbz-library", + "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-theme", + "qbz-ui", + "qconnect-app", + "qconnect-transport-ws", + "rand 0.10.1", + "reqwest", + "rfd", + "rusqlite", + "serde", + "serde_json", + "slint", + "swash", + "tokio", + "urlencoding", + "uuid 1.22.0", +] + [[package]] name = "qbz-app" version = "0.1.0" @@ -5885,61 +5940,6 @@ dependencies = [ "uuid 1.22.0", ] -[[package]] -name = "qbz-slint" -version = "0.1.0" -dependencies = [ - "arboard", - "async-trait", - "chrono", - "dirs 5.0.1", - "env_logger", - "futures-util", - "i-slint-backend-winit", - "image", - "ksni", - "log", - "objc2 0.5.2", - "objc2-app-kit 0.2.2", - "objc2-foundation 0.2.2", - "open", - "qbz-app", - "qbz-audio", - "qbz-booklet", - "qbz-cache", - "qbz-cast", - "qbz-core", - "qbz-credentials", - "qbz-i18n", - "qbz-integrations", - "qbz-library", - "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-theme", - "qconnect-app", - "qconnect-transport-ws", - "rand 0.10.1", - "reqwest", - "rfd", - "rusqlite", - "serde", - "serde_json", - "slint", - "slint-build", - "swash", - "tokio", - "urlencoding", - "uuid 1.22.0", -] - [[package]] name = "qbz-theme" version = "0.1.0" @@ -5947,6 +5947,14 @@ dependencies = [ "serde", ] +[[package]] +name = "qbz-ui" +version = "0.1.0" +dependencies = [ + "slint", + "slint-build", +] + [[package]] name = "qconnect-app" version = "0.1.0" diff --git a/crates/Cargo.toml b/crates/Cargo.toml index 1db814822..bf6a94884 100644 --- a/crates/Cargo.toml +++ b/crates/Cargo.toml @@ -22,7 +22,8 @@ members = [ "qconnect-protocol", "qconnect-transport-ws", "qconnect-app", - "qbz-slint", + "qbz-ui", + "qbz", "qbz-credentials", "qbz-media-controls", "qbz-mixtape", diff --git a/crates/qbz-i18n/src/lib.rs b/crates/qbz-i18n/src/lib.rs index 7408084c4..0e17cb928 100644 --- a/crates/qbz-i18n/src/lib.rs +++ b/crates/qbz-i18n/src/lib.rs @@ -18,11 +18,11 @@ const LANGS: [&str; 5] = ["en", "es", "de", "fr", "pt"]; /// Embedded `.po` sources. Path is relative to this file /// (`crates/qbz-i18n/src/lib.rs`): `../` = `qbz-i18n/`, `../../` = `crates/`. -const PO_EN: &str = include_str!("../../qbz-slint/translations/en/LC_MESSAGES/qbz-slint.po"); -const PO_ES: &str = include_str!("../../qbz-slint/translations/es/LC_MESSAGES/qbz-slint.po"); -const PO_DE: &str = include_str!("../../qbz-slint/translations/de/LC_MESSAGES/qbz-slint.po"); -const PO_FR: &str = include_str!("../../qbz-slint/translations/fr/LC_MESSAGES/qbz-slint.po"); -const PO_PT: &str = include_str!("../../qbz-slint/translations/pt/LC_MESSAGES/qbz-slint.po"); +const PO_EN: &str = include_str!("../../qbz-ui/translations/en/LC_MESSAGES/qbz-ui.po"); +const PO_ES: &str = include_str!("../../qbz-ui/translations/es/LC_MESSAGES/qbz-ui.po"); +const PO_DE: &str = include_str!("../../qbz-ui/translations/de/LC_MESSAGES/qbz-ui.po"); +const PO_FR: &str = include_str!("../../qbz-ui/translations/fr/LC_MESSAGES/qbz-ui.po"); +const PO_PT: &str = include_str!("../../qbz-ui/translations/pt/LC_MESSAGES/qbz-ui.po"); /// Current language index (0=en, 1=es, 2=de, 3=fr, 4=pt). Defaults to en. static CURRENT: AtomicU8 = AtomicU8::new(0); diff --git a/crates/qbz-ui/Cargo.toml b/crates/qbz-ui/Cargo.toml new file mode 100644 index 000000000..d397290a6 --- /dev/null +++ b/crates/qbz-ui/Cargo.toml @@ -0,0 +1,22 @@ +[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-slint/build.rs b/crates/qbz-ui/build.rs similarity index 100% rename from crates/qbz-slint/build.rs rename to crates/qbz-ui/build.rs diff --git a/crates/qbz-ui/src/lib.rs b/crates/qbz-ui/src/lib.rs new file mode 100644 index 000000000..1781cb733 --- /dev/null +++ b/crates/qbz-ui/src/lib.rs @@ -0,0 +1,8 @@ +//! 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-slint/translations/de/LC_MESSAGES/qbz-slint.po b/crates/qbz-ui/translations/de/LC_MESSAGES/qbz-ui.po similarity index 100% rename from crates/qbz-slint/translations/de/LC_MESSAGES/qbz-slint.po rename to crates/qbz-ui/translations/de/LC_MESSAGES/qbz-ui.po diff --git a/crates/qbz-slint/translations/en/LC_MESSAGES/qbz-slint.po b/crates/qbz-ui/translations/en/LC_MESSAGES/qbz-ui.po similarity index 100% rename from crates/qbz-slint/translations/en/LC_MESSAGES/qbz-slint.po rename to crates/qbz-ui/translations/en/LC_MESSAGES/qbz-ui.po diff --git a/crates/qbz-slint/translations/es/LC_MESSAGES/qbz-slint.po b/crates/qbz-ui/translations/es/LC_MESSAGES/qbz-ui.po similarity index 100% rename from crates/qbz-slint/translations/es/LC_MESSAGES/qbz-slint.po rename to crates/qbz-ui/translations/es/LC_MESSAGES/qbz-ui.po diff --git a/crates/qbz-slint/translations/fr/LC_MESSAGES/qbz-slint.po b/crates/qbz-ui/translations/fr/LC_MESSAGES/qbz-ui.po similarity index 100% rename from crates/qbz-slint/translations/fr/LC_MESSAGES/qbz-slint.po rename to crates/qbz-ui/translations/fr/LC_MESSAGES/qbz-ui.po diff --git a/crates/qbz-slint/translations/pt/LC_MESSAGES/qbz-slint.po b/crates/qbz-ui/translations/pt/LC_MESSAGES/qbz-ui.po similarity index 100% rename from crates/qbz-slint/translations/pt/LC_MESSAGES/qbz-slint.po rename to crates/qbz-ui/translations/pt/LC_MESSAGES/qbz-ui.po diff --git a/crates/qbz-slint/ui/album/AlbumBookletModal.slint b/crates/qbz-ui/ui/album/AlbumBookletModal.slint similarity index 100% rename from crates/qbz-slint/ui/album/AlbumBookletModal.slint rename to crates/qbz-ui/ui/album/AlbumBookletModal.slint diff --git a/crates/qbz-slint/ui/album/AlbumCreditsModal.slint b/crates/qbz-ui/ui/album/AlbumCreditsModal.slint similarity index 100% rename from crates/qbz-slint/ui/album/AlbumCreditsModal.slint rename to crates/qbz-ui/ui/album/AlbumCreditsModal.slint diff --git a/crates/qbz-slint/ui/album/AlbumPageView.slint b/crates/qbz-ui/ui/album/AlbumPageView.slint similarity index 100% rename from crates/qbz-slint/ui/album/AlbumPageView.slint rename to crates/qbz-ui/ui/album/AlbumPageView.slint diff --git a/crates/qbz-slint/ui/album/LocalAlbumView.slint b/crates/qbz-ui/ui/album/LocalAlbumView.slint similarity index 100% rename from crates/qbz-slint/ui/album/LocalAlbumView.slint rename to crates/qbz-ui/ui/album/LocalAlbumView.slint diff --git a/crates/qbz-slint/ui/album/TrackInfoModal.slint b/crates/qbz-ui/ui/album/TrackInfoModal.slint similarity index 100% rename from crates/qbz-slint/ui/album/TrackInfoModal.slint rename to crates/qbz-ui/ui/album/TrackInfoModal.slint diff --git a/crates/qbz-slint/ui/app.slint b/crates/qbz-ui/ui/app.slint similarity index 100% rename from crates/qbz-slint/ui/app.slint rename to crates/qbz-ui/ui/app.slint diff --git a/crates/qbz-slint/ui/artist/ArtistPageView.slint b/crates/qbz-ui/ui/artist/ArtistPageView.slint similarity index 100% rename from crates/qbz-slint/ui/artist/ArtistPageView.slint rename to crates/qbz-ui/ui/artist/ArtistPageView.slint diff --git a/crates/qbz-slint/ui/artist/ArtistReleasesView.slint b/crates/qbz-ui/ui/artist/ArtistReleasesView.slint similarity index 100% rename from crates/qbz-slint/ui/artist/ArtistReleasesView.slint rename to crates/qbz-ui/ui/artist/ArtistReleasesView.slint diff --git a/crates/qbz-slint/ui/artist/ReleaseGrid.slint b/crates/qbz-ui/ui/artist/ReleaseGrid.slint similarity index 100% rename from crates/qbz-slint/ui/artist/ReleaseGrid.slint rename to crates/qbz-ui/ui/artist/ReleaseGrid.slint diff --git a/crates/qbz-slint/ui/assets/cd.svg b/crates/qbz-ui/ui/assets/cd.svg similarity index 100% rename from crates/qbz-slint/ui/assets/cd.svg rename to crates/qbz-ui/ui/assets/cd.svg diff --git a/crates/qbz-slint/ui/assets/fonts/Inter_18pt-Bold.ttf b/crates/qbz-ui/ui/assets/fonts/Inter_18pt-Bold.ttf similarity index 100% rename from crates/qbz-slint/ui/assets/fonts/Inter_18pt-Bold.ttf rename to crates/qbz-ui/ui/assets/fonts/Inter_18pt-Bold.ttf diff --git a/crates/qbz-slint/ui/assets/fonts/Inter_18pt-Medium.ttf b/crates/qbz-ui/ui/assets/fonts/Inter_18pt-Medium.ttf similarity index 100% rename from crates/qbz-slint/ui/assets/fonts/Inter_18pt-Medium.ttf rename to crates/qbz-ui/ui/assets/fonts/Inter_18pt-Medium.ttf diff --git a/crates/qbz-slint/ui/assets/fonts/Inter_18pt-Regular.ttf b/crates/qbz-ui/ui/assets/fonts/Inter_18pt-Regular.ttf similarity index 100% rename from crates/qbz-slint/ui/assets/fonts/Inter_18pt-Regular.ttf rename to crates/qbz-ui/ui/assets/fonts/Inter_18pt-Regular.ttf diff --git a/crates/qbz-slint/ui/assets/fonts/Inter_18pt-SemiBold.ttf b/crates/qbz-ui/ui/assets/fonts/Inter_18pt-SemiBold.ttf similarity index 100% rename from crates/qbz-slint/ui/assets/fonts/Inter_18pt-SemiBold.ttf rename to crates/qbz-ui/ui/assets/fonts/Inter_18pt-SemiBold.ttf diff --git a/crates/qbz-slint/ui/assets/hi-res.svg b/crates/qbz-ui/ui/assets/hi-res.svg similarity index 100% rename from crates/qbz-slint/ui/assets/hi-res.svg rename to crates/qbz-ui/ui/assets/hi-res.svg diff --git a/crates/qbz-slint/ui/assets/icons/add-to-list.svg b/crates/qbz-ui/ui/assets/icons/add-to-list.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/add-to-list.svg rename to crates/qbz-ui/ui/assets/icons/add-to-list.svg diff --git a/crates/qbz-slint/ui/assets/icons/align-start-vertical.svg b/crates/qbz-ui/ui/assets/icons/align-start-vertical.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/align-start-vertical.svg rename to crates/qbz-ui/ui/assets/icons/align-start-vertical.svg diff --git a/crates/qbz-slint/ui/assets/icons/apple-music-logo.svg b/crates/qbz-ui/ui/assets/icons/apple-music-logo.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/apple-music-logo.svg rename to crates/qbz-ui/ui/assets/icons/apple-music-logo.svg diff --git a/crates/qbz-slint/ui/assets/icons/arrow-left.svg b/crates/qbz-ui/ui/assets/icons/arrow-left.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/arrow-left.svg rename to crates/qbz-ui/ui/assets/icons/arrow-left.svg diff --git a/crates/qbz-slint/ui/assets/icons/arrow-up-down.svg b/crates/qbz-ui/ui/assets/icons/arrow-up-down.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/arrow-up-down.svg rename to crates/qbz-ui/ui/assets/icons/arrow-up-down.svg diff --git a/crates/qbz-slint/ui/assets/icons/audio-lines.svg b/crates/qbz-ui/ui/assets/icons/audio-lines.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/audio-lines.svg rename to crates/qbz-ui/ui/assets/icons/audio-lines.svg diff --git a/crates/qbz-slint/ui/assets/icons/award.svg b/crates/qbz-ui/ui/assets/icons/award.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/award.svg rename to crates/qbz-ui/ui/assets/icons/award.svg diff --git a/crates/qbz-slint/ui/assets/icons/blind-eye.svg b/crates/qbz-ui/ui/assets/icons/blind-eye.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/blind-eye.svg rename to crates/qbz-ui/ui/assets/icons/blind-eye.svg diff --git a/crates/qbz-slint/ui/assets/icons/book-open.svg b/crates/qbz-ui/ui/assets/icons/book-open.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/book-open.svg rename to crates/qbz-ui/ui/assets/icons/book-open.svg diff --git a/crates/qbz-slint/ui/assets/icons/brand-discogs.svg b/crates/qbz-ui/ui/assets/icons/brand-discogs.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/brand-discogs.svg rename to crates/qbz-ui/ui/assets/icons/brand-discogs.svg diff --git a/crates/qbz-slint/ui/assets/icons/brand-lastfm.svg b/crates/qbz-ui/ui/assets/icons/brand-lastfm.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/brand-lastfm.svg rename to crates/qbz-ui/ui/assets/icons/brand-lastfm.svg diff --git a/crates/qbz-slint/ui/assets/icons/brand-musicbrainz.svg b/crates/qbz-ui/ui/assets/icons/brand-musicbrainz.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/brand-musicbrainz.svg rename to crates/qbz-ui/ui/assets/icons/brand-musicbrainz.svg diff --git a/crates/qbz-slint/ui/assets/icons/bug.svg b/crates/qbz-ui/ui/assets/icons/bug.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/bug.svg rename to crates/qbz-ui/ui/assets/icons/bug.svg diff --git a/crates/qbz-slint/ui/assets/icons/captions.svg b/crates/qbz-ui/ui/assets/icons/captions.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/captions.svg rename to crates/qbz-ui/ui/assets/icons/captions.svg diff --git a/crates/qbz-slint/ui/assets/icons/cassette-tape.svg b/crates/qbz-ui/ui/assets/icons/cassette-tape.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/cassette-tape.svg rename to crates/qbz-ui/ui/assets/icons/cassette-tape.svg diff --git a/crates/qbz-slint/ui/assets/icons/cassette.svg b/crates/qbz-ui/ui/assets/icons/cassette.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/cassette.svg rename to crates/qbz-ui/ui/assets/icons/cassette.svg diff --git a/crates/qbz-slint/ui/assets/icons/cast.svg b/crates/qbz-ui/ui/assets/icons/cast.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/cast.svg rename to crates/qbz-ui/ui/assets/icons/cast.svg diff --git a/crates/qbz-slint/ui/assets/icons/cat.svg b/crates/qbz-ui/ui/assets/icons/cat.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/cat.svg rename to crates/qbz-ui/ui/assets/icons/cat.svg diff --git a/crates/qbz-slint/ui/assets/icons/chart-no-axes-column.svg b/crates/qbz-ui/ui/assets/icons/chart-no-axes-column.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/chart-no-axes-column.svg rename to crates/qbz-ui/ui/assets/icons/chart-no-axes-column.svg diff --git a/crates/qbz-slint/ui/assets/icons/check.svg b/crates/qbz-ui/ui/assets/icons/check.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/check.svg rename to crates/qbz-ui/ui/assets/icons/check.svg diff --git a/crates/qbz-slint/ui/assets/icons/chevron-down.svg b/crates/qbz-ui/ui/assets/icons/chevron-down.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/chevron-down.svg rename to crates/qbz-ui/ui/assets/icons/chevron-down.svg diff --git a/crates/qbz-slint/ui/assets/icons/chevron-left.svg b/crates/qbz-ui/ui/assets/icons/chevron-left.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/chevron-left.svg rename to crates/qbz-ui/ui/assets/icons/chevron-left.svg diff --git a/crates/qbz-slint/ui/assets/icons/chevron-right.svg b/crates/qbz-ui/ui/assets/icons/chevron-right.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/chevron-right.svg rename to crates/qbz-ui/ui/assets/icons/chevron-right.svg diff --git a/crates/qbz-slint/ui/assets/icons/chevron-up.svg b/crates/qbz-ui/ui/assets/icons/chevron-up.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/chevron-up.svg rename to crates/qbz-ui/ui/assets/icons/chevron-up.svg diff --git a/crates/qbz-slint/ui/assets/icons/circle-alert.svg b/crates/qbz-ui/ui/assets/icons/circle-alert.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/circle-alert.svg rename to crates/qbz-ui/ui/assets/icons/circle-alert.svg diff --git a/crates/qbz-slint/ui/assets/icons/circle-check-big.svg b/crates/qbz-ui/ui/assets/icons/circle-check-big.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/circle-check-big.svg rename to crates/qbz-ui/ui/assets/icons/circle-check-big.svg diff --git a/crates/qbz-slint/ui/assets/icons/circle-dot.svg b/crates/qbz-ui/ui/assets/icons/circle-dot.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/circle-dot.svg rename to crates/qbz-ui/ui/assets/icons/circle-dot.svg diff --git a/crates/qbz-slint/ui/assets/icons/circle-stop.svg b/crates/qbz-ui/ui/assets/icons/circle-stop.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/circle-stop.svg rename to crates/qbz-ui/ui/assets/icons/circle-stop.svg diff --git a/crates/qbz-slint/ui/assets/icons/circle.svg b/crates/qbz-ui/ui/assets/icons/circle.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/circle.svg rename to crates/qbz-ui/ui/assets/icons/circle.svg diff --git a/crates/qbz-slint/ui/assets/icons/clock.svg b/crates/qbz-ui/ui/assets/icons/clock.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/clock.svg rename to crates/qbz-ui/ui/assets/icons/clock.svg diff --git a/crates/qbz-slint/ui/assets/icons/cloud-download.svg b/crates/qbz-ui/ui/assets/icons/cloud-download.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/cloud-download.svg rename to crates/qbz-ui/ui/assets/icons/cloud-download.svg diff --git a/crates/qbz-slint/ui/assets/icons/cloud-off.svg b/crates/qbz-ui/ui/assets/icons/cloud-off.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/cloud-off.svg rename to crates/qbz-ui/ui/assets/icons/cloud-off.svg diff --git a/crates/qbz-slint/ui/assets/icons/cloud-upload.svg b/crates/qbz-ui/ui/assets/icons/cloud-upload.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/cloud-upload.svg rename to crates/qbz-ui/ui/assets/icons/cloud-upload.svg diff --git a/crates/qbz-slint/ui/assets/icons/collection.svg b/crates/qbz-ui/ui/assets/icons/collection.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/collection.svg rename to crates/qbz-ui/ui/assets/icons/collection.svg diff --git a/crates/qbz-slint/ui/assets/icons/compass.svg b/crates/qbz-ui/ui/assets/icons/compass.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/compass.svg rename to crates/qbz-ui/ui/assets/icons/compass.svg diff --git a/crates/qbz-slint/ui/assets/icons/copy.svg b/crates/qbz-ui/ui/assets/icons/copy.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/copy.svg rename to crates/qbz-ui/ui/assets/icons/copy.svg diff --git a/crates/qbz-slint/ui/assets/icons/crown.svg b/crates/qbz-ui/ui/assets/icons/crown.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/crown.svg rename to crates/qbz-ui/ui/assets/icons/crown.svg diff --git a/crates/qbz-slint/ui/assets/icons/deezer-logo.svg b/crates/qbz-ui/ui/assets/icons/deezer-logo.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/deezer-logo.svg rename to crates/qbz-ui/ui/assets/icons/deezer-logo.svg diff --git a/crates/qbz-slint/ui/assets/icons/disc-3.svg b/crates/qbz-ui/ui/assets/icons/disc-3.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/disc-3.svg rename to crates/qbz-ui/ui/assets/icons/disc-3.svg diff --git a/crates/qbz-slint/ui/assets/icons/disc-album.svg b/crates/qbz-ui/ui/assets/icons/disc-album.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/disc-album.svg rename to crates/qbz-ui/ui/assets/icons/disc-album.svg diff --git a/crates/qbz-slint/ui/assets/icons/disc.svg b/crates/qbz-ui/ui/assets/icons/disc.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/disc.svg rename to crates/qbz-ui/ui/assets/icons/disc.svg diff --git a/crates/qbz-slint/ui/assets/icons/download.svg b/crates/qbz-ui/ui/assets/icons/download.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/download.svg rename to crates/qbz-ui/ui/assets/icons/download.svg diff --git a/crates/qbz-slint/ui/assets/icons/element-connect.svg b/crates/qbz-ui/ui/assets/icons/element-connect.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/element-connect.svg rename to crates/qbz-ui/ui/assets/icons/element-connect.svg diff --git a/crates/qbz-slint/ui/assets/icons/ellipsis.svg b/crates/qbz-ui/ui/assets/icons/ellipsis.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/ellipsis.svg rename to crates/qbz-ui/ui/assets/icons/ellipsis.svg diff --git a/crates/qbz-slint/ui/assets/icons/external-link.svg b/crates/qbz-ui/ui/assets/icons/external-link.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/external-link.svg rename to crates/qbz-ui/ui/assets/icons/external-link.svg diff --git a/crates/qbz-slint/ui/assets/icons/eye-off.svg b/crates/qbz-ui/ui/assets/icons/eye-off.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/eye-off.svg rename to crates/qbz-ui/ui/assets/icons/eye-off.svg diff --git a/crates/qbz-slint/ui/assets/icons/eye.svg b/crates/qbz-ui/ui/assets/icons/eye.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/eye.svg rename to crates/qbz-ui/ui/assets/icons/eye.svg diff --git a/crates/qbz-slint/ui/assets/icons/folder-check.svg b/crates/qbz-ui/ui/assets/icons/folder-check.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/folder-check.svg rename to crates/qbz-ui/ui/assets/icons/folder-check.svg diff --git a/crates/qbz-slint/ui/assets/icons/folder-open.svg b/crates/qbz-ui/ui/assets/icons/folder-open.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/folder-open.svg rename to crates/qbz-ui/ui/assets/icons/folder-open.svg diff --git a/crates/qbz-slint/ui/assets/icons/folder-plus.svg b/crates/qbz-ui/ui/assets/icons/folder-plus.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/folder-plus.svg rename to crates/qbz-ui/ui/assets/icons/folder-plus.svg diff --git a/crates/qbz-slint/ui/assets/icons/folder-tree.svg b/crates/qbz-ui/ui/assets/icons/folder-tree.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/folder-tree.svg rename to crates/qbz-ui/ui/assets/icons/folder-tree.svg diff --git a/crates/qbz-slint/ui/assets/icons/folder.svg b/crates/qbz-ui/ui/assets/icons/folder.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/folder.svg rename to crates/qbz-ui/ui/assets/icons/folder.svg diff --git a/crates/qbz-slint/ui/assets/icons/gandalf.svg b/crates/qbz-ui/ui/assets/icons/gandalf.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/gandalf.svg rename to crates/qbz-ui/ui/assets/icons/gandalf.svg diff --git a/crates/qbz-slint/ui/assets/icons/globe.svg b/crates/qbz-ui/ui/assets/icons/globe.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/globe.svg rename to crates/qbz-ui/ui/assets/icons/globe.svg diff --git a/crates/qbz-slint/ui/assets/icons/grip-vertical.svg b/crates/qbz-ui/ui/assets/icons/grip-vertical.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/grip-vertical.svg rename to crates/qbz-ui/ui/assets/icons/grip-vertical.svg diff --git a/crates/qbz-slint/ui/assets/icons/hard-drive.svg b/crates/qbz-ui/ui/assets/icons/hard-drive.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/hard-drive.svg rename to crates/qbz-ui/ui/assets/icons/hard-drive.svg diff --git a/crates/qbz-slint/ui/assets/icons/heart-filled.svg b/crates/qbz-ui/ui/assets/icons/heart-filled.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/heart-filled.svg rename to crates/qbz-ui/ui/assets/icons/heart-filled.svg diff --git a/crates/qbz-slint/ui/assets/icons/heart.svg b/crates/qbz-ui/ui/assets/icons/heart.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/heart.svg rename to crates/qbz-ui/ui/assets/icons/heart.svg diff --git a/crates/qbz-slint/ui/assets/icons/home-gear.svg b/crates/qbz-ui/ui/assets/icons/home-gear.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/home-gear.svg rename to crates/qbz-ui/ui/assets/icons/home-gear.svg diff --git a/crates/qbz-slint/ui/assets/icons/image-plus.svg b/crates/qbz-ui/ui/assets/icons/image-plus.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/image-plus.svg rename to crates/qbz-ui/ui/assets/icons/image-plus.svg diff --git a/crates/qbz-slint/ui/assets/icons/image.svg b/crates/qbz-ui/ui/assets/icons/image.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/image.svg rename to crates/qbz-ui/ui/assets/icons/image.svg diff --git a/crates/qbz-slint/ui/assets/icons/import.svg b/crates/qbz-ui/ui/assets/icons/import.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/import.svg rename to crates/qbz-ui/ui/assets/icons/import.svg diff --git a/crates/qbz-slint/ui/assets/icons/infinity.svg b/crates/qbz-ui/ui/assets/icons/infinity.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/infinity.svg rename to crates/qbz-ui/ui/assets/icons/infinity.svg diff --git a/crates/qbz-slint/ui/assets/icons/info.svg b/crates/qbz-ui/ui/assets/icons/info.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/info.svg rename to crates/qbz-ui/ui/assets/icons/info.svg diff --git a/crates/qbz-slint/ui/assets/icons/keyboard.svg b/crates/qbz-ui/ui/assets/icons/keyboard.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/keyboard.svg rename to crates/qbz-ui/ui/assets/icons/keyboard.svg diff --git a/crates/qbz-slint/ui/assets/icons/layers.svg b/crates/qbz-ui/ui/assets/icons/layers.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/layers.svg rename to crates/qbz-ui/ui/assets/icons/layers.svg diff --git a/crates/qbz-slint/ui/assets/icons/layout-grid.svg b/crates/qbz-ui/ui/assets/icons/layout-grid.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/layout-grid.svg rename to crates/qbz-ui/ui/assets/icons/layout-grid.svg diff --git a/crates/qbz-slint/ui/assets/icons/library-big.svg b/crates/qbz-ui/ui/assets/icons/library-big.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/library-big.svg rename to crates/qbz-ui/ui/assets/icons/library-big.svg diff --git a/crates/qbz-slint/ui/assets/icons/library.svg b/crates/qbz-ui/ui/assets/icons/library.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/library.svg rename to crates/qbz-ui/ui/assets/icons/library.svg diff --git a/crates/qbz-slint/ui/assets/icons/link.svg b/crates/qbz-ui/ui/assets/icons/link.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/link.svg rename to crates/qbz-ui/ui/assets/icons/link.svg diff --git a/crates/qbz-slint/ui/assets/icons/list-end.svg b/crates/qbz-ui/ui/assets/icons/list-end.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/list-end.svg rename to crates/qbz-ui/ui/assets/icons/list-end.svg diff --git a/crates/qbz-slint/ui/assets/icons/list-filter.svg b/crates/qbz-ui/ui/assets/icons/list-filter.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/list-filter.svg rename to crates/qbz-ui/ui/assets/icons/list-filter.svg diff --git a/crates/qbz-slint/ui/assets/icons/list-music.svg b/crates/qbz-ui/ui/assets/icons/list-music.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/list-music.svg rename to crates/qbz-ui/ui/assets/icons/list-music.svg diff --git a/crates/qbz-slint/ui/assets/icons/list-ordered.svg b/crates/qbz-ui/ui/assets/icons/list-ordered.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/list-ordered.svg rename to crates/qbz-ui/ui/assets/icons/list-ordered.svg diff --git a/crates/qbz-slint/ui/assets/icons/list-plus.svg b/crates/qbz-ui/ui/assets/icons/list-plus.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/list-plus.svg rename to crates/qbz-ui/ui/assets/icons/list-plus.svg diff --git a/crates/qbz-slint/ui/assets/icons/list-x.svg b/crates/qbz-ui/ui/assets/icons/list-x.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/list-x.svg rename to crates/qbz-ui/ui/assets/icons/list-x.svg diff --git a/crates/qbz-slint/ui/assets/icons/list.svg b/crates/qbz-ui/ui/assets/icons/list.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/list.svg rename to crates/qbz-ui/ui/assets/icons/list.svg diff --git a/crates/qbz-slint/ui/assets/icons/loader-circle.svg b/crates/qbz-ui/ui/assets/icons/loader-circle.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/loader-circle.svg rename to crates/qbz-ui/ui/assets/icons/loader-circle.svg diff --git a/crates/qbz-slint/ui/assets/icons/lock-open.svg b/crates/qbz-ui/ui/assets/icons/lock-open.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/lock-open.svg rename to crates/qbz-ui/ui/assets/icons/lock-open.svg diff --git a/crates/qbz-slint/ui/assets/icons/lock.svg b/crates/qbz-ui/ui/assets/icons/lock.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/lock.svg rename to crates/qbz-ui/ui/assets/icons/lock.svg diff --git a/crates/qbz-slint/ui/assets/icons/log-out.svg b/crates/qbz-ui/ui/assets/icons/log-out.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/log-out.svg rename to crates/qbz-ui/ui/assets/icons/log-out.svg diff --git a/crates/qbz-slint/ui/assets/icons/map-pin.svg b/crates/qbz-ui/ui/assets/icons/map-pin.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/map-pin.svg rename to crates/qbz-ui/ui/assets/icons/map-pin.svg diff --git a/crates/qbz-slint/ui/assets/icons/maximize-2.svg b/crates/qbz-ui/ui/assets/icons/maximize-2.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/maximize-2.svg rename to crates/qbz-ui/ui/assets/icons/maximize-2.svg diff --git a/crates/qbz-slint/ui/assets/icons/menu.svg b/crates/qbz-ui/ui/assets/icons/menu.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/menu.svg rename to crates/qbz-ui/ui/assets/icons/menu.svg diff --git a/crates/qbz-slint/ui/assets/icons/mic-vocal.svg b/crates/qbz-ui/ui/assets/icons/mic-vocal.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/mic-vocal.svg rename to crates/qbz-ui/ui/assets/icons/mic-vocal.svg diff --git a/crates/qbz-slint/ui/assets/icons/minimize-2.svg b/crates/qbz-ui/ui/assets/icons/minimize-2.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/minimize-2.svg rename to crates/qbz-ui/ui/assets/icons/minimize-2.svg diff --git a/crates/qbz-slint/ui/assets/icons/minus.svg b/crates/qbz-ui/ui/assets/icons/minus.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/minus.svg rename to crates/qbz-ui/ui/assets/icons/minus.svg diff --git a/crates/qbz-slint/ui/assets/icons/monitor-speaker.svg b/crates/qbz-ui/ui/assets/icons/monitor-speaker.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/monitor-speaker.svg rename to crates/qbz-ui/ui/assets/icons/monitor-speaker.svg diff --git a/crates/qbz-slint/ui/assets/icons/monitor.svg b/crates/qbz-ui/ui/assets/icons/monitor.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/monitor.svg rename to crates/qbz-ui/ui/assets/icons/monitor.svg diff --git a/crates/qbz-slint/ui/assets/icons/move.svg b/crates/qbz-ui/ui/assets/icons/move.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/move.svg rename to crates/qbz-ui/ui/assets/icons/move.svg diff --git a/crates/qbz-slint/ui/assets/icons/music-library-2.svg b/crates/qbz-ui/ui/assets/icons/music-library-2.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/music-library-2.svg rename to crates/qbz-ui/ui/assets/icons/music-library-2.svg diff --git a/crates/qbz-slint/ui/assets/icons/music.svg b/crates/qbz-ui/ui/assets/icons/music.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/music.svg rename to crates/qbz-ui/ui/assets/icons/music.svg diff --git a/crates/qbz-slint/ui/assets/icons/my-qbz.svg b/crates/qbz-ui/ui/assets/icons/my-qbz.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/my-qbz.svg rename to crates/qbz-ui/ui/assets/icons/my-qbz.svg diff --git a/crates/qbz-slint/ui/assets/icons/network.svg b/crates/qbz-ui/ui/assets/icons/network.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/network.svg rename to crates/qbz-ui/ui/assets/icons/network.svg diff --git a/crates/qbz-slint/ui/assets/icons/panel-left.svg b/crates/qbz-ui/ui/assets/icons/panel-left.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/panel-left.svg rename to crates/qbz-ui/ui/assets/icons/panel-left.svg diff --git a/crates/qbz-slint/ui/assets/icons/panel-right-close.svg b/crates/qbz-ui/ui/assets/icons/panel-right-close.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/panel-right-close.svg rename to crates/qbz-ui/ui/assets/icons/panel-right-close.svg diff --git a/crates/qbz-slint/ui/assets/icons/pause.svg b/crates/qbz-ui/ui/assets/icons/pause.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/pause.svg rename to crates/qbz-ui/ui/assets/icons/pause.svg diff --git a/crates/qbz-slint/ui/assets/icons/pen-line.svg b/crates/qbz-ui/ui/assets/icons/pen-line.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/pen-line.svg rename to crates/qbz-ui/ui/assets/icons/pen-line.svg diff --git a/crates/qbz-slint/ui/assets/icons/pencil.svg b/crates/qbz-ui/ui/assets/icons/pencil.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/pencil.svg rename to crates/qbz-ui/ui/assets/icons/pencil.svg diff --git a/crates/qbz-slint/ui/assets/icons/picture-in-picture-2.svg b/crates/qbz-ui/ui/assets/icons/picture-in-picture-2.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/picture-in-picture-2.svg rename to crates/qbz-ui/ui/assets/icons/picture-in-picture-2.svg diff --git a/crates/qbz-slint/ui/assets/icons/play-fill.svg b/crates/qbz-ui/ui/assets/icons/play-fill.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/play-fill.svg rename to crates/qbz-ui/ui/assets/icons/play-fill.svg diff --git a/crates/qbz-slint/ui/assets/icons/play.svg b/crates/qbz-ui/ui/assets/icons/play.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/play.svg rename to crates/qbz-ui/ui/assets/icons/play.svg diff --git a/crates/qbz-slint/ui/assets/icons/plex-logo.svg b/crates/qbz-ui/ui/assets/icons/plex-logo.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/plex-logo.svg rename to crates/qbz-ui/ui/assets/icons/plex-logo.svg diff --git a/crates/qbz-slint/ui/assets/icons/plus.svg b/crates/qbz-ui/ui/assets/icons/plus.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/plus.svg rename to crates/qbz-ui/ui/assets/icons/plus.svg diff --git a/crates/qbz-slint/ui/assets/icons/qbz-symbolic.svg b/crates/qbz-ui/ui/assets/icons/qbz-symbolic.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/qbz-symbolic.svg rename to crates/qbz-ui/ui/assets/icons/qbz-symbolic.svg diff --git a/crates/qbz-slint/ui/assets/icons/qobuz-logo-filled.svg b/crates/qbz-ui/ui/assets/icons/qobuz-logo-filled.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/qobuz-logo-filled.svg rename to crates/qbz-ui/ui/assets/icons/qobuz-logo-filled.svg diff --git a/crates/qbz-slint/ui/assets/icons/qobuz-logo.svg b/crates/qbz-ui/ui/assets/icons/qobuz-logo.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/qobuz-logo.svg rename to crates/qbz-ui/ui/assets/icons/qobuz-logo.svg diff --git a/crates/qbz-slint/ui/assets/icons/radio.svg b/crates/qbz-ui/ui/assets/icons/radio.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/radio.svg rename to crates/qbz-ui/ui/assets/icons/radio.svg diff --git a/crates/qbz-slint/ui/assets/icons/refresh-cw.svg b/crates/qbz-ui/ui/assets/icons/refresh-cw.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/refresh-cw.svg rename to crates/qbz-ui/ui/assets/icons/refresh-cw.svg diff --git a/crates/qbz-slint/ui/assets/icons/repeat-1.svg b/crates/qbz-ui/ui/assets/icons/repeat-1.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/repeat-1.svg rename to crates/qbz-ui/ui/assets/icons/repeat-1.svg diff --git a/crates/qbz-slint/ui/assets/icons/repeat.svg b/crates/qbz-ui/ui/assets/icons/repeat.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/repeat.svg rename to crates/qbz-ui/ui/assets/icons/repeat.svg diff --git a/crates/qbz-slint/ui/assets/icons/rotate-ccw.svg b/crates/qbz-ui/ui/assets/icons/rotate-ccw.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/rotate-ccw.svg rename to crates/qbz-ui/ui/assets/icons/rotate-ccw.svg diff --git a/crates/qbz-slint/ui/assets/icons/rows-3.svg b/crates/qbz-ui/ui/assets/icons/rows-3.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/rows-3.svg rename to crates/qbz-ui/ui/assets/icons/rows-3.svg diff --git a/crates/qbz-slint/ui/assets/icons/search.svg b/crates/qbz-ui/ui/assets/icons/search.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/search.svg rename to crates/qbz-ui/ui/assets/icons/search.svg diff --git a/crates/qbz-slint/ui/assets/icons/settings-2.svg b/crates/qbz-ui/ui/assets/icons/settings-2.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/settings-2.svg rename to crates/qbz-ui/ui/assets/icons/settings-2.svg diff --git a/crates/qbz-slint/ui/assets/icons/settings.svg b/crates/qbz-ui/ui/assets/icons/settings.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/settings.svg rename to crates/qbz-ui/ui/assets/icons/settings.svg diff --git a/crates/qbz-slint/ui/assets/icons/shopping-bag.svg b/crates/qbz-ui/ui/assets/icons/shopping-bag.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/shopping-bag.svg rename to crates/qbz-ui/ui/assets/icons/shopping-bag.svg diff --git a/crates/qbz-slint/ui/assets/icons/shuffle.svg b/crates/qbz-ui/ui/assets/icons/shuffle.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/shuffle.svg rename to crates/qbz-ui/ui/assets/icons/shuffle.svg diff --git a/crates/qbz-slint/ui/assets/icons/skip-back.svg b/crates/qbz-ui/ui/assets/icons/skip-back.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/skip-back.svg rename to crates/qbz-ui/ui/assets/icons/skip-back.svg diff --git a/crates/qbz-slint/ui/assets/icons/skip-forward.svg b/crates/qbz-ui/ui/assets/icons/skip-forward.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/skip-forward.svg rename to crates/qbz-ui/ui/assets/icons/skip-forward.svg diff --git a/crates/qbz-slint/ui/assets/icons/sliders-horizontal.svg b/crates/qbz-ui/ui/assets/icons/sliders-horizontal.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/sliders-horizontal.svg rename to crates/qbz-ui/ui/assets/icons/sliders-horizontal.svg diff --git a/crates/qbz-slint/ui/assets/icons/smartphone.svg b/crates/qbz-ui/ui/assets/icons/smartphone.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/smartphone.svg rename to crates/qbz-ui/ui/assets/icons/smartphone.svg diff --git a/crates/qbz-slint/ui/assets/icons/speaker.svg b/crates/qbz-ui/ui/assets/icons/speaker.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/speaker.svg rename to crates/qbz-ui/ui/assets/icons/speaker.svg diff --git a/crates/qbz-slint/ui/assets/icons/spotify-logo.svg b/crates/qbz-ui/ui/assets/icons/spotify-logo.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/spotify-logo.svg rename to crates/qbz-ui/ui/assets/icons/spotify-logo.svg diff --git a/crates/qbz-slint/ui/assets/icons/square-check-big.svg b/crates/qbz-ui/ui/assets/icons/square-check-big.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/square-check-big.svg rename to crates/qbz-ui/ui/assets/icons/square-check-big.svg diff --git a/crates/qbz-slint/ui/assets/icons/square.svg b/crates/qbz-ui/ui/assets/icons/square.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/square.svg rename to crates/qbz-ui/ui/assets/icons/square.svg diff --git a/crates/qbz-slint/ui/assets/icons/star.svg b/crates/qbz-ui/ui/assets/icons/star.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/star.svg rename to crates/qbz-ui/ui/assets/icons/star.svg diff --git a/crates/qbz-slint/ui/assets/icons/thumbs-down.svg b/crates/qbz-ui/ui/assets/icons/thumbs-down.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/thumbs-down.svg rename to crates/qbz-ui/ui/assets/icons/thumbs-down.svg diff --git a/crates/qbz-slint/ui/assets/icons/tidal-tidal.svg b/crates/qbz-ui/ui/assets/icons/tidal-tidal.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/tidal-tidal.svg rename to crates/qbz-ui/ui/assets/icons/tidal-tidal.svg diff --git a/crates/qbz-slint/ui/assets/icons/trash-2.svg b/crates/qbz-ui/ui/assets/icons/trash-2.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/trash-2.svg rename to crates/qbz-ui/ui/assets/icons/trash-2.svg diff --git a/crates/qbz-slint/ui/assets/icons/trash-list.svg b/crates/qbz-ui/ui/assets/icons/trash-list.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/trash-list.svg rename to crates/qbz-ui/ui/assets/icons/trash-list.svg diff --git a/crates/qbz-slint/ui/assets/icons/triangle-alert.svg b/crates/qbz-ui/ui/assets/icons/triangle-alert.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/triangle-alert.svg rename to crates/qbz-ui/ui/assets/icons/triangle-alert.svg diff --git a/crates/qbz-slint/ui/assets/icons/turntable.svg b/crates/qbz-ui/ui/assets/icons/turntable.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/turntable.svg rename to crates/qbz-ui/ui/assets/icons/turntable.svg diff --git a/crates/qbz-slint/ui/assets/icons/user-plus.svg b/crates/qbz-ui/ui/assets/icons/user-plus.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/user-plus.svg rename to crates/qbz-ui/ui/assets/icons/user-plus.svg diff --git a/crates/qbz-slint/ui/assets/icons/user.svg b/crates/qbz-ui/ui/assets/icons/user.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/user.svg rename to crates/qbz-ui/ui/assets/icons/user.svg diff --git a/crates/qbz-slint/ui/assets/icons/volume-2.svg b/crates/qbz-ui/ui/assets/icons/volume-2.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/volume-2.svg rename to crates/qbz-ui/ui/assets/icons/volume-2.svg diff --git a/crates/qbz-slint/ui/assets/icons/volume-x.svg b/crates/qbz-ui/ui/assets/icons/volume-x.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/volume-x.svg rename to crates/qbz-ui/ui/assets/icons/volume-x.svg diff --git a/crates/qbz-slint/ui/assets/icons/wifi.svg b/crates/qbz-ui/ui/assets/icons/wifi.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/wifi.svg rename to crates/qbz-ui/ui/assets/icons/wifi.svg diff --git a/crates/qbz-slint/ui/assets/icons/x.svg b/crates/qbz-ui/ui/assets/icons/x.svg similarity index 100% rename from crates/qbz-slint/ui/assets/icons/x.svg rename to crates/qbz-ui/ui/assets/icons/x.svg diff --git a/crates/qbz-slint/ui/assets/laurels.svg b/crates/qbz-ui/ui/assets/laurels.svg similarity index 100% rename from crates/qbz-slint/ui/assets/laurels.svg rename to crates/qbz-ui/ui/assets/laurels.svg diff --git a/crates/qbz-slint/ui/assets/mp3.svg b/crates/qbz-ui/ui/assets/mp3.svg similarity index 100% rename from crates/qbz-slint/ui/assets/mp3.svg rename to crates/qbz-ui/ui/assets/mp3.svg diff --git a/crates/qbz-slint/ui/assets/qbz-logo.png b/crates/qbz-ui/ui/assets/qbz-logo.png similarity index 100% rename from crates/qbz-slint/ui/assets/qbz-logo.png rename to crates/qbz-ui/ui/assets/qbz-logo.png diff --git a/crates/qbz-slint/ui/award/AwardAlbumsView.slint b/crates/qbz-ui/ui/award/AwardAlbumsView.slint similarity index 100% rename from crates/qbz-slint/ui/award/AwardAlbumsView.slint rename to crates/qbz-ui/ui/award/AwardAlbumsView.slint diff --git a/crates/qbz-slint/ui/award/AwardView.slint b/crates/qbz-ui/ui/award/AwardView.slint similarity index 100% rename from crates/qbz-slint/ui/award/AwardView.slint rename to crates/qbz-ui/ui/award/AwardView.slint diff --git a/crates/qbz-slint/ui/discover/AlbumCard.slint b/crates/qbz-ui/ui/discover/AlbumCard.slint similarity index 100% rename from crates/qbz-slint/ui/discover/AlbumCard.slint rename to crates/qbz-ui/ui/discover/AlbumCard.slint diff --git a/crates/qbz-slint/ui/discover/AlbumCollectionView.slint b/crates/qbz-ui/ui/discover/AlbumCollectionView.slint similarity index 100% rename from crates/qbz-slint/ui/discover/AlbumCollectionView.slint rename to crates/qbz-ui/ui/discover/AlbumCollectionView.slint diff --git a/crates/qbz-slint/ui/discover/ArtistCard.slint b/crates/qbz-ui/ui/discover/ArtistCard.slint similarity index 100% rename from crates/qbz-slint/ui/discover/ArtistCard.slint rename to crates/qbz-ui/ui/discover/ArtistCard.slint diff --git a/crates/qbz-slint/ui/discover/ArtistCarousel.slint b/crates/qbz-ui/ui/discover/ArtistCarousel.slint similarity index 100% rename from crates/qbz-slint/ui/discover/ArtistCarousel.slint rename to crates/qbz-ui/ui/discover/ArtistCarousel.slint diff --git a/crates/qbz-slint/ui/discover/Carousel.slint b/crates/qbz-ui/ui/discover/Carousel.slint similarity index 100% rename from crates/qbz-slint/ui/discover/Carousel.slint rename to crates/qbz-ui/ui/discover/Carousel.slint diff --git a/crates/qbz-slint/ui/discover/DiscoverBrowseView.slint b/crates/qbz-ui/ui/discover/DiscoverBrowseView.slint similarity index 100% rename from crates/qbz-slint/ui/discover/DiscoverBrowseView.slint rename to crates/qbz-ui/ui/discover/DiscoverBrowseView.slint diff --git a/crates/qbz-slint/ui/discover/DiscoverConfigModal.slint b/crates/qbz-ui/ui/discover/DiscoverConfigModal.slint similarity index 100% rename from crates/qbz-slint/ui/discover/DiscoverConfigModal.slint rename to crates/qbz-ui/ui/discover/DiscoverConfigModal.slint diff --git a/crates/qbz-slint/ui/discover/ForYouView.slint b/crates/qbz-ui/ui/discover/ForYouView.slint similarity index 100% rename from crates/qbz-slint/ui/discover/ForYouView.slint rename to crates/qbz-ui/ui/discover/ForYouView.slint diff --git a/crates/qbz-slint/ui/discover/GenreFilterPopup.slint b/crates/qbz-ui/ui/discover/GenreFilterPopup.slint similarity index 100% rename from crates/qbz-slint/ui/discover/GenreFilterPopup.slint rename to crates/qbz-ui/ui/discover/GenreFilterPopup.slint diff --git a/crates/qbz-slint/ui/discover/GridSection.slint b/crates/qbz-ui/ui/discover/GridSection.slint similarity index 100% rename from crates/qbz-slint/ui/discover/GridSection.slint rename to crates/qbz-ui/ui/discover/GridSection.slint diff --git a/crates/qbz-slint/ui/discover/HomeSkeleton.slint b/crates/qbz-ui/ui/discover/HomeSkeleton.slint similarity index 100% rename from crates/qbz-slint/ui/discover/HomeSkeleton.slint rename to crates/qbz-ui/ui/discover/HomeSkeleton.slint diff --git a/crates/qbz-slint/ui/discover/HomeView.slint b/crates/qbz-ui/ui/discover/HomeView.slint similarity index 100% rename from crates/qbz-slint/ui/discover/HomeView.slint rename to crates/qbz-ui/ui/discover/HomeView.slint diff --git a/crates/qbz-slint/ui/discover/PlaylistCard.slint b/crates/qbz-ui/ui/discover/PlaylistCard.slint similarity index 100% rename from crates/qbz-slint/ui/discover/PlaylistCard.slint rename to crates/qbz-ui/ui/discover/PlaylistCard.slint diff --git a/crates/qbz-slint/ui/discover/PlaylistCarousel.slint b/crates/qbz-ui/ui/discover/PlaylistCarousel.slint similarity index 100% rename from crates/qbz-slint/ui/discover/PlaylistCarousel.slint rename to crates/qbz-ui/ui/discover/PlaylistCarousel.slint diff --git a/crates/qbz-slint/ui/discover/PlaylistCollage.slint b/crates/qbz-ui/ui/discover/PlaylistCollage.slint similarity index 100% rename from crates/qbz-slint/ui/discover/PlaylistCollage.slint rename to crates/qbz-ui/ui/discover/PlaylistCollage.slint diff --git a/crates/qbz-slint/ui/discover/PlaylistTagFilter.slint b/crates/qbz-ui/ui/discover/PlaylistTagFilter.slint similarity index 100% rename from crates/qbz-slint/ui/discover/PlaylistTagFilter.slint rename to crates/qbz-ui/ui/discover/PlaylistTagFilter.slint diff --git a/crates/qbz-slint/ui/discover/QobuzMixesRow.slint b/crates/qbz-ui/ui/discover/QobuzMixesRow.slint similarity index 100% rename from crates/qbz-slint/ui/discover/QobuzMixesRow.slint rename to crates/qbz-ui/ui/discover/QobuzMixesRow.slint diff --git a/crates/qbz-slint/ui/discover/RadioCard.slint b/crates/qbz-ui/ui/discover/RadioCard.slint similarity index 100% rename from crates/qbz-slint/ui/discover/RadioCard.slint rename to crates/qbz-ui/ui/discover/RadioCard.slint diff --git a/crates/qbz-slint/ui/discover/SlimCard.slint b/crates/qbz-ui/ui/discover/SlimCard.slint similarity index 100% rename from crates/qbz-slint/ui/discover/SlimCard.slint rename to crates/qbz-ui/ui/discover/SlimCard.slint diff --git a/crates/qbz-slint/ui/discover/SlimCarousel.slint b/crates/qbz-ui/ui/discover/SlimCarousel.slint similarity index 100% rename from crates/qbz-slint/ui/discover/SlimCarousel.slint rename to crates/qbz-ui/ui/discover/SlimCarousel.slint diff --git a/crates/qbz-slint/ui/discover/Spotlight.slint b/crates/qbz-ui/ui/discover/Spotlight.slint similarity index 100% rename from crates/qbz-slint/ui/discover/Spotlight.slint rename to crates/qbz-ui/ui/discover/Spotlight.slint diff --git a/crates/qbz-slint/ui/favorites/FavoritesOfflineRail.slint b/crates/qbz-ui/ui/favorites/FavoritesOfflineRail.slint similarity index 100% rename from crates/qbz-slint/ui/favorites/FavoritesOfflineRail.slint rename to crates/qbz-ui/ui/favorites/FavoritesOfflineRail.slint diff --git a/crates/qbz-slint/ui/favorites/FavoritesView.slint b/crates/qbz-ui/ui/favorites/FavoritesView.slint similarity index 100% rename from crates/qbz-slint/ui/favorites/FavoritesView.slint rename to crates/qbz-ui/ui/favorites/FavoritesView.slint diff --git a/crates/qbz-slint/ui/focus-state.slint b/crates/qbz-ui/ui/focus-state.slint similarity index 100% rename from crates/qbz-slint/ui/focus-state.slint rename to crates/qbz-ui/ui/focus-state.slint diff --git a/crates/qbz-slint/ui/foundation/layout.slint b/crates/qbz-ui/ui/foundation/layout.slint similarity index 100% rename from crates/qbz-slint/ui/foundation/layout.slint rename to crates/qbz-ui/ui/foundation/layout.slint diff --git a/crates/qbz-slint/ui/foundation/palette.slint b/crates/qbz-ui/ui/foundation/palette.slint similarity index 100% rename from crates/qbz-slint/ui/foundation/palette.slint rename to crates/qbz-ui/ui/foundation/palette.slint diff --git a/crates/qbz-slint/ui/foundation/radius.slint b/crates/qbz-ui/ui/foundation/radius.slint similarity index 100% rename from crates/qbz-slint/ui/foundation/radius.slint rename to crates/qbz-ui/ui/foundation/radius.slint diff --git a/crates/qbz-slint/ui/foundation/semantic-colors.slint b/crates/qbz-ui/ui/foundation/semantic-colors.slint similarity index 100% rename from crates/qbz-slint/ui/foundation/semantic-colors.slint rename to crates/qbz-ui/ui/foundation/semantic-colors.slint diff --git a/crates/qbz-slint/ui/foundation/spacing.slint b/crates/qbz-ui/ui/foundation/spacing.slint similarity index 100% rename from crates/qbz-slint/ui/foundation/spacing.slint rename to crates/qbz-ui/ui/foundation/spacing.slint diff --git a/crates/qbz-slint/ui/foundation/theme-state.slint b/crates/qbz-ui/ui/foundation/theme-state.slint similarity index 100% rename from crates/qbz-slint/ui/foundation/theme-state.slint rename to crates/qbz-ui/ui/foundation/theme-state.slint diff --git a/crates/qbz-slint/ui/foundation/theme.slint b/crates/qbz-ui/ui/foundation/theme.slint similarity index 100% rename from crates/qbz-slint/ui/foundation/theme.slint rename to crates/qbz-ui/ui/foundation/theme.slint diff --git a/crates/qbz-slint/ui/foundation/typography.slint b/crates/qbz-ui/ui/foundation/typography.slint similarity index 100% rename from crates/qbz-slint/ui/foundation/typography.slint rename to crates/qbz-ui/ui/foundation/typography.slint diff --git a/crates/qbz-slint/ui/immersive/AlbumReactivePanel.slint b/crates/qbz-ui/ui/immersive/AlbumReactivePanel.slint similarity index 100% rename from crates/qbz-slint/ui/immersive/AlbumReactivePanel.slint rename to crates/qbz-ui/ui/immersive/AlbumReactivePanel.slint diff --git a/crates/qbz-slint/ui/immersive/CoverflowPanel.slint b/crates/qbz-ui/ui/immersive/CoverflowPanel.slint similarity index 100% rename from crates/qbz-slint/ui/immersive/CoverflowPanel.slint rename to crates/qbz-ui/ui/immersive/CoverflowPanel.slint diff --git a/crates/qbz-slint/ui/immersive/ImmersiveAtmosphere.slint b/crates/qbz-ui/ui/immersive/ImmersiveAtmosphere.slint similarity index 100% rename from crates/qbz-slint/ui/immersive/ImmersiveAtmosphere.slint rename to crates/qbz-ui/ui/immersive/ImmersiveAtmosphere.slint diff --git a/crates/qbz-slint/ui/immersive/ImmersiveLyricsFocusPanel.slint b/crates/qbz-ui/ui/immersive/ImmersiveLyricsFocusPanel.slint similarity index 100% rename from crates/qbz-slint/ui/immersive/ImmersiveLyricsFocusPanel.slint rename to crates/qbz-ui/ui/immersive/ImmersiveLyricsFocusPanel.slint diff --git a/crates/qbz-slint/ui/immersive/ImmersiveQueuePanel.slint b/crates/qbz-ui/ui/immersive/ImmersiveQueuePanel.slint similarity index 100% rename from crates/qbz-slint/ui/immersive/ImmersiveQueuePanel.slint rename to crates/qbz-ui/ui/immersive/ImmersiveQueuePanel.slint diff --git a/crates/qbz-slint/ui/immersive/ImmersiveSearchCortinilla.slint b/crates/qbz-ui/ui/immersive/ImmersiveSearchCortinilla.slint similarity index 100% rename from crates/qbz-slint/ui/immersive/ImmersiveSearchCortinilla.slint rename to crates/qbz-ui/ui/immersive/ImmersiveSearchCortinilla.slint diff --git a/crates/qbz-slint/ui/immersive/ImmersiveSuggestionsPanel.slint b/crates/qbz-ui/ui/immersive/ImmersiveSuggestionsPanel.slint similarity index 100% rename from crates/qbz-slint/ui/immersive/ImmersiveSuggestionsPanel.slint rename to crates/qbz-ui/ui/immersive/ImmersiveSuggestionsPanel.slint diff --git a/crates/qbz-slint/ui/immersive/ImmersiveTrackInfo.slint b/crates/qbz-ui/ui/immersive/ImmersiveTrackInfo.slint similarity index 100% rename from crates/qbz-slint/ui/immersive/ImmersiveTrackInfo.slint rename to crates/qbz-ui/ui/immersive/ImmersiveTrackInfo.slint diff --git a/crates/qbz-slint/ui/immersive/ImmersiveTrackInfoPanel.slint b/crates/qbz-ui/ui/immersive/ImmersiveTrackInfoPanel.slint similarity index 100% rename from crates/qbz-slint/ui/immersive/ImmersiveTrackInfoPanel.slint rename to crates/qbz-ui/ui/immersive/ImmersiveTrackInfoPanel.slint diff --git a/crates/qbz-slint/ui/immersive/ImmersiveView.slint b/crates/qbz-ui/ui/immersive/ImmersiveView.slint similarity index 100% rename from crates/qbz-slint/ui/immersive/ImmersiveView.slint rename to crates/qbz-ui/ui/immersive/ImmersiveView.slint diff --git a/crates/qbz-slint/ui/immersive/SpectrumPanel.slint b/crates/qbz-ui/ui/immersive/SpectrumPanel.slint similarity index 100% rename from crates/qbz-slint/ui/immersive/SpectrumPanel.slint rename to crates/qbz-ui/ui/immersive/SpectrumPanel.slint diff --git a/crates/qbz-slint/ui/immersive/StaticPanel.slint b/crates/qbz-ui/ui/immersive/StaticPanel.slint similarity index 100% rename from crates/qbz-slint/ui/immersive/StaticPanel.slint rename to crates/qbz-ui/ui/immersive/StaticPanel.slint diff --git a/crates/qbz-slint/ui/label/LabelPageView.slint b/crates/qbz-ui/ui/label/LabelPageView.slint similarity index 100% rename from crates/qbz-slint/ui/label/LabelPageView.slint rename to crates/qbz-ui/ui/label/LabelPageView.slint diff --git a/crates/qbz-slint/ui/label/LabelReleasesView.slint b/crates/qbz-ui/ui/label/LabelReleasesView.slint similarity index 100% rename from crates/qbz-slint/ui/label/LabelReleasesView.slint rename to crates/qbz-ui/ui/label/LabelReleasesView.slint diff --git a/crates/qbz-slint/ui/locallibrary/LocalLibraryView.slint b/crates/qbz-ui/ui/locallibrary/LocalLibraryView.slint similarity index 100% rename from crates/qbz-slint/ui/locallibrary/LocalLibraryView.slint rename to crates/qbz-ui/ui/locallibrary/LocalLibraryView.slint diff --git a/crates/qbz-slint/ui/location/ArtistsByLocationView.slint b/crates/qbz-ui/ui/location/ArtistsByLocationView.slint similarity index 100% rename from crates/qbz-slint/ui/location/ArtistsByLocationView.slint rename to crates/qbz-ui/ui/location/ArtistsByLocationView.slint diff --git a/crates/qbz-slint/ui/login/LoginScreen.slint b/crates/qbz-ui/ui/login/LoginScreen.slint similarity index 100% rename from crates/qbz-slint/ui/login/LoginScreen.slint rename to crates/qbz-ui/ui/login/LoginScreen.slint diff --git a/crates/qbz-slint/ui/miniplayer/MiniArtworkSurface.slint b/crates/qbz-ui/ui/miniplayer/MiniArtworkSurface.slint similarity index 100% rename from crates/qbz-slint/ui/miniplayer/MiniArtworkSurface.slint rename to crates/qbz-ui/ui/miniplayer/MiniArtworkSurface.slint diff --git a/crates/qbz-slint/ui/miniplayer/MiniBits.slint b/crates/qbz-ui/ui/miniplayer/MiniBits.slint similarity index 100% rename from crates/qbz-slint/ui/miniplayer/MiniBits.slint rename to crates/qbz-ui/ui/miniplayer/MiniBits.slint diff --git a/crates/qbz-slint/ui/miniplayer/MiniCompactSurface.slint b/crates/qbz-ui/ui/miniplayer/MiniCompactSurface.slint similarity index 100% rename from crates/qbz-slint/ui/miniplayer/MiniCompactSurface.slint rename to crates/qbz-ui/ui/miniplayer/MiniCompactSurface.slint diff --git a/crates/qbz-slint/ui/miniplayer/MiniFooter.slint b/crates/qbz-ui/ui/miniplayer/MiniFooter.slint similarity index 100% rename from crates/qbz-slint/ui/miniplayer/MiniFooter.slint rename to crates/qbz-ui/ui/miniplayer/MiniFooter.slint diff --git a/crates/qbz-slint/ui/miniplayer/MiniLyricsSurface.slint b/crates/qbz-ui/ui/miniplayer/MiniLyricsSurface.slint similarity index 100% rename from crates/qbz-slint/ui/miniplayer/MiniLyricsSurface.slint rename to crates/qbz-ui/ui/miniplayer/MiniLyricsSurface.slint diff --git a/crates/qbz-slint/ui/miniplayer/MiniQueueSurface.slint b/crates/qbz-ui/ui/miniplayer/MiniQueueSurface.slint similarity index 100% rename from crates/qbz-slint/ui/miniplayer/MiniQueueSurface.slint rename to crates/qbz-ui/ui/miniplayer/MiniQueueSurface.slint diff --git a/crates/qbz-slint/ui/miniplayer/MiniShell.slint b/crates/qbz-ui/ui/miniplayer/MiniShell.slint similarity index 100% rename from crates/qbz-slint/ui/miniplayer/MiniShell.slint rename to crates/qbz-ui/ui/miniplayer/MiniShell.slint diff --git a/crates/qbz-slint/ui/miniplayer/MiniWindowControls.slint b/crates/qbz-ui/ui/miniplayer/MiniWindowControls.slint similarity index 100% rename from crates/qbz-slint/ui/miniplayer/MiniWindowControls.slint rename to crates/qbz-ui/ui/miniplayer/MiniWindowControls.slint diff --git a/crates/qbz-slint/ui/mix/MixView.slint b/crates/qbz-ui/ui/mix/MixView.slint similarity index 100% rename from crates/qbz-slint/ui/mix/MixView.slint rename to crates/qbz-ui/ui/mix/MixView.slint diff --git a/crates/qbz-slint/ui/musician/MusicianPageView.slint b/crates/qbz-ui/ui/musician/MusicianPageView.slint similarity index 100% rename from crates/qbz-slint/ui/musician/MusicianPageView.slint rename to crates/qbz-ui/ui/musician/MusicianPageView.slint diff --git a/crates/qbz-slint/ui/myqbz/AddToMixtapeModal.slint b/crates/qbz-ui/ui/myqbz/AddToMixtapeModal.slint similarity index 100% rename from crates/qbz-slint/ui/myqbz/AddToMixtapeModal.slint rename to crates/qbz-ui/ui/myqbz/AddToMixtapeModal.slint diff --git a/crates/qbz-slint/ui/myqbz/CollectionMosaic.slint b/crates/qbz-ui/ui/myqbz/CollectionMosaic.slint similarity index 100% rename from crates/qbz-slint/ui/myqbz/CollectionMosaic.slint rename to crates/qbz-ui/ui/myqbz/CollectionMosaic.slint diff --git a/crates/qbz-slint/ui/myqbz/CollectionsView.slint b/crates/qbz-ui/ui/myqbz/CollectionsView.slint similarity index 100% rename from crates/qbz-slint/ui/myqbz/CollectionsView.slint rename to crates/qbz-ui/ui/myqbz/CollectionsView.slint diff --git a/crates/qbz-slint/ui/myqbz/CreateMyQbzModal.slint b/crates/qbz-ui/ui/myqbz/CreateMyQbzModal.slint similarity index 100% rename from crates/qbz-slint/ui/myqbz/CreateMyQbzModal.slint rename to crates/qbz-ui/ui/myqbz/CreateMyQbzModal.slint diff --git a/crates/qbz-slint/ui/myqbz/DiscographyBuilderView.slint b/crates/qbz-ui/ui/myqbz/DiscographyBuilderView.slint similarity index 100% rename from crates/qbz-slint/ui/myqbz/DiscographyBuilderView.slint rename to crates/qbz-ui/ui/myqbz/DiscographyBuilderView.slint diff --git a/crates/qbz-slint/ui/myqbz/MixtapeDetailView.slint b/crates/qbz-ui/ui/myqbz/MixtapeDetailView.slint similarity index 100% rename from crates/qbz-slint/ui/myqbz/MixtapeDetailView.slint rename to crates/qbz-ui/ui/myqbz/MixtapeDetailView.slint diff --git a/crates/qbz-slint/ui/myqbz/MixtapesView.slint b/crates/qbz-ui/ui/myqbz/MixtapesView.slint similarity index 100% rename from crates/qbz-slint/ui/myqbz/MixtapesView.slint rename to crates/qbz-ui/ui/myqbz/MixtapesView.slint diff --git a/crates/qbz-slint/ui/myqbz/MyQbzEditModal.slint b/crates/qbz-ui/ui/myqbz/MyQbzEditModal.slint similarity index 100% rename from crates/qbz-slint/ui/myqbz/MyQbzEditModal.slint rename to crates/qbz-ui/ui/myqbz/MyQbzEditModal.slint diff --git a/crates/qbz-slint/ui/myqbz/MyQbzMixModal.slint b/crates/qbz-ui/ui/myqbz/MyQbzMixModal.slint similarity index 100% rename from crates/qbz-slint/ui/myqbz/MyQbzMixModal.slint rename to crates/qbz-ui/ui/myqbz/MyQbzMixModal.slint diff --git a/crates/qbz-slint/ui/myqbz/MyQbzShared.slint b/crates/qbz-ui/ui/myqbz/MyQbzShared.slint similarity index 100% rename from crates/qbz-slint/ui/myqbz/MyQbzShared.slint rename to crates/qbz-ui/ui/myqbz/MyQbzShared.slint diff --git a/crates/qbz-slint/ui/offline/OfflineManagerView.slint b/crates/qbz-ui/ui/offline/OfflineManagerView.slint similarity index 100% rename from crates/qbz-slint/ui/offline/OfflineManagerView.slint rename to crates/qbz-ui/ui/offline/OfflineManagerView.slint diff --git a/crates/qbz-slint/ui/offline/OfflinePlaceholder.slint b/crates/qbz-ui/ui/offline/OfflinePlaceholder.slint similarity index 100% rename from crates/qbz-slint/ui/offline/OfflinePlaceholder.slint rename to crates/qbz-ui/ui/offline/OfflinePlaceholder.slint diff --git a/crates/qbz-slint/ui/playlist/PlaylistManagerView.slint b/crates/qbz-ui/ui/playlist/PlaylistManagerView.slint similarity index 100% rename from crates/qbz-slint/ui/playlist/PlaylistManagerView.slint rename to crates/qbz-ui/ui/playlist/PlaylistManagerView.slint diff --git a/crates/qbz-slint/ui/playlist/PlaylistView.slint b/crates/qbz-ui/ui/playlist/PlaylistView.slint similarity index 100% rename from crates/qbz-slint/ui/playlist/PlaylistView.slint rename to crates/qbz-ui/ui/playlist/PlaylistView.slint diff --git a/crates/qbz-slint/ui/primitives/AlbumContextMenu.slint b/crates/qbz-ui/ui/primitives/AlbumContextMenu.slint similarity index 100% rename from crates/qbz-slint/ui/primitives/AlbumContextMenu.slint rename to crates/qbz-ui/ui/primitives/AlbumContextMenu.slint diff --git a/crates/qbz-slint/ui/primitives/AlbumListRow.slint b/crates/qbz-ui/ui/primitives/AlbumListRow.slint similarity index 100% rename from crates/qbz-slint/ui/primitives/AlbumListRow.slint rename to crates/qbz-ui/ui/primitives/AlbumListRow.slint diff --git a/crates/qbz-slint/ui/primitives/BarControls.slint b/crates/qbz-ui/ui/primitives/BarControls.slint similarity index 100% rename from crates/qbz-slint/ui/primitives/BarControls.slint rename to crates/qbz-ui/ui/primitives/BarControls.slint diff --git a/crates/qbz-slint/ui/primitives/CircleAction.slint b/crates/qbz-ui/ui/primitives/CircleAction.slint similarity index 100% rename from crates/qbz-slint/ui/primitives/CircleAction.slint rename to crates/qbz-ui/ui/primitives/CircleAction.slint diff --git a/crates/qbz-slint/ui/primitives/CommandBlock.slint b/crates/qbz-ui/ui/primitives/CommandBlock.slint similarity index 100% rename from crates/qbz-slint/ui/primitives/CommandBlock.slint rename to crates/qbz-ui/ui/primitives/CommandBlock.slint diff --git a/crates/qbz-slint/ui/primitives/ContextMenu.slint b/crates/qbz-ui/ui/primitives/ContextMenu.slint similarity index 100% rename from crates/qbz-slint/ui/primitives/ContextMenu.slint rename to crates/qbz-ui/ui/primitives/ContextMenu.slint diff --git a/crates/qbz-slint/ui/primitives/ContextMenuItem.slint b/crates/qbz-ui/ui/primitives/ContextMenuItem.slint similarity index 100% rename from crates/qbz-slint/ui/primitives/ContextMenuItem.slint rename to crates/qbz-ui/ui/primitives/ContextMenuItem.slint diff --git a/crates/qbz-slint/ui/primitives/CreateFolderModal.slint b/crates/qbz-ui/ui/primitives/CreateFolderModal.slint similarity index 100% rename from crates/qbz-slint/ui/primitives/CreateFolderModal.slint rename to crates/qbz-ui/ui/primitives/CreateFolderModal.slint diff --git a/crates/qbz-slint/ui/primitives/CreatePlaylistModal.slint b/crates/qbz-ui/ui/primitives/CreatePlaylistModal.slint similarity index 100% rename from crates/qbz-slint/ui/primitives/CreatePlaylistModal.slint rename to crates/qbz-ui/ui/primitives/CreatePlaylistModal.slint diff --git a/crates/qbz-slint/ui/primitives/DacWizardModal.slint b/crates/qbz-ui/ui/primitives/DacWizardModal.slint similarity index 100% rename from crates/qbz-slint/ui/primitives/DacWizardModal.slint rename to crates/qbz-ui/ui/primitives/DacWizardModal.slint diff --git a/crates/qbz-slint/ui/primitives/DiscContextMenu.slint b/crates/qbz-ui/ui/primitives/DiscContextMenu.slint similarity index 100% rename from crates/qbz-slint/ui/primitives/DiscContextMenu.slint rename to crates/qbz-ui/ui/primitives/DiscContextMenu.slint diff --git a/crates/qbz-slint/ui/primitives/DiscHeaderMenu.slint b/crates/qbz-ui/ui/primitives/DiscHeaderMenu.slint similarity index 100% rename from crates/qbz-slint/ui/primitives/DiscHeaderMenu.slint rename to crates/qbz-ui/ui/primitives/DiscHeaderMenu.slint diff --git a/crates/qbz-slint/ui/primitives/DragGhost.slint b/crates/qbz-ui/ui/primitives/DragGhost.slint similarity index 100% rename from crates/qbz-slint/ui/primitives/DragGhost.slint rename to crates/qbz-ui/ui/primitives/DragGhost.slint diff --git a/crates/qbz-slint/ui/primitives/EditPlaylistModal.slint b/crates/qbz-ui/ui/primitives/EditPlaylistModal.slint similarity index 100% rename from crates/qbz-slint/ui/primitives/EditPlaylistModal.slint rename to crates/qbz-ui/ui/primitives/EditPlaylistModal.slint diff --git a/crates/qbz-slint/ui/primitives/EphemeralPlayChoiceModal.slint b/crates/qbz-ui/ui/primitives/EphemeralPlayChoiceModal.slint similarity index 100% rename from crates/qbz-slint/ui/primitives/EphemeralPlayChoiceModal.slint rename to crates/qbz-ui/ui/primitives/EphemeralPlayChoiceModal.slint diff --git a/crates/qbz-slint/ui/primitives/ExpandableSearch.slint b/crates/qbz-ui/ui/primitives/ExpandableSearch.slint similarity index 100% rename from crates/qbz-slint/ui/primitives/ExpandableSearch.slint rename to crates/qbz-ui/ui/primitives/ExpandableSearch.slint diff --git a/crates/qbz-slint/ui/primitives/FolderEditModal.slint b/crates/qbz-ui/ui/primitives/FolderEditModal.slint similarity index 100% rename from crates/qbz-slint/ui/primitives/FolderEditModal.slint rename to crates/qbz-ui/ui/primitives/FolderEditModal.slint diff --git a/crates/qbz-slint/ui/primitives/JumpNavBar.slint b/crates/qbz-ui/ui/primitives/JumpNavBar.slint similarity index 100% rename from crates/qbz-slint/ui/primitives/JumpNavBar.slint rename to crates/qbz-ui/ui/primitives/JumpNavBar.slint diff --git a/crates/qbz-slint/ui/primitives/ListScrollbar.slint b/crates/qbz-ui/ui/primitives/ListScrollbar.slint similarity index 100% rename from crates/qbz-slint/ui/primitives/ListScrollbar.slint rename to crates/qbz-ui/ui/primitives/ListScrollbar.slint diff --git a/crates/qbz-slint/ui/primitives/LoadingDots.slint b/crates/qbz-ui/ui/primitives/LoadingDots.slint similarity index 100% rename from crates/qbz-slint/ui/primitives/LoadingDots.slint rename to crates/qbz-ui/ui/primitives/LoadingDots.slint diff --git a/crates/qbz-slint/ui/primitives/LoadingSpinner.slint b/crates/qbz-ui/ui/primitives/LoadingSpinner.slint similarity index 100% rename from crates/qbz-slint/ui/primitives/LoadingSpinner.slint rename to crates/qbz-ui/ui/primitives/LoadingSpinner.slint diff --git a/crates/qbz-slint/ui/primitives/MultiSelectBar.slint b/crates/qbz-ui/ui/primitives/MultiSelectBar.slint similarity index 100% rename from crates/qbz-slint/ui/primitives/MultiSelectBar.slint rename to crates/qbz-ui/ui/primitives/MultiSelectBar.slint diff --git a/crates/qbz-slint/ui/primitives/PlaylistDuplicateConfirmModal.slint b/crates/qbz-ui/ui/primitives/PlaylistDuplicateConfirmModal.slint similarity index 100% rename from crates/qbz-slint/ui/primitives/PlaylistDuplicateConfirmModal.slint rename to crates/qbz-ui/ui/primitives/PlaylistDuplicateConfirmModal.slint diff --git a/crates/qbz-slint/ui/primitives/PlaylistImportModal.slint b/crates/qbz-ui/ui/primitives/PlaylistImportModal.slint similarity index 100% rename from crates/qbz-slint/ui/primitives/PlaylistImportModal.slint rename to crates/qbz-ui/ui/primitives/PlaylistImportModal.slint diff --git a/crates/qbz-slint/ui/primitives/PlaylistPickerModal.slint b/crates/qbz-ui/ui/primitives/PlaylistPickerModal.slint similarity index 100% rename from crates/qbz-slint/ui/primitives/PlaylistPickerModal.slint rename to crates/qbz-ui/ui/primitives/PlaylistPickerModal.slint diff --git a/crates/qbz-slint/ui/primitives/PmCollage.slint b/crates/qbz-ui/ui/primitives/PmCollage.slint similarity index 100% rename from crates/qbz-slint/ui/primitives/PmCollage.slint rename to crates/qbz-ui/ui/primitives/PmCollage.slint diff --git a/crates/qbz-slint/ui/primitives/PmFolderIcon.slint b/crates/qbz-ui/ui/primitives/PmFolderIcon.slint similarity index 100% rename from crates/qbz-slint/ui/primitives/PmFolderIcon.slint rename to crates/qbz-ui/ui/primitives/PmFolderIcon.slint diff --git a/crates/qbz-slint/ui/primitives/QbzCheckbox.slint b/crates/qbz-ui/ui/primitives/QbzCheckbox.slint similarity index 100% rename from crates/qbz-slint/ui/primitives/QbzCheckbox.slint rename to crates/qbz-ui/ui/primitives/QbzCheckbox.slint diff --git a/crates/qbz-slint/ui/primitives/QbzIcon.slint b/crates/qbz-ui/ui/primitives/QbzIcon.slint similarity index 100% rename from crates/qbz-slint/ui/primitives/QbzIcon.slint rename to crates/qbz-ui/ui/primitives/QbzIcon.slint diff --git a/crates/qbz-slint/ui/primitives/QbzPrimaryButton.slint b/crates/qbz-ui/ui/primitives/QbzPrimaryButton.slint similarity index 100% rename from crates/qbz-slint/ui/primitives/QbzPrimaryButton.slint rename to crates/qbz-ui/ui/primitives/QbzPrimaryButton.slint diff --git a/crates/qbz-slint/ui/primitives/QbzSelect.slint b/crates/qbz-ui/ui/primitives/QbzSelect.slint similarity index 100% rename from crates/qbz-slint/ui/primitives/QbzSelect.slint rename to crates/qbz-ui/ui/primitives/QbzSelect.slint diff --git a/crates/qbz-slint/ui/primitives/QbzSlider.slint b/crates/qbz-ui/ui/primitives/QbzSlider.slint similarity index 100% rename from crates/qbz-slint/ui/primitives/QbzSlider.slint rename to crates/qbz-ui/ui/primitives/QbzSlider.slint diff --git a/crates/qbz-slint/ui/primitives/QbzTextLink.slint b/crates/qbz-ui/ui/primitives/QbzTextLink.slint similarity index 100% rename from crates/qbz-slint/ui/primitives/QbzTextLink.slint rename to crates/qbz-ui/ui/primitives/QbzTextLink.slint diff --git a/crates/qbz-slint/ui/primitives/QbzToggle.slint b/crates/qbz-ui/ui/primitives/QbzToggle.slint similarity index 100% rename from crates/qbz-slint/ui/primitives/QbzToggle.slint rename to crates/qbz-ui/ui/primitives/QbzToggle.slint diff --git a/crates/qbz-slint/ui/primitives/QbzVerticalSlider.slint b/crates/qbz-ui/ui/primitives/QbzVerticalSlider.slint similarity index 100% rename from crates/qbz-slint/ui/primitives/QbzVerticalSlider.slint rename to crates/qbz-ui/ui/primitives/QbzVerticalSlider.slint diff --git a/crates/qbz-slint/ui/primitives/QualityBadge.slint b/crates/qbz-ui/ui/primitives/QualityBadge.slint similarity index 100% rename from crates/qbz-slint/ui/primitives/QualityBadge.slint rename to crates/qbz-ui/ui/primitives/QualityBadge.slint diff --git a/crates/qbz-slint/ui/primitives/QualityBadgeFull.slint b/crates/qbz-ui/ui/primitives/QualityBadgeFull.slint similarity index 100% rename from crates/qbz-slint/ui/primitives/QualityBadgeFull.slint rename to crates/qbz-ui/ui/primitives/QualityBadgeFull.slint diff --git a/crates/qbz-slint/ui/primitives/SearchTrackHero.slint b/crates/qbz-ui/ui/primitives/SearchTrackHero.slint similarity index 100% rename from crates/qbz-slint/ui/primitives/SearchTrackHero.slint rename to crates/qbz-ui/ui/primitives/SearchTrackHero.slint diff --git a/crates/qbz-slint/ui/primitives/SecondaryButton.slint b/crates/qbz-ui/ui/primitives/SecondaryButton.slint similarity index 100% rename from crates/qbz-slint/ui/primitives/SecondaryButton.slint rename to crates/qbz-ui/ui/primitives/SecondaryButton.slint diff --git a/crates/qbz-slint/ui/primitives/SegmentedTabBar.slint b/crates/qbz-ui/ui/primitives/SegmentedTabBar.slint similarity index 100% rename from crates/qbz-slint/ui/primitives/SegmentedTabBar.slint rename to crates/qbz-ui/ui/primitives/SegmentedTabBar.slint diff --git a/crates/qbz-slint/ui/primitives/SelectionCheckbox.slint b/crates/qbz-ui/ui/primitives/SelectionCheckbox.slint similarity index 100% rename from crates/qbz-slint/ui/primitives/SelectionCheckbox.slint rename to crates/qbz-ui/ui/primitives/SelectionCheckbox.slint diff --git a/crates/qbz-slint/ui/primitives/SidebarPlaylistCollage.slint b/crates/qbz-ui/ui/primitives/SidebarPlaylistCollage.slint similarity index 100% rename from crates/qbz-slint/ui/primitives/SidebarPlaylistCollage.slint rename to crates/qbz-ui/ui/primitives/SidebarPlaylistCollage.slint diff --git a/crates/qbz-slint/ui/primitives/SourceGlyph.slint b/crates/qbz-ui/ui/primitives/SourceGlyph.slint similarity index 100% rename from crates/qbz-slint/ui/primitives/SourceGlyph.slint rename to crates/qbz-ui/ui/primitives/SourceGlyph.slint diff --git a/crates/qbz-slint/ui/primitives/TagEditorModal.slint b/crates/qbz-ui/ui/primitives/TagEditorModal.slint similarity index 100% rename from crates/qbz-slint/ui/primitives/TagEditorModal.slint rename to crates/qbz-ui/ui/primitives/TagEditorModal.slint diff --git a/crates/qbz-slint/ui/primitives/Toast.slint b/crates/qbz-ui/ui/primitives/Toast.slint similarity index 100% rename from crates/qbz-slint/ui/primitives/Toast.slint rename to crates/qbz-ui/ui/primitives/Toast.slint diff --git a/crates/qbz-slint/ui/primitives/ToggleButton.slint b/crates/qbz-ui/ui/primitives/ToggleButton.slint similarity index 100% rename from crates/qbz-slint/ui/primitives/ToggleButton.slint rename to crates/qbz-ui/ui/primitives/ToggleButton.slint diff --git a/crates/qbz-slint/ui/primitives/TrackContextMenu.slint b/crates/qbz-ui/ui/primitives/TrackContextMenu.slint similarity index 100% rename from crates/qbz-slint/ui/primitives/TrackContextMenu.slint rename to crates/qbz-ui/ui/primitives/TrackContextMenu.slint diff --git a/crates/qbz-slint/ui/primitives/TrackPlayCell.slint b/crates/qbz-ui/ui/primitives/TrackPlayCell.slint similarity index 100% rename from crates/qbz-slint/ui/primitives/TrackPlayCell.slint rename to crates/qbz-ui/ui/primitives/TrackPlayCell.slint diff --git a/crates/qbz-slint/ui/primitives/TrackRow.slint b/crates/qbz-ui/ui/primitives/TrackRow.slint similarity index 100% rename from crates/qbz-slint/ui/primitives/TrackRow.slint rename to crates/qbz-ui/ui/primitives/TrackRow.slint diff --git a/crates/qbz-slint/ui/primitives/WarningBanner.slint b/crates/qbz-ui/ui/primitives/WarningBanner.slint similarity index 100% rename from crates/qbz-slint/ui/primitives/WarningBanner.slint rename to crates/qbz-ui/ui/primitives/WarningBanner.slint diff --git a/crates/qbz-slint/ui/purchases/PurchaseDetailView.slint b/crates/qbz-ui/ui/purchases/PurchaseDetailView.slint similarity index 100% rename from crates/qbz-slint/ui/purchases/PurchaseDetailView.slint rename to crates/qbz-ui/ui/purchases/PurchaseDetailView.slint diff --git a/crates/qbz-slint/ui/purchases/PurchasesView.slint b/crates/qbz-ui/ui/purchases/PurchasesView.slint similarity index 100% rename from crates/qbz-slint/ui/purchases/PurchasesView.slint rename to crates/qbz-ui/ui/purchases/PurchasesView.slint diff --git a/crates/qbz-slint/ui/search/Cortinilla.slint b/crates/qbz-ui/ui/search/Cortinilla.slint similarity index 100% rename from crates/qbz-slint/ui/search/Cortinilla.slint rename to crates/qbz-ui/ui/search/Cortinilla.slint diff --git a/crates/qbz-slint/ui/search/SearchResultsView.slint b/crates/qbz-ui/ui/search/SearchResultsView.slint similarity index 100% rename from crates/qbz-slint/ui/search/SearchResultsView.slint rename to crates/qbz-ui/ui/search/SearchResultsView.slint diff --git a/crates/qbz-slint/ui/settings/AppearanceSettings.slint b/crates/qbz-ui/ui/settings/AppearanceSettings.slint similarity index 100% rename from crates/qbz-slint/ui/settings/AppearanceSettings.slint rename to crates/qbz-ui/ui/settings/AppearanceSettings.slint diff --git a/crates/qbz-slint/ui/settings/AudioSettings.slint b/crates/qbz-ui/ui/settings/AudioSettings.slint similarity index 100% rename from crates/qbz-slint/ui/settings/AudioSettings.slint rename to crates/qbz-ui/ui/settings/AudioSettings.slint diff --git a/crates/qbz-slint/ui/settings/BlacklistManagerView.slint b/crates/qbz-ui/ui/settings/BlacklistManagerView.slint similarity index 100% rename from crates/qbz-slint/ui/settings/BlacklistManagerView.slint rename to crates/qbz-ui/ui/settings/BlacklistManagerView.slint diff --git a/crates/qbz-slint/ui/settings/ContentFilteringSettings.slint b/crates/qbz-ui/ui/settings/ContentFilteringSettings.slint similarity index 100% rename from crates/qbz-slint/ui/settings/ContentFilteringSettings.slint rename to crates/qbz-ui/ui/settings/ContentFilteringSettings.slint diff --git a/crates/qbz-slint/ui/settings/DeveloperSettings.slint b/crates/qbz-ui/ui/settings/DeveloperSettings.slint similarity index 100% rename from crates/qbz-slint/ui/settings/DeveloperSettings.slint rename to crates/qbz-ui/ui/settings/DeveloperSettings.slint diff --git a/crates/qbz-slint/ui/settings/IntegrationsSettings.slint b/crates/qbz-ui/ui/settings/IntegrationsSettings.slint similarity index 100% rename from crates/qbz-slint/ui/settings/IntegrationsSettings.slint rename to crates/qbz-ui/ui/settings/IntegrationsSettings.slint diff --git a/crates/qbz-slint/ui/settings/LibFolderEditModal.slint b/crates/qbz-ui/ui/settings/LibFolderEditModal.slint similarity index 100% rename from crates/qbz-slint/ui/settings/LibFolderEditModal.slint rename to crates/qbz-ui/ui/settings/LibFolderEditModal.slint diff --git a/crates/qbz-slint/ui/settings/LocalLibrarySettings.slint b/crates/qbz-ui/ui/settings/LocalLibrarySettings.slint similarity index 100% rename from crates/qbz-slint/ui/settings/LocalLibrarySettings.slint rename to crates/qbz-ui/ui/settings/LocalLibrarySettings.slint diff --git a/crates/qbz-slint/ui/settings/OfflineSettings.slint b/crates/qbz-ui/ui/settings/OfflineSettings.slint similarity index 100% rename from crates/qbz-slint/ui/settings/OfflineSettings.slint rename to crates/qbz-ui/ui/settings/OfflineSettings.slint diff --git a/crates/qbz-slint/ui/settings/PlaybackSettings.slint b/crates/qbz-ui/ui/settings/PlaybackSettings.slint similarity index 100% rename from crates/qbz-slint/ui/settings/PlaybackSettings.slint rename to crates/qbz-ui/ui/settings/PlaybackSettings.slint diff --git a/crates/qbz-slint/ui/settings/SettingRow.slint b/crates/qbz-ui/ui/settings/SettingRow.slint similarity index 100% rename from crates/qbz-slint/ui/settings/SettingRow.slint rename to crates/qbz-ui/ui/settings/SettingRow.slint diff --git a/crates/qbz-slint/ui/settings/SettingsView.slint b/crates/qbz-ui/ui/settings/SettingsView.slint similarity index 100% rename from crates/qbz-slint/ui/settings/SettingsView.slint rename to crates/qbz-ui/ui/settings/SettingsView.slint diff --git a/crates/qbz-slint/ui/shaders/aurora.wgsl b/crates/qbz-ui/ui/shaders/aurora.wgsl similarity index 100% rename from crates/qbz-slint/ui/shaders/aurora.wgsl rename to crates/qbz-ui/ui/shaders/aurora.wgsl diff --git a/crates/qbz-slint/ui/shaders/plasma.wgsl b/crates/qbz-ui/ui/shaders/plasma.wgsl similarity index 100% rename from crates/qbz-slint/ui/shaders/plasma.wgsl rename to crates/qbz-ui/ui/shaders/plasma.wgsl diff --git a/crates/qbz-slint/ui/shaders/tunnel.wgsl b/crates/qbz-ui/ui/shaders/tunnel.wgsl similarity index 100% rename from crates/qbz-slint/ui/shaders/tunnel.wgsl rename to crates/qbz-ui/ui/shaders/tunnel.wgsl diff --git a/crates/qbz-slint/ui/shell/AppShell.slint b/crates/qbz-ui/ui/shell/AppShell.slint similarity index 100% rename from crates/qbz-slint/ui/shell/AppShell.slint rename to crates/qbz-ui/ui/shell/AppShell.slint diff --git a/crates/qbz-slint/ui/shell/ArtPreviewOverlay.slint b/crates/qbz-ui/ui/shell/ArtPreviewOverlay.slint similarity index 100% rename from crates/qbz-slint/ui/shell/ArtPreviewOverlay.slint rename to crates/qbz-ui/ui/shell/ArtPreviewOverlay.slint diff --git a/crates/qbz-slint/ui/shell/AudioStamp.slint b/crates/qbz-ui/ui/shell/AudioStamp.slint similarity index 100% rename from crates/qbz-slint/ui/shell/AudioStamp.slint rename to crates/qbz-ui/ui/shell/AudioStamp.slint diff --git a/crates/qbz-slint/ui/shell/CastPicker.slint b/crates/qbz-ui/ui/shell/CastPicker.slint similarity index 100% rename from crates/qbz-slint/ui/shell/CastPicker.slint rename to crates/qbz-ui/ui/shell/CastPicker.slint diff --git a/crates/qbz-slint/ui/shell/CustomizeShortcutsModal.slint b/crates/qbz-ui/ui/shell/CustomizeShortcutsModal.slint similarity index 100% rename from crates/qbz-slint/ui/shell/CustomizeShortcutsModal.slint rename to crates/qbz-ui/ui/shell/CustomizeShortcutsModal.slint diff --git a/crates/qbz-slint/ui/shell/HeaderBar.slint b/crates/qbz-ui/ui/shell/HeaderBar.slint similarity index 100% rename from crates/qbz-slint/ui/shell/HeaderBar.slint rename to crates/qbz-ui/ui/shell/HeaderBar.slint diff --git a/crates/qbz-slint/ui/shell/HeaderMenuOverlay.slint b/crates/qbz-ui/ui/shell/HeaderMenuOverlay.slint similarity index 100% rename from crates/qbz-slint/ui/shell/HeaderMenuOverlay.slint rename to crates/qbz-ui/ui/shell/HeaderMenuOverlay.slint diff --git a/crates/qbz-slint/ui/shell/KeyboardShortcutsModal.slint b/crates/qbz-ui/ui/shell/KeyboardShortcutsModal.slint similarity index 100% rename from crates/qbz-slint/ui/shell/KeyboardShortcutsModal.slint rename to crates/qbz-ui/ui/shell/KeyboardShortcutsModal.slint diff --git a/crates/qbz-slint/ui/shell/LinkResolverModal.slint b/crates/qbz-ui/ui/shell/LinkResolverModal.slint similarity index 100% rename from crates/qbz-slint/ui/shell/LinkResolverModal.slint rename to crates/qbz-ui/ui/shell/LinkResolverModal.slint diff --git a/crates/qbz-slint/ui/shell/LyricsControlsFlyout.slint b/crates/qbz-ui/ui/shell/LyricsControlsFlyout.slint similarity index 100% rename from crates/qbz-slint/ui/shell/LyricsControlsFlyout.slint rename to crates/qbz-ui/ui/shell/LyricsControlsFlyout.slint diff --git a/crates/qbz-slint/ui/shell/LyricsLinesView.slint b/crates/qbz-ui/ui/shell/LyricsLinesView.slint similarity index 100% rename from crates/qbz-slint/ui/shell/LyricsLinesView.slint rename to crates/qbz-ui/ui/shell/LyricsLinesView.slint diff --git a/crates/qbz-slint/ui/shell/LyricsSidebar.slint b/crates/qbz-ui/ui/shell/LyricsSidebar.slint similarity index 100% rename from crates/qbz-slint/ui/shell/LyricsSidebar.slint rename to crates/qbz-ui/ui/shell/LyricsSidebar.slint diff --git a/crates/qbz-slint/ui/shell/NavButtons.slint b/crates/qbz-ui/ui/shell/NavButtons.slint similarity index 100% rename from crates/qbz-slint/ui/shell/NavButtons.slint rename to crates/qbz-ui/ui/shell/NavButtons.slint diff --git a/crates/qbz-slint/ui/shell/NavMenuItem.slint b/crates/qbz-ui/ui/shell/NavMenuItem.slint similarity index 100% rename from crates/qbz-slint/ui/shell/NavMenuItem.slint rename to crates/qbz-ui/ui/shell/NavMenuItem.slint diff --git a/crates/qbz-slint/ui/shell/NowPlayingBar.slint b/crates/qbz-ui/ui/shell/NowPlayingBar.slint similarity index 100% rename from crates/qbz-slint/ui/shell/NowPlayingBar.slint rename to crates/qbz-ui/ui/shell/NowPlayingBar.slint diff --git a/crates/qbz-slint/ui/shell/PlayerBar.slint b/crates/qbz-ui/ui/shell/PlayerBar.slint similarity index 100% rename from crates/qbz-slint/ui/shell/PlayerBar.slint rename to crates/qbz-ui/ui/shell/PlayerBar.slint diff --git a/crates/qbz-slint/ui/shell/PlayerBarSmall.slint b/crates/qbz-ui/ui/shell/PlayerBarSmall.slint similarity index 100% rename from crates/qbz-slint/ui/shell/PlayerBarSmall.slint rename to crates/qbz-ui/ui/shell/PlayerBarSmall.slint diff --git a/crates/qbz-slint/ui/shell/QconnectDevModal.slint b/crates/qbz-ui/ui/shell/QconnectDevModal.slint similarity index 100% rename from crates/qbz-slint/ui/shell/QconnectDevModal.slint rename to crates/qbz-ui/ui/shell/QconnectDevModal.slint diff --git a/crates/qbz-slint/ui/shell/QueueSidebar.slint b/crates/qbz-ui/ui/shell/QueueSidebar.slint similarity index 100% rename from crates/qbz-slint/ui/shell/QueueSidebar.slint rename to crates/qbz-ui/ui/shell/QueueSidebar.slint diff --git a/crates/qbz-slint/ui/shell/SeekBar.slint b/crates/qbz-ui/ui/shell/SeekBar.slint similarity index 100% rename from crates/qbz-slint/ui/shell/SeekBar.slint rename to crates/qbz-ui/ui/shell/SeekBar.slint diff --git a/crates/qbz-slint/ui/shell/Sidebar.slint b/crates/qbz-ui/ui/shell/Sidebar.slint similarity index 100% rename from crates/qbz-slint/ui/shell/Sidebar.slint rename to crates/qbz-ui/ui/shell/Sidebar.slint diff --git a/crates/qbz-slint/ui/shell/SidebarFolderPopup.slint b/crates/qbz-ui/ui/shell/SidebarFolderPopup.slint similarity index 100% rename from crates/qbz-slint/ui/shell/SidebarFolderPopup.slint rename to crates/qbz-ui/ui/shell/SidebarFolderPopup.slint diff --git a/crates/qbz-slint/ui/shell/SidebarNowPlayingDock.slint b/crates/qbz-ui/ui/shell/SidebarNowPlayingDock.slint similarity index 100% rename from crates/qbz-slint/ui/shell/SidebarNowPlayingDock.slint rename to crates/qbz-ui/ui/shell/SidebarNowPlayingDock.slint diff --git a/crates/qbz-slint/ui/shell/SidebarPlaylistsPopup.slint b/crates/qbz-ui/ui/shell/SidebarPlaylistsPopup.slint similarity index 100% rename from crates/qbz-slint/ui/shell/SidebarPlaylistsPopup.slint rename to crates/qbz-ui/ui/shell/SidebarPlaylistsPopup.slint diff --git a/crates/qbz-slint/ui/shell/SidebarTooltip.slint b/crates/qbz-ui/ui/shell/SidebarTooltip.slint similarity index 100% rename from crates/qbz-slint/ui/shell/SidebarTooltip.slint rename to crates/qbz-ui/ui/shell/SidebarTooltip.slint diff --git a/crates/qbz-slint/ui/shell/SongCard.slint b/crates/qbz-ui/ui/shell/SongCard.slint similarity index 100% rename from crates/qbz-slint/ui/shell/SongCard.slint rename to crates/qbz-ui/ui/shell/SongCard.slint diff --git a/crates/qbz-slint/ui/shell/TooltipOverlay.slint b/crates/qbz-ui/ui/shell/TooltipOverlay.slint similarity index 100% rename from crates/qbz-slint/ui/shell/TooltipOverlay.slint rename to crates/qbz-ui/ui/shell/TooltipOverlay.slint diff --git a/crates/qbz-slint/ui/shell/TransportControls.slint b/crates/qbz-ui/ui/shell/TransportControls.slint similarity index 100% rename from crates/qbz-slint/ui/shell/TransportControls.slint rename to crates/qbz-ui/ui/shell/TransportControls.slint diff --git a/crates/qbz-slint/ui/splash/SplashScreen.slint b/crates/qbz-ui/ui/splash/SplashScreen.slint similarity index 100% rename from crates/qbz-slint/ui/splash/SplashScreen.slint rename to crates/qbz-ui/ui/splash/SplashScreen.slint diff --git a/crates/qbz-slint/ui/state.slint b/crates/qbz-ui/ui/state.slint similarity index 100% rename from crates/qbz-slint/ui/state.slint rename to crates/qbz-ui/ui/state.slint diff --git a/crates/qbz-slint/Cargo.toml b/crates/qbz/Cargo.toml similarity index 98% rename from crates/qbz-slint/Cargo.toml rename to crates/qbz/Cargo.toml index 7c5989714..b0d9f75dd 100644 --- a/crates/qbz-slint/Cargo.toml +++ b/crates/qbz/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "qbz-slint" +name = "qbz" version.workspace = true edition.workspace = true license.workspace = true @@ -7,7 +7,7 @@ repository.workspace = true description = "Slint functional MVP shell for QBZ (private branch only)" [[bin]] -name = "qbz-slint" +name = "qbz" path = "src/main.rs" [dependencies] @@ -45,6 +45,7 @@ slint = { version = "=1.16.1", default-features = false, features = [ # does not follow semver, and a mismatch makes with_winit_window() return None. i-slint-backend-winit = "=1.16.1" qbz-music-link = { path = "../qbz-music-link" } +qbz-ui = { path = "../qbz-ui" } log = { workspace = true } env_logger = "0.11" tokio = { workspace = true } @@ -144,5 +145,3 @@ objc2-app-kit = { version = "0.2", default-features = false, features = [ "NSEvent", ] } -[build-dependencies] -slint-build = "1.16" diff --git a/crates/qbz-slint/icons/tray-color-22.png b/crates/qbz/icons/tray-color-22.png similarity index 100% rename from crates/qbz-slint/icons/tray-color-22.png rename to crates/qbz/icons/tray-color-22.png diff --git a/crates/qbz-slint/icons/tray-color-32.png b/crates/qbz/icons/tray-color-32.png similarity index 100% rename from crates/qbz-slint/icons/tray-color-32.png rename to crates/qbz/icons/tray-color-32.png diff --git a/crates/qbz-slint/icons/tray-color-44.png b/crates/qbz/icons/tray-color-44.png similarity index 100% rename from crates/qbz-slint/icons/tray-color-44.png rename to crates/qbz/icons/tray-color-44.png diff --git a/crates/qbz-slint/icons/tray-color-64.png b/crates/qbz/icons/tray-color-64.png similarity index 100% rename from crates/qbz-slint/icons/tray-color-64.png rename to crates/qbz/icons/tray-color-64.png diff --git a/crates/qbz-slint/icons/tray-dark-22.png b/crates/qbz/icons/tray-dark-22.png similarity index 100% rename from crates/qbz-slint/icons/tray-dark-22.png rename to crates/qbz/icons/tray-dark-22.png diff --git a/crates/qbz-slint/icons/tray-dark-32.png b/crates/qbz/icons/tray-dark-32.png similarity index 100% rename from crates/qbz-slint/icons/tray-dark-32.png rename to crates/qbz/icons/tray-dark-32.png diff --git a/crates/qbz-slint/icons/tray-dark-44.png b/crates/qbz/icons/tray-dark-44.png similarity index 100% rename from crates/qbz-slint/icons/tray-dark-44.png rename to crates/qbz/icons/tray-dark-44.png diff --git a/crates/qbz-slint/icons/tray-dark-64.png b/crates/qbz/icons/tray-dark-64.png similarity index 100% rename from crates/qbz-slint/icons/tray-dark-64.png rename to crates/qbz/icons/tray-dark-64.png diff --git a/crates/qbz-slint/icons/tray-light-22.png b/crates/qbz/icons/tray-light-22.png similarity index 100% rename from crates/qbz-slint/icons/tray-light-22.png rename to crates/qbz/icons/tray-light-22.png diff --git a/crates/qbz-slint/icons/tray-light-32.png b/crates/qbz/icons/tray-light-32.png similarity index 100% rename from crates/qbz-slint/icons/tray-light-32.png rename to crates/qbz/icons/tray-light-32.png diff --git a/crates/qbz-slint/icons/tray-light-44.png b/crates/qbz/icons/tray-light-44.png similarity index 100% rename from crates/qbz-slint/icons/tray-light-44.png rename to crates/qbz/icons/tray-light-44.png diff --git a/crates/qbz-slint/icons/tray-light-64.png b/crates/qbz/icons/tray-light-64.png similarity index 100% rename from crates/qbz-slint/icons/tray-light-64.png rename to crates/qbz/icons/tray-light-64.png diff --git a/crates/qbz-slint/src/adapter.rs b/crates/qbz/src/adapter.rs similarity index 100% rename from crates/qbz-slint/src/adapter.rs rename to crates/qbz/src/adapter.rs diff --git a/crates/qbz-slint/src/album.rs b/crates/qbz/src/album.rs similarity index 100% rename from crates/qbz-slint/src/album.rs rename to crates/qbz/src/album.rs diff --git a/crates/qbz-slint/src/album_map.rs b/crates/qbz/src/album_map.rs similarity index 100% rename from crates/qbz-slint/src/album_map.rs rename to crates/qbz/src/album_map.rs diff --git a/crates/qbz-slint/src/artist.rs b/crates/qbz/src/artist.rs similarity index 100% rename from crates/qbz-slint/src/artist.rs rename to crates/qbz/src/artist.rs diff --git a/crates/qbz-slint/src/artist_blacklist.rs b/crates/qbz/src/artist_blacklist.rs similarity index 100% rename from crates/qbz-slint/src/artist_blacklist.rs rename to crates/qbz/src/artist_blacklist.rs diff --git a/crates/qbz-slint/src/artist_prefs.rs b/crates/qbz/src/artist_prefs.rs similarity index 100% rename from crates/qbz-slint/src/artist_prefs.rs rename to crates/qbz/src/artist_prefs.rs diff --git a/crates/qbz-slint/src/artist_releases.rs b/crates/qbz/src/artist_releases.rs similarity index 100% rename from crates/qbz-slint/src/artist_releases.rs rename to crates/qbz/src/artist_releases.rs diff --git a/crates/qbz-slint/src/artwork.rs b/crates/qbz/src/artwork.rs similarity index 100% rename from crates/qbz-slint/src/artwork.rs rename to crates/qbz/src/artwork.rs diff --git a/crates/qbz-slint/src/auth.rs b/crates/qbz/src/auth.rs similarity index 100% rename from crates/qbz-slint/src/auth.rs rename to crates/qbz/src/auth.rs diff --git a/crates/qbz-slint/src/award.rs b/crates/qbz/src/award.rs similarity index 100% rename from crates/qbz-slint/src/award.rs rename to crates/qbz/src/award.rs diff --git a/crates/qbz-slint/src/blacklist_manager.rs b/crates/qbz/src/blacklist_manager.rs similarity index 100% rename from crates/qbz-slint/src/blacklist_manager.rs rename to crates/qbz/src/blacklist_manager.rs diff --git a/crates/qbz-slint/src/booklet.rs b/crates/qbz/src/booklet.rs similarity index 100% rename from crates/qbz-slint/src/booklet.rs rename to crates/qbz/src/booklet.rs diff --git a/crates/qbz-slint/src/cast_service.rs b/crates/qbz/src/cast_service.rs similarity index 100% rename from crates/qbz-slint/src/cast_service.rs rename to crates/qbz/src/cast_service.rs diff --git a/crates/qbz-slint/src/commands.rs b/crates/qbz/src/commands.rs similarity index 100% rename from crates/qbz-slint/src/commands.rs rename to crates/qbz/src/commands.rs diff --git a/crates/qbz-slint/src/custom_artwork.rs b/crates/qbz/src/custom_artwork.rs similarity index 100% rename from crates/qbz-slint/src/custom_artwork.rs rename to crates/qbz/src/custom_artwork.rs diff --git a/crates/qbz-slint/src/dac_wizard.rs b/crates/qbz/src/dac_wizard.rs similarity index 100% rename from crates/qbz-slint/src/dac_wizard.rs rename to crates/qbz/src/dac_wizard.rs diff --git a/crates/qbz-slint/src/dates.rs b/crates/qbz/src/dates.rs similarity index 100% rename from crates/qbz-slint/src/dates.rs rename to crates/qbz/src/dates.rs diff --git a/crates/qbz-slint/src/discord_rpc.rs b/crates/qbz/src/discord_rpc.rs similarity index 100% rename from crates/qbz-slint/src/discord_rpc.rs rename to crates/qbz/src/discord_rpc.rs diff --git a/crates/qbz-slint/src/discover_browse.rs b/crates/qbz/src/discover_browse.rs similarity index 100% rename from crates/qbz-slint/src/discover_browse.rs rename to crates/qbz/src/discover_browse.rs diff --git a/crates/qbz-slint/src/discover_prefs.rs b/crates/qbz/src/discover_prefs.rs similarity index 100% rename from crates/qbz-slint/src/discover_prefs.rs rename to crates/qbz/src/discover_prefs.rs diff --git a/crates/qbz-slint/src/discovery_dismiss.rs b/crates/qbz/src/discovery_dismiss.rs similarity index 100% rename from crates/qbz-slint/src/discovery_dismiss.rs rename to crates/qbz/src/discovery_dismiss.rs diff --git a/crates/qbz-slint/src/drag.rs b/crates/qbz/src/drag.rs similarity index 100% rename from crates/qbz-slint/src/drag.rs rename to crates/qbz/src/drag.rs diff --git a/crates/qbz-slint/src/ephemeral.rs b/crates/qbz/src/ephemeral.rs similarity index 100% rename from crates/qbz-slint/src/ephemeral.rs rename to crates/qbz/src/ephemeral.rs diff --git a/crates/qbz-slint/src/fav_cache.rs b/crates/qbz/src/fav_cache.rs similarity index 100% rename from crates/qbz-slint/src/fav_cache.rs rename to crates/qbz/src/fav_cache.rs diff --git a/crates/qbz-slint/src/favorites.rs b/crates/qbz/src/favorites.rs similarity index 100% rename from crates/qbz-slint/src/favorites.rs rename to crates/qbz/src/favorites.rs diff --git a/crates/qbz-slint/src/favorites_prefs.rs b/crates/qbz/src/favorites_prefs.rs similarity index 100% rename from crates/qbz-slint/src/favorites_prefs.rs rename to crates/qbz/src/favorites_prefs.rs diff --git a/crates/qbz-slint/src/folders.rs b/crates/qbz/src/folders.rs similarity index 100% rename from crates/qbz-slint/src/folders.rs rename to crates/qbz/src/folders.rs diff --git a/crates/qbz-slint/src/foryou.rs b/crates/qbz/src/foryou.rs similarity index 100% rename from crates/qbz-slint/src/foryou.rs rename to crates/qbz/src/foryou.rs diff --git a/crates/qbz-slint/src/genre_filter.rs b/crates/qbz/src/genre_filter.rs similarity index 100% rename from crates/qbz-slint/src/genre_filter.rs rename to crates/qbz/src/genre_filter.rs diff --git a/crates/qbz-slint/src/home.rs b/crates/qbz/src/home.rs similarity index 100% rename from crates/qbz-slint/src/home.rs rename to crates/qbz/src/home.rs diff --git a/crates/qbz-slint/src/immersive.rs b/crates/qbz/src/immersive.rs similarity index 100% rename from crates/qbz-slint/src/immersive.rs rename to crates/qbz/src/immersive.rs diff --git a/crates/qbz-slint/src/info_modals.rs b/crates/qbz/src/info_modals.rs similarity index 100% rename from crates/qbz-slint/src/info_modals.rs rename to crates/qbz/src/info_modals.rs diff --git a/crates/qbz-slint/src/keybindings.rs b/crates/qbz/src/keybindings.rs similarity index 100% rename from crates/qbz-slint/src/keybindings.rs rename to crates/qbz/src/keybindings.rs diff --git a/crates/qbz-slint/src/label.rs b/crates/qbz/src/label.rs similarity index 100% rename from crates/qbz-slint/src/label.rs rename to crates/qbz/src/label.rs diff --git a/crates/qbz-slint/src/library_db.rs b/crates/qbz/src/library_db.rs similarity index 100% rename from crates/qbz-slint/src/library_db.rs rename to crates/qbz/src/library_db.rs diff --git a/crates/qbz-slint/src/link_resolver.rs b/crates/qbz/src/link_resolver.rs similarity index 100% rename from crates/qbz-slint/src/link_resolver.rs rename to crates/qbz/src/link_resolver.rs diff --git a/crates/qbz-slint/src/local_library.rs b/crates/qbz/src/local_library.rs similarity index 100% rename from crates/qbz-slint/src/local_library.rs rename to crates/qbz/src/local_library.rs diff --git a/crates/qbz-slint/src/local_library_settings.rs b/crates/qbz/src/local_library_settings.rs similarity index 100% rename from crates/qbz-slint/src/local_library_settings.rs rename to crates/qbz/src/local_library_settings.rs diff --git a/crates/qbz-slint/src/local_playlist.rs b/crates/qbz/src/local_playlist.rs similarity index 100% rename from crates/qbz-slint/src/local_playlist.rs rename to crates/qbz/src/local_playlist.rs diff --git a/crates/qbz-slint/src/locallibrary_prefs.rs b/crates/qbz/src/locallibrary_prefs.rs similarity index 100% rename from crates/qbz-slint/src/locallibrary_prefs.rs rename to crates/qbz/src/locallibrary_prefs.rs diff --git a/crates/qbz-slint/src/location_view.rs b/crates/qbz/src/location_view.rs similarity index 100% rename from crates/qbz-slint/src/location_view.rs rename to crates/qbz/src/location_view.rs diff --git a/crates/qbz-slint/src/lyrics.rs b/crates/qbz/src/lyrics.rs similarity index 100% rename from crates/qbz-slint/src/lyrics.rs rename to crates/qbz/src/lyrics.rs diff --git a/crates/qbz-slint/src/lyrics_measure.rs b/crates/qbz/src/lyrics_measure.rs similarity index 99% rename from crates/qbz-slint/src/lyrics_measure.rs rename to crates/qbz/src/lyrics_measure.rs index b19cc44fc..d4c5cd77e 100644 --- a/crates/qbz-slint/src/lyrics_measure.rs +++ b/crates/qbz/src/lyrics_measure.rs @@ -70,7 +70,7 @@ struct LoadedFont { /// the Inter bold used for the "System"/default family. `include_bytes!` paths /// are relative to THIS source file (`crates/qbz-slint/src/`). static FONT_SYSTEM_INTER_BOLD: &[u8] = - include_bytes!("../ui/assets/fonts/Inter_18pt-Bold.ttf"); + include_bytes!("../../qbz-ui/ui/assets/fonts/Inter_18pt-Bold.ttf"); static FONT_LINE_SEED_JP: &[u8] = include_bytes!("../../../static/fonts/LINESeedJP-Regular.ttf"); static FONT_MONTSERRAT: &[u8] = diff --git a/crates/qbz-slint/src/lyrics_prefs.rs b/crates/qbz/src/lyrics_prefs.rs similarity index 100% rename from crates/qbz-slint/src/lyrics_prefs.rs rename to crates/qbz/src/lyrics_prefs.rs diff --git a/crates/qbz-slint/src/lyrics_sync.rs b/crates/qbz/src/lyrics_sync.rs similarity index 100% rename from crates/qbz-slint/src/lyrics_sync.rs rename to crates/qbz/src/lyrics_sync.rs diff --git a/crates/qbz-slint/src/main.rs b/crates/qbz/src/main.rs similarity index 99% rename from crates/qbz-slint/src/main.rs rename to crates/qbz/src/main.rs index 0a923d88d..84750a36e 100644 --- a/crates/qbz-slint/src/main.rs +++ b/crates/qbz/src/main.rs @@ -5,14 +5,16 @@ //! (`qbz-nix-docs/qbz-adr/qbz_slint_functional_poc_adr.md`). //! //! Lives only on the private `slint-mvp` branch (ADR-007). The Slint UI -//! tree is compiled from `ui/app.slint` by `build.rs`; `include_modules!` -//! pulls in the generated Rust bindings. +//! tree is compiled in the `qbz-ui` library crate (its `build.rs` runs +//! `slint-build` on `ui/app.slint`); this binary re-exports all generated +//! types at the crate root so existing `crate::AppWindow` / `crate::*State` +//! references resolve unchanged. //! //! Status: foundation tokens, login screen, app shell, functional //! system-browser OAuth, saved-session restore, and a real Discover / //! Home view fed by the Qobuz discover index with cached artwork. -slint::include_modules!(); +pub use qbz_ui::*; mod adapter; mod album; diff --git a/crates/qbz-slint/src/media_controls.rs b/crates/qbz/src/media_controls.rs similarity index 100% rename from crates/qbz-slint/src/media_controls.rs rename to crates/qbz/src/media_controls.rs diff --git a/crates/qbz-slint/src/miniplayer.rs b/crates/qbz/src/miniplayer.rs similarity index 100% rename from crates/qbz-slint/src/miniplayer.rs rename to crates/qbz/src/miniplayer.rs diff --git a/crates/qbz-slint/src/mix.rs b/crates/qbz/src/mix.rs similarity index 100% rename from crates/qbz-slint/src/mix.rs rename to crates/qbz/src/mix.rs diff --git a/crates/qbz-slint/src/musician.rs b/crates/qbz/src/musician.rs similarity index 100% rename from crates/qbz-slint/src/musician.rs rename to crates/qbz/src/musician.rs diff --git a/crates/qbz-slint/src/myqbz.rs b/crates/qbz/src/myqbz.rs similarity index 100% rename from crates/qbz-slint/src/myqbz.rs rename to crates/qbz/src/myqbz.rs diff --git a/crates/qbz-slint/src/myqbz_add.rs b/crates/qbz/src/myqbz_add.rs similarity index 100% rename from crates/qbz-slint/src/myqbz_add.rs rename to crates/qbz/src/myqbz_add.rs diff --git a/crates/qbz-slint/src/myqbz_builder.rs b/crates/qbz/src/myqbz_builder.rs similarity index 100% rename from crates/qbz-slint/src/myqbz_builder.rs rename to crates/qbz/src/myqbz_builder.rs diff --git a/crates/qbz-slint/src/myqbz_cover.rs b/crates/qbz/src/myqbz_cover.rs similarity index 100% rename from crates/qbz-slint/src/myqbz_cover.rs rename to crates/qbz/src/myqbz_cover.rs diff --git a/crates/qbz-slint/src/myqbz_detail.rs b/crates/qbz/src/myqbz_detail.rs similarity index 100% rename from crates/qbz-slint/src/myqbz_detail.rs rename to crates/qbz/src/myqbz_detail.rs diff --git a/crates/qbz-slint/src/myqbz_edit.rs b/crates/qbz/src/myqbz_edit.rs similarity index 100% rename from crates/qbz-slint/src/myqbz_edit.rs rename to crates/qbz/src/myqbz_edit.rs diff --git a/crates/qbz-slint/src/myqbz_mix.rs b/crates/qbz/src/myqbz_mix.rs similarity index 100% rename from crates/qbz-slint/src/myqbz_mix.rs rename to crates/qbz/src/myqbz_mix.rs diff --git a/crates/qbz-slint/src/myqbz_play.rs b/crates/qbz/src/myqbz_play.rs similarity index 100% rename from crates/qbz-slint/src/myqbz_play.rs rename to crates/qbz/src/myqbz_play.rs diff --git a/crates/qbz-slint/src/myqbz_prefs.rs b/crates/qbz/src/myqbz_prefs.rs similarity index 100% rename from crates/qbz-slint/src/myqbz_prefs.rs rename to crates/qbz/src/myqbz_prefs.rs diff --git a/crates/qbz-slint/src/myqbz_view_prefs.rs b/crates/qbz/src/myqbz_view_prefs.rs similarity index 100% rename from crates/qbz-slint/src/myqbz_view_prefs.rs rename to crates/qbz/src/myqbz_view_prefs.rs diff --git a/crates/qbz-slint/src/nav.rs b/crates/qbz/src/nav.rs similarity index 100% rename from crates/qbz-slint/src/nav.rs rename to crates/qbz/src/nav.rs diff --git a/crates/qbz-slint/src/offline.rs b/crates/qbz/src/offline.rs similarity index 100% rename from crates/qbz-slint/src/offline.rs rename to crates/qbz/src/offline.rs diff --git a/crates/qbz-slint/src/offline_cache.rs b/crates/qbz/src/offline_cache.rs similarity index 100% rename from crates/qbz-slint/src/offline_cache.rs rename to crates/qbz/src/offline_cache.rs diff --git a/crates/qbz-slint/src/offline_favorites.rs b/crates/qbz/src/offline_favorites.rs similarity index 100% rename from crates/qbz-slint/src/offline_favorites.rs rename to crates/qbz/src/offline_favorites.rs diff --git a/crates/qbz-slint/src/offline_manager.rs b/crates/qbz/src/offline_manager.rs similarity index 100% rename from crates/qbz-slint/src/offline_manager.rs rename to crates/qbz/src/offline_manager.rs diff --git a/crates/qbz-slint/src/offline_mode.rs b/crates/qbz/src/offline_mode.rs similarity index 100% rename from crates/qbz-slint/src/offline_mode.rs rename to crates/qbz/src/offline_mode.rs diff --git a/crates/qbz-slint/src/play_history.rs b/crates/qbz/src/play_history.rs similarity index 100% rename from crates/qbz-slint/src/play_history.rs rename to crates/qbz/src/play_history.rs diff --git a/crates/qbz-slint/src/playback.rs b/crates/qbz/src/playback.rs similarity index 100% rename from crates/qbz-slint/src/playback.rs rename to crates/qbz/src/playback.rs diff --git a/crates/qbz-slint/src/playlist.rs b/crates/qbz/src/playlist.rs similarity index 100% rename from crates/qbz-slint/src/playlist.rs rename to crates/qbz/src/playlist.rs diff --git a/crates/qbz-slint/src/playlist_import.rs b/crates/qbz/src/playlist_import.rs similarity index 100% rename from crates/qbz-slint/src/playlist_import.rs rename to crates/qbz/src/playlist_import.rs diff --git a/crates/qbz-slint/src/playlist_manager.rs b/crates/qbz/src/playlist_manager.rs similarity index 100% rename from crates/qbz-slint/src/playlist_manager.rs rename to crates/qbz/src/playlist_manager.rs diff --git a/crates/qbz-slint/src/playlist_picker.rs b/crates/qbz/src/playlist_picker.rs similarity index 100% rename from crates/qbz-slint/src/playlist_picker.rs rename to crates/qbz/src/playlist_picker.rs diff --git a/crates/qbz-slint/src/playlist_snapshot.rs b/crates/qbz/src/playlist_snapshot.rs similarity index 100% rename from crates/qbz-slint/src/playlist_snapshot.rs rename to crates/qbz/src/playlist_snapshot.rs diff --git a/crates/qbz-slint/src/plex_auth.rs b/crates/qbz/src/plex_auth.rs similarity index 100% rename from crates/qbz-slint/src/plex_auth.rs rename to crates/qbz/src/plex_auth.rs diff --git a/crates/qbz-slint/src/plex_settings.rs b/crates/qbz/src/plex_settings.rs similarity index 100% rename from crates/qbz-slint/src/plex_settings.rs rename to crates/qbz/src/plex_settings.rs diff --git a/crates/qbz-slint/src/purchases.rs b/crates/qbz/src/purchases.rs similarity index 100% rename from crates/qbz-slint/src/purchases.rs rename to crates/qbz/src/purchases.rs diff --git a/crates/qbz-slint/src/qconnect_engine.rs b/crates/qbz/src/qconnect_engine.rs similarity index 100% rename from crates/qbz-slint/src/qconnect_engine.rs rename to crates/qbz/src/qconnect_engine.rs diff --git a/crates/qbz-slint/src/qconnect_event_sink.rs b/crates/qbz/src/qconnect_event_sink.rs similarity index 100% rename from crates/qbz-slint/src/qconnect_event_sink.rs rename to crates/qbz/src/qconnect_event_sink.rs diff --git a/crates/qbz-slint/src/qconnect_service.rs b/crates/qbz/src/qconnect_service.rs similarity index 100% rename from crates/qbz-slint/src/qconnect_service.rs rename to crates/qbz/src/qconnect_service.rs diff --git a/crates/qbz-slint/src/qconnect_transport.rs b/crates/qbz/src/qconnect_transport.rs similarity index 100% rename from crates/qbz-slint/src/qconnect_transport.rs rename to crates/qbz/src/qconnect_transport.rs diff --git a/crates/qbz-slint/src/quality.rs b/crates/qbz/src/quality.rs similarity index 100% rename from crates/qbz-slint/src/quality.rs rename to crates/qbz/src/quality.rs diff --git a/crates/qbz-slint/src/queue.rs b/crates/qbz/src/queue.rs similarity index 100% rename from crates/qbz-slint/src/queue.rs rename to crates/qbz/src/queue.rs diff --git a/crates/qbz-slint/src/recently.rs b/crates/qbz/src/recently.rs similarity index 100% rename from crates/qbz-slint/src/recently.rs rename to crates/qbz/src/recently.rs diff --git a/crates/qbz-slint/src/remote_stream.rs b/crates/qbz/src/remote_stream.rs similarity index 100% rename from crates/qbz-slint/src/remote_stream.rs rename to crates/qbz/src/remote_stream.rs diff --git a/crates/qbz-slint/src/scrobble.rs b/crates/qbz/src/scrobble.rs similarity index 100% rename from crates/qbz-slint/src/scrobble.rs rename to crates/qbz/src/scrobble.rs diff --git a/crates/qbz-slint/src/scrobbler_settings.rs b/crates/qbz/src/scrobbler_settings.rs similarity index 100% rename from crates/qbz-slint/src/scrobbler_settings.rs rename to crates/qbz/src/scrobbler_settings.rs diff --git a/crates/qbz-slint/src/search.rs b/crates/qbz/src/search.rs similarity index 100% rename from crates/qbz-slint/src/search.rs rename to crates/qbz/src/search.rs diff --git a/crates/qbz-slint/src/search_service.rs b/crates/qbz/src/search_service.rs similarity index 100% rename from crates/qbz-slint/src/search_service.rs rename to crates/qbz/src/search_service.rs diff --git a/crates/qbz-slint/src/session_persist.rs b/crates/qbz/src/session_persist.rs similarity index 100% rename from crates/qbz-slint/src/session_persist.rs rename to crates/qbz/src/session_persist.rs diff --git a/crates/qbz-slint/src/settings.rs b/crates/qbz/src/settings.rs similarity index 100% rename from crates/qbz-slint/src/settings.rs rename to crates/qbz/src/settings.rs diff --git a/crates/qbz-slint/src/shader_underlay.rs b/crates/qbz/src/shader_underlay.rs similarity index 98% rename from crates/qbz-slint/src/shader_underlay.rs rename to crates/qbz/src/shader_underlay.rs index 35dd2e17d..b102e9f72 100644 --- a/crates/qbz-slint/src/shader_underlay.rs +++ b/crates/qbz/src/shader_underlay.rs @@ -80,9 +80,9 @@ struct RenderState { /// scene = one `include_str!` here + one entry in the picker (state/UI). All /// must declare the SAME `Uniforms` block (group0/binding0) as plasma.wgsl. const SHADER_SOURCES: &[&str] = &[ - include_str!("../ui/shaders/plasma.wgsl"), - include_str!("../ui/shaders/tunnel.wgsl"), - include_str!("../ui/shaders/aurora.wgsl"), + include_str!("../../qbz-ui/ui/shaders/plasma.wgsl"), + include_str!("../../qbz-ui/ui/shaders/tunnel.wgsl"), + include_str!("../../qbz-ui/ui/shaders/aurora.wgsl"), ]; thread_local! { diff --git a/crates/qbz-slint/src/share.rs b/crates/qbz/src/share.rs similarity index 100% rename from crates/qbz-slint/src/share.rs rename to crates/qbz/src/share.rs diff --git a/crates/qbz-slint/src/sidebar.rs b/crates/qbz/src/sidebar.rs similarity index 100% rename from crates/qbz-slint/src/sidebar.rs rename to crates/qbz/src/sidebar.rs diff --git a/crates/qbz-slint/src/strip_html.rs b/crates/qbz/src/strip_html.rs similarity index 100% rename from crates/qbz-slint/src/strip_html.rs rename to crates/qbz/src/strip_html.rs diff --git a/crates/qbz-slint/src/suggestions.rs b/crates/qbz/src/suggestions.rs similarity index 100% rename from crates/qbz-slint/src/suggestions.rs rename to crates/qbz/src/suggestions.rs diff --git a/crates/qbz-slint/src/tag_editor.rs b/crates/qbz/src/tag_editor.rs similarity index 100% rename from crates/qbz-slint/src/tag_editor.rs rename to crates/qbz/src/tag_editor.rs diff --git a/crates/qbz-slint/src/theme.rs b/crates/qbz/src/theme.rs similarity index 100% rename from crates/qbz-slint/src/theme.rs rename to crates/qbz/src/theme.rs diff --git a/crates/qbz-slint/src/toast.rs b/crates/qbz/src/toast.rs similarity index 100% rename from crates/qbz-slint/src/toast.rs rename to crates/qbz/src/toast.rs diff --git a/crates/qbz-slint/src/tray/linux.rs b/crates/qbz/src/tray/linux.rs similarity index 100% rename from crates/qbz-slint/src/tray/linux.rs rename to crates/qbz/src/tray/linux.rs diff --git a/crates/qbz-slint/src/tray/macos.rs b/crates/qbz/src/tray/macos.rs similarity index 100% rename from crates/qbz-slint/src/tray/macos.rs rename to crates/qbz/src/tray/macos.rs diff --git a/crates/qbz-slint/src/tray/mod.rs b/crates/qbz/src/tray/mod.rs similarity index 100% rename from crates/qbz-slint/src/tray/mod.rs rename to crates/qbz/src/tray/mod.rs diff --git a/crates/qbz-slint/src/tray_settings.rs b/crates/qbz/src/tray_settings.rs similarity index 100% rename from crates/qbz-slint/src/tray_settings.rs rename to crates/qbz/src/tray_settings.rs diff --git a/crates/qbz-slint/src/ui_prefs.rs b/crates/qbz/src/ui_prefs.rs similarity index 100% rename from crates/qbz-slint/src/ui_prefs.rs rename to crates/qbz/src/ui_prefs.rs diff --git a/crates/qbz-slint/src/visualizer.rs b/crates/qbz/src/visualizer.rs similarity index 100% rename from crates/qbz-slint/src/visualizer.rs rename to crates/qbz/src/visualizer.rs diff --git a/scripts/slint-dev-fast.sh b/scripts/slint-dev-fast.sh index a8ede7a02..fdc08318b 100755 --- a/scripts/slint-dev-fast.sh +++ b/scripts/slint-dev-fast.sh @@ -23,4 +23,4 @@ set -euo pipefail cd "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/.." export RUSTFLAGS="-C target-feature=+aes,+ssse3 -C link-arg=-fuse-ld=mold -C debuginfo=0 -Z threads=${THREADS:-16}" -exec cargo +nightly run --manifest-path crates/Cargo.toml -p qbz-slint "$@" +exec cargo +nightly run --manifest-path crates/Cargo.toml -p qbz "$@" diff --git a/scripts/slint-dev-mac.sh b/scripts/slint-dev-mac.sh index af830ad14..dd7cb56e3 100755 --- a/scripts/slint-dev-mac.sh +++ b/scripts/slint-dev-mac.sh @@ -59,7 +59,7 @@ if [[ "$FAST" == true ]]; then # DEBUG: opt-level 0 skips the heavy LLVM passes; -C debuginfo=0 means less to # generate and link. Unoptimised — never trust runtime behaviour from this. export RUSTFLAGS="${RUSTFLAGS} -C debuginfo=0" - exec cargo +nightly run --manifest-path crates/Cargo.toml -p qbz-slint "$@" + exec cargo +nightly run --manifest-path crates/Cargo.toml -p qbz "$@" else - exec cargo +nightly run --release --manifest-path crates/Cargo.toml -p qbz-slint "$@" + exec cargo +nightly run --release --manifest-path crates/Cargo.toml -p qbz "$@" fi diff --git a/scripts/slint-dev.sh b/scripts/slint-dev.sh index b377aea16..deed87b8a 100755 --- a/scripts/slint-dev.sh +++ b/scripts/slint-dev.sh @@ -22,4 +22,4 @@ cd "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/.." # `mold` (faster linker) + more frontend threads only cut COMPILE time — they # don't change the optimised binary, so release perf measurements stay valid. export RUSTFLAGS="-C target-feature=+aes,+ssse3 -C link-arg=-fuse-ld=mold -Z threads=${THREADS:-16}" -exec cargo +nightly run --release --manifest-path crates/Cargo.toml -p qbz-slint "$@" +exec cargo +nightly run --release --manifest-path crates/Cargo.toml -p qbz "$@" diff --git a/scripts/slint-run.sh b/scripts/slint-run.sh index c7e758770..b552605f5 100755 --- a/scripts/slint-run.sh +++ b/scripts/slint-run.sh @@ -67,13 +67,13 @@ if [[ "${CAPPED}" == 1 ]] && command -v cargo-capped >/dev/null 2>&1; then export BUILD_MEM_MAX="${cap}M" export BUILD_MEM_HIGH="$(( cap - 2000 ))M" echo "[slint-run] cgroup cap: high=${BUILD_MEM_HIGH} max=${BUILD_MEM_MAX}" - cargo-capped cargo +nightly build --release --manifest-path crates/Cargo.toml -p qbz-slint + cargo-capped cargo +nightly build --release --manifest-path crates/Cargo.toml -p qbz else - cargo +nightly build --release --manifest-path crates/Cargo.toml -p qbz-slint + cargo +nightly build --release --manifest-path crates/Cargo.toml -p qbz fi [[ "${NORUN:-0}" == 1 ]] && { echo "[slint-run] build done (NORUN set)."; exit 0; } # exec the binary directly — no `cargo run`, so no CARGO_* env / cargo context, # so the monitor shows `qbz-slint`. -exec crates/target/release/qbz-slint "$@" +exec crates/target/release/qbz "$@"