Saving
5
Components/ActionBar.razor
Normal file
@ -0,0 +1,5 @@
|
||||
<h3>ActionBar</h3>
|
||||
|
||||
@code {
|
||||
|
||||
}
|
23
Components/DropdownButton.razor
Normal file
@ -0,0 +1,23 @@
|
||||
<div class="dropdown @CssDirection @(IsOpen ? "is-active" : default)">
|
||||
<div class="dropdown-trigger">
|
||||
@DropdownTrigger
|
||||
</div>
|
||||
<div class="dropdown-menu min-w-full pt-2" id="dropdown-menu6" role="menu">
|
||||
<div class="dropdown-content text-right background neomorph is-nxsmall rounded-lg">
|
||||
@DropdownContent
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@code {
|
||||
[Parameter] public RenderFragment DropdownTrigger { get; set; }
|
||||
[Parameter] public RenderFragment DropdownContent { get; set; }
|
||||
[Parameter] public bool IsOpen { get; set; } = false;
|
||||
[Parameter] public string CssDirection { get; set; } = "is-right";
|
||||
|
||||
void OpenCloseOptions()
|
||||
{
|
||||
IsOpen = !IsOpen;
|
||||
}
|
||||
|
||||
}
|
7
Components/MessageUpsertForm.razor
Normal file
@ -0,0 +1,7 @@
|
||||
<EditForm Model="">
|
||||
|
||||
</EditForm>
|
||||
|
||||
@code {
|
||||
|
||||
}
|
14
Extensions/CustomAuthenticationMessageHandler.cs
Normal file
@ -0,0 +1,14 @@
|
||||
using Microsoft.AspNetCore.Components;
|
||||
using Microsoft.AspNetCore.Components.WebAssembly.Authentication;
|
||||
|
||||
namespace decePubClient.Extensions
|
||||
{
|
||||
public class CustomAuthenticationMessageHandler : AuthorizationMessageHandler
|
||||
{
|
||||
public CustomAuthenticationMessageHandler(IAccessTokenProvider provider, NavigationManager navigation)
|
||||
: base(provider, navigation)
|
||||
{
|
||||
ConfigureHandler(new string[] { "https://demo.identityserver.io" });
|
||||
}
|
||||
}
|
||||
}
|
6
Extensions/GenericExtensions.cs
Normal file
@ -0,0 +1,6 @@
|
||||
namespace decePubClient.Extensions;
|
||||
|
||||
public class GenericExtensions
|
||||
{
|
||||
|
||||
}
|
1
Helpers/Faker.cs
Normal file
@ -0,0 +1 @@
|
||||
|
106
Helpers/SUtility.cs
Normal file
@ -0,0 +1,106 @@
|
||||
using collAnon.Shared;
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Net.Mail;
|
||||
using System.Text.Json;
|
||||
|
||||
namespace collAnon.Client.Helpers
|
||||
{
|
||||
public static class SUtility
|
||||
{
|
||||
public static T IfTrueThen<T>(bool conditionIsTrue, T ifTrue, T ifFalse = default)
|
||||
{
|
||||
if (conditionIsTrue)
|
||||
return ifTrue;
|
||||
else
|
||||
return ifFalse;
|
||||
}
|
||||
|
||||
public static bool TimeBetween(this DateTime datetime, TimeSpan start, TimeSpan end)
|
||||
{
|
||||
// convert datetime to a TimeSpan
|
||||
var now = datetime.TimeOfDay;
|
||||
// see if start comes before end
|
||||
if (start < end)
|
||||
return start <= now && now <= end;
|
||||
// start is after end, so do the inverse comparison
|
||||
return !(end < now && now < start);
|
||||
}
|
||||
|
||||
public static bool CacheHasExpired(long? lastTimeCacheTimeTicks)
|
||||
{
|
||||
if (!lastTimeCacheTimeTicks.HasValue) return true;
|
||||
return (DateTime.Now.Ticks - lastTimeCacheTimeTicks.Value) > VConstants.CacheExpirationPeriod.Ticks;
|
||||
}
|
||||
|
||||
public static string GetFileIcon(string fileName)
|
||||
{
|
||||
switch (Path.GetExtension(fileName))
|
||||
{
|
||||
case ".odp":
|
||||
case ".pptx":
|
||||
return "file-powerpoint";
|
||||
|
||||
case ".ods":
|
||||
case ".xlsx":
|
||||
return "file-excel";
|
||||
|
||||
case ".odt":
|
||||
case ".docx":
|
||||
return "file-word";
|
||||
|
||||
case ".pdf":
|
||||
return "file-pdf";
|
||||
|
||||
case ".jpg":
|
||||
case ".jpeg":
|
||||
case ".png":
|
||||
return "file-image";
|
||||
|
||||
default:
|
||||
return "file";
|
||||
}
|
||||
}
|
||||
|
||||
public static string GetMissingMimeType(string fileName)
|
||||
{
|
||||
switch (Path.GetExtension(fileName))
|
||||
{
|
||||
case ".docx":
|
||||
return "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
|
||||
|
||||
case ".xlsx":
|
||||
return "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
|
||||
|
||||
default:
|
||||
return string.Empty;
|
||||
}
|
||||
}
|
||||
|
||||
public static bool IsValidEmail(string email)
|
||||
{
|
||||
try
|
||||
{
|
||||
var addr = new MailAddress(email);
|
||||
return addr.Address == email;
|
||||
}
|
||||
catch
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public static string GetQrCodeBase64(string base64String) => $"data:image/png;base64,{base64String}";
|
||||
|
||||
public static int GetRand()
|
||||
{
|
||||
var random = new Random(DateTime.Now.Millisecond);
|
||||
return random.Next(0, random.Next(10, 1000));
|
||||
}
|
||||
|
||||
public static T Deserialize<T>(string value)
|
||||
{
|
||||
return JsonSerializer.Deserialize<T>(value, new JsonSerializerOptions { PropertyNamingPolicy = JsonNamingPolicy.CamelCase });
|
||||
}
|
||||
}
|
||||
}
|
5
LayerComponents/CascadingState.razor
Normal file
@ -0,0 +1,5 @@
|
||||
<h3>CascadingState</h3>
|
||||
|
||||
@code {
|
||||
|
||||
}
|
6
Models/ActionBarFilter.cs
Normal file
@ -0,0 +1,6 @@
|
||||
namespace decePubClient.Models;
|
||||
|
||||
public class ActionBarFilter
|
||||
{
|
||||
|
||||
}
|
22
Models/AuthData.cs
Normal file
@ -0,0 +1,22 @@
|
||||
namespace decePubClient.Models
|
||||
{
|
||||
public class AuthData
|
||||
{
|
||||
public string Token { get; set; }
|
||||
public long? TokenExpiration { get; set; }
|
||||
public string CurrentLanguageCode { get; set; } = "en";
|
||||
public User User { get; set; }
|
||||
|
||||
//public bool UserHasPolicies(params string[] policies)
|
||||
//{
|
||||
// var hasAllPolicies = true;
|
||||
// foreach (var policy in policies)
|
||||
// if (!(User?.Policies?.Any(p => p == policy) ?? false))
|
||||
// {
|
||||
// hasAllPolicies = false;
|
||||
// break;
|
||||
// }
|
||||
// return hasAllPolicies;
|
||||
//}
|
||||
}
|
||||
}
|
39
Models/ClientLogs.cs
Normal file
@ -0,0 +1,39 @@
|
||||
namespace decePubClient.Models
|
||||
{
|
||||
public class ClientLogs
|
||||
{
|
||||
public long Id { get; set; }
|
||||
public string Where { get; set; }
|
||||
public string WarningMessage { get; set; }
|
||||
public ClientLogException Exception { get; set; }
|
||||
public DateTime TimeStamp { get; set; } = DateTime.Now;
|
||||
public string ErrorMessage()
|
||||
{
|
||||
if (Exception.InnerExceptionMessage != null)
|
||||
{
|
||||
return @$"<b>Type</b>: {Exception.Type ?? "N/A"} <b>HelpLink</b>: {Exception.HelpLink ?? "N/A"} <b>HResult</b>: {Exception.HResult ?? "N/A"}<br>
|
||||
<b>Source</b>: {Exception.Source ?? "N/A"} <b>StackTrace</b>: {Exception.StackTrace ?? "N/A"} <b>MemberName</b>: {Exception.TargetSiteName ?? "N/A"}<br>
|
||||
<b>Message</b>: {Exception.Message ?? "N/A"}<br>
|
||||
<b>InnerExceptionMessage</b>:{Exception.InnerExceptionMessage ?? "N/A"}";
|
||||
}
|
||||
else
|
||||
{
|
||||
return @$"<b>Type</b>: {Exception.Type ?? "N/A"} <b>HelpLink</b>: {Exception.HelpLink ?? "N/A"} <b>HResult</b>: {Exception.HResult ?? "N/A"}<br>
|
||||
<b>Source</b>: {Exception.Source ?? "N/A"} <b>StackTrace</b>: {Exception.StackTrace ?? "N/A"} <b>MemberName</b>: {Exception.TargetSiteName ?? "N/A"}<br>
|
||||
<b>Message</b>: {Exception.Message ?? "N/A"}";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class ClientLogException
|
||||
{
|
||||
public string Type { get; set; }
|
||||
public string HelpLink { get; set; }
|
||||
public string HResult { get; set; }
|
||||
public string Source { get; set; }
|
||||
public string StackTrace { get; set; }
|
||||
public string TargetSiteName { get; set; }
|
||||
public string Message { get; set; }
|
||||
public string InnerExceptionMessage { get; set; }
|
||||
}
|
||||
}
|
13
Models/CustomIPrincipal.cs
Normal file
@ -0,0 +1,13 @@
|
||||
using System.Security.Principal;
|
||||
|
||||
namespace decePubClient.Models
|
||||
{
|
||||
public interface CustomIPrincipal : IPrincipal
|
||||
{
|
||||
string UserId { get; set; }
|
||||
string UserName { get; set; }
|
||||
string DisplayName { get; set; }
|
||||
string PictureUrl { get; set; }
|
||||
string ProfileUrl { get; set; }
|
||||
}
|
||||
}
|
20
Models/CustomPrincipal.cs
Normal file
@ -0,0 +1,20 @@
|
||||
using System.Security.Principal;
|
||||
|
||||
namespace decePubClient.Models
|
||||
{
|
||||
public class CustomPrincipal : CustomIPrincipal
|
||||
{
|
||||
public string UserId { get; set; }
|
||||
public string UserName { get; set; }
|
||||
public string DisplayName { get; set; }
|
||||
public string PictureUrl { get; set; }
|
||||
public string ProfileUrl { get; set; }
|
||||
public bool IsAdmin { get; set; } = false;
|
||||
public IIdentity Identity { get; }
|
||||
|
||||
public CustomPrincipal(string userName, string authType) =>
|
||||
Identity = new GenericIdentity(userName, authType);
|
||||
|
||||
public bool IsInRole(string role) => false;
|
||||
}
|
||||
}
|
6
Models/MessageForm.cs
Normal file
@ -0,0 +1,6 @@
|
||||
namespace decePubClient.Models;
|
||||
|
||||
public class MessageForm
|
||||
{
|
||||
|
||||
}
|
16
Models/PublicCacheData.cs
Normal file
@ -0,0 +1,16 @@
|
||||
using System.Collections.ObjectModel;
|
||||
|
||||
namespace decePubClient.Models
|
||||
{
|
||||
public class PublicCacheData
|
||||
{
|
||||
public IReadOnlyList<ViewLanguage> Languages { get; set; } = new List<ViewLanguage>();
|
||||
public string LastPage { get; set; }
|
||||
public IReadOnlyDictionary<string, string> Policies { get; set; } = new ReadOnlyDictionary<string, string>(new Dictionary<string, string>());
|
||||
|
||||
public string CurrentLanguageCode { get; set; } = "en-GB";
|
||||
public bool NativeNotificationsEnabled { get; set; } = false;
|
||||
public short ThemeIndexColour { get; set; } = 25;
|
||||
public bool ThemeIsDarkMode { get; set; } = false;
|
||||
}
|
||||
}
|
6
Models/Types/ContentType.cs
Normal file
@ -0,0 +1,6 @@
|
||||
namespace decePubClient.Models.Types;
|
||||
|
||||
public class ContentType
|
||||
{
|
||||
|
||||
}
|
10
Models/Types/MediaType.cs
Normal file
@ -0,0 +1,10 @@
|
||||
namespace decePubClient.Models.Types
|
||||
{
|
||||
public enum MediaType
|
||||
{
|
||||
Images,
|
||||
Video,
|
||||
Audio,
|
||||
Documents
|
||||
}
|
||||
}
|
3
Models/Types/TimeSortingType.cs
Normal file
@ -0,0 +1,3 @@
|
||||
namespace decePubClient.Models.Types;
|
||||
|
||||
public enum TimeSortingType { }
|
9
Models/Types/TimelineType.cs
Normal file
@ -0,0 +1,9 @@
|
||||
namespace decePubClient.Models.Types
|
||||
{
|
||||
public enum TimelineType
|
||||
{
|
||||
Home,
|
||||
Local,
|
||||
Federation
|
||||
}
|
||||
}
|
6
Models/UploadMedia.cs
Normal file
@ -0,0 +1,6 @@
|
||||
namespace decePubClient.Models;
|
||||
|
||||
public class UploadMedia
|
||||
{
|
||||
|
||||
}
|
8
Models/ViewLanguage.cs
Normal file
@ -0,0 +1,8 @@
|
||||
namespace decePubClient.Models
|
||||
{
|
||||
public class ViewLanguage
|
||||
{
|
||||
public string Name { get; set; }
|
||||
public string International2Code { get; set; }
|
||||
}
|
||||
}
|
12
Pages/Administration.razor
Normal file
@ -0,0 +1,12 @@
|
||||
@page "/administration"
|
||||
|
||||
<section class="block relative w-full h-full neomorphInset is-nxsmall rounded-xl">
|
||||
|
||||
<div class="flex flex-col space-y-4 p-4 md:p-5 w-full h-full absolute overflow-y-auto">
|
||||
</div>
|
||||
|
||||
</section>
|
||||
|
||||
@code {
|
||||
|
||||
}
|
42
Pages/ExpandMessage.razor
Normal file
@ -0,0 +1,42 @@
|
||||
@page "/expand/{messageId}"
|
||||
<Title>@Localizer</Title>
|
||||
|
||||
<section class="block relative w-full h-full neomorphInset is-nxsmall rounded-xl">
|
||||
|
||||
<div class="flex flex-col space-y-4 p-4 md:p-5 w-full h-full absolute overflow-y-auto">
|
||||
|
||||
</div>
|
||||
|
||||
</section>
|
||||
|
||||
|
||||
@code {
|
||||
[CascadingParameter] IStringLocalizer<AllStrings> Localizer { get; set; }
|
||||
[Inject] NavigationManager Navigation { get; set; }
|
||||
[Inject] IStorage DbStorage { get; set; }
|
||||
[SupplyParameterFromQuery] string messageId { get; set; }
|
||||
|
||||
List<Message> Messages { get; set; } = new();
|
||||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
if (messageId is { Length: 0 })
|
||||
{
|
||||
Navigation.NavigateTo("/");
|
||||
return;
|
||||
}
|
||||
|
||||
var currentMessage = await DbStorage.GetMessage(messageId);
|
||||
|
||||
var messages = await DbStorage.GetMessages();
|
||||
|
||||
if (currentMessage.RootMessageId is { Length: > 0 })
|
||||
Messages = messages.Where(m => m.RootMessageId == currentMessage.RootMessageId)
|
||||
.OrderByDescending(m => m.CreatedAt)
|
||||
.ToList();
|
||||
else
|
||||
Messages = messages.Where(m => m.RootMessageId == messageId)
|
||||
.OrderByDescending(m => m.CreatedAt)
|
||||
.ToList();
|
||||
}
|
||||
}
|
6
Resources/AllStrings.cs
Normal file
@ -0,0 +1,6 @@
|
||||
namespace decePubClient.Resources;
|
||||
|
||||
public class AllStrings
|
||||
{
|
||||
|
||||
}
|
21
Resources/AllStrings.resx
Normal file
@ -0,0 +1,21 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<root>
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>1.3</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
</root>
|
6
Resources/ErrorMessages.cs
Normal file
@ -0,0 +1,6 @@
|
||||
namespace decePubClient.Resources;
|
||||
|
||||
public class ErrorMessages
|
||||
{
|
||||
|
||||
}
|
21
Resources/ErrorMessages.resx
Normal file
@ -0,0 +1,21 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<root>
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>1.3</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
</root>
|
9
Resources/ValidationNames.cs
Normal file
@ -0,0 +1,9 @@
|
||||
namespace decePubClient.Resources
|
||||
{
|
||||
public static class ValidationNames
|
||||
{
|
||||
public const string Required = "Required";
|
||||
public const string RequiredWithName = "RequiredWithName";
|
||||
public const string MaxLength = "MaxLength";
|
||||
}
|
||||
}
|
0
SCSS/base.scss
Normal file
0
SCSS/main.scss
Normal file
58
SCSS/mixins.scss
Normal file
@ -0,0 +1,58 @@
|
||||
//MEDIA QUERY MANAGER
|
||||
|
||||
/*$breakpoint argument choices:
|
||||
- phone
|
||||
- tab-port
|
||||
- tab-land
|
||||
- desk
|
||||
- big-desktop
|
||||
*/
|
||||
|
||||
@mixin MediaQuery($breakpoint) {
|
||||
// max-width:768px;
|
||||
@if $breakpoint==phone {
|
||||
@media screen and (max-width: 768px) {
|
||||
@content
|
||||
}
|
||||
}
|
||||
|
||||
@if $breakpoint==tab-p {
|
||||
// min-width:768px;
|
||||
// max-width:900px;
|
||||
@media screen and (min-width: 768px) and (max-width: 900px) {
|
||||
@content
|
||||
}
|
||||
}
|
||||
|
||||
@if $breakpoint==tab-l {
|
||||
// min-width:901px;
|
||||
// max-width:1200px;
|
||||
@media screen and (min-width: 901px) and (max-width: 1200px) {
|
||||
@content
|
||||
}
|
||||
}
|
||||
|
||||
@if $breakpoint==laptop {
|
||||
// min-width:1201px;
|
||||
// max-width:1366px;
|
||||
@media screen and (min-width: 1201px) and (max-width: 1366px) {
|
||||
@content
|
||||
}
|
||||
}
|
||||
|
||||
@if $breakpoint==desk {
|
||||
// min-width:1201px;
|
||||
// max-width:1800px;
|
||||
@media screen and (min-width: 1201px) and (max-width: 1800px) {
|
||||
@content
|
||||
}
|
||||
}
|
||||
|
||||
@if $breakpoint==big-d {
|
||||
// min-width:1801px;
|
||||
// max-width:4000px;
|
||||
@media screen and (min-width: 1801px) and (max-width: 4000px) {
|
||||
@content
|
||||
}
|
||||
}
|
||||
}
|
0
SCSS/neomorph.scss
Normal file
0
SCSS/variables.scss
Normal file
6
Services/AppStatusService.cs
Normal file
@ -0,0 +1,6 @@
|
||||
namespace decePubClient.Services;
|
||||
|
||||
public class AppStatusService
|
||||
{
|
||||
|
||||
}
|
196
Services/IHttpService.cs
Normal file
@ -0,0 +1,196 @@
|
||||
using Blazored.LocalStorage;
|
||||
using System.Globalization;
|
||||
using System.Net.Http.Json;
|
||||
using System.Net;
|
||||
using decePubClient.Models;
|
||||
|
||||
namespace decePubClient.Services
|
||||
{
|
||||
public interface IHttpService
|
||||
{
|
||||
Task<HttpResponseMessage> Get(string uri, object payload = default, string?[] queryParams = default);
|
||||
|
||||
Task<HttpResponseMessage> GetAnon(string uri, object payload = default, string?[] queryParams = default);
|
||||
|
||||
Task<HttpResponseMessage> Post(string uri, object payload = default);
|
||||
|
||||
Task<HttpResponseMessage> PostAnon(string uri, object payload = default);
|
||||
|
||||
Task<HttpResponseMessage> Delete(string uri, string?[] queryParams = default, object payload = default);
|
||||
}
|
||||
|
||||
public class HttpService : IHttpService
|
||||
{
|
||||
readonly IHttpClientFactory HttpClientFactory;
|
||||
readonly TokenAuthStateProvider AuthStateProvider;
|
||||
readonly ILogger<HttpService> Logger;
|
||||
readonly ILocalStorageService Storage;
|
||||
readonly IStorage DbStorage;
|
||||
|
||||
public HttpService(
|
||||
IHttpClientFactory httpClientFactory,
|
||||
TokenAuthStateProvider authStateProvider,
|
||||
ILogger<HttpService> logger,
|
||||
ILocalStorageService storage,
|
||||
IStorage dbStorage)
|
||||
{
|
||||
HttpClientFactory = httpClientFactory;
|
||||
AuthStateProvider = authStateProvider;
|
||||
Logger = logger;
|
||||
Storage = storage;
|
||||
DbStorage = dbStorage;
|
||||
}
|
||||
|
||||
public async Task<HttpResponseMessage> Get(string uri, object payload = default, string?[] queryParams = default)
|
||||
{
|
||||
try
|
||||
{
|
||||
uri = $"{CultureInfo.DefaultThreadCurrentCulture.TwoLetterISOLanguageName}/{uri}";
|
||||
var request = default(HttpRequestMessage);
|
||||
if (queryParams != null)
|
||||
request = new(HttpMethod.Get, string.Join('?', uri, string.Join('&', queryParams)));
|
||||
else
|
||||
request = new(HttpMethod.Get, uri);
|
||||
if (payload != null)
|
||||
request.Content = JsonContent.Create(payload);
|
||||
return await SendRequest(request);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logger.LogError(ex, $"{nameof(Get)}:{uri}");
|
||||
await DbStorage.AddLog(ex, $"{nameof(Get)}:{uri}");
|
||||
return new(HttpStatusCode.ServiceUnavailable);
|
||||
}
|
||||
}
|
||||
|
||||
public async Task<HttpResponseMessage> Post(string uri, object payload = default)
|
||||
{
|
||||
try
|
||||
{
|
||||
uri = $"{CultureInfo.DefaultThreadCurrentCulture.TwoLetterISOLanguageName}/{uri}";
|
||||
var request = new HttpRequestMessage(HttpMethod.Post, uri)
|
||||
{
|
||||
Content = JsonContent.Create(payload)
|
||||
};
|
||||
return await SendRequest(request);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logger.LogError(ex, $"{nameof(Post)}:{uri}");
|
||||
await DbStorage.AddLog(ex, $"{nameof(Post)}:{uri}");
|
||||
return new(HttpStatusCode.ServiceUnavailable);
|
||||
}
|
||||
}
|
||||
|
||||
public async Task<HttpResponseMessage> GetAnon(string uri, object payload = default, string?[] queryParams = default)
|
||||
{
|
||||
try
|
||||
{
|
||||
uri = $"{CultureInfo.DefaultThreadCurrentCulture.TwoLetterISOLanguageName}/{uri}";
|
||||
var request = default(HttpRequestMessage);
|
||||
if (queryParams != null)
|
||||
request = new(HttpMethod.Get, string.Join('?', uri, string.Join('&', queryParams)));
|
||||
else
|
||||
request = new(HttpMethod.Get, uri);
|
||||
if (payload != null)
|
||||
request.Content = JsonContent.Create(payload);
|
||||
return await SendAnonRequest(request);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logger.LogError(ex, $"{nameof(GetAnon)}:{uri}");
|
||||
await DbStorage.AddLog(ex, $"{nameof(GetAnon)}:{uri}");
|
||||
return new(HttpStatusCode.ServiceUnavailable);
|
||||
}
|
||||
}
|
||||
|
||||
public async Task<HttpResponseMessage> PostAnon(string uri, object payload = default)
|
||||
{
|
||||
try
|
||||
{
|
||||
uri = $"{CultureInfo.DefaultThreadCurrentCulture.TwoLetterISOLanguageName}/{uri}";
|
||||
var request = new HttpRequestMessage(HttpMethod.Post, uri)
|
||||
{
|
||||
Content = JsonContent.Create(payload)
|
||||
};
|
||||
return await SendAnonRequest(request);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logger.LogError(ex, $"{nameof(PostAnon)}:{uri}");
|
||||
await DbStorage.AddLog(ex, $"{nameof(PostAnon)}:{uri}");
|
||||
return new(HttpStatusCode.ServiceUnavailable);
|
||||
}
|
||||
}
|
||||
|
||||
public async Task<HttpResponseMessage> Delete(string uri, string?[] queryParams = default, object payload = default)
|
||||
{
|
||||
try
|
||||
{
|
||||
uri = $"{CultureInfo.DefaultThreadCurrentCulture.TwoLetterISOLanguageName}/{uri}";
|
||||
var request = default(HttpRequestMessage);
|
||||
if (queryParams != null)
|
||||
request = new(HttpMethod.Delete, string.Join('?', uri, string.Join('&', queryParams)));
|
||||
else
|
||||
request = new(HttpMethod.Delete, uri);
|
||||
if (payload != null)
|
||||
request.Content = JsonContent.Create(payload);
|
||||
return await SendRequest(request);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logger.LogError(ex, $"{nameof(Delete)}:{uri}");
|
||||
await DbStorage.AddLog(ex, $"{nameof(Delete)}:{uri}");
|
||||
return new(HttpStatusCode.ServiceUnavailable);
|
||||
}
|
||||
}
|
||||
|
||||
// helper methods
|
||||
async Task<HttpResponseMessage> SendRequest(HttpRequestMessage request)
|
||||
{
|
||||
try
|
||||
{
|
||||
var authData = await Storage.GetItemAsync<AuthData>(nameof(AuthData));
|
||||
var isApiUrl = !request.RequestUri?.IsAbsoluteUri;
|
||||
if (isApiUrl.HasValue && isApiUrl.Value)
|
||||
request.Headers.Authorization = new("Bearer", authData.Token);
|
||||
|
||||
var response = await HttpClientFactory.CreateClient().SendAsync(request);
|
||||
if (response.StatusCode is HttpStatusCode.Unauthorized or HttpStatusCode.Forbidden)
|
||||
{
|
||||
Logger.LogWarning($"{nameof(SendRequest)}:401/403:{request.RequestUri?.OriginalString}:{await response.Content.ReadAsStringAsync()}");
|
||||
await DbStorage.AddLog($"{nameof(SendRequest)}:401/403:{request.RequestUri?.OriginalString}:{await response.Content.ReadAsStringAsync()}", $"{nameof(SendRequest)}:{request.RequestUri?.OriginalString}");
|
||||
await AuthStateProvider.LogoutAsync();
|
||||
}
|
||||
|
||||
return response;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logger.LogError(ex, $"{nameof(SendRequest)}:{request.RequestUri?.OriginalString}");
|
||||
await DbStorage.AddLog(ex, $"{nameof(SendRequest)}:{request.RequestUri?.OriginalString}");
|
||||
return new(HttpStatusCode.ServiceUnavailable);
|
||||
}
|
||||
}
|
||||
|
||||
async Task<HttpResponseMessage> SendAnonRequest(HttpRequestMessage request)
|
||||
{
|
||||
try
|
||||
{
|
||||
var authData = await Storage.GetItemAsync<AuthData>(nameof(AuthData));
|
||||
if (!string.IsNullOrEmpty(authData?.Token))
|
||||
request.Headers.Authorization = new("Bearer", authData.Token);
|
||||
|
||||
var response = await HttpClientFactory.CreateClient().SendAsync(request);
|
||||
|
||||
return response;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logger.LogError(ex, $"{nameof(SendAnonRequest)}:{request.RequestUri?.OriginalString}");
|
||||
await DbStorage.AddLog(ex, $"{nameof(SendAnonRequest)}:{request.RequestUri?.OriginalString}");
|
||||
return new(HttpStatusCode.ServiceUnavailable);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
10
Services/MessagesService.cs
Normal file
@ -0,0 +1,10 @@
|
||||
namespace decePubClient.Services
|
||||
{
|
||||
public class MessagesService
|
||||
{
|
||||
public MessagesService()
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
}
|
89
Services/TokenAuthStateProvider.cs
Normal file
@ -0,0 +1,89 @@
|
||||
using Blazored.LocalStorage;
|
||||
using decePubClient.Models;
|
||||
using Microsoft.AspNetCore.Components.Authorization;
|
||||
using System.Security.Claims;
|
||||
using System.Text.Json;
|
||||
|
||||
namespace decePubClient.Services
|
||||
{
|
||||
public class TokenAuthStateProvider : AuthenticationStateProvider
|
||||
{
|
||||
readonly ILocalStorageService Storage;
|
||||
readonly IStorage DbStorage;
|
||||
readonly ILogger<TokenAuthStateProvider> Logger;
|
||||
AuthData AuthData { get; set; }
|
||||
|
||||
public TokenAuthStateProvider(ILocalStorageService storage,
|
||||
IStorage dbStorage,
|
||||
ILogger<TokenAuthStateProvider> logger)
|
||||
{
|
||||
Storage = storage;
|
||||
DbStorage = dbStorage;
|
||||
Logger = logger;
|
||||
}
|
||||
|
||||
public void SetToken(/*string token, long expirationTicks = default*/)
|
||||
{
|
||||
//AuthData = await Storage.GetItemAsync<AuthData>(nameof(AuthData));
|
||||
//if (string.IsNullOrEmpty(token))
|
||||
//{
|
||||
// Logger.LogInformation($"set null({nameof(SetToken)})");
|
||||
// AuthData.Token = null;
|
||||
// AuthData.TokenExpiration = null;
|
||||
//}
|
||||
//else
|
||||
//{
|
||||
// AuthData.Token = token;
|
||||
// AuthData.TokenExpiration = expirationTicks;
|
||||
//}
|
||||
//await Storage.SetItemAsync(nameof(AuthData), AuthData);
|
||||
|
||||
NotifyAuthenticationStateChanged(GetAuthenticationStateAsync());
|
||||
}
|
||||
|
||||
public async ValueTask<bool> IsAuthenticatedAsync()
|
||||
{
|
||||
AuthData = await Storage.GetItemAsync<AuthData>(nameof(AuthData));
|
||||
if (AuthData is null)
|
||||
{
|
||||
AuthData = new();
|
||||
await Storage.SetItemAsync(nameof(AuthData), AuthData);
|
||||
}
|
||||
return AuthData.Token != null &&
|
||||
AuthData.TokenExpiration.HasValue &&
|
||||
AuthData.TokenExpiration.Value > DateTime.UtcNow.Ticks;
|
||||
}
|
||||
|
||||
public async Task LogoutAsync(bool deleteDb = false)
|
||||
{
|
||||
Logger.LogInformation($"set null({nameof(LogoutAsync)})");
|
||||
//await Storage.RemoveItemAsync(nameof(PrivateCacheData));
|
||||
await Storage.RemoveItemAsync(nameof(AuthData));
|
||||
if (deleteDb)
|
||||
await DbStorage.RemoveAll(includeClientLogs: true);
|
||||
|
||||
NotifyAuthenticationStateChanged(GetAuthenticationStateAsync());
|
||||
}
|
||||
|
||||
public override async Task<AuthenticationState> GetAuthenticationStateAsync()
|
||||
{
|
||||
AuthData = await Storage.GetItemAsync<AuthData>(nameof(AuthData));
|
||||
if (string.IsNullOrEmpty(AuthData?.Token))
|
||||
{
|
||||
Logger.LogInformation($"set null({nameof(GetAuthenticationStateAsync)})");
|
||||
return new(new());
|
||||
}
|
||||
var claims = new List<Claim>
|
||||
{
|
||||
new(ClaimTypes.UserData, JsonSerializer.Serialize(AuthData.User))
|
||||
};
|
||||
|
||||
//claims.Add(new(Policies.IsUser, (AuthData.User.Policies.Contains(Policies.IsUser)).ToString().ToLower()));
|
||||
//claims.Add(new(Policies.UserPlus, (AuthData.User.Policies.Contains(Policies.UserPlus)).ToString().ToLower()));
|
||||
//claims.Add(new(Policies.IsAdmin, (AuthData.User.Policies.Contains(Policies.IsAdmin)).ToString().ToLower()));
|
||||
|
||||
var identity = new ClaimsIdentity(claims, "jwt");
|
||||
return new(new(identity));
|
||||
}
|
||||
}
|
||||
}
|
3
bundleconfig.json
Normal file
@ -0,0 +1,3 @@
|
||||
{
|
||||
|
||||
}
|
1
bundleconfig.json.bindings
Normal file
@ -0,0 +1 @@
|
||||
///<binding AfterBuild='Clean output files, Update all files, Stylesheets, wwwroot/css/style.min.css' />
|
3
compilerconfig.json
Normal file
@ -0,0 +1,3 @@
|
||||
{
|
||||
|
||||
}
|
1
compilerconfig.json.bindings
Normal file
@ -0,0 +1 @@
|
||||
///<binding BeforeBuild='All files' />
|
2
decePubClient.sln.DotSettings
Normal file
@ -0,0 +1,2 @@
|
||||
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
|
||||
<s:Boolean x:Key="/Default/CodeEditing/SuppressUninitializedWarningFix/Enabled/@EntryValue">False</s:Boolean></wpf:ResourceDictionary>
|
904
package-lock.json
generated
Normal file
@ -0,0 +1,904 @@
|
||||
{
|
||||
"name": "decepubclient",
|
||||
"version": "1.0.0",
|
||||
"lockfileVersion": 1,
|
||||
"requires": true,
|
||||
"dependencies": {
|
||||
"@babel/code-frame": {
|
||||
"version": "7.16.7",
|
||||
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz",
|
||||
"integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==",
|
||||
"requires": {
|
||||
"@babel/highlight": "^7.16.7"
|
||||
}
|
||||
},
|
||||
"@babel/helper-validator-identifier": {
|
||||
"version": "7.16.7",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
|
||||
"integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw=="
|
||||
},
|
||||
"@babel/highlight": {
|
||||
"version": "7.16.10",
|
||||
"resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz",
|
||||
"integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==",
|
||||
"requires": {
|
||||
"@babel/helper-validator-identifier": "^7.16.7",
|
||||
"chalk": "^2.0.0",
|
||||
"js-tokens": "^4.0.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"ansi-styles": {
|
||||
"version": "3.2.1",
|
||||
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
|
||||
"integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
|
||||
"requires": {
|
||||
"color-convert": "^1.9.0"
|
||||
}
|
||||
},
|
||||
"chalk": {
|
||||
"version": "2.4.2",
|
||||
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
|
||||
"integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
|
||||
"requires": {
|
||||
"ansi-styles": "^3.2.1",
|
||||
"escape-string-regexp": "^1.0.5",
|
||||
"supports-color": "^5.3.0"
|
||||
}
|
||||
},
|
||||
"color-convert": {
|
||||
"version": "1.9.3",
|
||||
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
|
||||
"integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
|
||||
"requires": {
|
||||
"color-name": "1.1.3"
|
||||
}
|
||||
},
|
||||
"color-name": {
|
||||
"version": "1.1.3",
|
||||
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
|
||||
"integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
|
||||
},
|
||||
"has-flag": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
|
||||
"integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
|
||||
},
|
||||
"supports-color": {
|
||||
"version": "5.5.0",
|
||||
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
|
||||
"integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
|
||||
"requires": {
|
||||
"has-flag": "^3.0.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"@nodelib/fs.scandir": {
|
||||
"version": "2.1.5",
|
||||
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
|
||||
"integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
|
||||
"requires": {
|
||||
"@nodelib/fs.stat": "2.0.5",
|
||||
"run-parallel": "^1.1.9"
|
||||
}
|
||||
},
|
||||
"@nodelib/fs.stat": {
|
||||
"version": "2.0.5",
|
||||
"resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
|
||||
"integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="
|
||||
},
|
||||
"@nodelib/fs.walk": {
|
||||
"version": "1.2.8",
|
||||
"resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
|
||||
"integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
|
||||
"requires": {
|
||||
"@nodelib/fs.scandir": "2.1.5",
|
||||
"fastq": "^1.6.0"
|
||||
}
|
||||
},
|
||||
"@types/parse-json": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz",
|
||||
"integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA=="
|
||||
},
|
||||
"acorn": {
|
||||
"version": "7.4.1",
|
||||
"resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
|
||||
"integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A=="
|
||||
},
|
||||
"acorn-node": {
|
||||
"version": "1.8.2",
|
||||
"resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz",
|
||||
"integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==",
|
||||
"requires": {
|
||||
"acorn": "^7.0.0",
|
||||
"acorn-walk": "^7.0.0",
|
||||
"xtend": "^4.0.2"
|
||||
}
|
||||
},
|
||||
"acorn-walk": {
|
||||
"version": "7.2.0",
|
||||
"resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
|
||||
"integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA=="
|
||||
},
|
||||
"ansi-regex": {
|
||||
"version": "5.0.1",
|
||||
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
|
||||
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="
|
||||
},
|
||||
"ansi-styles": {
|
||||
"version": "4.3.0",
|
||||
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
|
||||
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
|
||||
"requires": {
|
||||
"color-convert": "^2.0.1"
|
||||
}
|
||||
},
|
||||
"anymatch": {
|
||||
"version": "3.1.2",
|
||||
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
|
||||
"integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
|
||||
"requires": {
|
||||
"normalize-path": "^3.0.0",
|
||||
"picomatch": "^2.0.4"
|
||||
}
|
||||
},
|
||||
"arg": {
|
||||
"version": "5.0.1",
|
||||
"resolved": "https://registry.npmjs.org/arg/-/arg-5.0.1.tgz",
|
||||
"integrity": "sha512-e0hDa9H2Z9AwFkk2qDlwhoMYE4eToKarchkQHovNdLTCYMHZHeRjI71crOh+dio4K6u1IcwubQqo79Ga4CyAQA=="
|
||||
},
|
||||
"array-union": {
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://registry.npmjs.org/array-union/-/array-union-3.0.1.tgz",
|
||||
"integrity": "sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw=="
|
||||
},
|
||||
"autoprefixer": {
|
||||
"version": "10.4.2",
|
||||
"resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.2.tgz",
|
||||
"integrity": "sha512-9fOPpHKuDW1w/0EKfRmVnxTDt8166MAnLI3mgZ1JCnhNtYWxcJ6Ud5CO/AVOZi/AvFa8DY9RTy3h3+tFBlrrdQ==",
|
||||
"requires": {
|
||||
"browserslist": "^4.19.1",
|
||||
"caniuse-lite": "^1.0.30001297",
|
||||
"fraction.js": "^4.1.2",
|
||||
"normalize-range": "^0.1.2",
|
||||
"picocolors": "^1.0.0",
|
||||
"postcss-value-parser": "^4.2.0"
|
||||
}
|
||||
},
|
||||
"binary-extensions": {
|
||||
"version": "2.2.0",
|
||||
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
|
||||
"integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA=="
|
||||
},
|
||||
"braces": {
|
||||
"version": "3.0.2",
|
||||
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
|
||||
"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
|
||||
"requires": {
|
||||
"fill-range": "^7.0.1"
|
||||
}
|
||||
},
|
||||
"browserslist": {
|
||||
"version": "4.19.1",
|
||||
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz",
|
||||
"integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==",
|
||||
"requires": {
|
||||
"caniuse-lite": "^1.0.30001286",
|
||||
"electron-to-chromium": "^1.4.17",
|
||||
"escalade": "^3.1.1",
|
||||
"node-releases": "^2.0.1",
|
||||
"picocolors": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"callsites": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
|
||||
"integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="
|
||||
},
|
||||
"camelcase-css": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
|
||||
"integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA=="
|
||||
},
|
||||
"caniuse-lite": {
|
||||
"version": "1.0.30001306",
|
||||
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001306.tgz",
|
||||
"integrity": "sha512-Wd1OuggRzg1rbnM5hv1wXs2VkxJH/AA+LuudlIqvZiCvivF+wJJe2mgBZC8gPMgI7D76PP5CTx8Luvaqc1V6OQ=="
|
||||
},
|
||||
"chalk": {
|
||||
"version": "4.1.2",
|
||||
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
|
||||
"integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
|
||||
"requires": {
|
||||
"ansi-styles": "^4.1.0",
|
||||
"supports-color": "^7.1.0"
|
||||
}
|
||||
},
|
||||
"chokidar": {
|
||||
"version": "3.5.3",
|
||||
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
|
||||
"integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
|
||||
"requires": {
|
||||
"anymatch": "~3.1.2",
|
||||
"braces": "~3.0.2",
|
||||
"fsevents": "~2.3.2",
|
||||
"glob-parent": "~5.1.2",
|
||||
"is-binary-path": "~2.1.0",
|
||||
"is-glob": "~4.0.1",
|
||||
"normalize-path": "~3.0.0",
|
||||
"readdirp": "~3.6.0"
|
||||
}
|
||||
},
|
||||
"cliui": {
|
||||
"version": "7.0.4",
|
||||
"resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
|
||||
"integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
|
||||
"requires": {
|
||||
"string-width": "^4.2.0",
|
||||
"strip-ansi": "^6.0.0",
|
||||
"wrap-ansi": "^7.0.0"
|
||||
}
|
||||
},
|
||||
"color-convert": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
|
||||
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
|
||||
"requires": {
|
||||
"color-name": "~1.1.4"
|
||||
}
|
||||
},
|
||||
"color-name": {
|
||||
"version": "1.1.4",
|
||||
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
|
||||
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
|
||||
},
|
||||
"cosmiconfig": {
|
||||
"version": "7.0.1",
|
||||
"resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz",
|
||||
"integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==",
|
||||
"requires": {
|
||||
"@types/parse-json": "^4.0.0",
|
||||
"import-fresh": "^3.2.1",
|
||||
"parse-json": "^5.0.0",
|
||||
"path-type": "^4.0.0",
|
||||
"yaml": "^1.10.0"
|
||||
}
|
||||
},
|
||||
"cssesc": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
|
||||
"integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg=="
|
||||
},
|
||||
"defined": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz",
|
||||
"integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM="
|
||||
},
|
||||
"dependency-graph": {
|
||||
"version": "0.11.0",
|
||||
"resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz",
|
||||
"integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg=="
|
||||
},
|
||||
"detective": {
|
||||
"version": "5.2.0",
|
||||
"resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz",
|
||||
"integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==",
|
||||
"requires": {
|
||||
"acorn-node": "^1.6.1",
|
||||
"defined": "^1.0.0",
|
||||
"minimist": "^1.1.1"
|
||||
}
|
||||
},
|
||||
"didyoumean": {
|
||||
"version": "1.2.2",
|
||||
"resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
|
||||
"integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw=="
|
||||
},
|
||||
"dir-glob": {
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
|
||||
"integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
|
||||
"requires": {
|
||||
"path-type": "^4.0.0"
|
||||
}
|
||||
},
|
||||
"dlv": {
|
||||
"version": "1.1.3",
|
||||
"resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
|
||||
"integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA=="
|
||||
},
|
||||
"electron-to-chromium": {
|
||||
"version": "1.4.63",
|
||||
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.63.tgz",
|
||||
"integrity": "sha512-e0PX/LRJPFRU4kzJKLvTobxyFdnANCvcoDCe8XcyTqP58nTWIwdsHvXLIl1RkB39X5yaosLaroMASWB0oIsgCA=="
|
||||
},
|
||||
"emoji-regex": {
|
||||
"version": "8.0.0",
|
||||
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
|
||||
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
|
||||
},
|
||||
"error-ex": {
|
||||
"version": "1.3.2",
|
||||
"resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
|
||||
"integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
|
||||
"requires": {
|
||||
"is-arrayish": "^0.2.1"
|
||||
}
|
||||
},
|
||||
"escalade": {
|
||||
"version": "3.1.1",
|
||||
"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
|
||||
"integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw=="
|
||||
},
|
||||
"escape-string-regexp": {
|
||||
"version": "1.0.5",
|
||||
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
|
||||
"integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
|
||||
},
|
||||
"fast-glob": {
|
||||
"version": "3.2.11",
|
||||
"resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz",
|
||||
"integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==",
|
||||
"requires": {
|
||||
"@nodelib/fs.stat": "^2.0.2",
|
||||
"@nodelib/fs.walk": "^1.2.3",
|
||||
"glob-parent": "^5.1.2",
|
||||
"merge2": "^1.3.0",
|
||||
"micromatch": "^4.0.4"
|
||||
}
|
||||
},
|
||||
"fastq": {
|
||||
"version": "1.13.0",
|
||||
"resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz",
|
||||
"integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==",
|
||||
"requires": {
|
||||
"reusify": "^1.0.4"
|
||||
}
|
||||
},
|
||||
"fill-range": {
|
||||
"version": "7.0.1",
|
||||
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
|
||||
"integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
|
||||
"requires": {
|
||||
"to-regex-range": "^5.0.1"
|
||||
}
|
||||
},
|
||||
"fraction.js": {
|
||||
"version": "4.1.2",
|
||||
"resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.1.2.tgz",
|
||||
"integrity": "sha512-o2RiJQ6DZaR/5+Si0qJUIy637QMRudSi9kU/FFzx9EZazrIdnBgpU+3sEWCxAVhH2RtxW2Oz+T4p2o8uOPVcgA=="
|
||||
},
|
||||
"fs-extra": {
|
||||
"version": "10.0.0",
|
||||
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz",
|
||||
"integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==",
|
||||
"requires": {
|
||||
"graceful-fs": "^4.2.0",
|
||||
"jsonfile": "^6.0.1",
|
||||
"universalify": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"fsevents": {
|
||||
"version": "2.3.2",
|
||||
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
|
||||
"integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
|
||||
"optional": true
|
||||
},
|
||||
"function-bind": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
|
||||
"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
|
||||
},
|
||||
"get-caller-file": {
|
||||
"version": "2.0.5",
|
||||
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
|
||||
"integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="
|
||||
},
|
||||
"get-stdin": {
|
||||
"version": "9.0.0",
|
||||
"resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-9.0.0.tgz",
|
||||
"integrity": "sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA=="
|
||||
},
|
||||
"glob-parent": {
|
||||
"version": "5.1.2",
|
||||
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
|
||||
"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
|
||||
"requires": {
|
||||
"is-glob": "^4.0.1"
|
||||
}
|
||||
},
|
||||
"globby": {
|
||||
"version": "12.2.0",
|
||||
"resolved": "https://registry.npmjs.org/globby/-/globby-12.2.0.tgz",
|
||||
"integrity": "sha512-wiSuFQLZ+urS9x2gGPl1H5drc5twabmm4m2gTR27XDFyjUHJUNsS8o/2aKyIF6IoBaR630atdher0XJ5g6OMmA==",
|
||||
"requires": {
|
||||
"array-union": "^3.0.1",
|
||||
"dir-glob": "^3.0.1",
|
||||
"fast-glob": "^3.2.7",
|
||||
"ignore": "^5.1.9",
|
||||
"merge2": "^1.4.1",
|
||||
"slash": "^4.0.0"
|
||||
}
|
||||
},
|
||||
"graceful-fs": {
|
||||
"version": "4.2.9",
|
||||
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz",
|
||||
"integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ=="
|
||||
},
|
||||
"has": {
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
|
||||
"integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
|
||||
"requires": {
|
||||
"function-bind": "^1.1.1"
|
||||
}
|
||||
},
|
||||
"has-flag": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
|
||||
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
|
||||
},
|
||||
"ignore": {
|
||||
"version": "5.2.0",
|
||||
"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz",
|
||||
"integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ=="
|
||||
},
|
||||
"import-fresh": {
|
||||
"version": "3.3.0",
|
||||
"resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
|
||||
"integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
|
||||
"requires": {
|
||||
"parent-module": "^1.0.0",
|
||||
"resolve-from": "^4.0.0"
|
||||
}
|
||||
},
|
||||
"is-arrayish": {
|
||||
"version": "0.2.1",
|
||||
"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
|
||||
"integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0="
|
||||
},
|
||||
"is-binary-path": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
|
||||
"integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
|
||||
"requires": {
|
||||
"binary-extensions": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"is-core-module": {
|
||||
"version": "2.8.1",
|
||||
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz",
|
||||
"integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==",
|
||||
"requires": {
|
||||
"has": "^1.0.3"
|
||||
}
|
||||
},
|
||||
"is-extglob": {
|
||||
"version": "2.1.1",
|
||||
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
|
||||
"integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI="
|
||||
},
|
||||
"is-fullwidth-code-point": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
|
||||
"integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="
|
||||
},
|
||||
"is-glob": {
|
||||
"version": "4.0.3",
|
||||
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
|
||||
"integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
|
||||
"requires": {
|
||||
"is-extglob": "^2.1.1"
|
||||
}
|
||||
},
|
||||
"is-number": {
|
||||
"version": "7.0.0",
|
||||
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
|
||||
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="
|
||||
},
|
||||
"js-tokens": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
|
||||
"integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
|
||||
},
|
||||
"json-parse-even-better-errors": {
|
||||
"version": "2.3.1",
|
||||
"resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
|
||||
"integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w=="
|
||||
},
|
||||
"jsonfile": {
|
||||
"version": "6.1.0",
|
||||
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
|
||||
"integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
|
||||
"requires": {
|
||||
"graceful-fs": "^4.1.6",
|
||||
"universalify": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"lilconfig": {
|
||||
"version": "2.0.4",
|
||||
"resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.4.tgz",
|
||||
"integrity": "sha512-bfTIN7lEsiooCocSISTWXkiWJkRqtL9wYtYy+8EK3Y41qh3mpwPU0ycTOgjdY9ErwXCc8QyrQp82bdL0Xkm9yA=="
|
||||
},
|
||||
"lines-and-columns": {
|
||||
"version": "1.2.4",
|
||||
"resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
|
||||
"integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="
|
||||
},
|
||||
"merge2": {
|
||||
"version": "1.4.1",
|
||||
"resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
|
||||
"integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="
|
||||
},
|
||||
"micromatch": {
|
||||
"version": "4.0.4",
|
||||
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz",
|
||||
"integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==",
|
||||
"requires": {
|
||||
"braces": "^3.0.1",
|
||||
"picomatch": "^2.2.3"
|
||||
}
|
||||
},
|
||||
"minimist": {
|
||||
"version": "1.2.5",
|
||||
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
|
||||
"integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
|
||||
},
|
||||
"nanoid": {
|
||||
"version": "3.2.0",
|
||||
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.2.0.tgz",
|
||||
"integrity": "sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA=="
|
||||
},
|
||||
"node-releases": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz",
|
||||
"integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA=="
|
||||
},
|
||||
"normalize-path": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
|
||||
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="
|
||||
},
|
||||
"normalize-range": {
|
||||
"version": "0.1.2",
|
||||
"resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
|
||||
"integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI="
|
||||
},
|
||||
"object-hash": {
|
||||
"version": "2.2.0",
|
||||
"resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz",
|
||||
"integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw=="
|
||||
},
|
||||
"parent-module": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
|
||||
"integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
|
||||
"requires": {
|
||||
"callsites": "^3.0.0"
|
||||
}
|
||||
},
|
||||
"parse-json": {
|
||||
"version": "5.2.0",
|
||||
"resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
|
||||
"integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
|
||||
"requires": {
|
||||
"@babel/code-frame": "^7.0.0",
|
||||
"error-ex": "^1.3.1",
|
||||
"json-parse-even-better-errors": "^2.3.0",
|
||||
"lines-and-columns": "^1.1.6"
|
||||
}
|
||||
},
|
||||
"path-parse": {
|
||||
"version": "1.0.7",
|
||||
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
|
||||
"integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
|
||||
},
|
||||
"path-type": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
|
||||
"integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw=="
|
||||
},
|
||||
"picocolors": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
|
||||
"integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
|
||||
},
|
||||
"picomatch": {
|
||||
"version": "2.3.1",
|
||||
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
|
||||
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="
|
||||
},
|
||||
"pify": {
|
||||
"version": "2.3.0",
|
||||
"resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
|
||||
"integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw="
|
||||
},
|
||||
"postcss": {
|
||||
"version": "8.4.6",
|
||||
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.6.tgz",
|
||||
"integrity": "sha512-OovjwIzs9Te46vlEx7+uXB0PLijpwjXGKXjVGGPIGubGpq7uh5Xgf6D6FiJ/SzJMBosHDp6a2hiXOS97iBXcaA==",
|
||||
"requires": {
|
||||
"nanoid": "^3.2.0",
|
||||
"picocolors": "^1.0.0",
|
||||
"source-map-js": "^1.0.2"
|
||||
}
|
||||
},
|
||||
"postcss-cli": {
|
||||
"version": "9.1.0",
|
||||
"resolved": "https://registry.npmjs.org/postcss-cli/-/postcss-cli-9.1.0.tgz",
|
||||
"integrity": "sha512-zvDN2ADbWfza42sAnj+O2uUWyL0eRL1V+6giM2vi4SqTR3gTYy8XzcpfwccayF2szcUif0HMmXiEaDv9iEhcpw==",
|
||||
"requires": {
|
||||
"chokidar": "^3.3.0",
|
||||
"dependency-graph": "^0.11.0",
|
||||
"fs-extra": "^10.0.0",
|
||||
"get-stdin": "^9.0.0",
|
||||
"globby": "^12.0.0",
|
||||
"picocolors": "^1.0.0",
|
||||
"postcss-load-config": "^3.0.0",
|
||||
"postcss-reporter": "^7.0.0",
|
||||
"pretty-hrtime": "^1.0.3",
|
||||
"read-cache": "^1.0.0",
|
||||
"slash": "^4.0.0",
|
||||
"yargs": "^17.0.0"
|
||||
}
|
||||
},
|
||||
"postcss-js": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz",
|
||||
"integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==",
|
||||
"requires": {
|
||||
"camelcase-css": "^2.0.1"
|
||||
}
|
||||
},
|
||||
"postcss-load-config": {
|
||||
"version": "3.1.1",
|
||||
"resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.1.tgz",
|
||||
"integrity": "sha512-c/9XYboIbSEUZpiD1UQD0IKiUe8n9WHYV7YFe7X7J+ZwCsEKkUJSFWjS9hBU1RR9THR7jMXst8sxiqP0jjo2mg==",
|
||||
"requires": {
|
||||
"lilconfig": "^2.0.4",
|
||||
"yaml": "^1.10.2"
|
||||
}
|
||||
},
|
||||
"postcss-nested": {
|
||||
"version": "5.0.6",
|
||||
"resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.6.tgz",
|
||||
"integrity": "sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==",
|
||||
"requires": {
|
||||
"postcss-selector-parser": "^6.0.6"
|
||||
}
|
||||
},
|
||||
"postcss-reporter": {
|
||||
"version": "7.0.5",
|
||||
"resolved": "https://registry.npmjs.org/postcss-reporter/-/postcss-reporter-7.0.5.tgz",
|
||||
"integrity": "sha512-glWg7VZBilooZGOFPhN9msJ3FQs19Hie7l5a/eE6WglzYqVeH3ong3ShFcp9kDWJT1g2Y/wd59cocf9XxBtkWA==",
|
||||
"requires": {
|
||||
"picocolors": "^1.0.0",
|
||||
"thenby": "^1.3.4"
|
||||
}
|
||||
},
|
||||
"postcss-selector-parser": {
|
||||
"version": "6.0.9",
|
||||
"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.9.tgz",
|
||||
"integrity": "sha512-UO3SgnZOVTwu4kyLR22UQ1xZh086RyNZppb7lLAKBFK8a32ttG5i87Y/P3+2bRSjZNyJ1B7hfFNo273tKe9YxQ==",
|
||||
"requires": {
|
||||
"cssesc": "^3.0.0",
|
||||
"util-deprecate": "^1.0.2"
|
||||
}
|
||||
},
|
||||
"postcss-value-parser": {
|
||||
"version": "4.2.0",
|
||||
"resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
|
||||
"integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="
|
||||
},
|
||||
"pretty-hrtime": {
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz",
|
||||
"integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE="
|
||||
},
|
||||
"queue-microtask": {
|
||||
"version": "1.2.3",
|
||||
"resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
|
||||
"integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="
|
||||
},
|
||||
"quick-lru": {
|
||||
"version": "5.1.1",
|
||||
"resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
|
||||
"integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA=="
|
||||
},
|
||||
"read-cache": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
|
||||
"integrity": "sha1-5mTvMRYRZsl1HNvo28+GtftY93Q=",
|
||||
"requires": {
|
||||
"pify": "^2.3.0"
|
||||
}
|
||||
},
|
||||
"readdirp": {
|
||||
"version": "3.6.0",
|
||||
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
|
||||
"integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
|
||||
"requires": {
|
||||
"picomatch": "^2.2.1"
|
||||
}
|
||||
},
|
||||
"require-directory": {
|
||||
"version": "2.1.1",
|
||||
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
|
||||
"integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I="
|
||||
},
|
||||
"resolve": {
|
||||
"version": "1.22.0",
|
||||
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz",
|
||||
"integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==",
|
||||
"requires": {
|
||||
"is-core-module": "^2.8.1",
|
||||
"path-parse": "^1.0.7",
|
||||
"supports-preserve-symlinks-flag": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"resolve-from": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
|
||||
"integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="
|
||||
},
|
||||
"reusify": {
|
||||
"version": "1.0.4",
|
||||
"resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
|
||||
"integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw=="
|
||||
},
|
||||
"run-parallel": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
|
||||
"integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
|
||||
"requires": {
|
||||
"queue-microtask": "^1.2.2"
|
||||
}
|
||||
},
|
||||
"slash": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz",
|
||||
"integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew=="
|
||||
},
|
||||
"source-map-js": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
|
||||
"integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw=="
|
||||
},
|
||||
"string-width": {
|
||||
"version": "4.2.3",
|
||||
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
|
||||
"integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
|
||||
"requires": {
|
||||
"emoji-regex": "^8.0.0",
|
||||
"is-fullwidth-code-point": "^3.0.0",
|
||||
"strip-ansi": "^6.0.1"
|
||||
}
|
||||
},
|
||||
"strip-ansi": {
|
||||
"version": "6.0.1",
|
||||
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
|
||||
"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
|
||||
"requires": {
|
||||
"ansi-regex": "^5.0.1"
|
||||
}
|
||||
},
|
||||
"supports-color": {
|
||||
"version": "7.2.0",
|
||||
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
|
||||
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
|
||||
"requires": {
|
||||
"has-flag": "^4.0.0"
|
||||
}
|
||||
},
|
||||
"supports-preserve-symlinks-flag": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
|
||||
"integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="
|
||||
},
|
||||
"tailwindcss": {
|
||||
"version": "3.0.18",
|
||||
"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.0.18.tgz",
|
||||
"integrity": "sha512-ihPTpEyA5ANgZbwKlgrbfnzOp9R5vDHFWmqxB1PT8NwOGCOFVVMl+Ps1cQQ369acaqqf1BEF77roCwK0lvNmTw==",
|
||||
"requires": {
|
||||
"arg": "^5.0.1",
|
||||
"chalk": "^4.1.2",
|
||||
"chokidar": "^3.5.3",
|
||||
"color-name": "^1.1.4",
|
||||
"cosmiconfig": "^7.0.1",
|
||||
"detective": "^5.2.0",
|
||||
"didyoumean": "^1.2.2",
|
||||
"dlv": "^1.1.3",
|
||||
"fast-glob": "^3.2.11",
|
||||
"glob-parent": "^6.0.2",
|
||||
"is-glob": "^4.0.3",
|
||||
"normalize-path": "^3.0.0",
|
||||
"object-hash": "^2.2.0",
|
||||
"postcss-js": "^4.0.0",
|
||||
"postcss-load-config": "^3.1.0",
|
||||
"postcss-nested": "5.0.6",
|
||||
"postcss-selector-parser": "^6.0.9",
|
||||
"postcss-value-parser": "^4.2.0",
|
||||
"quick-lru": "^5.1.1",
|
||||
"resolve": "^1.21.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"glob-parent": {
|
||||
"version": "6.0.2",
|
||||
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
|
||||
"integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
|
||||
"requires": {
|
||||
"is-glob": "^4.0.3"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"thenby": {
|
||||
"version": "1.3.4",
|
||||
"resolved": "https://registry.npmjs.org/thenby/-/thenby-1.3.4.tgz",
|
||||
"integrity": "sha512-89Gi5raiWA3QZ4b2ePcEwswC3me9JIg+ToSgtE0JWeCynLnLxNr/f9G+xfo9K+Oj4AFdom8YNJjibIARTJmapQ=="
|
||||
},
|
||||
"to-regex-range": {
|
||||
"version": "5.0.1",
|
||||
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
|
||||
"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
|
||||
"requires": {
|
||||
"is-number": "^7.0.0"
|
||||
}
|
||||
},
|
||||
"universalify": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
|
||||
"integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ=="
|
||||
},
|
||||
"util-deprecate": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
|
||||
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
|
||||
},
|
||||
"wrap-ansi": {
|
||||
"version": "7.0.0",
|
||||
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
|
||||
"integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
|
||||
"requires": {
|
||||
"ansi-styles": "^4.0.0",
|
||||
"string-width": "^4.1.0",
|
||||
"strip-ansi": "^6.0.0"
|
||||
}
|
||||
},
|
||||
"xtend": {
|
||||
"version": "4.0.2",
|
||||
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
|
||||
"integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="
|
||||
},
|
||||
"y18n": {
|
||||
"version": "5.0.8",
|
||||
"resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
|
||||
"integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="
|
||||
},
|
||||
"yaml": {
|
||||
"version": "1.10.2",
|
||||
"resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
|
||||
"integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg=="
|
||||
},
|
||||
"yargs": {
|
||||
"version": "17.3.1",
|
||||
"resolved": "https://registry.npmjs.org/yargs/-/yargs-17.3.1.tgz",
|
||||
"integrity": "sha512-WUANQeVgjLbNsEmGk20f+nlHgOqzRFpiGWVaBrYGYIGANIIu3lWjoyi0fNlFmJkvfhCZ6BXINe7/W2O2bV4iaA==",
|
||||
"requires": {
|
||||
"cliui": "^7.0.2",
|
||||
"escalade": "^3.1.1",
|
||||
"get-caller-file": "^2.0.5",
|
||||
"require-directory": "^2.1.1",
|
||||
"string-width": "^4.2.3",
|
||||
"y18n": "^5.0.5",
|
||||
"yargs-parser": "^21.0.0"
|
||||
}
|
||||
},
|
||||
"yargs-parser": {
|
||||
"version": "21.0.0",
|
||||
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.0.tgz",
|
||||
"integrity": "sha512-z9kApYUOCwoeZ78rfRYYWdiU/iNL6mwwYlkkZfJoyMR1xps+NEBX5X7XmRpxkZHhXJ6+Ey00IwKxBBSW9FIjyA=="
|
||||
}
|
||||
}
|
||||
}
|
15
package.json
Normal file
@ -0,0 +1,15 @@
|
||||
{
|
||||
"name": "decepubclient",
|
||||
"version": "1.0.0",
|
||||
"description": "",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://git.thepra.dev/thepra/decePubClient.git"
|
||||
},
|
||||
"author": "",
|
||||
"license": "ISC"
|
||||
}
|
0
postcss.config.js
Normal file
7
tailwind.config.js
Normal file
@ -0,0 +1,7 @@
|
||||
module.exports = {
|
||||
content: [],
|
||||
theme: {
|
||||
extend: {},
|
||||
},
|
||||
plugins: [],
|
||||
}
|
12
wwwroot/browserconfig.xml
Normal file
@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<browserconfig>
|
||||
<msapplication>
|
||||
<tile>
|
||||
<square70x70logo src="/imgs/mstile-70x70.png" />
|
||||
<square150x150logo src="/imgs/mstile-150x150.png" />
|
||||
<square310x310logo src="/imgs/mstile-310x310.png" />
|
||||
<wide310x150logo src="/imgs/mstile-310x150.png" />
|
||||
<TileColor>#fadcc7</TileColor>
|
||||
</tile>
|
||||
</msapplication>
|
||||
</browserconfig>
|
@ -1,64 +0,0 @@
|
||||
@import url('open-iconic/font/css/open-iconic-bootstrap.min.css');
|
||||
|
||||
html, body {
|
||||
font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
|
||||
}
|
||||
|
||||
h1:focus {
|
||||
outline: none;
|
||||
}
|
||||
|
||||
a, .btn-link {
|
||||
color: #0071c1;
|
||||
}
|
||||
|
||||
.btn-primary {
|
||||
color: #fff;
|
||||
background-color: #1b6ec2;
|
||||
border-color: #1861ac;
|
||||
}
|
||||
|
||||
.content {
|
||||
padding-top: 1.1rem;
|
||||
}
|
||||
|
||||
.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;
|
||||
}
|
||||
|
||||
.blazor-error-boundary {
|
||||
background: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTYiIGhlaWdodD0iNDkiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIG92ZXJmbG93PSJoaWRkZW4iPjxkZWZzPjxjbGlwUGF0aCBpZD0iY2xpcDAiPjxyZWN0IHg9IjIzNSIgeT0iNTEiIHdpZHRoPSI1NiIgaGVpZ2h0PSI0OSIvPjwvY2xpcFBhdGg+PC9kZWZzPjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMCkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMzUgLTUxKSI+PHBhdGggZD0iTTI2My41MDYgNTFDMjY0LjcxNyA1MSAyNjUuODEzIDUxLjQ4MzcgMjY2LjYwNiA1Mi4yNjU4TDI2Ny4wNTIgNTIuNzk4NyAyNjcuNTM5IDUzLjYyODMgMjkwLjE4NSA5Mi4xODMxIDI5MC41NDUgOTIuNzk1IDI5MC42NTYgOTIuOTk2QzI5MC44NzcgOTMuNTEzIDI5MSA5NC4wODE1IDI5MSA5NC42NzgyIDI5MSA5Ny4wNjUxIDI4OS4wMzggOTkgMjg2LjYxNyA5OUwyNDAuMzgzIDk5QzIzNy45NjMgOTkgMjM2IDk3LjA2NTEgMjM2IDk0LjY3ODIgMjM2IDk0LjM3OTkgMjM2LjAzMSA5NC4wODg2IDIzNi4wODkgOTMuODA3MkwyMzYuMzM4IDkzLjAxNjIgMjM2Ljg1OCA5Mi4xMzE0IDI1OS40NzMgNTMuNjI5NCAyNTkuOTYxIDUyLjc5ODUgMjYwLjQwNyA1Mi4yNjU4QzI2MS4yIDUxLjQ4MzcgMjYyLjI5NiA1MSAyNjMuNTA2IDUxWk0yNjMuNTg2IDY2LjAxODNDMjYwLjczNyA2Ni4wMTgzIDI1OS4zMTMgNjcuMTI0NSAyNTkuMzEzIDY5LjMzNyAyNTkuMzEzIDY5LjYxMDIgMjU5LjMzMiA2OS44NjA4IDI1OS4zNzEgNzAuMDg4N0wyNjEuNzk1IDg0LjAxNjEgMjY1LjM4IDg0LjAxNjEgMjY3LjgyMSA2OS43NDc1QzI2Ny44NiA2OS43MzA5IDI2Ny44NzkgNjkuNTg3NyAyNjcuODc5IDY5LjMxNzkgMjY3Ljg3OSA2Ny4xMTgyIDI2Ni40NDggNjYuMDE4MyAyNjMuNTg2IDY2LjAxODNaTTI2My41NzYgODYuMDU0N0MyNjEuMDQ5IDg2LjA1NDcgMjU5Ljc4NiA4Ny4zMDA1IDI1OS43ODYgODkuNzkyMSAyNTkuNzg2IDkyLjI4MzcgMjYxLjA0OSA5My41Mjk1IDI2My41NzYgOTMuNTI5NSAyNjYuMTE2IDkzLjUyOTUgMjY3LjM4NyA5Mi4yODM3IDI2Ny4zODcgODkuNzkyMSAyNjcuMzg3IDg3LjMwMDUgMjY2LjExNiA4Ni4wNTQ3IDI2My41NzYgODYuMDU0N1oiIGZpbGw9IiNGRkU1MDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvZz48L3N2Zz4=) no-repeat 1rem/1.8rem, #b32121;
|
||||
padding: 1rem 1rem 1rem 3.7rem;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.blazor-error-boundary::after {
|
||||
content: "An error has occurred."
|
||||
}
|
7
wwwroot/css/bootstrap/bootstrap.min.css
vendored
3
wwwroot/css/main.css
Normal file
@ -0,0 +1,3 @@
|
||||
|
||||
|
||||
/*# sourceMappingURL=main.css.map */
|
@ -1,86 +0,0 @@
|
||||
SIL OPEN FONT LICENSE Version 1.1
|
||||
|
||||
Copyright (c) 2014 Waybury
|
||||
|
||||
PREAMBLE
|
||||
The goals of the Open Font License (OFL) are to stimulate worldwide
|
||||
development of collaborative font projects, to support the font creation
|
||||
efforts of academic and linguistic communities, and to provide a free and
|
||||
open framework in which fonts may be shared and improved in partnership
|
||||
with others.
|
||||
|
||||
The OFL allows the licensed fonts to be used, studied, modified and
|
||||
redistributed freely as long as they are not sold by themselves. The
|
||||
fonts, including any derivative works, can be bundled, embedded,
|
||||
redistributed and/or sold with any software provided that any reserved
|
||||
names are not used by derivative works. The fonts and derivatives,
|
||||
however, cannot be released under any other type of license. The
|
||||
requirement for fonts to remain under this license does not apply
|
||||
to any document created using the fonts or their derivatives.
|
||||
|
||||
DEFINITIONS
|
||||
"Font Software" refers to the set of files released by the Copyright
|
||||
Holder(s) under this license and clearly marked as such. This may
|
||||
include source files, build scripts and documentation.
|
||||
|
||||
"Reserved Font Name" refers to any names specified as such after the
|
||||
copyright statement(s).
|
||||
|
||||
"Original Version" refers to the collection of Font Software components as
|
||||
distributed by the Copyright Holder(s).
|
||||
|
||||
"Modified Version" refers to any derivative made by adding to, deleting,
|
||||
or substituting -- in part or in whole -- any of the components of the
|
||||
Original Version, by changing formats or by porting the Font Software to a
|
||||
new environment.
|
||||
|
||||
"Author" refers to any designer, engineer, programmer, technical
|
||||
writer or other person who contributed to the Font Software.
|
||||
|
||||
PERMISSION & CONDITIONS
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
||||
redistribute, and sell modified and unmodified copies of the Font
|
||||
Software, subject to the following conditions:
|
||||
|
||||
1) Neither the Font Software nor any of its individual components,
|
||||
in Original or Modified Versions, may be sold by itself.
|
||||
|
||||
2) Original or Modified Versions of the Font Software may be bundled,
|
||||
redistributed and/or sold with any software, provided that each copy
|
||||
contains the above copyright notice and this license. These can be
|
||||
included either as stand-alone text files, human-readable headers or
|
||||
in the appropriate machine-readable metadata fields within text or
|
||||
binary files as long as those fields can be easily viewed by the user.
|
||||
|
||||
3) No Modified Version of the Font Software may use the Reserved Font
|
||||
Name(s) unless explicit written permission is granted by the corresponding
|
||||
Copyright Holder. This restriction only applies to the primary font name as
|
||||
presented to the users.
|
||||
|
||||
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
||||
Software shall not be used to promote, endorse or advertise any
|
||||
Modified Version, except to acknowledge the contribution(s) of the
|
||||
Copyright Holder(s) and the Author(s) or with their explicit written
|
||||
permission.
|
||||
|
||||
5) The Font Software, modified or unmodified, in part or in whole,
|
||||
must be distributed entirely under this license, and must not be
|
||||
distributed under any other license. The requirement for fonts to
|
||||
remain under this license does not apply to any document created
|
||||
using the Font Software.
|
||||
|
||||
TERMINATION
|
||||
This license becomes null and void if any of the above conditions are
|
||||
not met.
|
||||
|
||||
DISCLAIMER
|
||||
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
||||
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
||||
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
||||
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
||||
OTHER DEALINGS IN THE FONT SOFTWARE.
|
@ -1,21 +0,0 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2014 Waybury
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
@ -1,114 +0,0 @@
|
||||
[Open Iconic v1.1.1](http://useiconic.com/open)
|
||||
===========
|
||||
|
||||
### Open Iconic is the open source sibling of [Iconic](http://useiconic.com). It is a hyper-legible collection of 223 icons with a tiny footprint—ready to use with Bootstrap and Foundation. [View the collection](http://useiconic.com/open#icons)
|
||||
|
||||
|
||||
|
||||
## What's in Open Iconic?
|
||||
|
||||
* 223 icons designed to be legible down to 8 pixels
|
||||
* Super-light SVG files - 61.8 for the entire set
|
||||
* SVG sprite—the modern replacement for icon fonts
|
||||
* Webfont (EOT, OTF, SVG, TTF, WOFF), PNG and WebP formats
|
||||
* Webfont stylesheets (including versions for Bootstrap and Foundation) in CSS, LESS, SCSS and Stylus formats
|
||||
* PNG and WebP raster images in 8px, 16px, 24px, 32px, 48px and 64px.
|
||||
|
||||
|
||||
## Getting Started
|
||||
|
||||
#### For code samples and everything else you need to get started with Open Iconic, check out our [Icons](http://useiconic.com/open#icons) and [Reference](http://useiconic.com/open#reference) sections.
|
||||
|
||||
### General Usage
|
||||
|
||||
#### Using Open Iconic's SVGs
|
||||
|
||||
We like SVGs and we think they're the way to display icons on the web. Since Open Iconic are just basic SVGs, we suggest you display them like you would any other image (don't forget the `alt` attribute).
|
||||
|
||||
```
|
||||
<img src="/open-iconic/svg/icon-name.svg" alt="icon name">
|
||||
```
|
||||
|
||||
#### Using Open Iconic's SVG Sprite
|
||||
|
||||
Open Iconic also comes in a SVG sprite which allows you to display all the icons in the set with a single request. It's like an icon font, without being a hack.
|
||||
|
||||
Adding an icon from an SVG sprite is a little different than what you're used to, but it's still a piece of cake. *Tip: To make your icons easily style able, we suggest adding a general class to the* `<svg>` *tag and a unique class name for each different icon in the* `<use>` *tag.*
|
||||
|
||||
```
|
||||
<svg class="icon">
|
||||
<use xlink:href="open-iconic.svg#account-login" class="icon-account-login"></use>
|
||||
</svg>
|
||||
```
|
||||
|
||||
Sizing icons only needs basic CSS. All the icons are in a square format, so just set the `<svg>` tag with equal width and height dimensions.
|
||||
|
||||
```
|
||||
.icon {
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
}
|
||||
```
|
||||
|
||||
Coloring icons is even easier. All you need to do is set the `fill` rule on the `<use>` tag.
|
||||
|
||||
```
|
||||
.icon-account-login {
|
||||
fill: #f00;
|
||||
}
|
||||
```
|
||||
|
||||
To learn more about SVG Sprites, read [Chris Coyier's guide](http://css-tricks.com/svg-sprites-use-better-icon-fonts/).
|
||||
|
||||
#### Using Open Iconic's Icon Font...
|
||||
|
||||
|
||||
##### …with Bootstrap
|
||||
|
||||
You can find our Bootstrap stylesheets in `font/css/open-iconic-bootstrap.{css, less, scss, styl}`
|
||||
|
||||
|
||||
```
|
||||
<link href="/open-iconic/font/css/open-iconic-bootstrap.css" rel="stylesheet">
|
||||
```
|
||||
|
||||
|
||||
```
|
||||
<span class="oi oi-icon-name" title="icon name" aria-hidden="true"></span>
|
||||
```
|
||||
|
||||
##### …with Foundation
|
||||
|
||||
You can find our Foundation stylesheets in `font/css/open-iconic-foundation.{css, less, scss, styl}`
|
||||
|
||||
```
|
||||
<link href="/open-iconic/font/css/open-iconic-foundation.css" rel="stylesheet">
|
||||
```
|
||||
|
||||
|
||||
```
|
||||
<span class="fi-icon-name" title="icon name" aria-hidden="true"></span>
|
||||
```
|
||||
|
||||
##### …on its own
|
||||
|
||||
You can find our default stylesheets in `font/css/open-iconic.{css, less, scss, styl}`
|
||||
|
||||
```
|
||||
<link href="/open-iconic/font/css/open-iconic.css" rel="stylesheet">
|
||||
```
|
||||
|
||||
```
|
||||
<span class="oi" data-glyph="icon-name" title="icon name" aria-hidden="true"></span>
|
||||
```
|
||||
|
||||
|
||||
## License
|
||||
|
||||
### Icons
|
||||
|
||||
All code (including SVG markup) is under the [MIT License](http://opensource.org/licenses/MIT).
|
||||
|
||||
### Fonts
|
||||
|
||||
All fonts are under the [SIL Licensed](http://scripts.sil.org/cms/scripts/page.php?item_id=OFL_web).
|
1
wwwroot/css/style.min.css
vendored
Normal file
BIN
wwwroot/css/style.min.css.gz
Normal file
0
wwwroot/css/tailwind-override.css
Normal file
BIN
wwwroot/fonts/ionicons.eot
Normal file
2230
wwwroot/fonts/ionicons.svg
Normal file
After Width: | Height: | Size: 326 KiB |
BIN
wwwroot/fonts/ionicons.ttf
Normal file
BIN
wwwroot/fonts/ionicons.woff
Normal file
BIN
wwwroot/fonts/ionicons.woff2
Normal file
Before Width: | Height: | Size: 54 KiB After Width: | Height: | Size: 54 KiB |
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 2.6 KiB |
Before Width: | Height: | Size: 6.2 KiB After Width: | Height: | Size: 6.2 KiB |
0
wwwroot/main.js
Normal file
7
wwwroot/robots.txt
Normal file
@ -0,0 +1,7 @@
|
||||
User-agent: *
|
||||
Crawl-delay: 120
|
||||
Disallow: /_framework/
|
||||
Disallow: /webfonts/
|
||||
Disallow: /_content/
|
||||
Disallow: /js/
|
||||
Sitemap: https://collanon.app/sitemap.xml
|
1
wwwroot/rxjs.7.4.0.min.js
vendored
Normal file
11811
wwwroot/vendor/bulma.css
vendored
Normal file
4616
wwwroot/vendor/fontawesome.css
vendored
Normal file
1480
wwwroot/vendor/ionicons.css
vendored
Normal file
11
wwwroot/vendor/ionicons.min.css
vendored
Normal file
511
wwwroot/vendor/open-iconic.css
vendored
Normal file
@ -0,0 +1,511 @@
|
||||
|
||||
@font-face {
|
||||
font-family: 'Icons';
|
||||
src: url('../fonts/open-iconic.eot');
|
||||
src: url('../fonts/open-iconic.eot?#iconic-sm') format('embedded-opentype'), url('../fonts/open-iconic.woff') format('woff'), url('../fonts/open-iconic.ttf') format('truetype'), url('../fonts/open-iconic.otf') format('opentype'), url('../fonts/open-iconic.svg#iconic-sm') format('svg');
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
.oi[data-glyph].oi-text-replace {
|
||||
font-size: 0;
|
||||
line-height: 0;
|
||||
}
|
||||
|
||||
.oi[data-glyph].oi-text-replace:before {
|
||||
width: 1em;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.oi[data-glyph]:before {
|
||||
font-family: 'Icons';
|
||||
display: inline-block;
|
||||
speak: none;
|
||||
line-height: 1;
|
||||
vertical-align: baseline;
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
}
|
||||
|
||||
.oi[data-glyph]:empty:before {
|
||||
width: 1em;
|
||||
text-align: center;
|
||||
box-sizing: content-box;
|
||||
}
|
||||
|
||||
.oi[data-glyph].oi-align-left:before {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.oi[data-glyph].oi-align-right:before {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.oi[data-glyph].oi-align-center:before {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.oi[data-glyph].oi-flip-horizontal:before {
|
||||
-webkit-transform: scale(-1, 1);
|
||||
-ms-transform: scale(-1, 1);
|
||||
transform: scale(-1, 1);
|
||||
}
|
||||
.oi[data-glyph].oi-flip-vertical:before {
|
||||
-webkit-transform: scale(1, -1);
|
||||
-ms-transform: scale(-1, 1);
|
||||
transform: scale(1, -1);
|
||||
}
|
||||
.oi[data-glyph].oi-flip-horizontal-vertical:before {
|
||||
-webkit-transform: scale(-1, -1);
|
||||
-ms-transform: scale(-1, 1);
|
||||
transform: scale(-1, -1);
|
||||
}
|
||||
|
||||
|
||||
.oi[data-glyph=account-login]:before { content:'\e000'; }
|
||||
|
||||
.oi[data-glyph=account-logout]:before { content:'\e001'; }
|
||||
|
||||
.oi[data-glyph=action-redo]:before { content:'\e002'; }
|
||||
|
||||
.oi[data-glyph=action-undo]:before { content:'\e003'; }
|
||||
|
||||
.oi[data-glyph=align-center]:before { content:'\e004'; }
|
||||
|
||||
.oi[data-glyph=align-left]:before { content:'\e005'; }
|
||||
|
||||
.oi[data-glyph=align-right]:before { content:'\e006'; }
|
||||
|
||||
.oi[data-glyph=aperture]:before { content:'\e007'; }
|
||||
|
||||
.oi[data-glyph=arrow-bottom]:before { content:'\e008'; }
|
||||
|
||||
.oi[data-glyph=arrow-circle-bottom]:before { content:'\e009'; }
|
||||
|
||||
.oi[data-glyph=arrow-circle-left]:before { content:'\e00a'; }
|
||||
|
||||
.oi[data-glyph=arrow-circle-right]:before { content:'\e00b'; }
|
||||
|
||||
.oi[data-glyph=arrow-circle-top]:before { content:'\e00c'; }
|
||||
|
||||
.oi[data-glyph=arrow-left]:before { content:'\e00d'; }
|
||||
|
||||
.oi[data-glyph=arrow-right]:before { content:'\e00e'; }
|
||||
|
||||
.oi[data-glyph=arrow-thick-bottom]:before { content:'\e00f'; }
|
||||
|
||||
.oi[data-glyph=arrow-thick-left]:before { content:'\e010'; }
|
||||
|
||||
.oi[data-glyph=arrow-thick-right]:before { content:'\e011'; }
|
||||
|
||||
.oi[data-glyph=arrow-thick-top]:before { content:'\e012'; }
|
||||
|
||||
.oi[data-glyph=arrow-top]:before { content:'\e013'; }
|
||||
|
||||
.oi[data-glyph=audio-spectrum]:before { content:'\e014'; }
|
||||
|
||||
.oi[data-glyph=audio]:before { content:'\e015'; }
|
||||
|
||||
.oi[data-glyph=badge]:before { content:'\e016'; }
|
||||
|
||||
.oi[data-glyph=ban]:before { content:'\e017'; }
|
||||
|
||||
.oi[data-glyph=bar-chart]:before { content:'\e018'; }
|
||||
|
||||
.oi[data-glyph=basket]:before { content:'\e019'; }
|
||||
|
||||
.oi[data-glyph=battery-empty]:before { content:'\e01a'; }
|
||||
|
||||
.oi[data-glyph=battery-full]:before { content:'\e01b'; }
|
||||
|
||||
.oi[data-glyph=beaker]:before { content:'\e01c'; }
|
||||
|
||||
.oi[data-glyph=bell]:before { content:'\e01d'; }
|
||||
|
||||
.oi[data-glyph=bluetooth]:before { content:'\e01e'; }
|
||||
|
||||
.oi[data-glyph=bold]:before { content:'\e01f'; }
|
||||
|
||||
.oi[data-glyph=bolt]:before { content:'\e020'; }
|
||||
|
||||
.oi[data-glyph=book]:before { content:'\e021'; }
|
||||
|
||||
.oi[data-glyph=bookmark]:before { content:'\e022'; }
|
||||
|
||||
.oi[data-glyph=box]:before { content:'\e023'; }
|
||||
|
||||
.oi[data-glyph=briefcase]:before { content:'\e024'; }
|
||||
|
||||
.oi[data-glyph=british-pound]:before { content:'\e025'; }
|
||||
|
||||
.oi[data-glyph=browser]:before { content:'\e026'; }
|
||||
|
||||
.oi[data-glyph=brush]:before { content:'\e027'; }
|
||||
|
||||
.oi[data-glyph=bug]:before { content:'\e028'; }
|
||||
|
||||
.oi[data-glyph=bullhorn]:before { content:'\e029'; }
|
||||
|
||||
.oi[data-glyph=calculator]:before { content:'\e02a'; }
|
||||
|
||||
.oi[data-glyph=calendar]:before { content:'\e02b'; }
|
||||
|
||||
.oi[data-glyph=camera-slr]:before { content:'\e02c'; }
|
||||
|
||||
.oi[data-glyph=caret-bottom]:before { content:'\e02d'; }
|
||||
|
||||
.oi[data-glyph=caret-left]:before { content:'\e02e'; }
|
||||
|
||||
.oi[data-glyph=caret-right]:before { content:'\e02f'; }
|
||||
|
||||
.oi[data-glyph=caret-top]:before { content:'\e030'; }
|
||||
|
||||
.oi[data-glyph=cart]:before { content:'\e031'; }
|
||||
|
||||
.oi[data-glyph=chat]:before { content:'\e032'; }
|
||||
|
||||
.oi[data-glyph=check]:before { content:'\e033'; }
|
||||
|
||||
.oi[data-glyph=chevron-bottom]:before { content:'\e034'; }
|
||||
|
||||
.oi[data-glyph=chevron-left]:before { content:'\e035'; }
|
||||
|
||||
.oi[data-glyph=chevron-right]:before { content:'\e036'; }
|
||||
|
||||
.oi[data-glyph=chevron-top]:before { content:'\e037'; }
|
||||
|
||||
.oi[data-glyph=circle-check]:before { content:'\e038'; }
|
||||
|
||||
.oi[data-glyph=circle-x]:before { content:'\e039'; }
|
||||
|
||||
.oi[data-glyph=clipboard]:before { content:'\e03a'; }
|
||||
|
||||
.oi[data-glyph=clock]:before { content:'\e03b'; }
|
||||
|
||||
.oi[data-glyph=cloud-download]:before { content:'\e03c'; }
|
||||
|
||||
.oi[data-glyph=cloud-upload]:before { content:'\e03d'; }
|
||||
|
||||
.oi[data-glyph=cloud]:before { content:'\e03e'; }
|
||||
|
||||
.oi[data-glyph=cloudy]:before { content:'\e03f'; }
|
||||
|
||||
.oi[data-glyph=code]:before { content:'\e040'; }
|
||||
|
||||
.oi[data-glyph=cog]:before { content:'\e041'; }
|
||||
|
||||
.oi[data-glyph=collapse-down]:before { content:'\e042'; }
|
||||
|
||||
.oi[data-glyph=collapse-left]:before { content:'\e043'; }
|
||||
|
||||
.oi[data-glyph=collapse-right]:before { content:'\e044'; }
|
||||
|
||||
.oi[data-glyph=collapse-up]:before { content:'\e045'; }
|
||||
|
||||
.oi[data-glyph=command]:before { content:'\e046'; }
|
||||
|
||||
.oi[data-glyph=comment-square]:before { content:'\e047'; }
|
||||
|
||||
.oi[data-glyph=compass]:before { content:'\e048'; }
|
||||
|
||||
.oi[data-glyph=contrast]:before { content:'\e049'; }
|
||||
|
||||
.oi[data-glyph=copywriting]:before { content:'\e04a'; }
|
||||
|
||||
.oi[data-glyph=credit-card]:before { content:'\e04b'; }
|
||||
|
||||
.oi[data-glyph=crop]:before { content:'\e04c'; }
|
||||
|
||||
.oi[data-glyph=dashboard]:before { content:'\e04d'; }
|
||||
|
||||
.oi[data-glyph=data-transfer-download]:before { content:'\e04e'; }
|
||||
|
||||
.oi[data-glyph=data-transfer-upload]:before { content:'\e04f'; }
|
||||
|
||||
.oi[data-glyph=delete]:before { content:'\e050'; }
|
||||
|
||||
.oi[data-glyph=dial]:before { content:'\e051'; }
|
||||
|
||||
.oi[data-glyph=document]:before { content:'\e052'; }
|
||||
|
||||
.oi[data-glyph=dollar]:before { content:'\e053'; }
|
||||
|
||||
.oi[data-glyph=double-quote-sans-left]:before { content:'\e054'; }
|
||||
|
||||
.oi[data-glyph=double-quote-sans-right]:before { content:'\e055'; }
|
||||
|
||||
.oi[data-glyph=double-quote-serif-left]:before { content:'\e056'; }
|
||||
|
||||
.oi[data-glyph=double-quote-serif-right]:before { content:'\e057'; }
|
||||
|
||||
.oi[data-glyph=droplet]:before { content:'\e058'; }
|
||||
|
||||
.oi[data-glyph=eject]:before { content:'\e059'; }
|
||||
|
||||
.oi[data-glyph=elevator]:before { content:'\e05a'; }
|
||||
|
||||
.oi[data-glyph=ellipses]:before { content:'\e05b'; }
|
||||
|
||||
.oi[data-glyph=envelope-closed]:before { content:'\e05c'; }
|
||||
|
||||
.oi[data-glyph=envelope-open]:before { content:'\e05d'; }
|
||||
|
||||
.oi[data-glyph=euro]:before { content:'\e05e'; }
|
||||
|
||||
.oi[data-glyph=excerpt]:before { content:'\e05f'; }
|
||||
|
||||
.oi[data-glyph=expand-down]:before { content:'\e060'; }
|
||||
|
||||
.oi[data-glyph=expand-left]:before { content:'\e061'; }
|
||||
|
||||
.oi[data-glyph=expand-right]:before { content:'\e062'; }
|
||||
|
||||
.oi[data-glyph=expand-up]:before { content:'\e063'; }
|
||||
|
||||
.oi[data-glyph=external-link]:before { content:'\e064'; }
|
||||
|
||||
.oi[data-glyph=eye]:before { content:'\e065'; }
|
||||
|
||||
.oi[data-glyph=eyedropper]:before { content:'\e066'; }
|
||||
|
||||
.oi[data-glyph=file]:before { content:'\e067'; }
|
||||
|
||||
.oi[data-glyph=fire]:before { content:'\e068'; }
|
||||
|
||||
.oi[data-glyph=flag]:before { content:'\e069'; }
|
||||
|
||||
.oi[data-glyph=flash]:before { content:'\e06a'; }
|
||||
|
||||
.oi[data-glyph=folder]:before { content:'\e06b'; }
|
||||
|
||||
.oi[data-glyph=fork]:before { content:'\e06c'; }
|
||||
|
||||
.oi[data-glyph=fullscreen-enter]:before { content:'\e06d'; }
|
||||
|
||||
.oi[data-glyph=fullscreen-exit]:before { content:'\e06e'; }
|
||||
|
||||
.oi[data-glyph=globe]:before { content:'\e06f'; }
|
||||
|
||||
.oi[data-glyph=graph]:before { content:'\e070'; }
|
||||
|
||||
.oi[data-glyph=grid-four-up]:before { content:'\e071'; }
|
||||
|
||||
.oi[data-glyph=grid-three-up]:before { content:'\e072'; }
|
||||
|
||||
.oi[data-glyph=grid-two-up]:before { content:'\e073'; }
|
||||
|
||||
.oi[data-glyph=hard-drive]:before { content:'\e074'; }
|
||||
|
||||
.oi[data-glyph=header]:before { content:'\e075'; }
|
||||
|
||||
.oi[data-glyph=headphones]:before { content:'\e076'; }
|
||||
|
||||
.oi[data-glyph=heart]:before { content:'\e077'; }
|
||||
|
||||
.oi[data-glyph=home]:before { content:'\e078'; }
|
||||
|
||||
.oi[data-glyph=image]:before { content:'\e079'; }
|
||||
|
||||
.oi[data-glyph=inbox]:before { content:'\e07a'; }
|
||||
|
||||
.oi[data-glyph=infinity]:before { content:'\e07b'; }
|
||||
|
||||
.oi[data-glyph=info]:before { content:'\e07c'; }
|
||||
|
||||
.oi[data-glyph=italic]:before { content:'\e07d'; }
|
||||
|
||||
.oi[data-glyph=justify-center]:before { content:'\e07e'; }
|
||||
|
||||
.oi[data-glyph=justify-left]:before { content:'\e07f'; }
|
||||
|
||||
.oi[data-glyph=justify-right]:before { content:'\e080'; }
|
||||
|
||||
.oi[data-glyph=key]:before { content:'\e081'; }
|
||||
|
||||
.oi[data-glyph=laptop]:before { content:'\e082'; }
|
||||
|
||||
.oi[data-glyph=layers]:before { content:'\e083'; }
|
||||
|
||||
.oi[data-glyph=lightbulb]:before { content:'\e084'; }
|
||||
|
||||
.oi[data-glyph=link-broken]:before { content:'\e085'; }
|
||||
|
||||
.oi[data-glyph=link-intact]:before { content:'\e086'; }
|
||||
|
||||
.oi[data-glyph=list-rich]:before { content:'\e087'; }
|
||||
|
||||
.oi[data-glyph=list]:before { content:'\e088'; }
|
||||
|
||||
.oi[data-glyph=location]:before { content:'\e089'; }
|
||||
|
||||
.oi[data-glyph=lock-locked]:before { content:'\e08a'; }
|
||||
|
||||
.oi[data-glyph=lock-unlocked]:before { content:'\e08b'; }
|
||||
|
||||
.oi[data-glyph=loop-circular]:before { content:'\e08c'; }
|
||||
|
||||
.oi[data-glyph=loop-square]:before { content:'\e08d'; }
|
||||
|
||||
.oi[data-glyph=loop]:before { content:'\e08e'; }
|
||||
|
||||
.oi[data-glyph=magnifying-glass]:before { content:'\e08f'; }
|
||||
|
||||
.oi[data-glyph=map-marker]:before { content:'\e090'; }
|
||||
|
||||
.oi[data-glyph=map]:before { content:'\e091'; }
|
||||
|
||||
.oi[data-glyph=media-pause]:before { content:'\e092'; }
|
||||
|
||||
.oi[data-glyph=media-play]:before { content:'\e093'; }
|
||||
|
||||
.oi[data-glyph=media-record]:before { content:'\e094'; }
|
||||
|
||||
.oi[data-glyph=media-skip-backward]:before { content:'\e095'; }
|
||||
|
||||
.oi[data-glyph=media-skip-forward]:before { content:'\e096'; }
|
||||
|
||||
.oi[data-glyph=media-step-backward]:before { content:'\e097'; }
|
||||
|
||||
.oi[data-glyph=media-step-forward]:before { content:'\e098'; }
|
||||
|
||||
.oi[data-glyph=media-stop]:before { content:'\e099'; }
|
||||
|
||||
.oi[data-glyph=medical-cross]:before { content:'\e09a'; }
|
||||
|
||||
.oi[data-glyph=menu]:before { content:'\e09b'; }
|
||||
|
||||
.oi[data-glyph=microphone]:before { content:'\e09c'; }
|
||||
|
||||
.oi[data-glyph=minus]:before { content:'\e09d'; }
|
||||
|
||||
.oi[data-glyph=monitor]:before { content:'\e09e'; }
|
||||
|
||||
.oi[data-glyph=moon]:before { content:'\e09f'; }
|
||||
|
||||
.oi[data-glyph=move]:before { content:'\e0a0'; }
|
||||
|
||||
.oi[data-glyph=musical-note]:before { content:'\e0a1'; }
|
||||
|
||||
.oi[data-glyph=paperclip]:before { content:'\e0a2'; }
|
||||
|
||||
.oi[data-glyph=pencil]:before { content:'\e0a3'; }
|
||||
|
||||
.oi[data-glyph=people]:before { content:'\e0a4'; }
|
||||
|
||||
.oi[data-glyph=person]:before { content:'\e0a5'; }
|
||||
|
||||
.oi[data-glyph=phone]:before { content:'\e0a6'; }
|
||||
|
||||
.oi[data-glyph=pie-chart]:before { content:'\e0a7'; }
|
||||
|
||||
.oi[data-glyph=pin]:before { content:'\e0a8'; }
|
||||
|
||||
.oi[data-glyph=play-circle]:before { content:'\e0a9'; }
|
||||
|
||||
.oi[data-glyph=plus]:before { content:'\e0aa'; }
|
||||
|
||||
.oi[data-glyph=power-standby]:before { content:'\e0ab'; }
|
||||
|
||||
.oi[data-glyph=print]:before { content:'\e0ac'; }
|
||||
|
||||
.oi[data-glyph=project]:before { content:'\e0ad'; }
|
||||
|
||||
.oi[data-glyph=pulse]:before { content:'\e0ae'; }
|
||||
|
||||
.oi[data-glyph=puzzle-piece]:before { content:'\e0af'; }
|
||||
|
||||
.oi[data-glyph=question-mark]:before { content:'\e0b0'; }
|
||||
|
||||
.oi[data-glyph=rain]:before { content:'\e0b1'; }
|
||||
|
||||
.oi[data-glyph=random]:before { content:'\e0b2'; }
|
||||
|
||||
.oi[data-glyph=reload]:before { content:'\e0b3'; }
|
||||
|
||||
.oi[data-glyph=resize-both]:before { content:'\e0b4'; }
|
||||
|
||||
.oi[data-glyph=resize-height]:before { content:'\e0b5'; }
|
||||
|
||||
.oi[data-glyph=resize-width]:before { content:'\e0b6'; }
|
||||
|
||||
.oi[data-glyph=rss-alt]:before { content:'\e0b7'; }
|
||||
|
||||
.oi[data-glyph=rss]:before { content:'\e0b8'; }
|
||||
|
||||
.oi[data-glyph=script]:before { content:'\e0b9'; }
|
||||
|
||||
.oi[data-glyph=share-boxed]:before { content:'\e0ba'; }
|
||||
|
||||
.oi[data-glyph=share]:before { content:'\e0bb'; }
|
||||
|
||||
.oi[data-glyph=shield]:before { content:'\e0bc'; }
|
||||
|
||||
.oi[data-glyph=signal]:before { content:'\e0bd'; }
|
||||
|
||||
.oi[data-glyph=signpost]:before { content:'\e0be'; }
|
||||
|
||||
.oi[data-glyph=sort-ascending]:before { content:'\e0bf'; }
|
||||
|
||||
.oi[data-glyph=sort-descending]:before { content:'\e0c0'; }
|
||||
|
||||
.oi[data-glyph=spreadsheet]:before { content:'\e0c1'; }
|
||||
|
||||
.oi[data-glyph=star]:before { content:'\e0c2'; }
|
||||
|
||||
.oi[data-glyph=sun]:before { content:'\e0c3'; }
|
||||
|
||||
.oi[data-glyph=tablet]:before { content:'\e0c4'; }
|
||||
|
||||
.oi[data-glyph=tag]:before { content:'\e0c5'; }
|
||||
|
||||
.oi[data-glyph=tags]:before { content:'\e0c6'; }
|
||||
|
||||
.oi[data-glyph=target]:before { content:'\e0c7'; }
|
||||
|
||||
.oi[data-glyph=task]:before { content:'\e0c8'; }
|
||||
|
||||
.oi[data-glyph=terminal]:before { content:'\e0c9'; }
|
||||
|
||||
.oi[data-glyph=text]:before { content:'\e0ca'; }
|
||||
|
||||
.oi[data-glyph=thumb-down]:before { content:'\e0cb'; }
|
||||
|
||||
.oi[data-glyph=thumb-up]:before { content:'\e0cc'; }
|
||||
|
||||
.oi[data-glyph=timer]:before { content:'\e0cd'; }
|
||||
|
||||
.oi[data-glyph=transfer]:before { content:'\e0ce'; }
|
||||
|
||||
.oi[data-glyph=trash]:before { content:'\e0cf'; }
|
||||
|
||||
.oi[data-glyph=underline]:before { content:'\e0d0'; }
|
||||
|
||||
.oi[data-glyph=vertical-align-bottom]:before { content:'\e0d1'; }
|
||||
|
||||
.oi[data-glyph=vertical-align-center]:before { content:'\e0d2'; }
|
||||
|
||||
.oi[data-glyph=vertical-align-top]:before { content:'\e0d3'; }
|
||||
|
||||
.oi[data-glyph=video]:before { content:'\e0d4'; }
|
||||
|
||||
.oi[data-glyph=volume-high]:before { content:'\e0d5'; }
|
||||
|
||||
.oi[data-glyph=volume-low]:before { content:'\e0d6'; }
|
||||
|
||||
.oi[data-glyph=volume-off]:before { content:'\e0d7'; }
|
||||
|
||||
.oi[data-glyph=warning]:before { content:'\e0d8'; }
|
||||
|
||||
.oi[data-glyph=wifi]:before { content:'\e0d9'; }
|
||||
|
||||
.oi[data-glyph=wrench]:before { content:'\e0da'; }
|
||||
|
||||
.oi[data-glyph=x]:before { content:'\e0db'; }
|
||||
|
||||
.oi[data-glyph=yen]:before { content:'\e0dc'; }
|
||||
|
||||
.oi[data-glyph=zoom-in]:before { content:'\e0dd'; }
|
||||
|
||||
.oi[data-glyph=zoom-out]:before { content:'\e0de'; }
|
1
wwwroot/vendor/open-iconic.min.css
vendored
Normal file
16
wwwroot/vendor/solid.css
vendored
Normal file
@ -0,0 +1,16 @@
|
||||
/*!
|
||||
* Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com
|
||||
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
|
||||
*/
|
||||
@font-face {
|
||||
font-family: 'Font Awesome 5 Free';
|
||||
font-style: normal;
|
||||
font-weight: 900;
|
||||
font-display: block;
|
||||
src: url("../webfonts/fa-solid-900.eot");
|
||||
src: url("../webfonts/fa-solid-900.eot?#iefix") format("embedded-opentype"), url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.woff") format("woff"), url("../webfonts/fa-solid-900.ttf") format("truetype"), url("../webfonts/fa-solid-900.svg#fontawesome") format("svg"); }
|
||||
|
||||
.fa,
|
||||
.fas {
|
||||
font-family: 'Font Awesome 5 Free';
|
||||
font-weight: 900; }
|
3
wwwroot/vendor/tailwind-generator.css
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
@tailwind base;
|
||||
@tailwind components;
|
||||
@tailwind utilities;
|
115
wwwroot/vendor/tailwind.css
vendored
Normal file
@ -0,0 +1,115 @@
|
||||
.static {
|
||||
position: static
|
||||
}
|
||||
|
||||
.table {
|
||||
display: table
|
||||
}
|
||||
|
||||
@-webkit-keyframes spin {
|
||||
to {
|
||||
transform: rotate(360deg)
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes spin {
|
||||
to {
|
||||
transform: rotate(360deg)
|
||||
}
|
||||
}
|
||||
|
||||
@-webkit-keyframes ping {
|
||||
75%, 100% {
|
||||
transform: scale(2);
|
||||
opacity: 0
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes ping {
|
||||
75%, 100% {
|
||||
transform: scale(2);
|
||||
opacity: 0
|
||||
}
|
||||
}
|
||||
|
||||
@-webkit-keyframes pulse {
|
||||
50% {
|
||||
opacity: .5
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes pulse {
|
||||
50% {
|
||||
opacity: .5
|
||||
}
|
||||
}
|
||||
|
||||
@-webkit-keyframes bounce {
|
||||
0%, 100% {
|
||||
transform: translateY(-25%);
|
||||
-webkit-animation-timing-function: cubic-bezier(0.8,0,1,1);
|
||||
animation-timing-function: cubic-bezier(0.8,0,1,1)
|
||||
}
|
||||
|
||||
50% {
|
||||
transform: none;
|
||||
-webkit-animation-timing-function: cubic-bezier(0,0,0.2,1);
|
||||
animation-timing-function: cubic-bezier(0,0,0.2,1)
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes bounce {
|
||||
0%, 100% {
|
||||
transform: translateY(-25%);
|
||||
-webkit-animation-timing-function: cubic-bezier(0.8,0,1,1);
|
||||
animation-timing-function: cubic-bezier(0.8,0,1,1)
|
||||
}
|
||||
|
||||
50% {
|
||||
transform: none;
|
||||
-webkit-animation-timing-function: cubic-bezier(0,0,0.2,1);
|
||||
animation-timing-function: cubic-bezier(0,0,0.2,1)
|
||||
}
|
||||
}
|
||||
|
||||
.px-3 {
|
||||
padding-left: 0.75rem;
|
||||
padding-right: 0.75rem
|
||||
}
|
||||
|
||||
.px-4 {
|
||||
padding-left: 1rem;
|
||||
padding-right: 1rem
|
||||
}
|
||||
|
||||
.text-center {
|
||||
text-align: center
|
||||
}
|
||||
|
||||
*, ::before, ::after {
|
||||
--tw-shadow: 0 0 #0000
|
||||
}
|
||||
|
||||
*, ::before, ::after {
|
||||
--tw-ring-inset: var(--tw-empty,/*!*/ /*!*/);
|
||||
--tw-ring-offset-width: 0px;
|
||||
--tw-ring-offset-color: #fff;
|
||||
--tw-ring-color: rgba(59, 130, 246, 0.5);
|
||||
--tw-ring-offset-shadow: 0 0 #0000;
|
||||
--tw-ring-shadow: 0 0 #0000
|
||||
}
|
||||
|
||||
@media (min-width: 640px) {
|
||||
}
|
||||
|
||||
@media (min-width: 768px) {
|
||||
}
|
||||
|
||||
@media (min-width: 1024px) {
|
||||
}
|
||||
|
||||
@media (min-width: 1280px) {
|
||||
}
|
||||
|
||||
@media (min-width: 1536px) {
|
||||
}
|