From 80db086b9ec171c29d827bdba87e34cfb9041109 Mon Sep 17 00:00:00 2001 From: James Brundage <+@users.noreply.github.com> Date: Mon, 10 Aug 2026 19:54:12 -0700 Subject: [PATCH 01/90] feat: `Matrix` module ( Fixes #1 ) --- Matrix.psd1 | 159 ++++++++++++++++++++++++++++++++++++++++++++++++++++ Matrix.psm1 | 99 ++++++++++++++++++++++++++++++++ 2 files changed, 258 insertions(+) create mode 100644 Matrix.psd1 create mode 100644 Matrix.psm1 diff --git a/Matrix.psd1 b/Matrix.psd1 new file mode 100644 index 0000000..f9348f1 --- /dev/null +++ b/Matrix.psd1 @@ -0,0 +1,159 @@ +# +# Module manifest for module 'Matrix' +# +# Generated by: James Brundage +# +# Generated on: 8/10/2026 +# + +@{ + +# Script module or binary module file associated with this manifest. +RootModule = 'Matrix.psm1' + +# Version number of this module. +ModuleVersion = '0.1' + +# Supported PSEditions +# CompatiblePSEditions = @() + +# ID used to uniquely identify this module +GUID = '1ea87d5e-babe-42d9-97fa-68775e5335af' + +# Author of this module +Author = 'James Brundage' + +# Company or vendor of this module +CompanyName = 'Start-Automating' + +# Copyright statement for this module +Copyright = '2026' + +# Description of the functionality provided by this module +Description = 'Matrix Transforms with PowerShell' + +# Minimum version of the PowerShell engine required by this module +# PowerShellVersion = '' + +# Name of the PowerShell host required by this module +# PowerShellHostName = '' + +# Minimum version of the PowerShell host required by this module +# PowerShellHostVersion = '' + +# Minimum version of Microsoft .NET Framework required by this module. This prerequisite is valid for the PowerShell Desktop edition only. +# DotNetFrameworkVersion = '' + +# Minimum version of the common language runtime (CLR) required by this module. This prerequisite is valid for the PowerShell Desktop edition only. +# ClrVersion = '' + +# Processor architecture (None, X86, Amd64) required by this module +# ProcessorArchitecture = '' + +# Modules that must be imported into the global environment prior to importing this module +# RequiredModules = @() + +# Assemblies that must be loaded prior to importing this module +# RequiredAssemblies = @() + +# Script files (.ps1) that are run in the caller's environment prior to importing this module. +# ScriptsToProcess = @() + +# Type files (.ps1xml) to be loaded when importing this module +TypesToProcess = 'Matrix.types.ps1xml' + +# Format files (.ps1xml) to be loaded when importing this module +# FormatsToProcess = @() + +# Modules to import as nested modules of the module specified in RootModule/ModuleToProcess +# NestedModules = @() + +# Functions to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no functions to export. +FunctionsToExport = 'Matrix', 'Get-Matrix' + +# Cmdlets to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no cmdlets to export. +CmdletsToExport = @() + +# Variables to export from this module +VariablesToExport = 'Matrix' + +# Aliases to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no aliases to export. +AliasesToExport = + @( + 'Matrix4x4', 'Matrix3x2', 'Matrix2d', 'Matrix3d' + 'Scale', + 'ScaleX', + 'ScaleY', + 'ScaleZ', + 'Scale3D', + 'Skew', + 'SkewX', + 'SkewY', + 'Rotate', + 'RotateX', + 'RotateY', + 'RotateZ', + 'Rotate3D', + 'Translate', + 'Translate3d', + 'TranslateX', + 'TranslateY', + 'TranslateZ' + ) + + +# DSC resources to export from this module +# DscResourcesToExport = @() + +# List of all modules packaged with this module +# ModuleList = @() + +# List of all files packaged with this module +# FileList = @() + +# Private data to pass to the module specified in RootModule/ModuleToProcess. This may also contain a PSData hashtable with additional module metadata used by PowerShell. +PrivateData = @{ + + PSData = @{ + + # Tags applied to this module. These help with module discovery in online galleries. + # Tags = @() + + # A URL to the license for this module. + LicenseUri = 'https://github.com/PoshWeb/Matrix/blob/main/LICENSE' + + # A URL to the main website for this project. + ProjectUri = 'https://github.com/PoshWeb/Matrix/' + + # A URL to an icon representing this module. + # IconUri = '' + + # ReleaseNotes of this module + ReleaseNotes = @' +'@ + + + PSIntro = @' + +'@ + # Prerelease string of this module + # Prerelease = '' + + # Flag to indicate whether the module requires explicit user acceptance for install/update/save + # RequireLicenseAcceptance = $false + + # External dependent modules of this module + # ExternalModuleDependencies = @() + + } # End of PSData hashtable + +} # End of PrivateData hashtable + +# HelpInfo URI of this module +# HelpInfoURI = '' + +# Default prefix for commands exported from this module. Override the default prefix using Import-Module -Prefix. +# DefaultCommandPrefix = '' + +} + diff --git a/Matrix.psm1 b/Matrix.psm1 new file mode 100644 index 0000000..86a7438 --- /dev/null +++ b/Matrix.psm1 @@ -0,0 +1,99 @@ +#region Eponym + +# Functions and scripts are interchangeable in PowerShell +# So we can make a small module using an eponym file. +# First we need to identify the module name +$moduleName = $MyInvocation.MyCommand.Name -replace '\.psm1$' + +# Once we have done this, we can look for an eponymous script: +$eponym = + $ExecutionContext.SessionState.InvokeCommand.GetCommand(( + Join-Path $PSScriptRoot "$moduleName.ps1" + ), 'ExternalScript') + +# If we did not find one, +if (-not $eponym) { + # warn and return. + Write-Warning "Missing ./$moduleName.ps1" + return +} + +# We want to define two functions from this script + +# One is the name of the script +# The other is the "verb" form of the script. + +# Collect our list of verbs +$verbs = Get-Verb | + Sort-Object { $_.Verb.Length }, {$_.Verb } -Descending | + Select-Object -ExpandProperty Verb + +# and craft a regex to see if we start with the verb. +$startsWithVerb = "^(?>$( + $verbs -join '|' +))" + +# Our Exports are: +$exports = + $moduleName, # * The Eponym + $( + # The `Verb-Noun` form + if ($moduleName -match $startsWithVerb) { + "$($matches.0)-$($moduleName -replace "$startsWithVerb\p{P}?")" + } else { + "Get-$($ModuleName -replace '\p{P}')" + } + ) + +# We can use the function provider to create functions in this scope. +foreach ($functionName in $exports) { + # This allows us to dynamically set each export to by the eponym + $ExecutionContext.SessionState.PSVariable.Set( + "function:$functionName", + $eponym.ScriptBlock + ) +} + +# We also want to export any aliases +# and add support for argument completers. +$argumentCompleter = $null +$aliasExports = @( + # walk over all of our attributes + foreach ($attribute in $eponym.ScriptBlock.Attributes) { + # and keep track of any argument completers we find. + if ($attribute -is [ArgumentCompleter]) { + $argumentCompleter = $attribute + } + # Then make our aliases + foreach ($alias in $attribute.aliasNames) { + # (unless the alias is already exported as a function) + if ($alias -in $exports) { continue } + $ExecutionContext.SessionState.PSVariable.Set( + "alias:$alias", $moduleName + ) + $alias + } + } +) + +# If we had an argument completer +if ($argumentCompleter.ScriptBlock) { + # now is the time to register it. + + # Argument completers need to be registered for each function + foreach ($functionExport in $exports) { + Register-ArgumentCompleter -CommandName $functionExport -ScriptBlock $argumentCompleter.ScriptBlock + } + + # and alias + foreach ($aliasExport in $aliasExports) { + Register-ArgumentCompleter -CommandName $aliasExport -ScriptBlock $argumentCompleter.ScriptBlock + } +} + +# We will also be exporting our eponym as a variable +$ExecutionContext.SessionState.PSVariable.Set($moduleName, $eponym) + +# All that's left to do is explicitly export just these functions. +Export-ModuleMember -Function $exports -Alias $aliasExports -Variable $moduleName +#endregion Eponym \ No newline at end of file From 8f0c0383ffff6f31909baaf41ec78a902c388c1f Mon Sep 17 00:00:00 2001 From: James Brundage <+@users.noreply.github.com> Date: Mon, 10 Aug 2026 19:57:05 -0700 Subject: [PATCH 02/90] feat: `Matrix.ps1` ( Fixes #2, Fixes #8 ) --- Matrix.ps1 | 406 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 406 insertions(+) create mode 100644 Matrix.ps1 diff --git a/Matrix.ps1 b/Matrix.ps1 new file mode 100644 index 0000000..f568944 --- /dev/null +++ b/Matrix.ps1 @@ -0,0 +1,406 @@ +<# +.SYNOPSIS + Matrix +.DESCRIPTION + Makes and Manipulates Matrix Transformations. + + Matrix Transformations move objects in space. + + Matrix makes matrixes in PowerShell. + + This can transform objects in 2D, 3D, and 4D + + We can use matrix to make CSS or transform Vectors. +.NOTES + Matrix math is hard, and this module lets us avoid having to do it. + + Instead, we can pipe objects into this module and transform them. + + A Matrix in .NET is the same as a Matrix in CSS. + + |css function|.NET type| + |-|-| + |`matrix()`|`[Numerics.Matrix3x2]`| + |`matrix3d()`|`[Numerics.Matrix4x4]`| + + This means we can do every transformation that CSS can do. + + Any object piped with a `Transform` static method will be transformed. + + Other objects will be passed thru. +.EXAMPLE + # Get the identity matrix. + # This is the object, untransformed, in 2D + Matrix Identity +.EXAMPLE + Matrix3D 1 +.EXAMPLE + # Scale a point in 2d space by directly calling `::CreateScale` + [Numerics.Vector2]::new(1,1) | + Matrix 2 -Member CreateScale 1 2 +.EXAMPLE + # Scale a point in 2d space by using `scale` + [Numerics.Vector2]::new(1,1) | + Scale 1 2 +.EXAMPLE + # Skew a point + [Numerics.Vector2]::new(1,1) | + Skew 30deg 10deg +.EXAMPLE + # Skew a point along X, then along Y + [Numerics.Vector2]::new(1,1) | + SkewX 30deg | + SkewY 10deg +.EXAMPLE + [Numerics.Vector2]::new(1,1) | + ScaleZ 1 +.EXAMPLE + # Scale X in 2D + [Numerics.Vector2]::new(1,1) | + ScaleX 2 +.EXAMPLE + # Scale X in 3D + [Numerics.Vector3]::new(1,1,1) | + ScaleX 2 +.EXAMPLE + # Scale Y in 3D + [Numerics.Vector2]::new(1,1) | + ScaleY 2 +.EXAMPLE + # Scale Z in 3D + [Numerics.Vector3]::new(1,1,1) | + ScaleZ 3 + +.EXAMPLE + # Move a point in 3d + [Numerics.Vector3]::new(1,1,1) | + TranslateX 3 | + TranslateY 3 | + TranslateZ 3 +.EXAMPLE + # Move and scale a point in 3d + [Numerics.Vector3]::new(1,1,1) | + Translate3d 1 2 5 | + Scale3d 3 2 1 +.EXAMPLE + [Numerics.Vector3]::new(1,1,1) | + Translate3d 1 2 5 | + Scale3d 3 2 1 +.EXAMPLE + # Rotate3d + [Numerics.Vector3]::new(1,1,1) | + Rotate3d 1 1 1 30deg +.EXAMPLE + # rotate3d as a matrix3d, as CSS + (Rotate3d 1 1 1 30deg).css +#> +[Alias( + 'Matrix4x4', + 'Matrix3x2', + 'Matrix2d', + 'Matrix3d', + 'Skew', + 'SkewX', + 'SkewY', + 'Scale', + 'ScaleX', + 'ScaleY', + 'ScaleZ', + 'Scale3d', + 'Rotate', + 'RotateX', + 'RotateY', + 'RotateZ', + 'Rotate3d', + 'Translate', + 'Translate3d', + 'TranslateX', + 'TranslateY', + 'TranslateZ' +)] +[CmdletBinding(PositionalBinding=$false)] +param( +[Parameter(ValueFromRemainingArguments)] +[Alias('Arguments','Argument','Args')] +[object[]] +$ArgumentList, + +[Parameter(ValueFromPipeline)] +[Alias('Input')] +[PSObject[]] +$InputObject, + +[ArgumentCompleter({ + param( + $CommandName, $parameterName, $wordToComplete, + $commandAst, $fakeBoundParameters + ) + + $firstElement = @($commandAst.CommandElements)[0] + $members = + if ($firstElement -match '(?>3d|4x4)') { + [Numerics.Matrix4x4].GetMembers('Static,Public').Name -notmatch '_' + } + else { + [Numerics.Matrix3x2].GetMembers('Static,Public').Name -notmatch '_' + } + + if ($wordToComplete) { + $members -match "$([regex]::Escape($wordToComplete))" + } else { + $members + } +})] +[string] +$Member = 'Create' +) + +$myName = $MyInvocation.InvocationName + +$allInput = @($input) + +if (-not $allInput) { + $allInput += $InputObject +} + +$matrixType = + if ($myName -match '3d' -or $myName -match '4x4') { + [Numerics.Matrix4x4] + } else { + [Numerics.Matrix3x2] + } + + +# A quick little filter to convert css units into numbers. +filter cssunit { + $arg = $_ + if ($arg -isnot [string]) { + return $arg + } + switch -regex ($arg) { + 'turn$' { + # Each turn of the circle is 360 radians + ($_ -replace 'turn$' -as [single]) * ([Math]::PI/180 * 360) + continue + } + 'deg$' { + ($_ -replace 'deg$' -as [single]) * ([Math]::PI/180) + continue + } + '%$' { + ($_ -replace '%$' -as [single]) + continue + } + '[\-\.\d]+\p{L}+' { + $_ -replace '\p{L}+$' -as [single] + continue + } + default { + $_ + } + } +} + + +$ArgumentList = @( + $ArgumentList | cssunit +) + +$Matrix = $null + +switch ($myName) { + Rotate { + $MatrixType = [Numerics.Matrix4x4] + $Member = 'CreateRotation' + $ArgumentList = 0, 0, $ArgumentList[0] + } + RotateX { + $MatrixType = [Numerics.Matrix4x4] + $Member = 'CreateRotationX' + $ArgumentList = $ArgumentList[0] + } + RotateY { + $MatrixType = [Numerics.Matrix4x4] + $Member = 'CreateRotationY' + $ArgumentList = $ArgumentList[0] + } + RotateZ { + $MatrixType = [Numerics.Matrix4x4] + $Member = 'CreateRotationZ' + $ArgumentList = $ArgumentList[0] + } + Rotate3d { + + # https://drafts.csswg.org/css-transforms-2/#Rotate3dDefined + + $MatrixType = [Numerics.Matrix4x4] + $Member = 'Create' + $x, $y, $z, $null = $ArgumentList + $normalize = [Numerics.Vector3]::new($x, $y, $z) + $magnitude = $normalize.Length() + if ($magnitude -eq 0) { $magnitude = [Math]::Sqrt(3) } + $x, $y, $z = ($x/$magnitude), ($y/$magnitude), ($z/$magnitude) + $x2, $y2, $z2 = [Math]::Pow($x, 2), [Math]::Pow($y,2), [Math]::Pow($z, 2) + $alpha = $ArgumentList[3] -as [single] + $sc = [Math]::Sin($alpha/2) * [Math]::Cos($alpha/2) + $sq = [Math]::Pow([Math]::Sin($alpha/2), 2) + + $ArgumentList = @( + #M 1 1 + 1 - (2 * ($y2 + $z2) * $sq) + # M 1 2 + 2 * (($x * $y * $sq) - ($z * $sc)) + # M 1 3 + 2 * (($x * $z * $sq) + ($y * $sc)) + # M 1 4 + 0 + + + # M 2 1 + 2 * (($x * $y * $sq) + ($z * $sc)) + + # M 2 2 + 1 - (2 * ($x2 + $z2) * $sq) + + # M 2 3 + 2 * (($y * $z * $sq) - ($x * $sc)) + + # m 2 4 + 0 + + # M 3 1 + 2 * (($x * $z * $sq) - ($y * $sc)) + + # M 3 2 + 2 * (($y * $z * $sq) + ($x * $sc)) + + # M 3 3 + 1.0 - (2 * ($x2 + $y2) * $sq) + + # M 3 4 + 0 + + # M 4 1 + 0 + # M 4 2 + 0 + # M 4 3 + 0 + # M 4 4 + 1 + ) + + } + Scale { + $MatrixType = [Numerics.Matrix3x2] + $Member = 'CreateScale' + } + ScaleX { + $MatrixType = [Numerics.Matrix4x4] + $Member = 'CreateScale' + $ArgumentList = $ArgumentList[0], 1, 1 + } + ScaleY { + $MatrixType = [Numerics.Matrix4x4] + $Member = 'CreateScale' + $ArgumentList = 1, $ArgumentList[0], 1 + } + ScaleZ { + $MatrixType = [Numerics.Matrix4x4] + $Member = 'CreateScale' + $ArgumentList = 1, 1, $ArgumentList[0] + } + Scale3d { + $MatrixType = [Numerics.Matrix4x4] + $Member = 'CreateScale' + } + Skew { + $MatrixType = [Numerics.Matrix3x2] + $Member = 'CreateSkew' + if ($ArgumentList.Length -eq 1) { + $ArgumentList *= 2 + } + } + SkewX { + $MatrixType = [Numerics.Matrix3x2] + $Member = 'CreateSkew' + if ($ArgumentList.Length -eq 1) { + $ArgumentList = $ArgumentList[0], 0 + } + } + SkewY { + $MatrixType = [Numerics.Matrix3x2] + $Member = 'CreateSkew' + if ($ArgumentList.Length -eq 1) { + $ArgumentList = 0, $ArgumentList[0] + } + } + Translate { + $MatrixType = [Numerics.Matrix3x2] + $Member = 'CreateTranslation' + } + Translate3d { + $MatrixType = [Numerics.Matrix4x4] + $Member = 'CreateTranslation' + } + TranslateX { + $MatrixType = [Numerics.Matrix4x4] + $Member = 'CreateTranslation' + $ArgumentList = @($ArgumentList[0], 0, 0) + } + TranslateY { + $MatrixType = [Numerics.Matrix4x4] + $Member = 'CreateTranslation' + $ArgumentList = @(0, $ArgumentList[0], 0) + } + TranslateZ { + $MatrixType = [Numerics.Matrix4x4] + $Member = 'CreateTranslation' + $ArgumentList = @(0, 0, $ArgumentList[0]) + } +} + +if ($null -eq $matrixType::$Member) { + return +} + +if (-not $ArgumentList.Length) { + if (-not $PSBoundParameters.Member) {return $matrixType } + else { return $matrixType::$member } +} + +if ($ArgumentList.Length -eq 1 -and + $matrixType::($ArgumentList[0]) +) { + $Member = 'identity' +} + +if (-not $matrix) { + $matrix = + if ($matrixType::$member.Invoke) { + $matrixType::$Member.Invoke($ArgumentList) + } else { + $matrixType::$Member + } +} + + +if ($allInput.Length -and ($null -ne $allInput[0])) { + $3dMatrix = + if ($matrix -is [Numerics.Matrix3x2]) { + [Numerics.Matrix4x4]::Create($matrix) + } else { + $matrix + } + + foreach ($in in $allInput) { + if ($in::Transform) { + $in::Transform($in, $3dMatrix) + } else { + $in + } + } +} else { + $matrix +} + From cbd73f115a252c01604159809238b24c6c0937b4 Mon Sep 17 00:00:00 2001 From: James Brundage <+@users.noreply.github.com> Date: Mon, 10 Aug 2026 20:05:04 -0700 Subject: [PATCH 03/90] feat: `Matrix` build ( Fixes #3 ) --- .github/workflows/build.yml | 496 +++++++++++++++++++++ Build/GitHub/Jobs/BuildMatrix.psd1 | 11 + Build/GitHub/Steps/PublishTestResults.psd1 | 10 + Build/Matrix.GitHubWorkflow.PSDevOps.ps1 | 18 + Build/Matrix.ezout.ps1 | 39 ++ 5 files changed, 574 insertions(+) create mode 100644 .github/workflows/build.yml create mode 100644 Build/GitHub/Jobs/BuildMatrix.psd1 create mode 100644 Build/GitHub/Steps/PublishTestResults.psd1 create mode 100644 Build/Matrix.GitHubWorkflow.PSDevOps.ps1 create mode 100644 Build/Matrix.ezout.ps1 diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..c53b233 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,496 @@ + +name: Build Module +on: + push: + pull_request: + workflow_dispatch: +jobs: + TestPowerShellOnLinux: + runs-on: ubuntu-latest + steps: + - name: InstallPester + id: InstallPester + shell: pwsh + run: | + $Parameters = @{} + $Parameters.PesterMaxVersion = ${env:PesterMaxVersion} + foreach ($k in @($parameters.Keys)) { + if ([String]::IsNullOrEmpty($parameters[$k])) { + $parameters.Remove($k) + } + } + Write-Host "::debug:: InstallPester $(@(foreach ($p in $Parameters.GetEnumerator()) {'-' + $p.Key + ' ' + $p.Value}) -join ' ')" + & {<# + .Synopsis + Installs Pester + .Description + Installs Pester + #> + param( + # The maximum pester version. Defaults to 4.99.99. + [string] + $PesterMaxVersion = '4.99.99' + ) + [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 + Install-Module -Name Pester -Repository PSGallery -Force -Scope CurrentUser -MaximumVersion $PesterMaxVersion -SkipPublisherCheck -AllowClobber + Import-Module Pester -Force -PassThru -MaximumVersion $PesterMaxVersion} @Parameters + - name: Check out repository + uses: actions/checkout@v4 + - name: RunPester + id: RunPester + shell: pwsh + run: | + $Parameters = @{} + $Parameters.ModulePath = ${env:ModulePath} + $Parameters.PesterMaxVersion = ${env:PesterMaxVersion} + $Parameters.NoCoverage = ${env:NoCoverage} + $Parameters.NoCoverage = $parameters.NoCoverage -match 'true'; + foreach ($k in @($parameters.Keys)) { + if ([String]::IsNullOrEmpty($parameters[$k])) { + $parameters.Remove($k) + } + } + Write-Host "::debug:: RunPester $(@(foreach ($p in $Parameters.GetEnumerator()) {'-' + $p.Key + ' ' + $p.Value}) -join ' ')" + & {<# + .Synopsis + Runs Pester + .Description + Runs Pester tests after importing a PowerShell module + #> + param( + # The module path. If not provided, will default to the second half of the repository ID. + [string] + $ModulePath, + # The Pester max version. By default, this is pinned to 4.99.99. + [string] + $PesterMaxVersion = '4.99.99', + + # If set, will not collect code coverage. + [switch] + $NoCoverage + ) + + $global:ErrorActionPreference = 'continue' + $global:ProgressPreference = 'silentlycontinue' + + $orgName, $moduleName = $env:GITHUB_REPOSITORY -split "/" + if (-not $ModulePath) { $ModulePath = ".\$moduleName.psd1" } + $importedPester = Import-Module Pester -Force -PassThru -MaximumVersion $PesterMaxVersion + $importedModule = Import-Module $ModulePath -Force -PassThru + $importedPester, $importedModule | Out-Host + + $codeCoverageParameters = @{ + CodeCoverage = "$($importedModule | Split-Path)\*-*.ps1" + CodeCoverageOutputFile = ".\$moduleName.Coverage.xml" + } + + if ($NoCoverage) { + $codeCoverageParameters = @{} + } + + + $result = + Invoke-Pester -PassThru -Verbose -OutputFile ".\$moduleName.TestResults.xml" -OutputFormat NUnitXml @codeCoverageParameters + + if ($result.FailedCount -gt 0) { + "::debug:: $($result.FailedCount) tests failed" + foreach ($r in $result.TestResult) { + if (-not $r.Passed) { + "::error::$($r.describe, $r.context, $r.name -join ' ') $($r.FailureMessage)" + } + } + throw "::error:: $($result.FailedCount) tests failed" + } + } @Parameters + - name: PublishTestResults + uses: actions/upload-artifact@main + with: + name: PesterResults + path: '**.TestResults.xml' + if: ${{always()}} + TagReleaseAndPublish: + runs-on: ubuntu-latest + if: ${{ success() }} + steps: + - name: Check out repository + uses: actions/checkout@v2 + - name: TagModuleVersion + id: TagModuleVersion + shell: pwsh + run: | + $Parameters = @{} + $Parameters.ModulePath = ${env:ModulePath} + $Parameters.UserEmail = ${env:UserEmail} + $Parameters.UserName = ${env:UserName} + $Parameters.TagVersionFormat = ${env:TagVersionFormat} + $Parameters.TagAnnotationFormat = ${env:TagAnnotationFormat} + foreach ($k in @($parameters.Keys)) { + if ([String]::IsNullOrEmpty($parameters[$k])) { + $parameters.Remove($k) + } + } + Write-Host "::debug:: TagModuleVersion $(@(foreach ($p in $Parameters.GetEnumerator()) {'-' + $p.Key + ' ' + $p.Value}) -join ' ')" + & {param( + [string] + $ModulePath, + + # The user email associated with a git commit. + [string] + $UserEmail, + + # The user name associated with a git commit. + [string] + $UserName, + + # The tag version format (default value: 'v$(imported.Version)') + # This can expand variables. $imported will contain the imported module. + [string] + $TagVersionFormat = 'v$($imported.Version)', + + # The tag version format (default value: '$($imported.Name) $(imported.Version)') + # This can expand variables. $imported will contain the imported module. + [string] + $TagAnnotationFormat = '$($imported.Name) $($imported.Version)' + ) + + + $gitHubEvent = if ($env:GITHUB_EVENT_PATH) { + [IO.File]::ReadAllText($env:GITHUB_EVENT_PATH) | ConvertFrom-Json + } else { $null } + + + @" + ::group::GitHubEvent + $($gitHubEvent | ConvertTo-Json -Depth 100) + ::endgroup:: + "@ | Out-Host + + if (-not ($gitHubEvent.head_commit.message -match "Merge Pull Request #(?\d+)") -and + (-not $gitHubEvent.psobject.properties['inputs'])) { + "::warning::Pull Request has not merged, skipping Tagging" | Out-Host + return + } + + + + $imported = + if (-not $ModulePath) { + $orgName, $moduleName = $env:GITHUB_REPOSITORY -split "/" + Import-Module ".\$moduleName.psd1" -Force -PassThru -Global + } else { + Import-Module $modulePath -Force -PassThru -Global + } + + if (-not $imported) { return } + + $targetVersion =$ExecutionContext.InvokeCommand.ExpandString($TagVersionFormat) + $existingTags = git tag --list + + @" + Target Version: $targetVersion + + Existing Tags: + $($existingTags -join [Environment]::NewLine) + "@ | Out-Host + + $versionTagExists = $existingTags | Where-Object { $_ -match $targetVersion } + + if ($versionTagExists) { + "::warning::Version $($versionTagExists)" + return + } + + if (-not $UserName) { $UserName = $env:GITHUB_ACTOR } + if (-not $UserEmail) { $UserEmail = "$UserName@github.com" } + git config --global user.email $UserEmail + git config --global user.name $UserName + + git tag -a $targetVersion -m $ExecutionContext.InvokeCommand.ExpandString($TagAnnotationFormat) + git push origin --tags + + if ($env:GITHUB_ACTOR) { + exit 0 + }} @Parameters + - name: ReleaseModule + id: ReleaseModule + shell: pwsh + run: | + $Parameters = @{} + $Parameters.ModulePath = ${env:ModulePath} + $Parameters.UserEmail = ${env:UserEmail} + $Parameters.UserName = ${env:UserName} + $Parameters.TagVersionFormat = ${env:TagVersionFormat} + $Parameters.ReleaseNameFormat = ${env:ReleaseNameFormat} + $Parameters.ReleaseAsset = ${env:ReleaseAsset} + $Parameters.ReleaseAsset = $parameters.ReleaseAsset -split ';' -replace '^[''"]' -replace '[''"]$' + foreach ($k in @($parameters.Keys)) { + if ([String]::IsNullOrEmpty($parameters[$k])) { + $parameters.Remove($k) + } + } + Write-Host "::debug:: ReleaseModule $(@(foreach ($p in $Parameters.GetEnumerator()) {'-' + $p.Key + ' ' + $p.Value}) -join ' ')" + & {param( + [string] + $ModulePath, + + # The user email associated with a git commit. + [string] + $UserEmail, + + # The user name associated with a git commit. + [string] + $UserName, + + # The tag version format (default value: 'v$(imported.Version)') + # This can expand variables. $imported will contain the imported module. + [string] + $TagVersionFormat = 'v$($imported.Version)', + + # The release name format (default value: '$($imported.Name) $($imported.Version)') + [string] + $ReleaseNameFormat = '$($imported.Name) $($imported.Version)', + + # Any assets to attach to the release. Can be a wildcard or file name. + [string[]] + $ReleaseAsset + ) + + + $gitHubEvent = if ($env:GITHUB_EVENT_PATH) { + [IO.File]::ReadAllText($env:GITHUB_EVENT_PATH) | ConvertFrom-Json + } else { $null } + + + @" + ::group::GitHubEvent + $($gitHubEvent | ConvertTo-Json -Depth 100) + ::endgroup:: + "@ | Out-Host + + if (-not ($gitHubEvent.head_commit.message -match "Merge Pull Request #(?\d+)") -and + (-not $gitHubEvent.psobject.properties['inputs'])) { + "::warning::Pull Request has not merged, skipping GitHub release" | Out-Host + return + } + + + + $imported = + if (-not $ModulePath) { + $orgName, $moduleName = $env:GITHUB_REPOSITORY -split "/" + Import-Module ".\$moduleName.psd1" -Force -PassThru -Global + } else { + Import-Module $modulePath -Force -PassThru -Global + } + + if (-not $imported) { return } + + $targetVersion =$ExecutionContext.InvokeCommand.ExpandString($TagVersionFormat) + $targetReleaseName = $targetVersion + $releasesURL = 'https://api.github.com/repos/${{github.repository}}/releases' + "Release URL: $releasesURL" | Out-Host + $listOfReleases = Invoke-RestMethod -Uri $releasesURL -Method Get -Headers @{ + "Accept" = "application/vnd.github.v3+json" + "Authorization" = 'Bearer ${{ secrets.GITHUB_TOKEN }}' + } + + $releaseExists = $listOfReleases | Where-Object tag_name -eq $targetVersion + + if ($releaseExists) { + "::warning::Release '$($releaseExists.Name )' Already Exists" | Out-Host + $releasedIt = $releaseExists + } else { + $releasedIt = Invoke-RestMethod -Uri $releasesURL -Method Post -Body ( + [Ordered]@{ + owner = '${{github.owner}}' + repo = '${{github.repository}}' + tag_name = $targetVersion + name = $ExecutionContext.InvokeCommand.ExpandString($ReleaseNameFormat) + body = + if ($env:RELEASENOTES) { + $env:RELEASENOTES + } elseif ($imported.PrivateData.PSData.ReleaseNotes) { + $imported.PrivateData.PSData.ReleaseNotes + } else { + "$($imported.Name) $targetVersion" + } + draft = if ($env:RELEASEISDRAFT) { [bool]::Parse($env:RELEASEISDRAFT) } else { $false } + prerelease = if ($env:PRERELEASE) { [bool]::Parse($env:PRERELEASE) } else { $false } + } | ConvertTo-Json + ) -Headers @{ + "Accept" = "application/vnd.github.v3+json" + "Content-type" = "application/json" + "Authorization" = 'Bearer ${{ secrets.GITHUB_TOKEN }}' + } + } + + + + + + if (-not $releasedIt) { + throw "Release failed" + } else { + $releasedIt | Out-Host + } + + $releaseUploadUrl = $releasedIt.upload_url -replace '\{.+$' + + if ($ReleaseAsset) { + $fileList = Get-ChildItem -Recurse + $filesToRelease = + @(:nextFile foreach ($file in $fileList) { + foreach ($relAsset in $ReleaseAsset) { + if ($relAsset -match '[\*\?]') { + if ($file.Name -like $relAsset) { + $file; continue nextFile + } + } elseif ($file.Name -eq $relAsset -or $file.FullName -eq $relAsset) { + $file; continue nextFile + } + } + }) + + $releasedFiles = @{} + foreach ($file in $filesToRelease) { + if ($releasedFiles[$file.Name]) { + Write-Warning "Already attached file $($file.Name)" + continue + } else { + $fileBytes = [IO.File]::ReadAllBytes($file.FullName) + $releasedFiles[$file.Name] = + Invoke-RestMethod -Uri "${releaseUploadUrl}?name=$($file.Name)" -Headers @{ + "Accept" = "application/vnd.github+json" + "Authorization" = 'Bearer ${{ secrets.GITHUB_TOKEN }}' + } -Body $fileBytes -ContentType Application/octet-stream + $releasedFiles[$file.Name] + } + } + + "Attached $($releasedFiles.Count) file(s) to release" | Out-Host + } + + + + } @Parameters + - name: PublishPowerShellGallery + id: PublishPowerShellGallery + shell: pwsh + run: | + $Parameters = @{} + $Parameters.ModulePath = ${env:ModulePath} + $Parameters.Exclude = ${env:Exclude} + $Parameters.Exclude = $parameters.Exclude -split ';' -replace '^[''"]' -replace '[''"]$' + foreach ($k in @($parameters.Keys)) { + if ([String]::IsNullOrEmpty($parameters[$k])) { + $parameters.Remove($k) + } + } + Write-Host "::debug:: PublishPowerShellGallery $(@(foreach ($p in $Parameters.GetEnumerator()) {'-' + $p.Key + ' ' + $p.Value}) -join ' ')" + & {param( + [string] + $ModulePath, + + [string[]] + $Exclude = @('*.png', '*.mp4', '*.jpg','*.jpeg', '*.gif', 'docs[/\]*') + ) + + $gitHubEvent = if ($env:GITHUB_EVENT_PATH) { + [IO.File]::ReadAllText($env:GITHUB_EVENT_PATH) | ConvertFrom-Json + } else { $null } + + if (-not $Exclude) { + $Exclude = @('*.png', '*.mp4', '*.jpg','*.jpeg', '*.gif','docs[/\]*') + } + + + @" + ::group::GitHubEvent + $($gitHubEvent | ConvertTo-Json -Depth 100) + ::endgroup:: + "@ | Out-Host + + @" + ::group::PSBoundParameters + $($PSBoundParameters | ConvertTo-Json -Depth 100) + ::endgroup:: + "@ | Out-Host + + if (-not ($gitHubEvent.head_commit.message -match "Merge Pull Request #(?\d+)") -and + (-not $gitHubEvent.psobject.properties['inputs'])) { + "::warning::Pull Request has not merged, skipping Gallery Publish" | Out-Host + return + } + + + $imported = + if (-not $ModulePath) { + $orgName, $moduleName = $env:GITHUB_REPOSITORY -split "/" + Import-Module ".\$moduleName.psd1" -Force -PassThru -Global + } else { + Import-Module $modulePath -Force -PassThru -Global + } + + if (-not $imported) { return } + + $foundModule = try { Find-Module -Name $imported.Name -ErrorAction SilentlyContinue} catch {} + + if ($foundModule -and (([Version]$foundModule.Version) -ge ([Version]$imported.Version))) { + "::warning::Gallery Version of $moduleName is more recent ($($foundModule.Version) >= $($imported.Version))" | Out-Host + } else { + + $gk = '${{secrets.GALLERYKEY}}' + + $rn = Get-Random + $moduleTempFolder = Join-Path $pwd "$rn" + $moduleTempPath = Join-Path $moduleTempFolder $moduleName + New-Item -ItemType Directory -Path $moduleTempPath -Force | Out-Host + + Write-Host "Staging Directory: $ModuleTempPath" + + $imported | Split-Path | + Get-ChildItem -Force | + Where-Object Name -NE $rn | + Copy-Item -Destination $moduleTempPath -Recurse + + $moduleGitPath = Join-Path $moduleTempPath '.git' + Write-Host "Removing .git directory" + if (Test-Path $moduleGitPath) { + Remove-Item -Recurse -Force $moduleGitPath + } + + if ($Exclude) { + "::notice::Attempting to Exlcude $exclude" | Out-Host + Get-ChildItem $moduleTempPath -Recurse | + Where-Object { + foreach ($ex in $exclude) { + if ($_.FullName -like $ex) { + "::notice::Excluding $($_.FullName)" | Out-Host + return $true + } + } + } | + Remove-Item + } + + Write-Host "Module Files:" + Get-ChildItem $moduleTempPath -Recurse + Write-Host "Publishing $moduleName [$($imported.Version)] to Gallery" + Publish-Module -Path $moduleTempPath -NuGetApiKey $gk + if ($?) { + Write-Host "Published to Gallery" + } else { + Write-Host "Gallery Publish Failed" + exit 1 + } + } + } @Parameters + BuildMatrix: + runs-on: ubuntu-latest + if: ${{ success() }} + steps: + - name: Check out repository + uses: actions/checkout@main + - name: UseEZOut + uses: StartAutomating/EZOut@master + diff --git a/Build/GitHub/Jobs/BuildMatrix.psd1 b/Build/GitHub/Jobs/BuildMatrix.psd1 new file mode 100644 index 0000000..e39282f --- /dev/null +++ b/Build/GitHub/Jobs/BuildMatrix.psd1 @@ -0,0 +1,11 @@ +@{ + "runs-on" = "ubuntu-latest" + if = '${{ success() }}' + steps = @( + @{ + name = 'Check out repository' + uses = 'actions/checkout@main' + } + 'RunEZOut' + ) +} \ No newline at end of file diff --git a/Build/GitHub/Steps/PublishTestResults.psd1 b/Build/GitHub/Steps/PublishTestResults.psd1 new file mode 100644 index 0000000..e8111e8 --- /dev/null +++ b/Build/GitHub/Steps/PublishTestResults.psd1 @@ -0,0 +1,10 @@ +@{ + name = 'PublishTestResults' + uses = 'actions/upload-artifact@main' + with = @{ + name = 'PesterResults' + path = '**.TestResults.xml' + } + if = '${{always()}}' +} + diff --git a/Build/Matrix.GitHubWorkflow.PSDevOps.ps1 b/Build/Matrix.GitHubWorkflow.PSDevOps.ps1 new file mode 100644 index 0000000..4e700d0 --- /dev/null +++ b/Build/Matrix.GitHubWorkflow.PSDevOps.ps1 @@ -0,0 +1,18 @@ +#requires -Module PSDevOps +param( + $moduleName = $( + $PSScriptRoot | Split-Path | Split-Path -Leaf + ) +) +Import-BuildStep -SourcePath ( + Join-Path $PSScriptRoot 'GitHub' +) -BuildSystem GitHubWorkflow + + +Push-Location ($PSScriptRoot | Split-Path) +New-GitHubWorkflow -Name "Build Module" -On Push, + PullRequest, + Demand -Job TestPowerShellOnLinux, + TagReleaseAndPublish, "Build$moduleName" -OutputPath .\.github\workflows\build.yml + +Pop-Location \ No newline at end of file diff --git a/Build/Matrix.ezout.ps1 b/Build/Matrix.ezout.ps1 new file mode 100644 index 0000000..6b9d2fa --- /dev/null +++ b/Build/Matrix.ezout.ps1 @@ -0,0 +1,39 @@ +#requires -Module EZOut +# Install-Module EZOut or https://github.com/StartAutomating/EZOut +$myFile = $MyInvocation.MyCommand.ScriptBlock.File +$myModuleName = $MyInvocation.MyCommand.Name -replace '\.ezout.ps1$' +$myRoot = $myFile | Split-Path | Split-Path +Push-Location $myRoot +$formatting = @( + # Add your own Write-FormatView here, + # or put them in a Formatting or Views directory + foreach ($potentialDirectory in 'Formatting','Views','Types') { + Join-Path $myRoot $potentialDirectory | + Get-ChildItem -ea ignore | + Import-FormatView -FilePath {$_.Fullname} + } +) + +$destinationRoot = $myRoot + +if ($formatting) { + $myFormatFilePath = Join-Path $destinationRoot "$myModuleName.format.ps1xml" + # You can also output to multiple paths by passing a hashtable to -OutputPath. + $formatting | Out-FormatData -Module $MyModuleName -OutputPath $myFormatFilePath +} + +$types = @( + # Add your own Write-TypeView statements here + # or declare them in the 'Types' directory + Join-Path $myRoot Types | + Get-Item -ea ignore | + Import-TypeView + +) + +if ($types) { + $myTypesFilePath = Join-Path $destinationRoot "$myModuleName.types.ps1xml" + # You can also output to multiple paths by passing a hashtable to -OutputPath. + $types | Out-TypeData -OutputPath $myTypesFilePath +} +Pop-Location From 398233f6aa27a138635986432fd728bd817c0c58 Mon Sep 17 00:00:00 2001 From: James Brundage <+@users.noreply.github.com> Date: Mon, 10 Aug 2026 20:06:39 -0700 Subject: [PATCH 04/90] feat: `Matrix3x2.Points` ( Fixes #4 ) --- Types/Matrix3x2/get_Points.ps1 | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 Types/Matrix3x2/get_Points.ps1 diff --git a/Types/Matrix3x2/get_Points.ps1 b/Types/Matrix3x2/get_Points.ps1 new file mode 100644 index 0000000..3a0654c --- /dev/null +++ b/Types/Matrix3x2/get_Points.ps1 @@ -0,0 +1,6 @@ +$this.M11 +$this.M12 +$this.M21 +$this.M22 +$this.M31 +$this.M32 From 90f0a52569088f6eb964ea46a33ea0ce0a720799 Mon Sep 17 00:00:00 2001 From: StartAutomating Date: Tue, 11 Aug 2026 03:07:05 +0000 Subject: [PATCH 05/90] feat: `Matrix3x2.Points` ( Fixes #4 ) --- Matrix.types.ps1xml | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 Matrix.types.ps1xml diff --git a/Matrix.types.ps1xml b/Matrix.types.ps1xml new file mode 100644 index 0000000..b503a6b --- /dev/null +++ b/Matrix.types.ps1xml @@ -0,0 +1,20 @@ + + + + Matrix3x2 + + + Points + + $this.M11 +$this.M12 +$this.M21 +$this.M22 +$this.M31 +$this.M32 + + + + + + \ No newline at end of file From 8038799deeca86caaa4c2b25ca381f095061169c Mon Sep 17 00:00:00 2001 From: James Brundage <+@users.noreply.github.com> Date: Mon, 10 Aug 2026 20:07:41 -0700 Subject: [PATCH 06/90] feat: `Matrix3x2.CSS` ( Fixes #5 ) --- Types/Matrix3x2/get_CSS.ps1 | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 Types/Matrix3x2/get_CSS.ps1 diff --git a/Types/Matrix3x2/get_CSS.ps1 b/Types/Matrix3x2/get_CSS.ps1 new file mode 100644 index 0000000..30a7273 --- /dev/null +++ b/Types/Matrix3x2/get_CSS.ps1 @@ -0,0 +1,10 @@ +return "matrix($( +@( +$this.M11 +$this.M12 +$this.M21 +$this.M22 +$this.M31 +$this.M32 +) -join ', ' +))" \ No newline at end of file From 224400f134afa9db66210d0e79c96f25cd2d2969 Mon Sep 17 00:00:00 2001 From: StartAutomating Date: Tue, 11 Aug 2026 03:08:02 +0000 Subject: [PATCH 07/90] feat: `Matrix3x2.CSS` ( Fixes #5 ) --- Matrix.types.ps1xml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/Matrix.types.ps1xml b/Matrix.types.ps1xml index b503a6b..ca3d4cb 100644 --- a/Matrix.types.ps1xml +++ b/Matrix.types.ps1xml @@ -3,6 +3,21 @@ Matrix3x2 + + CSS + + return "matrix($( +@( +$this.M11 +$this.M12 +$this.M21 +$this.M22 +$this.M31 +$this.M32 +) -join ', ' +))" + + Points From 137a2f12c29230920219cb0d7c45609b18eafc61 Mon Sep 17 00:00:00 2001 From: James Brundage <+@users.noreply.github.com> Date: Mon, 10 Aug 2026 20:08:29 -0700 Subject: [PATCH 08/90] feat: `Matrix3x2` ( Fixes #4, Fixes #5 ) --- Types/Matrix3x2/PSTypeName.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 Types/Matrix3x2/PSTypeName.txt diff --git a/Types/Matrix3x2/PSTypeName.txt b/Types/Matrix3x2/PSTypeName.txt new file mode 100644 index 0000000..7c3f671 --- /dev/null +++ b/Types/Matrix3x2/PSTypeName.txt @@ -0,0 +1 @@ +System.Numerics.Matrix3x2 \ No newline at end of file From 02000ef3f6eab3fd8783ccb4c3ae435a01c93e18 Mon Sep 17 00:00:00 2001 From: StartAutomating Date: Tue, 11 Aug 2026 03:08:51 +0000 Subject: [PATCH 09/90] feat: `Matrix3x2` ( Fixes #4, Fixes #5 ) --- Matrix.types.ps1xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Matrix.types.ps1xml b/Matrix.types.ps1xml index ca3d4cb..e5b5379 100644 --- a/Matrix.types.ps1xml +++ b/Matrix.types.ps1xml @@ -1,7 +1,7 @@ - Matrix3x2 + System.Numerics.Matrix3x2 CSS From 3bc23289f845c7fa8f81f8405b0649e0fc438dd5 Mon Sep 17 00:00:00 2001 From: James Brundage <+@users.noreply.github.com> Date: Mon, 10 Aug 2026 20:09:31 -0700 Subject: [PATCH 10/90] feat: `Matrix4x4.Points ( Fixes #6 ) --- Types/Matrix4x4/get_Points.ps1 | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 Types/Matrix4x4/get_Points.ps1 diff --git a/Types/Matrix4x4/get_Points.ps1 b/Types/Matrix4x4/get_Points.ps1 new file mode 100644 index 0000000..c1e7864 --- /dev/null +++ b/Types/Matrix4x4/get_Points.ps1 @@ -0,0 +1,16 @@ +$this.M11 +$this.M12 +$this.M13 +$this.M14 +$this.M21 +$this.M22 +$this.M23 +$this.M24 +$this.M31 +$this.M32 +$this.M33 +$this.M34 +$this.M41 +$this.M42 +$this.M43 +$this.M44 From 1d28c2c33e94769ab4972a6f5f34164ceff8675e Mon Sep 17 00:00:00 2001 From: StartAutomating Date: Tue, 11 Aug 2026 03:09:51 +0000 Subject: [PATCH 11/90] feat: `Matrix4x4.Points ( Fixes #6 ) --- Matrix.types.ps1xml | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/Matrix.types.ps1xml b/Matrix.types.ps1xml index e5b5379..4104a65 100644 --- a/Matrix.types.ps1xml +++ b/Matrix.types.ps1xml @@ -28,6 +28,33 @@ $this.M22 $this.M31 $this.M32 + + + + + + Matrix4x4 + + + Points + + $this.M11 +$this.M12 +$this.M13 +$this.M14 +$this.M21 +$this.M22 +$this.M23 +$this.M24 +$this.M31 +$this.M32 +$this.M33 +$this.M34 +$this.M41 +$this.M42 +$this.M43 +$this.M44 + From 35f417a794c9cd772bede1a42ae78859fb282514 Mon Sep 17 00:00:00 2001 From: James Brundage <+@users.noreply.github.com> Date: Mon, 10 Aug 2026 20:10:06 -0700 Subject: [PATCH 12/90] feat: `Matrix4x4.CSS` ( Fixes #7 ) --- Types/Matrix4x4/get_CSS.ps1 | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 Types/Matrix4x4/get_CSS.ps1 diff --git a/Types/Matrix4x4/get_CSS.ps1 b/Types/Matrix4x4/get_CSS.ps1 new file mode 100644 index 0000000..9654be3 --- /dev/null +++ b/Types/Matrix4x4/get_CSS.ps1 @@ -0,0 +1,20 @@ +return "matrix3d($( +@( +$this.M11 +$this.M12 +$this.M13 +$this.M14 +$this.M21 +$this.M22 +$this.M23 +$this.M24 +$this.M31 +$this.M32 +$this.M33 +$this.M34 +$this.M41 +$this.M42 +$this.M43 +$this.M44 +) -join ', ' +))" \ No newline at end of file From 6232f4856d69e354d7fe19bf73505c4f8801c9e9 Mon Sep 17 00:00:00 2001 From: StartAutomating Date: Tue, 11 Aug 2026 03:10:42 +0000 Subject: [PATCH 13/90] feat: `Matrix4x4.CSS` ( Fixes #7 ) --- Matrix.types.ps1xml | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/Matrix.types.ps1xml b/Matrix.types.ps1xml index 4104a65..b598673 100644 --- a/Matrix.types.ps1xml +++ b/Matrix.types.ps1xml @@ -35,6 +35,31 @@ $this.M32 Matrix4x4 + + CSS + + return "matrix3d($( +@( +$this.M11 +$this.M12 +$this.M13 +$this.M14 +$this.M21 +$this.M22 +$this.M23 +$this.M24 +$this.M31 +$this.M32 +$this.M33 +$this.M34 +$this.M41 +$this.M42 +$this.M43 +$this.M44 +) -join ', ' +))" + + Points From d71c50336daecebbe06f544b9cb21df0b461e541 Mon Sep 17 00:00:00 2001 From: James Brundage <+@users.noreply.github.com> Date: Mon, 10 Aug 2026 20:10:54 -0700 Subject: [PATCH 14/90] feat: `Matrix4x4` ( Fixes #6, Fixes #7 ) --- Types/Matrix4x4/PSTypeName.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 Types/Matrix4x4/PSTypeName.txt diff --git a/Types/Matrix4x4/PSTypeName.txt b/Types/Matrix4x4/PSTypeName.txt new file mode 100644 index 0000000..06bc61b --- /dev/null +++ b/Types/Matrix4x4/PSTypeName.txt @@ -0,0 +1 @@ +System.Numerics.Matrix4x4 \ No newline at end of file From 5a5ee5915ab54783c5f97b8333065d2302f4c612 Mon Sep 17 00:00:00 2001 From: StartAutomating Date: Tue, 11 Aug 2026 03:11:20 +0000 Subject: [PATCH 15/90] feat: `Matrix4x4` ( Fixes #6, Fixes #7 ) --- Matrix.types.ps1xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Matrix.types.ps1xml b/Matrix.types.ps1xml index b598673..f21ac14 100644 --- a/Matrix.types.ps1xml +++ b/Matrix.types.ps1xml @@ -33,7 +33,7 @@ $this.M32 - Matrix4x4 + System.Numerics.Matrix4x4 CSS From b825961d4c18e460aca6aeef053ac2653062c108 Mon Sep 17 00:00:00 2001 From: James Brundage <+@users.noreply.github.com> Date: Mon, 10 Aug 2026 20:36:20 -0700 Subject: [PATCH 16/90] feat: `Matrix.ps1` ( Fixes #2, Fixes #8 ) Making Rotate a 3x2 matrix --- Matrix.ps1 | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Matrix.ps1 b/Matrix.ps1 index f568944..a0b37d0 100644 --- a/Matrix.ps1 +++ b/Matrix.ps1 @@ -209,10 +209,10 @@ $ArgumentList = @( $Matrix = $null switch ($myName) { - Rotate { - $MatrixType = [Numerics.Matrix4x4] + Rotate { + $MatrixType = [Numerics.Matrix3x2] $Member = 'CreateRotation' - $ArgumentList = 0, 0, $ArgumentList[0] + $ArgumentList = $ArgumentList[0] } RotateX { $MatrixType = [Numerics.Matrix4x4] From debff8a51989478a07f2634e9d15fbe6142db87e Mon Sep 17 00:00:00 2001 From: James Brundage <+@users.noreply.github.com> Date: Mon, 10 Aug 2026 20:45:03 -0700 Subject: [PATCH 17/90] test: `Matrix` tests ( Fixes #9 ) --- Matrix.tests.ps1 | 83 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 Matrix.tests.ps1 diff --git a/Matrix.tests.ps1 b/Matrix.tests.ps1 new file mode 100644 index 0000000..ff4b9bb --- /dev/null +++ b/Matrix.tests.ps1 @@ -0,0 +1,83 @@ +describe Matrix { + it 'Transforms' { + $transformed = [Numerics.Vector2]::new(1,1) | + scale 2 1 + $transformed.X | Should -be 2 + + + $transformed = [Numerics.Vector2]::new(1,1) | + scale 1 2 + $transformed.Y | Should -be 2 + } + + context 2d { + it 'Can Scale' { + [Numerics.Vector2]::new(1,1) | + scale 2 1 | + Select-Object -ExpandProperty X | + Should -Be 2 + } + + it 'Can Translate' { + $translated = [Numerics.Vector2]::new(1,1) | + translate 1 2 + + $translated.X | Should -Be 2 + $translated.Y | Should -Be 3 + + } + + it 'Can skew' { + $skewed = [Numerics.Vector2]::new(1,1) | + skew 45deg 0 + $skewed.X | Should -Be 2 + $skewed.Y | Should -Be 1 + } + + it 'Can rotate' { + $rotated = [Numerics.Vector2]::new(1,1) | + rotate 90deg + + $rotated.X | Should -Be -1 + $rotated.Y | Should -Be 1 + } + } + + context 3d { + it 'Can Translate' { + $translated = [Numerics.Vector3]::new(1,1,1) | + translate3d 1 2 3 + + $translated.X | Should -Be 2 + $translated.Y | Should -Be 3 + $translated.Z | Should -Be 4 + } + + it 'Can Scale' { + $scaled = [Numerics.Vector3]::new(1,1,1) | + scale3d 1 2 3 + + $scaled.X | Should -Be 1 + $scaled.Y | Should -Be 2 + $scaled.Z | Should -Be 3 + } + + it 'Can Rotate' { + $rotated = [Numerics.Vector3]::new(1,1,1) | + rotate 90deg + + $rotated.X | Should -Be -1 + $rotated.Y | Should -Be 1 + $rotated.Z | Should -Be 1 + } + + + it 'Can Rotated3d' { + (Rotate3d 1 1 1 30deg).CSS | + Should -Be 'matrix3d(0.9106836, -0.2440169, 0.3333333, 0, 0.3333333, 0.9106836, -0.2440169, 0, -0.2440169, 0.3333333, 0.9106836, 0, 0, 0, 0, 1)' + } + + } + + +} From 5a5a17ba40e291d9a6f7d31cf2895c5af5a6cddb Mon Sep 17 00:00:00 2001 From: James Brundage <+@users.noreply.github.com> Date: Mon, 10 Aug 2026 20:46:01 -0700 Subject: [PATCH 18/90] test: `Matrix` tests ( Fixes #9 ) Trimming spacing --- Matrix.tests.ps1 | 4 ---- 1 file changed, 4 deletions(-) diff --git a/Matrix.tests.ps1 b/Matrix.tests.ps1 index ff4b9bb..de1de20 100644 --- a/Matrix.tests.ps1 +++ b/Matrix.tests.ps1 @@ -71,13 +71,9 @@ describe Matrix { $rotated.Z | Should -Be 1 } - it 'Can Rotated3d' { (Rotate3d 1 1 1 30deg).CSS | Should -Be 'matrix3d(0.9106836, -0.2440169, 0.3333333, 0, 0.3333333, 0.9106836, -0.2440169, 0, -0.2440169, 0.3333333, 0.9106836, 0, 0, 0, 0, 1)' } - } - - } From bbdfbaf3e386f3cda4b2464fa0028cecf8603bf2 Mon Sep 17 00:00:00 2001 From: James Brundage <+@users.noreply.github.com> Date: Tue, 11 Aug 2026 10:46:36 -0700 Subject: [PATCH 19/90] docs: `README.md.ps1` ( Fixes #10 ) --- README.md | 270 +++++++++++++++++++++++++++++++++++++++++++++- README.md.ps1 | 294 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 563 insertions(+), 1 deletion(-) create mode 100644 README.md.ps1 diff --git a/README.md b/README.md index 4bc0bbd..8c13fb5 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,270 @@ # Matrix -Matrix Transforms with PowerShell +[![Matrix](https://img.shields.io/powershellgallery/dt/Matrix)](https://www.powershellgallery.com/packages/Matrix/) +## Matrix Transforms with PowerShell +Matrix math is tedious. This module lets us avoid having to do it. + +We can represent changes in space using a matrix. + +|dimension|css function|.NET type| +|-|-| +|2D|`matrix()`|`[Numerics.Matrix3x2]`| +|3D|`matrix3d()`|`[Numerics.Matrix4x4]`| + +In CSS, these are called [Transform Functions](https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Values/transform-function) + +The module allows you to make, modify, and use matrix transforms. + +It supports almost identical syntax to the CSS. + +We manipulate objects in 2D or 3d the same way a webpage would. + +## Installing and Importing + +You can install Matrix from the [PowerShell gallery](https://powershellgallery.com/) + +~~~PowerShell +Install-Module Matrix -Scope CurrentUser -Force +~~~ + +Once installed, you can import the module with: + +~~~PowerShell +Import-Module Matrix -PassThru +~~~ + + +You can also clone the repo and import the module locally: + +~~~PowerShell +git clone https://github.com/PoshWeb/Matrix/ +cd ./Matrix +Import-Module ./ -PassThru +~~~ + +## Functions +Matrix has 1 function +### Get-Matrix +#### Matrix +Makes and Manipulates Matrix Transformations. + +Matrix Transformations move objects in space. + +Matrix makes matrixes in PowerShell. + +This can transform objects in 2D, 3D, and 4D + +We can use matrix to make CSS or transform Vectors. +
+Notes + +Matrix math is hard, and this module lets us avoid having to do it. + +Instead, we can pipe objects into this module and transform them. + +A Matrix in .NET is the same as a Matrix in CSS. + +|css function|.NET type| +|-|-| +|`matrix()`|`[Numerics.Matrix3x2]`| +|`matrix3d()`|`[Numerics.Matrix4x4]`| + +This means we can do every transformation that CSS can do. + +Any object piped with a `Transform` static method will be transformed. + +Other objects will be passed thru. + +
+ +
+Aliases + +- Matrix2d +- Matrix3d +- Matrix3x2 +- Matrix4x4 +- Rotate +- Rotate3d +- RotateX +- RotateY +- RotateZ +- Scale +- Scale3d +- ScaleX +- ScaleY +- ScaleZ +- Skew +- SkewX +- SkewY +- Translate +- Translate3d +- TranslateX +- TranslateY +- TranslateZ +
+ + +
+Examples + +#### Example 1 + +Get the identity matrix. +This is the object, untransformed, in 2D +~~~PowerShell +Matrix Identity +~~~ + + +#### Example 2 + +~~~PowerShell +Matrix3D 1 +~~~ + + +#### Example 3 + +Scale a point in 2d space by directly calling `::CreateScale` +~~~PowerShell +[Numerics.Vector2]::new(1,1) | + Matrix 2 -Member CreateScale 1 2 +~~~ + + +#### Example 4 + +Scale a point in 2d space by using `scale` +~~~PowerShell +[Numerics.Vector2]::new(1,1) | + Scale 1 2 +~~~ + + +#### Example 5 + +Skew a point +~~~PowerShell +[Numerics.Vector2]::new(1,1) | + Skew 30deg 10deg +~~~ + + +#### Example 6 + +Skew a point along X, then along Y +~~~PowerShell +[Numerics.Vector2]::new(1,1) | + SkewX 30deg | + SkewY 10deg +~~~ + + +#### Example 7 + +~~~PowerShell +[Numerics.Vector2]::new(1,1) | + ScaleZ 1 +~~~ + + +#### Example 8 + +Scale X in 2D +~~~PowerShell +[Numerics.Vector2]::new(1,1) | + ScaleX 2 +~~~ + + +#### Example 9 + +Scale X in 3D +~~~PowerShell +[Numerics.Vector3]::new(1,1,1) | + ScaleX 2 +~~~ + + +#### Example 10 + +Scale Y in 3D +~~~PowerShell +[Numerics.Vector2]::new(1,1) | + ScaleY 2 +~~~ + + +#### Example 11 + +Scale Z in 3D +~~~PowerShell +[Numerics.Vector3]::new(1,1,1) | + ScaleZ 3 +~~~ + + +#### Example 12 + +Move a point in 3d +~~~PowerShell +[Numerics.Vector3]::new(1,1,1) | + TranslateX 3 | + TranslateY 3 | + TranslateZ 3 +~~~ + + +#### Example 13 + +Move and scale a point in 3d +~~~PowerShell +[Numerics.Vector3]::new(1,1,1) | + Translate3d 1 2 5 | + Scale3d 3 2 1 +~~~ + + +#### Example 14 + +~~~PowerShell +[Numerics.Vector3]::new(1,1,1) | + Translate3d 1 2 5 | + Scale3d 3 2 1 +~~~ + + +#### Example 15 + +Rotate3d +~~~PowerShell +[Numerics.Vector3]::new(1,1,1) | + Rotate3d 1 1 1 30deg +~~~ + + +#### Example 16 + +rotate3d as a matrix3d, as CSS +~~~PowerShell +(Rotate3d 1 1 1 30deg).css +~~~ + +
+
+Parameters + +|Name|Type|Description| +|-|-|-| +|ArgumentList|Object[]|| +|InputObject|PSObject[]|| +|Member|String|| +
+ +
+Links + +* [system.numerics.matrix3x2](https://learn.microsoft.com/en-us/dotnet/api/system.numerics.matrix3x2?wt.mc_id=MVP_321542) +* [system.numerics.matrix4x4](https://learn.microsoft.com/en-us/dotnet/api/system.numerics.matrix4x4?wt.mc_id=MVP_321542) + +
diff --git a/README.md.ps1 b/README.md.ps1 new file mode 100644 index 0000000..1debb6b --- /dev/null +++ b/README.md.ps1 @@ -0,0 +1,294 @@ +<# +.SYNOPSIS + README.md.ps1 +.DESCRIPTION + README.md.ps1 makes README.md + + This is a simple and helpful scripting convention for writing READMEs. + + `./README.md.ps1 > ./README.md` + + Feel free to copy and paste this code. + + Please document your parameters, and add NOTES. +.NOTES + This README.md.ps1 is used to generate help for a module. + + It: + + * Outputs the name and description + * Provides installation instructions + * Lists commands + * Lists parameters + * Lists examples +.EXAMPLE + ./README.md.ps1 > ./README.md +.EXAMPLE + Get-Help ./README.md.ps1 +#> +param( +# The name of the module +[string]$ModuleName = $($PSScriptRoot | Split-Path -Leaf), + +# The domains that serve git repositories. +# If the project uri links to this domain, +# installation instructions will show how to import the module locally. +[string[]] +$GitDomains = @( + 'github.com', 'tangled.org', 'tangled.sh', 'codeberg.org' +), + +# A list of types the module exposes +[Alias('ModuleTypeNames','ModuleTypes')] +[string[]] +$ModuleTypeName = @(), + +# The name of the root directory containing types. +[string] +$TypeRoot = 'Types', + +# If set, we don't need no badges. +[switch] +$NoBadge, + +# If set, will not display gallery instructions or badges +[switch] +$NotOnGallery +) + +Push-Location $PSScriptRoot + +# Import the module +$module = Import-Module "./$ModuleName.psd1" -PassThru + +# And output a header +"# $module" + +if (-not $NoBadge) { + # If it is on the gallery, show the downloads badge. + if (-not $NotOnGallery) { + @( + "[!" + "[$ModuleName](https://img.shields.io/powershellgallery/dt/$ModuleName)" + "](https://www.powershellgallery.com/packages/$ModuleName/)" + ) -join '' + } +} + +# Show the module description +"## $($module.Description)" + +# Show any intro section defined in the manifest +$module.PrivateData.PSData.PSIntro + +#region Boilerplate installation instructions +if (-not $NotOnGallery) { +@" + +## Installing and Importing + +You can install $ModuleName from the [PowerShell gallery](https://powershellgallery.com/) + +~~~PowerShell +Install-Module $($ModuleName) -Scope CurrentUser -Force +~~~ + +Once installed, you can import the module with: + +~~~PowerShell +Import-Module $ModuleName -PassThru +~~~ + +"@ +} +#endregion Gallery installation instructions + +#region Git installation instructions +$projectUri = $module.PrivateData.PSData.ProjectURI -as [uri] + +if ($projectUri.DnsSafeHost -in $GitDomains) { +@" + +You can also clone the repo and import the module locally: + +~~~PowerShell +git clone $projectUri +cd ./$ModuleName +Import-Module ./ -PassThru +~~~ + +"@ +} +#endregion Git installation instructions + +#region Exported Functions +$exportedFunctions = $module.ExportedFunctions + +$uniqueFunctions = @() +$uniqueNames = @(foreach ($function in $exportedFunctions.GetEnumerator()) { + if ($uniqueFunctions -contains $function.Value.ScriptBlock) { + continue + } else { + $uniqueFunctions += $function.Value.ScriptBlock + } + $function.Key +}) + + +if ($uniqueNames) { + + "## Functions" + + "$($ModuleName) has $($uniqueNames.Count) function$( + if ($uniqueNames.Count -gt 1) { "s"} + )" + + $duplicate = @() + foreach ($export in $uniqueNames) { + $exportedFunction = $exportedFunctions[$export] + if ($duplicate -contains $exportedFunction.ScriptBlock) { + continue + } else { + $duplicate += $exportedFunction.ScriptBlock + } + # Get help if it there is help to get + $help = Get-Help $export + # If the help is a string, + if ($help -is [string]) { + # make it preformatted text + "~~~" + "$export" + "~~~" + } else { + # Otherwise, add list the export + "### $($export)" + + # And make it's synopsis a header + "#### $($help.SYNOPSIS)" + + # put the description below that + "$($help.Description.text -join [Environment]::NewLine)" + + $commandAliases = foreach ($aliasName in $module.ExportedAliases.Keys) { + if ($module.ExportedAliases[$aliasName].ResolvedCommand.ScriptBlock -eq + $exportedFunction.ScriptBlock) { + $aliasName + } + } + + $notes = $help.alertSet.alert.text + + if ($notes) { + "
" + "Notes" + "" + $notes -join [Environment]::NewLine + "" + "
" + } + + if ($commandAliases) { + "" + "
" + "Aliases" + "" + foreach ($commandAlias in $commandAliases) { + "- $commandAlias" + } + "
" + "" + "" + + } + + # Show our examples + if ($help.examples.example) { + "
" + "Examples" + + $exampleNumber = 0 + foreach ($example in $help.examples.example) { + $markdownLines = @() + $exampleNumber++ + $nonCommentLine = $false + "" + "#### Example $exampleNumber" + "" + + # Combine the code and remarks + $exampleLines = + @( + $example.Code + foreach ($remark in $example.Remarks.text) { + if (-not $remark) { continue } + $remark + } + ) -join ([Environment]::NewLine) -split '(?>\r\n|\n)' # and split into lines + + # Go thru each line in the example as part of a loop + $codeBlock = @(foreach ($exampleLine in $exampleLines) { + # Any comments until the first uncommentedLine are markdown + if ($exampleLine -match '^\#' -and -not $nonCommentLine) { + $markdownLines += $exampleLine -replace '^\#\s{0,1}' + } else { + $nonCommentLine = $true + $exampleLine + } + }) -join [Environment]::NewLine + + $markdownLines + "~~~PowerShell" + $CodeBlock + "~~~" + "" + } + "
" + } + + # Make a table of parameters + if ($help.parameters.parameter) { + "
" + + "Parameters" + + "" + + "|Name|Type|Description|" + "|-|-|-|" + foreach ($parameter in $help.Parameters.Parameter) { + "|$($parameter.Name)|$($parameter.type.name)|$( + $parameter.description.text -replace '(?>\r\n|\n)', '
' + )|" + } + + "
" + "" + } + + $relatedUris = foreach ($link in $help.relatedLinks.navigationLink) { + if ($link.uri) { + $link.uri + } + } + if ($relatedUris) { + "
" + "Links" + "" + foreach ($related in $relatedUris) { + $relatedUri = $related -as [uri] + if ($relatedUri.DnsSafeHost -eq 'learn.microsoft.com' -and + $relatedUri.LocalPath -match '/dotnet/api') { + "* [$($relatedUri.segments[-1] -replace '/')]($related)" + } else { + "* [$related]($related)" + } + } + "" + "
" + } + } + } +} +#endregion Exported Functions + +Pop-Location \ No newline at end of file From f52c9210e79c653e300eacf079dff8a5c023efad Mon Sep 17 00:00:00 2001 From: James Brundage <+@users.noreply.github.com> Date: Tue, 11 Aug 2026 10:48:56 -0700 Subject: [PATCH 20/90] docs: `README.md.ps1` ( Fixes #10 ) Adjusting intro --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 8c13fb5..f0ec1a3 100644 --- a/README.md +++ b/README.md @@ -45,6 +45,7 @@ Import-Module ./ -PassThru Matrix has 1 function ### Get-Matrix #### Matrix + Makes and Manipulates Matrix Transformations. Matrix Transformations move objects in space. @@ -54,6 +55,7 @@ Matrix makes matrixes in PowerShell. This can transform objects in 2D, 3D, and 4D We can use matrix to make CSS or transform Vectors. +
Notes From 1581277ce7c4fe62606e8d5fa847fe02dd78f8ae Mon Sep 17 00:00:00 2001 From: James Brundage <+@users.noreply.github.com> Date: Tue, 11 Aug 2026 10:49:36 -0700 Subject: [PATCH 21/90] docs: `README.md.ps1` ( Fixes #10 ) Adjusting table sizing --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f0ec1a3..1bcba28 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ Matrix math is tedious. This module lets us avoid having to do it. We can represent changes in space using a matrix. |dimension|css function|.NET type| -|-|-| +|-|-|-| |2D|`matrix()`|`[Numerics.Matrix3x2]`| |3D|`matrix3d()`|`[Numerics.Matrix4x4]`| From 86aafa3fc02db352c44df50d4d743a50b9955b9a Mon Sep 17 00:00:00 2001 From: James Brundage <+@users.noreply.github.com> Date: Tue, 11 Aug 2026 11:04:34 -0700 Subject: [PATCH 22/90] docs: `README.md.ps1` ( Fixes #10 ) Improving links and intro --- Matrix.ps1 | 12 +++++++++++- Matrix.psd1 | 20 +++++++++++++++++++- README.md | 20 +++++++++++++------- README.md.ps1 | 11 ++++++++++- 4 files changed, 53 insertions(+), 10 deletions(-) diff --git a/Matrix.ps1 b/Matrix.ps1 index a0b37d0..8dd6edc 100644 --- a/Matrix.ps1 +++ b/Matrix.ps1 @@ -92,7 +92,17 @@ Rotate3d 1 1 1 30deg .EXAMPLE # rotate3d as a matrix3d, as CSS - (Rotate3d 1 1 1 30deg).css + (Rotate3d 1 1 1 30deg).css +.LINK + https://github.com/PoshWeb/Matrix +.LINK + https://learn.microsoft.com/en-us/dotnet/api/system.numerics.matrix4x4?wt.mc_id=MVP_321542 +.LINK + https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Values/transform-function/matrix3D +.LINK + https://learn.microsoft.com/en-us/dotnet/api/system.numerics.matrix3x2?wt.mc_id=MVP_321542 +.LINK + https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Values/transform-function/matrix #> [Alias( 'Matrix4x4', diff --git a/Matrix.psd1 b/Matrix.psd1 index f9348f1..583fe9e 100644 --- a/Matrix.psd1 +++ b/Matrix.psd1 @@ -134,7 +134,25 @@ PrivateData = @{ PSIntro = @' - +Matrix math is tedious. This module lets us avoid having to do it. + +We can represent changes in space using a matrix. + +In CSS, these are called [Transform Functions](https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Values/transform-function) + +|Dimension|Transform Function|.NET type| +|-|-|-| +|`2D`|`matrix()`|`[Numerics.Matrix3x2]`| +|`3D`|`matrix3d()`|`[Numerics.Matrix4x4]`| + + + +The module allows you to make, modify, and use matrix transforms. + +It supports almost identical syntax to the CSS. + +We can use Matrix to make CSS transforms, +and we can manipulate objects in 2D or 3D the same way a webpage would. '@ # Prerelease string of this module # Prerelease = '' diff --git a/README.md b/README.md index 1bcba28..d513a83 100644 --- a/README.md +++ b/README.md @@ -5,18 +5,21 @@ Matrix math is tedious. This module lets us avoid having to do it. We can represent changes in space using a matrix. -|dimension|css function|.NET type| +In CSS, these are called [Transform Functions](https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Values/transform-function) + +|Dimension|Transform Function|.NET type| |-|-|-| -|2D|`matrix()`|`[Numerics.Matrix3x2]`| -|3D|`matrix3d()`|`[Numerics.Matrix4x4]`| +|`2D`|`matrix()`|`[Numerics.Matrix3x2]`| +|`3D`|`matrix3d()`|`[Numerics.Matrix4x4]`| + -In CSS, these are called [Transform Functions](https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Values/transform-function) The module allows you to make, modify, and use matrix transforms. It supports almost identical syntax to the CSS. -We manipulate objects in 2D or 3d the same way a webpage would. +We can use Matrix to make CSS transforms, +and we can manipulate objects in 2D or 3D the same way a webpage would. ## Installing and Importing @@ -266,7 +269,10 @@ rotate3d as a matrix3d, as CSS
Links -* [system.numerics.matrix3x2](https://learn.microsoft.com/en-us/dotnet/api/system.numerics.matrix3x2?wt.mc_id=MVP_321542) -* [system.numerics.matrix4x4](https://learn.microsoft.com/en-us/dotnet/api/system.numerics.matrix4x4?wt.mc_id=MVP_321542) +* [github.com/PoshWeb/Matrix](https://github.com/PoshWeb/Matrix) +* [Learn DotNet system.numerics.matrix4x4](https://learn.microsoft.com/en-us/dotnet/api/system.numerics.matrix4x4?wt.mc_id=MVP_321542) +* [MDN CSS matrix3D](https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Values/transform-function/matrix3D) +* [Learn DotNet system.numerics.matrix3x2](https://learn.microsoft.com/en-us/dotnet/api/system.numerics.matrix3x2?wt.mc_id=MVP_321542) +* [MDN CSS matrix](https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Values/transform-function/matrix)
diff --git a/README.md.ps1 b/README.md.ps1 index 1debb6b..fdec577 100644 --- a/README.md.ps1 +++ b/README.md.ps1 @@ -166,8 +166,10 @@ if ($uniqueNames) { # And make it's synopsis a header "#### $($help.SYNOPSIS)" + "" # put the description below that "$($help.Description.text -join [Environment]::NewLine)" + "" $commandAliases = foreach ($aliasName in $module.ExportedAliases.Keys) { if ($module.ExportedAliases[$aliasName].ResolvedCommand.ScriptBlock -eq @@ -278,7 +280,14 @@ if ($uniqueNames) { $relatedUri = $related -as [uri] if ($relatedUri.DnsSafeHost -eq 'learn.microsoft.com' -and $relatedUri.LocalPath -match '/dotnet/api') { - "* [$($relatedUri.segments[-1] -replace '/')]($related)" + "* [Learn DotNet $($relatedUri.segments[-1] -replace '/')]($related)" + } + elseif ($relatedUri.DnsSafeHost -eq 'developer.mozilla.org' -and + $relatedUri.LocalPath -match '/(?[^/]+)/reference') { + "* [MDN $($matches.ref) $($relatedUri.segments[-1] -replace '/')]($related)" + } + elseif ($relatedUri.DnsSafeHost) { + "* [$($relatedUri.DnsSafeHost)$($relatedUri.LocalPath)]($related)" } else { "* [$related]($related)" } From dfcbd70dd80f46bd33cbd8757fbf066eb47e972e Mon Sep 17 00:00:00 2001 From: James Brundage <+@users.noreply.github.com> Date: Tue, 11 Aug 2026 11:34:50 -0700 Subject: [PATCH 23/90] docs: `Matrix.ps1` docs ( Fixes #2 ) --- Matrix.ps1 | 119 +++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 92 insertions(+), 27 deletions(-) diff --git a/Matrix.ps1 b/Matrix.ps1 index 8dd6edc..9be2d8f 100644 --- a/Matrix.ps1 +++ b/Matrix.ps1 @@ -130,16 +130,28 @@ )] [CmdletBinding(PositionalBinding=$false)] param( +# Any arguments for the transform function +# Arguments can include numbers of CSS units. +# `deg` and `turn` are converted into radians +# `%` becomes a value between 0 and 1 [Parameter(ValueFromRemainingArguments)] [Alias('Arguments','Argument','Args')] [object[]] $ArgumentList, +# Any input objects. +# If the input object has a `Transform` static method, +# it will be transformed. +# If it does not, it will be passed thru. [Parameter(ValueFromPipeline)] [Alias('Input')] [PSObject[]] $InputObject, +# The name of the method or property of a matrix transform. +# If this is provided, this method will be called instead. +# Many aliases, such as `Skew` or `Rotate`, +# will use a custom member and will ignore this parameter. [ArgumentCompleter({ param( $CommandName, $parameterName, $wordToComplete, @@ -165,23 +177,28 @@ $InputObject, $Member = 'Create' ) +# Get our invocation name $myName = $MyInvocation.InvocationName +# and all of our input $allInput = @($input) -if (-not $allInput) { +# If input was not piped +if (-not $allInput.Length) { + # bind it to any unpiped input object $allInput += $InputObject } +# Attempt to determine the matrix type. $matrixType = - if ($myName -match '3d' -or $myName -match '4x4') { - [Numerics.Matrix4x4] - } else { - [Numerics.Matrix3x2] + # If the name contains 3d or 4x4, + if ($myName -match '(?>3d|4x4)') { + [Numerics.Matrix4x4] # treat it as a 3d matrix. + } else { # Otherwise + [Numerics.Matrix3x2] # treat it as a 2d matrix. } - -# A quick little filter to convert css units into numbers. +# Declare a quick little filter to convert css units into numbers. filter cssunit { $arg = $_ if ($arg -isnot [string]) { @@ -211,50 +228,69 @@ filter cssunit { } } - +# Then convert all of our arguments into units $ArgumentList = @( $ArgumentList | cssunit ) -$Matrix = $null - +# Next we will be determine the right matrix transform +# Switch based off the name. +# Any matching CSS transforms should be their literal equivalent. +# These are _mostly_ self explanatory, with one _very_ annoying outlier switch ($myName) { - Rotate { + Rotate { + # Rotate becomes `[Numerics.Matrix3x2]::CreateRotation` $MatrixType = [Numerics.Matrix3x2] $Member = 'CreateRotation' $ArgumentList = $ArgumentList[0] } RotateX { + # RotateX becomes `[Numerics.Matrix4x4]::CreateRotationX` $MatrixType = [Numerics.Matrix4x4] $Member = 'CreateRotationX' $ArgumentList = $ArgumentList[0] } RotateY { + # RotateY becomes `[Numerics.Matrix4x4]::CreateRotationY` $MatrixType = [Numerics.Matrix4x4] $Member = 'CreateRotationY' $ArgumentList = $ArgumentList[0] } RotateZ { + # RotateZ becomes `[Numerics.Matrix4x4]::CreateRotationZ` $MatrixType = [Numerics.Matrix4x4] $Member = 'CreateRotationZ' $ArgumentList = $ArgumentList[0] } Rotate3d { - + # Rotate3d is the complicated one. + # It took some digging, but the CSS working defines rotate3d in matrix form # https://drafts.csswg.org/css-transforms-2/#Rotate3dDefined + # It's a 4x4 matrix $MatrixType = [Numerics.Matrix4x4] $Member = 'Create' + # that requires normalized vectors $x, $y, $z, $null = $ArgumentList + # Sadly, this Normalize is different than .NET's Normalize $normalize = [Numerics.Vector3]::new($x, $y, $z) + # We need to get the sum of all squares (the length) $magnitude = $normalize.Length() + # If that sum was zero, make it the sqrt root of 3 if ($magnitude -eq 0) { $magnitude = [Math]::Sqrt(3) } + # Normalize x y z with the magnitude $x, $y, $z = ($x/$magnitude), ($y/$magnitude), ($z/$magnitude) + # The formula requires each value squared, so do that now $x2, $y2, $z2 = [Math]::Pow($x, 2), [Math]::Pow($y,2), [Math]::Pow($z, 2) + # It also defines the angle as `alpha` $alpha = $ArgumentList[3] -as [single] + # And then uses this bit of trig to find a point in the unit circle $sc = [Math]::Sin($alpha/2) * [Math]::Cos($alpha/2) + # and this to find the max size of the square, given that angle $sq = [Math]::Pow([Math]::Sin($alpha/2), 2) + # This next bit of complexity is translated directly from the reference. + # With spacing and docs added for clarity. $ArgumentList = @( #M 1 1 1 - (2 * ($y2 + $z2) * $sq) @@ -264,7 +300,6 @@ switch ($myName) { 2 * (($x * $z * $sq) + ($y * $sc)) # M 1 4 0 - # M 2 1 2 * (($x * $y * $sq) + ($z * $sc)) @@ -299,32 +334,40 @@ switch ($myName) { # M 4 4 1 ) - + + # Every other CSS transform can be done in a few lines of PowerShell + # This particular transform is the (quite painful) outlier. } Scale { + # Scale becomes `[Numerics.Matrix3x2]::CreateScale` $MatrixType = [Numerics.Matrix3x2] - $Member = 'CreateScale' + $Member = 'CreateScale' } ScaleX { + # `ScaleX` becomes `[Numerics.Matrix4x4]::CreateScale` $MatrixType = [Numerics.Matrix4x4] $Member = 'CreateScale' $ArgumentList = $ArgumentList[0], 1, 1 } ScaleY { + # `ScaleY` becomes `[Numerics.Matrix4x4]::CreateScale` $MatrixType = [Numerics.Matrix4x4] $Member = 'CreateScale' $ArgumentList = 1, $ArgumentList[0], 1 } ScaleZ { + # `ScaleZ` becomes `[Numerics.Matrix4x4]::CreateScale` $MatrixType = [Numerics.Matrix4x4] $Member = 'CreateScale' $ArgumentList = 1, 1, $ArgumentList[0] } Scale3d { + # `Scale3d` becomes `[Numerics.Matrix4x4]::CreateScale` $MatrixType = [Numerics.Matrix4x4] $Member = 'CreateScale' } Skew { + # `Skew` becomes `[Numerics.Matrix3x2]::CreateSkew` $MatrixType = [Numerics.Matrix3x2] $Member = 'CreateSkew' if ($ArgumentList.Length -eq 1) { @@ -332,6 +375,7 @@ switch ($myName) { } } SkewX { + # `SkewX` becomes `[Numerics.Matrix3x2]::CreateSkew` $MatrixType = [Numerics.Matrix3x2] $Member = 'CreateSkew' if ($ArgumentList.Length -eq 1) { @@ -339,6 +383,7 @@ switch ($myName) { } } SkewY { + # `SkewY` becomes `[Numerics.Matrix3x2]::CreateSkew` $MatrixType = [Numerics.Matrix3x2] $Member = 'CreateSkew' if ($ArgumentList.Length -eq 1) { @@ -346,71 +391,91 @@ switch ($myName) { } } Translate { + # `Translate` becomes `[Numerics.Matrix3x2]::CreateTranslation` $MatrixType = [Numerics.Matrix3x2] $Member = 'CreateTranslation' } Translate3d { + # `Translate3d` becomes `[Numerics.Matrix4x4]::CreateTranslation` $MatrixType = [Numerics.Matrix4x4] $Member = 'CreateTranslation' } TranslateX { + # `TranslateX` becomes `[Numerics.Matrix4x4]::CreateTranslation` $MatrixType = [Numerics.Matrix4x4] $Member = 'CreateTranslation' $ArgumentList = @($ArgumentList[0], 0, 0) } TranslateY { + # `TranslateY` becomes `[Numerics.Matrix4x4]::CreateTranslation` $MatrixType = [Numerics.Matrix4x4] $Member = 'CreateTranslation' $ArgumentList = @(0, $ArgumentList[0], 0) } TranslateZ { + # `TranslateZ` becomes `[Numerics.Matrix4x4]::CreateTranslation` $MatrixType = [Numerics.Matrix4x4] $Member = 'CreateTranslation' $ArgumentList = @(0, 0, $ArgumentList[0]) } } +# If we do not have a matching member if ($null -eq $matrixType::$Member) { + # error out + Write-Error "$Member does not exist on $MatrixType" return } +# If we have no arguments if (-not $ArgumentList.Length) { + # and no member, return the matrix type. if (-not $PSBoundParameters.Member) {return $matrixType } + # If we have no arguments and a member, return the member. else { return $matrixType::$member } } +# If the first argument is a static member if ($ArgumentList.Length -eq 1 -and $matrixType::($ArgumentList[0]) ) { - $Member = 'identity' + # use that as the member + $Member = $ArgumentList[0] } -if (-not $matrix) { - $matrix = - if ($matrixType::$member.Invoke) { - $matrixType::$Member.Invoke($ArgumentList) - } else { - $matrixType::$Member - } -} +# Create the matrix by invoking the member +# (or just returning the property) +$matrix = + if ($matrixType::$member.Invoke) { + $matrixType::$Member.Invoke($ArgumentList) + } else { + $matrixType::$Member + } +# If we have any input if ($allInput.Length -and ($null -ne $allInput[0])) { - $3dMatrix = - if ($matrix -is [Numerics.Matrix3x2]) { + # Make a 3d variation of our matrix + $3dMatrix = + if ($matrix -is [Numerics.Matrix3x2]) { [Numerics.Matrix4x4]::Create($matrix) } else { $matrix } + # Walk over all of our input foreach ($in in $allInput) { - if ($in::Transform) { + # If the input is transformable + if ($in::Transform.Invoke) { + # transform the input. $in::Transform($in, $3dMatrix) } else { + # Otherwise, pass the input thru. $in } } } else { + # If we had no input, output the matrix. $matrix } From 6f8845f5de3786077f3d89e6fbc2056d9a714966 Mon Sep 17 00:00:00 2001 From: James Brundage <+@users.noreply.github.com> Date: Tue, 11 Aug 2026 11:41:39 -0700 Subject: [PATCH 24/90] docs: `Matrix.ps1` docs ( Fixes #2 ) Adding identity and cube examples --- Matrix.ps1 | 31 +++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/Matrix.ps1 b/Matrix.ps1 index 9be2d8f..73716e4 100644 --- a/Matrix.ps1 +++ b/Matrix.ps1 @@ -33,7 +33,9 @@ # This is the object, untransformed, in 2D Matrix Identity .EXAMPLE - Matrix3D 1 + # Gets a 3d identity matrix + # This is the object, untransformed, in 3d. + Matrix3D Identity .EXAMPLE # Scale a point in 2d space by directly calling `::CreateScale` [Numerics.Vector2]::new(1,1) | @@ -70,7 +72,6 @@ # Scale Z in 3D [Numerics.Vector3]::new(1,1,1) | ScaleZ 3 - .EXAMPLE # Move a point in 3d [Numerics.Vector3]::new(1,1,1) | @@ -93,6 +94,29 @@ .EXAMPLE # rotate3d as a matrix3d, as CSS (Rotate3d 1 1 1 30deg).css +.EXAMPLE + # Constructing a cube using translation + + # Make a corner point + $corner = [Numerics.Vector3]::new(1,1,1) + + # Make a square by translating along X and Y + $square = @( + $corner + $corner | TranslateX 1 + $corner | TranslateY 1 + $corner | TranslateX 1 | TranslateY 1 + ) + + # Make a cube by translating the square along Z. + $cube = @( + $square + $square | + TranslateZ 1 + ) + + $cube + .LINK https://github.com/PoshWeb/Matrix .LINK @@ -477,5 +501,4 @@ if ($allInput.Length -and ($null -ne $allInput[0])) { } else { # If we had no input, output the matrix. $matrix -} - +} \ No newline at end of file From 3b8a658803c48a52fbef87a1a36321b89fd47c3b Mon Sep 17 00:00:00 2001 From: James Brundage <+@users.noreply.github.com> Date: Tue, 11 Aug 2026 11:42:17 -0700 Subject: [PATCH 25/90] docs: `README.md.ps1` ( Fixes #10 ) Updating examples --- README.md | 36 ++++++++++++++++++++++++++++++++---- 1 file changed, 32 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index d513a83..ec5e998 100644 --- a/README.md +++ b/README.md @@ -123,8 +123,10 @@ Matrix Identity #### Example 2 +Gets a 3d identity matrix +This is the object, untransformed, in 3d. ~~~PowerShell -Matrix3D 1 +Matrix3D Identity ~~~ @@ -255,15 +257,41 @@ rotate3d as a matrix3d, as CSS (Rotate3d 1 1 1 30deg).css ~~~ + +#### Example 17 + +Constructing a cube using translation +Make a corner point +~~~PowerShell +$corner = [Numerics.Vector3]::new(1,1,1) + +# Make a square by translating along X and Y +$square = @( + $corner + $corner | TranslateX 1 + $corner | TranslateY 1 + $corner | TranslateX 1 | TranslateY 1 +) + +# Make a cube by translating the square along Z. +$cube = @( + $square + $square | + TranslateZ 1 +) + +$cube +~~~ +
Parameters |Name|Type|Description| |-|-|-| -|ArgumentList|Object[]|| -|InputObject|PSObject[]|| -|Member|String|| +|ArgumentList|Object[]|Any arguments for the transform function
Arguments can include numbers of CSS units.
`deg` and `turn` are converted into radians
`%` becomes a value between 0 and 1| +|InputObject|PSObject[]|Any input objects.
If the input object has a `Transform` static method,
it will be transformed.
If it does not, it will be passed thru.| +|Member|String|The name of the method or property of a matrix transform.
If this is provided, this method will be called instead.
Many aliases, such as `Skew` or `Rotate`,
will use a custom member and will ignore this parameter.|
From 00bce08a3d7d93c574c06cac24ab7d53205e8ea4 Mon Sep 17 00:00:00 2001 From: James Brundage <+@users.noreply.github.com> Date: Tue, 11 Aug 2026 11:44:07 -0700 Subject: [PATCH 26/90] docs: `README.md.ps1` ( Fixes #10 ) Updating links --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ec5e998..304e8b9 100644 --- a/README.md +++ b/README.md @@ -297,7 +297,7 @@ $cube
Links -* [github.com/PoshWeb/Matrix](https://github.com/PoshWeb/Matrix) +* [GitHub PoshWeb Matrix](https://github.com/PoshWeb/Matrix) * [Learn DotNet system.numerics.matrix4x4](https://learn.microsoft.com/en-us/dotnet/api/system.numerics.matrix4x4?wt.mc_id=MVP_321542) * [MDN CSS matrix3D](https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Values/transform-function/matrix3D) * [Learn DotNet system.numerics.matrix3x2](https://learn.microsoft.com/en-us/dotnet/api/system.numerics.matrix3x2?wt.mc_id=MVP_321542) From f23d1898d4512a0c097493b5b634212d061ff85d Mon Sep 17 00:00:00 2001 From: James Brundage <+@users.noreply.github.com> Date: Tue, 11 Aug 2026 11:46:01 -0700 Subject: [PATCH 27/90] docs: `README.md.ps1` ( Fixes #10 ) Updating link format --- README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 304e8b9..5847cab 100644 --- a/README.md +++ b/README.md @@ -297,10 +297,10 @@ $cube
Links -* [GitHub PoshWeb Matrix](https://github.com/PoshWeb/Matrix) -* [Learn DotNet system.numerics.matrix4x4](https://learn.microsoft.com/en-us/dotnet/api/system.numerics.matrix4x4?wt.mc_id=MVP_321542) -* [MDN CSS matrix3D](https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Values/transform-function/matrix3D) -* [Learn DotNet system.numerics.matrix3x2](https://learn.microsoft.com/en-us/dotnet/api/system.numerics.matrix3x2?wt.mc_id=MVP_321542) -* [MDN CSS matrix](https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Values/transform-function/matrix) +* [ PoshWeb Matrix (GitHub)](https://github.com/PoshWeb/Matrix) +* [system.numerics.matrix4x4 (Learn DotNet)](https://learn.microsoft.com/en-us/dotnet/api/system.numerics.matrix4x4?wt.mc_id=MVP_321542) +* [CSS matrix3D (MDN)](https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Values/transform-function/matrix3D) +* [system.numerics.matrix3x2 (Learn DotNet)](https://learn.microsoft.com/en-us/dotnet/api/system.numerics.matrix3x2?wt.mc_id=MVP_321542) +* [CSS matrix (MDN)](https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Values/transform-function/matrix)
From 505e7ad835e663727dae712ddac09b7d485421ae Mon Sep 17 00:00:00 2001 From: James Brundage <+@users.noreply.github.com> Date: Tue, 11 Aug 2026 11:49:18 -0700 Subject: [PATCH 28/90] docs: `README.md.ps1` ( Fixes #10 ) Updating source --- README.md.ps1 | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/README.md.ps1 b/README.md.ps1 index fdec577..f1aedd5 100644 --- a/README.md.ps1 +++ b/README.md.ps1 @@ -280,11 +280,14 @@ if ($uniqueNames) { $relatedUri = $related -as [uri] if ($relatedUri.DnsSafeHost -eq 'learn.microsoft.com' -and $relatedUri.LocalPath -match '/dotnet/api') { - "* [Learn DotNet $($relatedUri.segments[-1] -replace '/')]($related)" + "* [$($relatedUri.segments[-1] -replace '/') (Learn DotNet)]($related)" } elseif ($relatedUri.DnsSafeHost -eq 'developer.mozilla.org' -and $relatedUri.LocalPath -match '/(?[^/]+)/reference') { - "* [MDN $($matches.ref) $($relatedUri.segments[-1] -replace '/')]($related)" + "* [$($matches.ref) $($relatedUri.segments[-1] -replace '/') (MDN)]($related)" + } + elseif ($relatedUri.DnsSafeHost -eq 'github.com') { + "* [$($relatedUri.Segments -replace '/', ' ') (GitHub)]($related)" } elseif ($relatedUri.DnsSafeHost) { "* [$($relatedUri.DnsSafeHost)$($relatedUri.LocalPath)]($related)" From 3e62a51318de3eac76ff04820b66fd946c756f9e Mon Sep 17 00:00:00 2001 From: James Brundage <+@users.noreply.github.com> Date: Tue, 11 Aug 2026 11:59:04 -0700 Subject: [PATCH 29/90] feat: `Matrix.ps1` ( Fixes #2 ) Adding support for duplicating a matrix --- Matrix.ps1 | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/Matrix.ps1 b/Matrix.ps1 index 73716e4..211a1b2 100644 --- a/Matrix.ps1 +++ b/Matrix.ps1 @@ -115,8 +115,7 @@ TranslateZ 1 ) - $cube - + $cube .LINK https://github.com/PoshWeb/Matrix .LINK @@ -468,10 +467,20 @@ if ($ArgumentList.Length -eq 1 -and } +# .Net does not provide a `Create` method for either matrix that accepts a matrix +if ($Member -eq 'Create' -and $ArgumentList[0] -is $matrixType) { + # So take all of Matrix properties and copy them over. + $argumentList = foreach ($property in $ArgumentList[0].psobject.properties) { + if ($property.Name -match '^M\d{2}') { + $property.Value + } + } +} + # Create the matrix by invoking the member # (or just returning the property) $matrix = - if ($matrixType::$member.Invoke) { + if ($matrixType::$member.Invoke) { $matrixType::$Member.Invoke($ArgumentList) } else { $matrixType::$Member From 4bc3fd4ff018f8943418b920d75a26452e0068d1 Mon Sep 17 00:00:00 2001 From: James Brundage <+@users.noreply.github.com> Date: Tue, 11 Aug 2026 11:59:12 -0700 Subject: [PATCH 30/90] feat: `Matrix.ps1` ( Fixes #2 ) Adding support for duplicating a matrix --- Matrix.ps1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Matrix.ps1 b/Matrix.ps1 index 211a1b2..ba891c5 100644 --- a/Matrix.ps1 +++ b/Matrix.ps1 @@ -469,7 +469,7 @@ if ($ArgumentList.Length -eq 1 -and # .Net does not provide a `Create` method for either matrix that accepts a matrix if ($Member -eq 'Create' -and $ArgumentList[0] -is $matrixType) { - # So take all of Matrix properties and copy them over. + # So take all of Matrix properties and make them arguments. $argumentList = foreach ($property in $ArgumentList[0].psobject.properties) { if ($property.Name -match '^M\d{2}') { $property.Value From 9d06be20ad7ae0356010a72f2e5e9530b4876689 Mon Sep 17 00:00:00 2001 From: James Brundage <+@users.noreply.github.com> Date: Wed, 12 Aug 2026 15:05:43 -0700 Subject: [PATCH 31/90] feat: `Quarternion` support ( Fixes #11 ) --- Matrix.ps1 | 20 ++++++++++++++++---- Matrix.psd1 | 3 ++- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/Matrix.ps1 b/Matrix.ps1 index ba891c5..0a342b4 100644 --- a/Matrix.ps1 +++ b/Matrix.ps1 @@ -115,7 +115,7 @@ TranslateZ 1 ) - $cube + $cube .LINK https://github.com/PoshWeb/Matrix .LINK @@ -131,7 +131,8 @@ 'Matrix4x4', 'Matrix3x2', 'Matrix2d', - 'Matrix3d', + 'Matrix3d', + 'Quaternion', 'Skew', 'SkewX', 'SkewY', @@ -186,6 +187,9 @@ $InputObject, if ($firstElement -match '(?>3d|4x4)') { [Numerics.Matrix4x4].GetMembers('Static,Public').Name -notmatch '_' } + elseif ($firstElement -match 'Quaternion') { + [Numerics.Quaternion].GetMembers('Static,Public').Name -notmatch '_' + } else { [Numerics.Matrix3x2].GetMembers('Static,Public').Name -notmatch '_' } @@ -217,7 +221,11 @@ $matrixType = # If the name contains 3d or 4x4, if ($myName -match '(?>3d|4x4)') { [Numerics.Matrix4x4] # treat it as a 3d matrix. - } else { # Otherwise + } + elseif ($myName -match '(?>Quaternion|Versor)') { + [Numerics.Quaternion] + } + else { # Otherwise [Numerics.Matrix3x2] # treat it as a 2d matrix. } @@ -492,7 +500,11 @@ if ($allInput.Length -and ($null -ne $allInput[0])) { $3dMatrix = if ($matrix -is [Numerics.Matrix3x2]) { [Numerics.Matrix4x4]::Create($matrix) - } else { + } + elseif ($matrix -is [Numerics.Quaternion]) { + [Numerics.Matrix4x4]::CreateFromQuaternion($matrix) + } + else { $matrix } diff --git a/Matrix.psd1 b/Matrix.psd1 index 583fe9e..fdfc66f 100644 --- a/Matrix.psd1 +++ b/Matrix.psd1 @@ -80,7 +80,8 @@ VariablesToExport = 'Matrix' # Aliases to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no aliases to export. AliasesToExport = @( - 'Matrix4x4', 'Matrix3x2', 'Matrix2d', 'Matrix3d' + 'Matrix4x4', 'Matrix3x2', 'Matrix2d', 'Matrix3d','Quaternion' + 'Scale', 'ScaleX', 'ScaleY', From 5fb2472303c6d2dc1b57b318316acf0869b2cde4 Mon Sep 17 00:00:00 2001 From: James Brundage <+@users.noreply.github.com> Date: Wed, 12 Aug 2026 15:27:39 -0700 Subject: [PATCH 32/90] feat: `Quaternion.CSS` support ( Fixes #11, Fixes #12 ) --- Types/Quarternion/PSTypeName.txt | 1 + Types/Quaternion/PSTypeName.txt | 1 + Types/Quaternion/get_CSS.ps1 | 21 +++++++++++++++++++++ 3 files changed, 23 insertions(+) create mode 100644 Types/Quarternion/PSTypeName.txt create mode 100644 Types/Quaternion/PSTypeName.txt create mode 100644 Types/Quaternion/get_CSS.ps1 diff --git a/Types/Quarternion/PSTypeName.txt b/Types/Quarternion/PSTypeName.txt new file mode 100644 index 0000000..91fe4e6 --- /dev/null +++ b/Types/Quarternion/PSTypeName.txt @@ -0,0 +1 @@ +System.Numerics.Quaternion \ No newline at end of file diff --git a/Types/Quaternion/PSTypeName.txt b/Types/Quaternion/PSTypeName.txt new file mode 100644 index 0000000..91fe4e6 --- /dev/null +++ b/Types/Quaternion/PSTypeName.txt @@ -0,0 +1 @@ +System.Numerics.Quaternion \ No newline at end of file diff --git a/Types/Quaternion/get_CSS.ps1 b/Types/Quaternion/get_CSS.ps1 new file mode 100644 index 0000000..5df9ac4 --- /dev/null +++ b/Types/Quaternion/get_CSS.ps1 @@ -0,0 +1,21 @@ +$matrix = [Numerics.Matrix4x4]::CreateFromQuaternion($this) +return "matrix3d($( +@( +$matrix.M11 +$matrix.M12 +$matrix.M13 +$matrix.M14 +$matrix.M21 +$matrix.M22 +$matrix.M23 +$matrix.M24 +$matrix.M31 +$matrix.M32 +$matrix.M33 +$matrix.M34 +$matrix.M41 +$matrix.M42 +$matrix.M43 +$matrix.M44 +) -join ', ' +))" \ No newline at end of file From 4a6109b3c3c74e3b07d53c62d77da897dd94a00b Mon Sep 17 00:00:00 2001 From: StartAutomating Date: Wed, 12 Aug 2026 22:27:56 +0000 Subject: [PATCH 33/90] feat: `Quaternion.CSS` support ( Fixes #11, Fixes #12 ) --- Matrix.types.ps1xml | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/Matrix.types.ps1xml b/Matrix.types.ps1xml index f21ac14..5dbd0aa 100644 --- a/Matrix.types.ps1xml +++ b/Matrix.types.ps1xml @@ -84,4 +84,40 @@ $this.M44 + + System.Numerics.Quaternion + + + + + System.Numerics.Quaternion + + + CSS + + $matrix = [Numerics.Matrix4x4]::CreateFromQuaternion($this) +return "matrix3d($( +@( +$matrix.M11 +$matrix.M12 +$matrix.M13 +$matrix.M14 +$matrix.M21 +$matrix.M22 +$matrix.M23 +$matrix.M24 +$matrix.M31 +$matrix.M32 +$matrix.M33 +$matrix.M34 +$matrix.M41 +$matrix.M42 +$matrix.M43 +$matrix.M44 +) -join ', ' +))" + + + + \ No newline at end of file From 6d5be231424b664711323e409b302a5835700f6f Mon Sep 17 00:00:00 2001 From: James Brundage <+@users.noreply.github.com> Date: Wed, 12 Aug 2026 15:29:02 -0700 Subject: [PATCH 34/90] feat: `Quaternion.CSS` support ( Fixes #11, Fixes #12 ) Cleaning up misnamed files --- Types/Quarternion/PSTypeName.txt | 1 - 1 file changed, 1 deletion(-) delete mode 100644 Types/Quarternion/PSTypeName.txt diff --git a/Types/Quarternion/PSTypeName.txt b/Types/Quarternion/PSTypeName.txt deleted file mode 100644 index 91fe4e6..0000000 --- a/Types/Quarternion/PSTypeName.txt +++ /dev/null @@ -1 +0,0 @@ -System.Numerics.Quaternion \ No newline at end of file From 7d37436b1fb84ba331c5836bf32a2f4c56849017 Mon Sep 17 00:00:00 2001 From: StartAutomating Date: Wed, 12 Aug 2026 22:29:29 +0000 Subject: [PATCH 35/90] feat: `Quaternion.CSS` support ( Fixes #11, Fixes #12 ) Cleaning up misnamed files --- Matrix.types.ps1xml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/Matrix.types.ps1xml b/Matrix.types.ps1xml index 5dbd0aa..cb7b6c7 100644 --- a/Matrix.types.ps1xml +++ b/Matrix.types.ps1xml @@ -84,11 +84,6 @@ $this.M44 - - System.Numerics.Quaternion - - - System.Numerics.Quaternion From 6b17e1617a302d5cdf1f5c3cb1e3b7a65e3cc757 Mon Sep 17 00:00:00 2001 From: James Brundage <+@users.noreply.github.com> Date: Sat, 15 Aug 2026 13:34:40 -0700 Subject: [PATCH 36/90] docs(website): `/css/compatible.html.ps1` ( Fixes #17 ) --- css/compatible.html.ps1 | 233 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 233 insertions(+) create mode 100644 css/compatible.html.ps1 diff --git a/css/compatible.html.ps1 b/css/compatible.html.ps1 new file mode 100644 index 0000000..f82de10 --- /dev/null +++ b/css/compatible.html.ps1 @@ -0,0 +1,233 @@ +$Title = 'CSS Compatibility' + +ConvertFrom-Markdown -InputObject @" + +# Matrix CSS + +## Matrix CSS Compatibility + +Matrix is mostly compatible with CSS. + +Each CSS transform function can be represented in a 4x4 or 3x2 matrix. + +Matrix extends every `[Numerics.Matrix4x4]` and `[Numerics.Matrix3x2]` matrix with a .CSS property. + +We can embed matrices in any css file or html file by simply outputting that property: + +~~~PowerShell +(rotateX 45deg).CSS +~~~ + +This capability is quite useful. + +It means we can transform objects in 2D or 3D the exact same way we would in CSS. + +The rest of this page proves the point. + +It shows a side-by-side comparison of pure CSS and the matrix operation. + +Each side should be identical. + +"@ | + Select-Object -ExpandProperty Html + + +"" + + +"
" +"Cube" + "
" + "
+
+
+
+
+
+
+
" + + "" + "
+
+
+
+
+
+
+
" + "
" +"
" + + + +$2d = [Ordered]@{ + "rotate(30deg)" = "rotate(30deg)", (Rotate 30deg).CSS + "skewX(30deg)" = "skewX(30deg)", (SkewX 30deg).CSS + "skewY(30deg)" = "skewY(30deg)", (SkewY 30deg).CSS + "skew(30deg, 15deg)" = "skew(30deg, 15deg)", (Skew 30deg 15deg).CSS + "skew(15deg, 30deg)" = "skew(15deg, 30deg)", (Skew 15deg 30deg).CSS + "scale(1,1.5)" = "scale(1,1.5)", (Scale 1 1.5).CSS + "scale(1.5,1)" = "scale(1.5,1)", (Scale 1.5 1).CSS + "translate(-5px, 10px)" = "translate(-5px,10px)", (Translate -5px 10px).CSS +} + + +"
" +"2D" +foreach ($key in $2d.Keys) { + "
" + "
" + "$key" + "
" + "" + "
" + "$key" + "
" + "
" +} +"
" + +$3d = [Ordered]@{ + "rotateX(45deg)" = "rotateX(45deg)", (RotateX 45deg).CSS + "rotateY(45deg)" = "rotateY(45deg)", (RotateY 45deg).CSS + "rotateZ(45deg)" = "rotateZ(45deg)", (RotateZ 45deg).CSS + "rotate3d(1,1,1, 45deg)" = "rotate3d(1,1,1, 45deg)", (rotate3d 1 1 1 45deg).CSS + "scaleX(1.5)" = "scaleX(1.5)", (ScaleX 1.5).CSS + "scaleY(1.5)" = "scaleY(1.5)", (ScaleY 1.5).CSS + "scaleZ(1.5)" = "scaleZ(1.5)", (ScaleZ 1.5).CSS + "scale3D(1.5, 0.75, 0.5)" = "scale3D(1.5, 0.75, 0.5)", (scale3D 1.5, 0.75, 0.5).CSS + "translateX(10px)" = "translateX(10px)", (TranslateX 10px).CSS + "translateY(10px)" = "translateY(10px)", (TranslateY 10px).CSS + "translateZ(-20px)" = "translateZ(-20px)", (TranslateZ -20px).CSS + "translate3d(10px, 20px, 30px)" = "translate3d(10px, 20px, 30px)", (translate3d 10px, 20px, 30px).CSS +} + +"
" +"3D" +foreach ($key in $3d.Keys) { + "
" + "
" + "$key" + "
" + "" + "
" + "$key" + "
" + "
" +} +"
" + + + + + + +@( + + "
" + "
+
+
+
+
+
" + "
" + "
" + "
+
+
+
+
+
" + "
" +) * 4 + + +return From 5fdd9aa8b8bce685d0d8e03cf7dc41b280b7c00b Mon Sep 17 00:00:00 2001 From: James Brundage <+@users.noreply.github.com> Date: Sat, 15 Aug 2026 13:38:31 -0700 Subject: [PATCH 37/90] docs(website): `/css/transform.html.ps1` ( Fixes #18 ) --- assets/dodge-matrix.gif | Bin 0 -> 437612 bytes css/transform.html.ps1 | 137 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 137 insertions(+) create mode 100644 assets/dodge-matrix.gif create mode 100644 css/transform.html.ps1 diff --git a/assets/dodge-matrix.gif b/assets/dodge-matrix.gif new file mode 100644 index 0000000000000000000000000000000000000000..be4e4cf34795f0f9935da9079d32e5fa5bf8a2e8 GIT binary patch literal 437612 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 BSJsE{J;6s<-z;!+ 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≫⃒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%0D3Ilh9;7$v3<6a3= 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
+
+ + +
+
+"@ + +"

This works horizontally and vertically

" + +@" +
+
+ + +
+
+"@ + +"

Quad Mirror

" + +"" +"
" + "
" + "
" + "" + "" + "
" + "
" + "" + "" + "
" + "
" +"
" + +"" + +"

Transform animations

" + +"
" +$( + foreach ($n in 0..7) { + $animationName = "animatrix-rotate3d-$n" +"" + } +) +"
" + +return From 67148eb256128c4baea732fe5810d0430b91c926 Mon Sep 17 00:00:00 2001 From: James Brundage <+@users.noreply.github.com> Date: Sat, 15 Aug 2026 13:47:13 -0700 Subject: [PATCH 38/90] docs(website): `/dotnet/dotnet.html.ps1` ( Fixes #19 ) --- dotnet/dotnet.html.ps1 | 65 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 dotnet/dotnet.html.ps1 diff --git a/dotnet/dotnet.html.ps1 b/dotnet/dotnet.html.ps1 new file mode 100644 index 0000000..5ee9e26 --- /dev/null +++ b/dotnet/dotnet.html.ps1 @@ -0,0 +1,65 @@ +$Title = 'Matrix DotNet' + + +$matrixLinks = @{ + "Matrix3x2" = + '[[Numerics.Matrix3x2]](https://learn.microsoft.com/en-us/dotnet/api/system.numerics.matrix3x2?wt.mc_id=MVP_321542)' + "Matrix3x2 Source" = + '[[Numerics.Matrix3x2] source](https://github.com/microsoft/referencesource/blob/main/System.Numerics/System/Numerics/Matrix3x2.cs)' + "Matrix4x4" = + '[[Numerics.Matrix4x4]](https://learn.microsoft.com/en-us/dotnet/api/system.numerics.matrix4x4?wt.mc_id=MVP_321542)' + "Matrix4x4 Source" = + '[[Numerics.Matrix4x4] source](https://github.com/microsoft/referencesource/blob/main/System.Numerics/System/Numerics/Matrix4x4.cs)' + "Quaternion" = + '[[Numerics.Quaternion]](https://learn.microsoft.com/en-us/dotnet/api/system.numerics.quaternion?wt.mc_id=MVP_321542)' + "Quaternion Source" = + '[[Numerics.Quaternion] source](https://github.com/microsoft/referencesource/blob/main/System.Numerics/System/Numerics/Quaternion.cs)' +} + +ConvertFrom-Markdown -InputObject @" + +# DotNet Matrix + +This module would not be possible without the .NET framework. + +.NET makes matrix math easy. + +Let's learn a bit about the dotnet matrix + +## The DotNet Matrix + +.NET provides three built-in types we can use to construct matrices: + +* $($matrixLinks.'Matrix3x2') +* $($matrixLinks.'Matrix4x4') +* $($matrixLinks.'Quaternion') + +Two of these map directly to CSS: + +* `Matrix3x2` to a [CSS matrix()](https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Values/transform-function/matrix) +* `Matrix4x4` to a [CSS matrix3d()](https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Values/transform-function/matrix) + +A `Quaternion` can be converted to a `Matrix4x4`, and thus can become a `matrix3d` + +### The DotNet Matrix is Open Source + +The DotNet core framework is open source, and so are the Matrix classes we use in this module. + +They are well documented and fairly complete: + +|Class|Source| +|-|-| +|$($matrixLinks.'Matrix3x2')|$($($matrixLinks.'Matrix3x2 Source'))| +|$($matrixLinks.'Matrix4x4')|$($($matrixLinks.'Matrix4x4 Source'))| +|$($matrixLinks.'Quaternion')|$($($matrixLinks.'Quaternion Source'))| + +We can add, subtract, multiply and divide our matrices. +We can also use them to transform any `Vector2`, `Vector3`, or `Vector4`. + +The Matrix module allows us to apply these transformations to an object pipeline of points in [PowerShell](/powershell/), +using [css compatible](/css/compatible/) transforms. + +"@ | + Select-Object -ExpandProperty Html + +return From 82355a0e854a09037139ce0debf163cdd6cc1d72 Mon Sep 17 00:00:00 2001 From: James Brundage <+@users.noreply.github.com> Date: Wed, 19 Aug 2026 11:51:31 -0700 Subject: [PATCH 39/90] feat: `deploy.ps1` ( Fixes #22 ) --- .github/workflows/deploy.yml | 61 +++++ deploy.ps1 | 462 +++++++++++++++++++++++++++++++++++ 2 files changed, 523 insertions(+) create mode 100644 .github/workflows/deploy.yml create mode 100644 deploy.ps1 diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 0000000..99e9fb4 --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,61 @@ +# Simple workflow for deploying static content to GitHub Pages +name: deploy + +on: + # Runs on pushes targeting the default branch + push: + branches: [$default-branch] + # or manually from the Actions tab + workflow_dispatch: + +# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages +permissions: + contents: read + pages: write + id-token: write + +# Allow only one concurrent deployment, and cancel any in-progress deployments if a new one is triggered +concurrency: + group: "pages" + cancel-in-progress: true + +jobs: + # GitHub Pages use a single job, named deploy. + deploy: + # By using an environment, we avoid locking + environment: + name: github-pages + # and we can control where it is deployed. + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + steps: + # Check out our repository + - name: Checkout + uses: actions/checkout@main + with: + # Using fetch-depth: 0 to ensure we get the full history of the repository + fetch-depth: 0 + # Setup GitHub Pages + - name: Setup Pages + uses: actions/configure-pages@main + # To Build Pages in PowerShell, we just call a script + - name: Build Pages + # set the shell to pwsh + shell: pwsh + # and then call any script we would like to build the page. + # By default, this can use the same name as the workflow + # (in this case, just deploy.ps1) + run: . "./deploy.ps1" + # This approach makes it easier to logically organize workflow scripts. + # We will also map the page_url to an environment variable, so our scripts can access it. + env: + page_url: ${{ steps.deployment.outputs.page_url }} + analytics_id: ${{vars.ANALYTICSID}} + - name: Upload artifact + uses: actions/upload-pages-artifact@main + with: + # Upload the contents to the GitHub Pages artifact + path: './' + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@main \ No newline at end of file diff --git a/deploy.ps1 b/deploy.ps1 new file mode 100644 index 0000000..8774fba --- /dev/null +++ b/deploy.ps1 @@ -0,0 +1,462 @@ +<# +.SYNOPSIS + `deploy.ps1` +.DESCRIPTION + `deploy.ps1` deploys a website. + + This is a simple and helpful scripting convention for site deployment. + + Just run `./deploy.ps1` + + `./deploy.ps1` can deploy any way we want. + + This `./deploy.ps1` dynamically generates a static site. + + Feel free to copy and paste this code. + + Please document your parameters, and add NOTES. +.NOTES + This deploys a static site by running any `*.*.ps1`. + + The output from each file will go into a corresponding file. + + For example: `a.css.ps1` will output `a.css` + + * `*.html.ps1` files will be piped into `layout` + * `*.json.ps1` files will be converted to `json` + + `html`, `json`, and `xml` files will be made into `index` files + (unless `-Ugly` links are preferred) +#> +[CmdletBinding(SupportsShouldProcess)] +param( +# An anlytics ID +[string]$AnalyticsID, + +# The list of acceptable extensions +[string[]] +$AcceptableExtensions = @( + 'css', + 'md', + 'html', + 'js', + 'json', + 'svg', + 'xml' +), + +# If set, will make "ugly" page links +# This will make `a.html.ps1` generate `a.html`, instead of `/a/index.html` +[switch] +$Ugly, + +[string[]] +$IndexExtension = @('html','xml','json'), + +# The root page url +[uri] +$PageUrl, + +# The site root +[string] +$SiteRoot +) + +# Know thyself +$mySelf = $MyInvocation.MyCommand + +if (-not $SiteRoot) { + $SiteRoot = $PSScriptRoot +} + +# If there is no script root, +if (-not $SiteRoot) { + # error out. + Write-Error "`$psScriptRoot is empty, Will not deploy" + return +} + +# Push into $psScriptRoot so everything is root relative. +Push-Location $PSScriptRoot + +#region Map Parameters from Environment + +# Look at our environment +foreach ($env in Get-ChildItem env:) { + # See if any environment variables map to parameter + # (after we remove any punctuation from the name) + $envName = $env.Name -replace '\p{P}' + if ( + # If they map + $mySelf.Parameters[$envName] -and + # and are not already bound + (-not $PSBoundParameters.ContainsKey($envName)) + ) { + # set them + $ExecutionContext.SessionState.PSVariable.Set( + $envName, + $( + # If the value looks like json + if ($env.Value -match '^\s{0,}[\[\{]') { + # convert it before we set the value. + ConvertFrom-Json -InputObject $env.Value + } + # If the value is a boolean string + elseif ($env.Value -match '^true|false$') { + # convert it to a boolean + $evn.Value -match 'true' + } + # Otherwise, directly map it. + else { + $env.Value + } + ) + ) + # After we set the variable, map it into `$psBoundParameters` + $PSBoundParameters[$envName] = + $ExecutionContext.SessionState.PSVariable.Get( + $envName + ).Value + } +} +#endregion Map Parameters from Environment + +# Configs, Layouts, and Pages all may require modules +# Make a little filter to import and install any module a script `#requires`. +filter requireModule { + # Our input should be a file. + $in = $_ + + # Get the script at this location + $command = Get-Command $in.FullName -CommandType ExternalScript + # If that somehow failed, return + if (-not $command) { return } + + # If the script has requirements + foreach ($requirement in + $command.ScriptBlock.Ast.ScriptRequirements.RequiredModules + ) { + # Check if they are loaded + $requiredModule = Get-Module -ErrorAction Ignore -Name $requirement.Name + + # If they are not, + if (-not $requiredModule) { + # try to load the requirement + "Importing Requirement $($requirement.Name) for $($in.FullName)" | + Out-Host + + $requiredModule = Import-Module $requiredModule -Force -PassThru -ErrorAction Ignore + + # If that did not work, + if (-not $requiredModule) { + "Installing Requirement $($requirement.Name)" | Out-Host + Install-Module $requirement.Name -Scope CurrentUser -Force + Import-Module $requirement.Name -Global -Force -PassThru | + Out-Host + } + } + } +} + +# Get whatever local module exists +$psd1Path = + Get-ChildItem -Filter *.psd1 | + Select-String 'ModuleVersion' | + Select-Object -ExpandProperty Path -First 1 + +# If one was found +if ($psd1Path) { + # import it + "Importing $psd1Path" | Out-Host + Import-Module $psd1Path -Force -PassThru | + Out-Host +} + +# Check for a layout script. +$layout = Get-Command ./layout.ps1 -ErrorAction Ignore +if ($layout) { + # Import any requirements it might have + if ($layout.ScriptBlock.Ast.ScriptRequirements) { + [IO.FileInfo]$layout.Source | . requireModule + } + # And alias it to `layout`. + Set-Alias layout $layout.Source +} + +# Any `$site` metadata can be stored in a dictionary +# Any of our parameters should be site wide metadata +$site = [Ordered]@{} + $PSBoundParameters +$Pages = [Ordered]@{} +$PagesByUrl = [Ordered]@{} + +# A `config.ps1` file may do anything it wants to configure the site. + +# If there is a `.config.ps1` +$configPs1 = Get-Command ./config.ps1 -ErrorAction Ignore +if ($configPs1) { + # Import any requirements it might have + if ($configPs1.ScriptBlock.Ast.ScriptRequirements) { + [IO.FileInfo]$configPs1.Source | . requireModule + } + . ./config.ps1 # and run it. +} + +# We will be run any `*.*.ps1`(with an acceptable extension). + +# The output from each script will go to the corresponding file. + +# Declare some patterns we will use: +# * `$matchExtension` will tell us which extension +$matchExtension = '\.(?[^\.]+)\.ps1$' +# * `$acceptablePattern` will ensure we only build file types we accept +$acceptablePattern = "\.(?>$($acceptableExtensions -join '|'))\.ps1$" +# * `$indexPattern` indicates which file types will become indeces. +$indexPattern = "\.(?>$($IndexExtension -join '|'))\.ps1$" + +# Get all files that match our pattern +$files = @( + Get-ChildItem -Path *.ps1 -File -Recurse | + Where-Object Name -match $acceptablePattern +) | + Sort-Object @{ + # We want to generate Markdown files first + # because html files may include their result inline. + Expression = { + # So sort on any md files first + $_.Name -match '\.md' + } + Descending = $true # in descending order + # (so they are at the top of the pile) + }, Fullname + +# Prepare our progress bars +$progress = @{ID=Get-Random;Activity="Building Pages"} +$total = @($files).Length +$counter = 0 + +# Walk over each of our files +foreach ($in in $files) { + $progress.PercentComplete = ++$counter * 100 / $total + $progress.Status = $in.Name + Write-Progress @progress + + # import any requirements + $in | . requireModule + + $inScript = + $ExecutionContext.SessionState.InvokeCommand.GetCommand($in.FullName, 'ExternalScript') + + # Make sure we can map the output extension + $outputExtension = + if ($in -match $matchExtension) { + $matches.x + } else { + # otherwise, warn and continue. + Write-Warning "Will not output $in without an extension" + continue + } + + # Default the title to the file name + $FileName = $in.Name -replace $matchExtension + $title = $FileName -replace '-', ' ' + $help = Get-Help $in.FullName -ErrorAction Ignore + + $meta = [Ordered]@{} + foreach ($attr in $inScript.ScriptBlock.Attributes) { + if ($attr.Key -and $attr.Value) { + $meta[$attr.Key] = $attr.Value + } + } + + # and initialize any page metadata + $page = [Ordered]@{ + Title = $title + Command = $inScript + File = $in + FileName = $FileName + Source = $inScript.ScriptBlock + Help = $help + Meta = $meta + } + + # Generate a file date by: + $fileDate = $fileName -replace + # * Remove any non-digit (except colon, dash, and underscore, and Z) + '[^\d:-_Z]' -replace + # * Trim leading punctuation, and trailing punctuation (and Z), + '^\p{P}+' -replace '[-Z]+$' -replace + # * replace underscores with colons, and try to cast to `[DateTime]` + '_',':' -as [DateTime] + + # If we have a file date, + if ($fileDate) { + $page.Date = $fileDate # set the `$Page.Date` + } else { + # otherwise, we'll try to get the date from git. + $gitCommand = $ExecutionContext.SessionState.InvokeCommand.GetCommand('git', 'Application') + if ($gitCommand) { + $gitDates = + try { + # we can use `git log --follow --format=%ci` to get the dates in order + (& $gitCommand log --follow --format=%ci --date default $in.FullName *>&1) -as [datetime[]] + } catch { + $null + } + # Because the file might not be in git, we want to always set the `$LASTEXITCODE` to 0 + $LASTEXITCODE = 0 + # Set the date to the last date we find. + if ($gitDates) { + $page.Date = $gitDates[-1] + } + } + } + + # If we map the output path _before_ we run our script + # we can know what URL we will be publishing to. + + # Our output file path starts by replacing the .ps1 + $outputPath = $in.FullName -replace '\.ps1$' + + # If we do not care about "pretty" url format + # or are not an extension that we can make into an index, + # we do not need to change the file path + if ((-not $Ugly) -and ($in.Name -match $indexPattern)) { + # If we do, things get a little more complicated + # We will want to special case some extensions we want to use as an index. + + # If the name of the file matches the name of the directory + if ($in.Name -match + "^$([Regex]::Escape($in.Directory.Name))$matchExtension" + ) { + # it will become an index of that directory. + $outputPath = Join-Path $in.Directory "index.$outputExtension" + } else { + # otherwise, make it an index of it's own directory + $outputPath = + ($in.FullName -replace $matchExtension) + + "/index.$outputExtension" -replace + 'index/index', 'index' + } + } + + # Now that we know our output path, + # we can predict our url + $page.Url = $outputPath -replace "^$( + [Regex]::Escape($siteRoot) # just remove the site root + )" -replace # replace any index with a slash + '[\\/]index\.[^\.]+?$','/' -replace + '[\\/]', '/' # and fix any slashes. + + $page.OutputPath = $outputPath + + $page.Extension = $outputExtension + # Get our page output + $output = @(. $in.FullName) + + $page.Title = $title + + # Store our output in the page + $page.Output = $output + + # And put our page in two collections + + # One by output path (we will use this output) + $Pages[$outputPath] = $page + # and one by url + $PagesByUrl[$page.Url] = $page +} + +$progress.Activity = "Deploying Pages" +$total = $pages.Count +$counter = 0 + +foreach ($outputPath in $pages.Keys) { + + $progress.PercentComplete = ++$counter * 100 / $total + $progress.Status = "$($page.Title) " + Write-Progress @progress + + $page = $pages[$outputPath] + $outputExtension = $page.Extension + $output = $page.Output + $outputFiles = @() + $output = @(foreach ($out in $output) { + if ($out -is [IO.FileInfo]) { + $outputFiles += $out + } else { + $out + } + }) + + # If the output was a list of files + if ($outputFiles -and -not $output) { + # then do not write anything to disk + $outputFiles + continue + } + + # If we have a layout file and are outputting html + if ($layout -and ( + $page.File.FullName -replace '\.ps1$' -match '\.html$' + )) { + # Pipe our output to the layout script. + # By doing this in a second pass, + # our layout script can have much more context. + $output = $output | layout + } + # Otherwise, if our output extension is xml + # and we have only that one xml + elseif (($outputExtension -eq 'xml') -and + ($output.Length -eq 1) -and + ($output[0] -is [xml]) + ) { + # set our output to the outerXML. + $output = $output.OuterXml + } + # Otherwise, if our output extension is json + # and the output is not already a string + elseif (($outputExtension -eq 'json') -and ( + $output[0] -isnot [string] + )) { + # convert it into json. + # If there is one more than one item, + if ($output.Length -gt 1) { + # make it a list + $output = $output | ConvertTo-Json -Depth ( + $FormatEnumerationLimit + ) + } else { + # If there is only one item, make it an object. + $output = ConvertTo-Json -InputObject $output -Depth ( + $FormatEnumerationLimit + ) + } + } + + $outputFile = [Ordered]@{ + ItemType = 'File';Force = $true + Value = $output -join [Environment]::NewLine + Path = $outputPath + } + + if ($WhatIfPreference) { + $outputFile + } elseif ($PSCmdlet.ShouldProcess("Output $($outputPath)")) { + New-Item @outputFile + } +} + +if ($PageUrl) { + $sitemap = /_includes/sitemap -Url $pageUrl -Pages $PagesByUrl + if ($sitemap) { + $sitemap.Save(( + Join-Path $SiteRoot "sitemap.xml" + )) + } +} + +$progress.Remove('PercentComplete') +$progress.Completed = $true +Write-Progress @progress + +Pop-Location \ No newline at end of file From 7faa6756635e1b75fe651c47de2e1cd09495a093 Mon Sep 17 00:00:00 2001 From: James Brundage <+@users.noreply.github.com> Date: Wed, 19 Aug 2026 11:52:14 -0700 Subject: [PATCH 40/90] feat: `config.ps1` ( Fixes #23 ) --- config.ps1 | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 config.ps1 diff --git a/config.ps1 b/config.ps1 new file mode 100644 index 0000000..4bd4f5d --- /dev/null +++ b/config.ps1 @@ -0,0 +1,10 @@ +# Aliasing /includes. +Set-Alias /_includes/CopyCode ./_includes/CopyCode.ps1 +Set-Alias /_includes/Palette ./_includes/Palette.ps1 +Set-Alias /_includes/FeatherIcon ./_includes/FeatherIcon.ps1 + +# Alias files we will use inline +Set-Alias Matrix.css ./Matrix.css.ps1 +Set-Alias Matrix.svg ./Matrix.svg.ps1 +Set-Alias /Matrix.css ./Matrix.css.ps1 +Set-Alias /Matrix.svg ./Matrix.svg.ps1 From 45eec9defd09e3a22015318eb76eb8096a1f53e8 Mon Sep 17 00:00:00 2001 From: James Brundage <+@users.noreply.github.com> Date: Wed, 19 Aug 2026 12:11:44 -0700 Subject: [PATCH 41/90] feat(website): `/_includes/FeatherIcon` ( Fixes #24 ) --- _includes/FeatherIcon.ps1 | 44 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 _includes/FeatherIcon.ps1 diff --git a/_includes/FeatherIcon.ps1 b/_includes/FeatherIcon.ps1 new file mode 100644 index 0000000..3444055 --- /dev/null +++ b/_includes/FeatherIcon.ps1 @@ -0,0 +1,44 @@ +<# +.SYNOPSIS + Includes Feather Icons +.DESCRIPTION + Includes a feather icon in the site. +.NOTES + Icons will be cached in memory to avoid repeated CDN requests. +.EXAMPLE + /_includes/FeatherIcon clipboard +.LINK + https://feathericons.com/ +#> +[OutputType('image/svg+xml')] +param( +# The feather icon name +[string] +$Icon = 'terminal', + +[uri] +$FeatherCDN = "https://cdn.jsdelivr.net/gh/feathericons/feather@latest/icons/" +) + +if (-not $script:FeatherIconCache) { + $script:FeatherIconCache = [Ordered]@{} +} + +$iconUri = + ( + $FeatherCDN -replace '^https?://' -replace '^', + 'https://' -replace '/$' + ), ( + $icon.ToLower() -replace '\.svg$' -replace '^/' -replace '$' -replace '\s', + '-' -replace '$', '.svg' + ) -join '/' + +if (-not $script:FeatherIconCache[$iconUri]) { + $script:FeatherIconCache[$iconUri] = try { + Invoke-RestMethod $iconUri + } catch { + Write-Warning "Could not get $iconUri : $_" + } +} + +$script:FeatherIconCache[$iconUri].OuterXml From 84ac6ba5ed61c1608edcf730ee54b26eb23703d8 Mon Sep 17 00:00:00 2001 From: James Brundage <+@users.noreply.github.com> Date: Wed, 19 Aug 2026 12:12:03 -0700 Subject: [PATCH 42/90] feat(website): `/_includes/Palette` ( Fixes #25 ) --- _includes/Palette.ps1 | 147 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 147 insertions(+) create mode 100644 _includes/Palette.ps1 diff --git a/_includes/Palette.ps1 b/_includes/Palette.ps1 new file mode 100644 index 0000000..407dc64 --- /dev/null +++ b/_includes/Palette.ps1 @@ -0,0 +1,147 @@ +<# +.SYNOPSIS + Includes a palette selector +.DESCRIPTION + Includes a palette selector and randomized palette switcher. + + This allows the page to use multiple color palettes. +#> +param( +# The source for all palette information +[uri] +$AllPalettesSource = 'https://4bitcss.com/Palettes.json', + +# The Palette CDN. This is the root URL of all palettes. +[uri] +$PaletteCDN = 'https://cdn.jsdelivr.net/gh/2bitdesigns/4bitcss@latest/css/', + +# The identifier for the palette ` +$( + foreach ($palette in $script:AllPalettes.psobject.Properties) { + $paletteName = $palette.name + $palette = $palette.value + $selectedPalette = if ($defaultPalette -and $defaultPalette -eq $paletteName) { " selected='true'"} else { '' } + "" + } +) + + + + +"@ + +$HTML = @" + +$PaletteSelector +"@ + +$HTML \ No newline at end of file From d02ec024db62ac2ba99143dc5a592085cb5404bc Mon Sep 17 00:00:00 2001 From: James Brundage <+@users.noreply.github.com> Date: Wed, 19 Aug 2026 12:12:11 -0700 Subject: [PATCH 43/90] feat(website): `/_includes/CopyCode` ( Fixes #26 ) --- _includes/CopyCode.ps1 | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 _includes/CopyCode.ps1 diff --git a/_includes/CopyCode.ps1 b/_includes/CopyCode.ps1 new file mode 100644 index 0000000..3440e22 --- /dev/null +++ b/_includes/CopyCode.ps1 @@ -0,0 +1,22 @@ +<# +.SYNOPSIS + Includes a CopyCode button +.DESCRIPTION + Includes a copy-to-clipboard near all code blocks. +#> +[OutputType('text/html')] +param() +"" +" + +" \ No newline at end of file From c5b1941c67208789338ad94ae177e49871998108 Mon Sep 17 00:00:00 2001 From: James Brundage <+@users.noreply.github.com> Date: Wed, 19 Aug 2026 12:12:26 -0700 Subject: [PATCH 44/90] feat(website): `/_includes/Sitemap` ( Fixes #27 ) --- _includes/Sitemap.ps1 | 86 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 _includes/Sitemap.ps1 diff --git a/_includes/Sitemap.ps1 b/_includes/Sitemap.ps1 new file mode 100644 index 0000000..04ddbc7 --- /dev/null +++ b/_includes/Sitemap.ps1 @@ -0,0 +1,86 @@ +<# +.SYNOPSIS + Includes a Sitemap +.DESCRIPTION + Includes a sitemap +.LINK + https://en.wikipedia.org/wiki/Sitemaps +#> +[OutputType('application/xml')] +param( +# A root url for the website +[uri] +$Url, + +# A collection of all pages +# The keys should be the urls. +[Alias('Pages')] +[Collections.IDictionary] +$PagesByUrl, + +# An optional list of items to disallow +[SupportsWildcards()] +[Alias('Hide','Hidden','NoIndex','NoSitemap')] +[string[]] +$Disallow +) + +# If there were no pages, there is no sitemap +if (-not $PagesByUrl.Count) { + return +} + + +# A sitemap is just a bit of XML +$sitemap = @( + '' + + :nextPage foreach ($key in $PagesByUrl.Keys) { + $keyUri = $key -as [Uri] + $page = $PagesByUrl[$key] + + # Skip any page that is not html + if ($page.Extension -ne 'html') { continue } + + # Skip any explicitly disallowed pages + if ($Disallow) { + foreach ($disallowed in $Disallow) { + if ($keyUri.LocalPath -like "*$disallowed*") { continue nextPage } + if ($keyUri.AbsoluteUri -like "*$disallowed*") { continue nextPage } + } + } + + # If the page does not want to be indexed or sitemapped + # (or is explicitly hidden) + if ($page.NoIndex -or + $page.NoSitemap -or + $page.Hidden -or + $page.Hide + ) { continue } # continue. + + # Otherwise, it's in the sitemap + "" + + # If the url was already absolute + if ($keyUri.IsAbsoluteUri) { + "$key" # use it + } else { + # Otherwise, use our site url. + "$($url -replace '/$')/$($key -replace '^/')" + } + + # If the page has a date + if ($PagesByUrl[$key].Date -is [DateTime]) { + # that will be it's last modified + "$($PagesByUrl[$key].Date.ToString('yyyy-MM-dd'))" + } + + "" + } + '' +) + +# Cast our sitemap to XML. +# This will return the sitemap, or throw an exception if the XML is invalid. +[xml]$sitemap + From 33d4cb6966708206ee3da298cf8ea42a4060c1a9 Mon Sep 17 00:00:00 2001 From: James Brundage <+@users.noreply.github.com> Date: Wed, 19 Aug 2026 12:30:10 -0700 Subject: [PATCH 45/90] feat(website): `deploy.ps1` ( Fixes #22 ) Outputting sitemap --- deploy.ps1 | 1 + 1 file changed, 1 insertion(+) diff --git a/deploy.ps1 b/deploy.ps1 index 8774fba..a97c139 100644 --- a/deploy.ps1 +++ b/deploy.ps1 @@ -452,6 +452,7 @@ if ($PageUrl) { $sitemap.Save(( Join-Path $SiteRoot "sitemap.xml" )) + Get-Item (Join-Path $SiteRoot "sitemap.xml") } } From 7d7055a925d9f670cbd7dc81119884f0e95a32ab Mon Sep 17 00:00:00 2001 From: James Brundage <+@users.noreply.github.com> Date: Wed, 19 Aug 2026 12:30:34 -0700 Subject: [PATCH 46/90] feat(website): `config.ps1` ( Fixes #23 ) Including sitemap --- config.ps1 | 1 + 1 file changed, 1 insertion(+) diff --git a/config.ps1 b/config.ps1 index 4bd4f5d..44d4e60 100644 --- a/config.ps1 +++ b/config.ps1 @@ -2,6 +2,7 @@ Set-Alias /_includes/CopyCode ./_includes/CopyCode.ps1 Set-Alias /_includes/Palette ./_includes/Palette.ps1 Set-Alias /_includes/FeatherIcon ./_includes/FeatherIcon.ps1 +Set-Alias /_includes/Sitemap ./_includes/Sitemap.ps1 # Alias files we will use inline Set-Alias Matrix.css ./Matrix.css.ps1 From cedc3fe6c125da33acc9167db98fde77aff88975 Mon Sep 17 00:00:00 2001 From: James Brundage <+@users.noreply.github.com> Date: Wed, 19 Aug 2026 12:33:21 -0700 Subject: [PATCH 47/90] style(logo): `Matrix.svg.ps1` ( Fixes #28 ) --- Matrix.svg.ps1 | 51 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 Matrix.svg.ps1 diff --git a/Matrix.svg.ps1 b/Matrix.svg.ps1 new file mode 100644 index 0000000..5f4041f --- /dev/null +++ b/Matrix.svg.ps1 @@ -0,0 +1,51 @@ +<# +.SYNOPSIS + Matrix Logo +.DESCRIPTION + Logo for `Matrix` +.LINK + https://github.com/PoshWeb/Matrix +#> +param() + +$psChevron = ' + +' + +@" + + + $psChevron + $( + $scale = 1 + for ($scale = 1; $scale -lt 4; $scale += 0.5) { + $scaleFactor = 1/[Math]::Pow(2,($scale - 1)) + $upscale = 1/[Math]::Pow(2,($scale)) + $transform = (Scale $scaleFactor).CSS + + + "" + + "" + + "" + + "" + + + <#""#> + } + ) + + +"@ From f03b37b445146944dd15f6777a814fa9839bad7f Mon Sep 17 00:00:00 2001 From: James Brundage <+@users.noreply.github.com> Date: Wed, 19 Aug 2026 12:34:01 -0700 Subject: [PATCH 48/90] style(website): `Matrix.css.ps1` ( Fixes #15 ) --- Matrix.css.ps1 | 278 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 278 insertions(+) create mode 100644 Matrix.css.ps1 diff --git a/Matrix.css.ps1 b/Matrix.css.ps1 new file mode 100644 index 0000000..324e228 --- /dev/null +++ b/Matrix.css.ps1 @@ -0,0 +1,278 @@ +param( +[string]$PaletteName = 'cyberpunk', + +# The Google Font name +[Alias('FontName')][string]$Font = 'Roboto', + +# The Google Code Font name +[string]$CodeFont = 'CodeFont' +) + +# Know thyself +$mySelf = $MyInvocation.MyCommand + +# Any environment variables +foreach ($env in Get-ChildItem env:) { + # that are parameter names + if ($mySelf.Parameters[$env.Name] -and ( + # and are not already bound parameters + -not $PSBoundParameters.ContainsKey($env:Name) + )) { + # are mapped to the variable + $ExecutionContext.SessionState.PSVariable.Set( + $env:Name, + $env:Value + ) + } +} + + +$body = @" +body { + max-width:100%; + height:100vh; + font-family:'$Font', sans-serif +} +"@ + +$header = @" +header { + display:grid; + position:sticky; + grid-area:header; + grid-template-areas:"main-menu title options"; + grid-template-columns:1fr 3fr 1fr; + transform-style:preserve-3d; + top:0; + left:0; + max-width:100%; + height:auto; + z-index:10; + margin:1rem; + gap:0.5rem; + background:color-mix(in srgb, var(--background) 25%, transparent) +} + + +.title > svg { + display:block; + text-align:center +} + +.social { + display:flex; + flex-direction: column; + grid-area:social +} +.title { + grid-area:title; + place-self:center; + place-items:center; + text-align:center +} +.options-menu { + grid-area:options; + text-align: right; +} +.options-menu > summary { + list-style-type: none +} +.logo { + display:block; + width: 4.2rem; + height:4.2rem; +} +.logo-text { + text-align: center; +} +.main-menu { + grid-area: main-menu; + list-style-type: none; + display: flex; + flex-direction: column; +} +.main-menu > summary { + list-style-type: none +} +"@ + +$footer = @" +footer { + display:grid; + grid-area:footer; + position:sticky; + grid-template-rows:auto auto; + width:100%; + height:1vh; + bottom:0; + z-index:100 +} +"@ + +$article = @" +article { + background:color-mix(in srgb, var(--background) 50%, transparent) +} +"@ + +$popOver = @" +@keyframes fadeIn { + from { opacity: 0; } + to { opacity: 1; } +} + +[popover] { + opacity: 0; + animation: fadeIn 0.5s ease-in; +} +[popover]:popover-open { + opacity: 1; +} + +[popover] { + color: var(--foreground); + background-color: var(--background); + a { + color: var(--foreground) + } +} +"@ + +$anchors = @" +a, a:visited { text-decoration:none } +a:hover, a:focus { text-decoration:underline } +"@ + +$portrait = @" +@media (orientation: portrait) { + .row-or-column { flex-direction:column } + .logo { height:2.3rem } + .page-title, .site-title { + font-size:0.84rem; + line-height:0.66rem + } +} +"@ + +$landscape = @" +@media (orientation: landscape) { + .row-or-column { flex-direction:row } + .logo { height:4.2rem } + .site-title, .page-title { + font-size:1.23rem; + line-height:0.75rem + } +} +"@ + +$viewAskew = @" +@keyframes view-askew { + 0%,100% { transform: $( + (Scale 0.125 0.125).CSS + ) + } + 50% { transform: $( + (Scale 1 1).CSS + ) } + +} + +.viewAskew { + animation-name: view-askew; + animation-iteration-count: + infinite; animation-duration: 7s; + transform-origin: 50% 50% +} +"@ + +$tables = @" +table { width: 100% } +"@ + +@" +$body + +$anchors + +$header + +$footer + +$article + +$popover + +$tables + +$portrait + +$landscape + +$viewAskew + +fieldset { + border: 1px solid var(--foreground); + display: grid; + place-items: center; +} + +.foreground { + display:grid; + grid-template-rows:auto 1fr auto; + grid-template-areas:"header" "main" "footer" +} + +.main { + grid-area:main; + max-width:90%; + margin-top:10rem; + padding-left:5%; + padding-right:5%; + font-size:1.23em; + line-height:1.5rem +} + +pre, code { + font-family:'$CodeFont', monospace +} + +.row-or-column { + flex-direction:row +} +"@ + +$scrollProgress = @" +@keyframes grow-progress { + from { transform:scaleX(0) scaleY(0.5) } + to { transform:scaleX(1) scaleY(1) } +} +.scroll-progress { + width:100%; + height:1rem; + margin-top:auto; + margin-bottom:auto; + transform-origin:0 50%; + background:linear-gradient(to right, transparent, var(--foreground)); + animation:grow-progress auto linear; + animation-timeline:scroll() +} +"@ + +$scrollProgress + + +$highlightJSColors = @" +.hljs { + background:color-mix(in srgb, var(--background) 75%, transparent); + color:var(--foreground) +} +.hljs-number { color:var(--cyan) } +.hljs-type { color:var(--purple) } +.hljs-string { color:var(--brightWhite) } +.hljs-built_in { color:var(--brightBlue); font-weight:demibold } +.hljs-variable { color:var(--green); font-weight:demibold } +.hljs-comment { color:var(--brightGreen); font-weight:demibold } +.hljs-literal { color:var(--brightWhite) } +"@ + +$highlightJSColors \ No newline at end of file From f2fee2284245cf541aff010941e3f38786050ee6 Mon Sep 17 00:00:00 2001 From: James Brundage <+@users.noreply.github.com> Date: Wed, 19 Aug 2026 14:25:08 -0700 Subject: [PATCH 49/90] chore: Reorganizing site structure --- css/transform.html.ps1 | 137 -------------- {css => matrix/css}/compatible.html.ps1 | 13 ++ matrix/css/transform.html.ps1 | 219 ++++++++++++++++++++++ {dotnet => matrix/dotnet}/dotnet.html.ps1 | 0 4 files changed, 232 insertions(+), 137 deletions(-) delete mode 100644 css/transform.html.ps1 rename {css => matrix/css}/compatible.html.ps1 (97%) create mode 100644 matrix/css/transform.html.ps1 rename {dotnet => matrix/dotnet}/dotnet.html.ps1 (100%) diff --git a/css/transform.html.ps1 b/css/transform.html.ps1 deleted file mode 100644 index da5918c..0000000 --- a/css/transform.html.ps1 +++ /dev/null @@ -1,137 +0,0 @@ -param( -[string]$SampleImage = '/assets/dodge-matrix.gif' -) - -$Title = 'Matrix Transforms' - -function markdown { - @( - if ($args) { - $args - } - $allInput = @($input) - if ($allInput.Length) { - $allInput - } - ) -join [Environment]::NewLine | - ConvertFrom-Markdown | - Select-Object -ExpandProperty Html -} - -markdown @" - -# Matrix Transforms - -## How to use Matrix transforms. - -We can use Matrix transforms in two major ways: - -* We can manipulate points using a Matrix -* We can use a matrix as a transform in CSS - -This page demonstrates various animation transforms using Matrix. - -"@ - - -"" - -markdown @" - -### Mirroring - -We can mirror two images by using a negative scale. - -This can be done in CSS with the `scale()` function, which becomes a `matrix()`. - -To mirror points along X, we can use: - -~~~PowerShell -scale -1 1 -~~~ - -"@ - -@" -
-
- - -
-
-"@ - -"

This works horizontally and vertically

" - -@" -
-
- - -
-
-"@ - -"

Quad Mirror

" - -"" -"
" - "
" - "
" - "" - "" - "
" - "
" - "" - "" - "
" - "
" -"
" - -"" - -"

Transform animations

" - -"
" -$( - foreach ($n in 0..7) { - $animationName = "animatrix-rotate3d-$n" -"" - } -) -"
" - -return diff --git a/css/compatible.html.ps1 b/matrix/css/compatible.html.ps1 similarity index 97% rename from css/compatible.html.ps1 rename to matrix/css/compatible.html.ps1 index f82de10..c402474 100644 --- a/css/compatible.html.ps1 +++ b/matrix/css/compatible.html.ps1 @@ -1,3 +1,16 @@ +<# +.SYNOPSIS + CSS Compatibility +.DESCRIPTION + Matrix CSS Compatibility +.COMPONENT + /matrix/css/ +#> +[Reflection.AssemblyMetadata( + 'og:description', 'Matrix CSS Compatibility' +)] +param() + $Title = 'CSS Compatibility' ConvertFrom-Markdown -InputObject @" diff --git a/matrix/css/transform.html.ps1 b/matrix/css/transform.html.ps1 new file mode 100644 index 0000000..914f294 --- /dev/null +++ b/matrix/css/transform.html.ps1 @@ -0,0 +1,219 @@ +<# +.SYNOPSIS + CSS Transforms +.DESCRIPTION + We can transform any element with CSS. +.COMPONENT + /matrix/css/ +#> +param( +# The sample image +[string]$SampleImage = '/assets/dodge-matrix.gif', + +# The duration of the sample image. +# This will be used as a base time for animations. +[TimeSpan]$SampleImageDuration = '00:00:01.8' +) + +function markdown { + @( + if ($args) { + $args + } + $allInput = @($input) + if ($allInput.Length) { + $allInput + } + ) -join [Environment]::NewLine | + ConvertFrom-Markdown | + Select-Object -ExpandProperty Html +} + +markdown @" + +# Matrix Transforms + +## How to use Matrix transforms. + +We can use Matrix transforms in two major ways: + +* We can manipulate points using a Matrix +* We can use a matrix as a transform in CSS + +This page demonstrates various animation transforms using Matrix. +"@ + + +"" + +markdown @" + +### Mirroring + +We can mirror two images by using a negative scale. + +This can be done in CSS with the `scale()` function, which becomes a `matrix()`. + +To mirror points along X, we can use: + +~~~PowerShell +scale -1 1 +~~~ + +"@ + +@" +
+
+ + +
+
+"@ + +"

This works horizontally and vertically

" + +@" +
+
+ + +
+
+"@ + + +$QuadTopLeft = ".quad-top-left { transform: $((Scale -1 1).Css)}" +$QuadTopRight = ".quad-top-right { transform: $((Scale 1 1).Css)}" +$QuadBottomLeft = ".quad-bottom-left { transform: $((Scale -1 -1).Css)}" +$QuadBottomRight = ".quad-bottom-right { transform: $((Scale 1 -1).Css)}" + + +@" +### Quad Mirror + +We can create a quad mirror effect by making four copies of an image. + +~~~css +$QuadTopLeft +$QuadTopRight +$QuadBottomLeft +$QuadBottomRight +~~~ +"@ | + ConvertFrom-Markdown | + Select-Object -ExpandProperty Html + + +"" +"
" + "
" + "
" + "" + "" + "
" + "
" + "" + "" + "
" + "
" +"
" + +"" + + +$flipX = @" +@keyframes flip-x { + from { + transform: $((Scale 1 1).CSS) + } + to { + transform: $((Scale -1 1).CSS) + } +} +.flip-x { + animation-name: flip-x; + animation-duration: 3.6s; + animation-iteration-count: infinite; +} +"@ + +$backFlipX = @" +@keyframes back-flip-x { + from { + transform: $((Scale -1 1).CSS) + } + to { + transform: $((Scale 1 1).CSS) + } +} +.back-flip-x { + animation-name: back-flip-x; + animation-duration: $($SampleImageDuration.TotalSeconds * 2)s; + animation-iteration-count: infinite; +} +"@ + +@" +### Transform animations + +We can use transforms in CSS animations. + +Just use @keyframes + +~~~css +$flipX +$backFlipX +~~~ +"@ | + ConvertFrom-Markdown | + Select-Object -ExpandProperty Html + + +"" + +"
" + + "
" + "" + "" + "
" + +"
" + +return diff --git a/dotnet/dotnet.html.ps1 b/matrix/dotnet/dotnet.html.ps1 similarity index 100% rename from dotnet/dotnet.html.ps1 rename to matrix/dotnet/dotnet.html.ps1 From 73ed3befad421a5f1955215b8f27a7d3dfc6213f Mon Sep 17 00:00:00 2001 From: James Brundage <+@users.noreply.github.com> Date: Wed, 19 Aug 2026 14:37:53 -0700 Subject: [PATCH 50/90] docs(website): `/matrix/svg/svg.html.ps1` ( Fixes #21 ) --- matrix/svg/svg.html.ps1 | 592 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 592 insertions(+) create mode 100644 matrix/svg/svg.html.ps1 diff --git a/matrix/svg/svg.html.ps1 b/matrix/svg/svg.html.ps1 new file mode 100644 index 0000000..1d9c532 --- /dev/null +++ b/matrix/svg/svg.html.ps1 @@ -0,0 +1,592 @@ +function copyz { + param( + [int] + $StepCount = 4, + + [double] + $InitialScale = 1, + + [double] + $FinalScale = 9, + + [string] + $Element = 'rect', + + [string[]] + $Attribute, + + [string[]] + $Children + ) + + if (-not $StepCount) { + $stepCount = 1 + } + + $attribute += @( + "fill='transparent'" + "stroke='currentColor' class='foreground-stroke'" + "x='0%' y='0%'" + "width='100%' height='100%'" + "transform-origin='50% 50%'" + ) + + $scaleStep = ($FinalScale - $InitialScale)/$StepCount + for ($scale = $InitialScale; [Math]::Abs($scale) -lt [Math]::Abs($FinalScale); $scale += $scaleStep) { + $scaleFactor = 1/[Math]::Pow(2,($scale - 1)) + + "<$element$( + if ($Attribute) { + " $attribute" + } + )$( + " transform='$((Scale $scaleFactor).CSS)'" + )>$($Children -join [Environment]::Newline)" + } +} + +# copyz + +# return + +@" + +# SVG Matrix + +SVG is a web native standard for scalable vector graphics. + +We can use Matrix to make transforms embedded in an SVG. + +SVG transforms can be applied a few ways: + +* [Transform Attribute](https://developer.mozilla.org/en-US/docs/Web/SVG/Reference/Attribute/transform) +* [GradientTransform Attribute](https://developer.mozilla.org/en-US/docs/Web/SVG/Reference/Attribute/gradientTransform) +* [PatternTransform Attribute](https://developer.mozilla.org/en-US/docs/Web/SVG/Reference/Attribute/patternTransform) + +These transforms tend to be limited to a 3x2 matrix (though technically should support both). + +We can always set use the [style attribute](https://developer.mozilla.org/en-US/docs/Web/SVG/Reference/Attribute/style) to provide a custom style, +or use the [class](https://developer.mozilla.org/en-US/docs/Web/SVG/Reference/Attribute/style) attribute to style our SVG using CSS. + +There are numerous things we can do with SVG transforms. + +For example, we can use a scale transform to give object apparent depth. + +If we want an object to appear twice as far away, we can scale it down by 0.5. + +If we want an object to appear four times as far away, we can scale it by 0.25. + +The general formula for apparent distance scaling is: + +~~~PowerShell +1/[Math]::Pow(2, `$scale - 1) +~~~ + +We can think of this a step function. + +~~~PowerShell +function copyz {$( + (Get-Command copyz).ScriptBlock +)} +~~~ + +"@ | ConvertFrom-Markdown | + Select-Object -ExpandProperty Html + +"" + +"
" + +"

4 steps

" +@" + + $(copyz 4) + +"@ + +"

8 steps

" +@" + + $(copyz 8) + +"@ + +"

16 steps

" + +@" + + $(copyz 16) + +"@ + + +"

32 steps

" + +@" + + $(copyz 32) + +"@ + +"

64 steps

" + +@" + + $(copyz 64) + +"@ + +"

128 steps

" + +$128Steps = @" + + $(copyz 128) + +"@ + +$128Steps + + +"

As the steps increase, the object seems deeper

" + +"

Drawing diagonals might help understand what is happenning

" + +"

The center of the X is the center of our perpsective

" + +@" + + + + $(copyz 64) + +"@ + +"

transform-origin

" + +"

Changing our

transform-origin
changes the center of the effect

" + +foreach ($origin in '0% 0%', '100% 0%', '0% 100%', '100% 100%') { +@" + +

transform-origin:$origin

+ + +$(if ($origin -eq '50% 50%') { + " + " +}) + + $( + $scale = 1 + foreach ($scale in 1..8) { + $scaleFactor = 1/[Math]::Pow(2,($scale - 1)) + "" + } + ) + +"@ +} + +"

Transform Origin Animation

" + +"

We can animate our transform origin with CSS keyframes

" + +$lookUpAndDown = @" +@keyframes look-up-and-down { + 0%, 100% { + transform-origin: 50% 50%; + } + 33% { + transform-origin: 50% 25%; + } + 66% { + transform-origin: 50% 75%; + } +} +.look-up-and-down { + animation-name: look-up-and-down; + animation-duration: 4.2s; + animation-iteration-count: infinite; +} +"@ + +"

+$lookUpAnddown
+
" + +@" + +"@ + +@" + + $( + copyz -Attribute "class='look-up-and-down'" -StepCount 64 + ) + +"@ + +"

We can look left and right

" + +$lookLeftAndRight = @" +@keyframes look-left-and-right { + 0%, 100% { + transform-origin: 50% 50%; + } + 33% { + transform-origin: 25% 50%; + } + 66% { + transform-origin: 75% 50%; + } +} +.look-left-and-right { + animation-name: look-left-and-right; + animation-duration: 4.2s; + animation-iteration-count: infinite; +} +"@ + +"

+$lookLeftAndRight
+
" + +@" + + $( + copyz -Attribute "class='look-left-and-right'" -StepCount 64 + ) + +"@ + +"

We can look around

" + +$lookAround = @" +@keyframes look-around { + 0%, 100% { + transform-origin: 50% 50%; + } + $([Math]::Round(1/5,4) * 100)% { + transform-origin: 25% 25%; + } + $([Math]::Round(2/5,4) * 100)% { + transform-origin: 75% 25%; + } + $([Math]::Round(3/5,4) * 100)% { + transform-origin: 25% 75%; + } + $([Math]::Round(4/5,4) * 100)% { + transform-origin: 75% 75%; + } +} +.look-around { + animation-name: look-around; + animation-duration: 8.4s; + animation-iteration-count: infinite; +} +"@ + +"" + +"

+$lookAround
+
" + +@" + + $( + copyz -Attribute "class='look-around'" -StepCount 64 + ) + +"@ + + +"

Motion

" + +"

We can animate the transform to give us motion

" + +@" + + $( + $scale = 1 + for ($scale = 1; $scale -lt 9; $scale += 0.125) { + $scaleFactor = 1/[Math]::Pow(2,($scale - 1)) + "" + "" + "" + } + ) + +"@ + +"

If we scale from our factor to 1, the object seems to get closer

" + +@" + + $( + $scale = 1 + for ($scale = 1; $scale -lt 9; $scale += 0.125) { + $scaleFactor = 1/[Math]::Pow(2,($scale - 1)) + "" + "" + "" + } + ) + +"@ + +"

If we scale from 1 to our factor, the object seems to get farther away

" + +@" + + $( + $scale = 1 + for ($scale = 1; $scale -lt 9; $scale += 0.125) { + $scaleFactor = 1/[Math]::Pow(2,($scale - 1)) + "" + "" + "" + } + ) + +"@ + +"

We can also transform the element itself, with all of our inner transforms intact

" + + +"" +@" + + $( + $scale = 1 + for ($scale = 1; $scale -lt 9; $scale += 0.125) { + $scaleFactor = 1/[Math]::Pow(2,($scale - 1)) + "" + "" + "" + } + ) + +"@ + +"

We can animate this, too

" + +"" + +@" + + $( + $scale = 1 + for ($scale = 1; $scale -lt 9; $scale += 0.125) { + $scaleFactor = 1/[Math]::Pow(2,($scale - 1)) + "" + "" + "" + } + ) + +"@ + +"

We can also animate our transform-origin as we animate our transform

" + +"

Let's revisit our lookaround examples, with some added motion

" + +@" + + $( + $scale = 1 + for ($scale = 1; $scale -lt 9; $scale += 0.125) { + $scaleFactor = 1/[Math]::Pow(2,($scale - 1)) + "" + "" + "" + } + ) + +"@ + +@" + + $( + $scale = 1 + for ($scale = 1; $scale -lt 9; $scale += 0.125) { + $scaleFactor = 1/[Math]::Pow(2,($scale - 1)) + "" + "" + "" + } + ) + +"@ + +@" + + $( + $scale = 1 + for ($scale = 1; $scale -lt 9; $scale += 0.125) { + $scaleFactor = 1/[Math]::Pow(2,($scale - 1)) + "" + "" + "" + } + ) + +"@ + + +@" +### Circles + +We can perform this magic trick with any shape. + +Using `` instead of `` produces some interesting results. +"@ | + ConvertFrom-Markdown | + Select-Object -ExpandProperty Html + + + +@" + + $( + copyz -Attribute @( + "cx='50%'" + "cy='50%'" + "r='25%'" + ) -StepCount 32 -Element circle + ) + +"@ + +"

We can also look up and down

" + +@" + + $( + copyz -Attribute @( + "class='look-up-and-down'" + "cx='50%'" + "cy='50%'" + "r='25%'" + ) -StepCount 64 -Element circle + ) + +"@ + +"

Or look left and right

" + +@" + + + $( + copyz -Attribute @( + "class='look-left-and-right'" + "cx='50%'" + "cy='50%'" + "r='25%'" + ) -StepCount 64 -Element circle + ) + + +"@ + + +$lookFarLeftAndRight = @" +@keyframes look-far-left-and-right { + 0%, 100% { + transform-origin: 50% 50%; + } + 33% { + transform-origin: -25% 50%; + } + 66% { + transform-origin: 125% 50%; + } +} +.look-far-left-and-right { + animation-name: look-far-left-and-right; + animation-duration: 4.2s; + animation-iteration-count: infinite; +} +"@ + + +@" + +We can use a transform-origin that exceeds 100%. + +This will make things appear outside of their original bounds. + +When animated, this can look like we are moving outside the original object. + +~~~css +$lookFarLeftAndRight +~~~ + +"@ | + ConvertFrom-Markdown | + Select-Object -ExpandProperty Html + +@" + + + $( + copyz -Attribute @( + "class='look-far-left-and-right'" + "cx='50%'" + "cy='50%'" + "r='25%'" + ) -StepCount 64 -Element circle + ) + +"@ + +"
" + +return \ No newline at end of file From 84364b861e62e80ab97c5d3a9b7e9fbe782ab665 Mon Sep 17 00:00:00 2001 From: James Brundage <+@users.noreply.github.com> Date: Wed, 19 Aug 2026 14:38:40 -0700 Subject: [PATCH 51/90] docs(website): `/matrix/powershell/powershell.html.ps1` ( Fixes #20 ) --- matrix/powershell/powershell.html.ps1 | 49 +++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 matrix/powershell/powershell.html.ps1 diff --git a/matrix/powershell/powershell.html.ps1 b/matrix/powershell/powershell.html.ps1 new file mode 100644 index 0000000..429dd7f --- /dev/null +++ b/matrix/powershell/powershell.html.ps1 @@ -0,0 +1,49 @@ +$cubeTranslationExample = { + # Constructing a cube using translation + + # Make a corner point + $corner = [Numerics.Vector3]::new(1,1,1) + + # Make a square by translating along X and Y + $square = @( + $corner + $corner | TranslateX 1 + $corner | TranslateX 1 | TranslateY 1 + $corner | TranslateY 1 + ) + + # Make a cube by translating the square along Z. + $cube = @( + $square + $square | + TranslateZ 1 + ) + + $cube +} + +@" + + +The Matrix module allows us to apply these transformations to a pipeline of points, using [css compatible](/css/compatible/) transforms. + +For example, let's construct the points in a cube + +~~~PowerShell +$($cubeTranslationExample) +~~~ + +This produces: +~~~ +$(. $cubeTranslationExample | Out-String) +~~~ + +The capability can be very powerful. + +It lets us take an object pipeline full of points and transform them any way we see fit. + +It also allows us to calculate complex information without having to do the math. + +"@ | + ConvertFrom-Markdown | + Select-Object -ExpandProperty Html From 17514067527be1a4aebc0cbe5cd1c0820ff7ce00 Mon Sep 17 00:00:00 2001 From: James Brundage <+@users.noreply.github.com> Date: Wed, 19 Aug 2026 15:51:58 -0700 Subject: [PATCH 52/90] docs(website): Adding Additional Subroot --- matrix/matrix.html.ps1 | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 matrix/matrix.html.ps1 diff --git a/matrix/matrix.html.ps1 b/matrix/matrix.html.ps1 new file mode 100644 index 0000000..9117514 --- /dev/null +++ b/matrix/matrix.html.ps1 @@ -0,0 +1,17 @@ +<# +.SYNOPSIS + Matrix +.DESCRIPTION + Transform Matrices in PowerShell +.NOTES + Currently just replicating the README within the layout +#> +[OutputType('text/html')] +param() + +$Title = 'Matrix' + +ConvertFrom-Markdown -Path ( + $PSScriptRoot | Split-Path | Join-Path -ChildPath 'README.md' +) -ErrorAction Ignore | + Select-Object -ExpandProperty Html From 183b2d25c58ae0a4f7abc23b76ac2f504a16dd94 Mon Sep 17 00:00:00 2001 From: James Brundage <+@users.noreply.github.com> Date: Wed, 19 Aug 2026 15:54:47 -0700 Subject: [PATCH 53/90] docs(website): Adding Additional Subroot --- matrix/css/css.html.ps1 | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 matrix/css/css.html.ps1 diff --git a/matrix/css/css.html.ps1 b/matrix/css/css.html.ps1 new file mode 100644 index 0000000..a70d11f --- /dev/null +++ b/matrix/css/css.html.ps1 @@ -0,0 +1,33 @@ +<# +.SYNOPSIS + CSS Matrix +.DESCRIPTION + Matrix +.LINK + https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API/Matrix_math_for_the_web +.COMPONENT + /matrix/css/ +#> +param() + +@' + +# CSS Matrix + +CSS loves matrix transformations! + +Whenever we `rotate`, `scale`, or `translate`, we are using a matrix transform. + +All those nice 3D effects? Matrix transforms. + +The `Matrix` module helps give us greater mastery of [matrix transformations](/matrix/css/transform/), +and gives us a way to make [css compatible](/matrix/css/compatible) transforms in PowerShell. + +Matrix maps [dotnet](/matrix/dotnet/) to [css](/matrix/css/) + +* `Matrix3x2` is a [CSS matrix()](https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Values/transform-function/matrix) +* `Matrix4x4` is a [CSS matrix3d()](https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Values/transform-function/matrix) + +'@ | + ConvertFrom-Markdown | + Select-Object -ExpandProperty Html \ No newline at end of file From bf427eb6b953fe2867734fdfc2a6120dd063aa60 Mon Sep 17 00:00:00 2001 From: James Brundage <+@users.noreply.github.com> Date: Wed, 19 Aug 2026 16:02:15 -0700 Subject: [PATCH 54/90] feat(website): `/_includes/Menu` ( Fixes #29 ) --- _includes/Menu.ps1 | 56 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 _includes/Menu.ps1 diff --git a/_includes/Menu.ps1 b/_includes/Menu.ps1 new file mode 100644 index 0000000..77ca04a --- /dev/null +++ b/_includes/Menu.ps1 @@ -0,0 +1,56 @@ +<# +.SYNOPSIS + Includes a Menu +.DESCRIPTION + + +#> +param( +[PSObject] +$Menu, + +[string] +$Name +) + + +filter menuToHtml { + + $menu = $_ + + foreach ($property in $Menu.psobject.properties) { + "
  • " + if ($property.Value -is [string] -and + $property.Value -match '^/' -or $property.Value -is [uri]) { + "$( + if ($property.Name -notmatch '^<') { + [Web.HttpUtility]::HtmlEncode($property.Name) + } else { + $property.Name + } + )" + } else { + "
    " + "$( + if ($property.Name -notmatch '^<') { + [Web.HttpUtility]::HtmlEncode($property.Name) + } else { + $property.Name + } + )" + "
      " + $property.Value | menuToHtml + "
    " + "
    " + } + "
  • " + } +} + +"" + "
      " + $menu | menuToHtml + "
    " +"
    " \ No newline at end of file From d3cdc9fde697f9a79dfa0bdba1e9f29340161049 Mon Sep 17 00:00:00 2001 From: James Brundage <+@users.noreply.github.com> Date: Wed, 19 Aug 2026 16:02:47 -0700 Subject: [PATCH 55/90] feat(website): `/_includes/Menu` ( Fixes #29 ) --- config.ps1 | 1 + 1 file changed, 1 insertion(+) diff --git a/config.ps1 b/config.ps1 index 44d4e60..b65ff58 100644 --- a/config.ps1 +++ b/config.ps1 @@ -3,6 +3,7 @@ Set-Alias /_includes/CopyCode ./_includes/CopyCode.ps1 Set-Alias /_includes/Palette ./_includes/Palette.ps1 Set-Alias /_includes/FeatherIcon ./_includes/FeatherIcon.ps1 Set-Alias /_includes/Sitemap ./_includes/Sitemap.ps1 +Set-Alias /_includes/Menu ./_includes/Menu.ps1 # Alias files we will use inline Set-Alias Matrix.css ./Matrix.css.ps1 From 1f0d56c9ca32f8c0f5a3032005346c7bceacfd25 Mon Sep 17 00:00:00 2001 From: James Brundage <+@users.noreply.github.com> Date: Wed, 19 Aug 2026 16:03:28 -0700 Subject: [PATCH 56/90] feat(website): `layout.ps1` ( Fixes #16 ) --- layout.ps1 | 243 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 243 insertions(+) create mode 100644 layout.ps1 diff --git a/layout.ps1 b/layout.ps1 new file mode 100644 index 0000000..6d83490 --- /dev/null +++ b/layout.ps1 @@ -0,0 +1,243 @@ +<# +.SYNOPSIS + `layout.ps1` +.DESCRIPTION + `layout.ps1` lays out a page. + + This is a simple and helpful scripting convention for web development. + + Just pipe to `./layout.ps1` + + A layout gives pages in a site a consistent way to render content + + `./layout.ps1` can layout content any way we want. + + This `./layout.ps1` places content within a standard frame. + + Feel free to copy and paste this code. + + Please document your parameters, and add NOTES. +.NOTES + This layout makes use of a few includes and a custom CSS function. + + Includes are commands that directly output content, often in `html` or `svg`. + + * `/_includes/CopyCode' includes a copy code link + * `/_includes/FeatherIcon` includes a feather icon + * `/_includes/Palette` includes a color palette selector + + + These should be initialized prior to use. +#> +param( +[uri] +$RepositoryUrl = $( + if ($env:GITHUB_REPOSITORY) { + "https://github.com/$env:GITHUB_REPOSITORY" + } else { + "https://github.com/PoshWeb/Matrix" + } +), + +[string] +$AnalyticsId, + +[string] +$PaletteName = @( + 'cyberpunk', 'Neon' | Get-Random +), + +# The Google Font name +[Alias('FontName')] +[string] +$Font = 'Roboto', + +# The Google Code Font name +[string] +$CodeFont = 'CodeFont', + +# If set, will not include highlight js +[switch] +$NoHighlight, + +[psobject] +$SiteMenu = $( + [PSCustomObject]@{ + Matrix = [PSCustomObject]@{ + CSS = [PSCustomObject]@{ + Matrix = '/matrix/css/' + Compatibility = '/matrix/css/compatible/' + Transforms = '/matrix/css/transform/' + } + HTML = '/matrix/html/' + PowerShell = [PSCustomObject]@{ + DotNet = '/matrix/dotnet/' + PowerShell = '/matrix/powershell/' + } + SVG = '/matrix/svg/' + } + } +), + +[uri] +$PageUrl +) + +# Gather all input using `$input` for maximum efficiency. +$allInput = @($input) + +# Declare a filter to turn things into HTML. +filter toHtml { + $in = $_ + + # XML lives rent-free in HTML + if ($in.OuterXml) {return $in.OuterXml} + + # Any object with an .html property + $inHtml = $in.Html + if ($inHtml) { + # should render that property + return $inHtml + } + + "$in" +} + + +# Know thyself +$mySelf = $MyInvocation.MyCommand + +# Any environment variables +foreach ($env in Get-ChildItem env:) { + # See if any environment variables map to parameter + # (after we remove any punctuation from the name) + $envName = $env.Name -replace '\p{P}' + if ( + # If they map + $mySelf.Parameters[$envName] -and + # and are not already bound + (-not $PSBoundParameters.ContainsKey($envName)) + ) { + # set them + $ExecutionContext.SessionState.PSVariable.Set( + $envName, + $( + # If the value looks like json + if ($env.Value -match '^\s{0,}[\[\{]') { + # convert it before we set the value. + ConvertFrom-Json -InputObject $env.Value + } + # If the value is a boolean string + elseif ($env.Value -match '^true|false$') { + # convert it to a boolean + $evn.Value -match 'true' + } + # Otherwise, directly map it. + else { + $env.Value + } + ) + ) + # After we set the variable, map it into `$psBoundParameters` + $PSBoundParameters[$envName] = + $ExecutionContext.SessionState.PSVariable.Get( + $envName + ).Value + } +} + + +$head = @( + # Analytics first (per recommendations) + if ($AnalyticsId) { + " + + " + } + # Basic viewport + "" + "" + + # If a title was set + if ($title) { + # use it + "$( + [Web.HttpUtility]::HtmlEncode($title) + )" + } + + # If a palette name was provided + if ($PaletteName) { + # link to the stylesheet + "" + } + + if (-not $NoHighlight) { + "" + '' + foreach ($language in 'css', 'svg', 'html','powershell') { + "" + } + } + + if ($PageUrl) { + "" + } else { + "" + } + +) + +$body = @( + "
    " + "
    " + "" + "
    " + "
    " + "" + "
    " + "

    Matrix

    " + "
    " + "
    " + "$(/_includes/FeatherIcon settings)" + "
    Palette$( + /_includes/Palette -DefaultPalette $PaletteName + )
    " + "
    " + + "
    " + "
    " + @($allInput | toHtml) -join [Environment]::NewLine + "
    " + "
    " + "
    " + /_includes/CopyCode +) + + +"" + "$head" + "$body" +"" \ No newline at end of file From 6614afca0fde06f6ba605d96958fb5d7bc34118f Mon Sep 17 00:00:00 2001 From: James Brundage <+@users.noreply.github.com> Date: Wed, 19 Aug 2026 16:06:10 -0700 Subject: [PATCH 57/90] docs(website): `/matrix/html` ( Fixes #30 ) --- matrix/html.html.ps1 | 275 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 275 insertions(+) create mode 100644 matrix/html.html.ps1 diff --git a/matrix/html.html.ps1 b/matrix/html.html.ps1 new file mode 100644 index 0000000..8c5f736 --- /dev/null +++ b/matrix/html.html.ps1 @@ -0,0 +1,275 @@ +$title = "HTML Matrix" + +@' +# HTML Matrix + +Transformation Matrixes are broadly supported in HTML. + +We can use Matrix to transform any element using it's style property. + +We can use Matrix to write [CSS Compatible](/matrix/css/compatible) transforms. + +There are numerous things we can do with SVG transforms. + +For example, we can use a scale transform to give object apparent depth. + +If we want an object to appear twice as far away, we can scale it down by 0.5. + +If we want an object to appear four times as far away, we can scale it by 0.25. + +The general formula for apparent distance scaling is: + +~~~PowerShell +1/[Math]::Pow(2, `$scale - 1) +~~~ + +We can make any object look like it is Z away by applying a scale of that formula. + +This page show some experiments with the technique. + +To get things to overlap property, we need to put things into the same frame of reference. + +We can do this with a little bit of css + +~~~css +/* Make an overlapping grid */ +.overlap { + place-items: center; display: grid; grid-template-rows: 1fr; grid-template-columns: 1fr; +} +/* Make every item in the grid be in row 1, column 1 */ +.overlap * { + grid-row: 1;grid-column: 1; +} +~~~ + +The inner element's box helps determine how much space the grid will occupy. + +Use an inline element, like ````, if we want the grid to occupy only one line of space. + +'@ | ConvertFrom-Markdown | + Select-Object -ExpandProperty Html + +@" + +
    + $( + $scale = 1 + foreach ($scale in 1..8) { + $scaleFactor = 1/[Math]::Pow(2,($scale - 1)) + "$scale" + } + ) +
    +"@ + + +"If we want the overlapping grid to block off more space, Use a block element, like ``

    ``" | + ConvertFrom-Markdown | + Select-Object -ExpandProperty html + +@" +
    + $( + $scale = 1 + foreach ($scale in 1..8) { + $scaleFactor = 1/[Math]::Pow(2,($scale - 1)) + "

    $scale

    " + } + ) +
    +"@ + + +$lookAround = @" +@keyframes look-around { + 0%, 100% { + transform-origin: 50% 50%; + } + 20% { + transform-origin: 0% 0%; + } + 40% { + transform-origin: 100% 0%; + } + 60% { + transform-origin: 0% 100%; + } + 80% { + transform-origin: 100% 100%; + } +} +.look-around { + animation-name: look-around; + animation-duration: 8.4s; + animation-iteration-count: infinite; +} +"@ + + +@" + +## Looking Around + +We can change where the scaling is centered by changing ``transform-origin``. + +This means we can perform the same animated look around we can in [svg](/svg). + +~~~css +$lookAround +~~~ +"@ | ConvertFrom-Markdown | + Select-Object -ExpandProperty Html + + +"" + +@" + +
    + $( + $scale = 1 + foreach ($scale in 1..8) { + $scaleFactor = 1/[Math]::Pow(2,($scale - 1)) + "

    $scale

    " + } + ) + +
    +"@ + + +$zProp = " +@property --z { + syntax: ''; + inherits: true; + initial-value: 1; +} +" + +$zVar = @" +calc( + 1 / pow( 2, + calc( + var(--z) - 1 + ) + ) +) +"@ + + +@" + +## z trick + +Since there is a uniform method of scaling, we can simplify it in a CSS class or two. + +If only there was some way for elements to let us know where they are in z space 🤔. + +`z-index` will work, but it has some cannonical drawbacks: + +1. `z-index` is an integer, not a number +2. A larger `z-index` is more visible, not less. + +I believe a better approach is using a CSS `` property to repesent z + +~~~css +$zProp +~~~ + +With this property in hand, we can easily calculate a dynamic scale content. + +~~~css +$zVar +~~~ + +Now we just need a class we can apply. + +Let us call it `z` + +~~~css +.z { + transform: scale($zVar); + opacity: $zVar +} +~~~ + +Putting it all together: + +~~~css +$zProp +.z { + transform: scale($zVar); + opacity: $zVar +} +~~~ + +Let's see z trick in action: +"@ | + ConvertFrom-Markdown | + Select-Object -ExpandProperty Html + +$zTrick = @" +$zProp +.z { + transform: scale($zVar); + opacity: $zVar +} + + +@keyframes z-move-down { + from { + transform-origin: 50% 50%; + } + to { + transform-origin: 500% 500%; + } +} + +.z-move { + animation-name: z-move-down; + animation-iteration-count: infinite; + animation-duration: 4.2s; +} + +$( + foreach ($n in 1..8) { + ".z-$n {--z: $n}" + } + foreach ($n in 1..8) { + foreach ($percent in 25, 50, 75) { + ".z-${n}-$percent {--z: $($n + $percent/100)}" + } + } +) + +"@ + +"" +"
    " +"

    1

    " +"

    2

    " +"

    3

    " +"

    4

    " +"
    " +return \ No newline at end of file From eb8e323308993559d2d3d4f950a7a4bfad26055d Mon Sep 17 00:00:00 2001 From: James Brundage <+@users.noreply.github.com> Date: Thu, 20 Aug 2026 13:23:00 -0700 Subject: [PATCH 58/90] feat: `Matrix4x4.get_MathML` ( Fixes #31 ) --- Types/Matrix4x4/get_MathML.ps1 | 18 ++++++++++++++++++ matrix/{dotnet => }/dotnet.html.ps1 | 0 matrix/{svg => }/svg.html.ps1 | 0 3 files changed, 18 insertions(+) create mode 100644 Types/Matrix4x4/get_MathML.ps1 rename matrix/{dotnet => }/dotnet.html.ps1 (100%) rename matrix/{svg => }/svg.html.ps1 (100%) diff --git a/Types/Matrix4x4/get_MathML.ps1 b/Types/Matrix4x4/get_MathML.ps1 new file mode 100644 index 0000000..d5ec8ad --- /dev/null +++ b/Types/Matrix4x4/get_MathML.ps1 @@ -0,0 +1,18 @@ +[xml]@" + +[ + +$( + foreach ($row in 1..4) { + "" + foreach ($col in 1..4) { + "$($this."M${row}${col}")" + } + "" + } +) + +] + +"@ + diff --git a/matrix/dotnet/dotnet.html.ps1 b/matrix/dotnet.html.ps1 similarity index 100% rename from matrix/dotnet/dotnet.html.ps1 rename to matrix/dotnet.html.ps1 diff --git a/matrix/svg/svg.html.ps1 b/matrix/svg.html.ps1 similarity index 100% rename from matrix/svg/svg.html.ps1 rename to matrix/svg.html.ps1 From f9c68078592ccb39935833ed1c1eaeeecd428c47 Mon Sep 17 00:00:00 2001 From: StartAutomating Date: Thu, 20 Aug 2026 20:23:58 +0000 Subject: [PATCH 59/90] feat: `Matrix4x4.get_MathML` ( Fixes #31 ) --- Matrix.types.ps1xml | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/Matrix.types.ps1xml b/Matrix.types.ps1xml index cb7b6c7..ffc0381 100644 --- a/Matrix.types.ps1xml +++ b/Matrix.types.ps1xml @@ -60,6 +60,30 @@ $this.M44 ))" + + MathML + + [xml]@" +<math display='block'> +<mo>[</mo> +<mtable> +$( + foreach ($row in 1..4) { + "<mtr>" + foreach ($col in 1..4) { + "<mtd><mn>$($this."M${row}${col}")</mn></mtd>" + } + "</mtr>" + } +) +</mtable> +<mo>]</mo> +</math> +"@ + + + + Points From 1ad7082745c15e9d718b89a7a1ddbded763a3503 Mon Sep 17 00:00:00 2001 From: James Brundage <+@users.noreply.github.com> Date: Thu, 20 Aug 2026 13:51:48 -0700 Subject: [PATCH 60/90] feat: `Matrix4x4.DefaultDisplay` ( Fixes #32 ) --- Types/Matrix4x4/DefaultDisplay.txt | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 Types/Matrix4x4/DefaultDisplay.txt diff --git a/Types/Matrix4x4/DefaultDisplay.txt b/Types/Matrix4x4/DefaultDisplay.txt new file mode 100644 index 0000000..8874cd0 --- /dev/null +++ b/Types/Matrix4x4/DefaultDisplay.txt @@ -0,0 +1,4 @@ +X +Y +Z +W \ No newline at end of file From 7d590d83d91777b92300ced5314476790c0f4c1b Mon Sep 17 00:00:00 2001 From: StartAutomating Date: Thu, 20 Aug 2026 20:52:16 +0000 Subject: [PATCH 61/90] feat: `Matrix4x4.DefaultDisplay` ( Fixes #32 ) --- Matrix.types.ps1xml | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/Matrix.types.ps1xml b/Matrix.types.ps1xml index ffc0381..b901f2a 100644 --- a/Matrix.types.ps1xml +++ b/Matrix.types.ps1xml @@ -35,6 +35,20 @@ $this.M32 System.Numerics.Matrix4x4 + + PSStandardMembers + + + DefaultDisplayPropertySet + + X + Y + Z + W + + + + CSS @@ -106,6 +120,13 @@ $this.M44 + + DefaultDisplay + X +Y +Z +W + From a6a114d6b424602f1c9a2788b8c2c5e63e66e90a Mon Sep 17 00:00:00 2001 From: James Brundage <+@users.noreply.github.com> Date: Thu, 20 Aug 2026 13:58:01 -0700 Subject: [PATCH 62/90] feat: `Matrix3x2.MathML` ( Fixes #33 ) --- Types/Matrix3x2/get_MathML.ps1 | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 Types/Matrix3x2/get_MathML.ps1 diff --git a/Types/Matrix3x2/get_MathML.ps1 b/Types/Matrix3x2/get_MathML.ps1 new file mode 100644 index 0000000..05cf0c8 --- /dev/null +++ b/Types/Matrix3x2/get_MathML.ps1 @@ -0,0 +1,23 @@ +<# +.SYNOPSIS + Matrix MathML +.DESCRIPTION + Gets the Matrix as a MathML representation of itself. +#> +[xml]@" + + ( + + $( + foreach ($row in 1..3) { + "" + foreach ($col in 1..2) { + "$($this."M${row}${col}")" + } + "" + } + ) + + ) + +"@ From c7e193a2cbef6fc40b16012feef90517a904a2e7 Mon Sep 17 00:00:00 2001 From: StartAutomating Date: Thu, 20 Aug 2026 20:59:08 +0000 Subject: [PATCH 63/90] feat: `Matrix3x2.MathML` ( Fixes #33 ) --- Matrix.types.ps1xml | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/Matrix.types.ps1xml b/Matrix.types.ps1xml index b901f2a..45f9617 100644 --- a/Matrix.types.ps1xml +++ b/Matrix.types.ps1xml @@ -18,6 +18,35 @@ $this.M32 ))" + + MathML + + <# +.SYNOPSIS + Matrix MathML +.DESCRIPTION + Gets the Matrix as a MathML representation of itself. +#> +[xml]@" +<math display='block'> + <mo>(</mo> + <mtable> + $( + foreach ($row in 1..3) { + "<mtr>" + foreach ($col in 1..2) { + "<mtd><mn>$($this."M${row}${col}")</mn></mtd>" + } + "</mtr>" + } + ) + </mtable> + <mo>)</mo> +</math> +"@ + + + Points From 7d5ef4c8290a56405ccc45eca315f5e67856be07 Mon Sep 17 00:00:00 2001 From: James Brundage <+@users.noreply.github.com> Date: Thu, 20 Aug 2026 15:26:43 -0700 Subject: [PATCH 64/90] feat: `Matrix3x2.DefaultDisplay` ( Fixes #34 ) --- Types/Matrix3x2/DefaultDisplay.txt | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 Types/Matrix3x2/DefaultDisplay.txt diff --git a/Types/Matrix3x2/DefaultDisplay.txt b/Types/Matrix3x2/DefaultDisplay.txt new file mode 100644 index 0000000..1770757 --- /dev/null +++ b/Types/Matrix3x2/DefaultDisplay.txt @@ -0,0 +1,3 @@ +X +Y +Z \ No newline at end of file From d6ec92fd3d855fd0f1782870c01160b1a7ebe953 Mon Sep 17 00:00:00 2001 From: StartAutomating Date: Thu, 20 Aug 2026 22:27:12 +0000 Subject: [PATCH 65/90] feat: `Matrix3x2.DefaultDisplay` ( Fixes #34 ) --- Matrix.types.ps1xml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/Matrix.types.ps1xml b/Matrix.types.ps1xml index 45f9617..cf24705 100644 --- a/Matrix.types.ps1xml +++ b/Matrix.types.ps1xml @@ -3,6 +3,19 @@ System.Numerics.Matrix3x2 + + PSStandardMembers + + + DefaultDisplayPropertySet + + X + Y + Z + + + + CSS @@ -59,6 +72,12 @@ $this.M32 + + DefaultDisplay + X +Y +Z + From 1a39e04db8fa755737b8aecbf32f403569cf4a0a Mon Sep 17 00:00:00 2001 From: James Brundage <+@users.noreply.github.com> Date: Fri, 21 Aug 2026 09:59:21 -0700 Subject: [PATCH 66/90] feat: `Matrix4x4.get_HTML` ( Fixes #35 ) --- Types/Matrix4x4/get_Html.ps1 | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 Types/Matrix4x4/get_Html.ps1 diff --git a/Types/Matrix4x4/get_Html.ps1 b/Types/Matrix4x4/get_Html.ps1 new file mode 100644 index 0000000..3f645c7 --- /dev/null +++ b/Types/Matrix4x4/get_Html.ps1 @@ -0,0 +1,35 @@ +<# +.SYNOPSIS + Gets Matrix Html +.DESCRIPTION + Gets an HTML representation of the Matrix. + + If there is an attached Content property, it will be rendered using the matrix. + + Otherwise, the Matrix's MathML representation will be rendered twice: + + * Once untransformed + * Once transformed using itself +#> +param() + +# If we have content +if ($this.Content) { + # put it in the matrix. + "
    " + if ($this.Content.OuterXml) { + $this.Content.OuterXml + } elseif ($this.Content.Html) { + $this.Content.Html + } else { + "$($this.Content)" + } + "
    " +} else { + # Otherwise, + $mathML = $this.MathML + $mathML.OuterXML # show the MathML + # and show it again, transformed. + $mathML.math.setAttribute('style', "transform:$($this.CSS)") + $mathML.OuterXML +} \ No newline at end of file From dfe2f8f13368c39036dee1c64754bfb91d9a3db6 Mon Sep 17 00:00:00 2001 From: StartAutomating Date: Fri, 21 Aug 2026 17:00:02 +0000 Subject: [PATCH 67/90] feat: `Matrix4x4.get_HTML` ( Fixes #35 ) --- Matrix.types.ps1xml | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/Matrix.types.ps1xml b/Matrix.types.ps1xml index cf24705..31198e5 100644 --- a/Matrix.types.ps1xml +++ b/Matrix.types.ps1xml @@ -122,6 +122,46 @@ $this.M44 ))"
    + + Html + + <# +.SYNOPSIS + Gets Matrix Html +.DESCRIPTION + Gets an HTML representation of the Matrix. + + If there is an attached Content property, it will be rendered using the matrix. + + Otherwise, the Matrix's MathML representation will be rendered twice: + + * Once untransformed + * Once transformed using itself +#> +param() + +# If we have content +if ($this.Content) { + # put it in the matrix. + "<section style='transform:$($this.CSS)'>" + if ($this.Content.OuterXml) { + $this.Content.OuterXml + } elseif ($this.Content.Html) { + $this.Content.Html + } else { + "$($this.Content)" + } + "</section>" +} else { + # Otherwise, + $mathML = $this.MathML + $mathML.OuterXML # show the MathML + # and show it again, transformed. + $mathML.math.setAttribute('style', "transform:$($this.CSS)") + $mathML.OuterXML +} + + MathML From 7e6e88086c94e9b47da8193cf154b4ad37027b6d Mon Sep 17 00:00:00 2001 From: James Brundage <+@users.noreply.github.com> Date: Fri, 21 Aug 2026 10:02:41 -0700 Subject: [PATCH 68/90] feat: `Matrix3x2.get_MathML` ( Fixes #33 ) Fixing operators and showing side by side with 4x4 --- Types/Matrix3x2/get_MathML.ps1 | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/Types/Matrix3x2/get_MathML.ps1 b/Types/Matrix3x2/get_MathML.ps1 index 05cf0c8..3175f46 100644 --- a/Types/Matrix3x2/get_MathML.ps1 +++ b/Types/Matrix3x2/get_MathML.ps1 @@ -6,7 +6,7 @@ #> [xml]@" - ( + [ $( foreach ($row in 1..3) { @@ -18,6 +18,9 @@ } ) - ) + ] + =$( + [Numerics.Matrix4x4]::Create($this).MathML.math.innerXml + ) "@ From 980efad243336ddf22022fc0f3cfd0d5fb7deedd Mon Sep 17 00:00:00 2001 From: James Brundage <+@users.noreply.github.com> Date: Fri, 21 Aug 2026 10:03:04 -0700 Subject: [PATCH 69/90] feat: `Matrix3x2.get_Html` ( Fixes #36 ) --- Types/Matrix3x2/get_Html.ps1 | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 Types/Matrix3x2/get_Html.ps1 diff --git a/Types/Matrix3x2/get_Html.ps1 b/Types/Matrix3x2/get_Html.ps1 new file mode 100644 index 0000000..3f645c7 --- /dev/null +++ b/Types/Matrix3x2/get_Html.ps1 @@ -0,0 +1,35 @@ +<# +.SYNOPSIS + Gets Matrix Html +.DESCRIPTION + Gets an HTML representation of the Matrix. + + If there is an attached Content property, it will be rendered using the matrix. + + Otherwise, the Matrix's MathML representation will be rendered twice: + + * Once untransformed + * Once transformed using itself +#> +param() + +# If we have content +if ($this.Content) { + # put it in the matrix. + "
    " + if ($this.Content.OuterXml) { + $this.Content.OuterXml + } elseif ($this.Content.Html) { + $this.Content.Html + } else { + "$($this.Content)" + } + "
    " +} else { + # Otherwise, + $mathML = $this.MathML + $mathML.OuterXML # show the MathML + # and show it again, transformed. + $mathML.math.setAttribute('style', "transform:$($this.CSS)") + $mathML.OuterXML +} \ No newline at end of file From fb9f02e918672d61d518d4666cb052fa7ffcaae6 Mon Sep 17 00:00:00 2001 From: StartAutomating Date: Fri, 21 Aug 2026 17:03:31 +0000 Subject: [PATCH 70/90] feat: `Matrix3x2.get_Html` ( Fixes #36 ) --- Matrix.types.ps1xml | 47 +++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 45 insertions(+), 2 deletions(-) diff --git a/Matrix.types.ps1xml b/Matrix.types.ps1xml index 31198e5..06b7d6f 100644 --- a/Matrix.types.ps1xml +++ b/Matrix.types.ps1xml @@ -31,6 +31,46 @@ $this.M32 ))"
    + + Html + + <# +.SYNOPSIS + Gets Matrix Html +.DESCRIPTION + Gets an HTML representation of the Matrix. + + If there is an attached Content property, it will be rendered using the matrix. + + Otherwise, the Matrix's MathML representation will be rendered twice: + + * Once untransformed + * Once transformed using itself +#> +param() + +# If we have content +if ($this.Content) { + # put it in the matrix. + "<section style='transform:$($this.CSS)'>" + if ($this.Content.OuterXml) { + $this.Content.OuterXml + } elseif ($this.Content.Html) { + $this.Content.Html + } else { + "$($this.Content)" + } + "</section>" +} else { + # Otherwise, + $mathML = $this.MathML + $mathML.OuterXML # show the MathML + # and show it again, transformed. + $mathML.math.setAttribute('style', "transform:$($this.CSS)") + $mathML.OuterXML +} + + MathML @@ -42,7 +82,7 @@ $this.M32 #> [xml]@" <math display='block'> - <mo>(</mo> + <mo>[</mo> <mtable> $( foreach ($row in 1..3) { @@ -54,7 +94,10 @@ $this.M32 } ) </mtable> - <mo>)</mo> + <mo>]</mo> + <mo>=</mo>$( + [Numerics.Matrix4x4]::Create($this).MathML.math.innerXml + ) </math> "@ From be48f1d65222817bfdaa24e6f2f72517c184f052 Mon Sep 17 00:00:00 2001 From: James Brundage <+@users.noreply.github.com> Date: Fri, 21 Aug 2026 10:05:03 -0700 Subject: [PATCH 71/90] feat: Quaternion.get_MathML` ( Fixes #37 ) --- Types/Quaternion/get_MathML.ps1 | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 Types/Quaternion/get_MathML.ps1 diff --git a/Types/Quaternion/get_MathML.ps1 b/Types/Quaternion/get_MathML.ps1 new file mode 100644 index 0000000..b53a1df --- /dev/null +++ b/Types/Quaternion/get_MathML.ps1 @@ -0,0 +1,32 @@ +<# +.SYNOPSIS + Matrix MathML +.DESCRIPTION + Gets the Matrix as a MathML representation of itself. +.NOTES + Also shows the equivalent `[Numerics.Matrtix4x4]` +#> +param() +[xml]@" + +[ + +$( + "" + foreach ($var in 'X','Y','Z','W') { + "" + "$var" + "=" + "$($this.$var)" + "" + } + "" +) + +] +=$( + [Numerics.Matrix4x4]::CreateFromQuaternion($this).MathML.math.innerXml +) + +"@ + From a2ee645fc4dc9a5ac23951facf640565a7a04526 Mon Sep 17 00:00:00 2001 From: StartAutomating Date: Fri, 21 Aug 2026 17:06:01 +0000 Subject: [PATCH 72/90] feat: Quaternion.get_MathML` ( Fixes #37 ) --- Matrix.types.ps1xml | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/Matrix.types.ps1xml b/Matrix.types.ps1xml index 06b7d6f..684072c 100644 --- a/Matrix.types.ps1xml +++ b/Matrix.types.ps1xml @@ -287,6 +287,44 @@ $matrix.M43 $matrix.M44 ) -join ', ' ))" + + + + MathML + + <# +.SYNOPSIS + Matrix MathML +.DESCRIPTION + Gets the Matrix as a MathML representation of itself. +.NOTES + Also shows the equivalent `[Numerics.Matrtix4x4]` +#> +param() +[xml]@" +<math display='block'> +<mo>[</mo> +<mtable> +$( + "<mtr>" + foreach ($var in 'X','Y','Z','W') { + "<mtd>" + "<mi>$var</mi>" + "<mo>=</mo>" + "<mn>$($this.$var)</mn>" + "</mtd>" + } + "</mtr>" +) +</mtable> +<mo>]</mo> +<mo>=</mo>$( + [Numerics.Matrix4x4]::CreateFromQuaternion($this).MathML.math.innerXml +) +</math> +"@ + + From 076ab8d056fbcec0a819bd5b3d766b352367f084 Mon Sep 17 00:00:00 2001 From: James Brundage <+@users.noreply.github.com> Date: Fri, 21 Aug 2026 10:07:34 -0700 Subject: [PATCH 73/90] feat: Quaternion.get_Html` ( Fixes #38 ) --- Types/Quaternion/get_Html.ps1 | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 Types/Quaternion/get_Html.ps1 diff --git a/Types/Quaternion/get_Html.ps1 b/Types/Quaternion/get_Html.ps1 new file mode 100644 index 0000000..3f645c7 --- /dev/null +++ b/Types/Quaternion/get_Html.ps1 @@ -0,0 +1,35 @@ +<# +.SYNOPSIS + Gets Matrix Html +.DESCRIPTION + Gets an HTML representation of the Matrix. + + If there is an attached Content property, it will be rendered using the matrix. + + Otherwise, the Matrix's MathML representation will be rendered twice: + + * Once untransformed + * Once transformed using itself +#> +param() + +# If we have content +if ($this.Content) { + # put it in the matrix. + "
    " + if ($this.Content.OuterXml) { + $this.Content.OuterXml + } elseif ($this.Content.Html) { + $this.Content.Html + } else { + "$($this.Content)" + } + "
    " +} else { + # Otherwise, + $mathML = $this.MathML + $mathML.OuterXML # show the MathML + # and show it again, transformed. + $mathML.math.setAttribute('style', "transform:$($this.CSS)") + $mathML.OuterXML +} \ No newline at end of file From 29f43e3de9c154b6ad36be7acd327fd54a991a77 Mon Sep 17 00:00:00 2001 From: StartAutomating Date: Fri, 21 Aug 2026 17:08:06 +0000 Subject: [PATCH 74/90] feat: Quaternion.get_Html` ( Fixes #38 ) --- Matrix.types.ps1xml | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/Matrix.types.ps1xml b/Matrix.types.ps1xml index 684072c..25c2bb5 100644 --- a/Matrix.types.ps1xml +++ b/Matrix.types.ps1xml @@ -289,6 +289,46 @@ $matrix.M44 ))" + + Html + + <# +.SYNOPSIS + Gets Matrix Html +.DESCRIPTION + Gets an HTML representation of the Matrix. + + If there is an attached Content property, it will be rendered using the matrix. + + Otherwise, the Matrix's MathML representation will be rendered twice: + + * Once untransformed + * Once transformed using itself +#> +param() + +# If we have content +if ($this.Content) { + # put it in the matrix. + "<section style='transform:$($this.CSS)'>" + if ($this.Content.OuterXml) { + $this.Content.OuterXml + } elseif ($this.Content.Html) { + $this.Content.Html + } else { + "$($this.Content)" + } + "</section>" +} else { + # Otherwise, + $mathML = $this.MathML + $mathML.OuterXML # show the MathML + # and show it again, transformed. + $mathML.math.setAttribute('style', "transform:$($this.CSS)") + $mathML.OuterXML +} + + MathML From e3444e07446e3d16e605492385a4e9d1e2fe64fc Mon Sep 17 00:00:00 2001 From: James Brundage <+@users.noreply.github.com> Date: Fri, 21 Aug 2026 10:11:46 -0700 Subject: [PATCH 75/90] feat: `Matrix3x2.get_MathML` ( Fixes #33 ) Adding notes --- Types/Matrix3x2/get_MathML.ps1 | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Types/Matrix3x2/get_MathML.ps1 b/Types/Matrix3x2/get_MathML.ps1 index 3175f46..1ab2d52 100644 --- a/Types/Matrix3x2/get_MathML.ps1 +++ b/Types/Matrix3x2/get_MathML.ps1 @@ -2,7 +2,9 @@ .SYNOPSIS Matrix MathML .DESCRIPTION - Gets the Matrix as a MathML representation of itself. + Gets the Matrix as a MathML representation of itself. +.NOTES + Also shows the equivalent `[Numerics.Matrtix4x4]` #> [xml]@" From 7601f79895e7992daeabe7df7d5d5b14a649da15 Mon Sep 17 00:00:00 2001 From: StartAutomating Date: Fri, 21 Aug 2026 17:12:17 +0000 Subject: [PATCH 76/90] feat: `Matrix3x2.get_MathML` ( Fixes #33 ) Adding notes --- Matrix.types.ps1xml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Matrix.types.ps1xml b/Matrix.types.ps1xml index 25c2bb5..44d2816 100644 --- a/Matrix.types.ps1xml +++ b/Matrix.types.ps1xml @@ -78,7 +78,9 @@ if ($this.Content) { .SYNOPSIS Matrix MathML .DESCRIPTION - Gets the Matrix as a MathML representation of itself. + Gets the Matrix as a MathML representation of itself. +.NOTES + Also shows the equivalent `[Numerics.Matrtix4x4]` #> [xml]@" <math display='block'> From 0ffc1ae62b946a02bd6b3af23bd1f5314768e946 Mon Sep 17 00:00:00 2001 From: James Brundage <+@users.noreply.github.com> Date: Fri, 21 Aug 2026 10:52:47 -0700 Subject: [PATCH 77/90] feat: `Quaternion.get_MathML` ( Fixes #37 ) Using `:` instead of `=` --- Types/Quaternion/get_MathML.ps1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Types/Quaternion/get_MathML.ps1 b/Types/Quaternion/get_MathML.ps1 index b53a1df..96621d0 100644 --- a/Types/Quaternion/get_MathML.ps1 +++ b/Types/Quaternion/get_MathML.ps1 @@ -16,7 +16,7 @@ $( foreach ($var in 'X','Y','Z','W') { "" "$var" - "=" + ":" "$($this.$var)" "" } From c793ede0b9a18a0d26b90bdd1e1eb2f74d9db982 Mon Sep 17 00:00:00 2001 From: StartAutomating Date: Fri, 21 Aug 2026 17:53:38 +0000 Subject: [PATCH 78/90] feat: `Quaternion.get_MathML` ( Fixes #37 ) Using `:` instead of `=` --- Matrix.types.ps1xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Matrix.types.ps1xml b/Matrix.types.ps1xml index 44d2816..889410f 100644 --- a/Matrix.types.ps1xml +++ b/Matrix.types.ps1xml @@ -352,7 +352,7 @@ $( foreach ($var in 'X','Y','Z','W') { "<mtd>" "<mi>$var</mi>" - "<mo>=</mo>" + "<mo>:</mo>" "<mn>$($this.$var)</mn>" "</mtd>" } From 769e1a054621bec0cca723ace579bbd2240d08c3 Mon Sep 17 00:00:00 2001 From: James Brundage <+@users.noreply.github.com> Date: Fri, 21 Aug 2026 11:05:47 -0700 Subject: [PATCH 79/90] feat: `Quaternion.DefaultDisplay` ( Fixes #39 ) --- Types/Quaternion/DefaultDisplay.txt | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 Types/Quaternion/DefaultDisplay.txt diff --git a/Types/Quaternion/DefaultDisplay.txt b/Types/Quaternion/DefaultDisplay.txt new file mode 100644 index 0000000..8874cd0 --- /dev/null +++ b/Types/Quaternion/DefaultDisplay.txt @@ -0,0 +1,4 @@ +X +Y +Z +W \ No newline at end of file From e1c5350f18bf0e774ff95fcdd90f1c9dbb33bd56 Mon Sep 17 00:00:00 2001 From: StartAutomating Date: Fri, 21 Aug 2026 18:06:12 +0000 Subject: [PATCH 80/90] feat: `Quaternion.DefaultDisplay` ( Fixes #39 ) --- Matrix.types.ps1xml | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/Matrix.types.ps1xml b/Matrix.types.ps1xml index 889410f..3f8d8c8 100644 --- a/Matrix.types.ps1xml +++ b/Matrix.types.ps1xml @@ -265,6 +265,20 @@ W System.Numerics.Quaternion + + PSStandardMembers + + + DefaultDisplayPropertySet + + X + Y + Z + W + + + + CSS @@ -369,6 +383,13 @@ $( + + DefaultDisplay + X +Y +Z +W + \ No newline at end of file From fba5d5fffeaa119c7ef5cecff91f49ce84fe5516 Mon Sep 17 00:00:00 2001 From: James Brundage <+@users.noreply.github.com> Date: Sat, 22 Aug 2026 16:36:31 -0700 Subject: [PATCH 81/90] feat(website): `layout.ps1` ( Fixes #16 ) Making Layout more generic and updating menu --- layout.ps1 | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/layout.ps1 b/layout.ps1 index 6d83490..1ea2021 100644 --- a/layout.ps1 +++ b/layout.ps1 @@ -43,9 +43,7 @@ $RepositoryUrl = $( $AnalyticsId, [string] -$PaletteName = @( - 'cyberpunk', 'Neon' | Get-Random -), +$PaletteName = 'cyberpunk', # The Google Font name [Alias('FontName')] @@ -65,20 +63,32 @@ $SiteMenu = $( [PSCustomObject]@{ Matrix = [PSCustomObject]@{ CSS = [PSCustomObject]@{ - Matrix = '/matrix/css/' + "CSS Matrix" = '/matrix/css/' Compatibility = '/matrix/css/compatible/' Transforms = '/matrix/css/transform/' } - HTML = '/matrix/html/' + HTML = [PSCustomObject]@{ + "HTML Matrix" = '/matrix/html/' + "MathML Matrix" = '/matrix/mathml/' + "SVG Matrix" = '/matrix/svg/' + } PowerShell = [PSCustomObject]@{ DotNet = '/matrix/dotnet/' PowerShell = '/matrix/powershell/' - } - SVG = '/matrix/svg/' + } } } ), +[string] +$SiteName = $( + if ($env:GITHUB_REPOSITORY) { + @($env:GITHUB_REPOSITORY -split '/', 2)[-1] + } else { + 'Matrix' + } +), + [uri] $PageUrl ) @@ -186,10 +196,10 @@ $head = @( } if ($PageUrl) { - "" + "" } else { "" } @@ -215,10 +225,10 @@ $body = @( "
    " "
    " "" "
    " - "

    Matrix

    " + "

    $siteName

    " "" "
    " "$(/_includes/FeatherIcon settings)" From 74cc26ec094afdab1f55377db05a78a3836bb7b9 Mon Sep 17 00:00:00 2001 From: James Brundage <+@users.noreply.github.com> Date: Sat, 22 Aug 2026 16:43:52 -0700 Subject: [PATCH 82/90] chore(website): Minor moves and updates --- Matrix.css.ps1 | 16 ---------------- config.ps1 | 2 ++ matrix/css/css.html.ps1 | 2 +- matrix/{powershell => }/powershell.html.ps1 | 0 4 files changed, 3 insertions(+), 17 deletions(-) rename matrix/{powershell => }/powershell.html.ps1 (100%) diff --git a/Matrix.css.ps1 b/Matrix.css.ps1 index 324e228..a70eca8 100644 --- a/Matrix.css.ps1 +++ b/Matrix.css.ps1 @@ -11,22 +11,6 @@ param( # Know thyself $mySelf = $MyInvocation.MyCommand -# Any environment variables -foreach ($env in Get-ChildItem env:) { - # that are parameter names - if ($mySelf.Parameters[$env.Name] -and ( - # and are not already bound parameters - -not $PSBoundParameters.ContainsKey($env:Name) - )) { - # are mapped to the variable - $ExecutionContext.SessionState.PSVariable.Set( - $env:Name, - $env:Value - ) - } -} - - $body = @" body { max-width:100%; diff --git a/config.ps1 b/config.ps1 index b65ff58..9cebda9 100644 --- a/config.ps1 +++ b/config.ps1 @@ -10,3 +10,5 @@ Set-Alias Matrix.css ./Matrix.css.ps1 Set-Alias Matrix.svg ./Matrix.svg.ps1 Set-Alias /Matrix.css ./Matrix.css.ps1 Set-Alias /Matrix.svg ./Matrix.svg.ps1 + +$env:PaletteName = 'cyberpunk', 'Neon' | Get-Random \ No newline at end of file diff --git a/matrix/css/css.html.ps1 b/matrix/css/css.html.ps1 index a70d11f..4fa0393 100644 --- a/matrix/css/css.html.ps1 +++ b/matrix/css/css.html.ps1 @@ -23,7 +23,7 @@ All those nice 3D effects? Matrix transforms. The `Matrix` module helps give us greater mastery of [matrix transformations](/matrix/css/transform/), and gives us a way to make [css compatible](/matrix/css/compatible) transforms in PowerShell. -Matrix maps [dotnet](/matrix/dotnet/) to [css](/matrix/css/) +Matrix maps [dotnet](/matrix/dotnet/) to [css](/matrix/css/). * `Matrix3x2` is a [CSS matrix()](https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Values/transform-function/matrix) * `Matrix4x4` is a [CSS matrix3d()](https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Values/transform-function/matrix) diff --git a/matrix/powershell/powershell.html.ps1 b/matrix/powershell.html.ps1 similarity index 100% rename from matrix/powershell/powershell.html.ps1 rename to matrix/powershell.html.ps1 From 6106c358b1a0013599ecdb810d0f30f102f3ba01 Mon Sep 17 00:00:00 2001 From: James Brundage <+@users.noreply.github.com> Date: Sat, 22 Aug 2026 16:44:43 -0700 Subject: [PATCH 83/90] feat(website): `/matrix/mathml/` ( Fixes #40 ) --- matrix/mathml.html.ps1 | 87 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 matrix/mathml.html.ps1 diff --git a/matrix/mathml.html.ps1 b/matrix/mathml.html.ps1 new file mode 100644 index 0000000..b4546f2 --- /dev/null +++ b/matrix/mathml.html.ps1 @@ -0,0 +1,87 @@ +<# +.SYNOPSIS + MathML Matrix +.DESCRIPTION + Matrix Math and MathML +#> +[OutputType('text/html')] +param() + +$Title = 'MathML Matrix' + + +@' + +## MathML Matrix + +A Matrix is just Math. + +MathML can show math inside of HTML. + +To show a matrix as a MathML matrix, we just need to access the `.MathML` property. + +~~~PowerShell +(Scale3d 3 2 1).MathML +~~~ + +'@ | + ConvertFrom-Markdown | + Select-Object -ExpandProperty Html + +(Scale3d 3 2 1).MathML + +@' + +We can also preview the matrix by accessing another property: `.html` + +~~~PowerShell +(Scale3d 3 2 1).Html +~~~ + +By default, this will show the matrix twice. + +Once in it's original form, and once transformed by itself. + +'@ | + ConvertFrom-Markdown | + Select-Object -ExpandProperty Html + +(Scale3d 3 2 1).Html + + +@' + +A Matrix3x2 and a Quaternion can both be converted to a Matrix4x4 + +We show the equivalent matrix side by side + +~~~PowerShell +(Scale 1 0.5).MathML +(Quaternion 0.5 0.5 0.5 1).MathML +~~~ +'@ | + ConvertFrom-Markdown | + Select-Object -ExpandProperty Html + + +(Scale 1 0.5).MathML + +(Quaternion 0 0 0 1).MathML + +@' + +We can also attach our own .Content property to the matrix: + +~~~PowerShell +Scale -1 1 | + Add-Member NoteProperty Content "

    Backwards

    " -Force -PassThru | + Select-Object -ExpandProperty Html +~~~ +'@ | + ConvertFrom-Markdown | + Select-Object -ExpandProperty Html + + +Scale -1 1 | + Add-Member NoteProperty Content "

    Backwards

    " -Force -PassThru | + Select-Object -ExpandProperty Html \ No newline at end of file From b11e60c250fff13a71782142ba4fd469ebc83f96 Mon Sep 17 00:00:00 2001 From: James Brundage <+@users.noreply.github.com> Date: Sat, 22 Aug 2026 16:59:09 -0700 Subject: [PATCH 84/90] feat(website): `/matrix/mathml/` ( Fixes #40 ) --- matrix/mathml.html.ps1 | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/matrix/mathml.html.ps1 b/matrix/mathml.html.ps1 index b4546f2..1217b7f 100644 --- a/matrix/mathml.html.ps1 +++ b/matrix/mathml.html.ps1 @@ -30,8 +30,47 @@ To show a matrix as a MathML matrix, we just need to access the `.MathML` proper (Scale3d 3 2 1).MathML + +@' + +### Matrix3x2 + +A 2D Matrix (`Matrix3x2`) can be mapped to a 3D Matrix (`Matrix4x4`). + +When we show a 2D Matrix's MathML, we show both the `matrix` and and it's equivalent `matrix3d` + +~~~PowerShell +(Scale 1 2).MathML +~~~ +'@ | + ConvertFrom-Markdown | + Select-Object -ExpandProperty Html + +(Scale 1 2).MathML + @' +### Quaternion + +A Quaternion (`[Numerics.Quaternion]`) can be mapped to a 3D Matrix (`[Numerics.Matrix4x4]`). + +When we show a Quaternion's MathML, we show both the `[Numerics.Quaternion]` and and it's equivalent `matrix3d` + +~~~PowerShell +(Quaternion Identity).MathML +~~~ +'@ | + ConvertFrom-Markdown | + Select-Object -ExpandProperty Html + +(Quaternion Identity).MathML + +@' + +### MathML in HTML + +MathML obviously works fine in html. + We can also preview the matrix by accessing another property: `.html` ~~~PowerShell From e93dfc151d6b39f3e3229c4f5661d816ff27c9b4 Mon Sep 17 00:00:00 2001 From: James Brundage <+@users.noreply.github.com> Date: Sat, 22 Aug 2026 17:03:49 -0700 Subject: [PATCH 85/90] feat: `Matrix.ps1` ( Fixes #2 ) Some more inner docs, and fixing return method scenario. --- Matrix.ps1 | 39 ++++++++++++++++++++++----------------- 1 file changed, 22 insertions(+), 17 deletions(-) diff --git a/Matrix.ps1 b/Matrix.ps1 index 0a342b4..dd1817d 100644 --- a/Matrix.ps1 +++ b/Matrix.ps1 @@ -132,7 +132,7 @@ 'Matrix3x2', 'Matrix2d', 'Matrix3d', - 'Quaternion', + 'Quaternion', 'Skew', 'SkewX', 'SkewY', @@ -262,7 +262,7 @@ filter cssunit { # Then convert all of our arguments into units $ArgumentList = @( $ArgumentList | cssunit -) +) -ne $null # Next we will be determine the right matrix transform # Switch based off the name. @@ -292,7 +292,7 @@ switch ($myName) { $MatrixType = [Numerics.Matrix4x4] $Member = 'CreateRotationZ' $ArgumentList = $ArgumentList[0] - } + } Rotate3d { # Rotate3d is the complicated one. # It took some digging, but the CSS working defines rotate3d in matrix form @@ -314,28 +314,33 @@ switch ($myName) { # The formula requires each value squared, so do that now $x2, $y2, $z2 = [Math]::Pow($x, 2), [Math]::Pow($y,2), [Math]::Pow($z, 2) # It also defines the angle as `alpha` - $alpha = $ArgumentList[3] -as [single] - # And then uses this bit of trig to find a point in the unit circle + # Sadly, it does not denote the direction, + # and testing indicates that it flips the angle. + $alpha = ($ArgumentList[3] -as [single]) * -1 + + # Some light trig gives us `$sc`, + # which is used throughout the following matrix $sc = [Math]::Sin($alpha/2) * [Math]::Cos($alpha/2) - # and this to find the max size of the square, given that angle + # `$sq` is the square of the sine of this angle, + # and is also used throughout the matrix. $sq = [Math]::Pow([Math]::Sin($alpha/2), 2) # This next bit of complexity is translated directly from the reference. # With spacing and docs added for clarity. $ArgumentList = @( - #M 1 1 + #M 1 1 (ScaleX) 1 - (2 * ($y2 + $z2) * $sq) # M 1 2 2 * (($x * $y * $sq) - ($z * $sc)) - # M 1 3 + # M 1 3 (Rotation Y) 2 * (($x * $z * $sq) + ($y * $sc)) # M 1 4 0 - # M 2 1 + # M 2 1 ( Rotation Z ) 2 * (($x * $y * $sq) + ($z * $sc)) - # M 2 2 + # M 2 2 ( Scale Y) 1 - (2 * ($x2 + $z2) * $sq) # M 2 3 @@ -347,20 +352,20 @@ switch ($myName) { # M 3 1 2 * (($x * $z * $sq) - ($y * $sc)) - # M 3 2 + # M 3 2 ( Rotation X ) 2 * (($y * $z * $sq) + ($x * $sc)) - # M 3 3 + # M 3 3 (Scale Z) 1.0 - (2 * ($x2 + $y2) * $sq) # M 3 4 0 - # M 4 1 - 0 - # M 4 2 + # M 4 1 ( Translate X ) + 0 + # M 4 2 ( Translate Y ) 0 - # M 4 3 + # M 4 3 ( Translate Z ) 0 # M 4 4 1 @@ -488,7 +493,7 @@ if ($Member -eq 'Create' -and $ArgumentList[0] -is $matrixType) { # Create the matrix by invoking the member # (or just returning the property) $matrix = - if ($matrixType::$member.Invoke) { + if ($matrixType::$member.Invoke) { $matrixType::$Member.Invoke($ArgumentList) } else { $matrixType::$Member From 44cd67d8fbeffbd3f198e1c545a04bc4310139f1 Mon Sep 17 00:00:00 2001 From: James Brundage <+@users.noreply.github.com> Date: Sat, 22 Aug 2026 17:06:49 -0700 Subject: [PATCH 86/90] fix(tests): Updating tests to account for rotation flip --- Matrix.psd1 | 3 ++- Matrix.tests.ps1 | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/Matrix.psd1 b/Matrix.psd1 index fdfc66f..01710b5 100644 --- a/Matrix.psd1 +++ b/Matrix.psd1 @@ -81,7 +81,6 @@ VariablesToExport = 'Matrix' AliasesToExport = @( 'Matrix4x4', 'Matrix3x2', 'Matrix2d', 'Matrix3d','Quaternion' - 'Scale', 'ScaleX', 'ScaleY', @@ -166,6 +165,8 @@ and we can manipulate objects in 2D or 3D the same way a webpage would. } # End of PSData hashtable + Recommends = 'Vector' + } # End of PrivateData hashtable # HelpInfo URI of this module diff --git a/Matrix.tests.ps1 b/Matrix.tests.ps1 index de1de20..2d5e8c4 100644 --- a/Matrix.tests.ps1 +++ b/Matrix.tests.ps1 @@ -70,10 +70,10 @@ describe Matrix { $rotated.Y | Should -Be 1 $rotated.Z | Should -Be 1 } - + it 'Can Rotated3d' { (Rotate3d 1 1 1 30deg).CSS | - Should -Be 'matrix3d(0.9106836, -0.2440169, 0.3333333, 0, 0.3333333, 0.9106836, -0.2440169, 0, -0.2440169, 0.3333333, 0.9106836, 0, 0, 0, 0, 1)' + Should -Be 'matrix3d(0.9106836, 0.3333333, -0.2440169, 0, -0.2440169, 0.9106836, 0.3333333, 0, 0.3333333, -0.2440169, 0.9106836, 0, 0, 0, 0, 1)' } } } From e25ff5822e0f6d2d3b9a5dd1e736ba95347a855d Mon Sep 17 00:00:00 2001 From: James Brundage <+@users.noreply.github.com> Date: Sat, 22 Aug 2026 17:27:25 -0700 Subject: [PATCH 87/90] feat(website): `Matrix.html.ps1` ( Fixes #14 ) --- Matrix.html.ps1 | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 Matrix.html.ps1 diff --git a/Matrix.html.ps1 b/Matrix.html.ps1 new file mode 100644 index 0000000..67d9d4a --- /dev/null +++ b/Matrix.html.ps1 @@ -0,0 +1,15 @@ +<# +.SYNOPSIS + Matrix Website +.DESCRIPTION + Root of the Matrix Website +.NOTES + Currently just replicating the README within the layout +#> +[OutputType('text/html')] +param() + +$Title = 'Matrix' + +ConvertFrom-Markdown -Path ./README.md -ErrorAction Ignore | + Select-Object -ExpandProperty Html From ae9377f6f1f2a63ad8c016a32b2ff07865644180 Mon Sep 17 00:00:00 2001 From: James Brundage <+@users.noreply.github.com> Date: Mon, 24 Aug 2026 19:10:31 -0700 Subject: [PATCH 88/90] feat(website): `Layout.ps1` ( Fixes #16 ) Adding `` and `$culture` --- layout.ps1 | 36 +++++++++++++++++++++++------------- 1 file changed, 23 insertions(+), 13 deletions(-) diff --git a/layout.ps1 b/layout.ps1 index 1ea2021..5313040 100644 --- a/layout.ps1 +++ b/layout.ps1 @@ -89,6 +89,12 @@ $SiteName = $( } ), +# The locale for the page. +# By default, the Current UI Culture. +[Alias('Locale')] +[cultureinfo] +$Culture = [CultureInfo]::CurrentUICulture, + [uri] $PageUrl ) @@ -195,14 +201,15 @@ $head = @( } } - if ($PageUrl) { - "" - } else { - "" - } - + if ($ExecutionContext.SessionState.InvokeCommand.GetCommand("/$SiteName.css", 'Alias,Function')) { + if ($PageUrl) { + "" + } else { + "" + } + } ) $body = @( @@ -223,11 +230,13 @@ $body = @( "" "
    " "
    " - "
    " - "" + } "

    $siteName

    " "
    " "
    " @@ -247,7 +256,8 @@ $body = @( ) -"" +"" +"" "$head" "$body" "" \ No newline at end of file From 88e0833684d61638dc1602540fc54c2402847ff2 Mon Sep 17 00:00:00 2001 From: James Brundage <+@users.noreply.github.com> Date: Tue, 25 Aug 2026 12:53:01 -0700 Subject: [PATCH 89/90] chore(website): Adding Descriptions --- Matrix.html.ps1 | 4 ++-- deploy.ps1 | 13 ++++++++++++- layout.ps1 | 14 ++++++++++++-- matrix/dotnet.html.ps1 | 6 ++++++ matrix/html.html.ps1 | 6 ++++++ matrix/mathml.html.ps1 | 2 +- matrix/matrix.html.ps1 | 2 +- matrix/powershell.html.ps1 | 6 ++++++ matrix/svg.html.ps1 | 6 ++++++ 9 files changed, 52 insertions(+), 7 deletions(-) diff --git a/Matrix.html.ps1 b/Matrix.html.ps1 index 67d9d4a..d84ccaa 100644 --- a/Matrix.html.ps1 +++ b/Matrix.html.ps1 @@ -1,8 +1,8 @@ <# .SYNOPSIS - Matrix Website + Matrix .DESCRIPTION - Root of the Matrix Website + Matrix Transforms .NOTES Currently just replicating the README within the layout #> diff --git a/deploy.ps1 b/deploy.ps1 index a97c139..5e4972c 100644 --- a/deploy.ps1 +++ b/deploy.ps1 @@ -279,6 +279,8 @@ foreach ($in in $files) { Meta = $meta } + $description = $help.description.text -join [Environment]::NewLine + # Generate a file date by: $fileDate = $fileName -replace # * Remove any non-digit (except colon, dash, and underscore, and Z) @@ -353,7 +355,14 @@ foreach ($in in $files) { # Get our page output $output = @(. $in.FullName) - $page.Title = $title + if ($title) { + $page.Title = $title + } + + if ($description) { + $page.Description = $description + } + # Store our output in the page $page.Output = $output @@ -377,6 +386,8 @@ foreach ($outputPath in $pages.Keys) { Write-Progress @progress $page = $pages[$outputPath] + $title = $page.Title + $description = $page.Description $outputExtension = $page.Extension $output = $page.Output $outputFiles = @() diff --git a/layout.ps1 b/layout.ps1 index 5313040..aa17ca2 100644 --- a/layout.ps1 +++ b/layout.ps1 @@ -187,6 +187,12 @@ $head = @( )" } + if ($description) { + "" + } + # If a palette name was provided if ($PaletteName) { # link to the stylesheet @@ -258,6 +264,10 @@ $body = @( "" "" - "$head" - "$body" + "$( + $head -join [Environment]::NewLine + )" + "$( + $body -join [Environment]::NewLine + )" "" \ No newline at end of file diff --git a/matrix/dotnet.html.ps1 b/matrix/dotnet.html.ps1 index 5ee9e26..17d0c95 100644 --- a/matrix/dotnet.html.ps1 +++ b/matrix/dotnet.html.ps1 @@ -1,3 +1,9 @@ +<# +.SYNOPSIS + DotNet Matrix +.DESCRIPTION + Matrix in DotNet +#> $Title = 'Matrix DotNet' diff --git a/matrix/html.html.ps1 b/matrix/html.html.ps1 index 8c5f736..6647c00 100644 --- a/matrix/html.html.ps1 +++ b/matrix/html.html.ps1 @@ -1,3 +1,9 @@ +<# +.SYNOPSIS + HTML Matrix +.DESCRIPTION + Matrix in HTML. +#> $title = "HTML Matrix" @' diff --git a/matrix/mathml.html.ps1 b/matrix/mathml.html.ps1 index 1217b7f..7f0c170 100644 --- a/matrix/mathml.html.ps1 +++ b/matrix/mathml.html.ps1 @@ -2,7 +2,7 @@ .SYNOPSIS MathML Matrix .DESCRIPTION - Matrix Math and MathML + Matrix and MathML #> [OutputType('text/html')] param() diff --git a/matrix/matrix.html.ps1 b/matrix/matrix.html.ps1 index 9117514..8d6dc62 100644 --- a/matrix/matrix.html.ps1 +++ b/matrix/matrix.html.ps1 @@ -2,7 +2,7 @@ .SYNOPSIS Matrix .DESCRIPTION - Transform Matrices in PowerShell + Matrix Transforms .NOTES Currently just replicating the README within the layout #> diff --git a/matrix/powershell.html.ps1 b/matrix/powershell.html.ps1 index 429dd7f..90b8c5b 100644 --- a/matrix/powershell.html.ps1 +++ b/matrix/powershell.html.ps1 @@ -1,3 +1,9 @@ +<# +.SYNOPSIS + PowerShell Matrix +.DESCRIPTION + Using Matrix in PowerShell +#> $cubeTranslationExample = { # Constructing a cube using translation diff --git a/matrix/svg.html.ps1 b/matrix/svg.html.ps1 index 1d9c532..963992b 100644 --- a/matrix/svg.html.ps1 +++ b/matrix/svg.html.ps1 @@ -1,3 +1,9 @@ +<# +.SYNOPSIS + SVG Matrix +.DESCRIPTION + Using Matrix in SVG. +#> function copyz { param( [int] From 6d34b2dee123769a877957426c4be595944f1f08 Mon Sep 17 00:00:00 2001 From: James Brundage <+@users.noreply.github.com> Date: Tue, 25 Aug 2026 13:28:49 -0700 Subject: [PATCH 90/90] release: `Matrix 0.1` Adding CHANGELOG and Release Notes. Sanding off various pages --- CHANGELOG.html.ps1 | 37 +++++++++++++++++++++++++++ CHANGELOG.md | 44 ++++++++++++++++++++++++++++++++ Matrix.psd1 | 47 ++++++++++++++++++++++++++++++++--- README.md.ps1 | 9 +++---- matrix/css/css.html.ps1 | 2 +- matrix/css/transform.html.ps1 | 4 +-- matrix/dotnet.html.ps1 | 3 +-- matrix/html.html.ps1 | 2 +- matrix/mathml.html.ps1 | 2 -- matrix/matrix.html.ps1 | 2 -- matrix/svg.html.ps1 | 5 +--- 11 files changed, 135 insertions(+), 22 deletions(-) create mode 100644 CHANGELOG.html.ps1 create mode 100644 CHANGELOG.md diff --git a/CHANGELOG.html.ps1 b/CHANGELOG.html.ps1 new file mode 100644 index 0000000..99924d1 --- /dev/null +++ b/CHANGELOG.html.ps1 @@ -0,0 +1,37 @@ +<# +.SYNOPSIS + CHANGELOG +.DESCRIPTION + Matrix CHANGELOG +.NOTES + Renders the CHANGLOG as html, with links to the repo. +#> +param( +[uri] +$RepositoryUrl = $( + if ($env:GITHUB_REPOSITORY) { + "https://github.com/$env:GITHUB_REPOSITORY" + } else { + "https://github.com/PoshWeb/Matrix" + } +) +) + +$changelogPath = Join-Path $PSScriptRoot 'CHANGELOG.md' + +$changeLog = Get-Content $changelogPath -Raw + +[Regex]::Replace( + $changeLog, + '#(?\d+)', + { + param($match) + "[$match]($( + "$repositoryUrl" + '/issues/' + $match.Groups['n'].Value + ))" + } +) | + ConvertFrom-Markdown | + Select-Object -ExpandProperty Html + + diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..54ccce4 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,44 @@ +# Matrix + +## Matrix 0.1 + +* Initial Matrix Module (#1) +* `Matrix.ps1` makes matrices (#2) +* `Matrix` has a build (#3) +* `Matrix` extended types + * `[Numerics.Matrix3x2]` + * `.Points` contains the points in the matrix (#4) + * `.CSS` renders the matrix as CSS (#5) + * `.MathML` renders the matrix as MathML (#33) + * `.Html` renders the matrix as MathML in HTML (#36) + * `DefaultDisplay` limits the number of displayed properties (#34) + * `[Numerics.Matrix4x4]` + * `.Points` contains the points in the matrix (#6) + * `.CSS` renders the matrix as CSS (#7) + * `.MathML` renders the matrix as MathML (#31) + * `.Html` renders the matrix as MathML in HTML (#35) + * `DefaultDisplay` limits the number of displayed properties (#32) + * `[Numerics.Quaternion]` + * `.CSS` renders the matrix as CSS (#12) + * `.MathML` renders a quaternion as MathML (#37) + * `.Html` renders the matrix as MathML in HTML (#38) + * `DefaultDisplay` limits the number of displayed properties (#39) +* `Matrix` aliases provide CSS Compatibility (#8) +* `Matrix` has an autogenerated `README.md.ps1` (#10) +* `Matrix` website demonstrates matrix + * `layout.ps1` lays out pages (#16) + * `deploy.ps1` deploys the site (#22) + * `config.ps1` configures the site (#23) + * `/_includes/` + * `/_includes/FeatherIcon` includes feather icons (#24) + * `/_includes/Palette` includes a palette (#25) + * `/_includes/CopyCode` includes a "copy code" button (#26) + * `/_includes/Sitemap` includes a sitemap (#27) + * `/_includes/Menu` includes a menu (#29) + * `/Matrix.html.ps1` is the site root (#14) + * `/matrix/css` + * `/matrix/css/compatible` shows side by side comparisons (#17) + * `/matrix/css/transform` shows some matrix transform examples (#18) + * `/matrix/dotnet` explains matrices in DotNet (#19) + * `/matrix/svg` shows matrices in SVG (#28) + * `/matrix/powershell` shows matrices in PowerShell (#20) diff --git a/Matrix.psd1 b/Matrix.psd1 index 01710b5..19b5bd7 100644 --- a/Matrix.psd1 +++ b/Matrix.psd1 @@ -130,6 +130,49 @@ PrivateData = @{ # ReleaseNotes of this module ReleaseNotes = @' +## Matrix 0.1 + +* Initial Matrix Module (#1) +* `Matrix.ps1` makes matrices (#2) +* `Matrix` has a build (#3) +* `Matrix` extended types + * `[Numerics.Matrix3x2]` + * `.Points` contains the points in the matrix (#4) + * `.CSS` renders the matrix as CSS (#5) + * `.MathML` renders the matrix as MathML (#33) + * `.Html` renders the matrix as MathML in HTML (#36) + * `DefaultDisplay` limits the number of displayed properties (#34) + * `[Numerics.Matrix4x4]` + * `.Points` contains the points in the matrix (#6) + * `.CSS` renders the matrix as CSS (#7) + * `.MathML` renders the matrix as MathML (#31) + * `.Html` renders the matrix as MathML in HTML (#35) + * `DefaultDisplay` limits the number of displayed properties (#32) + * `[Numerics.Quaternion]` + * `.CSS` renders the matrix as CSS (#12) + * `.MathML` renders a quaternion as MathML (#37) + * `.Html` renders the matrix as MathML in HTML (#38) + * `DefaultDisplay` limits the number of displayed properties (#39) +* `Matrix` aliases provide CSS Compatibility (#8) +* `Matrix` has an autogenerated `README.md.ps1` (#10) +* `Matrix` website demonstrates matrix + * `layout.ps1` lays out pages (#16) + * `deploy.ps1` deploys the site (#22) + * `config.ps1` configures the site (#23) + * `/_includes/` + * `/_includes/FeatherIcon` includes feather icons (#24) + * `/_includes/Palette` includes a palette (#25) + * `/_includes/CopyCode` includes a "copy code" button (#26) + * `/_includes/Sitemap` includes a sitemap (#27) + * `/_includes/Menu` includes a menu (#29) + * `/Matrix.html.ps1` is the site root (#14) + * `/matrix/css` + * `/matrix/css/compatible` shows side by side comparisons (#17) + * `/matrix/css/transform` shows some matrix transform examples (#18) + * `/matrix/dotnet` explains matrices in DotNet (#19) + * `/matrix/svg` shows matrices in SVG (#28) + * `/matrix/powershell` shows matrices in PowerShell (#20) + '@ @@ -141,12 +184,10 @@ We can represent changes in space using a matrix. In CSS, these are called [Transform Functions](https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Values/transform-function) |Dimension|Transform Function|.NET type| -|-|-|-| +|:-:|:-:|:-:| |`2D`|`matrix()`|`[Numerics.Matrix3x2]`| |`3D`|`matrix3d()`|`[Numerics.Matrix4x4]`| - - The module allows you to make, modify, and use matrix transforms. It supports almost identical syntax to the CSS. diff --git a/README.md.ps1 b/README.md.ps1 index f1aedd5..33b54d4 100644 --- a/README.md.ps1 +++ b/README.md.ps1 @@ -19,8 +19,11 @@ * Outputs the name and description * Provides installation instructions * Lists commands + * Includes aliases + * Includes notes * Lists parameters * Lists examples + * Lists links .EXAMPLE ./README.md.ps1 > ./README.md .EXAMPLE @@ -43,10 +46,6 @@ $GitDomains = @( [string[]] $ModuleTypeName = @(), -# The name of the root directory containing types. -[string] -$TypeRoot = 'Types', - # If set, we don't need no badges. [switch] $NoBadge, @@ -256,7 +255,7 @@ if ($uniqueNames) { "" "|Name|Type|Description|" - "|-|-|-|" + "|-|:-:|-|" foreach ($parameter in $help.Parameters.Parameter) { "|$($parameter.Name)|$($parameter.type.name)|$( $parameter.description.text -replace '(?>\r\n|\n)', '
    ' diff --git a/matrix/css/css.html.ps1 b/matrix/css/css.html.ps1 index 4fa0393..1f04d36 100644 --- a/matrix/css/css.html.ps1 +++ b/matrix/css/css.html.ps1 @@ -2,7 +2,7 @@ .SYNOPSIS CSS Matrix .DESCRIPTION - Matrix + Matrix in CSS .LINK https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API/Matrix_math_for_the_web .COMPONENT diff --git a/matrix/css/transform.html.ps1 b/matrix/css/transform.html.ps1 index 914f294..e9897d7 100644 --- a/matrix/css/transform.html.ps1 +++ b/matrix/css/transform.html.ps1 @@ -1,8 +1,8 @@ <# .SYNOPSIS - CSS Transforms + CSS Matrix .DESCRIPTION - We can transform any element with CSS. + CSS Transformation Matrices .COMPONENT /matrix/css/ #> diff --git a/matrix/dotnet.html.ps1 b/matrix/dotnet.html.ps1 index 17d0c95..ad21d96 100644 --- a/matrix/dotnet.html.ps1 +++ b/matrix/dotnet.html.ps1 @@ -4,8 +4,7 @@ .DESCRIPTION Matrix in DotNet #> -$Title = 'Matrix DotNet' - +param() $matrixLinks = @{ "Matrix3x2" = diff --git a/matrix/html.html.ps1 b/matrix/html.html.ps1 index 6647c00..c2aa0b2 100644 --- a/matrix/html.html.ps1 +++ b/matrix/html.html.ps1 @@ -4,7 +4,7 @@ .DESCRIPTION Matrix in HTML. #> -$title = "HTML Matrix" +param() @' # HTML Matrix diff --git a/matrix/mathml.html.ps1 b/matrix/mathml.html.ps1 index 7f0c170..f50b3cf 100644 --- a/matrix/mathml.html.ps1 +++ b/matrix/mathml.html.ps1 @@ -7,8 +7,6 @@ [OutputType('text/html')] param() -$Title = 'MathML Matrix' - @' diff --git a/matrix/matrix.html.ps1 b/matrix/matrix.html.ps1 index 8d6dc62..e395246 100644 --- a/matrix/matrix.html.ps1 +++ b/matrix/matrix.html.ps1 @@ -9,8 +9,6 @@ [OutputType('text/html')] param() -$Title = 'Matrix' - ConvertFrom-Markdown -Path ( $PSScriptRoot | Split-Path | Join-Path -ChildPath 'README.md' ) -ErrorAction Ignore | diff --git a/matrix/svg.html.ps1 b/matrix/svg.html.ps1 index 963992b..a6b783b 100644 --- a/matrix/svg.html.ps1 +++ b/matrix/svg.html.ps1 @@ -4,6 +4,7 @@ .DESCRIPTION Using Matrix in SVG. #> +param() function copyz { param( [int] @@ -51,10 +52,6 @@ function copyz { } } -# copyz - -# return - @" # SVG Matrix

    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 r-ND2Du0o4Ej009612m}Cy1q1*)!a;l% literal 0 HcmV?d00001 diff --git a/css/transform.html.ps1 b/css/transform.html.ps1 new file mode 100644 index 0000000..da5918c --- /dev/null +++ b/css/transform.html.ps1 @@ -0,0 +1,137 @@ +param( +[string]$SampleImage = '/assets/dodge-matrix.gif' +) + +$Title = 'Matrix Transforms' + +function markdown { + @( + if ($args) { + $args + } + $allInput = @($input) + if ($allInput.Length) { + $allInput + } + ) -join [Environment]::NewLine | + ConvertFrom-Markdown | + Select-Object -ExpandProperty Html +} + +markdown @" + +# Matrix Transforms + +## How to use Matrix transforms. + +We can use Matrix transforms in two major ways: + +* We can manipulate points using a Matrix +* We can use a matrix as a transform in CSS + +This page demonstrates various animation transforms using Matrix. + +"@ + + +"" + +markdown @" + +### Mirroring + +We can mirror two images by using a negative scale. + +This can be done in CSS with the `scale()` function, which becomes a `matrix()`. + +To mirror points along X, we can use: + +~~~PowerShell +scale -1 1 +~~~ + +"@ + +@" +