Option Strict On
Option Explicit On

Imports System.Collections.Generic
Imports Nexamas.UI.Architecture
Imports Nexamas.UI.Components.DropDownMenu
Imports Nexamas.UI.Components.ListPopup
Imports Nexamas.UI.Components.ListRendering
Imports Nexamas.UI.Controls
Imports Nexamas.UI.FloatRuntime
Imports Nexamas.UI.Rendering
Imports Nexamas.UI.Values

Namespace Nexamas.UI.Components

    ''' <summary>
    ''' Built-in architecture descriptors owned by the Rendering family.
    ''' </summary>
    Friend NotInheritable Class MASComponentRenderingArchitectureProvider
        Implements Nexamas.UI.Architecture.IMASComponentRegistrationProvider

        Public Function GetComponents() As IEnumerable(Of Nexamas.UI.Architecture.MASComponentDescriptor) Implements Nexamas.UI.Architecture.IMASComponentRegistrationProvider.GetComponents
            Dim list As New List(Of MASComponentDescriptor)()

            list.Add(MASComponentDescriptor.Create(Of Nexamas.UI.Scroll.MASScrollBarContract)(
                category:=MASComponentCategory.InternalSurface,
                controlKind:=CommonEnums.ControlKind.ScrollBar,
                surfaceFamily:=CommonEnums.SurfaceFamily.ScrollBar,
                materialRole:=MASMaterialRole.Control,
                interactionRole:=MASInteractionRole.Scrollable,
                shadowRole:=MASShadowRole.Soft,
                radiusRole:=MASRadiusRole.SurfaceFamily,
                typographyRole:=MASTypographyRole.None,
                themeSurfaceRole:=NexamasUISurfaceRole.Control,
                themeColorRole:=NexamasUIColorRole.Border,
                themeStateRole:=NexamasUIStateRole.Interactive,
                inputRole:=MASInputRole.PointerOnly,
                focusRole:=MASFocusRole.NotFocusable
            ))

            list.Add(MASComponentDescriptor.Create(Of MASTreeRowContract)(
                category:=MASComponentCategory.InternalSurface,
                controlKind:=CommonEnums.ControlKind.TreeRow,
                surfaceFamily:=CommonEnums.SurfaceFamily.Row,
                materialRole:=MASMaterialRole.Control,
                interactionRole:=MASInteractionRole.Selectable,
                shadowRole:=MASShadowRole.Soft,
                radiusRole:=MASRadiusRole.SurfaceFamily,
                typographyRole:=MASTypographyRole.Body,
                themeSurfaceRole:=NexamasUISurfaceRole.List,
                themeColorRole:=NexamasUIColorRole.TextBody,
                themeStateRole:=NexamasUIStateRole.Selectable,
                inputRole:=MASInputRole.PointerOnly,
                focusRole:=MASFocusRole.NotFocusable
            ))

            list.Add(MASComponentDescriptor.Create(Of MASTileItemContract)(
                category:=MASComponentCategory.InternalSurface,
                controlKind:=CommonEnums.ControlKind.Tile,
                surfaceFamily:=CommonEnums.SurfaceFamily.Tile,
                materialRole:=MASMaterialRole.ListSurface,
                interactionRole:=MASInteractionRole.Selectable,
                shadowRole:=MASShadowRole.Control,
                radiusRole:=MASRadiusRole.SurfaceFamily,
                typographyRole:=MASTypographyRole.Body,
                themeSurfaceRole:=NexamasUISurfaceRole.List,
                themeColorRole:=NexamasUIColorRole.TextBody,
                themeStateRole:=NexamasUIStateRole.Selectable,
                inputRole:=MASInputRole.PointerOnly,
                focusRole:=MASFocusRole.NotFocusable
            ))

            list.Add(MASComponentDescriptor.Create(Of MASListRowContract)(
                category:=MASComponentCategory.InternalSurface,
                controlKind:=CommonEnums.ControlKind.ListRow,
                surfaceFamily:=CommonEnums.SurfaceFamily.Row,
                materialRole:=MASMaterialRole.Control,
                interactionRole:=MASInteractionRole.Selectable,
                shadowRole:=MASShadowRole.Soft,
                radiusRole:=MASRadiusRole.SurfaceFamily,
                typographyRole:=MASTypographyRole.Body,
                themeSurfaceRole:=NexamasUISurfaceRole.List,
                themeColorRole:=NexamasUIColorRole.TextBody,
                themeStateRole:=NexamasUIStateRole.Selectable,
                inputRole:=MASInputRole.PointerOnly,
                focusRole:=MASFocusRole.NotFocusable
            ))

            list.Add(MASComponentDescriptor.Create(Of MASCard)(
                category:=MASComponentCategory.InternalSurface,
                controlKind:=CommonEnums.ControlKind.Card,
                surfaceFamily:=CommonEnums.SurfaceFamily.Card,
                materialRole:=MASMaterialRole.Panel,
                interactionRole:=MASInteractionRole.Passive,
                shadowRole:=MASShadowRole.Soft,
                radiusRole:=MASRadiusRole.SurfaceFamily,
                typographyRole:=MASTypographyRole.Body,
                themeSurfaceRole:=NexamasUISurfaceRole.Panel,
                themeColorRole:=NexamasUIColorRole.TextBody,
                themeStateRole:=NexamasUIStateRole.Passive,
                inputRole:=MASInputRole.Passive,
                focusRole:=MASFocusRole.NotFocusable
            ))

            list.Add(MASComponentDescriptor.Create(Of SegmentedControl)(
                category:=MASComponentCategory.InternalSurface,
                surfaceFamily:=CommonEnums.SurfaceFamily.SegmentedControl,
                materialRole:=MASMaterialRole.Control,
                interactionRole:=MASInteractionRole.Selectable,
                shadowRole:=MASShadowRole.Control,
                radiusRole:=MASRadiusRole.SurfaceFamily,
                typographyRole:=MASTypographyRole.Body,
                themeSurfaceRole:=NexamasUISurfaceRole.Control,
                themeColorRole:=NexamasUIColorRole.TextBody,
                themeStateRole:=NexamasUIStateRole.Selectable,
                inputRole:=MASInputRole.PointerOnly,
                focusRole:=MASFocusRole.NotFocusable
            ))

            list.Add(MASComponentDescriptor.Create(Of MASPanelShellContract)(
                category:=MASComponentCategory.InternalSurface,
                controlKind:=CommonEnums.ControlKind.PanelShell,
                surfaceFamily:=CommonEnums.SurfaceFamily.PanelShell,
                materialRole:=MASMaterialRole.Dialog,
                interactionRole:=MASInteractionRole.Composite,
                shadowRole:=MASShadowRole.Dialog,
                radiusRole:=MASRadiusRole.SurfaceFamily,
                typographyRole:=MASTypographyRole.Body,
                themeSurfaceRole:=NexamasUISurfaceRole.Dialog,
                themeColorRole:=NexamasUIColorRole.TextBody,
                themeStateRole:=NexamasUIStateRole.Passive,
                inputRole:=MASInputRole.Passive,
                focusRole:=MASFocusRole.NotFocusable
            ))

            Return list
        End Function

    End Class

End Namespace
