blazor web app base

main
Peace 11 months ago
parent 29a21d7bae
commit 01a3538d18
  1. 6
      AspNetCoreLearnOfficial.sln
  2. 454
      WebAppWithBlazor/.gitignore
  3. 10
      WebAppWithBlazor/App.razor
  4. 8
      WebAppWithBlazor/BlazingPizza.csproj
  5. 20
      WebAppWithBlazor/Model/Address.cs
  6. 23
      WebAppWithBlazor/Model/Order.cs
  7. 46
      WebAppWithBlazor/Model/OrderWithStatus.cs
  8. 42
      WebAppWithBlazor/Model/Pizza.cs
  9. 20
      WebAppWithBlazor/Model/PizzaSpecial.cs
  10. 11
      WebAppWithBlazor/Model/PizzaTopping.cs
  11. 13
      WebAppWithBlazor/Model/Topping.cs
  12. 9
      WebAppWithBlazor/Model/UserInfo.cs
  13. 42
      WebAppWithBlazor/Pages/Error.cshtml
  14. 32
      WebAppWithBlazor/Pages/Error.cshtml.cs
  15. 4
      WebAppWithBlazor/Pages/Index.razor
  16. 37
      WebAppWithBlazor/Pages/_Host.cshtml
  17. 20
      WebAppWithBlazor/Program.cs
  18. 28
      WebAppWithBlazor/Properties/launchSettings.json
  19. 6
      WebAppWithBlazor/Shared/MainLayout.razor
  20. 10
      WebAppWithBlazor/_Imports.razor
  21. 10
      WebAppWithBlazor/appsettings.Development.json
  22. 10
      WebAppWithBlazor/appsettings.json
  23. 7
      WebAppWithBlazor/wwwroot/css/bootstrap/bootstrap.min.css
  24. 1
      WebAppWithBlazor/wwwroot/css/bootstrap/bootstrap.min.css.map
  25. BIN
      WebAppWithBlazor/wwwroot/css/font/quicksand-v8-latin-300.woff
  26. BIN
      WebAppWithBlazor/wwwroot/css/font/quicksand-v8-latin-300.woff2
  27. BIN
      WebAppWithBlazor/wwwroot/css/font/quicksand-v8-latin-500.woff
  28. BIN
      WebAppWithBlazor/wwwroot/css/font/quicksand-v8-latin-500.woff2
  29. BIN
      WebAppWithBlazor/wwwroot/css/font/quicksand-v8-latin-700.woff
  30. BIN
      WebAppWithBlazor/wwwroot/css/font/quicksand-v8-latin-700.woff2
  31. BIN
      WebAppWithBlazor/wwwroot/css/font/quicksand-v8-latin-regular.woff
  32. BIN
      WebAppWithBlazor/wwwroot/css/font/quicksand-v8-latin-regular.woff2
  33. 40
      WebAppWithBlazor/wwwroot/css/font/quicksand.css
  34. 758
      WebAppWithBlazor/wwwroot/css/site.css
  35. BIN
      WebAppWithBlazor/wwwroot/favicon.ico
  36. 77
      WebAppWithBlazor/wwwroot/img/bike.svg
  37. BIN
      WebAppWithBlazor/wwwroot/img/icon-512.png
  38. 117
      WebAppWithBlazor/wwwroot/img/logo.svg
  39. 106
      WebAppWithBlazor/wwwroot/img/pizza-slice.svg
  40. BIN
      WebAppWithBlazor/wwwroot/img/pizzas/bacon.jpg
  41. BIN
      WebAppWithBlazor/wwwroot/img/pizzas/brit.jpg
  42. BIN
      WebAppWithBlazor/wwwroot/img/pizzas/cheese.jpg
  43. BIN
      WebAppWithBlazor/wwwroot/img/pizzas/margherita.jpg
  44. BIN
      WebAppWithBlazor/wwwroot/img/pizzas/meaty.jpg
  45. BIN
      WebAppWithBlazor/wwwroot/img/pizzas/mushroom.jpg
  46. BIN
      WebAppWithBlazor/wwwroot/img/pizzas/pepperoni.jpg
  47. BIN
      WebAppWithBlazor/wwwroot/img/pizzas/salad.jpg
  48. 72
      WebAppWithBlazor/wwwroot/img/user.svg

@ -13,6 +13,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WebAPIWithEF", "WebAPIWithE
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ContosoPizza", "WebUIWithRazor\ContosoPizza.csproj", "{5B7354A2-2E2E-44CE-9582-BB738FF8F09C}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BlazingPizza", "WebAppWithBlazor\BlazingPizza.csproj", "{3D13BC4F-5BA1-4484-B377-559156A38238}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@ -39,6 +41,10 @@ Global
{5B7354A2-2E2E-44CE-9582-BB738FF8F09C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5B7354A2-2E2E-44CE-9582-BB738FF8F09C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5B7354A2-2E2E-44CE-9582-BB738FF8F09C}.Release|Any CPU.Build.0 = Release|Any CPU
{3D13BC4F-5BA1-4484-B377-559156A38238}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3D13BC4F-5BA1-4484-B377-559156A38238}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3D13BC4F-5BA1-4484-B377-559156A38238}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3D13BC4F-5BA1-4484-B377-559156A38238}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE

