public/dialogs/Show-UiConfirmDialog.ps1

function Show-UiConfirmDialog {
    <#
    .SYNOPSIS
        Displays a simple themed confirmation dialog.
    .DESCRIPTION
        Shows a custom WPF confirmation dialog with customizable button text.
    .PARAMETER Title
        Dialog window title.
    .PARAMETER Message
        Message text to display.
    .PARAMETER ConfirmText
        Text for the confirmation button (default "Yes").
    .PARAMETER CancelText
        Text for the cancel button (default "No").
    .EXAMPLE
        if (Show-UiConfirmDialog -Title 'Delete File' -Message 'Are you sure you want to delete this file?') {
            Remove-Item $file
        }
    .EXAMPLE
        $proceed = Show-UiConfirmDialog -Title 'Continue' -Message 'Continue with operation?' -ConfirmText 'Continue' -CancelText 'Stop'
    #>

    [CmdletBinding()]
    param(
        [string]$Title = 'Confirm',

        [Parameter(Mandatory)]
        [string]$Message,

        [string]$ConfirmText = 'Yes',

        [string]$CancelText = 'No'
    )

    Write-Debug "Title='$Title' ConfirmText='$ConfirmText' CancelText='$CancelText'"

    # Create dialog window using shared helper
    $dlg = New-DialogWindow -Title $Title -Width 400 -AppIdSuffix 'ConfirmDialog' -OverlayGlyph ([PsUi.ModuleContext]::GetIcon('Help'))

    $window       = $dlg.Window
    $contentPanel = $dlg.ContentPanel
    $colors       = $dlg.Colors

    # Button panel at bottom
    $buttonPanel = [System.Windows.Controls.StackPanel]@{
        Orientation         = 'Horizontal'
        HorizontalAlignment = 'Right'
        Margin              = [System.Windows.Thickness]::new(0, 12, 0, 0)
    }
    [System.Windows.Controls.DockPanel]::SetDock($buttonPanel, 'Bottom')
    [void]$contentPanel.Children.Add($buttonPanel)

    # Message text with scroll support
    $scrollViewer = [System.Windows.Controls.ScrollViewer]@{
        VerticalScrollBarVisibility   = 'Auto'
        HorizontalScrollBarVisibility = 'Disabled'
        Padding                       = [System.Windows.Thickness]::new(0, 0, 8, 0)
    }

    $messageText = [System.Windows.Controls.TextBlock]@{
        Text         = $Message
        FontSize     = 13
        TextWrapping = 'Wrap'
        Foreground   = ConvertTo-UiBrush $colors.ControlFg
        Margin       = [System.Windows.Thickness]::new(0, 4, 0, 0)
    }
    $scrollViewer.Content = $messageText
    [void]$contentPanel.Children.Add($scrollViewer)

    # Confirm button (accent)
    $confirmBtn = [System.Windows.Controls.Button]@{
        Content = $ConfirmText
        Width   = 80
        Height  = 28
        Margin  = [System.Windows.Thickness]::new(0, 0, 4, 0)
    }
    Set-ButtonStyle -Button $confirmBtn -Accent
    $confirmBtn.Add_Click({
        $window.Tag = $true
        $window.Close()
    })
    [void]$buttonPanel.Children.Add($confirmBtn)
    $confirmBtn.IsDefault = $true

    # Cancel button
    $cancelBtn = [System.Windows.Controls.Button]@{
        Content = $CancelText
        Width   = 80
        Height  = 28
        Margin  = [System.Windows.Thickness]::new(4, 0, 0, 0)
    }
    Set-ButtonStyle -Button $cancelBtn
    $cancelBtn.Add_Click({
        $window.Tag = $false
        $window.Close()
    })
    [void]$buttonPanel.Children.Add($cancelBtn)
    $cancelBtn.IsCancel = $true

    # Standard window behavior: fade-in, title bar theming
    Initialize-UiWindowLoaded -Window $window

    Set-UiDialogPosition -Dialog $window

    Write-Debug "Showing modal dialog"
    [void]$window.ShowDialog()

    $result = $window.Tag -eq $true
    Write-Debug "Result: $result"
    return $result
}