templates/Samples.ps1
function New-UDDemo { param([Switch]$Navigation) function New-UDComponentDemo { param( $Title, $Description, $Content, $Icon, $Command) $Header = New-UDCardHeader -Avatar (New-UDIcon -Icon $Icon -Size '2x') -Title $Title -SubHeader $Description $Body = New-UDCardBody -Content { New-UDTabs -RenderOnActive -Tabs { New-UDTab -Text 'Demo' -Icon (New-UDIcon -Icon eye) -Content { New-UDElement -Tag 'div' -Content {} -Attributes @{ style = @{ height = "20px" } } & $Content } New-UDTab -Text 'Code' -Icon (New-UDIcon -Icon code) -Content { $Code = $Content.ToString() $Lines = $Code -split '\r?\n' $FirstLine = $Lines | Select-Object -First 1 -Skip 1 $StartingWhiteSpace = $FirstLine.Length - ($FirstLine.TrimStart().Length) $Code = '' $Lines | ForEach-Object { if ($_.Length -ge $StartingWhiteSpace) { $Code += $_.Substring($StartingWhiteSpace) + ([Environment]::NewLine) } } New-UDButton -Icon (New-UDIcon -Icon 'Copy') -Style @{ right = 0 } -OnClick { Set-UDClipboard -Data $Code Show-UDToast -Message 'Copied!' } New-UDSyntaxHighlighter -Code $Code -Style 'oneDark' -ShowLineNumbers } New-UDTab -Text 'Help' -Icon (New-UDIcon -Icon CircleQuestion) -Content { New-UDExpansionPanelGroup -Content { $Command | ForEach-Object { New-UDExpansionPanel -Title " $_" -Content { New-UDElement -Tag 'pre' -Content { $CommandName = $_ New-UDDynamic -Content { Get-Help -Name $CommandName -ErrorAction SilentlyContinue -Full | Out-String } } -Attributes @{ style = @{ overflowX = "scroll" } } } } } } -Dynamic } } $LinkId = $title.Replace(' ', '') if ($Navigation) { New-UDListItem -Label $title -Icon (New-UDIcon -Icon $Icon) -Href "/$LinkId" } else { New-UDPage -Name $Title -Url $LinkId -Icon (New-UDIcon -Icon $Icon) -Content { New-UDCard -Header $Header -Body $Body -Id $LinkId } } } New-UDComponentDemo -Title 'Alerts' -Icon 'CircleExclamation' -Description 'Alerts provide a simple way to communicate information to a user.' -Command 'New-UDAlert' -Content { New-UDAlert -Severity 'error' -Content { New-UDHtml 'This is an error alert — <strong>check it out!</strong>' } -Title "Error" New-UDAlert -Severity 'warning' -Content { New-UDHtml 'This is an warning alert — <strong>check it out!</strong>' } -Title "Warning" New-UDAlert -Severity 'info' -Content { New-UDHtml 'This is an error info — <strong>check it out!</strong>' } -Title "Info" New-UDAlert -Severity 'success' -Content { New-UDHtml 'This is an success alert — <strong>check it out!</strong>' } -Title "Success" } New-UDComponentDemo -Title 'Autocomplete' -Icon 'CaretDown' -Description 'The autocomplete is a normal text input enhanced by a panel of suggested options.' -Command 'New-UDAutocomplete' -Content { New-UDStack -Content { New-UDAutocomplete -Options @('Test', 'Test2', 'Test3', 'Test4') New-UDAutocomplete -OnLoadOptions { @('Test', 'Test2', 'Test3', 'Test4') | Where-Object { $_ -like "*$Body*" } | ConvertTo-Json } -OnChange { Show-UDToast $Body } New-UDAutocomplete -Options @("Test", "No", "Yes") -Icon (New-UDIcon -Icon 'Users') } -Spacing 3 -Direction 'column' } New-UDComponentDemo -Title 'Avatar' -Icon 'User' -Description 'Avatars are found throughout material design with uses in everything from tables to dialog menus.' -Command 'New-UDAvatar' -Content { New-UDAvatar -Alt "Remy Sharp" -Image "/admin/logo.png" -Sx @{ borderRadius = '50%' } New-UDAvatar -Alt "Remy Sharp" -Image "/admin/logo.png" -Variant square New-UDAvatar -Alt "Remy Sharp" -Content { "A" } -Sx @{ borderRadius = '50%' } New-UDAvatar -Alt "Remy Sharp" -Content { "A" } -Variant square New-UDAvatarGroup -Content { 1..10 | ForEach-Object { New-UDAvatar -Alt "Remy Sharp" -Content { "A" } -Sx @{ borderRadius = '50%' backgroundColor = 'error.dark' } } } -Sx @{ width = "20%" } } New-UDComponentDemo -Title 'Badges' -Icon 'Certificate' -Description 'Badge generates a small badge to the top-right of its child(ren).' -Command 'New-UDBadge' -Content { New-UDStack -Spacing 3 -Direction 'row' -Content { New-UDBadge -BadgeContent { 4 } -Children { New-UDIcon -Icon Envelope -Size 2x } -Color primary New-UDBadge -BadgeContent { 4 } -Children { New-UDIcon -Icon Envelope -Size 2x } -Color secondary New-UDBadge -BadgeContent { 4 } -Children { New-UDIcon -Icon Envelope -Size 2x } -Color success } } New-UDComponentDemo -Title 'Buttons' -Icon 'Stop' -Description 'Buttons allow users to take actions, and make choices, with a single tap.' -Command 'New-UDDButton' -Content { New-UDButton -Variant 'contained' -Text 'Default' New-UDButton -Variant 'outlined' -Text 'Default' New-UDButton -Id "Submit" -Text "Submit" -Style @{ Width = "150px"; Height = "100px" } New-UDButton -Icon (New-UDIcon -Icon trash) -Text 'Delete' New-UDButton -Text 'Message Box' -OnClick { Show-UDToast -Message 'Hello, world!' } New-UDButton -Text 'Message Box' -OnClick { Show-UDToast -Message 'Hello, world!' Start-Sleep 10 } -ShowLoading } New-UDComponentDemo -Title 'Cards' -Icon 'AddressCard' -Description 'Cards contain content and actions about a single subject.' -Command 'New-UDCard' -Content { New-UDCard -Title 'Simple Card' -Content { "This is some content" } -Style @{ border = '2px solid #f0f2f5' } $Body = New-UDCardBody -Content { New-UDTypography -GutterBottom -Text 'Word of the Day' -Sx @{ fontSize = '14' color = 'text.secondary' } New-UDTypography -Variant 'h5' -Text 'be•nev•o•lent' New-UDTypography -Text 'adjective' -Sx @{ mb = 1.5 color = 'text.secondary' } New-UDTypography -Variant 'body2' -Text 'well meaning and kindly' } $Actions = New-UDCardFooter -Content { New-UDButton -Text 'Learn More' } New-UDCard -Body $Body -Footer $Actions -Style @{ border = '2px solid #f0f2f5' } $Header = New-UDCardHeader -Avatar (New-UDAvatar -Content { "R" } -Sx @{ backgroundColor = "#f44336" }) -Action (New-UDIconButton -Icon (New-UDIcon -Icon 'EllipsisVertical')) -Title 'Shrimp and Chorizo Paella' -SubHeader 'September 14, 2016'; $Media = New-UDCardMedia -Image 'https://mui.com/static/images/cards/paella.jpg' $Body = New-UDCardBody -Content { New-UDTypography -Text ' This impressive paella is a perfect party dish and a fun meal to cook together with your guests. Add 1 cup of frozen peas along with the mussels, if you like.' -Sx @{ color = 'text.secondary' } -Variant body2 } $Footer = New-UDCardFooter -Content { New-UDIconButton -Icon (New-UDIcon -Icon 'Heart') New-UDIconButton -Icon (New-UDIcon -Icon 'ShareAlt') } $Expand = New-UDCardExpand -Content { $Description = @" Heat oil in a (14- to 16-inch) paella pan or a large, deep skillet over medium-high heat. Add chicken, shrimp and chorizo, and cook, stirring occasionally until lightly browned, 6 to 8 minutes. Transfer shrimp to a large plate and set aside, leaving chicken and chorizo in the pan. Add pimentón, bay leaves, garlic, tomatoes, onion, salt and pepper, and cook, stirring often until thickened and fragrant, about 10 minutes. Add saffron broth and remaining 4 1/2 cups chicken broth; bring to a boil. "@ New-UDTypography -Text $Description } New-UDCard -Header $Header -Media $Media -Body $Body -Footer $Footer -Expand $Expand -Sx @{ maxWidth = 345 border = '2px solid #f0f2f5' } } New-UDComponentDemo -Title 'Charts' -Icon 'ChartSimple' -Description 'Visual data in charts.' -Command 'New-UDNivoChart' -Content { $Data = 1..10 | ForEach-Object { $item = Get-Random -Max 1000 [PSCustomObject]@{ Name = "Test$item" Value = $item } } New-UDNivoChart -Id 'autoRefreshingNivoBar' -Bar -Keys "value" -IndexBy 'name' -Data $Data -Height 500 -Width 1000 } New-UDComponentDemo -Title 'Checkboxes' -Icon 'SquareCheck' -Description 'Checkboxes allow the user to select one or more items from a set.' -Command 'New-UDCheckbox' -Content { New-UDCheckBox New-UDCheckBox -Disabled New-UDCheckBox -Checked $true New-UDCheckBox -Checked $true -Disabled $Icon = New-UDIcon -Icon angry -Size lg $CheckedIcon = New-UDIcon -Icon angry -Size lg New-UDCheckBox -Icon $Icon -CheckedIcon $CheckedIcon -Style @{color = '#2196f3' } New-UDCheckBox -OnChange { Show-UDToast -Title 'Checkbox' -Message $Body } New-UDCheckBox -Label 'Demo' -LabelPlacement start New-UDCheckBox -Label 'Demo' -LabelPlacement top New-UDCheckBox -Label 'Demo' -LabelPlacement bottom New-UDCheckBox -Label 'Demo' -LabelPlacement end } New-UDComponentDemo -Title 'Chip' -Icon 'Cookie' -Description 'Chips are compact elements that represent an input, attribute, or action.' -Command 'New-UDChip' -Content { New-UDStack -Spacing 3 -Direction 'row' -Content { New-UDChip -Label 'Basic' -Icon (New-UDIcon -Icon 'user') New-UDChip -Label 'OnClick' -OnClick { Show-UDToast -Message 'Hello!' } } } New-UDComponentDemo -Title 'Code Editor' -Icon 'Code' -Description 'The code editor component allows you to host the Microsoft Monaco editor within your dashboards.' -Command 'New-UDCodeEditor' -Content { New-UDCodeEditor -Height '200' -Language 'powershell' -Code 'New-UDAlert -Title "Warning!"' -Theme 'vs-dark' } New-UDComponentDemo -Title 'Data Grid' -Icon 'TableCells' -Description 'Data tables display information in a grid-like format of rows and columns. They organize information in a way that''s easy to scan so that users can look for patterns and insights.' -Command 'New-UDDataGrud' -Content { $Data = 1..10000 | ForEach-Object { @{ Name = 'Adam'; Number = Get-Random } } New-UDDataGrid -LoadRows { function Out-UDDataGridData { param( [Parameter(Mandatory)] $Context, [Parameter(Mandatory, ValueFromPipeline)] [object]$Data, [Parameter()] [int]$TotalRows = -1 ) Begin { $Items = [System.Collections.ArrayList]::new() } Process { $Items.Add($Data) | Out-Null } End { if ($null -ne $Context.Filter.Items -and $Context.Filter.Items.Count -gt 0) { $linkOperator = $Context.Filter.linkOperator $filterTextArray = @() foreach ($filter in $Context.Filter.Items) { $property = $Filter.columnField $val = $filter.Value switch ($filter.operatorValue) { "contains" { $filterTextArray += "obj.$property -like ""*$val*""" } "equals" { $filterTextArray += "obj.$property -eq ""*$val*""" } "startsWith" { $filterTextArray += "obj.$property -like ""$val*""" } "endsWith" { $filterTextArray += "obj.$property -like ""*$val""" } "isAnyOf" { $filterTextArray += "obj.$property -in ""$val""" } "notequals" { $filterTextArray += "obj.$property -ne ""$val""" } "notcontains" { $filterTextArray += "obj.$property -notlike ""*$val*""" } "isEmpty" { $filterTextArray += "obj.$property -eq null" } "isNotEmpty" { $filterTextArray += "obj.$property -ne null" } } } if ($linkOperator -eq 'and') { [string]$filterTextLine = $filterTextArray -join " -and " } else { [string]$filterTextLine = $filterTextArray -join " -or " } $filterTextLine = $filterTextLine.Replace('obj', '$_') $filterTextLine = $filterTextLine.Replace('null', '$null') $filterScriptBlock = [Scriptblock]::Create($filterTextLine) $Items = $Items | Where-Object -FilterScript $filterScriptBlock } if ($null -ne $Items) { $TotalRows = $Items.Count } else { $TotalRows = 0 } $Sort = $Context.Sort[0] $Items = $Items | Sort-Object -Property $Sort.field -Descending:$($Sort.Sort -eq 'desc') $Items = $Items | Select-Object -Skip ($Context.Page * $Context.pageSize) -First $Context.PageSize @{ rows = [Array]$Items rowCount = $TotalRows } } } $Data | Out-UDDataGridData -Context $EventData } -Columns @( @{ field = "name"; render = { New-UDButton -Icon (New-UDIcon -Icon User) -OnClick { Show-UDToast $EventData.Name } } } @{ field = "number" } ) -AutoHeight -Pagination } New-UDComponentDemo -Title 'Date and Time' -Icon 'Clock' -Description 'Date and time component for Universal Dashboard.' -Content { New-UDStack -Direction 'column' -Content { New-UDDateTime -InputObject (Get-Date) New-UDDateTime -InputObject (Get-Date) -Format 'DD/MM/YYYY' New-UDDateTime -InputObject (Get-Date) -Locale 'es' } } New-UDComponentDemo -Title 'Date Picker' -Icon 'Calendar' -Description 'Date pickers pickers provide a simple way to select a single value from a pre-determined set.' -Command 'New-UDDatePicker' -Content { New-UDDatePicker -OnChange { Show-UDToast -Message $body } New-UDDatePicker -Variant static New-UDDatePicker -Locale fr New-UDDatePicker -Minimum ((Get-Date).AddDays(-15)) -Maximum ((Get-Date).AddDays(15)) } New-UDComponentDemo -Title 'Editor' -Icon 'Paragraph' -Description 'Text editor component.' -Content { New-UDEditor -OnChange { Show-UDToast $EventData } -Format 'html' } New-UDComponentDemo -Title 'Element' -Icon 'PuzzlePiece' -Description 'Create HTML elements.' -Content { New-UDElement -Tag 'div' -Content { New-UDTypography -Text 'Hello!' } -Attributes @{ onClick = { Show-UDToast -Message "Clicked!" } style = @{ backgroundColor = 'red' color = 'blue' padding = '20px' } } } New-UDComponentDemo -Title 'Expansion Panel' -Icon 'Expand' -Description 'Expansion panels contain creation flows and allow lightweight editing of an element.' -Command 'New-UDExpansionPanel' -Content { New-UDExpansionPanelGroup -Children { New-UDExpansionPanel -Title "Hello" -Children {} New-UDExpansionPanel -Title "Hello" -Id 'expContent' -Children { New-UDElement -Tag 'div' -Content { "Hello" } } } } New-UDComponentDemo -Title 'Grid' -Icon 'TableCells' -Description 'The responsive layout grid adapts to screen size and orientation, ensuring consistency across layouts.' -Command 'New-UDGrid' -Content { New-UDGrid -Container -Content { New-UDGrid -Item -ExtraSmallSize 12 -Content { New-UDPaper -Content { "xs-12" } -Elevation 2 } New-UDGrid -Item -ExtraSmallSize 6 -Content { New-UDPaper -Content { "xs-6" } -Elevation 2 } New-UDGrid -Item -ExtraSmallSize 6 -Content { New-UDPaper -Content { "xs-6" } -Elevation 2 } New-UDGrid -Item -ExtraSmallSize 3 -Content { New-UDPaper -Content { "xs-3" } -Elevation 2 } New-UDGrid -Item -ExtraSmallSize 3 -Content { New-UDPaper -Content { "xs-3" } -Elevation 2 } New-UDGrid -Item -ExtraSmallSize 3 -Content { New-UDPaper -Content { "xs-3" } -Elevation 2 } New-UDGrid -Item -ExtraSmallSize 3 -Content { New-UDPaper -Content { "xs-3" } -Elevation 2 } } New-UDDynamic -Id 'spacingGrid' -Content { $Spacing = (Get-UDElement -Id 'spacingSelect').value New-UDGrid -Spacing $Spacing -Container -Content { New-UDGrid -Item -ExtraSmallSize 3 -Content { New-UDPaper -Content { "xs-3" } -Elevation 2 } New-UDGrid -Item -ExtraSmallSize 3 -Content { New-UDPaper -Content { "xs-3" } -Elevation 2 } New-UDGrid -Item -ExtraSmallSize 3 -Content { New-UDPaper -Content { "xs-3" } -Elevation 2 } New-UDGrid -Item -ExtraSmallSize 3 -Content { New-UDPaper -Content { "xs-3" } -Elevation 2 } } } New-UDSelect -Id 'spacingSelect' -Label Spacing -Option { for ($i = 0; $i -lt 10; $i++) { New-UDSelectOption -Name $i -Value $i } } -OnChange { Sync-UDElement -Id 'spacingGrid' } -DefaultValue 3 } New-UDComponentDemo -Title 'Icons' -Icon 'FontAwesome' -Description 'FontAwesome icons to include in your dashboard.' -Command 'New-UDIcon' -Content { New-UDStack -Direction 'column' -Spacing 4 -Content { New-UDIcon -Icon 'NetworkWired' New-UDStack -Direction 'row' -Content { New-UDIcon -Icon 'AddressBook' -Size 'sm' New-UDIcon -Icon 'AddressBook' -Size 'lg' New-UDIcon -Icon 'AddressBook' -Size '5x' New-UDIcon -Icon 'AddressBook' -Size '10x' } New-UDIcon -Icon 'AddressBook' -Size '5x' -Rotation 90 New-UDIcon -Icon 'AddressBook' -Size '5x' -Border New-UDTextbox -Id 'txtIconSearch' -Label 'Search' New-UDButton -Text 'Search' -OnClick { Sync-UDElement -Id 'icons' } New-UDElement -Tag 'p' -Content {} New-UDDynamic -Id 'icons' -Content { $IconSearch = (Get-UDElement -Id 'txtIconSearch').value if ($null -ne $IconSearch -and $IconSearch -ne '') { $Icons = $Icons = Find-UDIcon -Name $IconSearch } foreach ($icon in $icons) { try { New-UDChip -Label $icon -Icon (New-UDIcon -Icon $icon) } catch { New-UDChip -Label "$icon Unknown" } } } } } New-UDComponentDemo -Title 'Interaction' -Icon 'ComputerMouse' -Description 'Interact with elements on the dashboard.' -Command 'New-UDFloatingActionButton' -Content { New-UDExpansionPanelGroup -Content { New-UDExpansionPanel -Title 'Get-UDElement' -Content { New-UDTextbox -Id 'txtBox1' -Label 'Textbox' New-UDButton -Text 'Get text box value' -OnClick { $tb = Get-UDElement -Id 'txtBox1' Show-UDToast $tb.Value } } New-UDExpansionPanel -Title 'Set-UDElement' -Content { New-UDTextbox -Id 'txtBox2' -Label 'Textbox' New-UDButton -Text 'Set text box value' -OnClick { Set-UDElement -Id 'txtBox2' -Properties @{ value = "This is a value" } } } New-UDExpansionPanel -Title 'Remove-UDElement' -Content { New-UDTextbox -Id 'txtBox3' -Label 'Textbox' New-UDButton -Text 'Remove the textbox' -OnClick { Remove-UDElement -Id 'txtBox3' } } New-UDExpansionPanel -Title 'Sync-UDElement' -Content { New-UDDynamic -Id 'time' -Content { New-UDTypography (Get-Date) } New-UDButton -Text 'Reload the time' -OnClick { Sync-UDElement -Id 'time' } } New-UDExpansionPanel -Title 'Add-UDElement' -Content { New-UDElement -Id 'parent' -Tag 'div' -Content { } New-UDButton -Text 'Add an element' -OnClick { Add-UDElement -ParentId 'parent' -Content { New-UDTypography -Text 'Added!' } } } New-UDExpansionPanel -Title 'Clear-UDElement' -Content { New-UDElement -Id 'parent2' -Tag 'div' -Content { New-UDTypography -Text 'Added!' New-UDTypography -Text 'Added!' New-UDTypography -Text 'Added!' } New-UDButton -Text 'Add an element' -OnClick { Clear-UDElement -Id 'parent2' } } } } New-UDComponentDemo -Title 'Floating Action Button' -Icon 'Ghost' -Description 'A floating action button (FAB) performs the primary, or most common, action on a screen.' -Command 'New-UDFloatingActionButton' -Content { New-UDFloatingActionButton -Icon (New-UDIcon -Icon user) -Size Small New-UDFloatingActionButton -Icon (New-UDIcon -Icon user) -Size Medium New-UDFloatingActionButton -Icon (New-UDIcon -Icon user) -Size Large } New-UDComponentDemo -Title 'Form' -Icon 'RectangleList' -Description 'Forms provide a way to collect data from users.' -Command 'New-UDForm' -Content { New-UDForm -Content { New-UDRow -Columns { New-UDColumn -SmallSize 6 -LargeSize 6 -Content { New-UDTextbox -Id 'txtFirstName' -Label 'First Name' } New-UDColumn -SmallSize 6 -LargeSize 6 -Content { New-UDTextbox -Id 'txtLastName' -Label 'Last Name' } } New-UDTextbox -Id 'txtAddress' -Label 'Address' New-UDRow -Columns { New-UDColumn -SmallSize 6 -LargeSize 6 -Content { New-UDTextbox -Id 'txtState' -Label 'State' } New-UDColumn -SmallSize 6 -LargeSize 6 -Content { New-UDTextbox -Id 'txtZipCode' -Label 'ZIP Code' } } } -OnSubmit { Show-UDToast -Message $EventData.txtFirstName Show-UDToast -Message $EventData.txtLastName } } New-UDComponentDemo -Title 'Images' -Icon 'Image' -Description 'Display images' -Command 'New-UDImage' -Content { New-UDImage -Url "https://ironmansoftware.com/img/ps-logo.png" } New-UDComponentDemo -Title 'Links' -Icon 'Link' -Description 'Create a hyper link in a dashboard' -Command 'New-UDLink' -Content { New-UDStack -Direction 'column' -Spacing 4 -Content { New-UDLink -Text 'Ironman Software' -url https://www.ironmansoftware.com New-UDLink -Text 'Ironman Software' -url https://www.ironmansoftware.com -Variant h2 -Underline always New-UDLink -Text 'Ironman Software' -url https://www.ironmansoftware.com -OpenInNewWindow New-UDLink -Text 'Ironman Software' -OnClick { Show-UDToast "Hello!" } } } New-UDComponentDemo -Title 'Lists' -Icon 'List' -Description 'Lists are continuous, vertical indexes of text or images.' -Command 'New-UDList' -Content { New-UDList -Content { New-UDListItem -Label 'Inbox' -Icon (New-UDIcon -Icon envelope -Size 3x) -SubTitle 'New Stuff' New-UDListItem -Label 'Drafts' -Icon (New-UDIcon -Icon edit -Size 3x) -SubTitle "Stuff I'm working on " New-UDListItem -Label 'Trash' -Icon (New-UDIcon -Icon trash -Size 3x) -SubTitle 'Stuff I deleted' New-UDListItem -Label 'Spam' -Icon (New-UDIcon -Icon bug -Size 3x) -SubTitle "Stuff I didn't want" } } New-UDComponentDemo -Title 'Maps' -Icon 'MapLocationDot' -Description 'Render complex maps' -Command 'New-UDMap' -Content { New-UDMap -Endpoint { New-UDMapRasterLayer -TileServer 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png' } -Latitude 43.52107 -Longitude -114.31644 -Zoom 13 -Height '100vh' } New-UDComponentDemo -Title 'Menu' -Icon 'EllipsisV' -Description 'Menus display a list of choices on temporary surfaces.' -Command @('New-UDMenu', 'New-UDMenuItem') -Content { New-UDStack -Spacing 1 -Direction column -Content { New-UDMenu -Text 'Basic Menu' -Content { New-UDMenuItem -Text 'Item 1' New-UDMenuItem -Text 'Item 1' New-UDMenuItem -Text 'Item 1' } New-UDMenu -Text 'On Change' -OnChange { Show-UDToast $EventData } -Children { New-UDMenuItem -Text 'Test' New-UDMenuItem -Text 'Test2' New-UDMenuItem -Text 'Test3' } New-UDMenu -Text 'Icons' -Children { New-UDMenuItem -Text 'Add' -Icon (New-UDIcon -Icon 'Add') New-UDMenuItem -Text 'Profile' -Icon (New-UDIcon -Icon 'AddressCard') New-UDMenuItem -Text 'Home' -Icon (New-UDIcon -Icon 'Home') } } } New-UDComponentDemo -Title 'Modals' -Icon 'WindowMaximize' -Description 'Modals inform users about a task and can contain critical information, require decisions, or involve multiple tasks.' -Command 'Show-UDModal' -Content { New-UDButton -Text 'Basic' -OnClick { Show-UDModal -Content { New-UDTypography -Text "Hello" } } New-UDButton -Text 'Full Screen' -OnClick { Show-UDModal -Content { New-UDTypography -Text "Hello" } -Footer { New-UDButton -Text "Close" -OnClick { Hide-UDModal } } -FullScreen } New-UDButton -Text 'Full Width' -OnClick { Show-UDModal -Content { New-UDTypography -Text "Hello" } -FullWidth -MaxWidth 'md' } New-UDButton -Text 'Persistent' -OnClick { Show-UDModal -Content { New-UDTypography -Text "Hello" } -Footer { New-UDButton -Text "Close" -OnClick { Hide-UDModal } } -Persistent } } New-UDComponentDemo -Title 'Progress' -Icon 'Spinner' -Description 'Progress indicators commonly known as spinners, express an unspecified wait time or display the length of a process.' -Command 'New-UDProgress' -Content { New-UDProgress -Circular -Color Blue New-UDProgress New-UDProgress -PercentComplete 75 } New-UDComponentDemo -Title 'Radio' -Icon 'CircleDot' -Description 'Radio buttons allow the user to select one option from a set.' -Command 'New-UDRadio' -Content { New-UDRadioGroup -Label "Day" -Content { New-UDRadio -Label Monday -Value 'monday' New-UDRadio -Label Tuesday -Value 'tuesday' New-UDRadio -Label Wednesday -Value 'wednesday' New-UDRadio -Label Thursday -Value 'thursday' New-UDRadio -Label Friday -Value 'friday' New-UDRadio -Label Saturday -Value 'saturday' New-UDRadio -Label Sunday -Value 'sunday' } } New-UDComponentDemo -Title 'Rating' -Icon 'Star' -Description 'Ratings provide insight regarding others'' opinions and experiences, and can allow the user to submit a rating of their own.' -Command 'New-UDRating' -Content { New-UDStack -Direction 'column' -Content { New-UDRating New-UDRating -OnChange { Show-UDToast $EventData } New-UDRating -Max 10 New-UDRating -Precision .5 New-UDRating -Size large } } New-UDComponentDemo -Title 'Scopes' -Icon 'UserGear' -Description 'Custom variable scopes to use in dashboards' -Content { New-UDStack -Direction 'column' -Content { New-UDTypography -Variant 'h5' -Text '$Cache:' New-UDTypography -Text 'Cache scope stores data for all users. It does not expire automatically, so use it wisely' if ($Cache:Demo) { New-UDTypography "Cache value: $Cache:Demo" } New-UDForm -Content { New-UDTextbox -Id 'cacheValue' } -OnSubmit { $Cache:Demo = $EventData.cacheValue New-UDTypography "Value has been stored in the cache. Reload page to see value." New-UDButton -Text 'Reload Page' -OnClick { Invoke-UDJavaScript -JavaScript 'window.location.reload()' } } } New-UDStack -Direction 'column' -Content { New-UDTypography -Variant 'h5' -Text '$Page:' New-UDTypography -Text 'Page scope stores data for the current page (e.g. tab). The data won''t be available across tabs and will be removed once the tab is closed.' New-UDForm -Content { New-UDTextbox -Id 'cacheValue' } -OnSubmit { $Page:Demo = $EventData.cacheValue New-UDTypography "Value has been stored in the page scope." } New-UDButton -Text 'Show Page Data' -OnClick { Show-UDToast $Page:Demo } } New-UDStack -Direction 'column' -Content { New-UDTypography -Variant 'h5' -Text '$Session:' New-UDTypography -Text 'Session scope stores data with the current user''s session. If you reload the page, the data will still be stored. If you open a new tab, the same data is available.' New-UDDynamic -Content { if ($Session:Demo) { New-UDTypography "Session value: $Session:Demo" } } New-UDForm -Content { New-UDTextbox -Id 'cacheValue' } -OnSubmit { $Session:Demo = $EventData.cacheValue New-UDTypography "Value has been stored in the session. Reload page to see value." New-UDButton -Text 'Reload Page' -OnClick { Invoke-UDJavaScript -JavaScript 'window.location.reload()' } } } } New-UDComponentDemo -Title 'Select' -Icon 'RectangleList' -Description 'Select components are used for collecting user provided information from a list of options.' -Command 'New-UDSelect' -Content { New-UDStack -Direction 'column' -Content { New-UDSelect -Option { New-UDSelectOption -Name 'One' -Value 1 New-UDSelectOption -Name 'Two' -Value 2 New-UDSelectOption -Name 'Three' -Value 3 } New-UDSelect -Option { New-UDSelectGroup -Name 'Group One' -Option { New-UDSelectOption -Name 'One' -Value 1 New-UDSelectOption -Name 'Two' -Value 2 New-UDSelectOption -Name 'Three' -Value 3 } New-UDSelectGroup -Name 'Group Two' -Option { New-UDSelectOption -Name 'Four' -Value 4 New-UDSelectOption -Name 'Five' -Value 5 New-UDSelectOption -Name 'Size' -Value 6 } } New-UDSelect -Option { New-UDSelectOption -Name 'One' -Value 1 New-UDSelectOption -Name 'Two' -Value 2 New-UDSelectOption -Name 'Three' -Value 3 } -OnChange { Show-UDToast -Message $EventData } } } New-UDComponentDemo -Title 'Skeleton' -Icon 'BarsProgress' -Description 'A skeleton is a form of a loading component that can show a placeholder while data is received.' -Command 'New-UDSkeleton' -Content { New-UDSkeleton New-UDSkeleton -Variant circle -Width 40 -Height 40 New-UDSkeleton -Variant rect -Width 210 -Height 118 New-UDSkeleton New-UDSkeleton -Animation disabled New-UDSkeleton -Animation wave } New-UDComponentDemo -Title 'Slider' -Icon 'Sliders' -Description 'Sliders allow users to make selections from a range of values.' -Command 'New-UDSlider' -Content { New-UDStack -Direction 'column' -Content { New-UDSlider -Value 1 New-UDSlider -Min 10 -Max 1000 New-UDSlider -Disabled New-UDSlider -Min 10 -Max 1000 -Step 100 New-UDSlider -Marks New-UDSlider -Value @(1, 10) New-UDSlider -OnChange { Show-UDToast -Message $Body Set-TestData $Body } } } New-UDComponentDemo -Title 'Stepper' -Icon 'ForwardStep' -Description 'Steppers convey progress through numbered steps. It provides a wizard-like workflow.' -Command 'New-UDStepper' -Content { New-UDStepper -Steps { New-UDStep -OnLoad { New-UDElement -Tag 'div' -Content { "Step 1" } New-UDTextbox -Id 'txtStep1' -Value $EventData.Context.txtStep1 } -Label "Step 1" New-UDStep -OnLoad { New-UDElement -Tag 'div' -Content { "Step 2" } New-UDElement -Tag 'div' -Content { "Previous data: $Body" } New-UDTextbox -Id 'txtStep2' -Value $EventData.Context.txtStep2 } -Label "Step 2" New-UDStep -OnLoad { New-UDElement -Tag 'div' -Content { "Step 3" } New-UDElement -Tag 'div' -Content { "Previous data: $Body" } New-UDTextbox -Id 'txtStep3' -Value $EventData.Context.txtStep3 } -Label "Step 3" } -OnFinish { New-UDTypography -Text 'Nice! You did it!' -Variant h3 New-UDElement -Tag 'div' -Id 'result' -Content { $Body } } } New-UDComponentDemo -Title 'Switch' -Icon 'ToggleOn' -Description 'Switches toggle the state of a single setting on or off.' -Command 'New-UDSwitch' -Content { New-UDSwitch -Checked $true New-UDSwitch -Checked $true -Disabled New-UDSwitch -OnChange { Show-UDToast -Message $EventData } New-UDSwitch -CheckedLabel 'Dark' -UncheckedLabel 'Light' } New-UDComponentDemo -Title 'Table' -Icon 'Table' -Description 'Tables display sets of data. They can be fully customized.' -Command 'New-UDTable' -Content { $Columns = @( New-UDTableColumn -Property Name -Title "Name" -ShowFilter New-UDTableColumn -Property Value -Title "Value" -ShowFilter ) $Data = 1..1000 | ForEach-Object { [PSCustomObject]@{ Name = "Record-$_" Value = $_ } } New-UDTable -Columns $Columns -LoadData { foreach ($Filter in $EventData.Filters) { $Data = $Data | Where-Object -Property $Filter.Id -Match -Value $Filter.Value } $TotalCount = $Data.Count if (-not [string]::IsNullOrEmpty($EventData.OrderBy.Field)) { $Descending = $EventData.OrderDirection -ne 'asc' $Data = $Data | Sort-Object -Property ($EventData.orderBy.Field) -Descending:$Descending } $Data = $Data | Select-Object -First $EventData.PageSize -Skip ($EventData.Page * $EventData.PageSize) $Data | Out-UDTableData -Page $EventData.Page -TotalCount $TotalCount -Properties $EventData.Properties } -ShowFilter -ShowSort -ShowPagination -ToolbarContent { New-UDButton -Text 'Documentation' -Icon (New-UDIcon -Icon book) } -Title "Table Demo" } New-UDComponentDemo -Title 'Tabs' -Icon 'Tablet' -Description 'Tabs make it easy to explore and switch between different views.' -Command 'New-UDTabs' -Content { New-UDStack -Direction 'column' -Content { New-UDTabs -Tabs { New-UDTab -Text 'Item One' -Content { New-UDTypography -Text 'Item One' -Variant 'h2' } New-UDTab -Text 'Item Two' -Content { New-UDTypography -Text 'Item Two' -Variant 'h2' } New-UDTab -Text 'Item Three' -Content { New-UDTypography -Text 'Item Three' -Variant 'h2' } } New-UDTabs -Tabs { New-UDTab -Text 'Item One' -Content { New-UDTypography -Text 'Item One' -Variant 'h2' } New-UDTab -Text 'Item Two' -Content { New-UDTypography -Text 'Item Two' -Variant 'h2' } New-UDTab -Text 'Item Three' -Content { New-UDTypography -Text 'Item Three' -Variant 'h2' } } -Orientation vertical New-UDTabs -Tabs { New-UDTab -Text 'Item One' -Content { Get-Date } -Dynamic New-UDTab -Text 'Item Two' -Content { Get-Date } -Dynamic New-UDTab -Text 'Item Three' -Content { Get-Date } -Dynamic } -RenderOnActive } } New-UDComponentDemo -Title 'Textbox' -Icon 'Keyboard' -Description 'A textbox lets users enter and edit text.' -Command 'New-UDTextbox' -Content { New-UDStack -Direction 'column' -Content { New-UDTextbox -Label 'Standard' -Placeholder 'Textbox' New-UDTextbox -Label 'Disabled' -Placeholder 'Textbox' -Disabled New-UDTextbox -Label 'Textbox' -Value 'With value' New-UDTextbox -Label 'Password' -Type password New-UDTextbox -Label 'Number' -Type number New-UDTextbox -Label 'time' -Type time New-UDTextbox -Label 'datetime' -Type datetime-local New-UDTextbox -Label 'date' -Type date New-UDTextbox -Label 'color' -Type color New-UDTextbox -Multiline -Rows 4 -RowsMax 10 New-UDTextbox -Id "ServerGroups" -Icon (New-UDIcon -Icon 'server') -Value "This is my server" } } New-UDComponentDemo -Title 'Timeline' -Icon 'Timeline' -Description 'The timeline displays a list of events in chronological order.' -Command 'New-UDTimeline' -Content { New-UDTimeline -Children { New-UDTimelineItem -Content { 'Breakfast' } -OppositeContent { '7:45 AM' } New-UDTimelineItem -Content { 'Welcome Message' } -OppositeContent { '9:00 AM' } New-UDTimelineItem -Content { 'State of the Shell' } -OppositeContent { '9:30 AM' } New-UDTimelineItem -Content { 'General Session' } -OppositeContent { '11:00 AM' } } -Position alternate } New-UDComponentDemo -Title 'Time Picker' -Icon 'Clock' -Description 'Time pickers pickers provide a simple way to select a single value from a pre-determined set.' -Command 'New-UDTimePicker' -Content { New-UDStack -Direction 'column' -Content { New-UDTimePicker New-UDTimePicker -Locale fr New-UDTimePicker -DisableAmPm } } New-UDComponentDemo -Title 'Tooltip' -Icon 'Readme' -Description 'Tooltips display informative text when users hover over, focus on, or tap an element.' -Command 'New-UDTooltip' -Content { New-UDTooltip -Content { New-UDIcon -Icon 'User' -Size '3x' } -TooltipContent { "User" } New-UDTooltip -Content { New-UDIcon -Icon 'User' -Size '3x' } -TooltipContent { "User" } -Place 'bottom' New-UDTooltip -Content { New-UDIcon -Icon 'User' -Size '3x' } -TooltipContent { New-UDPaper -Children { "User" } } New-UDTooltip -Content { New-UDIcon -Icon 'User' -Size '3x' } -TooltipContent { "User" } -Type 'success' } New-UDComponentDemo -Title 'Transfer List' -Icon 'RightLeft' -Description 'A transfer list (or "shuttle") enables the user to move one or more list items between lists.' -Command 'New-UDTransferList' -Content { New-UDTransferList -Item { New-UDTransferListItem -Name 'test1' -Value 1 New-UDTransferListItem -Name 'test2' -Value 2 New-UDTransferListItem -Name 'test3' -Value 3 New-UDTransferListItem -Name 'test4' -Value 4 New-UDTransferListItem -Name 'test5' -Value 5 } } New-UDComponentDemo -Title 'Tree View' -Icon 'Tree' -Description 'A tree view component presents a hierarchical list.' -Command 'New-UDTreeView' -Content { New-UDTreeView -Node { New-UDTreeNode -Name 'Level 1' -Children { New-UDTreeNode -Name 'Level 2 - Item 1' New-UDTreeNode -Name 'Level 2 - Item 2' New-UDTreeNode -Name 'Level 2 - Item 3' -Children { New-UDTreeNode -Name 'Level 3' } } } } New-UDComponentDemo -Title 'Typography' -Icon 'Font' -Description 'Use typography to present your design and content as clearly and efficiently as possible.' -Command 'New-UDTypography' -Content { @("h1", "h2", "h3", "h4", "h5", "h6", "subtitle1", "subtitle2", "body1", "body2", "caption", "button", "overline", "srOnly", "inherit", "display4", "display3", "display2", "display1", "headline", "title", "subheading") | ForEach-Object { New-UDTypography -Variant $_ -Text $_ -GutterBottom New-UDElement -Tag 'p' -Content {} } } New-UDComponentDemo -Title 'Upload' -Icon 'Upload' -Description 'The UDUpload component is used to upload files to Universal Dashboard.' -Command 'New-UDUpload' -Content { New-UDUpload -OnUpload { Show-UDToast $Body } -Text 'Upload' } } $Pages = New-UDDemo $Navigation = New-UDDemo -Navigation $Pages = @(New-UDPage -Name 'About' -Content { New-UDGrid -Container -Content { New-UDGrid -Item -MediumSize 6 -SmallSize 12 -Content { New-UDImage -Url '/admin/logo.png' New-UDTypography -Variant h2 -Text 'A single pane of glass for your automation environment.' New-UDTypography -Variant h5 -Text 'PowerShell Unviersal allows you to create web interfaces for scripts, API endpoints and script scheduling.' New-UDButton -Icon (New-UDIcon -Icon 'Download') -Href "https://www.ironmansoftware.com/powershell-universal/downloads" -Text 'Get Started for Free' } New-UDGrid -Item -MediumSize 6 -SmallSize 12 -Content { New-UDGrid -Container -Content { New-UDGrid -Item -SmallSize 6 -Content { New-UDCard -Title 'APIs' -Content { New-UDTypography "Invoke your PowerShell scripts over HTTP with RESTful API endpoints" New-UDSyntaxHighlighter -Code "Invoke-RestMethod '/get' -Method 'GET' " } } New-UDGrid -Item -SmallSize 6 -Content { New-UDCard -Title 'Scripts and Scheduling' -Content { New-UDTypography "Store your scripts in a single, easy to use environment. Schedule jobs with a system designed for PowerShell. Track who did what." New-UDButton -Text 'See How' -Href "/admin/automation/scripts" } } } New-UDGrid -Container -Content { New-UDGrid -Item -SmallSize 6 -Content { New-UDCard -Title 'User Interfaces' -Content { New-UDTypography "Create interfaces, like this one, using PowerShell scripts. Highly customizable. Super cool." New-UDButton -Text 'See How' -Href "/admin/dashboards/1" } } New-UDGrid -Item -SmallSize 6 -Content { New-UDCard -Title 'Enterprise Features' -Content { New-UDButton -Text 'Buy A License' -Href "https://ironmansoftware.com/pricing/powershell-universal" -Icon (New-UDIcon -Icon 'ShoppingCart') New-UDList -Children { New-UDListItem -Label 'SQL Support' -Icon (New-UDIcon -Icon 'CheckCircle' -Color 'green') New-UDListItem -Label 'Git Integration' -Icon (New-UDIcon -Icon 'CheckCircle' -Color 'green') New-UDListItem -Label 'High Availability' -Icon (New-UDIcon -Icon 'CheckCircle' -Color 'green') New-UDListItem -Label 'OpenID Connect' -Icon (New-UDIcon -Icon 'CheckCircle' -Color 'green') New-UDListItem -Label 'SAML2' -Icon (New-UDIcon -Icon 'CheckCircle' -Color 'green') New-UDListItem -Label 'WS-Federation' -Icon (New-UDIcon -Icon 'CheckCircle' -Color 'green') New-UDListItem -Label 'Role-Based Access Controls' -Icon (New-UDIcon -Icon 'CheckCircle' -Color 'green') New-UDListItem -Label 'Rate Limiting' -Icon (New-UDIcon -Icon 'CheckCircle' -Color 'green') New-UDListItem -Label 'Terminals' -Icon (New-UDIcon -Icon 'CheckCircle' -Color 'green') New-UDListItem -Label 'Triggers' -Icon (New-UDIcon -Icon 'CheckCircle' -Color 'green') } } } } } } }) + $Pages $Navigation = @( New-UDListItem -Label 'About' -Href '/About' -Icon (New-UDIcon -Icon 'CircleQuestion') New-UDListItem -Label 'Samples' -Icon (New-UDIcon -Icon 'BarChart') -Children { $Navigation } New-UDListItem -Label 'Admin Console' -Icon (New-UDIcon -Icon 'Toolbox') -OnClick { Invoke-UDRedirect -Url '/admin' -OpenInNewWindow -Native } New-UDListItem -Label 'Documentation' -Icon (New-UDIcon -Icon 'Book') -OnClick { Invoke-UDRedirect -Url "https://docs.powershelluniversal.com" -OpenInNewWindow -Native } New-UDListItem -Label 'Forums' -Icon (New-UDIcon -Icon 'Users') -OnClick { Invoke-UDRedirect -Url "https://forums.ironmansoftware.com" -OpenInNewWindow -Native } New-UDListItem -Label 'Licensing' -Icon (New-UDIcon -Icon 'CartShopping') -OnClick { Invoke-UDRedirect -Url "https://www.ironmansoftware.com/pricing/powershell-universal" -OpenInNewWindow -Native } ) New-UDDashboard -Title 'PowerShell Universal' -NavigationLayout permanent -Navigation $Navigation -Pages $Pages -Menu { New-UDMenuItem -Text 'Profile' -Icon (New-UDIcon -Icon 'User') New-UDMenuItem -Text 'Change Password' -Icon (New-UDIcon -Icon 'Lock') -OnClick { Show-UDToast "Coming soon!" } } #-Theme (Get-UDTheme -Name 'MaterialDesign') |