diff --git a/doc/styles/NavigationView.md b/doc/styles/NavigationView.md index 50e9243bd..dc369ebc9 100644 --- a/doc/styles/NavigationView.md +++ b/doc/styles/NavigationView.md @@ -15,25 +15,31 @@ IsDefaultStyle\*: Styles in this column will be set as the default implicit styl ## Lightweight Styling -| Key | Type | Value | -|---------------------------------------------------------------|-------------------|-------------------------------------------------| -| `MaterialNavigationViewSplitViewCornerRadius` | `CornerRadius` | 0,14,14,0 | -| `MaterialNavigationViewContentGridCornerRadius` | `CornerRadius` | 14,0,0,14 | +| Key | Type | Value | +|---------------------------------------------------------------|-------------------|---------------------------------------------------| +| `MaterialNavigationViewSplitViewCornerRadius` | `CornerRadius` | 0 | +| `MaterialNavigationViewContentGridCornerRadius` | `CornerRadius` | 0 | +| `MaterialNavigationViewSplitViewPadding` | `Thickness` | 0,12 | | `MaterialNavigationViewButtonWidth` | `Double` | 56 | -| `MaterialNavigationViewButtonCornerRadius` | `CornerRadius` | 28 | +| `MaterialNavigationViewButtonHeight` | `Double` | 32 | +| `MaterialNavigationViewButtonCornerRadius` | `CornerRadius` | 16 | | `MaterialNavigationViewButtonIconLength` | `Double` | 24 | | `MaterialNavigationViewButtonIconSymbolFontSize` | `Double` | 24 | | `MaterialNavigationViewButtonMarginWhenStackedVertically` | `Thickness` | 12,0 | | `MaterialNavigationItemHeight` | `Double` | 56 | +| `MaterialNavigationItemHeightCompact` | `Double` | 32 | +| `MaterialNavigationItemMarginCompact` | `Double` | 12 | | `MaterialNavigationViewItemCornerRadius` | `CornerRadius` | 28 | | `MaterialNavigationViewItemCornerRadiusLeftOnly` | `CornerRadius` | 28,0,0,28 | +| `MaterialNavigationViewItemCornerRadiusCompact` | `CornerRadius` | 16 | | `MaterialNavigationItemLeftMargin` | `Thickness` | 12,0 | | `MaterialNavigationItemIconLength` | `Double` | 24 | | `MaterialNavigationItemContentMargin` | `Thickness` | 12,0,0,0 | | `MaterialNavigationItemContentMarginWithoutIcon` | `Thickness` | 0 | +| `MaterialNavigationItemContentPaddingCompact` | `Thickness` | 16,4 | | `NavigationViewAutoSuggestBoxMargin` | `Thickness` | 16,0 | | `TopNavigationViewAutoSuggestBoxMargin` | `Thickness` | 4,0 | -| `PaneToggleButtonHeight` | `Double` | 56 | +| `PaneToggleButtonHeight` | `Double` | 32 | | `PaneToggleButtonWidth` | `Double` | 80 | | `NavigationViewCompactPaneLength` | `Double` | 80 | | `NavigationViewIconBoxWidth` | `Double` | 40 | @@ -74,7 +80,7 @@ IsDefaultStyle\*: Styles in this column will be set as the default implicit styl | `NavigationViewPaneTitlePresenterMargin` | `Thickness` | 8,4,0,0 | | `NavigationViewItemMargin` | `Thickness` | 0 | | `TopNavigationViewItemMargin` | `Thickness` | 0 | -| `NavigationViewItemSeparatorMargin` | `Thickness` | 0,3,0,4 | +| `NavigationViewItemSeparatorMargin` | `Thickness` | 28,0 | | `NavigationViewCompactItemSeparatorMargin` | `Thickness` | 0,3,0,4 | | `TopNavigationViewItemSeparatorMargin` | `Thickness` | 3,0,4,0 | | `TopNavigationViewOverflowButtonMargin` | `Thickness` | 0 | @@ -96,7 +102,7 @@ IsDefaultStyle\*: Styles in this column will be set as the default implicit styl | `TopNavigationViewOverflowMenuPadding` | `Thickness` | 0,8 | | `NavigationViewItemChildrenMenuFlyoutPadding` | `Thickness` | 0,8 | | `NavigationViewItemExpandedGlyphFontSize` | `Double` | 8 | -| `NavigationViewItemExpandedGlyph` | `String` |  | +| `NavigationViewItemExpandedGlyph` | `String` |  | | `SplitViewOpenPaneThemeLength` | `Double` | 320 | | `SplitViewCompactPaneThemeLength` | `Double` | 48 | | `SplitViewLeftBorderThemeThickness` | `Thickness` | 0,0,1,0 | @@ -107,35 +113,35 @@ IsDefaultStyle\*: Styles in this column will be set as the default implicit styl | `SplitViewPaneAnimationCloseDuration` | `String` | 00:00:00.1 | | `SplitViewPaneRootCornerRadius` | `CornerRadius` | 0 | | `NavigationViewBackground` | `SolidColorBrush` | `SurfaceBrush` | -| `NavigationViewDefaultPaneBackground` | `SolidColorBrush` | `SystemControlPageBackgroundChromeLowBrush` | -| `NavigationViewPaneBackground` | `SolidColorBrush` | `SurfaceBrush` | +| `NavigationViewDefaultPaneBackground` | `SolidColorBrush` | `SurfaceVariantBrush` | +| `NavigationViewPaneBackground` | `SolidColorBrush` | `SurfaceVariantBrush` | | `NavigationViewTopPaneBackground` | `SolidColorBrush` | `SystemControlTransparentBrush` | | `NavigationViewDefaultPaneBorderBrush` | `SolidColorBrush` | `SurfaceBrush` | | `NavigationViewButtonForeground` | `SolidColorBrush` | `OnSurfaceBrush` | | `NavigationViewButtonForegroundPointerOver` | `SolidColorBrush` | `OnSurfaceBrush` | | `NavigationViewButtonForegroundPressed` | `SolidColorBrush` | `OnSurfaceBrush` | -| `NavigationViewButtonForegroundDisabled` | `SolidColorBrush` | `OnSurfaceDisabledBrush` | +| `NavigationViewButtonForegroundDisabled` | `SolidColorBrush` | `OnSurfaceVariantBrush` | | `NavigationViewButtonBackground` | `SolidColorBrush` | `SystemControlTransparentBrush` | -| `NavigationViewButtonBackgroundPointerOver` | `SolidColorBrush` | `PrimaryHoverBrush` | -| `NavigationViewButtonBackgroundPressed` | `SolidColorBrush` | `PrimaryPressedBrush` | +| `NavigationViewButtonBackgroundPointerOver` | `SolidColorBrush` | `OnSurfaceHoverBrush` | +| `NavigationViewButtonBackgroundPressed` | `SolidColorBrush` | `OnSurfacePressedBrush` | | `NavigationViewButtonBackgroundDisabled` | `SolidColorBrush` | `SystemControlTransparentBrush` | | `NavigationViewButtonRippleFeedback` | `SolidColorBrush` | `PrimaryPressedBrush` | | `NavigationViewItemBackground` | `SolidColorBrush` | `SystemControlTransparentBrush` | -| `NavigationViewItemBackgroundPointerOver` | `SolidColorBrush` | `PrimaryHoverBrush` | -| `NavigationViewItemBackgroundPressed` | `SolidColorBrush` | `PrimaryPressedBrush` | -| `NavigationViewItemBackgroundDisabled` | `SolidColorBrush` | `OnSurfaceDisabledBrush` | -| `NavigationViewItemBackgroundSelected` | `SolidColorBrush` | `PrimarySelectedBrush` | -| `NavigationViewItemBackgroundSelectedPointerOver` | `SolidColorBrush` | `SystemControlTransparentBrush` | -| `NavigationViewItemBackgroundSelectedPressed` | `SolidColorBrush` | `SystemControlTransparentBrush` | -| `NavigationViewItemBackgroundSelectedDisabled` | `SolidColorBrush` | `SystemControlTransparentBrush` | +| `NavigationViewItemBackgroundPointerOver` | `SolidColorBrush` | `OnSurfaceHoverBrush` | +| `NavigationViewItemBackgroundPressed` | `SolidColorBrush` | `OnSurfacePressedBrush` | +| `NavigationViewItemBackgroundDisabled` | `SolidColorBrush` | `SystemControlTransparentBrush` | +| `NavigationViewItemBackgroundSelected` | `SolidColorBrush` | `SecondaryContainerBrush` | +| `NavigationViewItemBackgroundSelectedPointerOver` | `SolidColorBrush` | `OnSurfaceHoverBrush` | +| `NavigationViewItemBackgroundSelectedPressed` | `SolidColorBrush` | `OnSurfacePressedBrush` | +| `NavigationViewItemBackgroundSelectedDisabled` | `SolidColorBrush` | `OnSurfaceDisabledLowBrush` | | `NavigationViewItemForeground` | `SolidColorBrush` | `OnSurfaceBrush` | | `NavigationViewItemForegroundPointerOver` | `SolidColorBrush` | `SystemControlTransparentBrush` | | `NavigationViewItemForegroundPressed` | `SolidColorBrush` | `SystemControlTransparentBrush` | -| `NavigationViewItemForegroundDisabled` | `SolidColorBrush` | `SystemControlTransparentBrush` | +| `NavigationViewItemForegroundDisabled` | `SolidColorBrush` | `OnSurfaceVariantBrush` | | `NavigationViewItemForegroundSelected` | `SolidColorBrush` | `SystemControlTransparentBrush` | | `NavigationViewItemForegroundSelectedPointerOver` | `SolidColorBrush` | `SystemControlTransparentBrush` | | `NavigationViewItemForegroundSelectedPressed` | `SolidColorBrush` | `SystemControlTransparentBrush` | -| `NavigationViewItemForegroundSelectedDisabled` | `SolidColorBrush` | `SystemControlTransparentBrush` | +| `NavigationViewItemForegroundSelectedDisabled` | `SolidColorBrush` | `OnSurfaceVariantBrush` | | `NavigationViewItemBorderBrush` | `SolidColorBrush` | `SystemControlTransparentBrush` | | `NavigationViewItemBorderBrushPointerOver` | `SolidColorBrush` | `SystemControlTransparentBrush` | | `NavigationViewItemBorderBrushPressed` | `SolidColorBrush` | `SystemControlTransparentBrush` | @@ -145,13 +151,13 @@ IsDefaultStyle\*: Styles in this column will be set as the default implicit styl | `NavigationViewItemBorderBrushSelectedPressed` | `SolidColorBrush` | `SystemControlTransparentBrush` | | `NavigationViewItemBorderBrushSelectedDisabled` | `SolidColorBrush` | `SystemControlTransparentBrush` | | `NavigationViewItemSeparatorForeground` | `SolidColorBrush` | `OnSurfacePressedBrush` | -| `NavigationViewItemHeaderForeground` | `SolidColorBrush` | `SystemControlTransparentBrush` | +| `NavigationViewItemHeaderForeground` | `SolidColorBrush` | `OnSurfaceVariantBrush` | | `NavigationViewSelectionIndicatorForeground` | `SolidColorBrush` | `SystemControlTransparentBrush` | | `NavigationViewItemRippleFeedback` | `SolidColorBrush` | `PrimaryPressedBrush` | | `TopNavigationViewItemForeground` | `SolidColorBrush` | `OnSurfaceBrush` | | `TopNavigationViewItemForegroundPointerOver` | `SolidColorBrush` | `SystemControlTransparentBrush` | | `TopNavigationViewItemForegroundPressed` | `SolidColorBrush` | `SystemControlTransparentBrush` | -| `TopNavigationViewItemForegroundDisabled` | `SolidColorBrush` | `SystemControlTransparentBrush` | +| `TopNavigationViewItemForegroundDisabled` | `SolidColorBrush` | `OnSurfaceVariantBrush` | | `TopNavigationViewItemForegroundSelected` | `SolidColorBrush` | `SystemControlTransparentBrush` | | `TopNavigationViewItemForegroundSelectedPointerOver` | `SolidColorBrush` | `SystemControlTransparentBrush` | | `TopNavigationViewItemForegroundSelectedPressed` | `SolidColorBrush` | `SystemControlTransparentBrush` | diff --git a/src/library/Uno.Material/Styles/Controls/v2/NavigationView.xaml b/src/library/Uno.Material/Styles/Controls/v2/NavigationView.xaml index 1967de0e2..6473cfe1d 100644 --- a/src/library/Uno.Material/Styles/Controls/v2/NavigationView.xaml +++ b/src/library/Uno.Material/Styles/Controls/v2/NavigationView.xaml @@ -1,220 +1,420 @@  - - - - - - - - - - - 0,14,14,0 - 14,0,0,14 - - - 56 - 28 - 24 - 24 - 12,0 - - - 56 - 28 - 28,0,0,28 - 12,0 - 24 - 12,0,0,0 - 0 - - - - - 16,0 - 4,0 - 56 - 80 - 80 - 40 - 48 - 40 - 80 - 40 - 40 - 40 - 40 - - 56 - 56 - 24 - 3 - 24 - 2 - - 1 - 1 - - 0 - 1 - 3 - 12,0 - 16,0 - 12,0 - -24,44,0,0 - 0 - -1,3 - 1,1,0,0 - 0,1,0,0 - 0,1,0,0 - 4,0 - 1 - 56,44,0,0 - 0 - 0 - 0 - 0 - 8,4,0,0 - 0 - 0 - 0,3,0,4 - 0,3,0,4 - 3,0,4,0 - 0 - 4,-1,8,-1 - 0,0,0,0 - 8,-1,12,-1 - 12,0 - 0,0,-14,0 - -16,0,0,0 - 0,0,0,0 - -12,0,0,0 - 12,0,20,0 - 16,0,20,0 - -4,0,-8,0 - 12,0,12,0 - - 8,0,0,0 - 0 - 0 - - - 0,8 - 0,8 - - - 8 - - - - 320 - 48 - 0,0,1,0 - 1,0,0,0 - - 00:00:00.2 - 00:00:00.19999 - 00:00:00.1 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" + xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" + xmlns:local="using:Microsoft.UI.Xaml.Controls" + xmlns:animatedvisuals="using:Microsoft.UI.Xaml.Controls.AnimatedVisuals" + xmlns:media="using:Microsoft.UI.Xaml.Media" + xmlns:primitives="using:Microsoft.UI.Xaml.Controls.Primitives" + xmlns:toolkit="using:Uno.UI.Toolkit" + xmlns:um="using:Uno.Material" + xmlns:contract4Present="http://schemas.microsoft.com/winfx/2006/xaml/presentation?IsApiContractPresent(Windows.Foundation.UniversalApiContract,4)" + xmlns:contract4NotPresent="http://schemas.microsoft.com/winfx/2006/xaml/presentation?IsApiContractNotPresent(Windows.Foundation.UniversalApiContract,4)" + xmlns:contract7Present="http://schemas.microsoft.com/winfx/2006/xaml/presentation?IsApiContractPresent(Windows.Foundation.UniversalApiContract,7)" + xmlns:contract7NotPresent="http://schemas.microsoft.com/winfx/2006/xaml/presentation?IsApiContractNotPresent(Windows.Foundation.UniversalApiContract,7)" + xmlns:primitiveContract7Present="using:Microsoft.UI.Xaml.Controls.Primitives?IsApiContractPresent(Windows.Foundation.UniversalApiContract,7)" + xmlns:win="http://schemas.microsoft.com/winfx/2006/xaml/presentation" + xmlns:todo="what should be done" + mc:Ignorable="todo"> + + + + + + + + + + + 0 + 0 + 0,12 + + + 56 + 32 + 16 + 24 + 24 + 12,0 + + + 56 + 32 + 12 + 28 + 28,0,0,28 + 16 + 12,0 + 24 + 12,0,0,0 + 0 + 16,4 + + + + + 16,0 + 4,0 + 32 + 80 + 80 + 40 + 48 + 40 + 80 + 40 + 40 + 40 + 40 + + 56 + 56 + 24 + 3 + 24 + 2 + + 1 + 1 + + 0 + 1 + 3 + 12,0 + 16,0 + 12,0 + -24,44,0,0 + 0 + -1,3 + 1,1,0,0 + 0,1,0,0 + 0,1,0,0 + 4,0 + 1 + 56,44,0,0 + 0 + 0 + 0 + 0 + 8,4,0,0 + 0 + 0 + 28,0 + 0,3,0,4 + 3,0,4,0 + 0 + 4,-1,8,-1 + 0,0,0,0 + 8,-1,12,-1 + 12,0 + 0,0,-14,0 + -16,0,0,0 + 0,0,0,0 + -12,0,0,0 + 12,0,20,0 + 16,0,20,0 + -4,0,-8,0 + 12,0,12,0 + + 8,0,0,0 + 0 + 0 + + + 0,8 + 0,8 + + + 8 + + + + 320 + 48 + 0,0,1,0 + 1,0,0,0 + + 00:00:00.2 + 00:00:00.19999 + 00:00:00.1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + 0 + 0,12 + + + 56 + 32 + 16 + 24 + 24 + 12,0 + + + 56 + 32 + 12 + 28 + 28,0,0,28 + 16 + 12,0 + 24 + 12,0,0,0 + 0 + 16,4 + + + + + 16,0 + 4,0 + 32 + 80 + 80 + 40 + 48 + 40 + 80 + 40 + 40 + 40 + 40 + + 56 + 56 + 24 + 3 + 24 + 2 + + 1 + 1 + + 0 + 1 + 3 + 12,0 + 16,0 + 12,0 + -24,44,0,0 + 0 + -1,3 + 1,1,0,0 + 0,1,0,0 + 0,1,0,0 + 4,0 + 1 + 56,44,0,0 + 0 + 0 + 0 + 0 + 8,4,0,0 + 0 + 0 + 28,0 + 0,3,0,4 + 3,0,4,0 + 0 + 4,-1,8,-1 + 0,0,0,0 + 8,-1,12,-1 + 12,0 + 0,0,-14,0 + -16,0,0,0 + 0,0,0,0 + -12,0,0,0 + 12,0,20,0 + 16,0,20,0 + -4,0,-8,0 + 12,0,12,0 + + 8,0,0,0 + 0 + 0 + + + 0,8 + 0,8 + + + 8 + + + + 320 + 48 + 0,0,1,0 + 1,0,0,0 + + 00:00:00.2 + 00:00:00.19999 + 00:00:00.1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -224,185 +424,191 @@ - - - - - - - - 0,14,14,0 - 14,0,0,14 - - - 56 - 28 - 24 - 24 - 12,0 - - - 56 - 28 - 28,0,0,28 - 12,0 - 24 - 12,0,0,0 - 0 - - - - - 16,0 - 4,0 - 56 - 80 - 80 - 40 - 48 - 40 - 80 - 40 - 40 - 40 - 40 - - 56 - 56 - 24 - 3 - 24 - 2 - - 1 - 1 - - 0 - 1 - 3 - 12,0 - 16,0 - 12,0 - -24,44,0,0 - 0 - -1,3 - 1,1,0,0 - 0,1,0,0 - 0,1,0,0 - 4,0 - 1 - 56,44,0,0 - 0 - 0 - 0 - 0 - 8,4,0,0 - 0 - 0 - 0,3,0,4 - 0,3,0,4 - 3,0,4,0 - 0 - 4,-1,8,-1 - 0,0,0,0 - 8,-1,12,-1 - 12,0 - 0,0,-14,0 - -16,0,0,0 - 0,0,0,0 - -12,0,0,0 - 12,0,20,0 - 16,0,20,0 - -4,0,-8,0 - 12,0,12,0 - - 8,0,0,0 - 0 - 0 - - - 0,8 - 0,8 - - - 8 - - - - 320 - 48 - 0,0,1,0 - 1,0,0,0 - - 00:00:00.2 - 00:00:00.19999 - 00:00:00.1 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + 0 + 0 + 0,12 + + + 56 + 32 + 16 + 24 + 24 + 12,0 + + + 56 + 32 + 12 + 28 + 28,0,0,28 + 16 + 12,0 + 24 + 12,0,0,0 + 0 + 16,4 + + + + + 16,0 + 4,0 + 32 + 80 + 80 + 40 + 48 + 40 + 80 + 40 + 40 + 40 + 40 + + 56 + 56 + 24 + 3 + 24 + 2 + + 1 + 1 + + 0 + 1 + 3 + 12,0 + 16,0 + 12,0 + -24,44,0,0 + 0 + -1,3 + 1,1,0,0 + 0,1,0,0 + 0,1,0,0 + 4,0 + 1 + 56,44,0,0 + 0 + 0 + 0 + 0 + 8,4,0,0 + 0 + 0 + 28,0 + 0,3,0,4 + 3,0,4,0 + 0 + 4,-1,8,-1 + 0,0,0,0 + 8,-1,12,-1 + 12,0 + 0,0,-14,0 + -16,0,0,0 + 0,0,0,0 + -12,0,0,0 + 12,0,20,0 + 16,0,20,0 + -4,0,-8,0 + 12,0,12,0 + + 8,0,0,0 + 0 + 0 + + + 0,8 + 0,8 + + + 8 + + + + 320 + 48 + 0,0,1,0 + 1,0,0,0 + + 00:00:00.2 + 00:00:00.19999 + 00:00:00.1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -412,3394 +618,3226 @@ - - - - - - - - 0,14,14,0 - 14,0,0,14 - - - 56 - 28 - 24 - 24 - 12,0 - - - 56 - 28 - 28,0,0,28 - 12,0 - 24 - 12,0,0,0 - 0 - - - - - 16,0 - 4,0 - 56 - 80 - 80 - 40 - 48 - 40 - 80 - 40 - 40 - 40 - 40 - - 56 - 56 - 24 - 3 - 24 - 2 - - 1 - 1 - - 0 - 1 - 3 - 12,0 - 16,0 - 12,0 - -24,44,0,0 - 0 - -1,3 - 1,1,0,0 - 0,1,0,0 - 0,1,0,0 - 4,0 - 1 - 56,44,0,0 - 0 - 0 - 0 - 0 - 8,4,0,0 - 0 - 0 - 0,3,0,4 - 0,3,0,4 - 3,0,4,0 - 0 - 4,-1,8,-1 - 0,0,0,0 - 8,-1,12,-1 - 12,0 - 0,0,-14,0 - -16,0,0,0 - 0,0,0,0 - -12,0,0,0 - 12,0,20,0 - 16,0,20,0 - -4,0,-8,0 - 12,0,12,0 - - 8,0,0,0 - 0 - 0 - - - 0,8 - 0,8 - - - 8 - - - - 320 - 48 - 0,0,1,0 - 1,0,0,0 - - 00:00:00.2 - 00:00:00.19999 - 00:00:00.1 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +