161 lines
8.7 KiB
XML
161 lines
8.7 KiB
XML
<?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>
|