Public/Elements/New-AMColumn.ps1

function New-AMColumn {
    <#
    .SYNOPSIS
        Creates a Column element for use in ColumnSets within an Adaptive Card.
 
    .DESCRIPTION
        Creates a Column object that can be used in a ColumnSet to create multi-column layouts.
        Columns can contain any number of items and help organize content horizontally.
        Multiple columns are typically grouped together in a ColumnSet element created with
        New-AMColumnSet.
 
    .PARAMETER Width
        Specifies the width of the column. This can be:
        - An absolute pixel value (e.g., "50px")
        - A relative weight (e.g., "2")
        - "auto" to automatically size based on content
        - "stretch" to fill available space
 
        Default: "auto"
 
    .PARAMETER VerticalContentAlignment
        Controls how the content is vertically aligned within the column.
        Valid values: "top", "center", "bottom"
 
        Default: "top"
 
    .PARAMETER Items
        An array of elements to place inside the column. These should be created using
        other New-AM* functions like New-AMTextBlock, New-AMImage, etc.
 
        Default: empty array (@())
 
    .EXAMPLE
        # Create a simple column with text
        $column = New-AMColumn -Width "1" -Items @(
            (New-AMTextBlock -Text "Column 1 Content" -Wrap $true)
        )
 
    .EXAMPLE
        # Create multiple columns for use in a ColumnSet
        $leftColumn = New-AMColumn -Width "auto" -Items @(
            (New-AMImage -Url "https://example.com/profile.jpg" -Size "Small")
        )
 
        $rightColumn = New-AMColumn -Width "stretch" -Items @(
            (New-AMTextBlock -Text "John Doe" -Size "Medium" -Weight "Bolder"),
            (New-AMTextBlock -Text "Software Developer" -Spacing "None")
        )
 
        # Combine columns into a ColumnSet
        $columnSet = New-AMColumnSet -Columns @($leftColumn, $rightColumn)
 
    .EXAMPLE
        # Create a three-column layout with vertical alignment
        $col1 = New-AMColumn -Width "1" -VerticalContentAlignment "top" -Items @(
            (New-AMTextBlock -Text "Top Aligned")
        )
 
        $col2 = New-AMColumn -Width "1" -VerticalContentAlignment "center" -Items @(
            (New-AMTextBlock -Text "Center Aligned")
        )
 
        $col3 = New-AMColumn -Width "1" -VerticalContentAlignment "bottom" -Items @(
            (New-AMTextBlock -Text "Bottom Aligned")
        )
 
        $columnSet = New-AMColumnSet -Columns @($col1, $col2, $col3)
 
    .INPUTS
        None. You cannot pipe input to New-AMColumn.
 
    .OUTPUTS
        System.Collections.Hashtable
        Returns a hashtable representing the Column element.
 
    .NOTES
        Columns must be used within a ColumnSet. To create a multi-column layout:
        1. Create individual columns using New-AMColumn
        2. Combine them using New-AMColumnSet
        3. Add the ColumnSet to your card with Add-AMElement
 
        Width values can be:
        - "auto" - Column uses minimum width needed for its content
        - "stretch" - Column stretches to fill available width
        - "pixel" value (e.g., "50px") - Fixed width in pixels
        - Numeric proportion (e.g., "1", "2") - Relative width compared to other columns
 
    .LINK
        https://adaptivecards.io/explorer/Column.html
    #>

    [CmdletBinding()]
    param (
        [Parameter()]
        [string]$Width = "auto",

        [Parameter()]
        [ValidateSet("top", "center", "bottom")]
        [string]$VerticalContentAlignment = "top",

        [Parameter()]
        [array]$Items = @()
    )

    $column = @{
        type = "Column"
        width = $Width
        verticalContentAlignment = $VerticalContentAlignment
        items = $Items
    }

    return $column
}

Export-ModuleMember -Function New-AMColumn