Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
58 commits
Select commit Hold shift + click to select a range
ceadb62
Temporarily add nuget.org feed
May 6, 2024
1aafbe6
Refactor current layout into DesktopLayout component
May 6, 2024
872e748
wip prototype
May 9, 2024
8ff306b
Merge branch 'refs/heads/main' into feature/mobile-navigation-layout
May 20, 2024
f03d884
add mobile nav menu
May 21, 2024
427a3b8
add rest of nav menu to mobile, increase reconnection modal size on m…
May 21, 2024
fe7b327
Add common page layout, use it for Resources
May 21, 2024
b99bfa3
Convert Console Logs toolbar
May 21, 2024
caf0203
Use new layout for structured logs
May 22, 2024
82f73a3
fix scroll bars, place toolbar on mobile within footer
May 22, 2024
cfaed4b
Rename page sections, make title section more generic, do trace detai…
May 22, 2024
7f33bd1
use new layout for metrics page
May 22, 2024
c7363b0
Merge branch 'refs/heads/main' into feature/mobile-navigation-layout
May 22, 2024
7d24ec5
Add context parameter to details views, make them full page height on…
May 22, 2024
1ec9602
wip custom browser resize logic
May 23, 2024
047fd78
Get initial viewport parameters for render (do not use scoped js beca…
May 23, 2024
21bf76a
fix nested h1, increase mobile toolbar button size, add resize listener
May 23, 2024
4d71eb6
clean up views
May 23, 2024
699a9b9
remove extra class
May 23, 2024
2ce07f0
remove redundant code, clean up
May 23, 2024
a555a12
remove redundant code, add a few comments
May 23, 2024
7d3bbdf
fix accidental logic bug
May 23, 2024
5707fff
Increase mobile toolbar height, make entire page scrollable at very l…
May 28, 2024
29c5bb4
Add translation, comment
May 28, 2024
6d54c04
move comment
May 28, 2024
4be7ed8
remove redundant if
May 28, 2024
8174a54
Move toolbar mobile button to top
May 29, 2024
c59c0ac
remove padding bottom for page header on mobile
May 29, 2024
4a87ab3
some requested changes
Jun 11, 2024
f7e35c8
try to avoid closing dialog on mobile if a toolbar setting has been c…
Jun 12, 2024
173df8d
Persist filter into URL, as well as visible types for resources.
adamint Jun 12, 2024
67430f0
Remove unnecessary button on detail view, invoke listeners after filt…
adamint Jun 13, 2024
a5845f0
Move MobileLayout and DesktopLayout logic into MainLayout so that pag…
adamint Jun 13, 2024
84802f6
Open aspire repo link in new tab on mobile navigation
adamint Jun 13, 2024
c1122f9
Add divs around page content layout to fix scoped css not being applied
adamint Jun 13, 2024
bb2b06c
fix extra div not taking up total height
adamint Jun 14, 2024
60e420e
fix metric scrollbar, change debounced resize event to throttled
adamint Jun 14, 2024
c8d06e2
Fix scrollbar erroneously appearing on console logs
Jun 14, 2024
6dfd531
Consolidate two selects into one
Jun 18, 2024
ce7f7eb
Refactor mobile nav menu to its own component, rename desktop nav men…
Jun 18, 2024
cade93f
Show icon as active in mobile navigation menu for the current page
Jun 18, 2024
1d8fc56
Close mobile filter/nav menus when changing to desktop layout
Jun 25, 2024
44fadbd
Use --accent-foreground-active for active page in mobile nav
Jun 25, 2024
387824b
Make detail view close button background transparent in mobile
Jun 25, 2024
3930ab2
hide duration progress circle on traces mobile
Jun 26, 2024
b6437b5
fix continuous scroll on traces/console logs/structured logs
Jun 26, 2024
677991a
add console log application to mobile toolbar
Jun 26, 2024
f14ae9c
re-add mobile filter footer button
Jun 26, 2024
7b6d725
Merge branch 'refs/heads/main' into feature/mobile-navigation-layout
Jun 28, 2024
f4ca506
fix incorrect merge conflicts
Jun 28, 2024
a6f3e9a
Merge branch 'refs/heads/main' into feature/mobile-navigation-layout
Jul 10, 2024
fe400f1
Avoid invoking redundant SetStateAndNavigateAsync calls, cleanup
Jul 10, 2024
1829ec0
fix chart/table state being lost on layout change
Jul 10, 2024
309500c
fix toolbar with newline appearance on mobile
Jul 10, 2024
e0498a7
Merge branch 'refs/heads/main' into feature/mobile-navigation-layout
Jul 15, 2024
aa2bc84
add file headers, fix merge
Jul 15, 2024
5ba86a9
fix console logs not updating after layout change
Jul 15, 2024
60f7ec2
Merge branch 'refs/heads/main' into feature/mobile-navigation-layout
Jul 16, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
some requested changes
  • Loading branch information
Adam Ratzman committed Jun 11, 2024
commit 4a87ab366a4e7c9bae7cdc074d95cfe1f2c8eae9
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
@namespace Aspire.Dashboard.Components

@using System.Collections.Concurrent
@using Aspire.Dashboard.Resources

@inject IStringLocalizer<ControlsStrings> ControlsStringsLoc

<FluentStack Orientation="Orientation.Vertical">
<FluentCheckbox Label="@ControlsStringsLoc[nameof(ControlsStrings.All)]"
ThreeState="true"
ShowIndeterminate="false"
onkeydown="e => console.log(e)"
ThreeStateOrderUncheckToIntermediate="true"
@bind-CheckState:get="@AreAllTypesVisible()"
@bind-CheckState:set="@OnAllResourceTypesCheckedChanged"
/>
@foreach (var (resourceType, _) in AllResourceTypes)
{
var isChecked = VisibleResourceTypes.ContainsKey(resourceType);
<FluentCheckbox Label="@resourceType"
@bind-Value:get="@isChecked"
@bind-Value:set="@(c => OnResourceTypeVisibilityChangedAsync(resourceType, c))" />
}
</FluentStack>
@code {
[Parameter, EditorRequired]
public required ConcurrentDictionary<string,bool> AllResourceTypes { get; set; }

[Parameter, EditorRequired]
public required Func<bool?> AreAllTypesVisible { get; set; }

[Parameter, EditorRequired]
public required ConcurrentDictionary<string,bool> VisibleResourceTypes { get; set; }

[Parameter, EditorRequired]
public required Action<bool?> OnAllResourceTypesCheckedChanged { get; set; }

[Parameter, EditorRequired]
public required Func<string, bool,Task> OnResourceTypeVisibilityChangedAsync { get; set; }
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
// The .NET Foundation licenses this file to you under the MIT license.

using System.Globalization;
using Aspire.Dashboard.Components.Resize;
using Aspire.Dashboard.Model;
using Aspire.Dashboard.Utils;
using Microsoft.AspNetCore.Components;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
@if (ViewportInformation.IsDesktop)
{
<div style="grid-area: page-header">
@if (AddNewlineOnDesktopToolbar)
@if (AddNewlineOnToolbar)
{
@PageTitleSection

Expand Down Expand Up @@ -38,7 +38,7 @@
else
{
<FluentToolbar Orientation="Orientation.Horizontal" Style="grid-area: page-header">
@if (MobilePageTitleToolbarSection is null)
@if (MobilePageTitleToolbarSection is null && (MobileToolbarButtonText is null || !AddNewlineOnToolbar))
{
@PageTitleSection

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

using Aspire.Dashboard.Model;
using Aspire.Dashboard.Components.Resize;
using Aspire.Dashboard.Resources;
using Microsoft.AspNetCore.Components;
using Microsoft.FluentUI.AspNetCore.Components;
Expand All @@ -18,7 +18,7 @@ public partial class AspirePageContentLayout : ComponentBase
[Parameter] public RenderFragment? MobilePageTitleToolbarSection { get; set; }

[Parameter] public RenderFragment? ToolbarSection { get; set; }
[Parameter] public bool AddNewlineOnDesktopToolbar { get; set; }
[Parameter] public bool AddNewlineOnToolbar { get; set; }

[Parameter] public RenderFragment? MainSection { get; set; }

Expand Down Expand Up @@ -53,7 +53,7 @@ private async Task OpenMobileToolbarAsync()
new DialogParameters
{
Alignment = HorizontalAlignment.Center,
Title = ControlsStringsLoc[nameof(ControlsStrings.ChartContainerFiltersHeader)],
Title = MobileToolbarButtonText ?? ControlsStringsLoc[nameof(ControlsStrings.ChartContainerFiltersHeader)],
Width = "100%",
Height = "90%",
Modal = false,
Expand Down
1 change: 1 addition & 0 deletions src/Aspire.Dashboard/Components/Layout/MainLayout.razor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
// The .NET Foundation licenses this file to you under the MIT license.

using Aspire.Dashboard.Components.Dialogs;
using Aspire.Dashboard.Components.Resize;
using Aspire.Dashboard.Configuration;
using Aspire.Dashboard.Model;
using Aspire.Dashboard.Utils;
Expand Down
2 changes: 1 addition & 1 deletion src/Aspire.Dashboard/Components/Layout/MobileLayout.razor
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
@inject NavigationManager NavigationManager
@inject IDashboardClient DashboardClient

<div class="layout">
<div class="layout" style="@(_isNavMenuOpen ? "overflow: hidden;" : string.Empty)">
<div class="aspire-icon">
<FluentAnchor Appearance="Appearance.Stealth" Href="/" Class="logo"
title="@Loc[nameof(Layout.MainLayoutAspire)]"
Expand Down
2 changes: 1 addition & 1 deletion src/Aspire.Dashboard/Components/Pages/ConsoleLogs.razor
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

<PageTitle><ApplicationName ResourceName="@nameof(Dashboard.Resources.ConsoleLogs.ConsoleLogsPageTitle)" Loc="@Loc" /></PageTitle>

<AspirePageContentLayout AddNewlineOnDesktopToolbar="true">
<AspirePageContentLayout AddNewlineOnToolbar="true">
<PageTitleSection>
<h1 class="page-header">@Loc[nameof(Dashboard.Resources.ConsoleLogs.ConsoleLogsHeader)]</h1>
</PageTitleSection>
Expand Down
1 change: 1 addition & 0 deletions src/Aspire.Dashboard/Components/Pages/ConsoleLogs.razor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
using System.Collections.Immutable;
using System.Diagnostics;
using Aspire.Dashboard.Components.Controls;
using Aspire.Dashboard.Components.Resize;
using Aspire.Dashboard.Model;
using Aspire.Dashboard.Model.Otlp;
using Aspire.Dashboard.Otlp.Model;
Expand Down
2 changes: 1 addition & 1 deletion src/Aspire.Dashboard/Components/Pages/Metrics.razor
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@

<PageTitle><ApplicationName ResourceName="@nameof(Dashboard.Resources.Metrics.MetricsPageTitle)" Loc="@Loc" /></PageTitle>

<AspirePageContentLayout AddNewlineOnDesktopToolbar="true">
<AspirePageContentLayout AddNewlineOnToolbar="true">
<PageTitleSection>
<h1 class="page-header">@Loc[nameof(Dashboard.Resources.Metrics.MetricsHeader)]</h1>
</PageTitleSection>
Expand Down
72 changes: 20 additions & 52 deletions src/Aspire.Dashboard/Components/Pages/Resources.razor
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
@using Aspire.Dashboard.Resources
@using Aspire.Dashboard.Utils
@using System.Globalization
@using Aspire.Dashboard.Components.Resize
@using Humanizer
@inject IStringLocalizer<Dashboard.Resources.Resources> Loc
@inject IStringLocalizer<ControlsStrings> ControlsStringsLoc
Expand Down Expand Up @@ -32,68 +33,35 @@
else
{
<div>
<h4>@(AreAllTypesVisible is true ? Loc[nameof(Dashboard.Resources.Resources.ResourcesTypeFilterAllVisible)] : Loc[nameof(Dashboard.Resources.Resources.ResourcesTypeFiltered)])</h4>
<h5>@Loc[nameof(Dashboard.Resources.Resources.ResourcesResourceTypesHeader)]</h5>

<FluentStack Orientation="Orientation.Vertical">
<FluentCheckbox
Label="@ControlsStringsLoc[nameof(ControlsStrings.All)]"
ThreeState="true"
ShowIndeterminate="false"
ThreeStateOrderUncheckToIntermediate="true"
@bind-CheckState="AreAllTypesVisible"/>
@foreach (var (resourceType, _) in _allResourceTypes)
{
var isChecked = _visibleResourceTypes.ContainsKey(resourceType);
<FluentCheckbox
Label="@resourceType"
@bind-Value:get="isChecked"
@bind-Value:set="c => OnResourceTypeVisibilityChangedAsync(resourceType, c)"/>
}
</FluentStack>
<SelectResourceTypes
AllResourceTypes="_allResourceTypes"
VisibleResourceTypes="_visibleResourceTypes"
OnAllResourceTypesCheckedChanged="@(b => AreAllTypesVisible = b)"
AreAllTypesVisible="@(() => AreAllTypesVisible)"
OnResourceTypeVisibilityChangedAsync="@OnResourceTypeVisibilityChangedAsync" />
</div>
}


@if (ViewportInformation.IsDesktop)
{
<FluentSearch Placeholder="@ControlsStringsLoc[nameof(ControlsStrings.FilterPlaceholder)]"
Immediate="true"
@bind-Value="_filter"
slot="end"
@bind-Value:after="HandleSearchFilterChangedAsync"/>
}
else
{
<div>
<FluentSearch Placeholder="@ControlsStringsLoc[nameof(ControlsStrings.FilterPlaceholder)]"
Immediate="true"
@bind-Value="_filter"
slot="end"
Label="@ControlsStringsLoc[nameof(ControlsStrings.FilterPlaceholder)]"
@bind-Value:after="HandleSearchFilterChangedAsync"/>
</div>
}
<FluentSearch Placeholder="@ControlsStringsLoc[nameof(ControlsStrings.FilterPlaceholder)]"
Immediate="true"
@bind-Value="_filter"
slot="end"
Label="@(ViewportInformation.IsDesktop ? null : ControlsStringsLoc[nameof(ControlsStrings.FilterPlaceholder)].Value)"
@bind-Value:after="HandleSearchFilterChangedAsync"/>
</ToolbarSection>

<MainSection>
<FluentPopover AnchorId="typeFilterButton" @bind-Open="_isTypeFilterVisible" AutoFocus="true">
<Header>@Loc[nameof(Dashboard.Resources.Resources.ResourcesResourceTypesHeader)]</Header>
<Body>
<FluentStack Orientation="Orientation.Vertical">
<FluentCheckbox Label="@ControlsStringsLoc[nameof(ControlsStrings.All)]"
ThreeState="true"
ShowIndeterminate="false"
onkeydown="e => console.log(e)"
ThreeStateOrderUncheckToIntermediate="true"
@bind-CheckState="AreAllTypesVisible" />
@foreach (var (resourceType, _) in _allResourceTypes)
{
var isChecked = _visibleResourceTypes.ContainsKey(resourceType);
<FluentCheckbox Label="@resourceType"
@bind-Value:get="isChecked"
@bind-Value:set="c => OnResourceTypeVisibilityChangedAsync(resourceType, c)" />
}
</FluentStack>
<SelectResourceTypes
AllResourceTypes="_allResourceTypes"
VisibleResourceTypes="_visibleResourceTypes"
OnAllResourceTypesCheckedChanged="@(b => AreAllTypesVisible = b)"
AreAllTypesVisible="@(() => AreAllTypesVisible)"
OnResourceTypeVisibilityChangedAsync="@OnResourceTypeVisibilityChangedAsync" />
</Body>
</FluentPopover>

Expand Down
5 changes: 5 additions & 0 deletions src/Aspire.Dashboard/Components/Pages/Resources.razor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
using System.Diagnostics;
using System.Globalization;
using System.Text;
using Aspire.Dashboard.Components.Resize;
using Aspire.Dashboard.Model;
using Aspire.Dashboard.Otlp.Model;
using Aspire.Dashboard.Otlp.Storage;
Expand Down Expand Up @@ -116,6 +117,8 @@ static bool UnionWithKeys(ConcurrentDictionary<string, bool> left, ConcurrentDic
{
_visibleResourceTypes.Clear();
}

StateHasChanged();
}
}

Expand Down Expand Up @@ -228,6 +231,8 @@ private async Task ClearSelectedResourceAsync(bool causedByUserAction = false)
{
SelectedResource = null;

await InvokeAsync(StateHasChanged);

if (_elementIdBeforeDetailsViewOpened is not null && causedByUserAction)
{
await JS.InvokeVoidAsync("focusElement", _elementIdBeforeDetailsViewOpened);
Expand Down
2 changes: 1 addition & 1 deletion src/Aspire.Dashboard/Components/Pages/StructuredLogs.razor
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@

<AspirePageContentLayout
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I noticed that any filter change that changes the page URL causes the filter UI to close.

For example, changing the filter textbox doesn't close the filter UI. Changing the application, level or filters does.

filter-close

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also, clicking add filter causes the filter view to close when the sidebar opens.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I noticed that any filter change that changes the page URL causes the filter UI to close. For example, changing the filter textbox doesn't close the filter UI. Changing the application, level or filters does.

Dialogs automatically close without any callback when the URL is changed (@vnbaaij I'm guessing that's not intentional), so I have changed it to apply non-navigation changes only when you close the dialog. But it will be expected to close when switching application

Also, clicking add filter causes the filter view to close when the sidebar opens.

This was on purpose, since focus is getting messed up when multiple panels are open at the same time.

Copy link
Member

@JamesNK JamesNK Jun 13, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is the workaround complicated? I'd rather wait for fixes to controls that make the dashboard code more complicated.

@vnbaaij Is this behavior intentional?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's not very complicated, consisting of a block in IPageWithSessionAndUrlState that prevents re-render and navigation until after the dialog is closed. But ideally there would be a library solution

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@vnbaaij additionally, OnDialogClosing is not called when calling IDialogReference.OnCloseAsync

@ref="@_pageContentLayout"
AddNewlineOnDesktopToolbar="true"
AddNewlineOnToolbar="true"
ShouldShowFooter="@(SelectedLogEntry is null)"
IsSummaryDetailsViewOpen="@(SelectedLogEntry is not null)">
<PageTitleSection>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@

using Aspire.Dashboard.Components.Dialogs;
using Aspire.Dashboard.Components.Layout;
using Aspire.Dashboard.Components.Resize;
using Aspire.Dashboard.Extensions;
using Aspire.Dashboard.Model;
using Aspire.Dashboard.Model.Otlp;
Expand Down
2 changes: 1 addition & 1 deletion src/Aspire.Dashboard/Components/Pages/TraceDetail.razor
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
@if (_trace is { } trace)
{
<AspirePageContentLayout
AddNewlineOnDesktopToolbar="true"
AddNewlineOnToolbar="true"
MobileToolbarButtonText="@Loc[nameof(Dashboard.Resources.TraceDetail.TraceDetailMobileToolbarButtonText)]"
IsSummaryDetailsViewOpen="@(SelectedSpan is not null)">
<PageTitleSection>
Expand Down
2 changes: 1 addition & 1 deletion src/Aspire.Dashboard/Components/Pages/Traces.razor
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@

<PageTitle><ApplicationName ResourceName="@nameof(Dashboard.Resources.Traces.TracesPageTitle)" Loc="@Loc" /></PageTitle>

<AspirePageContentLayout AddNewlineOnDesktopToolbar="true">
<AspirePageContentLayout AddNewlineOnToolbar="true">
<PageTitleSection>
<h1 class="page-header">@Loc[nameof(Dashboard.Resources.Traces.TracesHeader)]</h1>
</PageTitleSection>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,22 +1,18 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

using Aspire.Dashboard.Model;
using Microsoft.AspNetCore.Components;
using Microsoft.JSInterop;

namespace Aspire.Dashboard.Components.Resize;

public class BrowserDimensionWatcher : ComponentBase
{
[Parameter]
public ViewportInformation? ViewportInformation { get; set; }
[Parameter] public ViewportInformation? ViewportInformation { get; set; }

[Parameter]
public EventCallback<ViewportInformation?> ViewportInformationChanged { get; set; }
[Parameter] public EventCallback<ViewportInformation?> ViewportInformationChanged { get; set; }

[Inject]
public required IJSRuntime JS { get; init; }
[Inject] public required IJSRuntime JS { get; init; }

protected override async Task OnAfterRenderAsync(bool firstRender)
{
Expand All @@ -35,20 +31,24 @@ protected override async Task OnAfterRenderAsync(bool firstRender)
[JSInvokable]
public async Task OnResizeAsync(ViewportSize viewportSize)
{
if (ViewportInformation?.Width == viewportSize.Width && ViewportInformation?.Height == viewportSize.Height)
var newViewportInformation = GetViewportInformation(viewportSize);

if (newViewportInformation.IsDesktop != ViewportInformation!.IsDesktop || newViewportInformation.IsUltraLowHeight != ViewportInformation.IsUltraLowHeight)
{
return;
ViewportInformation = newViewportInformation;
await ViewportInformationChanged.InvokeAsync(newViewportInformation);
}

ViewportInformation = GetViewportInformation(viewportSize);
await ViewportInformationChanged.InvokeAsync(ViewportInformation);
}

private static ViewportInformation GetViewportInformation(ViewportSize viewportSize)
{
return new ViewportInformation(viewportSize.Height, viewportSize.Width);
return new ViewportInformation(IsDesktop: viewportSize.Width > 768, IsUltraLowHeight: viewportSize.Height < 400);
}

public static ViewportInformation Create(int height, int width)
{
return new ViewportInformation(IsDesktop: width > 768, IsUltraLowHeight: height < 400);
}

public record ViewportSize(int Width, int Height);
}

Original file line number Diff line number Diff line change
@@ -1,18 +1,19 @@
// Licensed to the .NET Foundation under one or more agreements.
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

namespace Aspire.Dashboard.Model;
namespace Aspire.Dashboard.Components.Resize;

public record ViewportInformation(int Height, int Width)
public record ViewportInformation(bool IsDesktop, bool IsUltraLowHeight)
{
// set our mobile cutoff at 768 pixels, which is ~medium tablet size
public bool IsDesktop => Width > 768;
/// <summary>
/// Set our mobile cutoff at 768 pixels, which is ~medium tablet size
/// </summary>
public bool IsDesktop { get; set; } = IsDesktop;

/// <summary>
/// Ultra low height is users with very high zooms and/or very low resolutions,
/// where the height is significantly constrained. In these cases, the users need the entire main page content
/// (toolbar, title, main content, footer) to be scrollable, rather than just the main content.
///
/// </summary>
public bool IsUltraLowHeight => Height < 400;
public bool IsUltraLowHeight { get; set; } = IsUltraLowHeight;
}
2 changes: 1 addition & 1 deletion src/Aspire.Dashboard/Resources/TraceDetail.Designer.cs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion src/Aspire.Dashboard/Resources/TraceDetail.resx
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,6 @@
<comment>{0} is an identifier</comment>
</data>
<data name="TraceDetailMobileToolbarButtonText" xml:space="preserve">
<value>View trace details</value>
<value>Trace details</value>
</data>
</root>
Loading