@ -0,0 +1,454 @@
## 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
.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

@ -0,0 +1,10 @@
<Router AppAssembly="@typeof(Program).Assembly" PreferExactMatches="@true">
<Found Context="routeData">
<RouteView RouteData="@routeData" />
</Found>
<NotFound>
<LayoutView>
<p>Sorry, there's nothing at this address.</p>
</LayoutView>
</NotFound>
</Router>

@ -0,0 +1,8 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
</Project>

@ -0,0 +1,20 @@

namespace BlazingPizza
{
public class Address
{
public int Id { get; set; }
public string Name { get; set; }
public string Line1 { get; set; }
public string Line2 { get; set; }
public string City { get; set; }
public string Region { get; set; }
public string PostalCode { get; set; }
}
}

@ -0,0 +1,23 @@
using System;
using System.Collections.Generic;
using System.Linq;
namespace BlazingPizza
{
public class Order
{
public int OrderId { get; set; }
public string UserId { get; set; }
public DateTime CreatedTime { get; set; }
public Address DeliveryAddress { get; set; } = new Address();
public List<Pizza> Pizzas { get; set; } = new List<Pizza>();
public decimal GetTotalPrice() => Pizzas.Sum(p => p.GetTotalPrice());
public string GetFormattedTotalPrice() => GetTotalPrice().ToString("0.00");
}
}

@ -0,0 +1,46 @@
using System;
using System.Collections.Generic;
namespace BlazingPizza
{
public class OrderWithStatus
{
public readonly static TimeSpan PreparationDuration = TimeSpan.FromSeconds(10);
public readonly static TimeSpan DeliveryDuration = TimeSpan.FromMinutes(1); // Unrealistic, but more interesting to watch
public Order Order { get; set; }
public string StatusText { get; set; }
public bool IsDelivered => StatusText == "Delivered";
public static OrderWithStatus FromOrder(Order order)
{
// To simulate a real backend process, we fake status updates based on the amount
// of time since the order was placed
string statusText;
var dispatchTime = order.CreatedTime.Add(PreparationDuration);
if (DateTime.Now < dispatchTime)
{
statusText = "Preparing";
}
else if (DateTime.Now < dispatchTime + DeliveryDuration)
{
statusText = "Out for delivery";
}
else
{
statusText = "Delivered";
}
return new OrderWithStatus
{
Order = order,
StatusText = statusText
};
}
}
}

@ -0,0 +1,42 @@
using System.Collections.Generic;
using System.Linq;
namespace BlazingPizza
{
/// <summary>
/// Represents a customized pizza as part of an order
/// </summary>
public class Pizza
{
public const int DefaultSize = 12;
public const int MinimumSize = 9;
public const int MaximumSize = 17;
public int Id { get; set; }
public int OrderId { get; set; }
public PizzaSpecial Special { get; set; }
public int SpecialId { get; set; }
public int Size { get; set; }
public List<PizzaTopping> Toppings { get; set; }
public decimal GetBasePrice()
{
return ((decimal)Size / (decimal)DefaultSize) * Special.BasePrice;
}
public decimal GetTotalPrice()
{
return GetBasePrice();
}
public string GetFormattedTotalPrice()
{
return GetTotalPrice().ToString("0.00");
}
}
}

@ -0,0 +1,20 @@
namespace BlazingPizza
{
/// <summary>
/// Represents a pre-configured template for a pizza a user can order
/// </summary>
public class PizzaSpecial
{
public int Id { get; set; }
public string Name { get; set; }
public decimal BasePrice { get; set; }
public string Description { get; set; }
public string ImageUrl { get; set; }
public string GetFormattedBasePrice() => BasePrice.ToString("0.00");
}
}

@ -0,0 +1,11 @@
namespace BlazingPizza
{
public class PizzaTopping
{
public Topping Topping { get; set; }
public int ToppingId { get; set; }
public int PizzaId { get; set; }
}
}

@ -0,0 +1,13 @@
namespace BlazingPizza
{
public class Topping
{
public int Id { get; set; }
public string Name { get; set; }
public decimal Price { get; set; }
public string GetFormattedPrice() => Price.ToString("0.00");
}
}

@ -0,0 +1,9 @@
namespace BlazingPizza
{
public class UserInfo
{
public bool IsAuthenticated { get; set; }
public string Name { get; set; }
}
}

