ironservices-maui/Controls/LoginView.xaml

161 lines
8.7 KiB
XML
Executable File

<?xml version="1.0" encoding="utf-8" ?>
<ContentView xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="IronServices.Maui.Controls.LoginView"
x:Name="ThisView">
<ScrollView>
<VerticalStackLayout Spacing="2" Padding="2" VerticalOptions="Center"
WidthRequest="{Binding FormMaxWidth, Source={x:Reference ThisView}}"
HorizontalOptions="Center">
<!-- Logo Badge (when LogoText is set) -->
<Border BackgroundColor="{Binding LogoBackgroundColor, Source={x:Reference ThisView}, TargetNullValue={StaticResource Primary}}"
StrokeThickness="0"
StrokeShape="RoundRectangle 16"
HeightRequest="80"
WidthRequest="80"
HorizontalOptions="Center"
IsVisible="{Binding LogoText, Source={x:Reference ThisView}, Converter={StaticResource NullToBoolConverter}}">
<Label Text="{Binding LogoText, Source={x:Reference ThisView}}"
FontSize="32"
FontAttributes="Bold"
TextColor="White"
HorizontalOptions="Center"
VerticalOptions="Center" />
</Border>
<!-- Logo Image (when Logo is set) -->
<Image Source="{Binding Logo, Source={x:Reference ThisView}}"
HeightRequest="80"
Aspect="AspectFit"
HorizontalOptions="Center"
IsVisible="{Binding Logo, Source={x:Reference ThisView}, Converter={StaticResource NullToBoolConverter}}" />
<!-- Title -->
<Label Text="{Binding Title, Source={x:Reference ThisView}}"
FontSize="28"
FontAttributes="Bold"
HorizontalOptions="Center"
TextColor="{StaticResource Primary}" />
<!-- Subtitle -->
<Label Text="{Binding Subtitle, Source={x:Reference ThisView}}"
FontSize="14"
TextColor="{StaticResource Gray500}"
HorizontalOptions="Center" />
<!-- Login Form Card -->
<Border Stroke="{AppThemeBinding Light={StaticResource Gray200}, Dark={StaticResource Gray700}}"
StrokeThickness="1"
StrokeShape="RoundRectangle 12"
BackgroundColor="{AppThemeBinding Light={StaticResource White}, Dark={StaticResource Gray800}}"
Padding="30"
Margin="0,6,0,0">
<VerticalStackLayout Spacing="14">
<!-- Email Field -->
<VerticalStackLayout Spacing="4">
<Label Text="Email"
FontSize="12"
TextColor="{AppThemeBinding Light={StaticResource Gray600}, Dark={StaticResource Gray400}}" />
<Border Stroke="{AppThemeBinding Light={StaticResource Gray300}, Dark={StaticResource Gray600}}"
StrokeShape="RoundRectangle 8"
BackgroundColor="{AppThemeBinding Light={StaticResource White}, Dark={StaticResource Gray700}}"
Padding="12,8">
<Entry Text="{Binding Email, Source={x:Reference ThisView}}"
Placeholder="you@company.com"
Keyboard="Email"
ReturnType="Next"
IsEnabled="{Binding IsBusy, Source={x:Reference ThisView}, Converter={StaticResource InvertedBoolConverter}}" />
</Border>
</VerticalStackLayout>
<!-- Password Field -->
<VerticalStackLayout Spacing="4">
<Label Text="Password"
FontSize="12"
TextColor="{AppThemeBinding Light={StaticResource Gray600}, Dark={StaticResource Gray400}}" />
<Border Stroke="{AppThemeBinding Light={StaticResource Gray300}, Dark={StaticResource Gray600}}"
StrokeShape="RoundRectangle 8"
BackgroundColor="{AppThemeBinding Light={StaticResource White}, Dark={StaticResource Gray700}}"
Padding="12,8">
<Entry Text="{Binding Password, Source={x:Reference ThisView}}"
Placeholder="Enter your password"
IsPassword="True"
ReturnType="Done"
IsEnabled="{Binding IsBusy, Source={x:Reference ThisView}, Converter={StaticResource InvertedBoolConverter}}" />
</Border>
</VerticalStackLayout>
<!-- Error Message -->
<Label Text="{Binding ErrorMessage, Source={x:Reference ThisView}}"
TextColor="Red"
FontSize="12"
IsVisible="{Binding ErrorMessage, Source={x:Reference ThisView}, Converter={StaticResource StringToBoolConverter}}"
HorizontalOptions="Center" />
<!-- Login Button -->
<Button Text="{Binding IsBusy, Source={x:Reference ThisView}, Converter={StaticResource BoolToTextConverter}, ConverterParameter='Signing in...|Sign In'}"
Clicked="OnLoginClicked"
IsEnabled="{Binding IsBusy, Source={x:Reference ThisView}, Converter={StaticResource InvertedBoolConverter}}"
BackgroundColor="{StaticResource Primary}"
TextColor="White"
CornerRadius="8"
HeightRequest="48"
FontAttributes="Bold"
Margin="0,8,0,0" />
<!-- Loading Indicator -->
<ActivityIndicator IsRunning="{Binding IsBusy, Source={x:Reference ThisView}}"
IsVisible="{Binding IsBusy, Source={x:Reference ThisView}}"
Color="{StaticResource Primary}"
HorizontalOptions="Center" />
<!-- Register Link -->
<HorizontalStackLayout HorizontalOptions="Center"
Spacing="4"
IsVisible="{Binding ShowRegisterLink, Source={x:Reference ThisView}}">
<Label Text="Don't have an account?"
FontSize="12"
TextColor="{AppThemeBinding Light={StaticResource Gray500}, Dark={StaticResource Gray400}}"
VerticalOptions="Center" />
<Label Text="Sign Up"
FontSize="12"
TextColor="{StaticResource Primary}"
TextDecorations="Underline"
VerticalOptions="Center">
<Label.GestureRecognizers>
<TapGestureRecognizer Tapped="OnRegisterTapped" />
</Label.GestureRecognizers>
</Label>
</HorizontalStackLayout>
<!-- Forgot Password Link -->
<Label Text="Forgot Password?"
FontSize="12"
TextColor="{StaticResource Primary}"
TextDecorations="Underline"
HorizontalOptions="Center"
IsVisible="{Binding ShowForgotPasswordLink, Source={x:Reference ThisView}}">
<Label.GestureRecognizers>
<TapGestureRecognizer Tapped="OnForgotPasswordTapped" />
</Label.GestureRecognizers>
</Label>
</VerticalStackLayout>
</Border>
<!-- Footer -->
<Label Text="{Binding FooterText, Source={x:Reference ThisView}}"
FontSize="12"
TextColor="{StaticResource Gray400}"
HorizontalOptions="Center"
IsVisible="{Binding FooterText, Source={x:Reference ThisView}, Converter={StaticResource NullToBoolConverter}}"
Margin="0,24,0,0" />
</VerticalStackLayout>
</ScrollView>
</ContentView>