Compare commits
30 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| d6efa72745 | |||
| 2ce47ee305 | |||
| 90b2abd587 | |||
| 61ff949c19 | |||
| d8dea1913a | |||
| 1f99e49dec | |||
| 8bac9fbc58 | |||
| e0aad6277d | |||
| 99ce4b8e55 | |||
| bdf52e82af | |||
| a8244ec0de | |||
| 2affd56e38 | |||
| 6714cccf1d | |||
| 06575fb224 | |||
| 68c19a9adf | |||
| ebf7aec77c | |||
| 5c6a5fb41d | |||
| 3754c67449 | |||
| 582d6b5663 | |||
| fc5c8d7b51 | |||
|
|
0f8d0867ad | ||
|
|
0c782fd9b4 | ||
| e9c155b272 | |||
| fe0f1d98ef | |||
| 3a52f5c19f | |||
| 5a6d96ca97 | |||
| 0c52789cf6 | |||
| b50ee1a251 | |||
| 50ae20abd1 | |||
|
|
79e1d52391 |
14
.claude/settings.local.json
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"permissions": {
|
||||
"allow": [
|
||||
"WebFetch(domain:raw.githubusercontent.com)",
|
||||
"Bash(chmod +x \"/c/Users/Nouredeen/.claude/scripts/context-bar.sh\")",
|
||||
"Bash(dotnet build:*)",
|
||||
"WebFetch(domain:git.nouredeen.dev)",
|
||||
"WebFetch(domain:supabase.com)",
|
||||
"Bash(grep:*)",
|
||||
"Bash(cmd:*)"
|
||||
]
|
||||
},
|
||||
"spinnerTipsEnabled": true
|
||||
}
|
||||
258
.claude/skills/avalonia/SKILL.md
Normal file
@@ -0,0 +1,258 @@
|
||||
---
|
||||
name: avalonia
|
||||
description: >
|
||||
Use when working on any Avalonia UI code — AXAML, control styling, bindings,
|
||||
control templates, animations, custom controls, platform differences, or
|
||||
LiveCharts2/Svg.Skia integration. Triggers on questions about Avalonia
|
||||
controls, properties, ControlThemes, styles, pseudo-classes, DataTemplates,
|
||||
ViewLocator, or any "how do I do X in Avalonia" question.
|
||||
---
|
||||
|
||||
# Avalonia UI Skill
|
||||
|
||||
You are working in an Avalonia UI project. This skill gives you accurate,
|
||||
verified knowledge about Avalonia and prevents hallucinating WPF-style patterns
|
||||
that do not work in Avalonia.
|
||||
|
||||
---
|
||||
|
||||
## Step 1 — Check before you answer
|
||||
|
||||
**NEVER** answer from memory alone for:
|
||||
- Specific control properties or template part names
|
||||
- Pseudo-class selectors (`:pointerover`, `:pressed`, `:focus`, etc.)
|
||||
- Animation API (`Animation`, `KeyFrame`, `Cue`, `Easing` classes)
|
||||
- `ControlTheme` vs `Style` syntax differences
|
||||
- Platform-specific behaviors (mobile vs desktop)
|
||||
- LiveCharts2 or Svg.Skia properties
|
||||
|
||||
**Always verify** using one of these sources in order:
|
||||
|
||||
1. **Official docs**: `https://docs.avaloniaui.net/docs/reference/controls/{control-name}`
|
||||
2. **GitHub source** (most reliable for exact property names):
|
||||
`https://github.com/AvaloniaUI/Avalonia/blob/master/src/Avalonia.Controls/{ControlName}.cs`
|
||||
3. **Avalonia samples**: `https://github.com/AvaloniaUI/Avalonia.Samples`
|
||||
|
||||
For styling/theming questions also check:
|
||||
- `https://github.com/AvaloniaUI/Avalonia/tree/master/src/Avalonia.Themes.Fluent/Controls`
|
||||
|
||||
---
|
||||
|
||||
## Step 2 — Core Avalonia vs WPF differences
|
||||
|
||||
These are frequent sources of errors. Apply automatically:
|
||||
|
||||
### Styling
|
||||
```xml
|
||||
<!-- Avalonia: CSS-like selectors -->
|
||||
<Style Selector="Button.primary:pointerover /template/ ContentPresenter">
|
||||
<Setter Property="Background" Value="Blue"/>
|
||||
</Style>
|
||||
|
||||
<!-- NOT WPF DataTriggers — those do not exist in Avalonia -->
|
||||
<!-- NOT WPF Triggers — use pseudo-classes instead -->
|
||||
```
|
||||
|
||||
### ControlTheme (Avalonia 11+)
|
||||
```xml
|
||||
<!-- For re-theming built-in controls use ControlTheme, not Style -->
|
||||
<ControlTheme x:Key="{x:Type Button}" TargetType="Button">
|
||||
<Setter Property="Template">
|
||||
<ControlTemplate>...</ControlTemplate>
|
||||
</Setter>
|
||||
</ControlTheme>
|
||||
```
|
||||
|
||||
### Bindings
|
||||
```xml
|
||||
<!-- x:CompileBindings="True" (default) requires x:DataType -->
|
||||
<!-- Use x:CompileBindings="False" on shell/dynamic views -->
|
||||
<!-- DynamicResource NOT StaticResource for theme colors -->
|
||||
<!-- No ElementName binding across UserControl boundaries — use RelativeSource or pass via property -->
|
||||
```
|
||||
|
||||
### No DataTriggers
|
||||
Avalonia has no DataTriggers. Use instead:
|
||||
- `Classes.myClass="{Binding SomeBool}"` + style on `.myClass`
|
||||
- `IsVisible="{Binding SomeBool}"`
|
||||
- `MultiBinding` with converter
|
||||
|
||||
### x:Name in code-behind
|
||||
`x:Name` does NOT create direct fields in Avalonia. Access named controls via:
|
||||
```csharp
|
||||
var btn = this.Get<Button>("PART_Button"); // throws if not found
|
||||
var btn = this.FindControl<Button>("PART_Button"); // returns null if not found
|
||||
// TranslateTransform cannot have x:Name — access via RenderTransform:
|
||||
var tf = (TranslateTransform)someControl.RenderTransform!;
|
||||
```
|
||||
|
||||
### Animations in code-behind
|
||||
```csharp
|
||||
var animation = new Animation
|
||||
{
|
||||
Duration = TimeSpan.FromMilliseconds(320),
|
||||
Easing = new CubicEaseOut(),
|
||||
FillMode = FillMode.Forward,
|
||||
Children =
|
||||
{
|
||||
new KeyFrame { Cue = new Cue(0d), Setters = { new Setter(TranslateTransform.YProperty, 0d) } },
|
||||
new KeyFrame { Cue = new Cue(1d), Setters = { new Setter(TranslateTransform.YProperty, 300d) } }
|
||||
}
|
||||
};
|
||||
await animation.RunAsync(targetControl);
|
||||
```
|
||||
|
||||
### Platform detection
|
||||
```csharp
|
||||
bool isMobile = ApplicationLifetime is ISingleViewApplicationLifetime;
|
||||
// App.IsMobile is the project's cached version
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Step 3 — Known Avalonia gotchas from this project
|
||||
|
||||
### ViewLocator (no DataTemplates in AXAML)
|
||||
```csharp
|
||||
// ViewLocator auto-resolves: {Name}ViewModel → {Name}View (desktop) or {Name}ViewMobile (mobile)
|
||||
// Do NOT register DataTemplates in AXAML
|
||||
// Register FuncDataTemplate in App.axaml.cs code-behind if needed
|
||||
```
|
||||
|
||||
### Observable property initialization order
|
||||
Object initializers set properties one by one — `partial void On{Property}Changed` fires
|
||||
immediately, before other properties are set. **Never** trigger initialization logic from
|
||||
property changed handlers when the VM needs multiple properties. Always use an explicit
|
||||
`Initialize()` method called after the object initializer.
|
||||
|
||||
```csharp
|
||||
// WRONG
|
||||
partial void OnTransactionsChanged(List<Transaction> value) => ProcessData(); // Categories may be null
|
||||
|
||||
// RIGHT
|
||||
var vm = new MyViewModel { Transactions = t, Categories = c, Accounts = a };
|
||||
vm.Initialize(); // all props guaranteed set
|
||||
```
|
||||
|
||||
### ObservableCollection mutations
|
||||
Mutating a `List<T>` never triggers binding updates. Replace the entire collection:
|
||||
```csharp
|
||||
MyList = new List<T>(newItems); // triggers OnPropertyChanged
|
||||
// NOT: MyList.Add(item); // binding won't update for List<T>
|
||||
```
|
||||
For `ObservableCollection<T>`, `.Add()` and `.Remove()` do trigger updates but `.Clear()` +
|
||||
re-add causes a full re-render. Prefer replacing the collection for large updates.
|
||||
|
||||
### ScrollViewer + LiveCharts2
|
||||
LiveCharts2 CartesianChart intercepts scroll events. Forward them manually:
|
||||
```csharp
|
||||
protected override void OnAttachedToVisualTree(VisualTreeAttachmentEventArgs e)
|
||||
{
|
||||
base.OnAttachedToVisualTree(e);
|
||||
var charts = this.GetVisualDescendants().OfType<CartesianChart>();
|
||||
foreach (var chart in charts)
|
||||
chart.AddHandler(PointerWheelChangedEvent, OnChartScroll, RoutingStrategies.Tunnel);
|
||||
}
|
||||
private void OnChartScroll(object? sender, PointerWheelEventArgs e)
|
||||
{
|
||||
var sv = this.GetVisualAncestors().OfType<ScrollViewer>().FirstOrDefault();
|
||||
if (sv is null) return;
|
||||
sv.Offset = new Vector(sv.Offset.X, sv.Offset.Y - e.Delta.Y * sv.SmallChange.Height * 3);
|
||||
e.Handled = true;
|
||||
}
|
||||
```
|
||||
|
||||
### Half-donut chart
|
||||
```xml
|
||||
<Border Height="150" ClipToBounds="True">
|
||||
<lvc:PieChart Series="{Binding ...}" Height="300" Margin="0,0,0,-150"
|
||||
InitialRotation="-180" MaxAngle="180" LegendPosition="Hidden"
|
||||
ZoomMode="None"/>
|
||||
</Border>
|
||||
```
|
||||
|
||||
### Svg.Skia CSS
|
||||
```xml
|
||||
<!-- stroke-based (Lucide icons) -->
|
||||
<Svg Path="../Assets/Icons/name.svg" Css="{DynamicResource SvgBlue}"/>
|
||||
|
||||
<!-- SvgBlue resource = "path, circle, rect, ellipse, line, polyline, polygon, text, use { stroke: #7B9CFF; }" -->
|
||||
<!-- Fill-based icons use SvgFillBlue etc. -->
|
||||
```
|
||||
|
||||
### Mobile-specific AXAML rules
|
||||
- No `BoxShadow` — GPU expensive, causes jitter
|
||||
- No `MinWidth`/`MinHeight` on UserControl root
|
||||
- Add `Classes="mobile"` to root element for mobile-specific style overrides
|
||||
- Use `VirtualizingStackPanel` in ItemsControl for long lists
|
||||
- Page size 10 on mobile vs 25 on desktop
|
||||
|
||||
### CalendarDayButton / Calendar
|
||||
Avalonia's Calendar uses `CalendarDayButton` not `CalendarDayItem`.
|
||||
Template parts: `PART_MonthView`, `PART_YearView`, `PART_HeaderButton`, `PART_PreviousButton`, `PART_NextButton`.
|
||||
|
||||
### FlyoutPresenter
|
||||
```xml
|
||||
<!-- Custom transparent flyout presenter must be a ControlTheme in Resources, not Styles -->
|
||||
<ControlTheme x:Key="TransparentFlyoutPresenter" TargetType="FlyoutPresenter">
|
||||
<Setter Property="Background" Value="Transparent"/>
|
||||
<Setter Property="BorderThickness" Value="0"/>
|
||||
<Setter Property="Padding" Value="0"/>
|
||||
</ControlTheme>
|
||||
```
|
||||
|
||||
### TextBox ghost class
|
||||
```xml
|
||||
<!-- Transparent textbox that works in all states -->
|
||||
<Style Selector="TextBox.ghost">
|
||||
<Setter Property="Background" Value="Transparent"/>
|
||||
<Setter Property="BorderThickness" Value="0"/>
|
||||
<Setter Property="Padding" Value="0"/>
|
||||
<Setter Property="FocusAdorner" Value="{x:Null}"/>
|
||||
</Style>
|
||||
<Style Selector="TextBox.ghost:pointerover /template/ Border#PART_BorderElement">
|
||||
<Setter Property="Background" Value="Transparent"/>
|
||||
<Setter Property="BorderThickness" Value="0"/>
|
||||
</Style>
|
||||
<!-- Also add :focus and :disabled variants -->
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Step 4 — How to look up unfamiliar Avalonia APIs
|
||||
|
||||
### For a control's properties:
|
||||
```
|
||||
Fetch: https://docs.avaloniaui.net/docs/reference/controls/{control-name-lowercase}
|
||||
```
|
||||
|
||||
### For template part names (e.g. what's inside a ComboBox):
|
||||
```
|
||||
Search GitHub: https://github.com/search?q=repo:AvaloniaUI/Avalonia+PART_+{ControlName}&type=code
|
||||
Or fetch: https://github.com/AvaloniaUI/Avalonia/blob/master/src/Avalonia.Themes.Fluent/Controls/{ControlName}.axaml
|
||||
```
|
||||
|
||||
### For pseudo-class selectors:
|
||||
```
|
||||
Fetch: https://docs.avaloniaui.net/docs/reference/styles/pseudo-classes
|
||||
```
|
||||
|
||||
### For animation classes (Easing, FillMode, etc.):
|
||||
```
|
||||
Fetch: https://docs.avaloniaui.net/docs/guides/graphics-and-animations/animation
|
||||
```
|
||||
|
||||
### For ColorPicker internals:
|
||||
```
|
||||
Fetch: https://raw.githubusercontent.com/AvaloniaUI/Avalonia/refs/heads/master/src/Avalonia.Controls.ColorPicker/Themes/Fluent/ColorPicker.xaml
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Step 5 — Response format
|
||||
|
||||
1. State what you verified and where
|
||||
2. Provide the correct AXAML or C# with no WPF-isms
|
||||
3. Flag any Avalonia version caveat if relevant (project uses 11.x)
|
||||
4. If something cannot be done via AXAML, explain the code-behind approach
|
||||
5. Never guess at property names — fetch source if uncertain
|
||||
463
.gitignore
vendored
@@ -1,454 +1,13 @@
|
||||
## Ignore Visual Studio temporary files, build results, and
|
||||
## files generated by popular Visual Studio add-ons.
|
||||
##
|
||||
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
|
||||
|
||||
# User-specific files
|
||||
*.rsuser
|
||||
*.suo
|
||||
*.user
|
||||
*.userosscache
|
||||
*.sln.docstates
|
||||
|
||||
# User-specific files (MonoDevelop/Xamarin Studio)
|
||||
*.userprefs
|
||||
|
||||
# Mono auto generated files
|
||||
mono_crash.*
|
||||
|
||||
# Build results
|
||||
[Dd]ebug/
|
||||
[Dd]ebugPublic/
|
||||
[Rr]elease/
|
||||
[Rr]eleases/
|
||||
x64/
|
||||
x86/
|
||||
[Ww][Ii][Nn]32/
|
||||
[Aa][Rr][Mm]/
|
||||
[Aa][Rr][Mm]64/
|
||||
bld/
|
||||
[Bb]in/
|
||||
[Oo]bj/
|
||||
[Ll]og/
|
||||
[Ll]ogs/
|
||||
|
||||
# Visual Studio 2015/2017 cache/options directory
|
||||
bin/
|
||||
obj/
|
||||
.vs/
|
||||
# Uncomment if you have tasks that create the project's static files in wwwroot
|
||||
#wwwroot/
|
||||
|
||||
# Visual Studio 2017 auto generated files
|
||||
Generated\ Files/
|
||||
|
||||
# MSTest test Results
|
||||
[Tt]est[Rr]esult*/
|
||||
[Bb]uild[Ll]og.*
|
||||
|
||||
# NUnit
|
||||
*.VisualState.xml
|
||||
TestResult.xml
|
||||
nunit-*.xml
|
||||
|
||||
# Build Results of an ATL Project
|
||||
[Dd]ebugPS/
|
||||
[Rr]eleasePS/
|
||||
dlldata.c
|
||||
|
||||
# Benchmark Results
|
||||
BenchmarkDotNet.Artifacts/
|
||||
|
||||
# .NET Core
|
||||
project.lock.json
|
||||
project.fragment.lock.json
|
||||
artifacts/
|
||||
|
||||
# Tye
|
||||
.tye/
|
||||
|
||||
# ASP.NET Scaffolding
|
||||
ScaffoldingReadMe.txt
|
||||
|
||||
# StyleCop
|
||||
StyleCopReport.xml
|
||||
|
||||
# Files built by Visual Studio
|
||||
*_i.c
|
||||
*_p.c
|
||||
*_h.h
|
||||
*.ilk
|
||||
*.meta
|
||||
*.obj
|
||||
*.iobj
|
||||
*.pch
|
||||
*.pdb
|
||||
*.ipdb
|
||||
*.pgc
|
||||
*.pgd
|
||||
*.rsp
|
||||
*.sbr
|
||||
*.tlb
|
||||
*.tli
|
||||
*.tlh
|
||||
*.tmp
|
||||
*.tmp_proj
|
||||
*_wpftmp.csproj
|
||||
*.log
|
||||
*.vspscc
|
||||
*.vssscc
|
||||
.builds
|
||||
*.pidb
|
||||
*.svclog
|
||||
*.scc
|
||||
|
||||
# Chutzpah Test files
|
||||
_Chutzpah*
|
||||
|
||||
# Visual C++ cache files
|
||||
ipch/
|
||||
*.aps
|
||||
*.ncb
|
||||
*.opendb
|
||||
*.opensdf
|
||||
*.sdf
|
||||
*.cachefile
|
||||
*.VC.db
|
||||
*.VC.VC.opendb
|
||||
|
||||
# Visual Studio profiler
|
||||
*.psess
|
||||
*.vsp
|
||||
*.vspx
|
||||
*.sap
|
||||
|
||||
# Visual Studio Trace Files
|
||||
*.e2e
|
||||
|
||||
# TFS 2012 Local Workspace
|
||||
$tf/
|
||||
|
||||
# Guidance Automation Toolkit
|
||||
*.gpState
|
||||
|
||||
# ReSharper is a .NET coding add-in
|
||||
_ReSharper*/
|
||||
*.[Rr]e[Ss]harper
|
||||
*.DotSettings.user
|
||||
|
||||
# TeamCity is a build add-in
|
||||
_TeamCity*
|
||||
|
||||
# DotCover is a Code Coverage Tool
|
||||
*.dotCover
|
||||
|
||||
# AxoCover is a Code Coverage Tool
|
||||
.axoCover/*
|
||||
!.axoCover/settings.json
|
||||
|
||||
# Coverlet is a free, cross platform Code Coverage Tool
|
||||
coverage*.json
|
||||
coverage*.xml
|
||||
coverage*.info
|
||||
|
||||
# Visual Studio code coverage results
|
||||
*.coverage
|
||||
*.coveragexml
|
||||
|
||||
# NCrunch
|
||||
_NCrunch_*
|
||||
.*crunch*.local.xml
|
||||
nCrunchTemp_*
|
||||
|
||||
# MightyMoose
|
||||
*.mm.*
|
||||
AutoTest.Net/
|
||||
|
||||
# Web workbench (sass)
|
||||
.sass-cache/
|
||||
|
||||
# Installshield output folder
|
||||
[Ee]xpress/
|
||||
|
||||
# DocProject is a documentation generator add-in
|
||||
DocProject/buildhelp/
|
||||
DocProject/Help/*.HxT
|
||||
DocProject/Help/*.HxC
|
||||
DocProject/Help/*.hhc
|
||||
DocProject/Help/*.hhk
|
||||
DocProject/Help/*.hhp
|
||||
DocProject/Help/Html2
|
||||
DocProject/Help/html
|
||||
|
||||
# Click-Once directory
|
||||
publish/
|
||||
|
||||
# Publish Web Output
|
||||
*.[Pp]ublish.xml
|
||||
*.azurePubxml
|
||||
# Note: Comment the next line if you want to checkin your web deploy settings,
|
||||
# but database connection strings (with potential passwords) will be unencrypted
|
||||
*.pubxml
|
||||
*.publishproj
|
||||
|
||||
# Microsoft Azure Web App publish settings. Comment the next line if you want to
|
||||
# checkin your Azure Web App publish settings, but sensitive information contained
|
||||
# in these scripts will be unencrypted
|
||||
PublishScripts/
|
||||
|
||||
# NuGet Packages
|
||||
*.nupkg
|
||||
# NuGet Symbol Packages
|
||||
*.snupkg
|
||||
# The packages folder can be ignored because of Package Restore
|
||||
**/[Pp]ackages/*
|
||||
# except build/, which is used as an MSBuild target.
|
||||
!**/[Pp]ackages/build/
|
||||
# Uncomment if necessary however generally it will be regenerated when needed
|
||||
#!**/[Pp]ackages/repositories.config
|
||||
# NuGet v3's project.json files produces more ignorable files
|
||||
*.nuget.props
|
||||
*.nuget.targets
|
||||
|
||||
# Microsoft Azure Build Output
|
||||
csx/
|
||||
*.build.csdef
|
||||
|
||||
# Microsoft Azure Emulator
|
||||
ecf/
|
||||
rcf/
|
||||
|
||||
# Windows Store app package directories and files
|
||||
AppPackages/
|
||||
BundleArtifacts/
|
||||
Package.StoreAssociation.xml
|
||||
_pkginfo.txt
|
||||
*.appx
|
||||
*.appxbundle
|
||||
*.appxupload
|
||||
|
||||
# Visual Studio cache files
|
||||
# files ending in .cache can be ignored
|
||||
*.[Cc]ache
|
||||
# but keep track of directories ending in .cache
|
||||
!?*.[Cc]ache/
|
||||
|
||||
# Others
|
||||
ClientBin/
|
||||
~$*
|
||||
*~
|
||||
*.dbmdl
|
||||
*.dbproj.schemaview
|
||||
*.jfm
|
||||
*.pfx
|
||||
*.publishsettings
|
||||
orleans.codegen.cs
|
||||
|
||||
# Including strong name files can present a security risk
|
||||
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
|
||||
#*.snk
|
||||
|
||||
# Since there are multiple workflows, uncomment next line to ignore bower_components
|
||||
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
|
||||
#bower_components/
|
||||
|
||||
# RIA/Silverlight projects
|
||||
Generated_Code/
|
||||
|
||||
# Backup & report files from converting an old project file
|
||||
# to a newer Visual Studio version. Backup files are not needed,
|
||||
# because we have git ;-)
|
||||
_UpgradeReport_Files/
|
||||
Backup*/
|
||||
UpgradeLog*.XML
|
||||
UpgradeLog*.htm
|
||||
ServiceFabricBackup/
|
||||
*.rptproj.bak
|
||||
|
||||
# SQL Server files
|
||||
*.mdf
|
||||
*.ldf
|
||||
*.ndf
|
||||
|
||||
# Business Intelligence projects
|
||||
*.rdl.data
|
||||
*.bim.layout
|
||||
*.bim_*.settings
|
||||
*.rptproj.rsuser
|
||||
*- [Bb]ackup.rdl
|
||||
*- [Bb]ackup ([0-9]).rdl
|
||||
*- [Bb]ackup ([0-9][0-9]).rdl
|
||||
|
||||
# Microsoft Fakes
|
||||
FakesAssemblies/
|
||||
|
||||
# GhostDoc plugin setting file
|
||||
*.GhostDoc.xml
|
||||
|
||||
# Node.js Tools for Visual Studio
|
||||
.ntvs_analysis.dat
|
||||
node_modules/
|
||||
|
||||
# Visual Studio 6 build log
|
||||
*.plg
|
||||
|
||||
# Visual Studio 6 workspace options file
|
||||
*.opt
|
||||
|
||||
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
|
||||
*.vbw
|
||||
|
||||
# Visual Studio LightSwitch build output
|
||||
**/*.HTMLClient/GeneratedArtifacts
|
||||
**/*.DesktopClient/GeneratedArtifacts
|
||||
**/*.DesktopClient/ModelManifest.xml
|
||||
**/*.Server/GeneratedArtifacts
|
||||
**/*.Server/ModelManifest.xml
|
||||
_Pvt_Extensions
|
||||
|
||||
# Paket dependency manager
|
||||
.paket/paket.exe
|
||||
paket-files/
|
||||
|
||||
# FAKE - F# Make
|
||||
.fake/
|
||||
|
||||
# CodeRush personal settings
|
||||
.cr/personal
|
||||
|
||||
# Python Tools for Visual Studio (PTVS)
|
||||
__pycache__/
|
||||
*.pyc
|
||||
|
||||
# Cake - Uncomment if you are using it
|
||||
# tools/**
|
||||
# !tools/packages.config
|
||||
|
||||
# Tabs Studio
|
||||
*.tss
|
||||
|
||||
# Telerik's JustMock configuration file
|
||||
*.jmconfig
|
||||
|
||||
# BizTalk build output
|
||||
*.btp.cs
|
||||
*.btm.cs
|
||||
*.odx.cs
|
||||
*.xsd.cs
|
||||
|
||||
# OpenCover UI analysis results
|
||||
OpenCover/
|
||||
|
||||
# Azure Stream Analytics local run output
|
||||
ASALocalRun/
|
||||
|
||||
# MSBuild Binary and Structured Log
|
||||
*.binlog
|
||||
|
||||
# NVidia Nsight GPU debugger configuration file
|
||||
*.nvuser
|
||||
|
||||
# MFractors (Xamarin productivity tool) working folder
|
||||
.mfractor/
|
||||
|
||||
# Local History for Visual Studio
|
||||
.localhistory/
|
||||
|
||||
# BeatPulse healthcheck temp database
|
||||
healthchecksdb
|
||||
|
||||
# Backup folder for Package Reference Convert tool in Visual Studio 2017
|
||||
MigrationBackup/
|
||||
|
||||
# Ionide (cross platform F# VS Code tools) working folder
|
||||
.ionide/
|
||||
|
||||
# Fody - auto-generated XML schema
|
||||
FodyWeavers.xsd
|
||||
|
||||
##
|
||||
## Visual studio for Mac
|
||||
##
|
||||
|
||||
|
||||
# globs
|
||||
Makefile.in
|
||||
*.userprefs
|
||||
*.usertasks
|
||||
config.make
|
||||
config.status
|
||||
aclocal.m4
|
||||
install-sh
|
||||
autom4te.cache/
|
||||
*.tar.gz
|
||||
tarballs/
|
||||
test-results/
|
||||
|
||||
# Mac bundle stuff
|
||||
*.dmg
|
||||
*.app
|
||||
|
||||
# content below from: https://github.com/github/gitignore/blob/master/Global/macOS.gitignore
|
||||
# General
|
||||
.DS_Store
|
||||
.AppleDouble
|
||||
.LSOverride
|
||||
|
||||
# Icon must end with two \r
|
||||
Icon
|
||||
|
||||
|
||||
# Thumbnails
|
||||
._*
|
||||
|
||||
# Files that might appear in the root of a volume
|
||||
.DocumentRevisions-V100
|
||||
.fseventsd
|
||||
.Spotlight-V100
|
||||
.TemporaryItems
|
||||
.Trashes
|
||||
.VolumeIcon.icns
|
||||
.com.apple.timemachine.donotpresent
|
||||
|
||||
# Directories potentially created on remote AFP share
|
||||
.AppleDB
|
||||
.AppleDesktop
|
||||
Network Trash Folder
|
||||
Temporary Items
|
||||
.apdisk
|
||||
|
||||
# content below from: https://github.com/github/gitignore/blob/master/Global/Windows.gitignore
|
||||
# Windows thumbnail cache files
|
||||
Thumbs.db
|
||||
ehthumbs.db
|
||||
ehthumbs_vista.db
|
||||
|
||||
# Dump file
|
||||
*.stackdump
|
||||
|
||||
# Folder config file
|
||||
[Dd]esktop.ini
|
||||
|
||||
# Recycle Bin used on file shares
|
||||
$RECYCLE.BIN/
|
||||
|
||||
# Windows Installer files
|
||||
*.cab
|
||||
*.msi
|
||||
*.msix
|
||||
*.msm
|
||||
*.msp
|
||||
|
||||
# Windows shortcuts
|
||||
*.lnk
|
||||
|
||||
# JetBrains Rider
|
||||
.idea/
|
||||
*.sln.iml
|
||||
|
||||
##
|
||||
## Visual Studio Code
|
||||
##
|
||||
.vscode/*
|
||||
!.vscode/settings.json
|
||||
!.vscode/tasks.json
|
||||
!.vscode/launch.json
|
||||
!.vscode/extensions.json
|
||||
*.user
|
||||
*.suo
|
||||
./Clario/CLAUDE_CONTEXT.md
|
||||
publish/
|
||||
*.tar.gz
|
||||
Clario/devsettings.json
|
||||
.env
|
||||
TODO.md
|
||||
clario.keystore
|
||||
196
CLAUDE.md
Normal file
@@ -0,0 +1,196 @@
|
||||
# Clario — Claude Code Instructions
|
||||
|
||||
Clario is a cross-platform personal finance tracking app.
|
||||
See @NEW_CHAT_CONTEXT.md for full project context before starting any task.
|
||||
|
||||
---
|
||||
|
||||
## Tech Stack
|
||||
|
||||
- **UI**: Avalonia UI XPlat (.NET 9), CommunityToolkit.MVVM
|
||||
- **Backend**: Supabase (PostgreSQL, Auth, RLS, Realtime)
|
||||
- **Charts**: LiveCharts2 (SkiaSharp)
|
||||
- **IDE**: JetBrains Rider, Windows dev machine (Arabic region — always use `en-US` CultureInfo)
|
||||
|
||||
## Project Structure
|
||||
|
||||
```
|
||||
Clario/ ← shared (ViewModels, Models, Services, Data, CustomControls, Behaviors, Converters)
|
||||
Clario.Desktop/ ← Windows/macOS/Linux entry point
|
||||
Clario.Android/ ← Android entry point
|
||||
Views/ ← desktop AXAML views only
|
||||
MobileViews/ ← mobile AXAML views only
|
||||
```
|
||||
|
||||
## Build & Run
|
||||
|
||||
```bash
|
||||
# Desktop
|
||||
dotnet run --project Clario.Desktop
|
||||
|
||||
# Android (requires connected device or emulator)
|
||||
dotnet build Clario.Android -c Release
|
||||
|
||||
# Verify build
|
||||
dotnet build Clario.sln
|
||||
```
|
||||
|
||||
## Platform Detection
|
||||
|
||||
```csharp
|
||||
// Always check this before any platform-specific logic
|
||||
App.IsMobile // true on Android/iOS, false on desktop
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## CRITICAL RULES — Read before every task
|
||||
|
||||
### AXAML Rules
|
||||
|
||||
- **ALWAYS** use `{DynamicResource}` for theme colors, never hardcode hex
|
||||
- **NEVER** put DataTemplates in AXAML — ViewLocator handles all view resolution
|
||||
- **NEVER** add `MinWidth`/`MinHeight` to UserControl in mobile views
|
||||
- **NEVER** use `BoxShadow` in mobile views
|
||||
- Use `x:CompileBindings="False"` on shell views with dynamic DataContext
|
||||
- Desktop views go in `Views/`, mobile views go in `MobileViews/` named `{Name}ViewMobile.axaml`
|
||||
- Icon background opacity always: `<SolidColorBrush Color="..." Opacity="0.15"/>`
|
||||
- Separator between list items: `Spacing="1"` on StackPanel + `BorderSubtle` background on container
|
||||
|
||||
### ViewModel Rules
|
||||
|
||||
- **NEVER** fetch data in child ViewModel constructors
|
||||
- **NEVER** trigger initialization from `partial void On{Property}Changed` when VM depends on multiple properties
|
||||
- Call `Initialize()` explicitly after object initializer sets all required fields
|
||||
- Child VMs have `public required ViewModelBase parentViewModel`
|
||||
- Replace lists entirely to trigger bindings — never mutate and expect updates
|
||||
|
||||
### C# Rules
|
||||
|
||||
- Always `en-US` CultureInfo for dates/numbers (Windows has Arabic region)
|
||||
- Use `Task.WhenAll` for parallel async fetches in `InitializeApp`
|
||||
- Use `_ = SomeAsyncMethod()` for fire-and-forget with try/catch inside the method
|
||||
- Wrap fire-and-forget in try/catch — exceptions are silently swallowed
|
||||
|
||||
### Style Classes
|
||||
|
||||
```
|
||||
accented → primary action button (AccentBlue bg)
|
||||
base → secondary action button
|
||||
nav → transparent navigation/toggle button
|
||||
danger → destructive action (DangerButtonBackground + AccentRed text)
|
||||
ghost → transparent TextBox (no border, any state)
|
||||
label → uppercase muted TextBlock label
|
||||
muted → TextMuted foreground
|
||||
mobile → root class on mobile views (enables mobile overrides)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Design Tokens (quick reference)
|
||||
|
||||
```
|
||||
BgBase/BgSurface/BgSidebar/BgHover
|
||||
BorderSubtle/BorderAccent
|
||||
TextPrimary/TextSecondary/TextMuted/TextDisabled
|
||||
AccentBlue/AccentGreen/AccentYellow/AccentRed/AccentPurple/AccentOrange/AccentPink
|
||||
IconBgBlue/IconBgGreen/IconBgRed/IconBgOrange/IconBgPurple/IconBgPink
|
||||
BadgeBgRed/BadgeBgYellow/BadgeBgGreen/BadgeBgBlue
|
||||
DangerButtonBackground/DangerButtonBorder
|
||||
SvgPrimary/SvgSecondary/SvgMuted/SvgDisabled/SvgBlue/SvgGreen/SvgYellow/SvgRed
|
||||
```
|
||||
|
||||
## SVG Pattern
|
||||
|
||||
```xml
|
||||
<Svg Path="../Assets/Icons/icon-name.svg" Width="16" Height="16" Css="{DynamicResource SvgBlue}"/>
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Converters (quick reference)
|
||||
|
||||
| Key | Usage |
|
||||
|-----|-------|
|
||||
| `HexToColorConverter` | `ConverterParameter=color/css/brush` |
|
||||
| `AmountColorConverter` | type string → AccentRed/Green brush |
|
||||
| `AmountSignConverter` | MultiBinding(amount, type) → `+$x.xx` |
|
||||
| `BoolToColorConverter` | `ConverterParameter='#hex1\|#hex2'` |
|
||||
| `BoolToCssConverter` | `ConverterParameter='#hex1\|#hex2'` → SVG CSS |
|
||||
| `SvgPathFromName` | `"icon-name"` → `"../Assets/Icons/icon-name.svg"` |
|
||||
| `DateFormatConverter` | DateTime → string (always en-US) |
|
||||
| `EqualValueConverter` | MultiBinding equality → bool |
|
||||
| `NetworthSumConverter` | MultiBinding(income, expenses) → net |
|
||||
| `PercentageConverter` | MultiBinding(value, total) → % |
|
||||
|
||||
---
|
||||
|
||||
## Flyout Pattern
|
||||
|
||||
```xml
|
||||
<Button.Flyout>
|
||||
<Flyout Placement="BottomEdgeAlignedRight"
|
||||
FlyoutPresenterTheme="{StaticResource TransparentFlyoutPresenter}">
|
||||
<views:SomeView/>
|
||||
</Flyout>
|
||||
</Button.Flyout>
|
||||
```
|
||||
|
||||
## Modal Overlay Pattern
|
||||
|
||||
```xml
|
||||
<!-- In MainView content area, on top of ContentControl -->
|
||||
<views:SomeFormView
|
||||
DataContext="{Binding SomeFormVM}"
|
||||
IsVisible="{Binding IsFormVisible}"/>
|
||||
```
|
||||
The view's root Grid must have `<Border Background="#70000000"/>` as the dim layer.
|
||||
|
||||
## Bottom Sheet Pattern (mobile)
|
||||
|
||||
- Controlled via `ShowSheet()` / `HideSheet()` public methods in code-behind
|
||||
- `TranslateTransform` animation: CubicEaseOut 320ms up, CubicEaseIn 260ms down
|
||||
- `OverlayGrid.IsVisible = false` by default in AXAML
|
||||
- Set `BottomSheet.MaxHeight = Bounds.Height * 0.82` in `OnAttachedToVisualTree`
|
||||
|
||||
---
|
||||
|
||||
## Supabase
|
||||
|
||||
```csharp
|
||||
// All queries via DataRepo
|
||||
DataRepo.General.FetchTransactions()
|
||||
DataRepo.General.FetchCategories()
|
||||
DataRepo.General.FetchAccounts()
|
||||
DataRepo.General.FetchBudgets()
|
||||
DataRepo.General.FetchProfileInfo()
|
||||
// etc.
|
||||
|
||||
// Auth
|
||||
SupabaseService.Client.Auth.CurrentUser
|
||||
SupabaseService.Client.Auth.SignIn(email, password)
|
||||
SupabaseService.Client.Auth.SignOut()
|
||||
SupabaseService.Client.Auth.Update(new UserAttributes { ... })
|
||||
```
|
||||
|
||||
RLS: all tables enabled. INSERT uses `WITH CHECK (auth.uid() = user_id)`.
|
||||
|
||||
---
|
||||
|
||||
## Verification
|
||||
|
||||
After any code change, verify by:
|
||||
1. `dotnet build Clario.sln` — must have zero errors
|
||||
2. Check AXAML for `{DynamicResource}` on all color bindings
|
||||
3. Check that no ViewModel constructor fetches data
|
||||
4. On mobile views: no `BoxShadow`, no `MinWidth`/`MinHeight`, has `Classes="mobile"` on root
|
||||
|
||||
---
|
||||
|
||||
## What's Not Yet Built
|
||||
|
||||
- `AuthViewMobile` — needs creating
|
||||
- Settings view mobile version — needs creating
|
||||
- Analytics view — not designed yet
|
||||
- Light theme — token file incomplete, do not assume it's complete
|
||||
- Real-time Supabase subscriptions — not wired to UI
|
||||
@@ -13,16 +13,17 @@
|
||||
<RootNamespace>Clario.Android</RootNamespace>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<AndroidResource Include="Icon.png">
|
||||
<Link>Resources\drawable\Icon.png</Link>
|
||||
</AndroidResource>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Avalonia.Android"/>
|
||||
<PackageReference Include="Avalonia.Controls.ColorPicker" />
|
||||
<PackageReference Include="Avalonia.Svg.Skia" />
|
||||
<PackageReference Include="Deadpikle.AvaloniaProgressRing" />
|
||||
<PackageReference Include="FluentAvalonia.ProgressRing" />
|
||||
<PackageReference Include="LiveChartsCore.SkiaSharpView.Avalonia" />
|
||||
<PackageReference Include="QuestPDF" />
|
||||
<PackageReference Include="SkiaSharp" />
|
||||
<PackageReference Include="SkiaSharp.NativeAssets.Linux" />
|
||||
<PackageReference Include="SkiaSharp.NativeAssets.WebAssembly" />
|
||||
<PackageReference Include="Supabase" />
|
||||
<PackageReference Include="Xamarin.AndroidX.Core.SplashScreen"/>
|
||||
</ItemGroup>
|
||||
@@ -30,4 +31,9 @@
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\Clario\Clario.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Folder Include="Resources\drawable-night-v31\" />
|
||||
<Folder Include="Resources\drawable-v31\" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
|
||||
@@ -1,21 +1,50 @@
|
||||
using Android.App;
|
||||
using System;
|
||||
using Android.App;
|
||||
using Android.Content;
|
||||
using Android.Content.PM;
|
||||
using Android.OS;
|
||||
using Avalonia;
|
||||
using Avalonia.Android;
|
||||
using Clario;
|
||||
|
||||
namespace Clario.Android;
|
||||
|
||||
[Activity(
|
||||
Label = "Clario.Android",
|
||||
Label = "Clario",
|
||||
Theme = "@style/MyTheme.NoActionBar",
|
||||
Icon = "@drawable/icon",
|
||||
MainLauncher = true,
|
||||
LaunchMode = LaunchMode.SingleTop,
|
||||
ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.ScreenSize | ConfigChanges.UiMode)]
|
||||
[IntentFilter(
|
||||
new[] { Intent.ActionView },
|
||||
Categories = new[] { Intent.CategoryDefault, Intent.CategoryBrowsable },
|
||||
DataScheme = "clario",
|
||||
DataHost = "auth")]
|
||||
public class MainActivity : AvaloniaMainActivity<App>
|
||||
{
|
||||
protected override void OnCreate(Bundle? savedInstanceState)
|
||||
{
|
||||
// Capture deep link before Avalonia initializes
|
||||
var uri = Intent?.DataString;
|
||||
if (uri?.StartsWith("clario://", StringComparison.OrdinalIgnoreCase) == true)
|
||||
App.PendingDeepLink = uri;
|
||||
|
||||
base.OnCreate(savedInstanceState);
|
||||
}
|
||||
|
||||
protected override void OnNewIntent(Intent? intent)
|
||||
{
|
||||
base.OnNewIntent(intent);
|
||||
// Called when app is already running (SingleTop) and link is opened again
|
||||
var uri = intent?.DataString;
|
||||
if (uri?.StartsWith("clario://", StringComparison.OrdinalIgnoreCase) == true)
|
||||
_ = App.HandleDeepLink(uri);
|
||||
}
|
||||
|
||||
protected override AppBuilder CustomizeAppBuilder(AppBuilder builder)
|
||||
{
|
||||
return base.CustomizeAppBuilder(builder)
|
||||
.WithInterFont();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,66 +0,0 @@
|
||||
<animated-vector
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:aapt="http://schemas.android.com/aapt">
|
||||
<aapt:attr name="android:drawable">
|
||||
<vector
|
||||
android:name="vector"
|
||||
android:width="128dp"
|
||||
android:height="128dp"
|
||||
android:viewportWidth="128"
|
||||
android:viewportHeight="128">
|
||||
<group
|
||||
android:name="wrapper"
|
||||
android:translateX="21"
|
||||
android:translateY="21">
|
||||
<group android:name="group">
|
||||
<path
|
||||
android:name="path"
|
||||
android:pathData="M 74.853 85.823 L 75.368 85.823 C 80.735 85.823 85.144 81.803 85.761 76.602 L 85.836 41.76 C 85.225 18.593 66.254 0 42.939 0 C 19.24 0 0.028 19.212 0.028 42.912 C 0.028 66.357 18.831 85.418 42.18 85.823 L 74.853 85.823 Z"
|
||||
android:strokeWidth="1"/>
|
||||
<path
|
||||
android:name="path_1"
|
||||
android:pathData="M 43.059 14.614 C 29.551 14.614 18.256 24.082 15.445 36.743 C 18.136 37.498 20.109 39.968 20.109 42.899 C 20.109 45.831 18.136 48.301 15.445 49.055 C 18.256 61.716 29.551 71.184 43.059 71.184 C 47.975 71.184 52.599 69.93 56.628 67.723 L 56.628 70.993 L 71.344 70.993 L 71.344 44.072 C 71.357 43.714 71.344 43.26 71.344 42.899 C 71.344 27.278 58.68 14.614 43.059 14.614 Z M 29.51 42.899 C 29.51 35.416 35.576 29.35 43.059 29.35 C 50.541 29.35 56.607 35.416 56.607 42.899 C 56.607 50.382 50.541 56.448 43.059 56.448 C 35.576 56.448 29.51 50.382 29.51 42.899 Z"
|
||||
android:strokeWidth="1"
|
||||
android:fillType="evenOdd"/>
|
||||
<path
|
||||
android:name="path_2"
|
||||
android:pathData="M 18.105 42.88 C 18.105 45.38 16.078 47.407 13.579 47.407 C 11.079 47.407 9.052 45.38 9.052 42.88 C 9.052 40.381 11.079 38.354 13.579 38.354 C 16.078 38.354 18.105 40.381 18.105 42.88 Z"
|
||||
android:strokeWidth="1"/>
|
||||
</group>
|
||||
</group>
|
||||
</vector>
|
||||
</aapt:attr>
|
||||
<target android:name="path">
|
||||
<aapt:attr name="android:animation">
|
||||
<objectAnimator
|
||||
android:propertyName="fillColor"
|
||||
android:duration="1000"
|
||||
android:valueFrom="#00ffffff"
|
||||
android:valueTo="#161c2d"
|
||||
android:valueType="colorType"
|
||||
android:interpolator="@android:interpolator/fast_out_slow_in"/>
|
||||
</aapt:attr>
|
||||
</target>
|
||||
<target android:name="path_1">
|
||||
<aapt:attr name="android:animation">
|
||||
<objectAnimator
|
||||
android:propertyName="fillColor"
|
||||
android:duration="1000"
|
||||
android:valueFrom="#00ffffff"
|
||||
android:valueTo="#f9f9fb"
|
||||
android:valueType="colorType"
|
||||
android:interpolator="@android:interpolator/fast_out_slow_in"/>
|
||||
</aapt:attr>
|
||||
</target>
|
||||
<target android:name="path_2">
|
||||
<aapt:attr name="android:animation">
|
||||
<objectAnimator
|
||||
android:propertyName="fillColor"
|
||||
android:duration="1000"
|
||||
android:valueFrom="#00ffffff"
|
||||
android:valueTo="#f9f9fb"
|
||||
android:valueType="colorType"
|
||||
android:interpolator="@android:interpolator/fast_out_slow_in"/>
|
||||
</aapt:attr>
|
||||
</target>
|
||||
</animated-vector>
|
||||
@@ -1,71 +0,0 @@
|
||||
<animated-vector
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:aapt="http://schemas.android.com/aapt">
|
||||
<aapt:attr name="android:drawable">
|
||||
<vector
|
||||
android:name="vector"
|
||||
android:width="128dp"
|
||||
android:height="128dp"
|
||||
android:viewportWidth="128"
|
||||
android:viewportHeight="128">
|
||||
<group
|
||||
android:name="wrapper"
|
||||
android:translateX="21"
|
||||
android:translateY="21">
|
||||
<group android:name="group">
|
||||
<path
|
||||
android:name="path"
|
||||
android:pathData="M 74.853 85.823 L 75.368 85.823 C 80.735 85.823 85.144 81.803 85.761 76.602 L 85.836 41.76 C 85.225 18.593 66.254 0 42.939 0 C 19.24 0 0.028 19.212 0.028 42.912 C 0.028 66.357 18.831 85.418 42.18 85.823 L 74.853 85.823 Z"
|
||||
android:fillColor="#00ffffff"
|
||||
android:strokeWidth="1"/>
|
||||
<path
|
||||
android:name="path_1"
|
||||
android:pathData="M 43.059 14.614 C 29.551 14.614 18.256 24.082 15.445 36.743 C 18.136 37.498 20.109 39.968 20.109 42.899 C 20.109 45.831 18.136 48.301 15.445 49.055 C 18.256 61.716 29.551 71.184 43.059 71.184 C 47.975 71.184 52.599 69.93 56.628 67.723 L 56.628 70.993 L 71.344 70.993 L 71.344 44.072 C 71.357 43.714 71.344 43.26 71.344 42.899 C 71.344 27.278 58.68 14.614 43.059 14.614 Z M 29.51 42.899 C 29.51 35.416 35.576 29.35 43.059 29.35 C 50.541 29.35 56.607 35.416 56.607 42.899 C 56.607 50.382 50.541 56.448 43.059 56.448 C 35.576 56.448 29.51 50.382 29.51 42.899 Z"
|
||||
android:fillColor="#00ffffff"
|
||||
android:strokeWidth="1"
|
||||
android:fillType="evenOdd"/>
|
||||
<path
|
||||
android:name="path_2"
|
||||
android:pathData="M 18.105 42.88 C 18.105 45.38 16.078 47.407 13.579 47.407 C 11.079 47.407 9.052 45.38 9.052 42.88 C 9.052 40.381 11.079 38.354 13.579 38.354 C 16.078 38.354 18.105 40.381 18.105 42.88 Z"
|
||||
android:fillColor="#00ffffff"
|
||||
android:strokeWidth="1"/>
|
||||
</group>
|
||||
</group>
|
||||
</vector>
|
||||
</aapt:attr>
|
||||
<target android:name="path_2">
|
||||
<aapt:attr name="android:animation">
|
||||
<objectAnimator
|
||||
android:propertyName="fillColor"
|
||||
android:startOffset="100"
|
||||
android:duration="900"
|
||||
android:valueFrom="#00ffffff"
|
||||
android:valueTo="#161c2d"
|
||||
android:valueType="colorType"
|
||||
android:interpolator="@android:interpolator/fast_out_slow_in"/>
|
||||
</aapt:attr>
|
||||
</target>
|
||||
<target android:name="path">
|
||||
<aapt:attr name="android:animation">
|
||||
<objectAnimator
|
||||
android:propertyName="fillColor"
|
||||
android:duration="500"
|
||||
android:valueFrom="#00ffffff"
|
||||
android:valueTo="#f9f9fb"
|
||||
android:valueType="colorType"
|
||||
android:interpolator="@android:interpolator/fast_out_slow_in"/>
|
||||
</aapt:attr>
|
||||
</target>
|
||||
<target android:name="path_1">
|
||||
<aapt:attr name="android:animation">
|
||||
<objectAnimator
|
||||
android:propertyName="fillColor"
|
||||
android:startOffset="100"
|
||||
android:duration="900"
|
||||
android:valueFrom="#00ffffff"
|
||||
android:valueTo="#161c2d"
|
||||
android:valueType="colorType"
|
||||
android:interpolator="@android:interpolator/fast_out_slow_in"/>
|
||||
</aapt:attr>
|
||||
</target>
|
||||
</animated-vector>
|
||||
BIN
Clario.Android/Resources/drawable/Icon.png
Normal file
|
After Width: | Height: | Size: 130 KiB |
@@ -5,7 +5,7 @@
|
||||
<color android:color="@color/splash_background"/>
|
||||
</item>
|
||||
|
||||
<item android:drawable="@drawable/icon"
|
||||
<item android:drawable="@drawable/Icon"
|
||||
android:width="120dp"
|
||||
android:height="120dp"
|
||||
android:gravity="center" />
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@mipmap/ic_launcher_background"/>
|
||||
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
|
||||
<monochrome android:drawable="@mipmap/ic_launcher_monochrome"/>
|
||||
</adaptive-icon>
|
||||
BIN
Clario.Android/Resources/mipmap-hdpi/ic_launcher.png
Normal file
|
After Width: | Height: | Size: 5.5 KiB |
BIN
Clario.Android/Resources/mipmap-hdpi/ic_launcher_background.png
Normal file
|
After Width: | Height: | Size: 844 B |
BIN
Clario.Android/Resources/mipmap-hdpi/ic_launcher_foreground.png
Normal file
|
After Width: | Height: | Size: 6.8 KiB |
BIN
Clario.Android/Resources/mipmap-hdpi/ic_launcher_monochrome.png
Normal file
|
After Width: | Height: | Size: 6.8 KiB |
BIN
Clario.Android/Resources/mipmap-mdpi/ic_launcher.png
Normal file
|
After Width: | Height: | Size: 3.2 KiB |
BIN
Clario.Android/Resources/mipmap-mdpi/ic_launcher_background.png
Normal file
|
After Width: | Height: | Size: 450 B |
BIN
Clario.Android/Resources/mipmap-mdpi/ic_launcher_foreground.png
Normal file
|
After Width: | Height: | Size: 3.2 KiB |
BIN
Clario.Android/Resources/mipmap-mdpi/ic_launcher_monochrome.png
Normal file
|
After Width: | Height: | Size: 3.2 KiB |
BIN
Clario.Android/Resources/mipmap-xhdpi/ic_launcher.png
Normal file
|
After Width: | Height: | Size: 7.7 KiB |
BIN
Clario.Android/Resources/mipmap-xhdpi/ic_launcher_background.png
Normal file
|
After Width: | Height: | Size: 1.3 KiB |
BIN
Clario.Android/Resources/mipmap-xhdpi/ic_launcher_foreground.png
Normal file
|
After Width: | Height: | Size: 9.0 KiB |
BIN
Clario.Android/Resources/mipmap-xhdpi/ic_launcher_monochrome.png
Normal file
|
After Width: | Height: | Size: 9.0 KiB |
BIN
Clario.Android/Resources/mipmap-xxhdpi/ic_launcher.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 2.9 KiB |
|
After Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 19 KiB |
BIN
Clario.Android/Resources/mipmap-xxxhdpi/ic_launcher.png
Normal file
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 4.1 KiB |
|
After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 26 KiB |
@@ -9,7 +9,6 @@
|
||||
<item name="android:windowBackground">@null</item>
|
||||
<item name="android:windowNoTitle">true</item>
|
||||
<item name="android:windowSplashScreenBackground">@color/splash_background</item>
|
||||
<item name="android:windowSplashScreenAnimatedIcon">@drawable/avalonia_anim</item>
|
||||
<item name="android:windowSplashScreenAnimationDuration">1000</item>
|
||||
<item name="postSplashScreenTheme">@style/MyTheme.Main</item>
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<color name="splash_background">#FFFFFF</color>
|
||||
<color name="splash_background">#0B0D12</color>
|
||||
</resources>
|
||||
|
||||
BIN
Clario.Android/play_store_512.png
Normal file
|
After Width: | Height: | Size: 53 KiB |
@@ -8,12 +8,19 @@
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Avalonia.Browser"/>
|
||||
<PackageReference Include="Avalonia.Svg.Skia" />
|
||||
<PackageReference Include="LiveChartsCore.SkiaSharpView.Avalonia" />
|
||||
<PackageReference Include="Supabase" />
|
||||
<PackageReference Include="Avalonia.Controls.ColorPicker" />
|
||||
<PackageReference Include="Avalonia.Svg.Skia"/>
|
||||
<PackageReference Include="Deadpikle.AvaloniaProgressRing"/>
|
||||
<PackageReference Include="FluentAvalonia.ProgressRing"/>
|
||||
<PackageReference Include="LiveChartsCore.SkiaSharpView.Avalonia"/>
|
||||
<PackageReference Include="QuestPDF" />
|
||||
<PackageReference Include="SkiaSharp"/>
|
||||
<PackageReference Include="SkiaSharp.NativeAssets.Linux" />
|
||||
<PackageReference Include="SkiaSharp.NativeAssets.WebAssembly"/>
|
||||
<PackageReference Include="Supabase"/>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\Clario\Clario.csproj" />
|
||||
<ProjectReference Include="..\Clario\Clario.csproj"/>
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
|
||||
@@ -1,10 +1,9 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup>
|
||||
<OutputType>WinExe</OutputType>
|
||||
<!--If you are willing to use platform-specific APIs, use conditional compilation.
|
||||
See https://docs.avaloniaui.net/docs/guides/platforms/platform-specific-code/dotnet for more details.-->
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
<IncludeNativeLibrariesForSelfExtract>true</IncludeNativeLibrariesForSelfExtract>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup>
|
||||
@@ -12,6 +11,7 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Avalonia.Controls.ColorPicker" />
|
||||
<PackageReference Include="Avalonia.Desktop"/>
|
||||
<!--Condition below is needed to remove Avalonia.Diagnostics package from build output in Release configuration.-->
|
||||
<PackageReference Include="Avalonia.Diagnostics">
|
||||
@@ -19,7 +19,12 @@
|
||||
<PrivateAssets Condition="'$(Configuration)' != 'Debug'">All</PrivateAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Avalonia.Svg.Skia" />
|
||||
<PackageReference Include="Deadpikle.AvaloniaProgressRing" />
|
||||
<PackageReference Include="FluentAvalonia.ProgressRing" />
|
||||
<PackageReference Include="LiveChartsCore.SkiaSharpView.Avalonia" />
|
||||
<PackageReference Include="QuestPDF" />
|
||||
<PackageReference Include="SkiaSharp.NativeAssets.Linux" />
|
||||
<PackageReference Include="SkiaSharp.NativeAssets.WebAssembly" />
|
||||
<PackageReference Include="Supabase" />
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
36
Clario.Desktop/Clario.Desktop.parcel
Normal file
@@ -0,0 +1,36 @@
|
||||
{
|
||||
"GeneralSettings": {
|
||||
"NetProjectPath": "Clario.Desktop.csproj",
|
||||
"ApplicationName": "Clario",
|
||||
"Version": "0.6.0",
|
||||
"PackageName": {
|
||||
"$type": "msbuild",
|
||||
"property": "AssemblyName"
|
||||
},
|
||||
"AssemblyName": {
|
||||
"$type": "msbuild",
|
||||
"property": "AssemblyName"
|
||||
}
|
||||
},
|
||||
"LinuxSettings": {
|
||||
"AppIcon": "../Clario/Assets/AppIcons/logo-icon-primary-transparent.ico",
|
||||
"CreateBinSymlink": "True"
|
||||
},
|
||||
"Win32Settings": {
|
||||
"InstallerIcon": "../Clario/Assets/AppIcons/logo-icon-primary-transparent.ico",
|
||||
"Company": "Clario",
|
||||
"IncludeUninstaller": "True"
|
||||
},
|
||||
"MacOsSettings": {
|
||||
"CreateBundle": true,
|
||||
"BundleIdentifier": "com.CompanyName.Clario-Desktop",
|
||||
"SigningCredentialsType": "AdHoc"
|
||||
},
|
||||
"PublishSettings": {
|
||||
"PublishSingleFile": "True",
|
||||
"PublishReadyToRun": "True",
|
||||
"ExtraBuildProperties": {
|
||||
"RuntimeFrameworkVersion": "8.0.11"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,20 +1,25 @@
|
||||
using System;
|
||||
using System;
|
||||
using System.Linq;
|
||||
using Avalonia;
|
||||
using Clario.Services;
|
||||
using Clario;
|
||||
|
||||
namespace Clario.Desktop;
|
||||
|
||||
sealed class Program
|
||||
{
|
||||
// Initialization code. Don't use any Avalonia, third-party APIs or any
|
||||
// SynchronizationContext-reliant code before AppMain is called: things aren't initialized
|
||||
// yet and stuff might break.
|
||||
[STAThread]
|
||||
public static void Main(string[] args)
|
||||
{
|
||||
|
||||
BuildAvaloniaApp()
|
||||
.StartWithClassicDesktopLifetime(args);
|
||||
// Capture deep link passed as command-line arg by Windows protocol handler
|
||||
var deepLink = args.FirstOrDefault(a =>
|
||||
a.StartsWith("clario://", StringComparison.OrdinalIgnoreCase));
|
||||
if (deepLink != null)
|
||||
App.PendingDeepLink = deepLink;
|
||||
|
||||
// Register clario:// URL scheme on Windows (idempotent)
|
||||
RegisterUrlScheme();
|
||||
|
||||
BuildAvaloniaApp().StartWithClassicDesktopLifetime(args);
|
||||
}
|
||||
|
||||
// Avalonia configuration, don't remove; also used by visual designer.
|
||||
@@ -23,4 +28,23 @@ sealed class Program
|
||||
.UsePlatformDetect()
|
||||
.WithInterFont()
|
||||
.LogToTrace();
|
||||
}
|
||||
|
||||
private static void RegisterUrlScheme()
|
||||
{
|
||||
if (!OperatingSystem.IsWindows()) return;
|
||||
try
|
||||
{
|
||||
var exe = Environment.ProcessPath
|
||||
?? System.Diagnostics.Process.GetCurrentProcess().MainModule?.FileName;
|
||||
if (exe is null) return;
|
||||
|
||||
using var key = Microsoft.Win32.Registry.CurrentUser
|
||||
.CreateSubKey(@"SOFTWARE\Classes\clario");
|
||||
key.SetValue("", "URL:Clario Protocol");
|
||||
key.SetValue("URL Protocol", "");
|
||||
using var cmd = key.CreateSubKey(@"shell\open\command");
|
||||
cmd.SetValue("", $"\"{exe}\" \"%1\"");
|
||||
}
|
||||
catch { /* ignore — no registry write access in sandboxed environments */ }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,9 +7,16 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Avalonia.Controls.ColorPicker" />
|
||||
<PackageReference Include="Avalonia.iOS"/>
|
||||
<PackageReference Include="Avalonia.Svg.Skia" />
|
||||
<PackageReference Include="Deadpikle.AvaloniaProgressRing" />
|
||||
<PackageReference Include="FluentAvalonia.ProgressRing" />
|
||||
<PackageReference Include="LiveChartsCore.SkiaSharpView.Avalonia" />
|
||||
<PackageReference Include="QuestPDF" />
|
||||
<PackageReference Include="SkiaSharp" />
|
||||
<PackageReference Include="SkiaSharp.NativeAssets.Linux" />
|
||||
<PackageReference Include="SkiaSharp.NativeAssets.WebAssembly" />
|
||||
<PackageReference Include="Supabase" />
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
@@ -2,10 +2,12 @@
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:local="using:Clario"
|
||||
xmlns:converters="clr-namespace:Clario.Converters"
|
||||
xmlns:views="clr-namespace:Clario.Views"
|
||||
xmlns:vm="clr-namespace:Clario.ViewModels"
|
||||
xmlns:styling="clr-namespace:FluentAvalonia.Styling;assembly=FluentAvalonia"
|
||||
x:Class="Clario.App"
|
||||
RequestedThemeVariant="Dark">
|
||||
RequestedThemeVariant="Default">
|
||||
<!-- "Default" ThemeVariant follows system theme variant. "Dark" or "Light" are other available options. -->
|
||||
|
||||
<Application.DataTemplates>
|
||||
<local:ViewLocator />
|
||||
</Application.DataTemplates>
|
||||
@@ -24,9 +26,25 @@
|
||||
<converters:DecimalSignConverter x:Key="DecimalSignConverter" />
|
||||
<converters:PercentageConverter x:Key="PercentageConverter" />
|
||||
<converters:DecimalColorConverter x:Key="DecimalColorConverter" />
|
||||
<converters:BoolToColorConverter x:Key="BoolToColorConverter" />
|
||||
<converters:BoolToCssConverter x:Key="BoolToCssConverter" />
|
||||
<converters:CreditAmountConverter x:Key="CreditAmountConverter"/>
|
||||
<converters:BoolToStringConverter x:Key="BoolToStringConverter"/>
|
||||
</Application.Resources>
|
||||
<Application.Styles>
|
||||
<FluentTheme />
|
||||
<StyleInclude Source="../Theme/AppTheme.axaml" />
|
||||
<StyleInclude Source="avares://AvaloniaProgressRing/Styles/ProgressRing.xaml"/>
|
||||
<StyleInclude Source="avares://Avalonia.Controls.ColorPicker/Themes/Fluent/Fluent.xaml" />
|
||||
<StyleInclude Source="avares://FluentAvalonia.ProgressRing/Styling/Controls/ProgressRing.axaml" />
|
||||
<!-- Must come after ColorPicker Fluent.xaml to override Width="64" setter -->
|
||||
<Styles>
|
||||
<Style Selector="ColorPicker">
|
||||
<Setter Property="Width" Value="NaN" />
|
||||
</Style>
|
||||
<Style Selector="ColorPicker /template/ DropDownButton">
|
||||
<Setter Property="HorizontalAlignment" Value="Stretch" />
|
||||
</Style>
|
||||
</Styles>
|
||||
</Application.Styles>
|
||||
</Application>
|
||||
@@ -1,12 +1,12 @@
|
||||
using System;
|
||||
using System.Globalization;
|
||||
using System.Threading.Tasks;
|
||||
using Avalonia;
|
||||
using Avalonia.Controls.ApplicationLifetimes;
|
||||
using Avalonia.Data.Core;
|
||||
using Avalonia.Data.Core.Plugins;
|
||||
using System.Linq;
|
||||
using System.Threading;
|
||||
using Avalonia.Markup.Xaml;
|
||||
using Avalonia.Styling;
|
||||
using Clario.Data;
|
||||
using Clario.Services;
|
||||
using Clario.ViewModels;
|
||||
@@ -16,15 +16,83 @@ namespace Clario;
|
||||
|
||||
public partial class App : Application
|
||||
{
|
||||
public static bool IsMobile { get; private set; }
|
||||
|
||||
/// <summary>Set before OnFrameworkInitializationCompleted runs (from Program.cs or MainActivity).</summary>
|
||||
public static string? PendingDeepLink { get; set; }
|
||||
|
||||
/// <summary>Called from MainActivity.OnNewIntent when app is already running.</summary>
|
||||
public static async Task HandleDeepLink(string deepLink)
|
||||
{
|
||||
var (accessToken, refreshToken, type) = ParseDeepLinkFragment(deepLink);
|
||||
if (type != "recovery" || accessToken is null) return;
|
||||
|
||||
try { await SupabaseService.Client.Auth.SetSession(accessToken, refreshToken); } catch { }
|
||||
|
||||
await Avalonia.Threading.Dispatcher.UIThread.InvokeAsync(() =>
|
||||
{
|
||||
var vm = new ResetPasswordViewModel();
|
||||
if (Current?.ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
|
||||
desktop.MainWindow!.DataContext = vm;
|
||||
else if (Current?.ApplicationLifetime is ISingleViewApplicationLifetime sv)
|
||||
sv.MainView!.DataContext = vm;
|
||||
});
|
||||
}
|
||||
|
||||
private static (string? accessToken, string? refreshToken, string? type) ParseDeepLinkFragment(string url)
|
||||
{
|
||||
var hash = url.IndexOf('#');
|
||||
if (hash < 0) return default;
|
||||
string? at = null, rt = null, type = null;
|
||||
foreach (var part in url[(hash + 1)..].Split('&'))
|
||||
{
|
||||
var eq = part.IndexOf('=');
|
||||
if (eq < 0) continue;
|
||||
var val = Uri.UnescapeDataString(part[(eq + 1)..]);
|
||||
switch (part[..eq])
|
||||
{
|
||||
case "access_token": at = val; break;
|
||||
case "refresh_token": rt = val; break;
|
||||
case "type": type = val; break;
|
||||
}
|
||||
}
|
||||
return (at, rt, type);
|
||||
}
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
AvaloniaXamlLoader.Load(this);
|
||||
RequestedThemeVariant = ThemeVariant.Dark;
|
||||
}
|
||||
|
||||
public override async void OnFrameworkInitializationCompleted()
|
||||
{
|
||||
base.OnFrameworkInitializationCompleted();
|
||||
|
||||
if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktopLoading)
|
||||
{
|
||||
// Avoid duplicate validations from both Avalonia and the CommunityToolkit.
|
||||
// More info: https://docs.avaloniaui.net/docs/guides/development-guides/data-validation#manage-validationplugins
|
||||
DisableAvaloniaDataAnnotationValidation();
|
||||
|
||||
desktopLoading.MainWindow = new MainWindow
|
||||
{
|
||||
DataContext = new LoadingViewModel()
|
||||
};
|
||||
desktopLoading.MainWindow.Show();
|
||||
}
|
||||
|
||||
else if (ApplicationLifetime is ISingleViewApplicationLifetime singleViewPlatformLoading)
|
||||
{
|
||||
DebugLogger.Log("ANDROID PATH HIT");
|
||||
singleViewPlatformLoading.MainView = new MainAppMobile()
|
||||
{
|
||||
DataContext = new LoadingViewModel()
|
||||
};
|
||||
}
|
||||
|
||||
IsMobile = ApplicationLifetime is ISingleViewApplicationLifetime;
|
||||
|
||||
var culture = new CultureInfo("en-US");
|
||||
|
||||
CultureInfo.DefaultThreadCurrentCulture = culture;
|
||||
@@ -34,9 +102,9 @@ public partial class App : Application
|
||||
{
|
||||
await SupabaseService.Client.Auth.RetrieveSessionAsync();
|
||||
}
|
||||
catch
|
||||
catch (Exception e)
|
||||
{
|
||||
/* session invalid or expired */
|
||||
DebugLogger.Log($"[Auth] RetrieveSession failed: {e.Message}");
|
||||
}
|
||||
|
||||
var user = SupabaseService.Client.Auth.CurrentUser;
|
||||
@@ -47,25 +115,32 @@ public partial class App : Application
|
||||
ThemeService.SwitchToTheme(profile.Theme);
|
||||
}
|
||||
|
||||
if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
|
||||
// Check for deep link from password reset email
|
||||
ViewModelBase targetViewModel;
|
||||
if (PendingDeepLink is { } deepLink && deepLink.Contains("type=recovery"))
|
||||
{
|
||||
// Avoid duplicate validations from both Avalonia and the CommunityToolkit.
|
||||
// More info: https://docs.avaloniaui.net/docs/guides/development-guides/data-validation#manage-validationplugins
|
||||
DisableAvaloniaDataAnnotationValidation();
|
||||
|
||||
desktop.MainWindow = new MainWindow
|
||||
var (accessToken, refreshToken, _) = ParseDeepLinkFragment(deepLink);
|
||||
if (accessToken is not null)
|
||||
{
|
||||
DataContext = user is not null ? new MainViewModel() : new AuthViewModel()
|
||||
};
|
||||
desktop.MainWindow.Show();
|
||||
try { await SupabaseService.Client.Auth.SetSession(accessToken, refreshToken); } catch { }
|
||||
}
|
||||
PendingDeepLink = null;
|
||||
targetViewModel = new ResetPasswordViewModel();
|
||||
}
|
||||
else
|
||||
{
|
||||
targetViewModel = user is not null ? new MainViewModel() : new AuthViewModel();
|
||||
}
|
||||
|
||||
if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
|
||||
{
|
||||
DisableAvaloniaDataAnnotationValidation();
|
||||
desktop.MainWindow!.DataContext = targetViewModel;
|
||||
}
|
||||
else if (ApplicationLifetime is ISingleViewApplicationLifetime singleViewPlatform)
|
||||
{
|
||||
singleViewPlatform.MainView = new MainView
|
||||
{
|
||||
DataContext = user is not null ? new MainViewModel() : new AuthViewModel()
|
||||
};
|
||||
DebugLogger.Log("ANDROID PATH HIT");
|
||||
singleViewPlatform.MainView!.DataContext = targetViewModel;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
BIN
Clario/Assets/AppIcons/logo-icon-primary-transparent.ico
Normal file
|
After Width: | Height: | Size: 174 KiB |
@@ -1,25 +0,0 @@
|
||||
<svg width="261" height="293" viewBox="0 0 261 293" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M158.179 13.01C158.66 7.50821 154.588 2.62135 149.066 2.52288C122.238 2.04452 95.7365 9.07331 72.5947 22.9121C49.4528 36.7509 30.7204 56.7719 18.4475 80.6321C15.9214 85.5434 18.2994 91.4436 23.3741 93.6229L52.2522 106.025C57.3268 108.204 63.1612 105.823 65.875 101.013C73.7479 87.058 85.1404 75.3323 98.9894 67.0506C112.838 58.7689 128.559 54.281 144.578 53.9485C150.1 53.8339 154.958 49.8208 155.44 44.319L158.179 13.01Z" fill="url(#paint0_linear_104_135)"/>
|
||||
<path d="M23.3741 93.6229C18.2994 91.4436 12.3833 93.7818 10.5611 98.9954C-0.408524 130.383 -0.208299 164.717 11.32 196.122C22.8483 227.527 44.9093 253.837 73.5808 270.673C78.3433 273.469 84.3671 271.424 86.8266 266.479L100.822 238.339C103.282 233.394 101.23 227.436 96.5789 224.458C79.6305 213.605 66.5961 197.463 59.5985 178.4C52.6009 159.337 52.0958 138.595 57.9976 119.355C59.6172 114.075 57.3268 108.204 52.2522 106.025L23.3741 93.6229Z" fill="url(#paint1_linear_104_135)"/>
|
||||
<path d="M86.8266 266.479C84.3671 271.424 86.3711 277.462 91.4748 279.572C119.302 291.079 150.128 293.604 179.597 286.645C209.066 279.685 235.506 263.636 255.245 240.896C258.865 236.725 257.956 230.429 253.544 227.106L228.438 208.201C224.026 204.879 217.793 205.806 214.015 209.834C201.617 223.05 185.555 232.394 167.777 236.593C149.999 240.791 131.453 239.621 114.452 233.347C109.271 231.435 103.282 233.394 100.822 238.339L86.8266 266.479Z" fill="url(#paint2_linear_104_135)"/>
|
||||
<path d="M254.158 66.7147C258.595 63.4264 259.552 57.1377 255.964 52.9394C244.93 40.0298 231.681 29.153 216.815 20.8348C201.949 12.5165 185.749 6.91511 168.974 4.26464C163.519 3.40269 158.66 7.50821 158.179 13.01L155.44 44.319C154.958 49.8208 159.046 54.6165 164.464 55.6882C173.994 57.5734 183.189 60.9512 191.703 65.7152C200.217 70.4792 207.905 76.5485 214.497 83.6844C218.245 87.7411 224.471 88.716 228.908 85.4277L254.158 66.7147Z" fill="url(#paint3_linear_104_135)"/>
|
||||
<path d="M52.2522 106.025L23.3741 93.6229M52.2522 106.025C57.3268 108.204 63.1612 105.823 65.875 101.013C73.7479 87.058 85.1404 75.3323 98.9894 67.0506C112.838 58.7689 128.559 54.281 144.578 53.9485C150.1 53.8339 154.958 49.8208 155.44 44.319M52.2522 106.025C57.3268 108.204 59.6172 114.075 57.9976 119.355C52.0958 138.595 52.6009 159.337 59.5985 178.4C66.5961 197.463 79.6305 213.605 96.5789 224.458C101.23 227.436 103.282 233.394 100.822 238.339M23.3741 93.6229C18.2994 91.4436 15.9214 85.5434 18.4475 80.6321C30.7204 56.7719 49.4528 36.7509 72.5947 22.9121C95.7365 9.07331 122.238 2.04452 149.066 2.52288C154.588 2.62135 158.66 7.50821 158.179 13.01M23.3741 93.6229C18.2994 91.4436 12.3833 93.7818 10.5611 98.9954C-0.408524 130.383 -0.208299 164.717 11.32 196.122C22.8483 227.527 44.9093 253.837 73.5808 270.673C78.3433 273.469 84.3671 271.424 86.8266 266.479M155.44 44.319L158.179 13.01M155.44 44.319C154.958 49.8208 159.046 54.6165 164.464 55.6882C173.994 57.5734 183.189 60.9512 191.703 65.7152C200.217 70.4792 207.905 76.5485 214.497 83.6844C218.245 87.7411 224.471 88.716 228.908 85.4277L254.158 66.7147C258.595 63.4264 259.552 57.1377 255.964 52.9394C244.93 40.0298 231.681 29.153 216.815 20.8348C201.949 12.5165 185.749 6.91511 168.974 4.26464C163.519 3.40269 158.66 7.50821 158.179 13.01M100.822 238.339L86.8266 266.479M100.822 238.339C103.282 233.394 109.271 231.435 114.452 233.347C131.453 239.621 149.999 240.791 167.777 236.593C185.555 232.394 201.617 223.05 214.015 209.834C217.793 205.806 224.026 204.879 228.438 208.201L253.544 227.106C257.956 230.429 258.865 236.725 255.245 240.896C235.506 263.636 209.066 279.685 179.597 286.645C150.128 293.604 119.302 291.079 91.4748 279.572C86.3711 277.462 84.3671 271.424 86.8266 266.479" stroke="#13161E" stroke-width="5"/>
|
||||
<defs>
|
||||
<linearGradient id="paint0_linear_104_135" x1="263.849" y1="11.0816" x2="206.286" y2="106.27" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#7B9CFF"/>
|
||||
<stop offset="1" stop-color="#3B6AFF"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint1_linear_104_135" x1="263.849" y1="11.0816" x2="206.286" y2="106.27" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#7B9CFF"/>
|
||||
<stop offset="1" stop-color="#3B6AFF"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint2_linear_104_135" x1="263.849" y1="11.0816" x2="206.286" y2="106.27" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#7B9CFF"/>
|
||||
<stop offset="1" stop-color="#3B6AFF"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint3_linear_104_135" x1="263.849" y1="11.0816" x2="206.286" y2="106.27" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#7B9CFF"/>
|
||||
<stop offset="1" stop-color="#3B6AFF"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 4.5 KiB |
15
Clario/Assets/Icons/archive.svg
Normal file
@@ -0,0 +1,15 @@
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<rect width="20" height="5" x="2" y="3" rx="1" />
|
||||
<path d="M4 8v11a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8" />
|
||||
<path d="M10 12h4" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 340 B |
1
Clario/Assets/Icons/arrow-left-right.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-left-right-icon lucide-arrow-left-right"><path d="M8 3 4 7l4 4"/><path d="M4 7h16"/><path d="m16 21 4-4-4-4"/><path d="M20 17H4"/></svg>
|
||||
|
After Width: | Height: | Size: 344 B |
14
Clario/Assets/Icons/arrow-left.svg
Normal file
@@ -0,0 +1,14 @@
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="m12 19-7-7 7-7" />
|
||||
<path d="M19 12H5" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 262 B |
14
Clario/Assets/Icons/arrow-right.svg
Normal file
@@ -0,0 +1,14 @@
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="M5 12h14" />
|
||||
<path d="m12 5 7 7-7 7" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 261 B |
16
Clario/Assets/Icons/bike.svg
Normal file
@@ -0,0 +1,16 @@
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<circle cx="18.5" cy="17.5" r="3.5" />
|
||||
<circle cx="5.5" cy="17.5" r="3.5" />
|
||||
<circle cx="15" cy="5" r="1" />
|
||||
<path d="M12 17.5V14l-3-3 4-3 2 3h2" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 365 B |
14
Clario/Assets/Icons/book-open.svg
Normal file
@@ -0,0 +1,14 @@
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="M12 7v14" />
|
||||
<path d="M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 378 B |
19
Clario/Assets/Icons/bus.svg
Normal file
@@ -0,0 +1,19 @@
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="M8 6v6" />
|
||||
<path d="M15 6v6" />
|
||||
<path d="M2 12h19.6" />
|
||||
<path d="M18 18h3s.5-1.7.8-2.8c.1-.4.2-.8.2-1.2 0-.4-.1-.8-.2-1.2l-1.4-5C20.1 6.8 19.1 6 18 6H4a2 2 0 0 0-2 2v10h3" />
|
||||
<circle cx="7" cy="18" r="2" />
|
||||
<path d="M9 18h5" />
|
||||
<circle cx="16" cy="18" r="2" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 492 B |
14
Clario/Assets/Icons/camera.svg
Normal file
@@ -0,0 +1,14 @@
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="M13.997 4a2 2 0 0 1 1.76 1.05l.486.9A2 2 0 0 0 18.003 7H20a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2h1.997a2 2 0 0 0 1.759-1.048l.489-.904A2 2 0 0 1 10.004 4z" />
|
||||
<circle cx="12" cy="13" r="3" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 437 B |
1
Clario/Assets/Icons/chart-bar.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chart-bar-icon lucide-chart-bar"><path d="M3 3v16a2 2 0 0 0 2 2h16"/><path d="M7 16h8"/><path d="M7 11h12"/><path d="M7 6h3"/></svg>
|
||||
|
After Width: | Height: | Size: 334 B |
1
Clario/Assets/Icons/chart-column.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chart-column-icon lucide-chart-column"><path d="M3 3v16a2 2 0 0 0 2 2h16"/><path d="M18 17V9"/><path d="M13 17V5"/><path d="M8 17v-3"/></svg>
|
||||
|
After Width: | Height: | Size: 343 B |
1
Clario/Assets/Icons/chevron-down.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down-icon lucide-chevron-down"><path d="m6 9 6 6 6-6"/></svg>
|
||||
|
After Width: | Height: | Size: 271 B |
1
Clario/Assets/Icons/circle-check.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-circle-check-icon lucide-circle-check"><circle cx="12" cy="12" r="10"/><path d="m9 12 2 2 4-4"/></svg>
|
||||
|
After Width: | Height: | Size: 304 B |
16
Clario/Assets/Icons/coffee.svg
Normal file
@@ -0,0 +1,16 @@
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="M10 2v2" />
|
||||
<path d="M14 2v2" />
|
||||
<path d="M16 8a1 1 0 0 1 1 1v8a4 4 0 0 1-4 4H7a4 4 0 0 1-4-4V9a1 1 0 0 1 1-1h14a4 4 0 1 1 0 8h-1" />
|
||||
<path d="M6 2v2" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 379 B |
17
Clario/Assets/Icons/dumbbell.svg
Normal file
@@ -0,0 +1,17 @@
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="M17.596 12.768a2 2 0 1 0 2.829-2.829l-1.768-1.767a2 2 0 0 0 2.828-2.829l-2.828-2.828a2 2 0 0 0-2.829 2.828l-1.767-1.768a2 2 0 1 0-2.829 2.829z" />
|
||||
<path d="m2.5 21.5 1.4-1.4" />
|
||||
<path d="m20.1 3.9 1.4-1.4" />
|
||||
<path d="M5.343 21.485a2 2 0 1 0 2.829-2.828l1.767 1.768a2 2 0 1 0 2.829-2.829l-6.364-6.364a2 2 0 1 0-2.829 2.829l1.768 1.767a2 2 0 0 0-2.828 2.829z" />
|
||||
<path d="m9.6 14.4 4.8-4.8" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 620 B |
20
Clario/Assets/Icons/film.svg
Normal file
@@ -0,0 +1,20 @@
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<rect width="18" height="18" x="3" y="3" rx="2" />
|
||||
<path d="M7 3v18" />
|
||||
<path d="M3 7.5h4" />
|
||||
<path d="M3 12h18" />
|
||||
<path d="M3 16.5h4" />
|
||||
<path d="M17 3v18" />
|
||||
<path d="M17 7.5h4" />
|
||||
<path d="M17 16.5h4" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 432 B |
16
Clario/Assets/Icons/gift.svg
Normal file
@@ -0,0 +1,16 @@
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="M12 7v14" />
|
||||
<path d="M20 11v8a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2v-8" />
|
||||
<path d="M7.5 7a1 1 0 0 1 0-5A4.8 8 0 0 1 12 7a4.8 8 0 0 1 4.5-5 1 1 0 0 1 0 5" />
|
||||
<rect x="3" y="7" width="18" height="4" rx="1" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 426 B |
15
Clario/Assets/Icons/graduation-cap.svg
Normal file
@@ -0,0 +1,15 @@
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="M21.42 10.922a1 1 0 0 0-.019-1.838L12.83 5.18a2 2 0 0 0-1.66 0L2.6 9.08a1 1 0 0 0 0 1.832l8.57 3.908a2 2 0 0 0 1.66 0z" />
|
||||
<path d="M22 10v6" />
|
||||
<path d="M6 12.5V16a6 3 0 0 0 12 0v-3.5" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 412 B |
13
Clario/Assets/Icons/headphones.svg
Normal file
@@ -0,0 +1,13 @@
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="M3 14h3a2 2 0 0 1 2 2v3a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-7a9 9 0 0 1 18 0v7a2 2 0 0 1-2 2h-1a2 2 0 0 1-2-2v-3a2 2 0 0 1 2-2h3" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 347 B |
14
Clario/Assets/Icons/leaf.svg
Normal file
@@ -0,0 +1,14 @@
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="M11 20A7 7 0 0 1 9.8 6.1C15.5 5 17 4.48 19 2c1 2 2 4.18 2 8 0 5.5-4.78 10-10 10Z" />
|
||||
<path d="M2 21c0-3 1.85-5.36 5.08-6C9.5 14.52 12 13 13 12" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 368 B |
15
Clario/Assets/Icons/log-in.svg
Normal file
@@ -0,0 +1,15 @@
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="m10 17 5-5-5-5" />
|
||||
<path d="M15 12H3" />
|
||||
<path d="M15 3h4a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-4" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 319 B |
1
Clario/Assets/Icons/log-out.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-log-out-icon lucide-log-out"><path d="m16 17 5-5-5-5"/><path d="M21 12H9"/><path d="M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4"/></svg>
|
||||
|
After Width: | Height: | Size: 334 B |
15
Clario/Assets/Icons/music.svg
Normal file
@@ -0,0 +1,15 @@
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="M9 18V5l12-2v13" />
|
||||
<circle cx="6" cy="18" r="3" />
|
||||
<circle cx="18" cy="16" r="3" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 308 B |
16
Clario/Assets/Icons/package.svg
Normal file
@@ -0,0 +1,16 @@
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="M11 21.73a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73z" />
|
||||
<path d="M12 22V12" />
|
||||
<polyline points="3.29 7 12 12 20.71 7" />
|
||||
<path d="m7.5 4.27 9 5.15" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 446 B |
17
Clario/Assets/Icons/pizza.svg
Normal file
@@ -0,0 +1,17 @@
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="m12 14-1 1" />
|
||||
<path d="m13.75 18.25-1.25 1.42" />
|
||||
<path d="M17.775 5.654a15.68 15.68 0 0 0-12.121 12.12" />
|
||||
<path d="M18.8 9.3a1 1 0 0 0 2.1 7.7" />
|
||||
<path d="M21.964 20.732a1 1 0 0 1-1.232 1.232l-18-5a1 1 0 0 1-.695-1.232A19.68 19.68 0 0 1 15.732 2.037a1 1 0 0 1 1.232.695z" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 506 B |
13
Clario/Assets/Icons/plane.svg
Normal file
@@ -0,0 +1,13 @@
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="M17.8 19.2 16 11l3.5-3.5C21 6 21.5 4 21 3c-1-.5-3 0-4.5 1.5L13 8 4.8 6.2c-.5-.1-.9.1-1.1.5l-.3.5c-.2.5-.1 1 .3 1.3L9 12l-2 3H4l-1 1 3 2 2 3 1-1v-3l3-2 3.5 5.3c.3.4.8.5 1.3.3l.5-.2c.4-.3.6-.7.5-1.2z" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 421 B |
1
Clario/Assets/Icons/receipt.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-receipt-icon lucide-receipt"><path d="M12 17V7"/><path d="M16 8h-6a2 2 0 0 0 0 4h4a2 2 0 0 1 0 4H8"/><path d="M4 3a1 1 0 0 1 1-1 1.3 1.3 0 0 1 .7.2l.933.6a1.3 1.3 0 0 0 1.4 0l.934-.6a1.3 1.3 0 0 1 1.4 0l.933.6a1.3 1.3 0 0 0 1.4 0l.933-.6a1.3 1.3 0 0 1 1.4 0l.934.6a1.3 1.3 0 0 0 1.4 0l.933-.6A1.3 1.3 0 0 1 19 2a1 1 0 0 1 1 1v18a1 1 0 0 1-1 1 1.3 1.3 0 0 1-.7-.2l-.933-.6a1.3 1.3 0 0 0-1.4 0l-.934.6a1.3 1.3 0 0 1-1.4 0l-.933-.6a1.3 1.3 0 0 0-1.4 0l-.933.6a1.3 1.3 0 0 1-1.4 0l-.934-.6a1.3 1.3 0 0 0-1.4 0l-.933.6a1.3 1.3 0 0 1-.7.2 1 1 0 0 1-1-1z"/></svg>
|
||||
|
After Width: | Height: | Size: 758 B |
1
Clario/Assets/Icons/refresh-cw.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-refresh-cw-icon lucide-refresh-cw"><path d="M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8"/><path d="M21 3v5h-5"/><path d="M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16"/><path d="M8 16H3v5"/></svg>
|
||||
|
After Width: | Height: | Size: 411 B |
17
Clario/Assets/Icons/scissors.svg
Normal file
@@ -0,0 +1,17 @@
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<circle cx="6" cy="6" r="3" />
|
||||
<path d="M8.12 8.12 12 12" />
|
||||
<path d="M20 4 8.12 15.88" />
|
||||
<circle cx="6" cy="18" r="3" />
|
||||
<path d="M14.8 14.8 20 20" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 371 B |
13
Clario/Assets/Icons/shirt.svg
Normal file
@@ -0,0 +1,13 @@
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="M20.38 3.46 16 2a4 4 0 0 1-8 0L3.62 3.46a2 2 0 0 0-1.34 2.23l.58 3.47a1 1 0 0 0 .99.84H6v10c0 1.1.9 2 2 2h8a2 2 0 0 0 2-2V10h2.15a1 1 0 0 0 .99-.84l.58-3.47a2 2 0 0 0-1.34-2.23z" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 401 B |
1
Clario/Assets/Icons/sliders-horizontal.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-sliders-horizontal-icon lucide-sliders-horizontal"><path d="M10 5H3"/><path d="M12 19H3"/><path d="M14 3v4"/><path d="M16 17v4"/><path d="M21 12h-9"/><path d="M21 19h-5"/><path d="M21 5h-7"/><path d="M8 10v4"/><path d="M8 12H3"/></svg>
|
||||
|
After Width: | Height: | Size: 437 B |
14
Clario/Assets/Icons/smartphone.svg
Normal file
@@ -0,0 +1,14 @@
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<rect width="14" height="20" x="5" y="2" rx="2" ry="2" />
|
||||
<path d="M12 18h.01" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 294 B |
17
Clario/Assets/Icons/stethoscope.svg
Normal file
@@ -0,0 +1,17 @@
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="M11 2v2" />
|
||||
<path d="M5 2v2" />
|
||||
<path d="M5 3H4a2 2 0 0 0-2 2v4a6 6 0 0 0 12 0V5a2 2 0 0 0-2-2h-1" />
|
||||
<path d="M8 15a6 6 0 0 0 12 0v-3" />
|
||||
<circle cx="20" cy="10" r="2" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 399 B |
15
Clario/Assets/Icons/target.svg
Normal file
@@ -0,0 +1,15 @@
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<circle cx="12" cy="12" r="10" />
|
||||
<circle cx="12" cy="12" r="6" />
|
||||
<circle cx="12" cy="12" r="2" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 314 B |
18
Clario/Assets/Icons/train-front.svg
Normal file
@@ -0,0 +1,18 @@
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="M8 3.1V7a4 4 0 0 0 8 0V3.1" />
|
||||
<path d="m9 15-1-1" />
|
||||
<path d="m15 15 1-1" />
|
||||
<path d="M9 19c-2.8 0-5-2.2-5-5v-4a8 8 0 0 1 16 0v4c0 2.8-2.2 5-5 5Z" />
|
||||
<path d="m8 19-2 3" />
|
||||
<path d="m16 19 2 3" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 427 B |
14
Clario/Assets/Icons/tv.svg
Normal file
@@ -0,0 +1,14 @@
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="m17 2-5 5-5-5" />
|
||||
<rect width="20" height="15" x="2" y="7" rx="2" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 290 B |
1
Clario/Assets/Icons/upload.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-upload-icon lucide-upload"><path d="M12 3v12"/><path d="m17 8-5-5-5 5"/><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/></svg>
|
||||
|
After Width: | Height: | Size: 333 B |
16
Clario/Assets/Icons/user-plus.svg
Normal file
@@ -0,0 +1,16 @@
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2" />
|
||||
<circle cx="9" cy="7" r="4" />
|
||||
<line x1="19" x2="19" y1="8" y2="14" />
|
||||
<line x1="22" x2="16" y1="11" y2="11" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 383 B |
1
Clario/Assets/Icons/wallet-cards.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-wallet-cards-icon lucide-wallet-cards"><rect width="18" height="18" x="3" y="3" rx="2"/><path d="M3 9a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2"/><path d="M3 11h3c.8 0 1.6.3 2.1.9l1.1.9c1.6 1.6 4.1 1.6 5.7 0l1.1-.9c.5-.5 1.3-.9 2.1-.9H21"/></svg>
|
||||
|
After Width: | Height: | Size: 437 B |
16
Clario/Assets/Icons/wine.svg
Normal file
@@ -0,0 +1,16 @@
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="M8 22h8" />
|
||||
<path d="M7 10h10" />
|
||||
<path d="M12 15v7" />
|
||||
<path d="M12 15a5 5 0 0 0 5-5c0-2-.5-4-2-8H9c-1.5 4-2 6-2 8a5 5 0 0 0 5 5Z" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 360 B |
13
Clario/Assets/Icons/wrench.svg
Normal file
@@ -0,0 +1,13 @@
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.106-3.105c.32-.322.863-.22.983.218a6 6 0 0 1-8.259 7.057l-7.91 7.91a1 1 0 0 1-2.999-3l7.91-7.91a6 6 0 0 1 7.057-8.259c.438.12.54.662.219.984z" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 417 B |
BIN
Clario/Assets/Logo/logo-combined-primary-bg-dark-192x64.png
Normal file
|
After Width: | Height: | Size: 2.9 KiB |
BIN
Clario/Assets/Logo/logo-combined-primary-bg-dark-384x128.png
Normal file
|
After Width: | Height: | Size: 5.8 KiB |
BIN
Clario/Assets/Logo/logo-combined-primary-bg-dark-768x192.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
12
Clario/Assets/Logo/logo-combined-primary-bg-dark.svg
Normal file
@@ -0,0 +1,12 @@
|
||||
<svg width="193" height="64" viewBox="0 0 193 64" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect width="192" height="64" fill="#13161E"/>
|
||||
<path d="M60.9424 61.424V14.96H70.7671V61.424H60.9424Z" fill="#3B6AFF"/>
|
||||
<path d="M90.7211 62.064C87.8529 62.064 85.2844 61.36 83.0155 59.952C80.7894 58.544 79.0128 56.624 77.6857 54.192C76.4014 51.76 75.7593 48.9867 75.7593 45.872C75.7593 42.7574 76.4014 39.984 77.6857 37.552C79.0128 35.12 80.7894 33.2 83.0155 31.792C85.2844 30.384 87.8529 29.68 90.7211 29.68C92.8188 29.68 94.7024 30.0854 96.372 30.896C98.0844 31.7067 99.4757 32.8374 100.546 34.288C101.616 35.696 102.215 37.3174 102.344 39.152V52.592C102.215 54.4267 101.616 56.0694 100.546 57.52C99.5185 58.928 98.1486 60.0374 96.4362 60.848C94.7238 61.6587 92.8188 62.064 90.7211 62.064ZM92.7118 53.232C94.8094 53.232 96.5004 52.5494 97.7847 51.184C99.069 49.776 99.7111 48.0054 99.7111 45.872C99.7111 44.4214 99.4114 43.1414 98.8121 42.032C98.2556 40.9227 97.4422 40.0694 96.372 39.472C95.3446 38.832 94.1459 38.512 92.776 38.512C91.4061 38.512 90.186 38.832 89.1158 39.472C88.0884 40.0694 87.2536 40.9227 86.6114 42.032C86.0121 43.1414 85.7125 44.4214 85.7125 45.872C85.7125 47.28 86.0121 48.5387 86.6114 49.648C87.2108 50.7574 88.0456 51.632 89.1158 52.272C90.186 52.912 91.3847 53.232 92.7118 53.232ZM99.3258 61.424V53.04L100.803 45.488L99.3258 37.936V30.32H108.958V61.424H99.3258Z" fill="#3B6AFF"/>
|
||||
<path d="M115.875 61.424V30.32H125.7V61.424H115.875ZM125.7 44.336L121.591 41.136C122.404 37.5094 123.774 34.6934 125.7 32.688C127.627 30.6827 130.302 29.68 133.727 29.68C135.225 29.68 136.531 29.9147 137.644 30.384C138.8 30.8107 139.806 31.4934 140.662 32.432L134.819 39.792C134.391 39.3227 133.855 38.96 133.213 38.704C132.571 38.448 131.843 38.32 131.03 38.32C129.403 38.32 128.098 38.832 127.113 39.856C126.171 40.8374 125.7 42.3307 125.7 44.336Z" fill="#3B6AFF"/>
|
||||
<path d="M143.279 61.424V30.32H153.104V61.424H143.279ZM148.224 26.032C146.683 26.032 145.398 25.52 144.371 24.496C143.386 23.4294 142.894 22.1494 142.894 20.656C142.894 19.12 143.386 17.84 144.371 16.816C145.398 15.792 146.683 15.28 148.224 15.28C149.765 15.28 151.028 15.792 152.012 16.816C152.997 17.84 153.489 19.12 153.489 20.656C153.489 22.1494 152.997 23.4294 152.012 24.496C151.028 25.52 149.765 26.032 148.224 26.032Z" fill="#3B6AFF"/>
|
||||
<path d="M175.049 62.128C171.838 62.128 168.927 61.424 166.316 60.016C163.747 58.5654 161.714 56.6027 160.215 54.128C158.717 51.6534 157.968 48.88 157.968 45.808C157.968 42.736 158.717 39.984 160.215 37.552C161.714 35.12 163.747 33.2 166.316 31.792C168.884 30.3414 171.795 29.616 175.049 29.616C178.302 29.616 181.213 30.32 183.782 31.728C186.35 33.136 188.384 35.0774 189.882 37.552C191.381 39.984 192.13 42.736 192.13 45.808C192.13 48.88 191.381 51.6534 189.882 54.128C188.384 56.6027 186.35 58.5654 183.782 60.016C181.213 61.424 178.302 62.128 175.049 62.128ZM175.049 53.232C176.461 53.232 177.703 52.9334 178.773 52.336C179.843 51.696 180.657 50.8214 181.213 49.712C181.813 48.56 182.112 47.2587 182.112 45.808C182.112 44.3574 181.813 43.0987 181.213 42.032C180.614 40.9227 179.779 40.0694 178.709 39.472C177.682 38.832 176.461 38.512 175.049 38.512C173.679 38.512 172.459 38.832 171.389 39.472C170.318 40.0694 169.484 40.9227 168.884 42.032C168.285 43.1414 167.985 44.4214 167.985 45.872C167.985 47.28 168.285 48.56 168.884 49.712C169.484 50.8214 170.318 51.696 171.389 52.336C172.459 52.9334 173.679 53.232 175.049 53.232Z" fill="#3B6AFF"/>
|
||||
<path d="M18.7486 56.9368C18.24 57.9379 18.6544 59.1603 19.7097 59.5876C25.4636 61.9173 31.8375 62.4285 37.9309 61.0195C44.0243 59.6104 49.4913 56.3611 53.5727 51.757C54.3213 50.9126 54.1334 49.6378 53.2211 48.9652L48.0298 45.1375C47.1176 44.4649 45.8288 44.6527 45.0475 45.4682C42.4841 48.144 39.1628 50.0358 35.4868 50.8859C31.8108 51.7359 27.976 51.4989 24.4608 50.2287C23.3895 49.8416 22.1511 50.2383 21.6425 51.2394L18.7486 56.9368Z" fill="#3B6AFF"/>
|
||||
<path d="M4.31783 20.5629C3.26812 20.1135 2.04436 20.5957 1.66746 21.6708C-0.601631 28.1431 -0.560215 35.2232 1.82443 41.6993C4.20907 48.1754 8.77242 53.6007 14.7032 57.0724C15.6883 57.649 16.9343 57.2274 17.443 56.2077L20.3381 50.4049C20.8468 49.3852 20.4224 48.1565 19.4603 47.5424C15.9545 45.3045 13.2584 41.9758 11.8109 38.0448C10.3634 34.1138 10.2589 29.8367 11.4797 25.8691C11.8148 24.7803 11.341 23.5697 10.2913 23.1203L4.31783 20.5629Z" fill="#3B6AFF"/>
|
||||
<path d="M32.6177 2.18868C32.7167 1.04295 31.8788 0.0252705 30.7428 0.0047656C25.2237 -0.0948531 19.7716 1.36887 15.0107 4.25076C10.2498 7.13264 6.39603 11.302 3.87117 16.2708C3.35146 17.2935 3.84069 18.5222 4.88469 18.9761L10.8257 21.5587C11.8697 22.0126 13.07 21.5167 13.6283 20.515C15.2479 17.609 17.5917 15.1671 20.4408 13.4425C23.2899 11.7178 26.5241 10.7832 29.8196 10.714C30.9556 10.6901 31.9551 9.85441 32.0541 8.70867L32.6177 2.18868Z" fill="#3B6AFF"/>
|
||||
<path d="M53.7542 13.0775C54.6687 12.4032 54.8659 11.1136 54.1264 10.2527C51.8524 7.60548 49.1219 5.3751 46.0581 3.66936C42.9943 1.96362 39.6554 0.814996 36.1983 0.27149C35.0741 0.0947387 34.0727 0.936616 33.9735 2.06482L33.4089 8.48501C33.3097 9.61322 34.1522 10.5966 35.2688 10.8164C37.2328 11.203 39.1278 11.8956 40.8825 12.8725C42.6372 13.8494 44.2218 15.094 45.5804 16.5573C46.3528 17.3892 47.6358 17.5891 48.5503 16.9147L53.7542 13.0775Z" fill="#3B6AFF"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 5.2 KiB |
BIN
Clario/Assets/Logo/logo-combined-primary-bg-light-192x64.png
Normal file
|
After Width: | Height: | Size: 2.7 KiB |
BIN
Clario/Assets/Logo/logo-combined-primary-bg-light-384x128.png
Normal file
|
After Width: | Height: | Size: 5.4 KiB |
BIN
Clario/Assets/Logo/logo-combined-primary-bg-light-768x192.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
12
Clario/Assets/Logo/logo-combined-primary-bg-light.svg
Normal file
@@ -0,0 +1,12 @@
|
||||
<svg width="193" height="64" viewBox="0 0 193 64" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect width="192" height="64" fill="white"/>
|
||||
<path d="M60.9424 61.424V14.96H70.7671V61.424H60.9424Z" fill="#3B6AFF"/>
|
||||
<path d="M90.7211 62.064C87.8529 62.064 85.2844 61.36 83.0155 59.952C80.7894 58.544 79.0128 56.624 77.6857 54.192C76.4014 51.76 75.7593 48.9866 75.7593 45.872C75.7593 42.7573 76.4014 39.984 77.6857 37.552C79.0128 35.12 80.7894 33.2 83.0155 31.792C85.2844 30.384 87.8529 29.68 90.7211 29.68C92.8188 29.68 94.7024 30.0853 96.372 30.896C98.0844 31.7066 99.4757 32.8373 100.546 34.288C101.616 35.696 102.215 37.3173 102.344 39.152V52.592C102.215 54.4266 101.616 56.0693 100.546 57.52C99.5185 58.928 98.1486 60.0373 96.4362 60.848C94.7238 61.6586 92.8188 62.064 90.7211 62.064ZM92.7118 53.232C94.8094 53.232 96.5004 52.5493 97.7847 51.184C99.069 49.776 99.7111 48.0053 99.7111 45.872C99.7111 44.4213 99.4114 43.1413 98.8121 42.032C98.2556 40.9226 97.4422 40.0693 96.372 39.472C95.3446 38.832 94.1459 38.512 92.776 38.512C91.4061 38.512 90.186 38.832 89.1158 39.472C88.0884 40.0693 87.2536 40.9226 86.6114 42.032C86.0121 43.1413 85.7125 44.4213 85.7125 45.872C85.7125 47.28 86.0121 48.5386 86.6114 49.648C87.2108 50.7573 88.0456 51.632 89.1158 52.272C90.186 52.912 91.3847 53.232 92.7118 53.232ZM99.3258 61.424V53.04L100.803 45.488L99.3258 37.936V30.32H108.958V61.424H99.3258Z" fill="#3B6AFF"/>
|
||||
<path d="M115.875 61.424V30.32H125.7V61.424H115.875ZM125.7 44.336L121.591 41.136C122.404 37.5093 123.774 34.6933 125.7 32.688C127.627 30.6826 130.302 29.68 133.727 29.68C135.225 29.68 136.531 29.9146 137.644 30.384C138.8 30.8106 139.806 31.4933 140.662 32.432L134.819 39.792C134.391 39.3226 133.855 38.96 133.213 38.704C132.571 38.448 131.843 38.32 131.03 38.32C129.403 38.32 128.098 38.832 127.113 39.856C126.171 40.8373 125.7 42.3306 125.7 44.336Z" fill="#3B6AFF"/>
|
||||
<path d="M143.279 61.424V30.32H153.104V61.424H143.279ZM148.224 26.032C146.683 26.032 145.398 25.52 144.371 24.496C143.386 23.4293 142.894 22.1493 142.894 20.656C142.894 19.12 143.386 17.84 144.371 16.816C145.398 15.792 146.683 15.28 148.224 15.28C149.765 15.28 151.028 15.792 152.012 16.816C152.997 17.84 153.489 19.12 153.489 20.656C153.489 22.1493 152.997 23.4293 152.012 24.496C151.028 25.52 149.765 26.032 148.224 26.032Z" fill="#3B6AFF"/>
|
||||
<path d="M175.049 62.128C171.838 62.128 168.927 61.424 166.316 60.016C163.747 58.5653 161.714 56.6026 160.215 54.128C158.717 51.6533 157.968 48.88 157.968 45.808C157.968 42.736 158.717 39.984 160.215 37.552C161.714 35.12 163.747 33.2 166.316 31.792C168.884 30.3413 171.795 29.616 175.049 29.616C178.302 29.616 181.213 30.32 183.782 31.728C186.35 33.136 188.384 35.0773 189.882 37.552C191.381 39.984 192.13 42.736 192.13 45.808C192.13 48.88 191.381 51.6533 189.882 54.128C188.384 56.6026 186.35 58.5653 183.782 60.016C181.213 61.424 178.302 62.128 175.049 62.128ZM175.049 53.232C176.461 53.232 177.703 52.9333 178.773 52.336C179.843 51.696 180.657 50.8213 181.213 49.712C181.813 48.56 182.112 47.2586 182.112 45.808C182.112 44.3573 181.813 43.0986 181.213 42.032C180.614 40.9226 179.779 40.0693 178.709 39.472C177.682 38.832 176.461 38.512 175.049 38.512C173.679 38.512 172.459 38.832 171.389 39.472C170.318 40.0693 169.484 40.9226 168.884 42.032C168.285 43.1413 167.985 44.4213 167.985 45.872C167.985 47.28 168.285 48.56 168.884 49.712C169.484 50.8213 170.318 51.696 171.389 52.336C172.459 52.9333 173.679 53.232 175.049 53.232Z" fill="#3B6AFF"/>
|
||||
<path d="M18.7486 56.9368C18.24 57.9379 18.6544 59.1603 19.7097 59.5876C25.4636 61.9173 31.8375 62.4285 37.9309 61.0195C44.0243 59.6104 49.4913 56.3611 53.5727 51.757C54.3213 50.9126 54.1334 49.6378 53.2211 48.9652L48.0298 45.1375C47.1176 44.4649 45.8288 44.6527 45.0475 45.4682C42.4841 48.144 39.1628 50.0358 35.4868 50.8859C31.8108 51.7359 27.976 51.4989 24.4608 50.2287C23.3895 49.8416 22.1511 50.2383 21.6425 51.2394L18.7486 56.9368Z" fill="#3B6AFF"/>
|
||||
<path d="M4.31783 20.563C3.26812 20.1136 2.04436 20.5957 1.66746 21.6708C-0.601631 28.1432 -0.560215 35.2233 1.82443 41.6994C4.20907 48.1754 8.77242 53.6007 14.7032 57.0724C15.6883 57.6491 16.9343 57.2275 17.443 56.2077L20.3381 50.405C20.8468 49.3853 20.4224 48.1566 19.4603 47.5424C15.9545 45.3045 13.2584 41.9758 11.8109 38.0449C10.3634 34.1139 10.2589 29.8368 11.4797 25.8692C11.8148 24.7804 11.341 23.5697 10.2913 23.1203L4.31783 20.563Z" fill="#3B6AFF"/>
|
||||
<path d="M32.6177 2.18868C32.7167 1.04295 31.8788 0.0252705 30.7428 0.0047656C25.2237 -0.0948531 19.7716 1.36887 15.0107 4.25076C10.2498 7.13264 6.39603 11.302 3.87117 16.2708C3.35146 17.2935 3.84069 18.5222 4.88469 18.9761L10.8257 21.5587C11.8697 22.0126 13.07 21.5167 13.6283 20.515C15.2479 17.609 17.5917 15.1671 20.4408 13.4425C23.2899 11.7178 26.5241 10.7832 29.8196 10.714C30.9556 10.6901 31.9551 9.85441 32.0541 8.70867L32.6177 2.18868Z" fill="#3B6AFF"/>
|
||||
<path d="M53.7542 13.0775C54.6687 12.4032 54.8659 11.1137 54.1264 10.2528C51.8524 7.60554 49.1219 5.37516 46.0581 3.66942C42.9943 1.96368 39.6554 0.815057 36.1983 0.271551C35.0741 0.0947997 34.0727 0.936677 33.9735 2.06488L33.4089 8.48507C33.3097 9.61328 34.1522 10.5967 35.2688 10.8165C37.2328 11.203 39.1278 11.8957 40.8825 12.8726C42.6372 13.8495 44.2218 15.0941 45.5804 16.5573C46.3528 17.3892 47.6358 17.5891 48.5503 16.9148L53.7542 13.0775Z" fill="#3B6AFF"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 5.2 KiB |
BIN
Clario/Assets/Logo/logo-combined-primary-transparent-192x64.png
Normal file
|
After Width: | Height: | Size: 3.2 KiB |
BIN
Clario/Assets/Logo/logo-combined-primary-transparent-384x128.png
Normal file
|
After Width: | Height: | Size: 6.5 KiB |
BIN
Clario/Assets/Logo/logo-combined-primary-transparent-768x192.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
11
Clario/Assets/Logo/logo-combined-primary-transparent.svg
Normal file
@@ -0,0 +1,11 @@
|
||||
<svg width="193" height="64" viewBox="0 0 193 64" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M60.9424 61.424V14.96H70.7671V61.424H60.9424Z" fill="#3B6AFF"/>
|
||||
<path d="M90.7211 62.064C87.8529 62.064 85.2844 61.36 83.0155 59.952C80.7894 58.544 79.0128 56.624 77.6857 54.192C76.4014 51.76 75.7593 48.9866 75.7593 45.872C75.7593 42.7573 76.4014 39.984 77.6857 37.552C79.0128 35.12 80.7894 33.2 83.0155 31.792C85.2844 30.384 87.8529 29.68 90.7211 29.68C92.8188 29.68 94.7024 30.0853 96.372 30.896C98.0844 31.7066 99.4757 32.8373 100.546 34.288C101.616 35.696 102.215 37.3173 102.344 39.152V52.592C102.215 54.4266 101.616 56.0693 100.546 57.52C99.5185 58.928 98.1486 60.0373 96.4362 60.848C94.7238 61.6586 92.8188 62.064 90.7211 62.064ZM92.7118 53.232C94.8094 53.232 96.5004 52.5493 97.7847 51.184C99.069 49.776 99.7111 48.0053 99.7111 45.872C99.7111 44.4213 99.4114 43.1413 98.8121 42.032C98.2556 40.9226 97.4422 40.0693 96.372 39.472C95.3446 38.832 94.1459 38.512 92.776 38.512C91.4061 38.512 90.186 38.832 89.1158 39.472C88.0884 40.0693 87.2536 40.9226 86.6114 42.032C86.0121 43.1413 85.7125 44.4213 85.7125 45.872C85.7125 47.28 86.0121 48.5386 86.6114 49.648C87.2108 50.7573 88.0456 51.632 89.1158 52.272C90.186 52.912 91.3847 53.232 92.7118 53.232ZM99.3258 61.424V53.04L100.803 45.488L99.3258 37.936V30.32H108.958V61.424H99.3258Z" fill="#3B6AFF"/>
|
||||
<path d="M115.875 61.424V30.32H125.7V61.424H115.875ZM125.7 44.336L121.591 41.136C122.404 37.5093 123.774 34.6933 125.7 32.688C127.627 30.6826 130.302 29.68 133.727 29.68C135.225 29.68 136.531 29.9146 137.644 30.384C138.8 30.8106 139.806 31.4933 140.662 32.432L134.819 39.792C134.391 39.3226 133.855 38.96 133.213 38.704C132.571 38.448 131.843 38.32 131.03 38.32C129.403 38.32 128.098 38.832 127.113 39.856C126.171 40.8373 125.7 42.3306 125.7 44.336Z" fill="#3B6AFF"/>
|
||||
<path d="M143.279 61.424V30.32H153.104V61.424H143.279ZM148.224 26.032C146.683 26.032 145.398 25.52 144.371 24.496C143.386 23.4293 142.894 22.1493 142.894 20.656C142.894 19.12 143.386 17.84 144.371 16.816C145.398 15.792 146.683 15.28 148.224 15.28C149.765 15.28 151.028 15.792 152.012 16.816C152.997 17.84 153.489 19.12 153.489 20.656C153.489 22.1493 152.997 23.4293 152.012 24.496C151.028 25.52 149.765 26.032 148.224 26.032Z" fill="#3B6AFF"/>
|
||||
<path d="M175.049 62.128C171.838 62.128 168.927 61.424 166.316 60.016C163.747 58.5653 161.714 56.6026 160.215 54.128C158.717 51.6533 157.968 48.88 157.968 45.808C157.968 42.736 158.717 39.984 160.215 37.552C161.714 35.12 163.747 33.2 166.316 31.792C168.884 30.3413 171.795 29.616 175.049 29.616C178.302 29.616 181.213 30.32 183.782 31.728C186.35 33.136 188.384 35.0773 189.882 37.552C191.381 39.984 192.13 42.736 192.13 45.808C192.13 48.88 191.381 51.6533 189.882 54.128C188.384 56.6026 186.35 58.5653 183.782 60.016C181.213 61.424 178.302 62.128 175.049 62.128ZM175.049 53.232C176.461 53.232 177.703 52.9333 178.773 52.336C179.843 51.696 180.657 50.8213 181.213 49.712C181.813 48.56 182.112 47.2586 182.112 45.808C182.112 44.3573 181.813 43.0986 181.213 42.032C180.614 40.9226 179.779 40.0693 178.709 39.472C177.682 38.832 176.461 38.512 175.049 38.512C173.679 38.512 172.459 38.832 171.389 39.472C170.318 40.0693 169.484 40.9226 168.884 42.032C168.285 43.1413 167.985 44.4213 167.985 45.872C167.985 47.28 168.285 48.56 168.884 49.712C169.484 50.8213 170.318 51.696 171.389 52.336C172.459 52.9333 173.679 53.232 175.049 53.232Z" fill="#3B6AFF"/>
|
||||
<path d="M18.7486 56.9368C18.24 57.9379 18.6544 59.1603 19.7097 59.5876C25.4636 61.9173 31.8375 62.4285 37.9309 61.0195C44.0243 59.6104 49.4913 56.3611 53.5727 51.757C54.3213 50.9126 54.1334 49.6378 53.2211 48.9652L48.0298 45.1375C47.1176 44.4649 45.8288 44.6527 45.0475 45.4682C42.4841 48.144 39.1628 50.0358 35.4868 50.8859C31.8108 51.7359 27.976 51.4989 24.4608 50.2287C23.3895 49.8416 22.1511 50.2383 21.6425 51.2394L18.7486 56.9368Z" fill="#3B6AFF"/>
|
||||
<path d="M4.31783 20.563C3.26812 20.1136 2.04436 20.5957 1.66746 21.6708C-0.601631 28.1432 -0.560215 35.2233 1.82443 41.6994C4.20907 48.1754 8.77242 53.6007 14.7032 57.0724C15.6883 57.6491 16.9343 57.2275 17.443 56.2077L20.3381 50.405C20.8468 49.3853 20.4224 48.1566 19.4603 47.5424C15.9545 45.3045 13.2584 41.9758 11.8109 38.0449C10.3634 34.1139 10.2589 29.8368 11.4797 25.8692C11.8148 24.7804 11.341 23.5697 10.2913 23.1203L4.31783 20.563Z" fill="#3B6AFF"/>
|
||||
<path d="M32.6177 2.18868C32.7167 1.04295 31.8788 0.0252705 30.7428 0.0047656C25.2237 -0.0948531 19.7716 1.36887 15.0107 4.25076C10.2498 7.13264 6.39603 11.302 3.87117 16.2708C3.35146 17.2935 3.84069 18.5222 4.88469 18.9761L10.8257 21.5587C11.8697 22.0126 13.07 21.5167 13.6283 20.515C15.2479 17.609 17.5917 15.1671 20.4408 13.4425C23.2899 11.7178 26.5241 10.7832 29.8196 10.714C30.9556 10.6901 31.9551 9.85441 32.0541 8.70867L32.6177 2.18868Z" fill="#3B6AFF"/>
|
||||
<path d="M53.7542 13.0775C54.6687 12.4032 54.8659 11.1137 54.1264 10.2528C51.8524 7.60554 49.1219 5.37516 46.0581 3.66942C42.9943 1.96368 39.6554 0.815057 36.1983 0.271551C35.0741 0.0947997 34.0727 0.936677 33.9735 2.06488L33.4089 8.48507C33.3097 9.61328 34.1522 10.5967 35.2688 10.8165C37.2328 11.203 39.1278 11.8957 40.8825 12.8726C42.6372 13.8495 44.2218 15.0941 45.5804 16.5573C46.3528 17.3892 47.6358 17.5891 48.5503 16.9148L53.7542 13.0775Z" fill="#3B6AFF"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 5.1 KiB |
BIN
Clario/Assets/Logo/logo-icon-neutral-dark-transparent-128.png
Normal file
|
After Width: | Height: | Size: 3.0 KiB |
BIN
Clario/Assets/Logo/logo-icon-neutral-dark-transparent-256.png
Normal file
|
After Width: | Height: | Size: 5.8 KiB |
BIN
Clario/Assets/Logo/logo-icon-neutral-dark-transparent-512.png
Normal file
|
After Width: | Height: | Size: 12 KiB |