@ -0,0 +1,42 @@
@page
@model BlazingPizza.Pages.ErrorModel
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<title>Error</title>
<link href="~/css/bootstrap/bootstrap.min.css" rel="stylesheet" />
<link href="~/css/app.css" rel="stylesheet" />
</head>
<body>
<div class="main">
<div class="content px-4">
<h1 class="text-danger">Error.</h1>
<h2 class="text-danger">An error occurred while processing your request.</h2>
@if (Model.ShowRequestId)
{
<p>
<strong>Request ID:</strong> <code>@Model.RequestId</code>
</p>
}
<h3>Development Mode</h3>
<p>
Swapping to the <strong>Development</strong> environment displays detailed information about the error that occurred.
</p>
<p>
<strong>The Development environment shouldn't be enabled for deployed applications.</strong>
It can result in displaying sensitive information from exceptions to end users.
For local debugging, enable the <strong>Development</strong> environment by setting the <strong>ASPNETCORE_ENVIRONMENT</strong> environment variable to <strong>Development</strong>
and restarting the app.
</p>
</div>
</div>
</body>
</html>

@ -0,0 +1,32 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.Extensions.Logging;
namespace BlazingPizza.Pages
{
[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
[IgnoreAntiforgeryToken]
public class ErrorModel : PageModel
{
public string RequestId { get; set; }
public bool ShowRequestId => !string.IsNullOrEmpty(RequestId);
private readonly ILogger<ErrorModel> _logger;
public ErrorModel(ILogger<ErrorModel> logger)
{
_logger = logger;
}
public void OnGet()
{
RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier;
}
}
}

@ -0,0 +1,4 @@
@page "/"
<h1>Blazing Pizzas</h1>

@ -0,0 +1,37 @@
@page "/"
@namespace BlazingPizza.Pages
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
<base href="/" />
<link rel="icon" href="img/icon-512.png" />
<link href="css/bootstrap/bootstrap.min.css" rel="stylesheet" />
<link href="css/site.css" rel="stylesheet" />
<title>Blazing Pizza</title>
</head>
<body>
<div id="app">
<div class="content">
<component type="typeof(App)" render-mode="ServerPrerendered" />
</div>
</div>
<div id="blazor-error-ui">
<environment include="Staging,Production">
An error has occurred. This application may no longer respond until reloaded.
</environment>
<environment include="Development">
An unhandled exception has occurred. See browser dev tools for details.
</environment>
<a href="" class="reload">Reload</a>
<a class="dismiss">🗙</a>
</div>
<script src="_framework/blazor.server.js"></script>
</body>
</html>

@ -0,0 +1,20 @@
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();
builder.Services.AddServerSideBlazor();
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
}
app.UseStaticFiles();
app.UseRouting();
app.MapRazorPages();
app.MapBlazorHub();
app.MapFallbackToPage("/_Host");
app.Run();

@ -0,0 +1,28 @@
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:20845",
"sslPort": 0
}
},
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"BlazingPizza": {
"commandName": "Project",
"dotnetRunMessages": "true",
"launchBrowser": true,
"applicationUrl": "http://localhost:5000",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}

@ -0,0 +1,6 @@
@inherits LayoutComponentBase
<div class="content">
@Body
</div>

@ -0,0 +1,10 @@
@using System.Net.Http
@using Microsoft.AspNetCore.Authorization
@using Microsoft.AspNetCore.Components.Authorization
@using Microsoft.AspNetCore.Components.Forms
@using Microsoft.AspNetCore.Components.Routing
@using Microsoft.AspNetCore.Components.Web
@using Microsoft.AspNetCore.Components.Web.Virtualization
@using Microsoft.JSInterop
@using BlazingPizza
@using BlazingPizza.Shared

@ -0,0 +1,10 @@
{
"DetailedErrors": true,
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
}
}

