Public/New-TerminalPresentation.ps1

function New-TerminalPresentation {
    [CmdletBinding()]
    [OutputType([object])]
    param(
        [Parameter(Mandatory, Position = 0)]
        [string]$Title,
        [string]$Subtitle,
        [string]$Author,
        [string]$Description,
        [string]$Theme = 'Midnight',
        [ValidateScript({ $_ -eq 0 -or $_ -ge 20 })][int]$Width = 0,
        [ValidateScript({ $_ -eq 0 -or $_ -ge 10 })][int]$Height = 0,
        [string]$DefaultLayout = 'TitleAndContent',
        [hashtable]$Metadata = @{}
    )

    try {
        $resolvedTheme = Get-ResolvedTheme -Name $Theme
        Assert-TerminalSlideLayout -Layout $DefaultLayout
        $presentation = [TerminalSlides.Schema.V1.TerminalPresentation]::new()
        $presentation.Title = $Title
        $presentation.Subtitle = $Subtitle
        $presentation.Author = $Author
        $presentation.Description = $Description
        $presentation.Theme = $Theme
        $presentation.EmbeddedTheme = Copy-TerminalThemeDefinition $resolvedTheme
        $presentation.Width = $Width
        $presentation.Height = $Height
        $presentation.DefaultLayout = $DefaultLayout
        $presentation.Metadata.Title = $Title
        $presentation.Metadata.Subtitle = $Subtitle
        $presentation.Metadata.Author = $Author
        $presentation.Metadata.Description = $Description
        $presentation.Metadata.Custom = $Metadata
        return $presentation
    }
    catch {
        throw
    }
}