private/Controls/New-UiLoadingSpinner.ps1

function New-UiLoadingSpinner {
    <#
    .SYNOPSIS
        Creates a spinning circle animation for loading states.
    #>

    [CmdletBinding()]
    param(
        [int]$Size = 16,
        [string]$Color = '#FFFFFF'
    )
    
    # Oroginally used a MDL2 glyph for spinner, but not all Win10 versions have the glyph
    # Use drawn arc instead of font glyph for universal Windows 10 compatibility - doesn't look ad good, but works
    $spinner = [System.Windows.Shapes.Path]@{
        Stroke                = ConvertTo-UiBrush $Color
        StrokeThickness       = [Math]::Max(1.5, $Size / 8)
        Width                 = $Size
        Height                = $Size
        HorizontalAlignment   = 'Center'
        VerticalAlignment     = 'Center'
        RenderTransformOrigin = '0.5,0.5'
    }
    
    # Create arc geometry (3/4 circle)
    $radius    = $Size / 2
    $geometry  = [System.Windows.Media.PathGeometry]::new()
    $figure    = [System.Windows.Media.PathFigure]::new()
    $figure.StartPoint = [System.Windows.Point]::new($radius, 0)
    $arc       = [System.Windows.Media.ArcSegment]::new()
    $arc.Point = [System.Windows.Point]::new($radius, $Size)
    $arc.Size  = [System.Windows.Size]::new($radius, $radius)
    $arc.SweepDirection = [System.Windows.Media.SweepDirection]::Clockwise
    $arc.IsLargeArc = $true
    [void]$figure.Segments.Add($arc)
    [void]$geometry.Figures.Add($figure)
    $spinner.Data = $geometry
    
    $rotateTransform = [System.Windows.Media.RotateTransform]::new()
    $spinner.RenderTransform = $rotateTransform
    
    $animation = [System.Windows.Media.Animation.DoubleAnimation]@{
        From           = 0
        To             = 360
        Duration       = [System.Windows.Duration]::new([TimeSpan]::FromSeconds(1.2))
        RepeatBehavior = [System.Windows.Media.Animation.RepeatBehavior]::Forever
    }
    
    $rotateTransform.BeginAnimation([System.Windows.Media.RotateTransform]::AngleProperty, $animation)
    
    return $spinner
}