@ -0,0 +1,10 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*"
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -0,0 +1,40 @@
/* quicksand-300 - latin */
@font-face {
font-family: 'Quicksand';
font-style: normal;
font-weight: 300;
src: local('Quicksand Light'), local('Quicksand-Light'),
url('quicksand-v8-latin-300.woff2') format('woff2'), /* Chrome 26+, Opera 23+, Firefox 39+ */
url('quicksand-v8-latin-300.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
}
/* quicksand-regular - latin */
@font-face {
font-family: 'Quicksand';
font-style: normal;
font-weight: 400;
src: local('Quicksand Regular'), local('Quicksand-Regular'),
url('quicksand-v8-latin-regular.woff2') format('woff2'), /* Chrome 26+, Opera 23+, Firefox 39+ */
url('quicksand-v8-latin-regular.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
}
/* quicksand-500 - latin */
@font-face {
font-family: 'Quicksand';
font-style: normal;
font-weight: 500;
src: local('Quicksand Medium'), local('Quicksand-Medium'),
url('quicksand-v8-latin-500.woff2') format('woff2'), /* Chrome 26+, Opera 23+, Firefox 39+ */
url('quicksand-v8-latin-500.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
}
/* quicksand-700 - latin */
@font-face {
font-family: 'Quicksand';
font-style: normal;
font-weight: 700;
src: local('Quicksand Bold'), local('Quicksand-Bold'),
url('quicksand-v8-latin-700.woff2') format('woff2'), /* Chrome 26+, Opera 23+, Firefox 39+ */
url('quicksand-v8-latin-700.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
}

@ -0,0 +1,758 @@
@import url('font/quicksand.css');
body, html {
height: 100%;
}
body {
padding-top: 5rem;
flex-direction: column;
font-family: 'quicksand';
overflow-y: hidden;
}
form {
width: 100%;
}
.form-group.row > .col-form-label {
text-align: right;
}
.top-bar {
height: 5rem;
background-color: rgb(192,0,0);
background-image: linear-gradient(rgba(0,0,0,0.3) 0%, rgba(0,0,0,0.25) 25%, rgba(0,0,0,0) 70%);
display: flex;
align-items: stretch;
color: white;
box-shadow: 0 1px 3px rgba(0,0,0,0.4);
padding: 0 3rem;
position: fixed;
top: 0;
right: 0;
left: 0;
z-index: 1030;
}
.logo {
display: flex;
}
.logo > img {
margin-right: 3rem;
width: 9rem;
}
.content {
display: flex;
height: 100%;
z-index: 1;
background-color: white;
}
.main {
flex-grow: 1;
overflow-y: auto;
background: linear-gradient(rgba(0,0,0,0) 40%, rgba(0,0,0,0.4) 80%);
padding: 1.5rem !important;
}
.nav-tab {
margin: 0;
padding: 0.3rem 1.8rem;
display: inline-block;
background-color: rgba(0,0,0,0.1);
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
font-size: 0.9rem;
color: white;
position: relative;
text-transform: uppercase;
transition: 0.2s ease-out;
}
.nav-tab:hover {
color: white;
text-decoration: none;
background-color: rgba(255,255,255,0.3);
}
.nav-tab.active {
background-color: rgba(255,255,255,0.2);
color: #fff2cc;
}
.nav-tab img {
height: 2rem;
margin-bottom: 0.25rem;
}
.nav-tab.active img {
filter: brightness(0) saturate(100%) invert(93%) sepia(18%) saturate(797%) hue-rotate(316deg) brightness(109%) contrast(101%);
}
.nav-tab.active:after {
content: "";
position: absolute;
bottom: -1rem;
z-index: 1;
width: 0px;
height: 0px;
border-left: 0.6rem solid transparent;
border-right: 0.6rem solid transparent;
border-top: 1rem solid rgb(205,51,51);
}
.user-info {
margin-left: auto;
display: flex;
flex-direction: row;
align-items: center;
justify-content: center;
}
.user-info img {
margin-right: 0.7rem;
width: 2.6rem;
}
.user-info .username {
display: block;
font-weight: 700;
line-height: 0.7rem;
margin-top: 0.5rem;
color: white;
font-size: 1rem;
}
.user-info a {
color: #fff2cc;
font-size: 0.8rem;
}
.user-info button.sign-out {
color: #fff2cc;
font-size: 0.8rem;
padding: 0;
}
.pizza-cards {
display: grid;
grid-template-columns: repeat(auto-fill, 20rem);
grid-gap: 2rem;
justify-content: center;
padding-left: 0;
}
.pizza-cards > li {
height: 10rem;
position: relative;
background-size: cover;
border-radius: 0.5rem;
list-style-type: none;
box-shadow: 0 3px 4px rgba(0,0,0,0.4);
transition: 0.1s ease-out;
}
.pizza-cards > li:hover {
transform: scale(1.02);
}
.pizza-info {
border-radius: 0.5rem;
top: 0;
left: 0;
right: 0;
bottom: 0;
position: absolute;
background: linear-gradient(rgba(0,0,0,0.7) 30%, rgba(0,0,0,0) 80%);
padding: 1rem 1rem;
color: #fff2cc;
cursor: pointer;
text-shadow: 0 2px 2px rgba(0,0,0,0.5);
line-height: 1.25rem;
}
.pizza-info .title {
color: white;
font-size: 1.4rem;
display: block;
margin: 0.2rem 0 0.4rem 0;
font-family: 'Bahnschrift', Arial, Helvetica, sans-serif;
text-transform: uppercase;
}
.pizza-info .price {
position: absolute;
bottom: 0.5rem;
right: 1rem;
font-size: 1.5rem;
font-weight: 700;
padding: 0rem 0.7rem;
border-radius: 4px;
background-color: #08af08;
color: white;
line-height: 2rem;
}
.price::before {
content: '£';
font-weight: 300;
font-size: 1.2rem;
margin-right: 0.2rem;
}
.sidebar {
background-color: #2b2b2b;
width: 20rem;
display: flex;
flex-direction: column;
color: white;
}
.order-contents {
overflow-y: auto;
padding: 2rem 1.5rem 1.5rem 1.5rem;
flex-grow: 1;
}
.order-contents h2 {
color: #fff2cc;
font-size: 1.3rem;
font-weight: 300;
margin-bottom: 1rem;
font-family: 'Bahnschrift', Arial, Helvetica, sans-serif;
text-transform: uppercase;
}
.order-total {
background-color: rgb(191, 52, 52);
height: 4rem;
flex-shrink: 0;
display: flex;
flex-direction: row;
align-items: center;
color: white;
font-size: 1.2rem;
transition: all 600ms cubic-bezier(0.68, -0.55, 0.265, 1.55);
padding: 0 1.5rem;
}
.order-total.hidden {
transform: translate3d(0, 4rem, 0);
}
.order-total .total-price {
font-weight: 700;
font-size: 1.5rem;
}
.order-total .total-price::before {
content: '£';
font-weight: 300;
margin: 0 0.1rem 0 0.4rem;
}
.order-total .btn {
margin-left: auto;
font-weight: 700;
border-radius: 20px;
padding: 0.4rem 1.2rem;
}
.checkout-button {
margin: auto;
display: block;
font-weight: 700;
border-radius: 20px;
padding: 0.4rem 1.2rem;
}
.cart-item {
background-color: #333333;
padding: 0.8rem 1.2rem;
border-radius: 6px;
font-weight: 100;
margin-top: 1rem;
position: relative;
}
.cart-item .title {
font-weight: 700;
}
.cart-item ul {
padding: 0;
margin: 0.4rem 0.6rem;
}
.cart-item li {
list-style-type: none;
margin-left: 0rem;
font-size: 0.8rem;
}
.empty-cart {
text-align: center;
margin: auto;
font-size: 1.5rem;
font-weight: 100;
color: #676767;
}
.item-price {
font-weight: 500;
}
.item-price::before {
content: '£';
font-weight: 100;
margin-right: 0.3rem;
}
.delete-item {
position: absolute;
top: 0;
right: 0;
content: 'X';
cursor: pointer;
color: #fff2cc;
width: 2rem;
height: 2rem;
text-align: center;
}
.delete-item:hover {
text-decoration: none;
color: #fff2cc;
background-color: rgba(255,255,255,0.1);
}
.configured-pizza-item {
display: flex;
flex-direction: row;
}
.dialog-container {
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
background-color: rgba(0,0,0,0.5);
z-index: 2000;
display: flex;
animation: dialog-container-entry 0.2s;
}
@keyframes dialog-container-entry {
0% {
opacity: 0;
}
100% {
opacity: 1;
}
}
.dialog {
background-color: white;
box-shadow: 0 0 12px rgba(0,0,0,0.6);
display: flex;
flex-direction: column;
z-index: 2000;
align-self: center;
margin: auto;
width: 700px;
max-height: calc(100% - 3rem);
animation: dialog-entry 0.4s;
animation-timing-function: cubic-bezier(0.075, 0.820, 0.165, 1.000);
}
@keyframes dialog-entry {
0% {
transform: translateY(30px) scale(0.95);
}
100% {
transform: translateX(0px) scale(1.0);
}
}
.dialog-title {
background-color: #444;
color: #fff2cc;
padding: 1.3rem 2rem;
}
.dialog-title h2 {
color: white;
font-size: 1.4rem;
margin: 0;
font-family: 'Bahnschrift', Arial, Helvetica, sans-serif;
text-transform: uppercase;
line-height: 1.3rem;
}
.dialog-body {
flex-grow: 1;
padding: 0.5rem 3rem 1rem 0;
}
.dialog-buttons {
height: 4rem;
flex-shrink: 0;
display: flex;
align-items: center;
background-color: #eee;
padding: 0 1rem;
}
.dialog-body > div {
display: flex;
margin-top: 1rem;
align-items: center;
}
.dialog-body label {
text-align: right;
width: 200px;
margin: 0 1.5rem;
}
.dialog-body input, .dialog-body select {
flex-grow: 1;
width: unset;
}
.dialog-body .size-label {
min-width: 110px;
text-align: right;
}
.dialog .toppings {
text-align: center;
display: block;
padding-left: 4rem;
}
.dialog .topping {
display: inline-block;
background-color: #a04343;
color: white;
padding: 0.2rem 1rem;
border-radius: 2rem;
margin: 0.4rem 0.3rem;
font-weight: 700;
}
.dialog .topping-price {
font-weight: 100;
font-size: 0.8rem;
}
.dialog .topping-price::before {
content: '£';
}
.delete-topping {
background: none;
border: none;
color: white;
padding: 0.2rem 0.2rem 0.3rem 0.2rem;
cursor: pointer;
}
.delete-topping:hover {
color: yellow;
}
.form-message {
padding: 0.5rem;
font-weight: 700;
}
.dialog .price {
font-weight: 700;
font-size: 1.5rem;
}
.orders-list .list-group-item {
display: flex;
}
.orders-list .col {
margin: auto;
}
.orders-list h5 {
color: #c03939;
font-size: 1.3rem;
font-weight: 300;
margin: 0.2rem 0 0 0;
font-family: 'Bahnschrift', Arial, Helvetica, sans-serif;
text-transform: uppercase;
}
.track-order {
background-color: white;
box-shadow: 0 2px 4px rgba(0,0,0,0.4);
height: 100%;
display: flex;
flex-direction: column;
}
.track-order > div {
overflow-y: hidden;
}
.track-order-title {
background-color: #eee;
display: flex;
align-items: center;
padding: 1rem 3rem;
}
.track-order-title h2 {
color: #c03939;
font-size: 1.3rem;
font-weight: 300;
margin: 0rem;
font-family: 'Bahnschrift', Arial, Helvetica, sans-serif;
text-transform: uppercase;
}
.track-order-body {
flex-grow: 1;
display: flex;
}
.track-order-details {
overflow-y: auto;
padding: 1.5rem 3rem;
flex-grow: 1;
}
.track-order-map {
width: 350px;
flex-shrink: 0;
}
a.sign-in {
background: none;
border: 1.5px solid white;
border-radius: 0.7em;
color: white;
text-transform: uppercase;
padding: 0.2rem 0.8rem 0.1rem 0.8rem;
font-family: 'Bahnschrift', Arial, Helvetica, sans-serif;
font-weight: 100;
cursor: pointer;
transition: 0.2s ease-out;
margin-left: 3px;
}
a.sign-in:hover {
background-color: rgba(255,255,255,0.3);
color: #fff2cc;
border-color: #fff2cc;
}
input[type=range] {
-webkit-appearance: none;
margin: 7.1px 0;
height: 21px;
}
input[type=range]:focus {
outline: none;
}
input[type=range]::-webkit-slider-runnable-track {
width: 100%;
height: 5.8px;
cursor: pointer;
box-shadow: 0px 0px 1px #000000, 0px 0px 0px #0d0d0d;
background: #dcdcdc;
border-radius: 1.3px;
border: 0px solid #010101;
}
input[type=range]::-webkit-slider-thumb {
box-shadow: 0.9px 0.9px 1px rgba(0, 0, 49, 0.43), 0px 0px 0.9px rgba(0, 0, 75, 0.43);
border: 0px solid #00001e;
height: 20px;
width: 20px;
border-radius: 10px;
background: #d45352;
cursor: pointer;
-webkit-appearance: none;
margin-top: -7.1px;
}
input[type=range]:focus::-webkit-slider-runnable-track {
background: #e1e1e1;
}
input[type=range]::-moz-range-track {
width: 100%;
height: 5.8px;
cursor: pointer;
box-shadow: 0px 0px 1px #000000, 0px 0px 0px #0d0d0d;
background: #dcdcdc;
border-radius: 1.3px;
border: 0px solid #010101;
}
input[type=range]::-moz-range-thumb {
box-shadow: 0.9px 0.9px 1px rgba(0, 0, 49, 0.43), 0px 0px 0.9px rgba(0, 0, 75, 0.43);
border: 0px solid #00001e;
height: 20px;
width: 20px;
border-radius: 10px;
background: #d45352;
cursor: pointer;
}
input[type=range]::-ms-track {
width: 100%;
height: 5.8px;
cursor: pointer;
background: transparent;
border-color: transparent;
color: transparent;
}
input[type=range]::-ms-fill-lower {
background: #d7d7d7;
border: 0px solid #010101;
border-radius: 2.6px;
box-shadow: 0px 0px 1px #000000, 0px 0px 0px #0d0d0d;
}
input[type=range]::-ms-fill-upper {
background: #dcdcdc;
border: 0px solid #010101;
border-radius: 2.6px;
box-shadow: 0px 0px 1px #000000, 0px 0px 0px #0d0d0d;
}
input[type=range]::-ms-thumb {
box-shadow: 0.9px 0.9px 1px rgba(0, 0, 49, 0.43), 0px 0px 0.9px rgba(0, 0, 75, 0.43);
border: 0px solid #00001e;
height: 20px;
width: 20px;
border-radius: 10px;
background: #d45352;
cursor: pointer;
margin-top: 0;
}
.checkout-cols {
display: flex;
}
.checkout-cols h4 {
margin-bottom: 1.5rem;
}
.checkout-cols > div {
flex: 1;
margin: 1rem;
border: 1px solid #ddd;
background: rgba(255,255,255,0.3);
padding: 1.25rem 1rem;
}
.checkout-cols > div:first-child {
margin-left: 0;
}
.checkout-cols > div:last-child {
margin-right: 0;
}
.loading-bar {
position: absolute;
top: calc(50% - 3px);
left: calc(50% - 250px);
width: 500px;
height: 6px;
background-color: white;
overflow: hidden;
box-shadow: 0 1px 3px rgba(0,0,0,0.2)
}
.loading-bar::after {
content: '';
display: block;
width: 200px;
height: 100%;
background-color: #dc105a;
animation: progressbar-slide 1s infinite;
animation-timing-function: ease-in-out;
}
.form-field {
display: flex;
margin: 0.5rem;
}
.form-field > label {
width: 8rem;
}
.form-field > div {
flex-grow: 1;
}
.form-field input {
width: 100%;
}
.valid.modified:not([type=checkbox]) {
outline: 1px solid #26b050;
}
.invalid {
outline: 1px solid red;
}
.validation-message {
color: red;
}
#blazor-error-ui {
background: lightyellow;
bottom: 0;
box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2);
display: none;
left: 0;
padding: 0.6rem 1.25rem 0.7rem 1.25rem;
position: fixed;
width: 100%;
z-index: 1000;
}
#blazor-error-ui .dismiss {
cursor: pointer;
position: absolute;
right: 0.75rem;
top: 0.5rem;
}
@keyframes progressbar-slide {
0% {
transform: translateX(-200px);
}
70% {
transform: translateX(500px);
}
100% {
transform: translateX(500px);
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

@ -0,0 +1,77 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="14.566216mm"
height="12.915195mm"
viewBox="0 0 14.566216 12.915195"
version="1.1"
id="svg6773"
inkscape:version="0.92.3 (2405546, 2018-03-11)"
sodipodi:docname="bike.svg">
<defs
id="defs6767" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.35"
inkscape:cx="-495.3304"
inkscape:cy="-464.16476"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="3018"
inkscape:window-height="1744"
inkscape:window-x="665"
inkscape:window-y="3070"
inkscape:window-maximized="1" />
<metadata
id="metadata6770">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-14.639502,-13.107878)">
<path
d="m 24.422045,14.741241 c 0,0.80786 -0.65263,1.4605 -1.4605,1.4605 -0.80786,0 -1.46402,-0.65264 -1.46402,-1.4605 0,-0.80786 0.65616,-1.46403 1.46402,-1.46403 0.80787,0 1.4605,0.65617 1.4605,1.46403 z"
style="fill:none;stroke:#ffffff;stroke-width:0.33866665;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
id="path4889"
inkscape:connector-curvature="0" />
<path
d="m 19.426715,23.546573 c 0,1.273528 -1.03364,2.307167 -2.30717,2.307167 -1.27352,0 -2.30716,-1.033639 -2.30716,-2.307167 0,-1.273528 1.03364,-2.307166 2.30716,-2.307166 1.27353,0 2.30717,1.033638 2.30717,2.307166 z"
style="fill:none;stroke:#ffffff;stroke-width:0.33866665;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
id="path4891"
inkscape:connector-curvature="0" />
<path
d="m 29.036385,23.546573 c 0,1.273528 -1.03364,2.307167 -2.30717,2.307167 -1.27353,0 -2.30717,-1.033639 -2.30717,-2.307167 0,-1.273528 1.03364,-2.307166 2.30717,-2.307166 1.27353,0 2.30717,1.033638 2.30717,2.307166 z"
style="fill:none;stroke:#ffffff;stroke-width:0.33866665;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
id="path4893"
inkscape:connector-curvature="0" />
<path
d="m 22.587605,19.711881 -1.04422,-0.10231 0.98072,-1.70039 2.23661,1.21709 c -0.0212,0.0212 -0.0212,0.0423 -0.0423,0.0635 l -1.7533,0.98425 v -0.0423 c 0,-0.20814 -0.16934,-0.39864 -0.37748,-0.4198 z m 4.13808,0.88194 c 0.39864,0 0.77611,0.0847 1.10772,0.22931 0.21167,-0.37747 0.35631,-0.81845 0.35631,-1.27706 0,-1.38289 -1.12889,-2.5153 -2.50825,-2.5153 -0.2928,0 -0.56444,0.0635 -0.83608,0.14816 0.10583,0.20814 0.1658,0.43745 0.18697,0.69145 l -2.82222,-1.55222 c -0.0423,-0.0212 -0.0811,-0.0423 -0.12347,-0.0423 -0.48331,-0.18697 -1.02659,-0.0212 -1.29823,0.44097 l -1.46402,2.51531 c -0.0176,0.0423 -0.0388,0.10231 -0.06,0.14464 l -4.45558,-0.45861 v 0.83608 l 3.13619,0.96308 c 1.21356,0.35631 2.09198,1.488727 2.09198,2.808115 0,0.296334 -0.0423,0.567973 -0.127,0.839612 h 4.01461 c -0.0811,-0.271639 -0.12347,-0.543278 -0.12347,-0.839612 0,-1.612194 1.31586,-2.931585 2.92452,-2.931585 z"
style="fill:none;stroke:#ffffff;stroke-width:0.33866665;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
id="path4895"
inkscape:connector-curvature="0" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 43 KiB

@ -0,0 +1,106 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="12.864264mm"
height="12.890507mm"
viewBox="0 0 12.864264 12.890507"
version="1.1"
id="svg7666"
inkscape:version="0.92.3 (2405546, 2018-03-11)"
sodipodi:docname="pizza-slice.svg">
<defs
id="defs7660">
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath4885">
<path
d="M -3.9725e-5,540 H 960 V 1.2207e-4 L -4.3448e-5,6.1035e-5"
id="path4883"
inkscape:connector-curvature="0"
style="clip-rule:evenodd" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath4875">
<path
d="M -1.9395e-5,540 H 960 V 1.2207e-4 L -2.3118e-5,6.1035e-5"
id="path4873"
inkscape:connector-curvature="0"
style="clip-rule:evenodd" />
</clipPath>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.35"
inkscape:cx="-538.54671"
inkscape:cy="-372.78284"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="3018"
inkscape:window-height="1744"
inkscape:window-x="665"
inkscape:window-y="3070"
inkscape:window-maximized="1" />
<metadata
id="metadata7663">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-26.073816,-37.310701)">
<g
id="g4869"
transform="matrix(0.35277777,0,0,-0.35277777,-82.464891,223.70045)"
style="stroke:#ffffff;stroke-opacity:1">
<g
id="g4871"
clip-path="url(#clipPath4875)"
style="stroke:#ffffff;stroke-opacity:1">
<path
d="m 331.92,516.06 c 0,0 -0.03,0.03 0,0 -0.03,0.03 -0.03,0.03 -0.03,0.03 -3.14,3.13 -6.77,5.57 -10.84,7.23 0,0 0,0 0,0 l -12.47,-30.6 30.61,12.47 c 0,0 0,0 0,0 -1.7,4.1 -4.13,7.73 -7.27,10.87 z m -10.3,-1.7 c -1.13,1.13 -1.13,2.93 -0.03,4.03 1.1,1.1 2.9,1.1 4.03,-0.03 1.13,-1.14 1.13,-2.94 0.03,-4.04 -1.1,-1.1 -2.9,-1.1 -4.03,0.04 z m -8.27,-14.94 2.3,5.63 c 0.5,-0.16 0.97,-0.36 1.37,-0.76 1.2,-1.2 1.2,-3.14 0,-4.34 -1,-1 -2.5,-1.16 -3.67,-0.53 z m 12.14,5.07 c -1.14,1.13 -1.14,2.93 -0.04,4.03 1.1,1.1 2.9,1.1 4.04,-0.03 1.13,-1.14 1.13,-2.94 0.03,-4.04 -1.1,-1.1 -2.9,-1.1 -4.03,0.04 z"
style="fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
id="path4877"
inkscape:connector-curvature="0" />
</g>
</g>
<g
id="g4879"
transform="matrix(0.35277777,0,0,-0.35277777,-82.464891,223.70045)"
style="stroke:#ffffff;stroke-opacity:1">
<g
id="g4881"
clip-path="url(#clipPath4885)"
style="stroke:#ffffff;stroke-opacity:1">
<path
d="m 343.52,506.99 c -1.93,4.67 -4.73,8.87 -8.3,12.43 -3.6,3.6 -7.77,6.37 -12.37,8.31 -0.73,0.33 -1.56,-0.04 -1.83,-0.77 -0.27,-0.73 0.07,-1.53 0.8,-1.87 4.23,-1.76 8.07,-4.33 11.4,-7.67 3.34,-3.33 5.9,-7.16 7.7,-11.5 0.07,-0.2 0.2,-0.33 0.34,-0.47 0.4,-0.4 1,-0.53 1.53,-0.33 0.7,0.3 1.03,1.17 0.73,1.87 z"
style="fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
id="path4887"
inkscape:connector-curvature="0" />
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 89 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

@ -0,0 +1,72 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="15.113004mm"
height="15.113004mm"
viewBox="0 0 15.113004 15.113004"
version="1.1"
id="svg7709"
inkscape:version="0.92.3 (2405546, 2018-03-11)"
sodipodi:docname="user.svg">
<defs
id="defs7703" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.35"
inkscape:cx="-578.58286"
inkscape:cy="28.560012"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="3018"
inkscape:window-height="1744"
inkscape:window-x="665"
inkscape:window-y="3070"
inkscape:window-maximized="1" />
<metadata
id="metadata7706">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-98.276833,-141.27683)">
<path
d="m 98.806,148.83333 c 0,-3.88055 3.14678,-7.02733 7.02733,-7.02733 3.88056,0 7.02734,3.14678 7.02734,7.02733 0,3.88056 -3.14678,7.02734 -7.02734,7.02734 -3.88055,0 -7.02733,-3.14678 -7.02733,-7.02734 z"
style="fill:none;stroke:#ffffff;stroke-width:1.05833328;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
id="path4913"
inkscape:connector-curvature="0" />
<path
d="m 108.23222,147.28111 c 0,1.2947 -1.04775,2.34245 -2.34244,2.34245 -1.29117,0 -2.33892,-1.04775 -2.33892,-2.34245 0,-1.29117 1.04775,-2.33892 2.33892,-2.33892 1.29469,0 2.34244,1.04775 2.34244,2.33892 z"
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.35277775"
id="path4915"
inkscape:connector-curvature="0" />
<path
d="m 110.51117,153.92392 0.0847,-1.66864 c 0,-0.35278 -0.17639,-0.70203 -0.46919,-0.93839 -0.64206,-0.52564 -1.4605,-0.87842 -2.27895,-1.11125 -0.58561,-0.17639 -1.22766,-0.29281 -1.92969,-0.29281 -0.64206,0 -1.28764,0.11642 -1.92969,0.29281 -0.81845,0.23283 -1.63689,0.64558 -2.27895,1.11125 -0.2928,0.23636 -0.46919,0.58561 -0.46919,0.93839 v 1.73214 c 1.46755,0.40569 0.98777,1.64747 4.70605,1.54869 4.36034,-0.25753 2.94217,-1.18533 4.56495,-1.61219 z"
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.35277775"
id="path4917"
inkscape:connector-curvature="0" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.1 KiB

Loading…
Cancel
Save