Add 'Open in Finder/Explorer' action - #28
Merged
Merged
Conversation
Inject IPlatformService and add an "Open in Finder/Explorer" button to the simulator dropdown. The new button closes the dropdown then calls OpenSimulatorDirectory, which resolves the simulator data path via SimulatorService.GetSimulatorDataPath and reveals it using FileSystem.RevealInFileManager. Uses Platform.IsMacCatalyst to choose the label (Finder vs Explorer) and adds a divider before the existing Clone action.
Redth
approved these changes
Feb 7, 2026
Redth
added a commit
that referenced
this pull request
Feb 24, 2026
- Remove hardcoded ContentInsets (auto-calculated from toolbar height, #26/#28) - Add HideScrollPocketOverlay for cleaner toolbar appearance (#27) - Use MacOSToolbarItem.SetIsVisible() for action items instead of objc_msgSend setHidden: workaround (#23/#31) - Keep objc_msgSend for menus/search (upstream #32 filed for IsVisible support) - Ghost Title item fix from SetContentLayout(null) now handled upstream (#24/#30) Filed upstream: #32 (IsVisible for menus/search), #33 (Release trimming strips types) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Redth
added a commit
that referenced
this pull request
Feb 24, 2026
* feat: add macOS AppKit head with native sidebar and toolbar support Add new MauiSherpa.MacOS project targeting net10.0-macos using the shinyorg/mauiplatforms backend (Platform.Maui.MacOS). Key features: - FlyoutPage with NativeSidebarFlyoutPageHandler for native NSOutlineView sidebar with grouped items (General, Android, Apple, Secrets) and SF Symbol icons - Single MacOSBlazorWebView as detail content area with JS interop navigation from native sidebar selections - IToolbarService in Core for Blazor pages to register native toolbar actions (Refresh, Create, etc.) that render as NSToolbar items - IPlatformService.IsMacOS property for platform detection - MainLayout hides Blazor sidebar on macOS (native sidebar replaces it) - Shared Blazor components/pages via symlinks from MauiSherpa head - macOS-specific entry point (Main.cs, MauiMacOSApp.cs, MacOSMauiProgram.cs) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Fix macOS AppKit blank window crash and add MauiDevFlow The app was crashing during startup because MainThread.BeginInvokeOnMainThread was called before Essentials was fully initialized (during NativeSidebarFlyoutPageHandler.ConnectHandler). Replaced with Dispatcher.Dispatch which is available earlier in the lifecycle. Also added MauiDevFlow agent and Blazor packages to the macOS project for debugging support, and updated skill documentation for macOS AppKit. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Add native toolbar items to macOS AppKit head Register IToolbarService in all 11 Blazor pages that have toolbar buttons (Refresh, Create, Import, etc.). On macOS, the Blazor .toolbar div is hidden via CSS and native NSToolbar buttons appear in the titlebar instead. Pages updated: Emulators, Devices, AndroidSdk, Keystores, Certificates, BundleIds, ProvisioningProfiles, AppleSimulators, AppleDevices, Secrets, Doctor. Also fix OnToolbarChanged to use Dispatcher.Dispatch instead of MainThread.BeginInvokeOnMainThread (same Essentials timing issue). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Use SF Symbol icons for native macOS toolbar items Post-process NSToolbar buttons after the handler creates them to replace text labels with SF Symbol icons (arrow.clockwise, plus, etc.). Icons show as ImageOnly with the label text preserved as tooltip. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Add titlebar content inset and scroll fade for macOS Push Blazor content down 58px so it starts below the native titlebar. Use CSS mask-image gradient to smoothly fade content as it scrolls under the titlebar area, keeping toolbar icons visible. Works in both light and dark mode since the mask uses transparency. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Remove titlebar title text on macOS Set BlazorContentPage.Title to empty string so the native NSToolbar doesn't render a centered title label. The sidebar and page headings provide sufficient context. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Replace hamburger with Copilot toolbar icon, hide FAB on macOS Replace the sidebar toggle (☰) button with a sparkles SF Symbol that triggers the Copilot overlay via JS interop. Hide the Copilot floating action button on macOS since the native toolbar button replaces it. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Tighten titlebar content inset and gradient overlay Reduce padding-top from 58px to 44px and shorten the gradient mask to match, pushing content closer to the top of the window. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Apply Copilot toolbar icon on initial page appearance Add OnAppearing override to run ApplySfSymbolIcons so the Copilot sparkles icon replaces the hamburger immediately, not only after a page with toolbar items loads. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Sync native sidebar selection when Blazor navigates internally Add RouteChanged event to IToolbarService so Blazor can notify the native side when NavigationManager.LocationChanged fires. MainLayout subscribes to LocationChanged and calls NotifyRouteChanged(route). MacOSApp listens for RouteChanged, finds the matching MacOSSidebarItem by tag, then programmatically selects it in the NSOutlineView via reflection into NativeSidebarFlyoutPageHandler's private fields. Suppresses the selection-changed callback during programmatic selection to avoid re-navigation loops. Filed shinyorg/mauiplatforms#9 requesting a public API for this. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Fix toolbar button clicks not triggering Blazor UI updates Add StateHasChanged() at the end of every OnToolbarItemClicked InvokeAsync lambda. Without this, synchronous actions like ShowCreateDialog() set component state but never trigger a re-render. The dialog would only appear after a subsequent interaction (like clicking Refresh) that happened to call StateHasChanged(). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Fix titlebar gradient overlaying modal backgrounds Replace mask-image (which clips all descendants including modal overlays) with a ::before pseudo-element at z-index 50. Modal overlays at z-index 1000 now render fully above the gradient. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Use SF Pro font and 13px base size on macOS Switch to -apple-system/SF Pro font stack and reduce base font size from 16px to 13px to match native macOS sidebar proportions. Scale down heading sizes proportionally. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Enable sidebar resize by dragging the split view divider Add SidebarSplitViewDelegate with ConstrainSplitPosition (150-400px bounds), min/max coordinate constraints, and ShouldAdjustSize to keep the sidebar width stable during window resize. Lower the handler's sidebar width constraint priority from DefaultHigh to DragThatCanResizeWindow so user dragging can override it. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Set sidebar default width to 170px and disable right-click context menu Adjust the sidebar width constraint constant from 220px to 170px in HandlerChanged to better match native macOS proportions. Add JS contextmenu event listener to prevent the browser right-click menu from appearing in the BlazorWebView. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Add Settings and Doctor menu items to App menu Insert Settings (⌘,) and Doctor items into the macOS App menu after About, using MenuActionHandler with strong references to prevent GC. Menu items navigate to the corresponding Blazor pages. Note: Default Edit/Window menus not yet available in Platform.Maui.MacOS. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Add IsMacOS to all platform guard checks Update IsSupported properties in SimulatorService, SimulatorLogService, PhysicalDeviceService, LocalCertificateService, and AppleRootCertService to check IsMacOS in addition to IsMacCatalyst. Update Blazor pages (AppleTools, AppleSimulators) and ProcessExecutionService likewise so the macOS AppKit head is treated as a supported Mac platform. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Update Platform.Maui.MacOS packages to 0.2.0-beta.3 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Add loading overlay to macOS BlazorContentPage Show a native overlay matching the macOS window background color while the Blazor WebView loads. Fades out when ISplashService signals BlazorReady, with a 15s safety timeout. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Skip update check dialog in DEBUG builds Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Fix device icon alignment on Registered Devices page Add fixed width, height, and flex centering to .device-icon to match the Simulators page pattern, ensuring consistent left alignment of text content regardless of icon width. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Add Logcat and Inspect buttons to running emulators Show the same Logs (logcat) and Inspect (files) buttons that the Devices page shows, using the running emulator's serial from the runningEmulators dictionary to open DeviceInspectorService. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Update Platform.Maui.MacOS packages to 0.2.0-beta.4 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Update Platform.Maui.MacOS packages to 0.2.0-beta.5 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Add macOS-native theme service with system appearance sync MacOSThemeService detects light/dark mode via NSApplication EffectiveAppearance, observes system theme changes via distributed notification, and sets Application.Current.UserAppTheme when the user toggles the theme in Settings. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Replace all MAUI Essentials .Default statics with DI interfaces Create macOS-native implementations: - MacOSPreferences (NSUserDefaults) - MacOSLauncher (NSWorkspace) - MacOSClipboard (NSPasteboard) - MacOSSecureStorage (Keychain Services) Replace Preferences.Default, Launcher.Default, Clipboard.Default, and SecureStorage.Default with injected IPreferences, ILauncher, IClipboard, and ISecureStorage across all shared Blazor pages, components, and services. Mac Catalyst continues to use MAUI's built-in Essentials implementations via auto-registration. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Replace floating inspector panels with native MAUI windows - Create AndroidInspector.razor and AppleInspector.razor pages with tab bar and device selector, reusing existing tab content components - Create InspectorPage ContentPage hosting BlazorWebView at inspector route - Create InspectorLayout.razor (minimal layout without sidebar) - macOS InspectorPage removes FullSizeContentView for proper titlebar - DeviceInspectorService/SimInspectorService now open/close native windows with singleton pattern (one window per inspector type, focus if exists) - Remove LogcatPanel.razor, SimLogPanel.razor floating panel components - Remove InspectorCoordinator z-order service - Remove panel rendering from MainLayout.razor Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Quit app when main window is closed Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Update Platform.Maui.MacOS packages to 0.2.0-beta.6 - Platform.Maui.MacOS, BlazorWebView, and Essentials all to beta.6 - Remove stopgap MacOS{Preferences,Launcher,Clipboard,SecureStorage} implementations now that Platform.Maui.MacOS.Essentials is published - AddMacOSEssentials() registers all IPreferences/ILauncher/IClipboard/ ISecureStorage implementations from the official package Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Fix portable stub crash in AlertService.ShowToastAsync MainThread.BeginInvokeOnMainThread throws on macOS AppKit since it's a portable stub. Removed the unnecessary MainThread wrapper. Also re-register Essentials interfaces with factory delegates and move AddMacOSEssentials() after AddMacOSBlazorWebView(). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Replace MainThread with Dispatcher in DialogService MainThread static API is a portable stub on macOS AppKit. Use Application.Current.Dispatcher instead, which works on all platforms (Mac Catalyst, macOS AppKit, Windows). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Update Platform.Maui.MacOS packages to 0.2.0-beta.7 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Use native inset sidebar, new window/toolbar APIs, fix titlebar drag - MacOSFlyoutPage.SetUseNativeSidebar for NSSplitViewController inset sidebar - MacOSWindow.SetFullSizeContentView replaces manual StyleMask hack - SF Symbols via IconImageSource instead of manual ApplySfSymbolIcons - MacOSFlyoutPage.SelectSidebarItem replaces reflection-based sidebar sync - TitlebarDragView overlay fixes undraggable content titlebar area - Remove SidebarSplitViewDelegate (handled natively now) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Make WebView transparent to show native macOS window background - Set WKWebView drawsBackground=false via KVC to disable opaque rendering - Set html, body, .content backgrounds to transparent on macOS platform - Remove content::before gradient overlay on macOS (no longer needed) - Preserve body transparency on theme changes in SyncBodyThemeAsync Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Reduce content padding on macOS (30px → 15px left/right) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Move Copilot button to sidebar trailing area via MacOSToolbarItem API Replace sidebar toggle rewiring hack with proper MacOSToolbarItem.SetPlacement using SidebarTrailing placement. Copilot button now appears on the right side of the sidebar toolbar area. Always present regardless of page toolbar items. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Set toolbar items before async data loading on all pages Move ToolbarService.SetItems() and event subscription to the top of OnInitializedAsync() before any await calls, so toolbar buttons appear immediately when navigating to a page rather than waiting for data to load. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Move search/filter UI to native macOS toolbar items Extend IToolbarService with SetSearch() and SetFilters() for native toolbar integration. On macOS, pages now register their search placeholder and filter dropdowns which render as NSSearchToolbarItem and NSPopUpButton in the native toolbar. The Blazor filter bars are hidden on macOS via PlatformInfo.IsMacOS. Pages updated: AndroidSdk, AppleDevices, AppleSimulators, BundleIds, Certificates, ProvisioningProfiles, Secrets Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Remove sidebar toggle button from toolbar Poll-remove the MauiSidebarToggle toolbar item that the platform backend adds automatically for FlyoutPage. Uses a short timer since the toolbar manager re-adds it on rebuilds. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Fix toolbar item race condition and clear on page navigation Remove ClearItems() from Dispose (old page clears after new page sets). Add ClearItems() in OnInitialized for pages without toolbar items (Dashboard, Settings, FirebasePush, RootCertificates, PushTesting, SecretsPublish) so toolbar clears when navigating to those pages. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Consolidate filter dropdowns into single menu toolbar item Replace separate popup dropdowns with a single MacOSMenuToolbarItem using submenus per filter category with checkmarks. Uses content layout to position: [action buttons] ← flex → [filter menu] [search]. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Fix Copilot button leaking into content toolbar area Use explicit sidebar layout to position Copilot item so it only appears in the sidebar trailing area, not as a ghost button in content. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Revert hide workaround for sidebar toggle, file upstream issue #20 The MauiSidebarToggle is auto-added by the platform backend for FlyoutPage with no API to suppress it. Filed shinyorg/mauiplatforms#20 to request explicit sidebar layout should suppress auto-injection. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Update toolbar filters dynamically after data refresh AppleSimulators: populate Family/Runtime filter options from loaded simulator data after each refresh. AndroidSdk: update Category filter options from loaded packages after each refresh. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Update filter menu checkmarks natively without toolbar rebuild Subscribe to FilterChanged and update NSMenuItem.State directly on the existing NSMenu, avoiding full toolbar rebuild flicker. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Move Apple identity picker to native toolbar menu Show Apple logo + identity name as a menu toolbar item on Apple pages (Certificates, Profiles, Devices, Bundle IDs). Uses async identity loading with caching to avoid UI thread deadlock. Hidden from Blazor on macOS since it's in the native toolbar. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Replace emoji sync badges with Font Awesome icons on Certificates page Use fa-check-circle (green), fa-hdd (blue), fa-cloud (yellow), fa-times-circle (grey) instead of 🟢🔵🟡⚫ emoji characters. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Adopt platform backend beta.8: content insets, remove workarounds - Update Platform.Maui.MacOS packages from beta.7 to beta.8 - Use native ContentInsets on MacOSBlazorWebView instead of CSS padding hack - Remove TitlebarDragView overlay (now handled by platform backend) - Remove sidebar toggle polling workaround (fixed in beta.8 via #20) - Add ShowsTitle=true to Apple identity menu (enabled by #22) - Switch to convenience mode toolbar layout (no explicit layouts) - Remove ghost toolbar item by not mixing SetMenuItems with layouts - Copilot button stays in ToolbarItems with SidebarTrailing placement Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Rearrange toolbar: identity+add left, filter+search center, refresh right Use explicit content layout to position toolbar items: [Identity] [Add/Create] ← FlexibleSpace → [Filter] [Search] [Refresh] Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Cache toolbar structure to avoid flash on same-structure navigation Compute a toolbar signature from action IDs, search, filter, and identity presence. When navigating between pages with identical structure, update action commands, search placeholder, and filter submenus natively without triggering a full NSToolbar rebuild. Uses MenuActionTarget NSObject to bridge native NSMenuItem clicks for in-place filter menu updates. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Add apple-simulators to AppleRoutes, remove debug logging Fix toolbar flash between Bundle IDs and Simulators caused by /apple-simulators missing from AppleRoutes — identity flag mismatch triggered unnecessary full rebuilds. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Create superset toolbar once, toggle visibility with setHidden: Build all possible toolbar items (refresh, create, import, search, filter, identity) once during initialization. On page navigation, use NSToolbarItem.setHidden: to show/hide items natively instead of rebuilding the entire NSToolbar. Updates commands, search placeholder, and filter submenus in place. Eliminates toolbar flash on all page transitions. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Fix filter checkmarks not updating on pages with identity menu OnFilterSelectionChanged iterated all NSMenuToolbarItems and hit the identity menu (MauiMenu_0) first. Identity items have no submenus, so the null submenu check caused an early return before reaching the actual filter menu (MauiMenu_1). Now targets the filter menu directly by its toolbar item identifier. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Fix identity menu: native rebuild, auto-select, title display - RebuildIdentityMenuNatively() populates NSMenu items on navigation - Auto-select first identity when none explicitly selected - Set NSMenuToolbarItem.Title (not just Label) for visible button text - Find filter/identity menus by identifier (MauiMenu_0/MauiMenu_1) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Add Google identity to native toolbar for Firebase Push page Identity menu now adapts per route - shows Apple identities on Apple routes (apple.logo icon) and Google identities on Firebase routes (flame icon). Both auto-select the first identity when none selected. Added GoogleRoutes HashSet for /firebase-push. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Add Settings... item to identity menus with scroll-to-section Both Apple and Google identity toolbar menus now show a separator followed by 'Settings...' that navigates to /settings and smooth- scrolls to the relevant identity section. Added id attributes to the Apple and Google identity sections in Settings.razor. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Hide GoogleIdentityPicker on macOS — native toolbar handles it Same pattern as AppleIdentityPicker: check PlatformInfo.IsMacOS and render nothing, since the identity selection is in the native toolbar. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Add refresh toolbar button to Secrets Publish page Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Add search and clear filters on Secrets Publish page Search filters the managed secrets list by key name. Calls SetFilters() with no args to clear inherited filters so the filter toolbar button hides on this page. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Move Publish wizard to toolbar button on macOS Added 'Publish to CI/CD' toolbar action (wand.and.stars icon) to the superset. On macOS, the Apple CI Secrets card is hidden via platform-hide-macos CSS class since the toolbar button replaces it. Added platform-hide-macos utility class to MainLayout. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Use MacOSMenuToolbarItem for Publish to CI/CD with icon+text Replace plain ToolbarItem with MacOSMenuToolbarItem using ShowsTitle to display wand icon alongside 'Publish to CI/CD' text. Updated menu identifier mapping: identity=MauiMenu_0, publish=MauiMenu_1, filter=MauiMenu_2. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Publish toolbar menu with wizard and selection-aware publish Publish toolbar button now shows 'Publish' with upload icon and two submenu items: - 'Publish to CI/CD' (wand icon) — opens the CI secrets wizard - 'Publish Selected...' (upload icon) — disabled until secrets are selected, then enabled and triggers publish flow Selection changes in the Blazor page toggle publish-selected in the toolbar items, and UpdatePublishMenuState enables/disables the native NSMenuItem accordingly. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Replace emoji sync badges with Font Awesome icons on Keystores page Match the Certificates page pattern: use fas fa-check-circle (synced), fas fa-hdd (local), fas fa-cloud (cloud), fas fa-times-circle (none) with colored text-sync-* CSS classes instead of emoji icons. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Use custom Copilot icon in macOS toolbar sidebar Replace SF Symbol 'sparkles' with a custom template PNG loaded from the app bundle. The image is sized to 18pt for crisp Retina rendering and set as a template image so macOS auto-tints it for light/dark mode. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Create ghcp-icon.png * Disable refresh toolbar button during refresh operations Add SetItemEnabled/IsItemEnabled to IToolbarService for toggling individual toolbar item enabled state. All 12 pages with refresh buttons now disable the button on click and re-enable in a finally block. The macOS native side reflects this via setEnabled: on the NSToolbarItem. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Upgrade to Platform.Maui.MacOS 0.2.0-beta.10 - Remove hardcoded ContentInsets (auto-calculated from toolbar height, #26/#28) - Add HideScrollPocketOverlay for cleaner toolbar appearance (#27) - Use MacOSToolbarItem.SetIsVisible() for action items instead of objc_msgSend setHidden: workaround (#23/#31) - Keep objc_msgSend for menus/search (upstream #32 filed for IsVisible support) - Ghost Title item fix from SetContentLayout(null) now handled upstream (#24/#30) Filed upstream: #32 (IsVisible for menus/search), #33 (Release trimming strips types) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Windows TitleBar toolbar, fix Essentials DI, fix adb path on Windows - Add MAUI TitleBar to Windows app with dynamic toolbar content - Create WindowsTitleBarManager that subscribes to IToolbarService and rebuilds TitleBar search/filter/action controls per page - Add HasNativeToolbar to IPlatformService; update 6 Blazor pages to hide inline toolbar UI when native toolbar is available - Register MAUI Essentials (ISecureStorage, IPreferences, ILauncher, IClipboard) in DI for Windows - fixes startup crash - Fix adb path on Windows: add AppDataPath.GetAdbPath() helper that appends .exe on Windows, update 5 services - Update MauiDevFlow CLI and packages to 0.10.0 - Wrap macOS right-click suppression in #if !DEBUG for DevTools access Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Improve Windows TitleBar: functional filter pickers, better buttons, logo icon - Replace non-functional filter buttons with native Picker dropdowns - Make action buttons larger with visible background, border, rounded corners - Add separator between filters and action buttons - Use sherpa logo icon instead of title text - Extract shared color constants Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Add PerMonitorV2 DPI awareness manifest for crisp high-DPI rendering Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Polish TitleBar: compact filter dropdowns, icon-only buttons, fix centering - Replace ugly Picker controls with compact filter buttons using MenuFlyout dropdowns that open on left-click via WinUI ShowAt - All action buttons are now icon-only (32x36px) with tooltip labels - Fix vertical centering on all controls with VerticalOptions.Center - Filter buttons show muted text for 'All', white when filtered Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Unified filter menu with submenus like macOS toolbar - Single 'Filter' button replaces per-category dropdowns - MenuFlyout with MenuFlyoutSubItem for each filter category - Checkmarks show selected option in each submenu - Button turns accent purple when any filter is active Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Use Fluent icon font for TitleBar buttons with proper centering - Replace unicode text icons with FluentIcons font glyphs (Filter, ChevronDown, ArrowClockwise, Add, etc.) - Add AathifMahir.Maui.MauiIcons.Fluent NuGet package and wire up UseFluentMauiIcons() - Add ApplyVerticalCentering() using WinUI platform interop for proper content alignment - Add ApplyHoverEffect() for interactive hover states on all TitleBar buttons - Filter button shows Filter20 + ChevronDown16 glyphs, action buttons use mapped Fluent icons Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Increase filter button horizontal padding for better spacing Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Make window caption buttons white on dark TitleBar background Set ButtonForegroundColor, ButtonInactiveForegroundColor, ButtonHoverForegroundColor, and ButtonPressedForegroundColor to white via AppWindow.TitleBar so min/max/close buttons are always visible against the dark TitleBar. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Move sherpa logo from TitleBar.Icon to LeadingContent for larger display Use a 28x28 Image in LeadingContent instead of the tiny TitleBar.Icon property. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Widen filter button for better glyph spacing Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Move filter button next to search bar, remove separator, widen filter button Filter button now sits in Content area beside the search entry instead of TrailingContent. Removed the vertical separator between filters and action buttons. Increased filter button WidthRequest to 60 with more padding. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Upgrade to Platform.Maui.MacOS 0.2.0-beta.11 - Update all three packages from beta.10 to beta.11 - Replace _objc_msgSend_bool setHidden: workaround for menus/search with MacOSToolbarItem.SetIsVisible() API (upstream PR #36) - Store menu/search items as fields for direct IsVisible manipulation - Re-add TitlebarDragView overlay on WebView container for window dragging (upstream overlay on themeFrame doesn't work with split view layout) - Scroll pocket fix (PR #37) and Release trimming fix (PR #38) automatic Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Rearrange TitleBar: [icon][add] center:[search][filter] right:[refresh] Split actions so add/create buttons appear in LeadingContent next to the logo, search+filter are centered in Content, and refresh goes to TrailingContent. Reduced filter button padding and width for tighter fit. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Add spacer between sherpa icon and action buttons to align with sidebar width Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Increase icon-to-button spacer to 215px for better sidebar alignment Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Add macOS app CI build, signing, and notarization - Add Entitlements.plist and Entitlements.Debug.plist for macOS project (sandbox off, network client; debug adds network server + get-task-allow) - Add EnableHardenedRuntime and CodesignEntitlements to macOS csproj - Add publish-macos job: build, sign with hardened runtime, create ZIP - Add notarize-macos job: submit to Apple notarization, staple ticket - Update create-release to include MAUI-Sherpa.macos.zip artifact - Same signing certificate and identity as Mac Catalyst build Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Polish Copilot overlay: top-left anchor, hide debug FAB - Wrap floating Copilot button in #if DEBUG (macOS uses native toolbar) - Animate overlay from top-left instead of bottom-left - Anchor dialog to top-left with smaller top/left margins (1rem) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Add identity picker dropdown to TitleBar for Apple/Google pages Shows Apple identity picker (with icon) on certificate/profile/device/bundle/simulator pages, and Google identity picker (with fire icon) on firebase-push page. Dropdown shows available identities with checkmark on selected, plus a Settings separator item. Placed in LeadingContent between icon spacer and add buttons, matching macOS toolbar behavior. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Use FormattedText with per-Span FontFamily for identity picker Replace Button with Border+Label using FormattedString so icon glyph (FluentIcons font), identity name (system font), and chevron glyph (FluentIcons font) each render in their correct font family. Shared CreateIdentityPickerView() handles layout, flyout, and hover. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Fix identity picker: use AppStore icon, HorizontalStackLayout for alignment Replace FormattedString with HorizontalStackLayout containing separate Image (Fluent icon), Label (name), and Label (chevron) for proper vertical alignment. Use AppStore24 icon for Apple identity picker. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Remove sidebar top padding on Windows for flush menu alignment Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Use FontAwesome Brand icons for Apple/Google identity pickers Add AathifMahir.Maui.MauiIcons.FontAwesome.Brand package for proper Apple () and Google (G) brand icons in identity picker buttons. Use Label with FontAwesomeBrandIcons font family for consistent rendering alongside Fluent icon chevron. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fix: enable document-level scrolling on macOS for scroll-under-toolbar effect - Move scrolling from nested .content div to document level so WKWebView setObscuredContentInsets can scroll content behind the toolbar naturally - Set html/body height to auto and overflow to visible via JS init - Disable horizontal scroll bounce with overflow-x: hidden - Remove broken #if DEBUG preprocessor directive from CopilotOverlay.razor (Razor doesn't process C# preprocessor directives in markup) - Exclude WindowsTitleBarManager.cs from macOS build (FluentIcons not available) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fix: remove SDK path bar from Android pages, add loading state to SDK Packages Users can change the SDK path via the Settings page — no need to show it on every Android page. Removes the SDK path bar (with copy/open/settings buttons) from Devices, Emulators, and SDK Packages pages. Adds a loading state card to SDK Packages page matching the Emulators pattern (pulsing icon + title + description) for when data is loading. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Respect native toolbar; add SDK path & toolbar updates Replace macOS-specific UI checks with PlatformInfo.HasNativeToolbar and hide built-in identity pickers/toolbars when a native toolbar is present. Add an SDK path bar (with copy/reveal/settings actions) to Android SDK, Devices, Emulators pages. Add an "Update All" toolbar action and handler to the Android SDK page. Inject PlatformInfo where needed and wrap toolbar UI with native-toolbar checks across multiple pages. In Devices page add toolbar search integration and client-side filtering (FilteredDevices) and wire up search events. Update WindowsTitleBarManager to auto-select the first cached Apple/Google identity when none is selected and ensure toolbar updates only when identities exist. * Remove Android SDK path bar from pages The SDK path is available in Settings — no need to show it inline on the Devices, Emulators, and SDK Packages pages. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Add Copilot button to Windows TitleBar - Add white copilot icon (ghcp_icon_white.png) inverted from docs icon - Add copilot button between sherpa logo and sidebar spacer in TitleBar - Button triggers ICopilotContextService.ToggleOverlay() to open/close overlay - Hide Blazor FAB when HasNativeToolbar (not just IsMacOS) - Reduce sherpa icon margin, add explicit spacer for sidebar width alignment - Hover effect via PointerGestureRecognizer on Border Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Notarize apps on main branch pushes with commit status - Both notarize jobs now run on main pushes and tag pushes (not just tags) - Add commit status updates for notarization results - Release creation and Homebrew tap remain tag-only Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Inject IPlatformService and add an "Open in Finder/Explorer" button to the simulator dropdown. The new button closes the dropdown then calls OpenSimulatorDirectory, which resolves the simulator data path via SimulatorService.GetSimulatorDataPath and reveals it using FileSystem.RevealInFileManager. Uses Platform.IsMacCatalyst to choose the label (Finder vs Explorer) and adds a divider before the existing Clone action.