diff --git a/Shared/Channels/ChannelPlaylistView.swift b/Shared/Channels/ChannelPlaylistView.swift index 1ca2d48e..3a61450f 100644 --- a/Shared/Channels/ChannelPlaylistView.swift +++ b/Shared/Channels/ChannelPlaylistView.swift @@ -109,22 +109,7 @@ struct ChannelPlaylistView: View { #if os(iOS) private var playlistMenu: some View { - Menu { - playButtons - - favoriteButton - - ListingStyleButtons(listingStyle: $channelPlaylistListingStyle) - - Section { - HideWatchedButtons() - HideShortsButtons() - } - - Section { - SettingsButtons() - } - } label: { + ZStack { HStack(spacing: 12) { if let url = store.item?.thumbnailURL ?? playlist.thumbnailURL { ThumbnailView(url: url) @@ -141,8 +126,43 @@ struct ChannelPlaylistView: View { .imageScale(.small) } .frame(maxWidth: 320) - .transaction { t in t.animation = nil } + + Menu { + playButtons + + favoriteButton + + ListingStyleButtons(listingStyle: $channelPlaylistListingStyle) + + Section { + HideWatchedButtons() + HideShortsButtons() + } + + Section { + SettingsButtons() + } + } label: { + HStack(spacing: 12) { + if let url = store.item?.thumbnailURL ?? playlist.thumbnailURL { + ThumbnailView(url: url) + .frame(width: 60, height: 30) + .clipShape(RoundedRectangle(cornerRadius: 2)) + } + + Text(playlist.title) + .font(.headline) + .foregroundColor(.primary) + + Image(systemName: "chevron.down.circle.fill") + .foregroundColor(.accentColor) + .imageScale(.small) + } + .frame(maxWidth: 320) + .opacity(0) + } } + .transaction { t in t.animation = nil } } #endif diff --git a/Shared/Home/HomeView.swift b/Shared/Home/HomeView.swift index a042f0c9..aa4c2abf 100644 --- a/Shared/Home/HomeView.swift +++ b/Shared/Home/HomeView.swift @@ -211,19 +211,7 @@ struct HomeView: View { #if os(iOS) var homeMenu: some View { - Menu { - Section { - HideWatchedButtons() - HideShortsButtons() - } - Section { - Button { - navigation.presentingHomeSettings = true - } label: { - Label("Home Settings", systemImage: "gear") - } - } - } label: { + ZStack { HStack(spacing: 12) { Text("Home") .foregroundColor(.primary) @@ -233,8 +221,33 @@ struct HomeView: View { .foregroundColor(.accentColor) .imageScale(.small) } - .transaction { t in t.animation = nil } + + Menu { + Section { + HideWatchedButtons() + HideShortsButtons() + } + Section { + Button { + navigation.presentingHomeSettings = true + } label: { + Label("Home Settings", systemImage: "gear") + } + } + } label: { + HStack(spacing: 12) { + Text("Home") + .foregroundColor(.primary) + .font(.headline) + + Image(systemName: "chevron.down.circle.fill") + .foregroundColor(.accentColor) + .imageScale(.small) + } + .opacity(0) + } } + .transaction { t in t.animation = nil } } #endif } diff --git a/Shared/Playlists/PlaylistsView.swift b/Shared/Playlists/PlaylistsView.swift index 9f927ee1..0ed28aee 100644 --- a/Shared/Playlists/PlaylistsView.swift +++ b/Shared/Playlists/PlaylistsView.swift @@ -190,40 +190,7 @@ struct PlaylistsView: View { #if os(iOS) var playlistsMenu: some View { let title = currentPlaylist?.title ?? "Playlists" - return Menu { - Menu { - selectPlaylistButton - } label: { - Label(title, systemImage: "list.and.film") - } - Section { - if let currentPlaylist { - playButtons - - editPlaylistButton - - if let account = accounts.current { - FavoriteButton(item: FavoriteItem(section: .playlist(account.id, currentPlaylist.id))) - .id(currentPlaylist.id) - } - } - } - - if accounts.signedIn { - newPlaylistButton - } - - ListingStyleButtons(listingStyle: $playlistListingStyle) - - Section { - HideWatchedButtons() - HideShortsButtons() - } - - Section { - SettingsButtons() - } - } label: { + return ZStack { HStack(spacing: 12) { HStack(spacing: 6) { Image(systemName: "list.and.film") @@ -239,9 +206,61 @@ struct PlaylistsView: View { .imageScale(.small) .lineLimit(1) .frame(maxWidth: 320) - .transaction { t in t.animation = nil } + + Menu { + Menu { + selectPlaylistButton + } label: { + Label(title, systemImage: "list.and.film") + } + Section { + if let currentPlaylist { + playButtons + + editPlaylistButton + + if let account = accounts.current { + FavoriteButton(item: FavoriteItem(section: .playlist(account.id, currentPlaylist.id))) + .id(currentPlaylist.id) + } + } + } + + if accounts.signedIn { + newPlaylistButton + } + + ListingStyleButtons(listingStyle: $playlistListingStyle) + + Section { + HideWatchedButtons() + HideShortsButtons() + } + + Section { + SettingsButtons() + } + } label: { + HStack(spacing: 12) { + HStack(spacing: 6) { + Image(systemName: "list.and.film") + + Text(title) + .font(.headline) + } + .foregroundColor(.primary) + + Image(systemName: "chevron.down.circle.fill") + .foregroundColor(.accentColor) + } + .imageScale(.small) + .lineLimit(1) + .frame(maxWidth: 320) + .opacity(0) + } + .disabled(!accounts.signedIn) } - .disabled(!accounts.signedIn) + .transaction { t in t.animation = nil } } #endif diff --git a/Shared/Trending/TrendingView.swift b/Shared/Trending/TrendingView.swift index 73d15135..5428201e 100644 --- a/Shared/Trending/TrendingView.swift +++ b/Shared/Trending/TrendingView.swift @@ -168,22 +168,7 @@ struct TrendingView: View { #if os(iOS) var trendingMenu: some View { - Menu { - countryButton - - categoryButton - - ListingStyleButtons(listingStyle: $trendingListingStyle) - - Section { - HideWatchedButtons() - HideShortsButtons() - } - - Section { - SettingsButtons() - } - } label: { + ZStack { HStack(spacing: 12) { Text("\(country.flag) \(country.name)") .font(.headline) @@ -194,6 +179,35 @@ struct TrendingView: View { .imageScale(.small) } .frame(maxWidth: 320) + + Menu { + countryButton + + categoryButton + + ListingStyleButtons(listingStyle: $trendingListingStyle) + + Section { + HideWatchedButtons() + HideShortsButtons() + } + + Section { + SettingsButtons() + } + } label: { + HStack(spacing: 12) { + Text("\(country.flag) \(country.name)") + .font(.headline) + .foregroundColor(.primary) + + Image(systemName: "chevron.down.circle.fill") + .foregroundColor(.accentColor) + .imageScale(.small) + } + .frame(maxWidth: 320) + .opacity(0) + } } } #endif diff --git a/Shared/Views/OpenVideosView.swift b/Shared/Views/OpenVideosView.swift index 4684c552..e3705d8b 100644 --- a/Shared/Views/OpenVideosView.swift +++ b/Shared/Views/OpenVideosView.swift @@ -144,10 +144,15 @@ struct OpenVideosView: View { Spacer() #endif #if os(iOS) - Menu { - playbackModePicker - } label: { + ZStack { Text(playbackMode.description) + + Menu { + playbackModePicker + } label: { + Text(playbackMode.description) + .opacity(0) + } } #else playbackModePicker diff --git a/Shared/Views/PopularView.swift b/Shared/Views/PopularView.swift index 11e23f7d..8083bda7 100644 --- a/Shared/Views/PopularView.swift +++ b/Shared/Views/PopularView.swift @@ -90,18 +90,7 @@ struct PopularView: View { #if os(iOS) private var popularMenu: some View { - Menu { - ListingStyleButtons(listingStyle: $popularListingStyle) - - Section { - HideWatchedButtons() - HideShortsButtons() - } - - Section { - SettingsButtons() - } - } label: { + ZStack { HStack(spacing: 12) { HStack(spacing: 6) { Image(systemName: "chart.bar.fill") @@ -117,8 +106,38 @@ struct PopularView: View { .foregroundColor(.accentColor) .imageScale(.small) } - .transaction { t in t.animation = nil } + + Menu { + ListingStyleButtons(listingStyle: $popularListingStyle) + + Section { + HideWatchedButtons() + HideShortsButtons() + } + + Section { + SettingsButtons() + } + } label: { + HStack(spacing: 12) { + HStack(spacing: 6) { + Image(systemName: "chart.bar.fill") + .foregroundColor(.primary) + .imageScale(.small) + + Text("Popular") + .font(.headline) + .foregroundColor(.primary) + } + + Image(systemName: "chevron.down.circle.fill") + .foregroundColor(.accentColor) + .imageScale(.small) + } + .opacity(0) + } } + .transaction { t in t.animation = nil } } #endif