Merge fix-sharepopover-anchor into dev (anchor release SharePopover under the share button via inline-block wrapper)
This commit is contained in:
@@ -1,66 +1,74 @@
|
|||||||
@namespace DeepDrftPublic.Client.Controls
|
@namespace DeepDrftPublic.Client.Controls
|
||||||
|
|
||||||
<MudTooltip Text="Share">
|
@* Overlay is viewport-level/fixed regardless of DOM nesting; placing it outside
|
||||||
<MudIconButton Icon="@Icons.Material.Filled.Share"
|
the wrapper is harmless/cleaner but doesn't change its behavior. *@
|
||||||
Size="Size.Large"
|
|
||||||
Color="Color.Secondary"
|
|
||||||
Disabled="@(!RendererInfo.IsInteractive)"
|
|
||||||
OnClick="@Toggle"
|
|
||||||
aria-label="@(IsReleaseMode ? "Share this release" : "Share this track")" />
|
|
||||||
</MudTooltip>
|
|
||||||
|
|
||||||
<MudOverlay Visible="@_open" OnClick="@Close" AutoClose="true" />
|
<MudOverlay Visible="@_open" OnClick="@Close" AutoClose="true" />
|
||||||
|
|
||||||
<MudPopover Open="@_open"
|
@* display:inline-block is the load-bearing property: it shrink-wraps this div
|
||||||
Fixed="false"
|
to the button, so MudPopover's portal reads the button's tight bounding rect
|
||||||
AnchorOrigin="Origin.BottomRight"
|
(via parentNode.getBoundingClientRect()) rather than a page-wide flow box.
|
||||||
TransformOrigin="Origin.TopRight"
|
position:relative is incidental. *@
|
||||||
Class="deepdrft-share-popover">
|
<div class="deepdrft-share-popover-anchor">
|
||||||
<MudStack Spacing="2" Class="deepdrft-share-popover-body">
|
<MudTooltip Text="Share">
|
||||||
|
<MudIconButton Icon="@Icons.Material.Filled.Share"
|
||||||
|
Size="Size.Large"
|
||||||
|
Color="Color.Secondary"
|
||||||
|
Disabled="@(!RendererInfo.IsInteractive)"
|
||||||
|
OnClick="@Toggle"
|
||||||
|
aria-label="@(IsReleaseMode ? "Share this release" : "Share this track")" />
|
||||||
|
</MudTooltip>
|
||||||
|
|
||||||
<MudStack Row AlignItems="AlignItems.Center" Justify="Justify.SpaceBetween">
|
<MudPopover Open="@_open"
|
||||||
<MudButton StartIcon="@Icons.Material.Filled.Link"
|
Fixed="false"
|
||||||
Variant="Variant.Text"
|
AnchorOrigin="Origin.BottomRight"
|
||||||
Color="Color.Primary"
|
TransformOrigin="Origin.TopRight"
|
||||||
OnClick="@CopyLink">
|
Class="deepdrft-share-popover">
|
||||||
Copy link
|
<MudStack Spacing="2" Class="deepdrft-share-popover-body">
|
||||||
</MudButton>
|
|
||||||
@if (_linkCopied)
|
<MudStack Row AlignItems="AlignItems.Center" Justify="Justify.SpaceBetween">
|
||||||
|
<MudButton StartIcon="@Icons.Material.Filled.Link"
|
||||||
|
Variant="Variant.Text"
|
||||||
|
Color="Color.Primary"
|
||||||
|
OnClick="@CopyLink">
|
||||||
|
Copy link
|
||||||
|
</MudButton>
|
||||||
|
@if (_linkCopied)
|
||||||
|
{
|
||||||
|
<MudText Typo="Typo.caption" Color="Color.Success">Copied!</MudText>
|
||||||
|
}
|
||||||
|
</MudStack>
|
||||||
|
|
||||||
|
@* Embed is a single-track affordance only; a release page is not a single-track embed (§3b.3). *@
|
||||||
|
@if (!IsReleaseMode)
|
||||||
{
|
{
|
||||||
<MudText Typo="Typo.caption" Color="Color.Success">Copied!</MudText>
|
<MudDivider />
|
||||||
}
|
|
||||||
</MudStack>
|
|
||||||
|
|
||||||
@* Embed is a single-track affordance only; a release page is not a single-track embed (§3b.3). *@
|
<MudCheckBox @bind-Value="Embed" Color="Color.Primary" Label="Embed player" Dense="true" />
|
||||||
@if (!IsReleaseMode)
|
|
||||||
{
|
|
||||||
<MudDivider />
|
|
||||||
|
|
||||||
<MudCheckBox @bind-Value="Embed" Color="Color.Primary" Label="Embed player" Dense="true" />
|
@if (_embed)
|
||||||
|
{
|
||||||
@if (_embed)
|
<MudStack Row AlignItems="AlignItems.Center" Spacing="1">
|
||||||
{
|
<MudTextField Value="@EmbedSnippet"
|
||||||
<MudStack Row AlignItems="AlignItems.Center" Spacing="1">
|
T="string"
|
||||||
<MudTextField Value="@EmbedSnippet"
|
ReadOnly="true"
|
||||||
T="string"
|
Variant="Variant.Outlined"
|
||||||
ReadOnly="true"
|
Lines="3"
|
||||||
Variant="Variant.Outlined"
|
Margin="Margin.Dense"
|
||||||
Lines="3"
|
Class="deepdrft-share-embed-field" />
|
||||||
Margin="Margin.Dense"
|
<MudStack AlignItems="AlignItems.Center" Spacing="0">
|
||||||
Class="deepdrft-share-embed-field" />
|
<MudIconButton Icon="@Icons.Material.Filled.ContentCopy"
|
||||||
<MudStack AlignItems="AlignItems.Center" Spacing="0">
|
Color="Color.Primary"
|
||||||
<MudIconButton Icon="@Icons.Material.Filled.ContentCopy"
|
OnClick="@CopyEmbed"
|
||||||
Color="Color.Primary"
|
aria-label="Copy embed snippet" />
|
||||||
OnClick="@CopyEmbed"
|
@if (_embedCopied)
|
||||||
aria-label="Copy embed snippet" />
|
{
|
||||||
@if (_embedCopied)
|
<MudText Typo="Typo.caption" Color="Color.Success">Copied!</MudText>
|
||||||
{
|
}
|
||||||
<MudText Typo="Typo.caption" Color="Color.Success">Copied!</MudText>
|
</MudStack>
|
||||||
}
|
|
||||||
</MudStack>
|
</MudStack>
|
||||||
</MudStack>
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
</MudStack>
|
</MudStack>
|
||||||
</MudPopover>
|
</MudPopover>
|
||||||
|
</div>
|
||||||
|
|||||||
@@ -358,6 +358,15 @@ h2, h3, h4, h5, h6,
|
|||||||
font-family: var(--deepdrft-font-mono) !important;
|
font-family: var(--deepdrft-font-mono) !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* display:inline-block is load-bearing: it shrink-wraps the wrapper to the
|
||||||
|
button so MudPopover's portal reads the button's tight bounding rect
|
||||||
|
(parentNode.getBoundingClientRect()) instead of a page-wide flow box.
|
||||||
|
position:relative is incidental — do not drop inline-block. */
|
||||||
|
.deepdrft-share-popover-anchor {
|
||||||
|
position: relative;
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
.deepdrft-share-popover-body {
|
.deepdrft-share-popover-body {
|
||||||
padding: 0.75rem 1rem;
|
padding: 0.75rem 1rem;
|
||||||
min-width: 280px;
|
min-width: 280px;
|
||||||
|
|||||||
Reference in New Issue
Block a user