diff --git a/Squidex.sln b/Squidex.sln index f3c7e803d..e594576bc 100644 --- a/Squidex.sln +++ b/Squidex.sln @@ -63,6 +63,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Migrate_01", "tools\Migrate EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Squidex.Tests", "tests\Squidex.Tests\Squidex.Tests.csproj", "{7E8CC864-4C6E-496F-A672-9F9AD8874835}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Squidex.Domain.Apps.Rules", "src\Squidex.Domain.Apps.Rules\Squidex.Domain.Apps.Rules.csproj", "{99B4B165-9146-4406-87AA-A6CD722E33D6}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -321,6 +323,18 @@ Global {7E8CC864-4C6E-496F-A672-9F9AD8874835}.Release|x64.Build.0 = Release|Any CPU {7E8CC864-4C6E-496F-A672-9F9AD8874835}.Release|x86.ActiveCfg = Release|Any CPU {7E8CC864-4C6E-496F-A672-9F9AD8874835}.Release|x86.Build.0 = Release|Any CPU + {99B4B165-9146-4406-87AA-A6CD722E33D6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {99B4B165-9146-4406-87AA-A6CD722E33D6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {99B4B165-9146-4406-87AA-A6CD722E33D6}.Debug|x64.ActiveCfg = Debug|Any CPU + {99B4B165-9146-4406-87AA-A6CD722E33D6}.Debug|x64.Build.0 = Debug|Any CPU + {99B4B165-9146-4406-87AA-A6CD722E33D6}.Debug|x86.ActiveCfg = Debug|Any CPU + {99B4B165-9146-4406-87AA-A6CD722E33D6}.Debug|x86.Build.0 = Debug|Any CPU + {99B4B165-9146-4406-87AA-A6CD722E33D6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {99B4B165-9146-4406-87AA-A6CD722E33D6}.Release|Any CPU.Build.0 = Release|Any CPU + {99B4B165-9146-4406-87AA-A6CD722E33D6}.Release|x64.ActiveCfg = Release|Any CPU + {99B4B165-9146-4406-87AA-A6CD722E33D6}.Release|x64.Build.0 = Release|Any CPU + {99B4B165-9146-4406-87AA-A6CD722E33D6}.Release|x86.ActiveCfg = Release|Any CPU + {99B4B165-9146-4406-87AA-A6CD722E33D6}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -349,6 +363,7 @@ Global {AA003372-CD8D-4DBC-962C-F61E0C93CF05} = {C9809D59-6665-471E-AD87-5AC624C65892} {7DA5B308-D950-4496-93D5-21D6C4D91644} = {C9809D59-6665-471E-AD87-5AC624C65892} {A4823E14-C0E5-4A4D-B28F-27424C25C3C7} = {94207AA6-4923-4183-A558-E0F8196B8CA3} + {99B4B165-9146-4406-87AA-A6CD722E33D6} = {C9809D59-6665-471E-AD87-5AC624C65892} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {02F2E872-3141-44F5-BD6A-33CD84E9FE08} diff --git a/src/Squidex.Domain.Apps.Core.Model/Rules/Actions/AzureQueueAction.cs b/src/Squidex.Domain.Apps.Core.Model/Rules/Actions/AzureQueueAction.cs deleted file mode 100644 index fc9178243..000000000 --- a/src/Squidex.Domain.Apps.Core.Model/Rules/Actions/AzureQueueAction.cs +++ /dev/null @@ -1,24 +0,0 @@ -// ========================================================================== -// Squidex Headless CMS -// ========================================================================== -// Copyright (c) Squidex UG (haftungsbeschraenkt) -// All rights reserved. Licensed under the MIT license. -// ========================================================================== - -using Squidex.Infrastructure; - -namespace Squidex.Domain.Apps.Core.Rules.Actions -{ - [TypeName(nameof(AzureQueueAction))] - public sealed class AzureQueueAction : RuleAction - { - public string ConnectionString { get; set; } - - public string Queue { get; set; } - - public override T Accept(IRuleActionVisitor visitor) - { - return visitor.Visit(this); - } - } -} diff --git a/src/Squidex.Domain.Apps.Core.Model/Rules/Actions/MediumAction.cs b/src/Squidex.Domain.Apps.Core.Model/Rules/Actions/MediumAction.cs deleted file mode 100644 index 406bff8a9..000000000 --- a/src/Squidex.Domain.Apps.Core.Model/Rules/Actions/MediumAction.cs +++ /dev/null @@ -1,32 +0,0 @@ -// ========================================================================== -// Squidex Headless CMS -// ========================================================================== -// Copyright (c) Squidex UG (haftungsbeschraenkt) -// All rights reserved. Licensed under the MIT license. -// ========================================================================== - -using Squidex.Infrastructure; - -namespace Squidex.Domain.Apps.Core.Rules.Actions -{ - [TypeName(nameof(MediumAction))] - public sealed class MediumAction : RuleAction - { - public string AccessToken { get; set; } - - public string Tags { get; set; } - - public string Title { get; set; } - - public string CanonicalUrl { get; set; } - - public string Content { get; set; } - - public bool IsHtml { get; set; } - - public override T Accept(IRuleActionVisitor visitor) - { - return visitor.Visit(this); - } - } -} diff --git a/src/Squidex.Domain.Apps.Core.Model/Rules/IRuleActionVisitor.cs b/src/Squidex.Domain.Apps.Core.Model/Rules/IRuleActionVisitor.cs deleted file mode 100644 index c331d0938..000000000 --- a/src/Squidex.Domain.Apps.Core.Model/Rules/IRuleActionVisitor.cs +++ /dev/null @@ -1,30 +0,0 @@ -// ========================================================================== -// Squidex Headless CMS -// ========================================================================== -// Copyright (c) Squidex UG (haftungsbeschränkt) -// All rights reserved. Licensed under the MIT license. -// ========================================================================== - -using Squidex.Domain.Apps.Core.Rules.Actions; - -namespace Squidex.Domain.Apps.Core.Rules -{ - public interface IRuleActionVisitor - { - T Visit(AlgoliaAction action); - - T Visit(AzureQueueAction action); - - T Visit(ElasticSearchAction action); - - T Visit(FastlyAction action); - - T Visit(MediumAction action); - - T Visit(SlackAction action); - - T Visit(TweetAction action); - - T Visit(WebhookAction action); - } -} diff --git a/src/Squidex.Domain.Apps.Core.Model/Rules/RuleAction.cs b/src/Squidex.Domain.Apps.Core.Model/Rules/RuleAction.cs index caaf409d0..10c8be123 100644 --- a/src/Squidex.Domain.Apps.Core.Model/Rules/RuleAction.cs +++ b/src/Squidex.Domain.Apps.Core.Model/Rules/RuleAction.cs @@ -5,10 +5,37 @@ // All rights reserved. Licensed under the MIT license. // ========================================================================== +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using Squidex.Infrastructure; + namespace Squidex.Domain.Apps.Core.Rules { public abstract class RuleAction : Freezable { - public abstract T Accept(IRuleActionVisitor visitor); + public IEnumerable Validate() + { + var context = new ValidationContext(this); + var errors = new List(); + + if (!Validator.TryValidateObject(this, context, errors, true)) + { + foreach (var error in errors) + { + yield return new ValidationError(error.ErrorMessage, error.MemberNames.ToArray()); + } + } + + foreach (var error in CustomValidate()) + { + yield return error; + } + } + + protected virtual IEnumerable CustomValidate() + { + yield break; + } } } diff --git a/src/Squidex.Domain.Apps.Core.Model/Squidex.Domain.Apps.Core.Model.csproj b/src/Squidex.Domain.Apps.Core.Model/Squidex.Domain.Apps.Core.Model.csproj index 50b9eddca..378079007 100644 --- a/src/Squidex.Domain.Apps.Core.Model/Squidex.Domain.Apps.Core.Model.csproj +++ b/src/Squidex.Domain.Apps.Core.Model/Squidex.Domain.Apps.Core.Model.csproj @@ -14,6 +14,7 @@ + diff --git a/src/Squidex.Domain.Apps.Core.Operations/Squidex.Domain.Apps.Core.Operations.csproj b/src/Squidex.Domain.Apps.Core.Operations/Squidex.Domain.Apps.Core.Operations.csproj index 62d82c371..6aaa7e4a6 100644 --- a/src/Squidex.Domain.Apps.Core.Operations/Squidex.Domain.Apps.Core.Operations.csproj +++ b/src/Squidex.Domain.Apps.Core.Operations/Squidex.Domain.Apps.Core.Operations.csproj @@ -14,19 +14,14 @@ - - - - - ..\..\Squidex.ruleset diff --git a/src/Squidex.Domain.Apps.Entities/Rules/Guards/GuardRule.cs b/src/Squidex.Domain.Apps.Entities/Rules/Guards/GuardRule.cs index 64974f4e0..b0dc20d30 100644 --- a/src/Squidex.Domain.Apps.Entities/Rules/Guards/GuardRule.cs +++ b/src/Squidex.Domain.Apps.Entities/Rules/Guards/GuardRule.cs @@ -38,7 +38,7 @@ namespace Squidex.Domain.Apps.Entities.Rules.Guards } else { - var errors = await RuleActionValidator.ValidateAsync(command.Action); + var errors = command.Action.Validate(); errors.Foreach(x => x.AddTo(e)); } @@ -65,7 +65,7 @@ namespace Squidex.Domain.Apps.Entities.Rules.Guards if (command.Action != null) { - var errors = await RuleActionValidator.ValidateAsync(command.Action); + var errors = command.Action.Validate(); errors.Foreach(x => x.AddTo(e)); } diff --git a/src/Squidex.Domain.Apps.Entities/Rules/Guards/RuleActionValidator.cs b/src/Squidex.Domain.Apps.Entities/Rules/Guards/RuleActionValidator.cs deleted file mode 100644 index 1d8a6bfca..000000000 --- a/src/Squidex.Domain.Apps.Entities/Rules/Guards/RuleActionValidator.cs +++ /dev/null @@ -1,173 +0,0 @@ -// ========================================================================== -// Squidex Headless CMS -// ========================================================================== -// Copyright (c) Squidex UG (haftungsbeschränkt) -// All rights reserved. Licensed under the MIT license. -// ========================================================================== - -using System.Collections.Generic; -using System.Text.RegularExpressions; -using System.Threading.Tasks; -using Squidex.Domain.Apps.Core.Rules; -using Squidex.Domain.Apps.Core.Rules.Actions; -using Squidex.Infrastructure; - -namespace Squidex.Domain.Apps.Entities.Rules.Guards -{ - public sealed class RuleActionValidator : IRuleActionVisitor>> - { - public static Task> ValidateAsync(RuleAction action) - { - Guard.NotNull(action, nameof(action)); - - var visitor = new RuleActionValidator(); - - return action.Accept(visitor); - } - - public Task> Visit(AlgoliaAction action) - { - var errors = new List(); - - if (string.IsNullOrWhiteSpace(action.ApiKey)) - { - errors.Add(new ValidationError("Api Key is required.", nameof(action.ApiKey))); - } - - if (string.IsNullOrWhiteSpace(action.AppId)) - { - errors.Add(new ValidationError("Application ID is required.", nameof(action.AppId))); - } - - if (string.IsNullOrWhiteSpace(action.IndexName)) - { - errors.Add(new ValidationError("Index name is required.", nameof(action.IndexName))); - } - - return Task.FromResult>(errors); - } - - public Task> Visit(AzureQueueAction action) - { - var errors = new List(); - - if (string.IsNullOrWhiteSpace(action.ConnectionString)) - { - errors.Add(new ValidationError("Connection string is required.", nameof(action.ConnectionString))); - } - - if (string.IsNullOrWhiteSpace(action.Queue)) - { - errors.Add(new ValidationError("Queue name is required.", nameof(action.Queue))); - } - else if (!Regex.IsMatch(action.Queue, "^[a-z][a-z0-9]{2,}(\\-[a-z0-9]+)*$")) - { - errors.Add(new ValidationError("Queue name must be valid azure queue name.", nameof(action.Queue))); - } - - return Task.FromResult>(errors); - } - - public Task> Visit(ElasticSearchAction action) - { - var errors = new List(); - - if (action.Host == null || !action.Host.IsAbsoluteUri) - { - errors.Add(new ValidationError("Host is required and must be an absolute URL.", nameof(action.Host))); - } - - if (string.IsNullOrWhiteSpace(action.IndexType)) - { - errors.Add(new ValidationError("Type name is required.", nameof(action.IndexType))); - } - - if (string.IsNullOrWhiteSpace(action.IndexName)) - { - errors.Add(new ValidationError("Index name is required.", nameof(action.IndexName))); - } - - return Task.FromResult>(errors); - } - - public Task> Visit(FastlyAction action) - { - var errors = new List(); - - if (string.IsNullOrWhiteSpace(action.ApiKey)) - { - errors.Add(new ValidationError("Api Key is required.", nameof(action.ApiKey))); - } - - if (string.IsNullOrWhiteSpace(action.ServiceId)) - { - errors.Add(new ValidationError("Service ID is required.", nameof(action.ServiceId))); - } - - return Task.FromResult>(errors); - } - - public Task> Visit(MediumAction action) - { - var errors = new List(); - - if (string.IsNullOrWhiteSpace(action.AccessToken)) - { - errors.Add(new ValidationError("Access token is required.", nameof(action.AccessToken))); - } - - if (string.IsNullOrWhiteSpace(action.Content)) - { - errors.Add(new ValidationError("Content is required.", nameof(action.Content))); - } - - if (string.IsNullOrWhiteSpace(action.Title)) - { - errors.Add(new ValidationError("Title is required.", nameof(action.Title))); - } - - return Task.FromResult>(errors); - } - - public Task> Visit(TweetAction action) - { - var errors = new List(); - - if (string.IsNullOrWhiteSpace(action.AccessToken)) - { - errors.Add(new ValidationError("Access Token is required.", nameof(action.AccessToken))); - } - - if (string.IsNullOrWhiteSpace(action.AccessSecret)) - { - errors.Add(new ValidationError("Access Secret is required.", nameof(action.AccessSecret))); - } - - return Task.FromResult>(errors); - } - - public Task> Visit(SlackAction action) - { - var errors = new List(); - - if (action.WebhookUrl == null || !action.WebhookUrl.IsAbsoluteUri) - { - errors.Add(new ValidationError("Webhook URL is required and must be an absolute URL.", nameof(action.WebhookUrl))); - } - - return Task.FromResult>(errors); - } - - public Task> Visit(WebhookAction action) - { - var errors = new List(); - - if (action.Url == null || !action.Url.IsAbsoluteUri) - { - errors.Add(new ValidationError("URL is required and must be an absolute URL.", nameof(action.Url))); - } - - return Task.FromResult>(errors); - } - } -} diff --git a/src/Squidex.Domain.Apps.Core.Model/Rules/Actions/AlgoliaAction.cs b/src/Squidex.Domain.Apps.Rules/Actions/Algolia/AlgoliaAction.cs similarity index 56% rename from src/Squidex.Domain.Apps.Core.Model/Rules/Actions/AlgoliaAction.cs rename to src/Squidex.Domain.Apps.Rules/Actions/Algolia/AlgoliaAction.cs index 33295be4a..230dea494 100644 --- a/src/Squidex.Domain.Apps.Core.Model/Rules/Actions/AlgoliaAction.cs +++ b/src/Squidex.Domain.Apps.Rules/Actions/Algolia/AlgoliaAction.cs @@ -5,22 +5,23 @@ // All rights reserved. Licensed under the MIT license. // ========================================================================== -using Squidex.Infrastructure; +using System.ComponentModel.DataAnnotations; +using Squidex.Domain.Apps.Core.Rules; -namespace Squidex.Domain.Apps.Core.Rules.Actions +namespace Squidex.Domain.Apps.Rules.Action.Algolia { - [TypeName(nameof(AlgoliaAction))] public sealed class AlgoliaAction : RuleAction { + [Required] + [Display(Name = "Application Id", Description = "The application ID.")] public string AppId { get; set; } + [Required] + [Display(Name = "Api Key", Description = "The API key to grant access to Squidex.")] public string ApiKey { get; set; } + [Required] + [Display(Name = "Index Name", Description = "THe name of the index.")] public string IndexName { get; set; } - - public override T Accept(IRuleActionVisitor visitor) - { - return visitor.Visit(this); - } } } diff --git a/src/Squidex.Domain.Apps.Core.Operations/HandleRules/Actions/AlgoliaActionHandler.cs b/src/Squidex.Domain.Apps.Rules/Actions/Algolia/AlgoliaActionHandler.cs similarity index 97% rename from src/Squidex.Domain.Apps.Core.Operations/HandleRules/Actions/AlgoliaActionHandler.cs rename to src/Squidex.Domain.Apps.Rules/Actions/Algolia/AlgoliaActionHandler.cs index 12d0bf225..ceceb843c 100644 --- a/src/Squidex.Domain.Apps.Core.Operations/HandleRules/Actions/AlgoliaActionHandler.cs +++ b/src/Squidex.Domain.Apps.Rules/Actions/Algolia/AlgoliaActionHandler.cs @@ -10,13 +10,13 @@ using System.Threading.Tasks; using Algolia.Search; using Newtonsoft.Json; using Newtonsoft.Json.Linq; +using Squidex.Domain.Apps.Core.HandleRules; using Squidex.Domain.Apps.Core.HandleRules.EnrichedEvents; -using Squidex.Domain.Apps.Core.Rules.Actions; using Squidex.Infrastructure; #pragma warning disable SA1649 // File name must match first type name -namespace Squidex.Domain.Apps.Core.HandleRules.Actions +namespace Squidex.Domain.Apps.Rules.Action.Algolia { public sealed class AlgoliaJob { diff --git a/src/Squidex.Domain.Apps.Rules/Actions/AzureQueue/AzureQueueAction.cs b/src/Squidex.Domain.Apps.Rules/Actions/AzureQueue/AzureQueueAction.cs new file mode 100644 index 000000000..1b06c55ca --- /dev/null +++ b/src/Squidex.Domain.Apps.Rules/Actions/AzureQueue/AzureQueueAction.cs @@ -0,0 +1,34 @@ +// ========================================================================== +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex UG (haftungsbeschraenkt) +// All rights reserved. Licensed under the MIT license. +// ========================================================================== + +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Text.RegularExpressions; +using Squidex.Domain.Apps.Core.Rules; +using Squidex.Infrastructure; + +namespace Squidex.Domain.Apps.Rules.Action.AzureQueue +{ + public sealed class AzureQueueAction : RuleAction + { + [Required] + [Display(Name = "Connection String", Description = "The connection string to the storage account.")] + public string ConnectionString { get; set; } + + [Required] + [Display(Name = "Queue", Description = "The name of the queue.")] + public string Queue { get; set; } + + protected override IEnumerable CustomValidate() + { + if (!string.IsNullOrWhiteSpace(Queue) && !Regex.IsMatch(Queue, "^[a-z][a-z0-9]{2,}(\\-[a-z0-9]+)*$")) + { + yield return new ValidationError("Queue must be valid azure queue name.", nameof(Queue)); + } + } + } +} diff --git a/src/Squidex.Domain.Apps.Core.Operations/HandleRules/Actions/AzureQueueActionHandler.cs b/src/Squidex.Domain.Apps.Rules/Actions/AzureQueue/AzureQueueActionHandler.cs similarity index 96% rename from src/Squidex.Domain.Apps.Core.Operations/HandleRules/Actions/AzureQueueActionHandler.cs rename to src/Squidex.Domain.Apps.Rules/Actions/AzureQueue/AzureQueueActionHandler.cs index 40dc6a85b..1863c9ad5 100644 --- a/src/Squidex.Domain.Apps.Core.Operations/HandleRules/Actions/AzureQueueActionHandler.cs +++ b/src/Squidex.Domain.Apps.Rules/Actions/AzureQueue/AzureQueueActionHandler.cs @@ -11,13 +11,13 @@ using Microsoft.WindowsAzure.Storage; using Microsoft.WindowsAzure.Storage.Queue; using Newtonsoft.Json; using Newtonsoft.Json.Linq; +using Squidex.Domain.Apps.Core.HandleRules; using Squidex.Domain.Apps.Core.HandleRules.EnrichedEvents; -using Squidex.Domain.Apps.Core.Rules.Actions; using Squidex.Infrastructure; #pragma warning disable SA1649 // File name must match first type name -namespace Squidex.Domain.Apps.Core.HandleRules.Actions +namespace Squidex.Domain.Apps.Rules.Action.AzureQueue { public sealed class AzureQueueJob { diff --git a/src/Squidex.Domain.Apps.Rules/Actions/ClientPool.cs b/src/Squidex.Domain.Apps.Rules/Actions/ClientPool.cs new file mode 100644 index 000000000..ffa253ef4 --- /dev/null +++ b/src/Squidex.Domain.Apps.Rules/Actions/ClientPool.cs @@ -0,0 +1,50 @@ +// ========================================================================== +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex UG (haftungsbeschraenkt) +// All rights reserved. Licensed under the MIT license. +// ========================================================================== + +using System; +using System.Threading.Tasks; +using Microsoft.Extensions.Caching.Memory; +using Microsoft.Extensions.Options; + +#pragma warning disable RECS0108 // Warns about static fields in generic types + +namespace Squidex.Domain.Apps.Rules.Action +{ + internal sealed class ClientPool + { + private static readonly TimeSpan TTL = TimeSpan.FromMinutes(30); + private readonly MemoryCache memoryCache = new MemoryCache(Options.Create(new MemoryCacheOptions())); + private readonly Func> factory; + + public ClientPool(Func factory) + { + this.factory = x => Task.FromResult(factory(x)); + } + + public ClientPool(Func> factory) + { + this.factory = factory; + } + + public TClient GetClient(TKey key) + { + return GetClientAsync(key).Result; + } + + public async Task GetClientAsync(TKey key) + { + if (!memoryCache.TryGetValue(key, out var client)) + { + client = await factory(key); + + memoryCache.Set(key, client, TTL); + } + + return client; + } + } +} diff --git a/src/Squidex.Domain.Apps.Core.Model/Rules/Actions/ElasticSearchAction.cs b/src/Squidex.Domain.Apps.Rules/Actions/ElasticSearch/ElasticSearchAction.cs similarity index 52% rename from src/Squidex.Domain.Apps.Core.Model/Rules/Actions/ElasticSearchAction.cs rename to src/Squidex.Domain.Apps.Rules/Actions/ElasticSearch/ElasticSearchAction.cs index e3623f25a..4903c3a33 100644 --- a/src/Squidex.Domain.Apps.Core.Model/Rules/Actions/ElasticSearchAction.cs +++ b/src/Squidex.Domain.Apps.Rules/Actions/ElasticSearch/ElasticSearchAction.cs @@ -6,26 +6,31 @@ // ========================================================================== using System; +using System.ComponentModel.DataAnnotations; +using Squidex.Domain.Apps.Core.Rules; using Squidex.Infrastructure; -namespace Squidex.Domain.Apps.Core.Rules.Actions +namespace Squidex.Domain.Apps.Rules.Action.ElasticSearch { - [TypeName(nameof(ElasticSearchAction))] public sealed class ElasticSearchAction : RuleAction { + [AbsoluteUrl] + [Required] + [Display(Name = "Host", Description = "The hostname of the elastic search instance or cluster.")] public Uri Host { get; set; } - public string Username { get; set; } - - public string Password { get; set; } - + [Required] + [Display(Name = "Index Name", Description = "The name of the index.")] public string IndexName { get; set; } + [Required] + [Display(Name = "Index Type", Description = "The name of the index type.")] public string IndexType { get; set; } - public override T Accept(IRuleActionVisitor visitor) - { - return visitor.Visit(this); - } + [Display(Name = "Username", Description = "The optional username.")] + public string Username { get; set; } + + [Display(Name = "Password", Description = "The optional password.")] + public string Password { get; set; } } } diff --git a/src/Squidex.Domain.Apps.Core.Operations/HandleRules/Actions/ElasticSearchActionHandler.cs b/src/Squidex.Domain.Apps.Rules/Actions/ElasticSearch/ElasticSearchActionHandler.cs similarity index 97% rename from src/Squidex.Domain.Apps.Core.Operations/HandleRules/Actions/ElasticSearchActionHandler.cs rename to src/Squidex.Domain.Apps.Rules/Actions/ElasticSearch/ElasticSearchActionHandler.cs index f07b51846..90023f661 100644 --- a/src/Squidex.Domain.Apps.Core.Operations/HandleRules/Actions/ElasticSearchActionHandler.cs +++ b/src/Squidex.Domain.Apps.Rules/Actions/ElasticSearch/ElasticSearchActionHandler.cs @@ -9,13 +9,13 @@ using System; using System.Threading.Tasks; using Elasticsearch.Net; using Newtonsoft.Json.Linq; +using Squidex.Domain.Apps.Core.HandleRules; using Squidex.Domain.Apps.Core.HandleRules.EnrichedEvents; -using Squidex.Domain.Apps.Core.Rules.Actions; using Squidex.Infrastructure; #pragma warning disable SA1649 // File name must match first type name -namespace Squidex.Domain.Apps.Core.HandleRules.Actions +namespace Squidex.Domain.Apps.Rules.Action.ElasticSearch { public sealed class ElasticSearchJob { diff --git a/src/Squidex.Domain.Apps.Core.Model/Rules/Actions/FastlyAction.cs b/src/Squidex.Domain.Apps.Rules/Actions/Fastly/FastlyAction.cs similarity index 60% rename from src/Squidex.Domain.Apps.Core.Model/Rules/Actions/FastlyAction.cs rename to src/Squidex.Domain.Apps.Rules/Actions/Fastly/FastlyAction.cs index 2d459d500..096eca62b 100644 --- a/src/Squidex.Domain.Apps.Core.Model/Rules/Actions/FastlyAction.cs +++ b/src/Squidex.Domain.Apps.Rules/Actions/Fastly/FastlyAction.cs @@ -5,20 +5,19 @@ // All rights reserved. Licensed under the MIT license. // ========================================================================== -using Squidex.Infrastructure; +using System.ComponentModel.DataAnnotations; +using Squidex.Domain.Apps.Core.Rules; -namespace Squidex.Domain.Apps.Core.Rules.Actions +namespace Squidex.Domain.Apps.Rules.Action.Fastly { - [TypeName(nameof(FastlyAction))] public sealed class FastlyAction : RuleAction { + [Required] + [Display(Name = "Api Key", Description = "The API key to grant access to Squidex.")] public string ApiKey { get; set; } + [Required] + [Display(Name = "Service Id", Description = "The ID of the fastly service.")] public string ServiceId { get; set; } - - public override T Accept(IRuleActionVisitor visitor) - { - return visitor.Visit(this); - } } } diff --git a/src/Squidex.Domain.Apps.Core.Operations/HandleRules/Actions/FastlyActionHandler.cs b/src/Squidex.Domain.Apps.Rules/Actions/Fastly/FastlyActionHandler.cs similarity index 95% rename from src/Squidex.Domain.Apps.Core.Operations/HandleRules/Actions/FastlyActionHandler.cs rename to src/Squidex.Domain.Apps.Rules/Actions/Fastly/FastlyActionHandler.cs index 07ed03cf4..55a33f993 100644 --- a/src/Squidex.Domain.Apps.Core.Operations/HandleRules/Actions/FastlyActionHandler.cs +++ b/src/Squidex.Domain.Apps.Rules/Actions/Fastly/FastlyActionHandler.cs @@ -8,17 +8,18 @@ using System; using System.Net.Http; using System.Threading.Tasks; +using Squidex.Domain.Apps.Core.HandleRules; using Squidex.Domain.Apps.Core.HandleRules.Actions.Utils; using Squidex.Domain.Apps.Core.HandleRules.EnrichedEvents; -using Squidex.Domain.Apps.Core.Rules.Actions; #pragma warning disable SA1649 // File name must match first type name -namespace Squidex.Domain.Apps.Core.HandleRules.Actions +namespace Squidex.Domain.Apps.Rules.Action.Fastly { public sealed class FastlyJob { public string FastlyApiKey { get; set; } + public string FastlyServiceID { get; set; } public string Key { get; set; } diff --git a/src/Squidex.Domain.Apps.Core.Operations/HandleRules/Actions/Utils/HttpHelper.cs b/src/Squidex.Domain.Apps.Rules/Actions/HttpHelper.cs similarity index 100% rename from src/Squidex.Domain.Apps.Core.Operations/HandleRules/Actions/Utils/HttpHelper.cs rename to src/Squidex.Domain.Apps.Rules/Actions/HttpHelper.cs diff --git a/src/Squidex.Domain.Apps.Rules/Actions/Medium/MediumAction.cs b/src/Squidex.Domain.Apps.Rules/Actions/Medium/MediumAction.cs new file mode 100644 index 000000000..2350ebaea --- /dev/null +++ b/src/Squidex.Domain.Apps.Rules/Actions/Medium/MediumAction.cs @@ -0,0 +1,36 @@ +// ========================================================================== +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex UG (haftungsbeschraenkt) +// All rights reserved. Licensed under the MIT license. +// ========================================================================== + +using System.ComponentModel.DataAnnotations; +using Squidex.Domain.Apps.Core.Rules; + +namespace Squidex.Domain.Apps.Rules.Action.Medium +{ + public sealed class MediumAction : RuleAction + { + [Required] + [Display(Name = "Access Token", Description = "The self issued access token.")] + public string AccessToken { get; set; } + + [Required] + [Display(Name = "Title", Description = "The title, used for the url.")] + public string Title { get; set; } + + [Required] + [Display(Name = "Content", Description = "The content, either html or markdown.")] + public string Content { get; set; } + + [Display(Name = "Canonical Url", Description = "The original home of this content, if it was originally published elsewhere.")] + public string CanonicalUrl { get; set; } + + [Display(Name = "Tags", Description = "The optional comma separated list of tags.")] + public string Tags { get; set; } + + [Display(Name = "Is Html", Description = "Indicates whether the content is markdown or html.")] + public bool IsHtml { get; set; } + } +} diff --git a/src/Squidex.Domain.Apps.Core.Operations/HandleRules/Actions/MediumActionHandler.cs b/src/Squidex.Domain.Apps.Rules/Actions/Medium/MediumActionHandler.cs similarity index 97% rename from src/Squidex.Domain.Apps.Core.Operations/HandleRules/Actions/MediumActionHandler.cs rename to src/Squidex.Domain.Apps.Rules/Actions/Medium/MediumActionHandler.cs index fae881a2a..95e91b08c 100644 --- a/src/Squidex.Domain.Apps.Core.Operations/HandleRules/Actions/MediumActionHandler.cs +++ b/src/Squidex.Domain.Apps.Rules/Actions/Medium/MediumActionHandler.cs @@ -5,21 +5,21 @@ // All rights reserved. Licensed under the MIT license. // ========================================================================== -#pragma warning disable SA1649 // File name must match first type name - using System; using System.Net.Http; using System.Text; using System.Threading.Tasks; using Newtonsoft.Json; using Newtonsoft.Json.Linq; +using Squidex.Domain.Apps.Core.HandleRules; using Squidex.Domain.Apps.Core.HandleRules.Actions.Utils; using Squidex.Domain.Apps.Core.HandleRules.EnrichedEvents; -using Squidex.Domain.Apps.Core.Rules.Actions; using Squidex.Infrastructure; using Squidex.Infrastructure.Http; -namespace Squidex.Domain.Apps.Core.HandleRules.Actions +#pragma warning disable SA1649 // File name must match first type name + +namespace Squidex.Domain.Apps.Rules.Action.Medium { public sealed class MediumJob { diff --git a/src/Squidex.Domain.Apps.Rules/Actions/RuleActionRegistry.cs b/src/Squidex.Domain.Apps.Rules/Actions/RuleActionRegistry.cs new file mode 100644 index 000000000..1ddab84b3 --- /dev/null +++ b/src/Squidex.Domain.Apps.Rules/Actions/RuleActionRegistry.cs @@ -0,0 +1,106 @@ +// ========================================================================== +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex UG (haftungsbeschraenkt) +// All rights reserved. Licensed under the MIT license. +// ========================================================================== + +using System; +using System.Collections.Generic; +using Squidex.Domain.Apps.Core.HandleRules; +using Squidex.Domain.Apps.Core.Rules; +using Squidex.Domain.Apps.Rules.Action.Algolia; +using Squidex.Domain.Apps.Rules.Action.AzureQueue; +using Squidex.Domain.Apps.Rules.Action.ElasticSearch; +using Squidex.Domain.Apps.Rules.Action.Fastly; +using Squidex.Domain.Apps.Rules.Action.Medium; +using Squidex.Domain.Apps.Rules.Action.Slack; +using Squidex.Domain.Apps.Rules.Action.Twitter; +using Squidex.Domain.Apps.Rules.Action.Webhook; +using Squidex.Infrastructure; + +namespace Squidex.Domain.Apps.Rules.Actions +{ + public static class RuleActionRegistry + { + private const string Suffix = "Action"; + private static readonly HashSet ActionHandlerTypes = new HashSet(); + private static readonly Dictionary ActionTypes = new Dictionary(); + + public static IReadOnlyDictionary Actions + { + get { return ActionTypes; } + } + + public static IReadOnlyCollection ActionHandlers + { + get { return ActionHandlerTypes; } + } + + static RuleActionRegistry() + { + Register< + AlgoliaAction, + AlgoliaActionHandler>(); + + Register< + AzureQueueAction, + AzureQueueActionHandler>(); + + Register< + ElasticSearchAction, + ElasticSearchActionHandler>(); + + Register< + FastlyAction, + FastlyActionHandler>(); + + Register< + MediumAction, + MediumActionHandler>(); + + Register< + SlackAction, + SlackActionHandler>(); + + Register< + TweetAction, + TweetActionHandler>(); + + Register< + WebhookAction, + WebhookActionHandler>(); + } + + public static void Register() where TAction : RuleAction where THandler : IRuleActionHandler + { + AddActionType(); + AddActionHandler(); + } + + private static void AddActionHandler() where THandler : IRuleActionHandler + { + ActionHandlerTypes.Add(typeof(THandler)); + } + + private static void AddActionType() where TAction : RuleAction + { + var name = typeof(TAction).Name; + + if (name.EndsWith(Suffix, StringComparison.Ordinal)) + { + name = name.Substring(0, name.Length - Suffix.Length); + } + + ActionTypes.Add(name, typeof(TAction)); + } + + public static void RegisterTypes(TypeNameRegistry typeNameRegistry) + { + foreach (var actionType in ActionTypes.Values) + { + typeNameRegistry.Map(actionType, actionType.Name); + } + } + } +} diff --git a/src/Squidex.Domain.Apps.Core.Model/Rules/Actions/SlackAction.cs b/src/Squidex.Domain.Apps.Rules/Actions/Slack/SlackAction.cs similarity index 60% rename from src/Squidex.Domain.Apps.Core.Model/Rules/Actions/SlackAction.cs rename to src/Squidex.Domain.Apps.Rules/Actions/Slack/SlackAction.cs index b669fe104..c799efcfb 100644 --- a/src/Squidex.Domain.Apps.Core.Model/Rules/Actions/SlackAction.cs +++ b/src/Squidex.Domain.Apps.Rules/Actions/Slack/SlackAction.cs @@ -6,20 +6,21 @@ // ========================================================================== using System; +using System.ComponentModel.DataAnnotations; +using Squidex.Domain.Apps.Core.Rules; using Squidex.Infrastructure; -namespace Squidex.Domain.Apps.Core.Rules.Actions +namespace Squidex.Domain.Apps.Rules.Action.Slack { - [TypeName(nameof(SlackAction))] public sealed class SlackAction : RuleAction { + [AbsoluteUrl] + [Required] + [Display(Name = "Webhook Url", Description = "The slack webhook url.")] public Uri WebhookUrl { get; set; } + [Required] + [Display(Name = "Text", Description = "The text that is sent as message to slack.")] public string Text { get; set; } - - public override T Accept(IRuleActionVisitor visitor) - { - return visitor.Visit(this); - } } } diff --git a/src/Squidex.Domain.Apps.Core.Operations/HandleRules/Actions/SlackActionHandler.cs b/src/Squidex.Domain.Apps.Rules/Actions/Slack/SlackActionHandler.cs similarity index 96% rename from src/Squidex.Domain.Apps.Core.Operations/HandleRules/Actions/SlackActionHandler.cs rename to src/Squidex.Domain.Apps.Rules/Actions/Slack/SlackActionHandler.cs index 4f25f2bac..246004808 100644 --- a/src/Squidex.Domain.Apps.Core.Operations/HandleRules/Actions/SlackActionHandler.cs +++ b/src/Squidex.Domain.Apps.Rules/Actions/Slack/SlackActionHandler.cs @@ -11,18 +11,19 @@ using System.Text; using System.Threading.Tasks; using Newtonsoft.Json; using Newtonsoft.Json.Linq; +using Squidex.Domain.Apps.Core.HandleRules; using Squidex.Domain.Apps.Core.HandleRules.Actions.Utils; using Squidex.Domain.Apps.Core.HandleRules.EnrichedEvents; -using Squidex.Domain.Apps.Core.Rules.Actions; using Squidex.Infrastructure; #pragma warning disable SA1649 // File name must match first type name -namespace Squidex.Domain.Apps.Core.HandleRules.Actions +namespace Squidex.Domain.Apps.Rules.Action.Slack { public sealed class SlackJob { public string RequestUrl { get; set; } + public string RequestBodyV2 { get; set; } public JObject RequestBody { get; set; } diff --git a/src/Squidex.Domain.Apps.Core.Model/Rules/Actions/TweetAction.cs b/src/Squidex.Domain.Apps.Rules/Actions/Twitter/TweetAction.cs similarity index 55% rename from src/Squidex.Domain.Apps.Core.Model/Rules/Actions/TweetAction.cs rename to src/Squidex.Domain.Apps.Rules/Actions/Twitter/TweetAction.cs index 5a6d8a26f..c3455906a 100644 --- a/src/Squidex.Domain.Apps.Core.Model/Rules/Actions/TweetAction.cs +++ b/src/Squidex.Domain.Apps.Rules/Actions/Twitter/TweetAction.cs @@ -5,22 +5,23 @@ // All rights reserved. Licensed under the MIT license. // ========================================================================== -using Squidex.Infrastructure; +using System.ComponentModel.DataAnnotations; +using Squidex.Domain.Apps.Core.Rules; -namespace Squidex.Domain.Apps.Core.Rules.Actions +namespace Squidex.Domain.Apps.Rules.Action.Twitter { - [TypeName(nameof(TweetAction))] public sealed class TweetAction : RuleAction { + [Required] + [Display(Name = "Access Token", Description = " The generated access token.")] public string AccessToken { get; set; } + [Required] + [Display(Name = "Access Secret", Description = " The generated access secret.")] public string AccessSecret { get; set; } + [Required] + [Display(Name = "Text", Description = "The text that is sent as tweet to twitter.")] public string Text { get; set; } - - public override T Accept(IRuleActionVisitor visitor) - { - return visitor.Visit(this); - } } } diff --git a/src/Squidex.Domain.Apps.Core.Operations/HandleRules/Actions/TweetActionHandler.cs b/src/Squidex.Domain.Apps.Rules/Actions/Twitter/TweetActionHandler.cs similarity index 96% rename from src/Squidex.Domain.Apps.Core.Operations/HandleRules/Actions/TweetActionHandler.cs rename to src/Squidex.Domain.Apps.Rules/Actions/Twitter/TweetActionHandler.cs index 570bc84bd..e3cf80f7d 100644 --- a/src/Squidex.Domain.Apps.Core.Operations/HandleRules/Actions/TweetActionHandler.cs +++ b/src/Squidex.Domain.Apps.Rules/Actions/Twitter/TweetActionHandler.cs @@ -9,13 +9,13 @@ using System; using System.Threading.Tasks; using CoreTweet; using Microsoft.Extensions.Options; +using Squidex.Domain.Apps.Core.HandleRules; using Squidex.Domain.Apps.Core.HandleRules.EnrichedEvents; -using Squidex.Domain.Apps.Core.Rules.Actions; using Squidex.Infrastructure; #pragma warning disable SA1649 // File name must match first type name -namespace Squidex.Domain.Apps.Core.HandleRules.Actions +namespace Squidex.Domain.Apps.Rules.Action.Twitter { public sealed class TweetJob { diff --git a/src/Squidex.Domain.Apps.Core.Model/Rules/Actions/TwitterOptions.cs b/src/Squidex.Domain.Apps.Rules/Actions/Twitter/TwitterOptions.cs similarity index 93% rename from src/Squidex.Domain.Apps.Core.Model/Rules/Actions/TwitterOptions.cs rename to src/Squidex.Domain.Apps.Rules/Actions/Twitter/TwitterOptions.cs index d2059d36f..f86f476c3 100644 --- a/src/Squidex.Domain.Apps.Core.Model/Rules/Actions/TwitterOptions.cs +++ b/src/Squidex.Domain.Apps.Rules/Actions/Twitter/TwitterOptions.cs @@ -5,7 +5,7 @@ // All rights reserved. Licensed under the MIT license. // ========================================================================== -namespace Squidex.Domain.Apps.Core.Rules.Actions +namespace Squidex.Domain.Apps.Rules.Action.Twitter { public sealed class TwitterOptions { diff --git a/src/Squidex.Domain.Apps.Core.Model/Rules/Actions/WebhookAction.cs b/src/Squidex.Domain.Apps.Rules/Actions/WebhookAction/WebhookAction.cs similarity index 60% rename from src/Squidex.Domain.Apps.Core.Model/Rules/Actions/WebhookAction.cs rename to src/Squidex.Domain.Apps.Rules/Actions/WebhookAction/WebhookAction.cs index 30a6c0707..3e98b2434 100644 --- a/src/Squidex.Domain.Apps.Core.Model/Rules/Actions/WebhookAction.cs +++ b/src/Squidex.Domain.Apps.Rules/Actions/WebhookAction/WebhookAction.cs @@ -6,20 +6,20 @@ // ========================================================================== using System; +using System.ComponentModel.DataAnnotations; +using Squidex.Domain.Apps.Core.Rules; using Squidex.Infrastructure; -namespace Squidex.Domain.Apps.Core.Rules.Actions +namespace Squidex.Domain.Apps.Rules.Action.Webhook { - [TypeName(nameof(WebhookAction))] public sealed class WebhookAction : RuleAction { + [AbsoluteUrl] + [Required] + [Display(Name = "Url", Description = "he url of the webhook.")] public Uri Url { get; set; } + [Display(Name = "Shared Secret", Description = "The shared secret that is used to calculate the signature.")] public string SharedSecret { get; set; } - - public override T Accept(IRuleActionVisitor visitor) - { - return visitor.Visit(this); - } } } diff --git a/src/Squidex.Domain.Apps.Core.Operations/HandleRules/Actions/WebhookActionHandler.cs b/src/Squidex.Domain.Apps.Rules/Actions/WebhookAction/WebhookActionHandler.cs similarity index 97% rename from src/Squidex.Domain.Apps.Core.Operations/HandleRules/Actions/WebhookActionHandler.cs rename to src/Squidex.Domain.Apps.Rules/Actions/WebhookAction/WebhookActionHandler.cs index ca7e9035b..0fe594fe9 100644 --- a/src/Squidex.Domain.Apps.Core.Operations/HandleRules/Actions/WebhookActionHandler.cs +++ b/src/Squidex.Domain.Apps.Rules/Actions/WebhookAction/WebhookActionHandler.cs @@ -11,14 +11,14 @@ using System.Text; using System.Threading.Tasks; using Newtonsoft.Json; using Newtonsoft.Json.Linq; +using Squidex.Domain.Apps.Core.HandleRules; using Squidex.Domain.Apps.Core.HandleRules.Actions.Utils; using Squidex.Domain.Apps.Core.HandleRules.EnrichedEvents; -using Squidex.Domain.Apps.Core.Rules.Actions; using Squidex.Infrastructure; #pragma warning disable SA1649 // File name must match first type name -namespace Squidex.Domain.Apps.Core.HandleRules.Actions +namespace Squidex.Domain.Apps.Rules.Action.Webhook { public sealed class WebhookJob { diff --git a/src/Squidex.Domain.Apps.Rules/Squidex.Domain.Apps.Rules.csproj b/src/Squidex.Domain.Apps.Rules/Squidex.Domain.Apps.Rules.csproj new file mode 100644 index 000000000..bc521b28e --- /dev/null +++ b/src/Squidex.Domain.Apps.Rules/Squidex.Domain.Apps.Rules.csproj @@ -0,0 +1,34 @@ + + + netstandard2.0 + + + full + True + + + + + + + + + + + + + + + + + + + + + + ..\..\Squidex.ruleset + + + + + diff --git a/src/Squidex.Infrastructure/AbsoluteUrlAttribute.cs b/src/Squidex.Infrastructure/AbsoluteUrlAttribute.cs new file mode 100644 index 000000000..e9241d5e9 --- /dev/null +++ b/src/Squidex.Infrastructure/AbsoluteUrlAttribute.cs @@ -0,0 +1,30 @@ +// ========================================================================== +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex UG (haftungsbeschraenkt) +// All rights reserved. Licensed under the MIT license. +// ========================================================================== + +using System; +using System.ComponentModel.DataAnnotations; + +namespace Squidex.Infrastructure +{ + public sealed class AbsoluteUrlAttribute : ValidationAttribute + { + public AbsoluteUrlAttribute() + : base(() => "The {0} field must be an absolute URL.") + { + } + + public override bool IsValid(object value) + { + if (value is Uri uri && !uri.IsAbsoluteUri) + { + return false; + } + + return true; + } + } +} diff --git a/src/Squidex.Infrastructure/Squidex.Infrastructure.csproj b/src/Squidex.Infrastructure/Squidex.Infrastructure.csproj index 068ac6153..82c739b5c 100644 --- a/src/Squidex.Infrastructure/Squidex.Infrastructure.csproj +++ b/src/Squidex.Infrastructure/Squidex.Infrastructure.csproj @@ -19,6 +19,7 @@ + diff --git a/src/Squidex/AppServices.cs b/src/Squidex/AppServices.cs index 380c4df53..4e8cfcc54 100644 --- a/src/Squidex/AppServices.cs +++ b/src/Squidex/AppServices.cs @@ -14,7 +14,7 @@ using Squidex.Config; using Squidex.Config.Authentication; using Squidex.Config.Domain; using Squidex.Config.Web; -using Squidex.Domain.Apps.Core.Rules.Actions; +using Squidex.Domain.Apps.Rules.Action.Twitter; using Squidex.Infrastructure.Commands; namespace Squidex diff --git a/src/Squidex/Areas/Api/Config/Swagger/SwaggerServices.cs b/src/Squidex/Areas/Api/Config/Swagger/SwaggerServices.cs index 8dcb687d8..e4367b418 100644 --- a/src/Squidex/Areas/Api/Config/Swagger/SwaggerServices.cs +++ b/src/Squidex/Areas/Api/Config/Swagger/SwaggerServices.cs @@ -15,6 +15,7 @@ using NSwag.AspNetCore; using NSwag.SwaggerGeneration; using NSwag.SwaggerGeneration.Processors.Security; using Squidex.Areas.Api.Controllers.Contents.Generator; +using Squidex.Areas.Api.Controllers.Rules.Models; using Squidex.Config; using Squidex.Infrastructure; using Squidex.Pipeline.Swagger; @@ -102,6 +103,7 @@ namespace Squidex.Areas.Api.Config.Swagger new PrimitiveTypeMapper(typeof(RefToken), s => s.Type = JsonObjectType.String) }; + settings.GeneratorSettings.DocumentProcessors.Add(new RuleActionProcessor()); settings.GeneratorSettings.DocumentProcessors.Add(new XmlTagProcessor()); settings.GeneratorSettings.OperationProcessors.Add(new XmlTagProcessor()); diff --git a/src/Squidex/Areas/Api/Controllers/JsonInheritanceConverter.cs b/src/Squidex/Areas/Api/Controllers/JsonInheritanceConverter.cs index af9b07000..6167ebc0a 100644 --- a/src/Squidex/Areas/Api/Controllers/JsonInheritanceConverter.cs +++ b/src/Squidex/Areas/Api/Controllers/JsonInheritanceConverter.cs @@ -29,6 +29,11 @@ namespace Squidex.Areas.Api.Controllers [ThreadStatic] private static bool IsWriting; + public string DiscriminatorName + { + get { return discriminator; } + } + public override bool CanWrite { get @@ -64,6 +69,7 @@ namespace Squidex.Areas.Api.Controllers var name = type.GetTypeInfo().GetCustomAttribute()?.Name ?? type.Name; mapTypeToName[type] = name; + mapNameToType[name] = type; } } diff --git a/src/Squidex/Areas/Api/Controllers/Rules/Models/Actions/AlgoliaActionDto.cs b/src/Squidex/Areas/Api/Controllers/Rules/Models/Actions/AlgoliaActionDto.cs deleted file mode 100644 index e561386c9..000000000 --- a/src/Squidex/Areas/Api/Controllers/Rules/Models/Actions/AlgoliaActionDto.cs +++ /dev/null @@ -1,42 +0,0 @@ -// ========================================================================== -// Squidex Headless CMS -// ========================================================================== -// Copyright (c) Squidex UG (haftungsbeschränkt) -// All rights reserved. Licensed under the MIT license. -// ========================================================================== - -using System.ComponentModel.DataAnnotations; -using NJsonSchema.Annotations; -using Squidex.Domain.Apps.Core.Rules; -using Squidex.Domain.Apps.Core.Rules.Actions; -using Squidex.Infrastructure.Reflection; - -namespace Squidex.Areas.Api.Controllers.Rules.Models.Actions -{ - [JsonSchema("Algolia")] - public sealed class AlgoliaActionDto : RuleActionDto - { - /// - /// The application ID. - /// - [Required] - public string AppId { get; set; } - - /// - /// The API key to grant access to Squidex. - /// - [Required] - public string ApiKey { get; set; } - - /// - /// The name of the index. - /// - [Required] - public string IndexName { get; set; } - - public override RuleAction ToAction() - { - return SimpleMapper.Map(this, new AlgoliaAction()); - } - } -} diff --git a/src/Squidex/Areas/Api/Controllers/Rules/Models/Actions/AzureQueueActionDto.cs b/src/Squidex/Areas/Api/Controllers/Rules/Models/Actions/AzureQueueActionDto.cs deleted file mode 100644 index bfcafb1ac..000000000 --- a/src/Squidex/Areas/Api/Controllers/Rules/Models/Actions/AzureQueueActionDto.cs +++ /dev/null @@ -1,36 +0,0 @@ -// ========================================================================== -// Squidex Headless CMS -// ========================================================================== -// Copyright (c) Squidex UG (haftungsbeschränkt) -// All rights reserved. Licensed under the MIT license. -// ========================================================================== - -using System.ComponentModel.DataAnnotations; -using NJsonSchema.Annotations; -using Squidex.Domain.Apps.Core.Rules; -using Squidex.Domain.Apps.Core.Rules.Actions; -using Squidex.Infrastructure.Reflection; - -namespace Squidex.Areas.Api.Controllers.Rules.Models.Actions -{ - [JsonSchema("AzureQueue")] - public class AzureQueueActionDto : RuleActionDto - { - /// - /// The connection string to the storage account. - /// - [Required] - public string ConnectionString { get; set; } - - /// - /// The queue name. - /// - [Required] - public string Queue { get; set; } - - public override RuleAction ToAction() - { - return SimpleMapper.Map(this, new AzureQueueAction()); - } - } -} diff --git a/src/Squidex/Areas/Api/Controllers/Rules/Models/Actions/ElasticSearchActionDto.cs b/src/Squidex/Areas/Api/Controllers/Rules/Models/Actions/ElasticSearchActionDto.cs deleted file mode 100644 index 68ba5758e..000000000 --- a/src/Squidex/Areas/Api/Controllers/Rules/Models/Actions/ElasticSearchActionDto.cs +++ /dev/null @@ -1,53 +0,0 @@ -// ========================================================================== -// Squidex Headless CMS -// ========================================================================== -// Copyright (c) Squidex UG (haftungsbeschränkt) -// All rights reserved. Licensed under the MIT license. -// ========================================================================== - -using System; -using System.ComponentModel.DataAnnotations; -using NJsonSchema.Annotations; -using Squidex.Domain.Apps.Core.Rules; -using Squidex.Domain.Apps.Core.Rules.Actions; -using Squidex.Infrastructure.Reflection; - -namespace Squidex.Areas.Api.Controllers.Rules.Models.Actions -{ - [JsonSchema("ElasticSearch")] - public sealed class ElasticSearchActionDto : RuleActionDto - { - /// - /// The host to the elastic search instance. - /// - [Required] - public Uri Host { get; set; } - - /// - /// The name of the index. - /// - [Required] - public string IndexName { get; set; } - - /// - /// The name of the index type. - /// - [Required] - public string IndexType { get; set; } - - /// - /// The optional username for authentication. - /// - public string Username { get; set; } - - /// - /// The optional password for authentication. - /// - public string Password { get; set; } - - public override RuleAction ToAction() - { - return SimpleMapper.Map(this, new ElasticSearchAction()); - } - } -} diff --git a/src/Squidex/Areas/Api/Controllers/Rules/Models/Actions/FastlyActionDto.cs b/src/Squidex/Areas/Api/Controllers/Rules/Models/Actions/FastlyActionDto.cs deleted file mode 100644 index c9431f02e..000000000 --- a/src/Squidex/Areas/Api/Controllers/Rules/Models/Actions/FastlyActionDto.cs +++ /dev/null @@ -1,36 +0,0 @@ -// ========================================================================== -// Squidex Headless CMS -// ========================================================================== -// Copyright (c) Squidex UG (haftungsbeschränkt) -// All rights reserved. Licensed under the MIT license. -// ========================================================================== - -using System.ComponentModel.DataAnnotations; -using NJsonSchema.Annotations; -using Squidex.Domain.Apps.Core.Rules; -using Squidex.Domain.Apps.Core.Rules.Actions; -using Squidex.Infrastructure.Reflection; - -namespace Squidex.Areas.Api.Controllers.Rules.Models.Actions -{ - [JsonSchema("Fastly")] - public sealed class FastlyActionDto : RuleActionDto - { - /// - /// The ID of the fastly service. - /// - [Required] - public string ServiceId { get; set; } - - /// - /// The API key to grant access to Squidex. - /// - [Required] - public string ApiKey { get; set; } - - public override RuleAction ToAction() - { - return SimpleMapper.Map(this, new FastlyAction()); - } - } -} diff --git a/src/Squidex/Areas/Api/Controllers/Rules/Models/Actions/MediumActionDto.cs b/src/Squidex/Areas/Api/Controllers/Rules/Models/Actions/MediumActionDto.cs deleted file mode 100644 index 3d52a238e..000000000 --- a/src/Squidex/Areas/Api/Controllers/Rules/Models/Actions/MediumActionDto.cs +++ /dev/null @@ -1,57 +0,0 @@ -// ========================================================================== -// Squidex Headless CMS -// ========================================================================== -// Copyright (c) Squidex UG (haftungsbeschraenkt) -// All rights reserved. Licensed under the MIT license. -// ========================================================================== - -using System.ComponentModel.DataAnnotations; -using NJsonSchema.Annotations; -using Squidex.Domain.Apps.Core.Rules; -using Squidex.Domain.Apps.Core.Rules.Actions; -using Squidex.Infrastructure.Reflection; - -namespace Squidex.Areas.Api.Controllers.Rules.Models.Actions -{ - [JsonSchema("Medium")] - public class MediumActionDto : RuleActionDto - { - /// - /// The self issued access token. - /// - [Required] - public string AccessToken { get; set; } - - /// - /// The optional comma separated list of tags. - /// - public string Tags { get; set; } - - /// - /// The title, used for the url. - /// - [Required] - public string Title { get; set; } - - /// - /// The content, either html or markdown. - /// - [Required] - public string Content { get; set; } - - /// - /// The original home of this content, if it was originally published elsewhere. - /// - public string CanonicalUrl { get; set; } - - /// - /// Indicates whether the content is markdown or html. - /// - public bool IsHtml { get; set; } - - public override RuleAction ToAction() - { - return SimpleMapper.Map(this, new MediumAction()); - } - } -} diff --git a/src/Squidex/Areas/Api/Controllers/Rules/Models/Actions/SlackActionDto.cs b/src/Squidex/Areas/Api/Controllers/Rules/Models/Actions/SlackActionDto.cs deleted file mode 100644 index 553db29d1..000000000 --- a/src/Squidex/Areas/Api/Controllers/Rules/Models/Actions/SlackActionDto.cs +++ /dev/null @@ -1,36 +0,0 @@ -// ========================================================================== -// Squidex Headless CMS -// ========================================================================== -// Copyright (c) Squidex UG (haftungsbeschränkt) -// All rights reserved. Licensed under the MIT license. -// ========================================================================== - -using System; -using System.ComponentModel.DataAnnotations; -using NJsonSchema.Annotations; -using Squidex.Domain.Apps.Core.Rules; -using Squidex.Domain.Apps.Core.Rules.Actions; -using Squidex.Infrastructure.Reflection; - -namespace Squidex.Areas.Api.Controllers.Rules.Models.Actions -{ - [JsonSchema("Slack")] - public sealed class SlackActionDto : RuleActionDto - { - /// - /// The slack webhook url. - /// - [Required] - public Uri WebhookUrl { get; set; } - - /// - /// The text that is sent as message to slack. - /// - public string Text { get; set; } - - public override RuleAction ToAction() - { - return SimpleMapper.Map(this, new SlackAction()); - } - } -} diff --git a/src/Squidex/Areas/Api/Controllers/Rules/Models/Actions/TweetActionDto.cs b/src/Squidex/Areas/Api/Controllers/Rules/Models/Actions/TweetActionDto.cs deleted file mode 100644 index 83c5d56c3..000000000 --- a/src/Squidex/Areas/Api/Controllers/Rules/Models/Actions/TweetActionDto.cs +++ /dev/null @@ -1,41 +0,0 @@ -// ========================================================================== -// Squidex Headless CMS -// ========================================================================== -// Copyright (c) Squidex UG (haftungsbeschränkt) -// All rights reserved. Licensed under the MIT license. -// ========================================================================== - -using System.ComponentModel.DataAnnotations; -using NJsonSchema.Annotations; -using Squidex.Domain.Apps.Core.Rules; -using Squidex.Domain.Apps.Core.Rules.Actions; -using Squidex.Infrastructure.Reflection; - -namespace Squidex.Areas.Api.Controllers.Rules.Models.Actions -{ - [JsonSchema("Tweet")] - public sealed class TweetActionDto : RuleActionDto - { - /// - /// The access token. - /// - [Required] - public string AccessToken { get; set; } - - /// - /// The access secret. - /// - [Required] - public string AccessSecret { get; set; } - - /// - /// The text that is sent as tweet to twitter. - /// - public string Text { get; set; } - - public override RuleAction ToAction() - { - return SimpleMapper.Map(this, new TweetAction()); - } - } -} diff --git a/src/Squidex/Areas/Api/Controllers/Rules/Models/Actions/WebhookActionDto.cs b/src/Squidex/Areas/Api/Controllers/Rules/Models/Actions/WebhookActionDto.cs deleted file mode 100644 index 64feb9189..000000000 --- a/src/Squidex/Areas/Api/Controllers/Rules/Models/Actions/WebhookActionDto.cs +++ /dev/null @@ -1,36 +0,0 @@ -// ========================================================================== -// Squidex Headless CMS -// ========================================================================== -// Copyright (c) Squidex UG (haftungsbeschränkt) -// All rights reserved. Licensed under the MIT license. -// ========================================================================== - -using System; -using System.ComponentModel.DataAnnotations; -using NJsonSchema.Annotations; -using Squidex.Domain.Apps.Core.Rules; -using Squidex.Domain.Apps.Core.Rules.Actions; -using Squidex.Infrastructure.Reflection; - -namespace Squidex.Areas.Api.Controllers.Rules.Models.Actions -{ - [JsonSchema("Webhook")] - public sealed class WebhookActionDto : RuleActionDto - { - /// - /// The url of the rule. - /// - [Required] - public Uri Url { get; set; } - - /// - /// The shared secret that is used to calculate the signature. - /// - public string SharedSecret { get; set; } - - public override RuleAction ToAction() - { - return SimpleMapper.Map(this, new WebhookAction()); - } - } -} diff --git a/src/Squidex/Areas/Api/Controllers/Rules/Models/Converters/RuleActionDtoFactory.cs b/src/Squidex/Areas/Api/Controllers/Rules/Models/Converters/RuleActionDtoFactory.cs deleted file mode 100644 index 4207aed35..000000000 --- a/src/Squidex/Areas/Api/Controllers/Rules/Models/Converters/RuleActionDtoFactory.cs +++ /dev/null @@ -1,68 +0,0 @@ -// ========================================================================== -// Squidex Headless CMS -// ========================================================================== -// Copyright (c) Squidex UG (haftungsbeschränkt) -// All rights reserved. Licensed under the MIT license. -// ========================================================================== - -using Squidex.Areas.Api.Controllers.Rules.Models.Actions; -using Squidex.Domain.Apps.Core.Rules; -using Squidex.Domain.Apps.Core.Rules.Actions; -using Squidex.Infrastructure.Reflection; - -namespace Squidex.Areas.Api.Controllers.Rules.Models.Converters -{ - public sealed class RuleActionDtoFactory : IRuleActionVisitor - { - private static readonly RuleActionDtoFactory Instance = new RuleActionDtoFactory(); - - private RuleActionDtoFactory() - { - } - - public static RuleActionDto Create(RuleAction properties) - { - return properties.Accept(Instance); - } - - public RuleActionDto Visit(AlgoliaAction action) - { - return SimpleMapper.Map(action, new AlgoliaActionDto()); - } - - public RuleActionDto Visit(AzureQueueAction action) - { - return SimpleMapper.Map(action, new AzureQueueActionDto()); - } - - public RuleActionDto Visit(ElasticSearchAction action) - { - return SimpleMapper.Map(action, new ElasticSearchActionDto()); - } - - public RuleActionDto Visit(FastlyAction action) - { - return SimpleMapper.Map(action, new FastlyActionDto()); - } - - public RuleActionDto Visit(MediumAction action) - { - return SimpleMapper.Map(action, new MediumActionDto()); - } - - public RuleActionDto Visit(SlackAction action) - { - return SimpleMapper.Map(action, new SlackActionDto()); - } - - public RuleActionDto Visit(TweetAction action) - { - return SimpleMapper.Map(action, new TweetActionDto()); - } - - public RuleActionDto Visit(WebhookAction action) - { - return SimpleMapper.Map(action, new WebhookActionDto()); - } - } -} diff --git a/src/Squidex/Areas/Api/Controllers/Rules/Models/CreateRuleDto.cs b/src/Squidex/Areas/Api/Controllers/Rules/Models/CreateRuleDto.cs index 1d6a0de1b..45c4eaacc 100644 --- a/src/Squidex/Areas/Api/Controllers/Rules/Models/CreateRuleDto.cs +++ b/src/Squidex/Areas/Api/Controllers/Rules/Models/CreateRuleDto.cs @@ -6,6 +6,8 @@ // ========================================================================== using System.ComponentModel.DataAnnotations; +using Newtonsoft.Json; +using Squidex.Domain.Apps.Core.Rules; using Squidex.Domain.Apps.Entities.Rules.Commands; namespace Squidex.Areas.Api.Controllers.Rules.Models @@ -22,16 +24,12 @@ namespace Squidex.Areas.Api.Controllers.Rules.Models /// The action properties. /// [Required] - public RuleActionDto Action { get; set; } + [JsonConverter(typeof(JsonInheritanceConverter), "actionType", typeof(RuleAction))] + public RuleAction Action { get; set; } public CreateRule ToCommand() { - var command = new CreateRule(); - - if (Action != null) - { - command.Action = Action.ToAction(); - } + var command = new CreateRule { Action = Action }; if (Trigger != null) { diff --git a/src/Squidex/Areas/Api/Controllers/Rules/Models/RuleActionDto.cs b/src/Squidex/Areas/Api/Controllers/Rules/Models/RuleActionDto.cs deleted file mode 100644 index 5cf41aa29..000000000 --- a/src/Squidex/Areas/Api/Controllers/Rules/Models/RuleActionDto.cs +++ /dev/null @@ -1,29 +0,0 @@ -// ========================================================================== -// Squidex Headless CMS -// ========================================================================== -// Copyright (c) Squidex UG (haftungsbeschränkt) -// All rights reserved. Licensed under the MIT license. -// ========================================================================== - -using System; -using System.Linq; -using System.Runtime.Serialization; -using Newtonsoft.Json; -using Squidex.Domain.Apps.Core.Rules; - -namespace Squidex.Areas.Api.Controllers.Rules.Models -{ - [JsonConverter(typeof(JsonInheritanceConverter), "actionType", typeof(RuleActionDto))] - [KnownType(nameof(Subtypes))] - public abstract class RuleActionDto - { - public abstract RuleAction ToAction(); - - public static Type[] Subtypes() - { - var type = typeof(RuleActionDto); - - return type.Assembly.GetTypes().Where(type.IsAssignableFrom).ToArray(); - } - } -} diff --git a/src/Squidex/Areas/Api/Controllers/Rules/Models/RuleActionProcessor.cs b/src/Squidex/Areas/Api/Controllers/Rules/Models/RuleActionProcessor.cs new file mode 100644 index 000000000..b6a61fd24 --- /dev/null +++ b/src/Squidex/Areas/Api/Controllers/Rules/Models/RuleActionProcessor.cs @@ -0,0 +1,63 @@ +// ========================================================================== +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex UG (haftungsbeschränkt) +// All rights reserved. Licensed under the MIT license. +// ========================================================================== + +using System.Linq; +using System.Threading.Tasks; +using NJsonSchema; +using NSwag.SwaggerGeneration.Processors; +using NSwag.SwaggerGeneration.Processors.Contexts; +using Squidex.Domain.Apps.Core.Rules; +using Squidex.Domain.Apps.Rules.Actions; + +namespace Squidex.Areas.Api.Controllers.Rules.Models +{ + public sealed class RuleActionProcessor : IDocumentProcessor + { + public async Task ProcessAsync(DocumentProcessorContext context) + { + var schema = context.SchemaResolver.GetSchema(typeof(RuleAction), false); + + if (schema != null) + { + var discriminator = new OpenApiDiscriminator + { + JsonInheritanceConverter = new JsonInheritanceConverter("actionType", typeof(RuleAction)), + PropertyName = "actionType" + }; + + schema.DiscriminatorObject = discriminator; + schema.Properties["actionType"] = new JsonProperty + { + Type = JsonObjectType.String, + IsRequired = true + }; + + foreach (var derived in RuleActionRegistry.Actions) + { + var derivedSchema = await context.SchemaGenerator.GenerateAsync(derived.Value, context.SchemaResolver); + + var oldName = context.Document.Definitions.FirstOrDefault(x => x.Value == derivedSchema).Key; + + if (oldName != null) + { + context.Document.Definitions.Remove(oldName); + context.Document.Definitions.Add(derived.Key, derivedSchema); + } + } + + RemoveFreezable(context, schema); + } + } + + private static void RemoveFreezable(DocumentProcessorContext context, JsonSchema4 schema) + { + context.Document.Definitions.Remove("Freezable"); + + schema.AllOf.Clear(); + } + } +} diff --git a/src/Squidex/Areas/Api/Controllers/Rules/Models/RuleDto.cs b/src/Squidex/Areas/Api/Controllers/Rules/Models/RuleDto.cs index 097eaaf84..4a5a9c01a 100644 --- a/src/Squidex/Areas/Api/Controllers/Rules/Models/RuleDto.cs +++ b/src/Squidex/Areas/Api/Controllers/Rules/Models/RuleDto.cs @@ -7,8 +7,10 @@ using System; using System.ComponentModel.DataAnnotations; +using Newtonsoft.Json; using NodaTime; using Squidex.Areas.Api.Controllers.Rules.Models.Converters; +using Squidex.Domain.Apps.Core.Rules; using Squidex.Domain.Apps.Entities.Rules; using Squidex.Infrastructure; using Squidex.Infrastructure.Reflection; @@ -49,6 +51,11 @@ namespace Squidex.Areas.Api.Controllers.Rules.Models /// public int Version { get; set; } + /// + /// Determines if the rule is enabled. + /// + public bool IsEnabled { get; set; } + /// /// The trigger properties. /// @@ -59,12 +66,8 @@ namespace Squidex.Areas.Api.Controllers.Rules.Models /// The action properties. /// [Required] - public RuleActionDto Action { get; set; } - - /// - /// Determines if the rule is enabled. - /// - public bool IsEnabled { get; set; } + [JsonConverter(typeof(JsonInheritanceConverter), "actionType", typeof(RuleAction))] + public RuleAction Action { get; set; } public static RuleDto FromRule(IRuleEntity rule) { @@ -78,11 +81,6 @@ namespace Squidex.Areas.Api.Controllers.Rules.Models response.Trigger = RuleTriggerDtoFactory.Create(rule.RuleDef.Trigger); } - if (rule.RuleDef.Action != null) - { - response.Action = RuleActionDtoFactory.Create(rule.RuleDef.Action); - } - return response; } } diff --git a/src/Squidex/Areas/Api/Controllers/Rules/Models/UpdateRuleDto.cs b/src/Squidex/Areas/Api/Controllers/Rules/Models/UpdateRuleDto.cs index 1f4280018..9ebff6c59 100644 --- a/src/Squidex/Areas/Api/Controllers/Rules/Models/UpdateRuleDto.cs +++ b/src/Squidex/Areas/Api/Controllers/Rules/Models/UpdateRuleDto.cs @@ -6,6 +6,8 @@ // ========================================================================== using System; +using Newtonsoft.Json; +using Squidex.Domain.Apps.Core.Rules; using Squidex.Domain.Apps.Entities.Rules.Commands; namespace Squidex.Areas.Api.Controllers.Rules.Models @@ -20,16 +22,12 @@ namespace Squidex.Areas.Api.Controllers.Rules.Models /// /// The action properties. /// - public RuleActionDto Action { get; set; } + [JsonConverter(typeof(JsonInheritanceConverter), "actionType", typeof(RuleAction))] + public RuleAction Action { get; set; } public UpdateRule ToCommand(Guid id) { - var command = new UpdateRule { RuleId = id }; - - if (Action != null) - { - command.Action = Action.ToAction(); - } + var command = new UpdateRule { RuleId = id, Action = Action }; if (Trigger != null) { diff --git a/src/Squidex/Areas/Api/Controllers/Rules/TwitterController.cs b/src/Squidex/Areas/Api/Controllers/Rules/TwitterController.cs index b612e0c49..7cb915234 100644 --- a/src/Squidex/Areas/Api/Controllers/Rules/TwitterController.cs +++ b/src/Squidex/Areas/Api/Controllers/Rules/TwitterController.cs @@ -8,7 +8,7 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Options; -using Squidex.Domain.Apps.Core.Rules.Actions; +using Squidex.Domain.Apps.Rules.Action.Twitter; using static CoreTweet.OAuth; namespace Squidex.Areas.Api.Controllers.Rules diff --git a/src/Squidex/Areas/Api/Controllers/UI/UIController.cs b/src/Squidex/Areas/Api/Controllers/UI/UIController.cs index 2c72d18d3..91a12bca2 100644 --- a/src/Squidex/Areas/Api/Controllers/UI/UIController.cs +++ b/src/Squidex/Areas/Api/Controllers/UI/UIController.cs @@ -12,8 +12,8 @@ using NSwag.Annotations; using Orleans; using Squidex.Areas.Api.Controllers.UI.Models; using Squidex.Config; -using Squidex.Domain.Apps.Core.Rules.Actions; using Squidex.Domain.Apps.Entities.Apps; +using Squidex.Domain.Apps.Rules.Action.Twitter; using Squidex.Infrastructure.Commands; using Squidex.Pipeline; @@ -71,7 +71,7 @@ namespace Squidex.Areas.Api.Controllers.UI /// /// The name of the app. /// The name of the setting. - /// The name of the value. + /// The request with the value to update. /// /// 200 => UI setting set. /// 404 => App not found. diff --git a/src/Squidex/Areas/Api/Views/Shared/Docs.cshtml b/src/Squidex/Areas/Api/Views/Shared/Docs.cshtml index 889bad8fc..f7ddcde4b 100644 --- a/src/Squidex/Areas/Api/Views/Shared/Docs.cshtml +++ b/src/Squidex/Areas/Api/Views/Shared/Docs.cshtml @@ -19,6 +19,6 @@ - + \ No newline at end of file diff --git a/src/Squidex/Config/Domain/RuleServices.cs b/src/Squidex/Config/Domain/RuleServices.cs index 90cdfb1a1..f889ff8af 100644 --- a/src/Squidex/Config/Domain/RuleServices.cs +++ b/src/Squidex/Config/Domain/RuleServices.cs @@ -7,9 +7,9 @@ using Microsoft.Extensions.DependencyInjection; using Squidex.Domain.Apps.Core.HandleRules; -using Squidex.Domain.Apps.Core.HandleRules.Actions; using Squidex.Domain.Apps.Core.HandleRules.Triggers; using Squidex.Domain.Apps.Entities.Rules; +using Squidex.Domain.Apps.Rules.Actions; using Squidex.Infrastructure.EventSourcing; namespace Squidex.Config.Domain @@ -27,30 +27,6 @@ namespace Squidex.Config.Domain services.AddSingletonAs() .As(); - services.AddSingletonAs() - .As(); - - services.AddSingletonAs() - .As(); - - services.AddSingletonAs() - .As(); - - services.AddSingletonAs() - .As(); - - services.AddSingletonAs() - .As(); - - services.AddSingletonAs() - .As(); - - services.AddSingletonAs() - .As(); - - services.AddSingletonAs() - .As(); - services.AddSingletonAs() .As(); @@ -59,6 +35,11 @@ namespace Squidex.Config.Domain services.AddSingletonAs() .AsSelf(); + + foreach (var actionHandler in RuleActionRegistry.ActionHandlers) + { + services.AddSingleton(typeof(IRuleActionHandler), actionHandler); + } } } } diff --git a/src/Squidex/Config/Domain/SerializationServices.cs b/src/Squidex/Config/Domain/SerializationServices.cs index 5d96ab126..fef266019 100644 --- a/src/Squidex/Config/Domain/SerializationServices.cs +++ b/src/Squidex/Config/Domain/SerializationServices.cs @@ -17,6 +17,7 @@ using Squidex.Domain.Apps.Core.Rules.Json; using Squidex.Domain.Apps.Core.Schemas; using Squidex.Domain.Apps.Core.Schemas.Json; using Squidex.Domain.Apps.Events; +using Squidex.Domain.Apps.Rules.Actions; using Squidex.Infrastructure; using Squidex.Infrastructure.EventSourcing; using Squidex.Infrastructure.Json; @@ -38,6 +39,8 @@ namespace Squidex.Config.Domain private static void ConfigureJson(JsonSerializerSettings settings, TypeNameHandling typeNameHandling) { + RuleActionRegistry.RegisterTypes(TypeNameRegistry); + settings.SerializationBinder = new TypeNameSerializationBinder(TypeNameRegistry); settings.ContractResolver = new ConverterContractResolver( diff --git a/src/Squidex/Squidex.csproj b/src/Squidex/Squidex.csproj index ad9f944ea..3bc240b66 100644 --- a/src/Squidex/Squidex.csproj +++ b/src/Squidex/Squidex.csproj @@ -40,6 +40,7 @@ + diff --git a/src/Squidex/app/theme/icomoon/demo-files/demo.css b/src/Squidex/app/theme/icomoon/demo-files/demo.css index 8823845c8..bbba48158 100644 --- a/src/Squidex/app/theme/icomoon/demo-files/demo.css +++ b/src/Squidex/app/theme/icomoon/demo-files/demo.css @@ -150,10 +150,10 @@ p { font-size: 32px; } .fs2 { - font-size: 24px; + font-size: 32px; } .fs3 { - font-size: 32px; + font-size: 24px; } .fs4 { font-size: 28px; diff --git a/src/Squidex/app/theme/icomoon/demo.html b/src/Squidex/app/theme/icomoon/demo.html index 993a5be49..3e8250ceb 100644 --- a/src/Squidex/app/theme/icomoon/demo.html +++ b/src/Squidex/app/theme/icomoon/demo.html @@ -9,20 +9,20 @@
-

Font Name: icomoon (Glyphs: 98)

+

Font Name: icomoon (Glyphs: 99)

-

Grid Size: 16

+

Grid Size: Unknown

- + - icon-star-full + icon-action-Discourse
- - + +
liga: @@ -31,14 +31,14 @@
- + - icon-star-empty + icon-action-Medium
- - + +
liga: @@ -47,14 +47,14 @@
- + - icon-twitter + icon-circle
- - + +
liga: @@ -63,14 +63,14 @@
- + - icon-action-Tweet + icon-action-Fastly
- - + +
liga: @@ -79,14 +79,14 @@
- + - icon-hour-glass + icon-control-Slug
- - + +
liga: @@ -95,14 +95,14 @@
- + - icon-spinner + icon-action-Algolia
- - + +
liga: @@ -111,14 +111,14 @@
- + - icon-clock + icon-type-Tags
- - + +
liga: @@ -127,14 +127,14 @@
- + - icon-bin2 + icon-activity
- - + +
liga: @@ -143,30 +143,30 @@
- + - icon-earth + icon-history
- - + +
liga: - +
- + - icon-elapsed + icon-time
- - + +
liga: @@ -175,14 +175,14 @@
- + - icon-google + icon-add
- - + +
liga: @@ -191,14 +191,14 @@
- + - icon-lock + icon-plus
- - + +
liga: @@ -207,14 +207,14 @@
- + - icon-microsoft + icon-check-circle
- - + +
liga: @@ -223,14 +223,14 @@
- + - icon-action-AzureQueue + icon-check-circle-filled
- - + +
liga: @@ -239,14 +239,14 @@
- + - icon-pause + icon-close
- - + +
liga: @@ -255,14 +255,14 @@
- + - icon-play + icon-type-References
- - + +
liga: @@ -271,14 +271,14 @@
- + - icon-reset + icon-control-Checkbox
- - + +
liga: @@ -287,14 +287,14 @@
- + - icon-settings2 + icon-control-Dropdown
- - + +
liga: @@ -303,14 +303,14 @@
- + - icon-timeout + icon-control-Input
- - + +
liga: @@ -319,900 +319,916 @@
- + - icon-unlocked + icon-control-Radio
- - + +
liga:
-
-
-

Grid Size: 24

-
+
- + - icon-backup + icon-control-TextArea
- - + +
liga:
-
+
- + - icon-support + icon-control-Toggle
- - + +
liga:
-
+
- + - icon-control-RichText + icon-copy
- - + +
liga:
-
+
- + - icon-download + icon-dashboard
- - + +
liga:
-
-
-

Grid Size: Unknown

-
+
- + - icon-action-Medium + icon-delete
- - + +
liga:
-
+
- + - icon-circle + icon-bin
- - + +
liga:
-
+
- + - icon-action-Fastly + icon-delete-filled
- - + +
liga:
-
+
- + - icon-control-Slug + icon-document-delete
- - + +
liga:
-
+
- + - icon-action-Algolia + icon-document-disable
- - + +
liga:
-
+
- + - icon-type-Tags + icon-document-publish
- - + +
liga:
-
+
- + - icon-activity + icon-drag
- - + +
liga:
-
+
- + - icon-history + icon-filter
- - + +
liga:
-
+
- + - icon-time + icon-github
- - + +
liga:
-
+
- + - icon-add + icon-help
- - + +
liga:
-
+
- + - icon-plus + icon-location
- - + +
liga:
-
+
- + - icon-check-circle + icon-control-Map
- - + +
liga:
-
+
- + - icon-check-circle-filled + icon-type-Geolocation
- - + +
liga:
-
+
- + - icon-close + icon-logo
- - + +
liga:
-
+
- + - icon-type-References + icon-media
- - + +
liga:
-
+
- + - icon-control-Checkbox + icon-type-Assets
- - + +
liga:
-
+
- + - icon-control-Dropdown + icon-trigger-AssetChanged
- - + +
liga:
-
+
- + - icon-control-Input + icon-more
- - + +
liga:
-
+
- + - icon-control-Radio + icon-dots
- - + +
liga:
-
+
- + - icon-control-TextArea + icon-pencil
- - + +
liga:
-
+
- + - icon-control-Toggle + icon-reference
- - + +
liga:
-
+
- + - icon-copy + icon-schemas
- - + +
liga:
-
+
- + - icon-dashboard + icon-search
- - + +
liga:
-
+
- + - icon-delete + icon-settings
- - + +
liga:
-
+
- + - icon-bin + icon-type-Boolean
- - + +
liga:
-
+
- + - icon-delete-filled + icon-type-DateTime
- - + +
liga:
-
+
- + - icon-document-delete + icon-type-Json
- - + +
liga:
-
+
- + - icon-document-disable + icon-json
- - + +
liga:
-
+
- + - icon-document-publish + icon-type-Number
- - + +
liga:
-
+
- + - icon-drag + icon-type-String
- - + +
liga:
-
+
- + - icon-filter + icon-user
- - + +
liga:
-
+
+
+

Grid Size: 16

+
- + - icon-github + icon-star-full
- - + +
liga:
-
+
- + - icon-help + icon-star-empty
- - + +
liga:
-
+
- + - icon-location + icon-twitter
- - + +
liga:
-
+
- + - icon-control-Map + icon-action-Tweet
- - + +
liga:
-
+
- + - icon-type-Geolocation + icon-hour-glass
- - + +
liga:
-
+
-
- - + +
liga:
-
+
- + - icon-media + icon-clock
- - + +
liga:
-
+
- + - icon-type-Assets + icon-bin2
- - + +
liga:
-
+
- + - icon-trigger-AssetChanged + icon-earth
- - + + +
+
+ liga: + +
+
+
+
+ + + + icon-elapsed +
+
+ +
liga:
-
+
- + - icon-more + icon-google
- - + +
liga:
-
+
- + - icon-dots + icon-lock
- - + +
liga:
-
+
- + - icon-pencil + icon-microsoft
- - + +
liga:
-
+
- + - icon-reference + icon-action-AzureQueue
- - + +
liga:
-
+
- + - icon-schemas + icon-pause
- - + +
liga:
-
+
- + - icon-search + icon-play
- - + +
liga:
-
+
- + - icon-settings + icon-reset
- - + +
liga:
-
+
- + - icon-type-Boolean + icon-settings2
- - + +
liga:
-
+
- + - icon-type-DateTime + icon-timeout
- - + +
liga:
-
+
- + - icon-type-Json + icon-unlocked
- - + +
liga:
+
+
+

Grid Size: 24

- + - icon-json + icon-backup
- - + +
liga: @@ -1221,14 +1237,14 @@
- + - icon-type-Number + icon-support
- - + +
liga: @@ -1237,14 +1253,14 @@
- + - icon-type-String + icon-control-RichText
- - + +
liga: @@ -1253,14 +1269,14 @@
- + - icon-user + icon-download
- - + +
liga: diff --git a/src/Squidex/app/theme/icomoon/fonts/icomoon.eot b/src/Squidex/app/theme/icomoon/fonts/icomoon.eot index d3d284831..94fd268e8 100644 Binary files a/src/Squidex/app/theme/icomoon/fonts/icomoon.eot and b/src/Squidex/app/theme/icomoon/fonts/icomoon.eot differ diff --git a/src/Squidex/app/theme/icomoon/fonts/icomoon.svg b/src/Squidex/app/theme/icomoon/fonts/icomoon.svg index d4bcfdb28..c350317c1 100644 --- a/src/Squidex/app/theme/icomoon/fonts/icomoon.svg +++ b/src/Squidex/app/theme/icomoon/fonts/icomoon.svg @@ -102,6 +102,7 @@ + diff --git a/src/Squidex/app/theme/icomoon/fonts/icomoon.ttf b/src/Squidex/app/theme/icomoon/fonts/icomoon.ttf index d3f0a0fa9..622fcb6ab 100644 Binary files a/src/Squidex/app/theme/icomoon/fonts/icomoon.ttf and b/src/Squidex/app/theme/icomoon/fonts/icomoon.ttf differ diff --git a/src/Squidex/app/theme/icomoon/fonts/icomoon.woff b/src/Squidex/app/theme/icomoon/fonts/icomoon.woff index e5feeb832..dbe748eb2 100644 Binary files a/src/Squidex/app/theme/icomoon/fonts/icomoon.woff and b/src/Squidex/app/theme/icomoon/fonts/icomoon.woff differ diff --git a/src/Squidex/app/theme/icomoon/selection.json b/src/Squidex/app/theme/icomoon/selection.json index 322f15704..6db98c8d9 100644 --- a/src/Squidex/app/theme/icomoon/selection.json +++ b/src/Squidex/app/theme/icomoon/selection.json @@ -4,31 +4,27 @@ { "icon": { "paths": [ - "M1024 397.050l-353.78-51.408-158.22-320.582-158.216 320.582-353.784 51.408 256 249.538-60.432 352.352 316.432-166.358 316.432 166.358-60.434-352.352 256.002-249.538z" + "M516.375 0c-280.342 0-516.375 225.198-516.375 503.070v520.93l516.278-0.501c280.342-0 507.722-233.87 507.722-511.644s-227.581-511.855-507.625-511.855zM527.127 193.969c60.539 1.361 116.545 19.455 163.822 49.771l-1.231-0.74c1.255 0.811 1.433 0.931 1.61 1.052l-1.066-0.686c9.209 5.848 16.936 11.303 24.393 17.085l-0.691-0.516c1.847 1.424 3.017 2.351 4.181 3.287l-0.584-0.455c6.987 5.558 13.161 10.888 19.117 16.446l-0.159-0.147c2.158 2.024 4.147 3.94 6.111 5.881l-0.005-0.005c4.962 4.875 9.74 9.891 14.349 15.059l0.293 0.334c2.34 2.624 4.921 5.64 7.445 8.705l0.449 0.562c1.711 1.93 3.701 4.249 5.657 6.598l0.429 0.53c-0.418-0.387-1.038-0.952-1.661-1.516l-0.245-0.218c3.336 4.033 6.991 8.738 10.511 13.546l0.63 0.903c0.029 0.029 0.036 0.036 0.042 0.042l-0.023-0.023c-0.306-0.565 0.151 0.158 0.604 0.883l0.776 1.333c4.635 6.582 9.622 14.446 14.255 22.537l0.814 1.546c4.177 7.246 8.751 16.326 12.879 25.645l0.79 2.001c16.218 36.345 25.659 78.731 25.659 123.301 0 172.151-140.846 311.706-314.589 311.706-46.906 0-91.415-10.172-131.402-28.411l1.955 0.799-204.493 45.776 56.952-181.504c-2.82-4.996-6.227-11.776-9.386-18.691l-0.802-1.962c-2.441-5.14-5.422-12.383-8.131-19.756l-0.696-2.168c-0.067 0.083-0.856-1.957-1.625-4.007l-0.709-2.158c-2.628-7.191-5.486-16.773-7.88-26.535l-0.442-2.132c-5.397-21.611-8.492-46.422-8.492-71.949 0-172.205 140.891-311.805 314.688-311.805 2.075 0 4.144 0.020 6.209 0.059l-0.309-0.005z" ], "attrs": [ {} ], "isMulticolor": false, "isMulticolor2": false, + "grid": 0, "tags": [ - "star-full", - "rate", - "star", - "favorite", - "bookmark" - ], - "grid": 16 + "Discourse_icon" + ] }, "attrs": [ {} ], "properties": { - "order": 1, - "id": 2, + "order": 114, + "id": 0, + "name": "action-Discourse", "prevSize": 32, - "code": 59741, - "name": "star-full" + "code": 59743 }, "setIdx": 0, "setId": 2, @@ -37,7 +33,7 @@ { "icon": { "paths": [ - "M1024 397.050l-353.78-51.408-158.22-320.582-158.216 320.582-353.784 51.408 256 249.538-60.432 352.352 316.432-166.358 316.432 166.358-60.434-352.352 256.002-249.538zM512 753.498l-223.462 117.48 42.676-248.83-180.786-176.222 249.84-36.304 111.732-226.396 111.736 226.396 249.836 36.304-180.788 176.222 42.678 248.83-223.462-117.48z" + "M121.429 271.36c1.28-12.587-3.541-25.003-12.928-33.451l-95.573-115.2v-17.195h296.832l229.461 503.253 201.728-503.253h283.051v17.195l-81.792 78.379c-7.040 5.376-10.539 14.208-9.088 22.955v576c-1.451 8.704 2.048 17.493 9.088 22.912l79.787 78.379v17.195h-401.493v-17.195l82.645-80.299c8.107-8.107 8.107-10.496 8.107-22.955v-465.536l-229.973 584.021h-31.019l-267.733-584.021v391.424c-2.219 16.469 3.243 33.024 14.805 44.928l107.52 130.56v17.152h-304.853v-17.195l107.52-130.56c11.52-11.861 16.64-28.587 13.909-44.885v-452.608z" ], "attrs": [ {} @@ -45,699 +41,656 @@ "isMulticolor": false, "isMulticolor2": false, "tags": [ - "star-empty", - "rate", - "star", - "favorite", - "bookmark" + "medium" ], - "grid": 16 + "grid": 0 }, "attrs": [ {} ], "properties": { - "order": 2, - "id": 1, + "order": 1, + "id": 0, "prevSize": 32, - "code": 59742, - "name": "star-empty" + "code": 59737, + "name": "action-Medium" }, - "setIdx": 0, - "setId": 2, - "iconIdx": 1 + "setIdx": 1, + "setId": 1, + "iconIdx": 22 }, { "icon": { "paths": [ - "M1024 226.4c-37.6 16.8-78.2 28-120.6 33 43.4-26 76.6-67.2 92.4-116.2-40.6 24-85.6 41.6-133.4 51-38.4-40.8-93-66.2-153.4-66.2-116 0-210 94-210 210 0 16.4 1.8 32.4 5.4 47.8-174.6-8.8-329.4-92.4-433-219.6-18 31-28.4 67.2-28.4 105.6 0 72.8 37 137.2 93.4 174.8-34.4-1-66.8-10.6-95.2-26.2 0 0.8 0 1.8 0 2.6 0 101.8 72.4 186.8 168.6 206-17.6 4.8-36.2 7.4-55.4 7.4-13.6 0-26.6-1.4-39.6-3.8 26.8 83.4 104.4 144.2 196.2 146-72 56.4-162.4 90-261 90-17 0-33.6-1-50.2-3 93.2 59.8 203.6 94.4 322.2 94.4 386.4 0 597.8-320.2 597.8-597.8 0-9.2-0.2-18.2-0.6-27.2 41-29.4 76.6-66.4 104.8-108.6z" + "M1024 512c0 282.77-229.23 512-512 512s-512-229.23-512-512c0-282.77 229.23-512 512-512s512 229.23 512 512z" ], "attrs": [ {} ], "isMulticolor": false, "isMulticolor2": false, + "grid": 0, "tags": [ - "twitter", - "brand", - "tweet", - "social" - ], - "grid": 16 + "circle" + ] }, "attrs": [ {} ], "properties": { - "order": 1, + "order": 106, "id": 0, + "name": "circle", "prevSize": 32, - "code": 59740, - "name": "twitter, action-Tweet" + "code": 59729 }, - "setIdx": 0, - "setId": 2, - "iconIdx": 2 + "setIdx": 1, + "setId": 1, + "iconIdx": 23 }, { "icon": { "paths": [ - "M728.992 512c137.754-87.334 231.008-255.208 231.008-448 0-21.676-1.192-43.034-3.478-64h-889.042c-2.29 20.968-3.48 42.326-3.48 64 0 192.792 93.254 360.666 231.006 448-137.752 87.334-231.006 255.208-231.006 448 0 21.676 1.19 43.034 3.478 64h889.042c2.288-20.966 3.478-42.324 3.478-64 0.002-192.792-93.252-360.666-231.006-448zM160 960c0-186.912 80.162-345.414 224-397.708v-100.586c-143.838-52.29-224-210.792-224-397.706v0h704c0 186.914-80.162 345.416-224 397.706v100.586c143.838 52.294 224 210.796 224 397.708h-704zM619.626 669.594c-71.654-40.644-75.608-93.368-75.626-125.366v-64.228c0-31.994 3.804-84.914 75.744-125.664 38.504-22.364 71.808-56.348 97.048-98.336h-409.582c25.266 42.032 58.612 76.042 97.166 98.406 71.654 40.644 75.606 93.366 75.626 125.366v64.228c0 31.992-3.804 84.914-75.744 125.664-72.622 42.18-126.738 125.684-143.090 226.336h501.67c-16.364-100.708-70.53-184.248-143.212-226.406z" + "M341.758 30.332v55.545h25.806v83.195c-193.056 37.236-336.992 205.942-337.132 408.544l-0 0.016c-0 229.687 184.814 415.885 412.793 415.885l-0-0c227.979 0 412.793-186.198 412.793-415.885l-0 0c-0.125-202.629-144.065-371.351-334.545-408.173l-2.587-0.416v-83.165h25.809v-55.545h-202.936zM454.729 369.689c102.973 5.539 185.923 86.823 194.885 189.491v6.763h-23.479v23.589h23.485v6.447c-8.918 102.72-91.882 184.055-194.891 189.594v-23.144h-23.444v23.078c-104.989-6.154-188.976-91.042-194.458-196.868h23.297v-23.589h-23.172c6.225-105.086 89.86-189.163 194.333-195.295v23.195h23.444v-23.261zM535.132 467.312l-78.775 73.035c-3.893-1.564-8.405-2.478-13.126-2.494l-0.006-0c-20.265 0-36.693 16.551-36.693 36.967l-0 0c0 20.417 16.428 36.967 36.693 36.967h-0c20.265 0 36.693-16.551 36.693-36.967l0-0c-0.010-3.753-0.574-7.37-1.613-10.776l0.069 0.262 71.128-80.156-14.369-16.838z" ], "attrs": [ {} ], + "width": 886, "isMulticolor": false, "isMulticolor2": false, + "grid": 0, "tags": [ - "hour-glass", - "loading", - "busy", - "wait" - ], - "grid": 16 + "action-Fastly" + ] }, "attrs": [ {} ], "properties": { - "order": 1, + "order": 102, "id": 1, + "name": "action-Fastly", "prevSize": 32, - "code": 59732, - "name": "hour-glass" + "code": 59726 }, "setIdx": 1, "setId": 1, - "iconIdx": 76 + "iconIdx": 24 }, { "icon": { "paths": [ - "M192 512c0-12.18 0.704-24.196 2.030-36.022l-184.98-60.104c-5.916 31.14-9.050 63.264-9.050 96.126 0 147.23 62.166 279.922 161.654 373.324l114.284-157.296c-52.124-56.926-83.938-132.758-83.938-216.028zM832 512c0 83.268-31.812 159.102-83.938 216.028l114.284 157.296c99.488-93.402 161.654-226.094 161.654-373.324 0-32.862-3.132-64.986-9.048-96.126l-184.98 60.104c1.324 11.828 2.028 23.842 2.028 36.022zM576 198.408c91.934 18.662 169.544 76.742 214.45 155.826l184.978-60.102c-73.196-155.42-222.24-268.060-399.428-290.156v194.432zM233.55 354.232c44.906-79.084 122.516-137.164 214.45-155.826v-194.43c-177.188 22.096-326.23 134.736-399.426 290.154l184.976 60.102zM644.556 803.328c-40.39 18.408-85.272 28.672-132.556 28.672s-92.166-10.264-132.554-28.67l-114.292 157.31c73.206 40.366 157.336 63.36 246.846 63.36s173.64-22.994 246.848-63.36l-114.292-157.312z" + "M512 0c-15.36 0-25.6 10.24-25.6 25.6s10.24 25.6 25.6 25.6h128v870.4h-128c-15.36 0-25.6 10.24-25.6 25.6s10.24 25.6 25.6 25.6h307.2c15.36 0 25.6-10.24 25.6-25.6s-10.24-25.6-25.6-25.6h-128v-870.4h128c15.36 0 25.6-10.24 25.6-25.6s-10.24-25.6-25.6-25.6h-307.2zM51.2 204.8c-28.16 0-51.2 23.040-51.2 51.2v460.8c0 28.16 23.040 51.2 51.2 51.2h537.6v-51.2h-512c-15.36 0-25.6-10.24-25.6-25.6v-409.6c0-15.36 10.24-25.6 25.6-25.6h512v-51.2h-537.6zM742.4 204.8v51.2h204.8c15.36 0 25.6 10.24 25.6 25.6v409.6c0 15.36-10.24 25.6-25.6 25.6h-204.8v51.2h230.4c28.16 0 51.2-23.040 51.2-51.2v-460.8c0-28.16-23.040-51.2-51.2-51.2h-230.4z", + "M386.56 606.72c0 12.8-7.68 23.040-20.48 25.6-28.16 10.24-58.88 15.36-92.16 15.36-35.84 0-66.56-10.24-84.48-25.6s-25.6-38.4-25.6-66.56 10.24-51.2 25.6-66.56c17.92-17.92 46.080-23.040 84.48-23.040h69.12v-38.4c0-35.84-25.6-53.76-64-53.76-23.040 0-46.080 7.68-69.12 20.48-2.56 2.56-5.12 2.56-10.24 2.56-10.24 0-20.48-7.68-20.48-20.48 0-7.68 2.56-12.8 10.24-17.92 30.72-20.48 61.44-25.6 92.16-25.6 56.32 0 104.96 30.72 104.96 92.16v181.76zM345.6 501.76h-69.12c-61.44 0-69.12 28.16-69.12 53.76s7.68 56.32 69.12 56.32c23.040 0 46.080-2.56 69.12-10.24v-99.84z" ], "attrs": [ + {}, {} ], "isMulticolor": false, "isMulticolor2": false, + "grid": 0, "tags": [ - "spinner", - "loading", - "loading-wheel", - "busy", - "wait" - ], - "grid": 16 + "control-Slug" + ] }, "attrs": [ + {}, {} ], "properties": { - "order": 1, + "order": 103, "id": 0, + "name": "control-Slug", "prevSize": 32, - "code": 59731, - "name": "spinner" + "code": 59727 }, "setIdx": 1, "setId": 1, - "iconIdx": 77 + "iconIdx": 25 }, { "icon": { "paths": [ - "M658.744 749.256l-210.744-210.746v-282.51h128v229.49l173.256 173.254zM512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM512 896c-212.078 0-384-171.922-384-384s171.922-384 384-384c212.078 0 384 171.922 384 384s-171.922 384-384 384z" + "M512 26.947c-267.728 0-485.053 217.059-485.053 485.053s217.069 485.053 485.053 485.053c267.983 0 485.053-217.314 485.053-485.308s-217.069-484.797-485.053-484.797zM512 853.496c-188.747 0-341.745-152.988-341.745-341.752 0-188.745 152.998-341.733 341.745-341.733 188.765 0 341.745 152.988 341.745 341.733 0 188.763-152.98 341.752-341.745 341.752zM512 240.522v254.585c0 7.443 7.957 12.405 14.654 8.939l225.774-117.231c5.042-2.659 6.844-8.986 3.96-13.901-46.936-82.204-133.855-138.576-234.205-142.298z" ], "attrs": [ {} ], "isMulticolor": false, "isMulticolor2": false, + "grid": 0, "tags": [ - "clock", - "time", - "schedule" - ], - "grid": 16 + "algolia-mark-white" + ] }, "attrs": [ {} ], "properties": { - "order": 1, - "id": 0, + "order": 101, + "id": 1, + "name": "action-Algolia", "prevSize": 32, - "code": 59728, - "name": "clock" + "code": 59724 }, "setIdx": 1, "setId": 1, - "iconIdx": 78 + "iconIdx": 26 }, { "icon": { "paths": [ - "M128 320v640c0 35.2 28.8 64 64 64h576c35.2 0 64-28.8 64-64v-640h-704zM320 896h-64v-448h64v448zM448 896h-64v-448h64v448zM576 896h-64v-448h64v448zM704 896h-64v-448h64v448z", - "M848 128h-208v-80c0-26.4-21.6-48-48-48h-224c-26.4 0-48 21.6-48 48v80h-208c-26.4 0-48 21.6-48 48v80h832v-80c0-26.4-21.6-48-48-48zM576 128h-192v-63.198h192v63.198z" + "M295.954 822.751h-94.705c-47.353 0-88.786-41.434-88.786-88.786v-491.283c0-47.353 41.434-88.786 88.786-88.786h94.705v-59.191h-94.705c-82.867 0-147.977 65.11-147.977 147.977v491.283c0 82.867 65.11 147.977 147.977 147.977h94.705v-59.191z", + "M970.728 473.526c-82.867-171.653-201.249-378.821-272.277-378.821h-112.462v59.191h112.462c35.514 11.838 136.139 177.572 213.087 337.387-76.948 153.896-177.572 325.549-213.087 337.387h-112.462v59.191h112.462c71.029 0 183.491-207.168 272.277-384.74l5.919-11.838-5.919-17.757z", + "M266.358 337.341v260.462h59.191v-260.462z", + "M479.422 337.341v260.462h59.191v-260.462z" ], "attrs": [ + {}, + {}, {}, {} ], "isMulticolor": false, "isMulticolor2": false, + "grid": 0, "tags": [ - "bin", - "trashcan", - "remove", - "delete", - "recycle", - "dispose" - ], - "grid": 16 + "Tags" + ] }, "attrs": [ + {}, + {}, {}, {} ], "properties": { - "order": 1, + "order": 98, "id": 0, - "name": "bin2", + "name": "type-Tags", "prevSize": 32, - "code": 59650 + "code": 59722 }, "setIdx": 1, "setId": 1, - "iconIdx": 79 + "iconIdx": 27 }, { "icon": { "paths": [ - "M512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM512 960.002c-62.958 0-122.872-13.012-177.23-36.452l233.148-262.29c5.206-5.858 8.082-13.422 8.082-21.26v-96c0-17.674-14.326-32-32-32-112.99 0-232.204-117.462-233.374-118.626-6-6.002-14.14-9.374-22.626-9.374h-128c-17.672 0-32 14.328-32 32v192c0 12.122 6.848 23.202 17.69 28.622l110.31 55.156v187.886c-116.052-80.956-192-215.432-192-367.664 0-68.714 15.49-133.806 43.138-192h116.862c8.488 0 16.626-3.372 22.628-9.372l128-128c6-6.002 9.372-14.14 9.372-22.628v-77.412c40.562-12.074 83.518-18.588 128-18.588 70.406 0 137.004 16.26 196.282 45.2-4.144 3.502-8.176 7.164-12.046 11.036-36.266 36.264-56.236 84.478-56.236 135.764s19.97 99.5 56.236 135.764c36.434 36.432 85.218 56.264 135.634 56.26 3.166 0 6.342-0.080 9.518-0.236 13.814 51.802 38.752 186.656-8.404 372.334-0.444 1.744-0.696 3.488-0.842 5.224-81.324 83.080-194.7 134.656-320.142 134.656z" + "M512 102.4c-200.4 0-366.954 144.072-402.4 334.2-0.031 0.165-0.069 0.335-0.1 0.5-2.974 16.061-4.76 32.441-5.8 49.1-0.017 0.271-0.084 0.529-0.1 0.8 0.019 0.004 0.080-0.004 0.1 0-0.503 8.31-1.3 16.564-1.3 25 0 226.202 183.398 409.6 409.6 409.6 208.165 0 379.707-155.44 405.8-356.5 0.004-0.033-0.004-0.067 0-0.1 1.94-14.978 3.124-30.16 3.4-45.6 0.044-2.487 0.4-4.903 0.4-7.4 0-226.202-183.398-409.6-409.6-409.6zM512 153.6c185.461 0 337.902 140.924 356.4 321.5-35.181-21.812-84.232-39.9-151.6-39.9-85.35 0-140.891 41.606-194.6 81.9-49.152 36.864-95.55 71.7-163.8 71.7-86.067 0-135.862-54.67-175.9-98.6-9.001-9.901-17.11-17.483-25.4-25.3 23.131-175.603 172.981-311.3 354.9-311.3zM716.8 486.4c77.828 0 125.173 28.221 152.2 52.8-13.96 185.173-168.254 331.2-357 331.2-190.097 0-345.175-148.14-357.2-335.2 41.826 45.372 102.577 104.8 203.6 104.8 85.35 0 140.891-41.606 194.6-81.9 49.152-36.915 95.55-71.7 163.8-71.7z" + ], + "attrs": [ + {} ], - "attrs": [], "isMulticolor": false, "isMulticolor2": false, + "grid": 0, "tags": [ - "earth", - "globe", - "language", - "web", - "internet", - "sphere", - "planet" - ], - "defaultCode": 59850, - "grid": 16 + "activity" + ] }, - "attrs": [], + "attrs": [ + {} + ], "properties": { - "ligatures": "earth, globe2", - "name": "earth", - "id": 202, - "order": 91, + "order": 12, + "id": 36, + "name": "activity, history, time", "prevSize": 32, - "code": 59850 + "code": 59652 }, "setIdx": 1, "setId": 1, - "iconIdx": 80 + "iconIdx": 28 }, { "icon": { "paths": [ - "M512.002 193.212v-65.212h128v-64c0-35.346-28.654-64-64.002-64h-191.998c-35.346 0-64 28.654-64 64v64h128v65.212c-214.798 16.338-384 195.802-384 414.788 0 229.75 186.25 416 416 416s416-186.25 416-416c0-218.984-169.202-398.448-384-414.788zM706.276 834.274c-60.442 60.44-140.798 93.726-226.274 93.726s-165.834-33.286-226.274-93.726c-60.44-60.44-93.726-140.8-93.726-226.274s33.286-165.834 93.726-226.274c58.040-58.038 134.448-91.018 216.114-93.548l-21.678 314.020c-1.86 26.29 12.464 37.802 31.836 37.802s33.698-11.512 31.836-37.802l-21.676-314.022c81.666 2.532 158.076 35.512 216.116 93.55 60.44 60.44 93.726 140.8 93.726 226.274s-33.286 165.834-93.726 226.274z" + "M512 0c-35.392 0-64 28.608-64 64v384h-384c-35.392 0-64 28.608-64 64s28.608 64 64 64h384v384c0 35.392 28.608 64 64 64s64-28.608 64-64v-384h384c35.392 0 64-28.608 64-64s-28.608-64-64-64h-384v-384c0-35.392-28.608-64-64-64z" ], "attrs": [ {} ], "isMulticolor": false, "isMulticolor2": false, + "grid": 0, "tags": [ - "stopwatch", - "time", - "speed", - "meter", - "chronometer" - ], - "grid": 16 + "add" + ] }, "attrs": [ {} ], "properties": { - "order": 1, - "id": 2, + "order": 13, + "id": 35, + "name": "add, plus", "prevSize": 32, - "code": 59715, - "name": "elapsed" + "code": 59653 }, "setIdx": 1, "setId": 1, - "iconIdx": 81 + "iconIdx": 29 }, { "icon": { "paths": [ - "M522.2 438.8v175.6h290.4c-11.8 75.4-87.8 220.8-290.4 220.8-174.8 0-317.4-144.8-317.4-323.2s142.6-323.2 317.4-323.2c99.4 0 166 42.4 204 79l139-133.8c-89.2-83.6-204.8-134-343-134-283 0-512 229-512 512s229 512 512 512c295.4 0 491.6-207.8 491.6-500.2 0-33.6-3.6-59.2-8-84.8l-483.6-0.2z" + "M512 102.4c-226.202 0-409.6 183.398-409.6 409.6s183.398 409.6 409.6 409.6c226.202 0 409.6-183.398 409.6-409.6s-183.398-409.6-409.6-409.6zM512 153.6c197.632 0 358.4 160.819 358.4 358.4s-160.768 358.4-358.4 358.4c-197.632 0-358.4-160.819-358.4-358.4s160.768-358.4 358.4-358.4zM691.9 333c-12.893 0.002-25.782 4.882-35.5 14.6l-222.2 221.9-67.7-67.5c-19.19-19.294-51.085-19.215-70.3 0-19.15 19.15-19.15 51.050 0 70.2 0.198 0.2 26.198 26.681 52 53 12.95 13.209 25.761 26.372 35.2 36 4.719 4.814 8.607 8.755 11.2 11.4 1.296 1.322 2.293 2.281 2.9 2.9 0.279 0.282 0.488 0.486 0.6 0.6 0.001 0.001 7.591-7.429 14.6-14.3l-14.5 14.4 0.2 0.2v0.1c19.43 19.327 51.57 19.327 71 0v-0.1l258.1-257.6c19.546-19.447 19.521-51.885-0.1-71.3-9.731-9.679-22.607-14.502-35.5-14.5z" ], "attrs": [ {} ], "isMulticolor": false, "isMulticolor2": false, + "grid": 0, "tags": [ - "google", - "brand" - ], - "grid": 16 + "check-circle" + ] }, "attrs": [ {} ], "properties": { - "order": 1, - "id": 0, + "order": 14, + "id": 34, + "name": "check-circle", "prevSize": 32, - "code": 59707, - "name": "google" + "code": 59654 }, "setIdx": 1, "setId": 1, - "iconIdx": 82 + "iconIdx": 30 }, { "icon": { "paths": [ - "M592 448h-16v-192c0-105.87-86.13-192-192-192h-128c-105.87 0-192 86.13-192 192v192h-16c-26.4 0-48 21.6-48 48v480c0 26.4 21.6 48 48 48h544c26.4 0 48-21.6 48-48v-480c0-26.4-21.6-48-48-48zM192 256c0-35.29 28.71-64 64-64h128c35.29 0 64 28.71 64 64v192h-256v-192z" + "M512 1024c-282.778 0-512-229.222-512-512s229.222-512 512-512 512 229.222 512 512-229.222 512-512 512zM855.808 270.592c-19.2-19.2-50.278-19.2-69.478 0l-376.73 376.73-171.878-171.93c-19.2-19.2-50.278-19.2-69.478 0s-19.2 50.278 0 69.478c0 0 201.523 205.261 204.8 208.486 9.984 10.138 23.347 14.643 36.557 14.080 13.21 0.563 26.573-3.942 36.608-14.029 3.277-3.226 409.6-413.286 409.6-413.286 19.2-19.2 19.2-50.33 0-69.53z" ], "attrs": [ {} ], "isMulticolor": false, "isMulticolor2": false, + "grid": 0, "tags": [ - "lock", - "secure", - "private", - "encrypted" - ], - "grid": 16 + "check-circle-filled" + ] }, "attrs": [ {} ], "properties": { - "order": 2, - "id": 0, + "order": 27, + "id": 33, + "name": "check-circle-filled", "prevSize": 32, - "code": 59700, - "name": "lock" + "code": 59655 }, "setIdx": 1, "setId": 1, - "iconIdx": 83 + "iconIdx": 31 }, { "icon": { "paths": [ - "M0.35 512l-0.35-312.074 384-52.144v364.218zM448 138.482l511.872-74.482v448h-511.872zM959.998 576l-0.126 448-511.872-72.016v-375.984zM384 943.836l-383.688-52.594-0.020-315.242h383.708z" + "M601.024 512l276.736 276.736c24.512 24.576 24.512 64.384 0 89.024-24.64 24.576-64.384 24.576-89.024 0l-276.736-276.736-276.736 276.736c-24.512 24.576-64.384 24.576-89.024 0-24.512-24.64-24.512-64.448 0-89.024l276.736-276.736-276.736-276.736c-24.512-24.576-24.512-64.384 0-89.024 24.64-24.576 64.512-24.576 89.024 0l276.736 276.736 276.736-276.736c24.64-24.576 64.384-24.576 89.024 0 24.512 24.64 24.512 64.448 0 89.024l-276.736 276.736z" ], "attrs": [ {} ], "isMulticolor": false, "isMulticolor2": false, + "grid": 0, "tags": [ - "windows8", - "brand", - "os" - ], - "grid": 16 + "close" + ] }, "attrs": [ {} ], "properties": { - "order": 1, - "id": 1, + "order": 28, + "id": 32, + "name": "close", "prevSize": 32, - "code": 59712, - "name": "microsoft, action-AzureQueue" + "code": 59656 }, "setIdx": 1, "setId": 1, - "iconIdx": 84 + "iconIdx": 32 }, { "icon": { "paths": [ - "M128 128h320v768h-320zM576 128h320v768h-320z" + "M409.6 435.2h-153.6v51.2h153.6v-51.2zM409.6 332.8h-153.6v51.2h153.6v-51.2zM256 691.2h409.6v-51.2h-409.6v51.2zM409.6 230.4h-153.6v51.2h153.6v-51.2zM870.4 179.2h-51.2v-51.2c0-28.262-22.938-51.2-51.2-51.2h-614.4c-28.262 0-51.2 22.938-51.2 51.2v665.6c0 28.262 22.938 51.2 51.2 51.2h51.2v51.2c0 28.262 22.938 51.2 51.2 51.2h614.4c28.262 0 51.2-22.938 51.2-51.2v-665.6c0-28.262-22.938-51.2-51.2-51.2zM179.2 793.6c-14.157 0-25.6-11.443-25.6-25.6v-614.4c0-14.131 11.443-25.6 25.6-25.6h563.2c14.157 0 25.6 11.469 25.6 25.6v614.4c0 14.157-11.443 25.6-25.6 25.6h-563.2zM870.4 870.4c0 14.157-11.443 25.6-25.6 25.6h-563.2c-14.157 0-25.6-11.443-25.6-25.6v-25.6h512c28.262 0 51.2-22.938 51.2-51.2v-563.2h25.6c14.157 0 25.6 11.469 25.6 25.6v614.4zM614.4 230.4h-102.4c-28.262 0-51.2 22.938-51.2 51.2v153.6c0 28.262 22.938 51.2 51.2 51.2h102.4c28.262 0 51.2-22.938 51.2-51.2v-153.6c0-28.262-22.938-51.2-51.2-51.2zM614.4 435.2h-102.4v-153.6h102.4v153.6zM256 588.8h409.6v-51.2h-409.6v51.2z" ], "attrs": [ {} ], "isMulticolor": false, "isMulticolor2": false, + "grid": 0, "tags": [ - "pause", - "player" - ], - "grid": 16 + "content" + ] }, "attrs": [ {} ], "properties": { - "order": 2, - "id": 1, + "order": 37, + "id": 31, + "name": "type-References", "prevSize": 32, - "code": 59695, - "name": "pause" + "code": 59657 }, "setIdx": 1, "setId": 1, - "iconIdx": 85 + "iconIdx": 33 }, { "icon": { "paths": [ - "M192 128l640 384-640 384z" + "M793.6 844.8c0 14.157-11.443 25.6-25.6 25.6h-665.6c-14.131 0-25.6-11.443-25.6-25.6v-665.6c0-14.157 11.469-25.6 25.6-25.6h665.6c14.157 0 25.6 11.443 25.6 25.6v102.4h51.2v-128c0-28.262-22.938-51.2-51.2-51.2h-716.8c-28.262 0-51.2 22.938-51.2 51.2v716.8c0 28.262 22.938 51.2 51.2 51.2h716.8c28.262 0 51.2-22.938 51.2-51.2v-281.6h-51.2v256zM991.078 237.747c-9.958-9.958-26.035-9.958-35.968 0l-391.91 391.91-238.31-238.31c-9.958-9.958-26.061-9.958-35.942 0-9.958 9.907-9.958 26.010 0 35.942l254.874 254.874c0.461 0.538 0.614 1.203 1.126 1.69 5.043 5.018 11.674 7.475 18.278 7.373 6.605 0.102 13.235-2.355 18.278-7.373 0.512-0.512 0.666-1.178 1.126-1.69l408.448-408.474c9.933-9.933 9.933-26.035 0-35.942z" ], "attrs": [ {} ], "isMulticolor": false, "isMulticolor2": false, + "grid": 0, "tags": [ - "play", - "player" - ], - "grid": 16 + "control-checkbox" + ] }, "attrs": [ {} ], "properties": { - "order": 3, - "id": 0, + "order": 38, + "id": 30, + "name": "control-Checkbox", "prevSize": 32, - "code": 59696, - "name": "play" + "code": 59658 }, "setIdx": 1, "setId": 1, - "iconIdx": 86 + "iconIdx": 34 }, { "icon": { "paths": [ - "M889.68 166.32c-93.608-102.216-228.154-166.32-377.68-166.32-282.77 0-512 229.23-512 512h96c0-229.75 186.25-416 416-416 123.020 0 233.542 53.418 309.696 138.306l-149.696 149.694h352v-352l-134.32 134.32z", - "M928 512c0 229.75-186.25 416-416 416-123.020 0-233.542-53.418-309.694-138.306l149.694-149.694h-352v352l134.32-134.32c93.608 102.216 228.154 166.32 377.68 166.32 282.77 0 512-229.23 512-512h-96z" + "M51.2 0c-28.262 0-51.2 22.938-51.2 51.2v281.6c0 28.262 22.938 51.2 51.2 51.2h921.6c28.262 0 51.2-22.938 51.2-51.2v-281.6c0-28.262-22.938-51.2-51.2-51.2h-921.6zM76.8 51.2h512v281.6h-512c-14.157 0-25.6-11.443-25.6-25.6v-230.4c0-14.157 11.443-25.6 25.6-25.6zM640 51.2h307.2c14.157 0 25.6 11.443 25.6 25.6v230.4c0 14.157-11.443 25.6-25.6 25.6h-307.2v-281.6zM716.8 153.6c-0.41 0.358 89.139 102.938 89.6 102.4 0.512 0 89.6-95.36 89.6-102.4 0 0.384-172.16 0-179.2 0zM128 435.2c-42.394 0-76.8 34.406-76.8 76.8s34.406 76.8 76.8 76.8c42.394 0 76.8-34.406 76.8-76.8s-34.406-76.8-76.8-76.8zM128 486.4c14.157 0 25.6 11.443 25.6 25.6s-11.443 25.6-25.6 25.6c-14.157 0-25.6-11.443-25.6-25.6s11.443-25.6 25.6-25.6zM307.2 486.4c-14.157 0-25.6 11.443-25.6 25.6s11.443 25.6 25.6 25.6h640c14.157 0 25.6-11.443 25.6-25.6s-11.443-25.6-25.6-25.6h-640zM128 640c-42.394 0-76.8 34.381-76.8 76.8s34.406 76.8 76.8 76.8c42.394 0 76.8-34.381 76.8-76.8s-34.406-76.8-76.8-76.8zM128 691.2c14.157 0 25.6 11.443 25.6 25.6s-11.443 25.6-25.6 25.6c-14.157 0-25.6-11.443-25.6-25.6s11.443-25.6 25.6-25.6zM307.2 691.2c-14.157 0-25.6 11.443-25.6 25.6s11.443 25.6 25.6 25.6h640c14.157 0 25.6-11.443 25.6-25.6s-11.443-25.6-25.6-25.6h-640zM128 844.8c-42.394 0-76.8 34.381-76.8 76.8s34.406 76.8 76.8 76.8c42.394 0 76.8-34.381 76.8-76.8s-34.406-76.8-76.8-76.8zM128 896c14.157 0 25.6 11.443 25.6 25.6s-11.443 25.6-25.6 25.6c-14.157 0-25.6-11.443-25.6-25.6s11.443-25.6 25.6-25.6zM307.2 896c-14.157 0-25.6 11.443-25.6 25.6s11.443 25.6 25.6 25.6h640c14.157 0 25.6-11.443 25.6-25.6s-11.443-25.6-25.6-25.6h-640z" ], "attrs": [ - {}, {} ], "isMulticolor": false, "isMulticolor2": false, + "grid": 0, "tags": [ - "loop", - "repeat", - "player", - "reload", - "refresh", - "update", - "synchronize", - "arrows" - ], - "grid": 16 + "control-dropdown" + ] }, "attrs": [ - {}, {} ], "properties": { - "order": 49, - "id": 2, + "order": 39, + "id": 29, + "name": "control-Dropdown", "prevSize": 32, - "code": 59694, - "name": "reset" + "code": 59659 }, "setIdx": 1, "setId": 1, - "iconIdx": 87 + "iconIdx": 35 }, { "icon": { "paths": [ - "M933.79 610.25c-53.726-93.054-21.416-212.304 72.152-266.488l-100.626-174.292c-28.75 16.854-62.176 26.518-97.846 26.518-107.536 0-194.708-87.746-194.708-195.99h-201.258c0.266 33.41-8.074 67.282-25.958 98.252-53.724 93.056-173.156 124.702-266.862 70.758l-100.624 174.292c28.97 16.472 54.050 40.588 71.886 71.478 53.638 92.908 21.512 211.92-71.708 266.224l100.626 174.292c28.65-16.696 61.916-26.254 97.4-26.254 107.196 0 194.144 87.192 194.7 194.958h201.254c-0.086-33.074 8.272-66.57 25.966-97.218 53.636-92.906 172.776-124.594 266.414-71.012l100.626-174.29c-28.78-16.466-53.692-40.498-71.434-71.228zM512 719.332c-114.508 0-207.336-92.824-207.336-207.334 0-114.508 92.826-207.334 207.336-207.334 114.508 0 207.332 92.826 207.332 207.334-0.002 114.51-92.824 207.334-207.332 207.334z" + "M512 0c-14.157 0-25.6 11.443-25.6 25.6s11.443 25.6 25.6 25.6h128v870.4h-128c-14.157 0-25.6 11.443-25.6 25.6s11.443 25.6 25.6 25.6h307.2c14.157 0 25.6-11.443 25.6-25.6s-11.443-25.6-25.6-25.6h-128v-870.4h128c14.157 0 25.6-11.443 25.6-25.6s-11.443-25.6-25.6-25.6h-307.2zM51.2 204.8c-28.262 0-51.2 22.938-51.2 51.2v460.8c0 28.262 22.938 51.2 51.2 51.2h537.6v-51.2h-512c-14.131 0-25.6-11.443-25.6-25.6v-409.6c0-14.157 11.469-25.6 25.6-25.6h512v-51.2h-537.6zM742.4 204.8v51.2h204.8c14.157 0 25.6 11.443 25.6 25.6v409.6c0 14.157-11.443 25.6-25.6 25.6h-204.8v51.2h230.4c28.262 0 51.2-22.938 51.2-51.2v-460.8c0-28.262-22.938-51.2-51.2-51.2h-230.4zM285.9 307c-0.589 0.051-1.161 0.048-1.75 0.15-8.243 0.051-16.396 4.474-20.85 13.050l-132.55 306.25c-6.656 12.749-2.866 28.981 8.5 36.2 11.341 7.219 25.97 2.749 32.6-10l27.65-63.85h170.5c0.512 0 0.914-0.224 1.4-0.25l27.45 64.050c6.63 12.749 21.136 17.269 32.4 10.050s15.005-23.451 8.4-36.2l-131.3-306.25c-4.454-8.576-12.432-12.973-20.65-13.050-0.614-0.102-1.211-0.099-1.8-0.15zM285.9 389.15l63.65 148.45h-127.9l64.25-148.45z" ], "attrs": [ {} ], "isMulticolor": false, "isMulticolor2": false, + "grid": 0, "tags": [ - "cog", - "gear", - "preferences", - "settings", - "generate", - "control", - "options" - ], - "grid": 16 + "control-input" + ] }, "attrs": [ {} ], "properties": { - "order": 1, - "id": 1, + "order": 41, + "id": 28, + "name": "control-Input", "prevSize": 32, - "code": 59693, - "name": "settings2" + "code": 59660 }, "setIdx": 1, "setId": 1, - "iconIdx": 88 + "iconIdx": 36 }, { "icon": { "paths": [ - "M512 128c-247.424 0-448 200.576-448 448s200.576 448 448 448 448-200.576 448-448-200.576-448-448-448zM512 936c-198.824 0-360-161.178-360-360 0-198.824 161.176-360 360-360 198.822 0 360 161.176 360 360 0 198.822-161.178 360-360 360zM934.784 287.174c16.042-28.052 25.216-60.542 25.216-95.174 0-106.040-85.96-192-192-192-61.818 0-116.802 29.222-151.92 74.596 131.884 27.236 245.206 105.198 318.704 212.578v0zM407.92 74.596c-35.116-45.374-90.102-74.596-151.92-74.596-106.040 0-192 85.96-192 192 0 34.632 9.174 67.122 25.216 95.174 73.5-107.38 186.822-185.342 318.704-212.578z", - "M512 576v-256h-64v320h256v-64z" + "M153.6 716.8c-84.787 0-153.6 68.813-153.6 153.6s68.813 153.6 153.6 153.6c84.787 0 153.6-68.813 153.6-153.6s-68.813-153.6-153.6-153.6zM153.6 972.8c-56.55 0-102.4-45.85-102.4-102.4s45.85-102.4 102.4-102.4c56.55 0 102.4 45.85 102.4 102.4s-45.85 102.4-102.4 102.4zM384 179.2h614.4c14.157 0 25.6-11.443 25.6-25.6s-11.443-25.6-25.6-25.6h-614.4c-14.131 0-25.6 11.443-25.6 25.6s11.469 25.6 25.6 25.6zM998.4 486.4h-614.4c-14.131 0-25.6 11.443-25.6 25.6s11.469 25.6 25.6 25.6h614.4c14.157 0 25.6-11.443 25.6-25.6s-11.443-25.6-25.6-25.6zM153.6 0c-84.787 0-153.6 68.787-153.6 153.6s68.813 153.6 153.6 153.6c84.787 0 153.6-68.787 153.6-153.6s-68.813-153.6-153.6-153.6zM153.6 256c-56.55 0-102.4-45.85-102.4-102.4s45.85-102.4 102.4-102.4c56.55 0 102.4 45.85 102.4 102.4s-45.85 102.4-102.4 102.4zM153.6 358.4c-84.787 0-153.6 68.787-153.6 153.6 0 84.787 68.813 153.6 153.6 153.6s153.6-68.813 153.6-153.6c0-84.813-68.813-153.6-153.6-153.6zM153.6 614.4c-56.55 0-102.4-45.85-102.4-102.4s45.85-102.4 102.4-102.4c56.55 0 102.4 45.85 102.4 102.4s-45.85 102.4-102.4 102.4zM153.6 102.4c-28.262 0-51.2 22.938-51.2 51.2s22.938 51.2 51.2 51.2c28.262 0 51.2-22.938 51.2-51.2s-22.938-51.2-51.2-51.2zM998.4 844.8h-614.4c-14.131 0-25.6 11.443-25.6 25.6s11.469 25.6 25.6 25.6h614.4c14.157 0 25.6-11.443 25.6-25.6s-11.443-25.6-25.6-25.6z" ], "attrs": [ - {}, {} ], "isMulticolor": false, "isMulticolor2": false, + "grid": 0, "tags": [ - "alarm", - "time", - "clock" - ], - "grid": 16 + "control-radio" + ] }, "attrs": [ - {}, {} ], "properties": { - "order": 2, - "id": 1, + "order": 42, + "id": 27, + "name": "control-Radio", "prevSize": 32, - "code": 59716, - "name": "timeout" + "code": 59661 }, "setIdx": 1, "setId": 1, - "iconIdx": 89 + "iconIdx": 37 }, { "icon": { "paths": [ - "M768 64c105.87 0 192 86.13 192 192v192h-128v-192c0-35.29-28.71-64-64-64h-128c-35.29 0-64 28.71-64 64v192h16c26.4 0 48 21.6 48 48v480c0 26.4-21.6 48-48 48h-544c-26.4 0-48-21.6-48-48v-480c0-26.4 21.6-48 48-48h400v-192c0-105.87 86.13-192 192-192h128z" + "M0 0v204.8h76.8v76.8h51.2v-76.8h76.8v-204.8h-204.8zM819.2 0v204.8h204.8v-204.8h-204.8zM51.2 51.2h102.4v102.4h-102.4v-102.4zM870.4 51.2h102.4v102.4h-102.4v-102.4zM281.6 76.8v51.2h102.4v-51.2h-102.4zM486.4 76.8v51.2h102.4v-51.2h-102.4zM691.2 76.8v51.2h102.4v-51.2h-102.4zM333.25 204.8c-7.091-0.307-14.348 2.097-19.75 7.55l-74.75 74.75c-10.317 10.291-10.317 27.083 0 37.4s27.059 10.317 37.35 0l68.45-68.5h141.85v486.4h-50.7c-7.117-0.307-14.348 2.097-19.75 7.55l-23.6 23.55c-10.317 10.317-10.317 27.083 0 37.4 10.291 10.317 27.109 10.317 37.4 0l17.25-17.3h129.75l18.050 18c10.394 10.368 27.181 10.368 37.6 0 10.368-10.394 10.368-27.181 0-37.6l-24-24c-5.478-5.478-12.682-7.907-19.85-7.6h-50.95v-486.4h141.55l69.25 69.2c10.394 10.368 27.155 10.368 37.6 0 10.368-10.368 10.368-27.181 0-37.6l-75.2-75.2c-5.478-5.478-12.706-7.907-19.9-7.6h-357.65zM896 281.6v102.4h51.2v-102.4h-51.2zM76.8 384v102.4h51.2v-102.4h-51.2zM896 486.4v102.4h51.2v-102.4h-51.2zM76.8 588.8v102.4h51.2v-102.4h-51.2zM896 691.2v102.4h51.2v-102.4h-51.2zM76.8 793.6v25.6h-76.8v204.8h204.8v-76.8h76.8v-51.2h-76.8v-76.8h-76.8v-25.6h-51.2zM819.2 819.2v76.8h-25.6v51.2h25.6v76.8h204.8v-204.8h-204.8zM51.2 870.4h102.4v102.4h-102.4v-102.4zM870.4 870.4h102.4v102.4h-102.4v-102.4zM384 896v51.2h102.4v-51.2h-102.4zM588.8 896v51.2h102.4v-51.2h-102.4z" ], "attrs": [ {} ], "isMulticolor": false, "isMulticolor2": false, + "grid": 0, "tags": [ - "unlocked", - "lock-open" - ], - "grid": 16 + "control-textarea" + ] }, "attrs": [ {} ], "properties": { - "order": 1, - "id": 1, + "order": 17, + "id": 26, + "name": "control-TextArea", "prevSize": 32, - "code": 59699, - "name": "unlocked" + "code": 59662 }, "setIdx": 1, "setId": 1, - "iconIdx": 90 + "iconIdx": 38 }, { "icon": { "paths": [ - "M512 128c212 0 384 172 384 384s-172 384-384 384c-88 0-170-30-234-80l60-60c50 34 110 54 174 54 166 0 298-132 298-298s-132-298-298-298-298 132-298 298h128l-172 170-170-170h128c0-212 172-384 384-384zM598 512c0 46-40 86-86 86s-86-40-86-86 40-86 86-86 86 40 86 86z" + "M332.8 25.6c-127.258 0-230.4 103.142-230.4 230.4s103.142 230.4 230.4 230.4h358.4c127.258 0 230.4-103.142 230.4-230.4s-103.142-230.4-230.4-230.4h-358.4zM332.8 76.8h358.4c98.97 0 179.2 80.23 179.2 179.2s-80.23 179.2-179.2 179.2h-358.4c-98.97 0-179.2-80.23-179.2-179.2s80.23-179.2 179.2-179.2zM332.8 128c-70.707 0-128 57.293-128 128s57.293 128 128 128c70.707 0 128-57.293 128-128s-57.293-128-128-128zM332.8 179.2c42.419 0 76.8 34.381 76.8 76.8s-34.381 76.8-76.8 76.8c-42.419 0-76.8-34.381-76.8-76.8s34.381-76.8 76.8-76.8zM332.8 537.6c-127.258 0-230.4 103.142-230.4 230.4s103.142 230.4 230.4 230.4h358.4c127.258 0 230.4-103.142 230.4-230.4s-103.142-230.4-230.4-230.4h-358.4zM332.8 588.8h358.4c98.97 0 179.2 80.23 179.2 179.2s-80.23 179.2-179.2 179.2h-358.4c-98.97 0-179.2-80.23-179.2-179.2s80.23-179.2 179.2-179.2zM691.2 640c-70.707 0-128 57.293-128 128s57.293 128 128 128c70.707 0 128-57.293 128-128s-57.293-128-128-128zM691.2 691.2c42.419 0 76.8 34.381 76.8 76.8s-34.381 76.8-76.8 76.8c-42.419 0-76.8-34.381-76.8-76.8s34.381-76.8 76.8-76.8z" ], "attrs": [ {} ], "isMulticolor": false, "isMulticolor2": false, + "grid": 0, "tags": [ - "settings_backup_restore" - ], - "grid": 24 + "control-toggle" + ] }, "attrs": [ {} ], "properties": { - "order": 1, - "id": 2, - "prevSize": 24, - "code": 59739, - "name": "backup" + "order": 16, + "id": 25, + "name": "control-Toggle", + "prevSize": 32, + "code": 59663 }, "setIdx": 1, "setId": 1, - "iconIdx": 0 + "iconIdx": 39 }, { "icon": { "paths": [ - "M726 512c0 24-20 42-44 42h-426l-170 172v-598c0-24 18-42 42-42h554c24 0 44 18 44 42v384zM896 256c24 0 42 18 42 42v640l-170-170h-470c-24 0-42-18-42-42v-86h554v-384h86z" + "M204.8 51.2c-56.525 0-102.4 45.875-102.4 102.4v512c0 56.525 45.875 102.4 102.4 102.4h409.6c56.525 0 102.4-45.875 102.4-102.4v-512c0-56.525-45.875-102.4-102.4-102.4h-409.6zM204.8 102.4h409.6c28.262 0 51.2 22.886 51.2 51.2v512c0 28.314-22.938 51.2-51.2 51.2h-409.6c-28.262 0-51.2-22.886-51.2-51.2v-512c0-28.314 22.938-51.2 51.2-51.2zM768 204.8v51.2c28.262 0 51.2 22.886 51.2 51.2v512c0 28.314-22.938 51.2-51.2 51.2h-409.6c-28.262 0-51.2-22.886-51.2-51.2h-51.2c0 56.525 45.875 102.4 102.4 102.4h409.6c56.525 0 102.4-45.875 102.4-102.4v-512c0-56.525-45.875-102.4-102.4-102.4z" ], "attrs": [ {} ], "isMulticolor": false, "isMulticolor2": false, + "grid": 0, "tags": [ - "question_answer" - ], - "grid": 24 + "copy" + ] }, "attrs": [ {} ], "properties": { - "order": 1, - "id": 0, - "prevSize": 24, - "code": 59738, - "name": "support" + "order": 90, + "id": 24, + "name": "copy", + "prevSize": 32, + "code": 59664 }, "setIdx": 1, "setId": 1, - "iconIdx": 1 + "iconIdx": 40 }, { "icon": { "paths": [ - "M918 384v128h-128v298h-128v-298h-128v-128h384zM106 170h556v128h-214v512h-128v-512h-214v-128z" + "M828.8 1024h-633.6c-105.6 0-195.2-89.6-195.2-195.2v-320c0-281.6 227.2-508.8 505.6-508.8 288 0 518.4 230.4 518.4 518.4v310.4c0 105.6-89.6 195.2-195.2 195.2zM505.6 64c-243.2 0-441.6 198.4-441.6 441.6v320c0 73.6 60.8 134.4 131.2 134.4h630.4c73.6 0 131.2-60.8 131.2-131.2v-310.4c3.2-249.6-201.6-454.4-451.2-454.4z", + "M512 668.8c-3.2 0-6.4 0-6.4 0-32-3.2-64-19.2-80-48l-192-278.4c-9.6-9.6-9.6-25.6-0-38.4 9.6-9.6 25.6-12.8 38.4-6.4l294.4 172.8c28.8 16 48 44.8 51.2 76.8s-6.4 64-28.8 89.6c-19.2 22.4-48 32-76.8 32zM364.8 428.8l108.8 160c6.4 9.6 19.2 19.2 32 19.2s25.6-3.2 35.2-12.8c9.6-9.6 12.8-22.4 9.6-35.2s-9.6-22.4-19.2-32l-166.4-99.2z", + "M678.4 364.8c-6.4 0-12.8-3.2-19.2-6.4-16-9.6-19.2-28.8-9.6-44.8l54.4-83.2c9.6-16 28.8-19.2 44.8-9.6 19.2 12.8 22.4 35.2 12.8 48l-54.4 83.2c-6.4 9.6-16 12.8-28.8 12.8z" ], "attrs": [ + {}, + {}, {} ], "isMulticolor": false, "isMulticolor2": false, + "grid": 0, "tags": [ - "text_fields" - ], - "grid": 24 + "dashboard" + ] }, "attrs": [ + {}, + {}, {} ], "properties": { - "order": 75, - "id": 0, - "prevSize": 24, - "code": 59705, - "name": "control-RichText" + "order": 26, + "id": 23, + "name": "dashboard", + "prevSize": 32, + "code": 59665 }, "setIdx": 1, "setId": 1, - "iconIdx": 2 + "iconIdx": 41 }, { "icon": { "paths": [ - "M640 85.333q78 0 149.167 30.5t122.5 81.833 81.833 122.5 30.5 149.167q0 85-35 160.667t-96.667 129.167-140 77.5l21-20.667q18-18.333 28-42.667 9.333-22.667 9.333-49.333 0-6.667-0.333-9.333 59.333-41.333 93.833-105.833t34.5-139.5q0-60.667-23.667-116t-63.667-95.333-95.333-63.667-116-23.667q-55.333 0-106.5 19.833t-90 53.833-65 81.333-33.833 101h-88.667q-70.667 0-120.667 50t-50 120.667q0 38.667 15.167 71.667t39.833 54.167 54.833 33 60.833 11.833h50q11.667 29.333 30 48l37.667 37.333h-117.667q-69.667 0-128.5-34.333t-93.167-93.167-34.333-128.5 34.333-128.5 93.167-93.167 128.5-34.333h22q26.333-74.333 79.333-132.167t126.833-90.833 155.833-33zM554.667 426.667q17.667 0 30.167 12.5t12.5 30.167v281l55-55.333q12.333-12.333 30.333-12.333 18.333 0 30.5 12.167t12.167 30.5q0 18-12.333 30.333l-128 128q-12.333 12.333-30.333 12.333t-30.333-12.333l-128-128q-12.333-13-12.333-30.333 0-17.667 12.5-30.167t30.167-12.5q18 0 30.333 12.333l55 55.333v-281q0-17.667 12.5-30.167t30.167-12.5z" + "M597.35 819.2c14.131 0 25.6-11.469 25.6-25.6v-307.2c0-14.080-11.469-25.6-25.6-25.6s-25.6 11.52-25.6 25.6v307.2c0 14.131 11.418 25.6 25.6 25.6zM776.55 204.8h-153.6v-51.2c0-28.314-22.886-51.2-51.2-51.2h-102.4c-28.262 0-51.2 22.886-51.2 51.2v51.2h-153.6c-28.262 0-51.2 22.886-51.2 51.2v102.4c0 28.314 22.938 51.2 51.2 51.2v460.8c0 28.314 22.938 51.2 51.2 51.2h409.6c28.314 0 51.2-22.886 51.2-51.2v-460.8c28.314 0 51.2-22.886 51.2-51.2v-102.4c0-28.314-22.938-51.2-51.2-51.2zM469.35 153.6h102.4v51.2h-102.4v-51.2zM725.35 870.4h-409.6v-460.8h409.6v460.8zM776.55 358.4h-512v-102.4h512v102.4zM443.75 819.2c14.131 0 25.6-11.469 25.6-25.6v-307.2c0-14.080-11.469-25.6-25.6-25.6s-25.6 11.52-25.6 25.6v307.2c0 14.131 11.469 25.6 25.6 25.6z" ], "attrs": [ {} ], "isMulticolor": false, "isMulticolor2": false, + "grid": 0, "tags": [ - "cloud-download" - ], - "grid": 24 + "delete" + ] }, "attrs": [ {} ], "properties": { - "order": 1, - "id": 0, - "prevSize": 24, - "code": 59710, - "name": "download" + "order": 29, + "id": 22, + "name": "delete, bin", + "prevSize": 32, + "code": 59666 }, "setIdx": 1, "setId": 1, - "iconIdx": 3 + "iconIdx": 42 }, { "icon": { "paths": [ - "M121.429 271.36c1.28-12.587-3.541-25.003-12.928-33.451l-95.573-115.2v-17.195h296.832l229.461 503.253 201.728-503.253h283.051v17.195l-81.792 78.379c-7.040 5.376-10.539 14.208-9.088 22.955v576c-1.451 8.704 2.048 17.493 9.088 22.912l79.787 78.379v17.195h-401.493v-17.195l82.645-80.299c8.107-8.107 8.107-10.496 8.107-22.955v-465.536l-229.973 584.021h-31.019l-267.733-584.021v391.424c-2.219 16.469 3.243 33.024 14.805 44.928l107.52 130.56v17.152h-304.853v-17.195l107.52-130.56c11.52-11.861 16.64-28.587 13.909-44.885v-452.608z" + "M832 128h-192v-64c0-35.392-28.608-64-64-64h-128c-35.328 0-64 28.608-64 64v64h-192c-35.328 0-64 28.608-64 64v128c0 35.392 28.672 64 64 64v512c0 35.392 28.672 64 64 64h512c35.392 0 64-28.608 64-64v-512c35.392 0 64-28.608 64-64v-128c0-35.392-28.608-64-64-64zM448 64h128v64h-128v-64zM448 800c0 17.664-14.336 32-32 32s-32-14.336-32-32v-320c0-17.6 14.336-32 32-32s32 14.4 32 32v320zM640 800c0 17.664-14.336 32-32 32s-32-14.336-32-32v-320c0-17.6 14.336-32 32-32s32 14.4 32 32v320zM832 320h-640v-128h640v128z" ], "attrs": [ {} ], "isMulticolor": false, "isMulticolor2": false, + "grid": 0, "tags": [ - "medium" - ], - "grid": 0 + "delete-filled" + ] }, "attrs": [ {} ], "properties": { - "order": 1, - "id": 0, + "order": 36, + "id": 21, + "name": "delete-filled", "prevSize": 32, - "code": 59737, - "name": "action-Medium" + "code": 59667 }, "setIdx": 1, "setId": 1, - "iconIdx": 4 + "iconIdx": 43 }, { "icon": { "paths": [ - "M1024 512c0 282.77-229.23 512-512 512s-512-229.23-512-512c0-282.77 229.23-512 512-512s512 229.23 512 512z" + "M358.4 102.4c-28.314 0-51.2 22.886-51.2 51.2v256h51.2v-256h307.2v153.6c0 28.314 22.886 51.2 51.2 51.2h153.6v512h-358.4v51.2h358.4c28.314 0 51.2-22.886 51.2-51.2v-548.2l-219.8-219.8h-343.4zM716.8 189.8l117.4 117.4h-117.4v-117.4zM332.8 460.8c-127.232 0-230.4 103.168-230.4 230.4s103.168 230.4 230.4 230.4c127.232 0 230.4-103.168 230.4-230.4s-103.168-230.4-230.4-230.4zM332.8 512c98.816 0 179.2 80.384 179.2 179.2s-80.384 179.2-179.2 179.2c-98.816 0-179.2-80.384-179.2-179.2s80.384-179.2 179.2-179.2zM227.2 665.6c-12.39 0-22.4 10.061-22.4 22.4v6.4c0 12.39 10.010 22.4 22.4 22.4h211.2c12.39 0 22.4-10.010 22.4-22.4v-6.4c0-12.39-10.061-22.4-22.4-22.4h-211.2z" ], "attrs": [ {} @@ -746,89 +699,85 @@ "isMulticolor2": false, "grid": 0, "tags": [ - "circle" + "document-delete" ] }, "attrs": [ {} ], "properties": { - "order": 106, - "id": 0, - "name": "circle", + "order": 35, + "id": 20, + "name": "document-delete", "prevSize": 32, - "code": 59729 + "code": 59668 }, "setIdx": 1, "setId": 1, - "iconIdx": 5 + "iconIdx": 44 }, { "icon": { "paths": [ - "M341.758 30.332v55.545h25.806v83.195c-193.056 37.236-336.992 205.942-337.132 408.544l-0 0.016c-0 229.687 184.814 415.885 412.793 415.885l-0-0c227.979 0 412.793-186.198 412.793-415.885l-0 0c-0.125-202.629-144.065-371.351-334.545-408.173l-2.587-0.416v-83.165h25.809v-55.545h-202.936zM454.729 369.689c102.973 5.539 185.923 86.823 194.885 189.491v6.763h-23.479v23.589h23.485v6.447c-8.918 102.72-91.882 184.055-194.891 189.594v-23.144h-23.444v23.078c-104.989-6.154-188.976-91.042-194.458-196.868h23.297v-23.589h-23.172c6.225-105.086 89.86-189.163 194.333-195.295v23.195h23.444v-23.261zM535.132 467.312l-78.775 73.035c-3.893-1.564-8.405-2.478-13.126-2.494l-0.006-0c-20.265 0-36.693 16.551-36.693 36.967l-0 0c0 20.417 16.428 36.967 36.693 36.967h-0c20.265 0 36.693-16.551 36.693-36.967l0-0c-0.010-3.753-0.574-7.37-1.613-10.776l0.069 0.262 71.128-80.156-14.369-16.838z" + "M358.4 102.4c-28.314 0-51.2 22.886-51.2 51.2v256h51.2v-256h307.2v153.6c0 28.314 22.886 51.2 51.2 51.2h153.6v512h-358.4v51.2h358.4c28.314 0 51.2-22.886 51.2-51.2v-548.2l-219.8-219.8h-343.4zM716.8 189.8l117.4 117.4h-117.4v-117.4zM332.8 460.8c-127.232 0-230.4 103.168-230.4 230.4s103.168 230.4 230.4 230.4c127.232 0 230.4-103.168 230.4-230.4s-103.168-230.4-230.4-230.4zM332.8 512c39.934 0 76.475 13.533 106.3 35.7l-250.4 249c-21.807-29.683-35.1-65.924-35.1-105.5 0-98.816 80.384-179.2 179.2-179.2zM477 585.7c21.785 29.674 35 65.947 35 105.5 0 98.816-80.384 179.2-179.2 179.2-39.906 0-76.386-13.561-106.2-35.7l250.4-249z" ], "attrs": [ {} ], - "width": 886, "isMulticolor": false, "isMulticolor2": false, "grid": 0, "tags": [ - "action-Fastly" + "document-disable" ] }, "attrs": [ {} ], "properties": { - "order": 102, - "id": 1, - "name": "action-Fastly", + "order": 40, + "id": 19, + "name": "document-disable", "prevSize": 32, - "code": 59726 + "code": 59669 }, "setIdx": 1, "setId": 1, - "iconIdx": 6 + "iconIdx": 45 }, { "icon": { "paths": [ - "M512 0c-15.36 0-25.6 10.24-25.6 25.6s10.24 25.6 25.6 25.6h128v870.4h-128c-15.36 0-25.6 10.24-25.6 25.6s10.24 25.6 25.6 25.6h307.2c15.36 0 25.6-10.24 25.6-25.6s-10.24-25.6-25.6-25.6h-128v-870.4h128c15.36 0 25.6-10.24 25.6-25.6s-10.24-25.6-25.6-25.6h-307.2zM51.2 204.8c-28.16 0-51.2 23.040-51.2 51.2v460.8c0 28.16 23.040 51.2 51.2 51.2h537.6v-51.2h-512c-15.36 0-25.6-10.24-25.6-25.6v-409.6c0-15.36 10.24-25.6 25.6-25.6h512v-51.2h-537.6zM742.4 204.8v51.2h204.8c15.36 0 25.6 10.24 25.6 25.6v409.6c0 15.36-10.24 25.6-25.6 25.6h-204.8v51.2h230.4c28.16 0 51.2-23.040 51.2-51.2v-460.8c0-28.16-23.040-51.2-51.2-51.2h-230.4z", - "M386.56 606.72c0 12.8-7.68 23.040-20.48 25.6-28.16 10.24-58.88 15.36-92.16 15.36-35.84 0-66.56-10.24-84.48-25.6s-25.6-38.4-25.6-66.56 10.24-51.2 25.6-66.56c17.92-17.92 46.080-23.040 84.48-23.040h69.12v-38.4c0-35.84-25.6-53.76-64-53.76-23.040 0-46.080 7.68-69.12 20.48-2.56 2.56-5.12 2.56-10.24 2.56-10.24 0-20.48-7.68-20.48-20.48 0-7.68 2.56-12.8 10.24-17.92 30.72-20.48 61.44-25.6 92.16-25.6 56.32 0 104.96 30.72 104.96 92.16v181.76zM345.6 501.76h-69.12c-61.44 0-69.12 28.16-69.12 53.76s7.68 56.32 69.12 56.32c23.040 0 46.080-2.56 69.12-10.24v-99.84z" + "M358.4 102.4c-28.314 0-51.2 22.886-51.2 51.2v256h51.2v-256h307.2v153.6c0 28.314 22.886 51.2 51.2 51.2h153.6v512h-358.4v51.2h358.4c28.314 0 51.2-22.886 51.2-51.2v-548.2l-219.8-219.8h-343.4zM716.8 189.8l117.4 117.4h-117.4v-117.4zM332.8 460.8l-230.4 256v51.2h102.4v153.6h256v-153.6h102.4v-51.2l-230.4-256zM332.8 537.3l161.5 179.5h-84.7v153.6h-153.6v-153.6h-84.7l161.5-179.5z" ], "attrs": [ - {}, {} ], "isMulticolor": false, "isMulticolor2": false, "grid": 0, "tags": [ - "control-Slug" + "document-publish" ] }, "attrs": [ - {}, {} ], "properties": { - "order": 103, - "id": 0, - "name": "control-Slug", + "order": 44, + "id": 18, + "name": "document-publish", "prevSize": 32, - "code": 59727 + "code": 59670 }, "setIdx": 1, "setId": 1, - "iconIdx": 7 + "iconIdx": 46 }, { "icon": { "paths": [ - "M512 26.947c-267.728 0-485.053 217.059-485.053 485.053s217.069 485.053 485.053 485.053c267.983 0 485.053-217.314 485.053-485.308s-217.069-484.797-485.053-484.797zM512 853.496c-188.747 0-341.745-152.988-341.745-341.752 0-188.745 152.998-341.733 341.745-341.733 188.765 0 341.745 152.988 341.745 341.733 0 188.763-152.98 341.752-341.745 341.752zM512 240.522v254.585c0 7.443 7.957 12.405 14.654 8.939l225.774-117.231c5.042-2.659 6.844-8.986 3.96-13.901-46.936-82.204-133.855-138.576-234.205-142.298z" + "M665.6 51.2v102.4h102.4v-102.4h-102.4zM460.8 153.6h102.4v-102.4h-102.4v102.4zM460.8 358.4h102.4v-102.4h-102.4v102.4zM665.6 358.4h102.4v-102.4h-102.4v102.4zM665.6 563.2h102.4v-102.4h-102.4v102.4zM460.8 563.2h102.4v-102.4h-102.4v102.4zM460.8 768h102.4v-102.4h-102.4v102.4zM665.6 768h102.4v-102.4h-102.4v102.4zM665.6 972.8h102.4v-102.4h-102.4v102.4zM460.8 972.8h102.4v-102.4h-102.4v102.4zM256 153.6h102.4v-102.4h-102.4v102.4zM256 358.4h102.4v-102.4h-102.4v102.4zM256 563.2h102.4v-102.4h-102.4v102.4zM256 768h102.4v-102.4h-102.4v102.4zM256 972.8h102.4v-102.4h-102.4v102.4z" ], "attrs": [ {} @@ -837,94 +786,86 @@ "isMulticolor2": false, "grid": 0, "tags": [ - "algolia-mark-white" + "drag" ] }, "attrs": [ {} ], "properties": { - "order": 101, - "id": 1, - "name": "action-Algolia", + "order": 43, + "id": 17, + "name": "drag", "prevSize": 32, - "code": 59724 + "code": 59671 }, "setIdx": 1, "setId": 1, - "iconIdx": 8 + "iconIdx": 47 }, { "icon": { "paths": [ - "M295.954 822.751h-94.705c-47.353 0-88.786-41.434-88.786-88.786v-491.283c0-47.353 41.434-88.786 88.786-88.786h94.705v-59.191h-94.705c-82.867 0-147.977 65.11-147.977 147.977v491.283c0 82.867 65.11 147.977 147.977 147.977h94.705v-59.191z", - "M970.728 473.526c-82.867-171.653-201.249-378.821-272.277-378.821h-112.462v59.191h112.462c35.514 11.838 136.139 177.572 213.087 337.387-76.948 153.896-177.572 325.549-213.087 337.387h-112.462v59.191h112.462c71.029 0 183.491-207.168 272.277-384.74l5.919-11.838-5.919-17.757z", - "M266.358 337.341v260.462h59.191v-260.462z", - "M479.422 337.341v260.462h59.191v-260.462z" + "M921.6 281.958c0-70.707-171.878-128.154-384-128.154s-384 57.19-384 127.898c0 10.035 3.789 19.712 10.342 29.030 0-0.051 296.858 406.067 296.858 406.067v256l153.6-51.2v-204.8c0 0 298.752-408.166 299.725-409.702 0 0 7.475-16.64 7.475-25.139zM537.6 204.8c206.899 0 318.208 53.248 332.083 76.8-13.875 23.552-125.184 76.8-332.083 76.8s-318.208-53.248-332.083-76.8c13.875-23.552 125.184-76.8 332.083-76.8zM869.376 345.856v0 0zM573.030 686.592c-6.4 8.755-9.83 19.354-9.83 30.208v167.885l-51.2 17.050v-184.934c0-10.854-3.43-21.453-9.83-30.208l-228.147-312.115c68.762 21.709 161.382 35.123 263.578 35.123 102.298 0 195.021-13.414 263.834-35.174-0.102 0.051-0.205 0.051-0.307 0.102l-228.096 312.064z" ], "attrs": [ - {}, - {}, - {}, {} ], "isMulticolor": false, "isMulticolor2": false, "grid": 0, "tags": [ - "Tags" + "filter" ] }, "attrs": [ - {}, - {}, - {}, {} ], "properties": { - "order": 98, - "id": 0, - "name": "type-Tags", + "order": 18, + "id": 16, + "name": "filter", "prevSize": 32, - "code": 59722 + "code": 59672 }, "setIdx": 1, "setId": 1, - "iconIdx": 9 + "iconIdx": 48 }, { "icon": { "paths": [ - "M512 102.4c-200.4 0-366.954 144.072-402.4 334.2-0.031 0.165-0.069 0.335-0.1 0.5-2.974 16.061-4.76 32.441-5.8 49.1-0.017 0.271-0.084 0.529-0.1 0.8 0.019 0.004 0.080-0.004 0.1 0-0.503 8.31-1.3 16.564-1.3 25 0 226.202 183.398 409.6 409.6 409.6 208.165 0 379.707-155.44 405.8-356.5 0.004-0.033-0.004-0.067 0-0.1 1.94-14.978 3.124-30.16 3.4-45.6 0.044-2.487 0.4-4.903 0.4-7.4 0-226.202-183.398-409.6-409.6-409.6zM512 153.6c185.461 0 337.902 140.924 356.4 321.5-35.181-21.812-84.232-39.9-151.6-39.9-85.35 0-140.891 41.606-194.6 81.9-49.152 36.864-95.55 71.7-163.8 71.7-86.067 0-135.862-54.67-175.9-98.6-9.001-9.901-17.11-17.483-25.4-25.3 23.131-175.603 172.981-311.3 354.9-311.3zM716.8 486.4c77.828 0 125.173 28.221 152.2 52.8-13.96 185.173-168.254 331.2-357 331.2-190.097 0-345.175-148.14-357.2-335.2 41.826 45.372 102.577 104.8 203.6 104.8 85.35 0 140.891-41.606 194.6-81.9 49.152-36.915 95.55-71.7 163.8-71.7z" + "M512 0c-282.88 0-512 229.248-512 512 0 226.24 146.688 418.112 350.080 485.76 25.6 4.8 35.008-11.008 35.008-24.64 0-12.16-0.448-44.352-0.64-87.040-142.464 30.912-172.48-68.672-172.48-68.672-23.296-59.136-56.96-74.88-56.96-74.88-46.4-31.744 3.584-31.104 3.584-31.104 51.392 3.584 78.4 52.736 78.4 52.736 45.696 78.272 119.872 55.68 149.12 42.56 4.608-33.088 17.792-55.68 32.448-68.48-113.728-12.8-233.216-56.832-233.216-252.992 0-55.872 19.84-101.568 52.672-137.408-5.76-12.928-23.040-64.96 4.48-135.488 0 0 42.88-13.76 140.8 52.48 40.96-11.392 84.48-17.024 128-17.28 43.52 0.256 87.040 5.888 128 17.28 97.28-66.24 140.16-52.48 140.16-52.48 27.52 70.528 10.24 122.56 5.12 135.488 32.64 35.84 52.48 81.536 52.48 137.408 0 196.672-119.68 240-233.6 252.608 17.92 15.36 34.56 46.72 34.56 94.72 0 68.48-0.64 123.52-0.64 140.16 0 13.44 8.96 29.44 35.2 24.32 204.864-67.136 351.424-259.136 351.424-485.056 0-282.752-229.248-512-512-512z" ], "attrs": [ {} ], "isMulticolor": false, "isMulticolor2": false, - "grid": 0, "tags": [ - "activity" - ] + "brand", + "github" + ], + "grid": 0 }, "attrs": [ {} ], "properties": { - "order": 12, - "id": 36, - "name": "activity, history, time", + "order": 77, + "id": 0, + "name": "github", "prevSize": 32, - "code": 59652 + "code": 59713 }, "setIdx": 1, "setId": 1, - "iconIdx": 10 + "iconIdx": 49 }, { "icon": { "paths": [ - "M512 0c-35.392 0-64 28.608-64 64v384h-384c-35.392 0-64 28.608-64 64s28.608 64 64 64h384v384c0 35.392 28.608 64 64 64s64-28.608 64-64v-384h384c35.392 0 64-28.608 64-64s-28.608-64-64-64h-384v-384c0-35.392-28.608-64-64-64z" + "M512 512h-204.8v51.2h204.8v-51.2zM768 153.6h-51.2c0-28.314-22.886-51.2-51.2-51.2h-307.2c-28.314 0-51.2 22.886-51.2 51.2h-51.2c-28.314 0-51.2 22.886-51.2 51.2v665.6c0 28.314 22.886 51.2 51.2 51.2h512c28.314 0 51.2-22.886 51.2-51.2v-665.6c0-28.314-22.886-51.2-51.2-51.2zM358.4 153.6h307.2v51.2h-307.2v-51.2zM768 819.2c0 28.314-22.886 51.2-51.2 51.2h-409.6c-28.314 0-51.2-22.886-51.2-51.2v-563.2c0-28.314 22.886-51.2 51.2-51.2 0 28.314 22.886 51.2 51.2 51.2h307.2c28.314 0 51.2-22.886 51.2-51.2 28.314 0 51.2 22.886 51.2 51.2v563.2zM307.2 460.8h409.6v-51.2h-409.6v51.2zM307.2 665.6h409.6v-51.2h-409.6v51.2z" ], "attrs": [ {} @@ -933,27 +874,27 @@ "isMulticolor2": false, "grid": 0, "tags": [ - "add" + "help" ] }, "attrs": [ {} ], "properties": { - "order": 13, - "id": 35, - "name": "add, plus", + "order": 19, + "id": 15, + "name": "help", "prevSize": 32, - "code": 59653 + "code": 59673 }, "setIdx": 1, "setId": 1, - "iconIdx": 11 + "iconIdx": 50 }, { "icon": { "paths": [ - "M512 102.4c-226.202 0-409.6 183.398-409.6 409.6s183.398 409.6 409.6 409.6c226.202 0 409.6-183.398 409.6-409.6s-183.398-409.6-409.6-409.6zM512 153.6c197.632 0 358.4 160.819 358.4 358.4s-160.768 358.4-358.4 358.4c-197.632 0-358.4-160.819-358.4-358.4s160.768-358.4 358.4-358.4zM691.9 333c-12.893 0.002-25.782 4.882-35.5 14.6l-222.2 221.9-67.7-67.5c-19.19-19.294-51.085-19.215-70.3 0-19.15 19.15-19.15 51.050 0 70.2 0.198 0.2 26.198 26.681 52 53 12.95 13.209 25.761 26.372 35.2 36 4.719 4.814 8.607 8.755 11.2 11.4 1.296 1.322 2.293 2.281 2.9 2.9 0.279 0.282 0.488 0.486 0.6 0.6 0.001 0.001 7.591-7.429 14.6-14.3l-14.5 14.4 0.2 0.2v0.1c19.43 19.327 51.57 19.327 71 0v-0.1l258.1-257.6c19.546-19.447 19.521-51.885-0.1-71.3-9.731-9.679-22.607-14.502-35.5-14.5z" + "M512 0c-169.421 0-307.2 137.779-307.2 307.2 0 78.643 15.258 164.915 45.261 256.41 23.859 72.55 56.986 148.582 98.56 226.099 70.707 131.635 140.339 220.774 143.309 224.512 4.813 6.195 12.288 9.779 20.070 9.779 7.834 0 15.258-3.584 20.122-9.779 2.97-3.686 72.602-92.826 143.309-224.512 41.574-77.517 74.701-153.549 98.56-226.099 29.952-91.494 45.21-177.766 45.21-256.41 0-169.421-137.83-307.2-307.2-307.2zM630.682 764.672c-46.234 86.374-92.979 154.982-118.682 190.822-25.6-35.635-72.038-103.885-118.221-189.952-62.874-117.146-137.779-291.738-137.779-458.342 0-141.158 114.842-256 256-256s256 114.842 256 256c0 166.298-74.65 340.582-137.318 457.472zM512 153.6c-84.685 0-153.6 68.915-153.6 153.6s68.915 153.6 153.6 153.6 153.6-68.915 153.6-153.6-68.915-153.6-153.6-153.6zM512 409.6c-56.525 0-102.4-45.875-102.4-102.4 0-56.474 45.875-102.4 102.4-102.4 56.474 0 102.4 45.926 102.4 102.4 0 56.525-45.926 102.4-102.4 102.4z" ], "attrs": [ {} @@ -962,27 +903,27 @@ "isMulticolor2": false, "grid": 0, "tags": [ - "check-circle" + "location" ] }, "attrs": [ {} ], "properties": { - "order": 14, - "id": 34, - "name": "check-circle", + "order": 25, + "id": 13, + "name": "location, control-Map, type-Geolocation", "prevSize": 32, - "code": 59654 + "code": 59675 }, "setIdx": 1, "setId": 1, - "iconIdx": 12 + "iconIdx": 51 }, { "icon": { "paths": [ - "M512 1024c-282.778 0-512-229.222-512-512s229.222-512 512-512 512 229.222 512 512-229.222 512-512 512zM855.808 270.592c-19.2-19.2-50.278-19.2-69.478 0l-376.73 376.73-171.878-171.93c-19.2-19.2-50.278-19.2-69.478 0s-19.2 50.278 0 69.478c0 0 201.523 205.261 204.8 208.486 9.984 10.138 23.347 14.643 36.557 14.080 13.21 0.563 26.573-3.942 36.608-14.029 3.277-3.226 409.6-413.286 409.6-413.286 19.2-19.2 19.2-50.33 0-69.53z" + "M512.273 83.782c-0.141 0.056-182.959 84.073-229.418 256.782-4.481 16.584 32.696 9.296 31.036 27.527-2.034 22.136-44.668 31.201-39.109 94.764 5.659 64.734 60.321 130.141 68.527 169.673v27.655c-0.497 8.54-4.566 31.715-18.018 43.036-7.378 6.19-17.322 8.421-30.436 6.782-18.205-2.275-25.449-14.468-28.345-24.309-4.753-16.218-0.322-35.123 10.345-44 10.724-8.924 12.17-24.842 3.236-35.564-8.934-10.712-24.858-12.161-35.582-3.218-25.995 21.64-36.887 61.52-26.491 97 9.815 33.392 36.197 55.884 70.6 60.182 4.903 0.609 9.566 0.909 14 0.909 26.623 0 44.661-10.175 55.582-19.455 32.866-27.97 35.449-74.593 35.636-79.818 0.009-0.309 0.018-0.618 0.018-0.927v-21.218h0.109v-1.418c0-12.351 10.008-22.364 22.382-22.364 11.944 0 21.609 9.346 22.273 21.109v202.491c-0.206 2.912-2.536 29.892-17.891 42.945-7.368 6.274-17.384 8.53-30.545 6.873-18.214-2.275-25.476-14.468-28.364-24.291-4.762-16.228-0.322-35.151 10.345-44.018 10.724-8.933 12.188-24.833 3.255-35.564-8.924-10.694-24.876-12.161-35.6-3.218-26.013 21.631-36.887 61.52-26.491 97 9.796 33.392 36.197 55.893 70.6 60.2 4.903 0.609 9.566 0.891 14 0.891 26.623 0 44.671-10.156 55.564-19.436 32.875-27.97 35.458-74.611 35.636-79.836 0.019-0.328 0.018-0.609 0.018-0.909v-225.636l0.127-0.055v-1c0-12.595 10.219-22.8 22.836-22.8 12.349 0 22.333 9.824 22.727 22.073v227.418c0 0.309-0 0.591 0.018 0.909 0.187 5.216 2.779 51.866 35.655 79.836 10.912 9.28 28.959 19.436 55.582 19.436 4.443 0 9.088-0.282 13.982-0.891 34.394-4.307 60.804-26.818 70.6-60.2 10.405-35.48-0.487-75.36-26.491-97-10.743-8.943-26.676-7.466-35.6 3.218-8.934 10.74-7.488 26.63 3.236 35.564 10.668 8.868 15.135 27.79 10.364 44.018-2.878 9.823-10.159 22.015-28.364 24.291-13.105 1.648-23.050-0.592-30.418-6.782-13.508-11.358-17.558-34.657-18.036-43v-201.818c0.297-12.093 10.14-21.818 22.327-21.818 12.374 0 22.4 10.003 22.4 22.364v1.418h0.073v21.218c0 0.318-0 0.628 0.018 0.927 0.178 5.216 2.779 51.848 35.655 79.818 10.912 9.28 28.941 19.455 55.564 19.455 4.434 0 9.107-0.292 14-0.891 34.394-4.298 60.786-26.818 70.582-60.2 10.405-35.48-0.487-75.351-26.491-97-10.743-8.933-26.667-7.476-35.582 3.236-8.943 10.722-7.488 26.622 3.236 35.545 10.668 8.877 15.117 27.8 10.345 44.018-2.878 9.842-10.159 22.025-28.364 24.291-13.086 1.648-23.050-0.583-30.418-6.764-13.508-11.368-17.549-34.675-18.018-43v-21.018c5.305-54.103 63.095-107.777 69.091-176.364 5.531-63.563-37.121-72.627-39.145-94.764-1.669-18.232 35.498-10.944 31.036-27.527-46.468-172.709-229.269-256.726-229.4-256.782z" ], "attrs": [ {} @@ -991,27 +932,27 @@ "isMulticolor2": false, "grid": 0, "tags": [ - "check-circle-filled" + "logo" ] }, "attrs": [ {} ], "properties": { - "order": 27, - "id": 33, - "name": "check-circle-filled", + "order": 31, + "id": 12, + "name": "logo", "prevSize": 32, - "code": 59655 + "code": 59676 }, "setIdx": 1, "setId": 1, - "iconIdx": 13 + "iconIdx": 52 }, { "icon": { "paths": [ - "M601.024 512l276.736 276.736c24.512 24.576 24.512 64.384 0 89.024-24.64 24.576-64.384 24.576-89.024 0l-276.736-276.736-276.736 276.736c-24.512 24.576-64.384 24.576-89.024 0-24.512-24.64-24.512-64.448 0-89.024l276.736-276.736-276.736-276.736c-24.512-24.576-24.512-64.384 0-89.024 24.64-24.576 64.512-24.576 89.024 0l276.736 276.736 276.736-276.736c24.64-24.576 64.384-24.576 89.024 0 24.512 24.64 24.512 64.448 0 89.024l-276.736 276.736z" + "M947.2 0h-870.4c-42.342 0-76.8 34.458-76.8 76.8v870.4c0 42.342 34.458 76.8 76.8 76.8h870.4c42.342 0 76.8-34.458 76.8-76.8v-870.4c0-42.342-34.458-76.8-76.8-76.8zM972.8 947.2c0 14.157-11.443 25.6-25.6 25.6h-870.4c-14.131 0-25.6-11.443-25.6-25.6v-870.4c0-14.131 11.469-25.6 25.6-25.6h870.4c14.157 0 25.6 11.469 25.6 25.6v870.4zM665.6 460.8c56.448 0 102.4-45.926 102.4-102.4s-45.952-102.4-102.4-102.4c-56.448 0-102.4 45.926-102.4 102.4s45.952 102.4 102.4 102.4zM665.6 307.2c28.211 0 51.2 22.989 51.2 51.2s-22.989 51.2-51.2 51.2c-28.211 0-51.2-22.989-51.2-51.2s22.989-51.2 51.2-51.2zM896 102.4h-768c-14.131 0-25.6 11.469-25.6 25.6v614.4c0 14.157 11.469 25.6 25.6 25.6h768c14.157 0 25.6-11.443 25.6-25.6v-614.4c0-14.131-11.443-25.6-25.6-25.6zM153.6 716.8v-118.246l164.301-184.858c4.198-4.787 9.728-7.373 15.462-7.475 5.734-0.051 11.29 2.458 15.642 7.040l283.238 303.539h-478.643zM870.4 716.8h-168.090l-315.853-338.432c-14.285-15.334-33.331-23.603-53.709-23.347-20.326 0.256-39.219 9.011-53.094 24.627l-126.054 141.798v-367.846h716.8v563.2z" ], "attrs": [ {} @@ -1020,27 +961,27 @@ "isMulticolor2": false, "grid": 0, "tags": [ - "close" + "media" ] }, "attrs": [ {} ], "properties": { - "order": 28, - "id": 32, - "name": "close", + "order": 30, + "id": 11, + "name": "media, type-Assets, trigger-AssetChanged", "prevSize": 32, - "code": 59656 + "code": 59677 }, "setIdx": 1, "setId": 1, - "iconIdx": 14 + "iconIdx": 53 }, { "icon": { "paths": [ - "M409.6 435.2h-153.6v51.2h153.6v-51.2zM409.6 332.8h-153.6v51.2h153.6v-51.2zM256 691.2h409.6v-51.2h-409.6v51.2zM409.6 230.4h-153.6v51.2h153.6v-51.2zM870.4 179.2h-51.2v-51.2c0-28.262-22.938-51.2-51.2-51.2h-614.4c-28.262 0-51.2 22.938-51.2 51.2v665.6c0 28.262 22.938 51.2 51.2 51.2h51.2v51.2c0 28.262 22.938 51.2 51.2 51.2h614.4c28.262 0 51.2-22.938 51.2-51.2v-665.6c0-28.262-22.938-51.2-51.2-51.2zM179.2 793.6c-14.157 0-25.6-11.443-25.6-25.6v-614.4c0-14.131 11.443-25.6 25.6-25.6h563.2c14.157 0 25.6 11.469 25.6 25.6v614.4c0 14.157-11.443 25.6-25.6 25.6h-563.2zM870.4 870.4c0 14.157-11.443 25.6-25.6 25.6h-563.2c-14.157 0-25.6-11.443-25.6-25.6v-25.6h512c28.262 0 51.2-22.938 51.2-51.2v-563.2h25.6c14.157 0 25.6 11.469 25.6 25.6v614.4zM614.4 230.4h-102.4c-28.262 0-51.2 22.938-51.2 51.2v153.6c0 28.262 22.938 51.2 51.2 51.2h102.4c28.262 0 51.2-22.938 51.2-51.2v-153.6c0-28.262-22.938-51.2-51.2-51.2zM614.4 435.2h-102.4v-153.6h102.4v153.6zM256 588.8h409.6v-51.2h-409.6v51.2z" + "M128 384c-70.656 0-128 57.344-128 128s57.344 128 128 128c70.656 0 128-57.344 128-128s-57.344-128-128-128zM512 384c-70.656 0-128 57.344-128 128s57.344 128 128 128c70.656 0 128-57.344 128-128s-57.344-128-128-128zM896 384c-70.656 0-128 57.344-128 128s57.344 128 128 128c70.656 0 128-57.344 128-128s-57.344-128-128-128z" ], "attrs": [ {} @@ -1049,27 +990,27 @@ "isMulticolor2": false, "grid": 0, "tags": [ - "content" + "more" ] }, "attrs": [ {} ], "properties": { - "order": 37, - "id": 31, - "name": "type-References", + "order": 34, + "id": 10, + "name": "more, dots", "prevSize": 32, - "code": 59657 + "code": 59678 }, "setIdx": 1, "setId": 1, - "iconIdx": 15 + "iconIdx": 54 }, { "icon": { "paths": [ - "M793.6 844.8c0 14.157-11.443 25.6-25.6 25.6h-665.6c-14.131 0-25.6-11.443-25.6-25.6v-665.6c0-14.157 11.469-25.6 25.6-25.6h665.6c14.157 0 25.6 11.443 25.6 25.6v102.4h51.2v-128c0-28.262-22.938-51.2-51.2-51.2h-716.8c-28.262 0-51.2 22.938-51.2 51.2v716.8c0 28.262 22.938 51.2 51.2 51.2h716.8c28.262 0 51.2-22.938 51.2-51.2v-281.6h-51.2v256zM991.078 237.747c-9.958-9.958-26.035-9.958-35.968 0l-391.91 391.91-238.31-238.31c-9.958-9.958-26.061-9.958-35.942 0-9.958 9.907-9.958 26.010 0 35.942l254.874 254.874c0.461 0.538 0.614 1.203 1.126 1.69 5.043 5.018 11.674 7.475 18.278 7.373 6.605 0.102 13.235-2.355 18.278-7.373 0.512-0.512 0.666-1.178 1.126-1.69l408.448-408.474c9.933-9.933 9.933-26.035 0-35.942z" + "M877.12 311.104l-66.304 66.368-228.224-228.224 66.368-66.368c25.216-25.152 66.048-25.152 91.264 0l136.896 137.024c25.216 25.216 25.216 65.984 0 91.2zM760.896 427.392l-386.176 386.112c-25.216 25.28-66.048 25.28-91.264 0l-136.96-136.896c-25.216-25.28-25.216-66.112 0-91.264l386.24-386.24 228.16 228.288zM64 896v-191.872l191.936 191.872h-191.936z" ], "attrs": [ {} @@ -1078,27 +1019,27 @@ "isMulticolor2": false, "grid": 0, "tags": [ - "control-checkbox" + "pencil" ] }, "attrs": [ {} ], "properties": { - "order": 38, - "id": 30, - "name": "control-Checkbox", + "order": 47, + "id": 9, + "name": "pencil", "prevSize": 32, - "code": 59658 + "code": 59679 }, "setIdx": 1, "setId": 1, - "iconIdx": 16 + "iconIdx": 55 }, { "icon": { "paths": [ - "M51.2 0c-28.262 0-51.2 22.938-51.2 51.2v281.6c0 28.262 22.938 51.2 51.2 51.2h921.6c28.262 0 51.2-22.938 51.2-51.2v-281.6c0-28.262-22.938-51.2-51.2-51.2h-921.6zM76.8 51.2h512v281.6h-512c-14.157 0-25.6-11.443-25.6-25.6v-230.4c0-14.157 11.443-25.6 25.6-25.6zM640 51.2h307.2c14.157 0 25.6 11.443 25.6 25.6v230.4c0 14.157-11.443 25.6-25.6 25.6h-307.2v-281.6zM716.8 153.6c-0.41 0.358 89.139 102.938 89.6 102.4 0.512 0 89.6-95.36 89.6-102.4 0 0.384-172.16 0-179.2 0zM128 435.2c-42.394 0-76.8 34.406-76.8 76.8s34.406 76.8 76.8 76.8c42.394 0 76.8-34.406 76.8-76.8s-34.406-76.8-76.8-76.8zM128 486.4c14.157 0 25.6 11.443 25.6 25.6s-11.443 25.6-25.6 25.6c-14.157 0-25.6-11.443-25.6-25.6s11.443-25.6 25.6-25.6zM307.2 486.4c-14.157 0-25.6 11.443-25.6 25.6s11.443 25.6 25.6 25.6h640c14.157 0 25.6-11.443 25.6-25.6s-11.443-25.6-25.6-25.6h-640zM128 640c-42.394 0-76.8 34.381-76.8 76.8s34.406 76.8 76.8 76.8c42.394 0 76.8-34.381 76.8-76.8s-34.406-76.8-76.8-76.8zM128 691.2c14.157 0 25.6 11.443 25.6 25.6s-11.443 25.6-25.6 25.6c-14.157 0-25.6-11.443-25.6-25.6s11.443-25.6 25.6-25.6zM307.2 691.2c-14.157 0-25.6 11.443-25.6 25.6s11.443 25.6 25.6 25.6h640c14.157 0 25.6-11.443 25.6-25.6s-11.443-25.6-25.6-25.6h-640zM128 844.8c-42.394 0-76.8 34.381-76.8 76.8s34.406 76.8 76.8 76.8c42.394 0 76.8-34.381 76.8-76.8s-34.406-76.8-76.8-76.8zM128 896c14.157 0 25.6 11.443 25.6 25.6s-11.443 25.6-25.6 25.6c-14.157 0-25.6-11.443-25.6-25.6s11.443-25.6 25.6-25.6zM307.2 896c-14.157 0-25.6 11.443-25.6 25.6s11.443 25.6 25.6 25.6h640c14.157 0 25.6-11.443 25.6-25.6s-11.443-25.6-25.6-25.6h-640z" + "M892.083 131.917c-73.523-73.498-193.152-73.498-266.65 0l-157.184 157.107c-9.958 10.035-9.958 26.214 0 36.275 10.061 9.984 26.24 9.984 36.25 0l157.133-157.107c53.504-53.555 140.672-53.555 194.176 0 53.581 53.504 53.581 140.672 0 194.176l-186.138 186.163c-53.53 53.581-140.672 53.581-194.176 0-10.086-10.010-26.24-10.010-36.275 0-10.035 10.086-10.035 26.189 0 36.25 36.787 36.736 84.992 55.117 133.325 55.117s96.589-18.432 133.376-55.117l186.163-186.214c73.498-73.472 73.498-193.152 0-266.65zM519.45 698.726l-157.082 157.082c-53.504 53.555-140.672 53.555-194.176 0-53.581-53.504-53.581-140.672 0-194.176l186.138-186.163c53.53-53.581 140.672-53.581 194.176 0 10.086 9.984 26.189 9.984 36.275 0 10.035-10.086 10.035-26.214 0-36.25-73.549-73.498-193.203-73.498-266.701 0l-186.163 186.163c-73.498 73.574-73.498 193.203 0 266.701 36.787 36.71 85.043 55.117 133.325 55.117 48.333 0 96.538-18.406 133.325-55.117l157.133-157.133c10.010-10.010 10.010-26.189 0-36.224-10.010-9.984-26.189-9.984-36.25 0z" ], "attrs": [ {} @@ -1107,56 +1048,65 @@ "isMulticolor2": false, "grid": 0, "tags": [ - "control-dropdown" + "reference" ] }, "attrs": [ {} ], "properties": { - "order": 39, - "id": 29, - "name": "control-Dropdown", + "order": 45, + "id": 8, + "name": "reference", "prevSize": 32, - "code": 59659 + "code": 59680 }, "setIdx": 1, "setId": 1, - "iconIdx": 17 + "iconIdx": 56 }, { "icon": { "paths": [ - "M512 0c-14.157 0-25.6 11.443-25.6 25.6s11.443 25.6 25.6 25.6h128v870.4h-128c-14.157 0-25.6 11.443-25.6 25.6s11.443 25.6 25.6 25.6h307.2c14.157 0 25.6-11.443 25.6-25.6s-11.443-25.6-25.6-25.6h-128v-870.4h128c14.157 0 25.6-11.443 25.6-25.6s-11.443-25.6-25.6-25.6h-307.2zM51.2 204.8c-28.262 0-51.2 22.938-51.2 51.2v460.8c0 28.262 22.938 51.2 51.2 51.2h537.6v-51.2h-512c-14.131 0-25.6-11.443-25.6-25.6v-409.6c0-14.157 11.469-25.6 25.6-25.6h512v-51.2h-537.6zM742.4 204.8v51.2h204.8c14.157 0 25.6 11.443 25.6 25.6v409.6c0 14.157-11.443 25.6-25.6 25.6h-204.8v51.2h230.4c28.262 0 51.2-22.938 51.2-51.2v-460.8c0-28.262-22.938-51.2-51.2-51.2h-230.4zM285.9 307c-0.589 0.051-1.161 0.048-1.75 0.15-8.243 0.051-16.396 4.474-20.85 13.050l-132.55 306.25c-6.656 12.749-2.866 28.981 8.5 36.2 11.341 7.219 25.97 2.749 32.6-10l27.65-63.85h170.5c0.512 0 0.914-0.224 1.4-0.25l27.45 64.050c6.63 12.749 21.136 17.269 32.4 10.050s15.005-23.451 8.4-36.2l-131.3-306.25c-4.454-8.576-12.432-12.973-20.65-13.050-0.614-0.102-1.211-0.099-1.8-0.15zM285.9 389.15l63.65 148.45h-127.9l64.25-148.45z" + "M800 1024h-576c-124.8 0-224-99.2-224-224v-300.8c0-124.8 99.2-224 224-224h576c124.8 0 224 99.2 224 224v300.8c0 124.8-99.2 224-224 224zM224 339.2c-89.6 0-160 70.4-160 160v300.8c0 89.6 70.4 160 160 160h576c89.6 0 160-70.4 160-160v-300.8c0-89.6-70.4-160-160-160h-576z", + "M828.8 201.6h-633.6c-19.2 0-32-12.8-32-32s12.8-32 32-32h630.4c19.2 0 32 12.8 32 32s-12.8 32-28.8 32z", + "M716.8 64h-409.6c-19.2 0-32-12.8-32-32s12.8-32 32-32h412.8c19.2 0 32 12.8 32 32s-16 32-35.2 32z", + "M800 416v64c0 48-38.4 83.2-83.2 83.2h-409.6c-44.8 3.2-83.2-35.2-83.2-83.2v-64h-54.4v64c0 76.8 64 140.8 140.8 140.8h406.4c76.8 0 140.8-64 140.8-140.8v-64h-57.6z" ], "attrs": [ + {}, + {}, + {}, {} ], "isMulticolor": false, "isMulticolor2": false, "grid": 0, "tags": [ - "control-input" + "schemas" ] }, "attrs": [ + {}, + {}, + {}, {} ], "properties": { - "order": 41, - "id": 28, - "name": "control-Input", + "order": 46, + "id": 7, + "name": "schemas", "prevSize": 32, - "code": 59660 + "code": 59681 }, "setIdx": 1, "setId": 1, - "iconIdx": 18 + "iconIdx": 57 }, { "icon": { "paths": [ - "M153.6 716.8c-84.787 0-153.6 68.813-153.6 153.6s68.813 153.6 153.6 153.6c84.787 0 153.6-68.813 153.6-153.6s-68.813-153.6-153.6-153.6zM153.6 972.8c-56.55 0-102.4-45.85-102.4-102.4s45.85-102.4 102.4-102.4c56.55 0 102.4 45.85 102.4 102.4s-45.85 102.4-102.4 102.4zM384 179.2h614.4c14.157 0 25.6-11.443 25.6-25.6s-11.443-25.6-25.6-25.6h-614.4c-14.131 0-25.6 11.443-25.6 25.6s11.469 25.6 25.6 25.6zM998.4 486.4h-614.4c-14.131 0-25.6 11.443-25.6 25.6s11.469 25.6 25.6 25.6h614.4c14.157 0 25.6-11.443 25.6-25.6s-11.443-25.6-25.6-25.6zM153.6 0c-84.787 0-153.6 68.787-153.6 153.6s68.813 153.6 153.6 153.6c84.787 0 153.6-68.787 153.6-153.6s-68.813-153.6-153.6-153.6zM153.6 256c-56.55 0-102.4-45.85-102.4-102.4s45.85-102.4 102.4-102.4c56.55 0 102.4 45.85 102.4 102.4s-45.85 102.4-102.4 102.4zM153.6 358.4c-84.787 0-153.6 68.787-153.6 153.6 0 84.787 68.813 153.6 153.6 153.6s153.6-68.813 153.6-153.6c0-84.813-68.813-153.6-153.6-153.6zM153.6 614.4c-56.55 0-102.4-45.85-102.4-102.4s45.85-102.4 102.4-102.4c56.55 0 102.4 45.85 102.4 102.4s-45.85 102.4-102.4 102.4zM153.6 102.4c-28.262 0-51.2 22.938-51.2 51.2s22.938 51.2 51.2 51.2c28.262 0 51.2-22.938 51.2-51.2s-22.938-51.2-51.2-51.2zM998.4 844.8h-614.4c-14.131 0-25.6 11.443-25.6 25.6s11.469 25.6 25.6 25.6h614.4c14.157 0 25.6-11.443 25.6-25.6s-11.443-25.6-25.6-25.6z" + "M939.776 1003.776c-27.2 27.008-71.232 27.008-98.368 0l-168.96-168.96c-66.176 38.464-142.016 62.080-224 62.080-247.744 0-448.448-200.832-448.448-448.448 0-247.744 200.704-448.448 448.448-448.448 247.68 0 448.512 200.704 448.512 448.448 0 115.136-44.672 218.944-115.904 298.304l158.656 158.656c27.008 27.136 27.008 71.168 0.064 98.368zM448.448 128.128c-176.896 0-320.32 143.36-320.32 320.32s143.424 320.32 320.32 320.32c176.96 0 320.384-143.36 320.384-320.32s-143.488-320.32-320.384-320.32z" ], "attrs": [ {} @@ -1165,27 +1115,27 @@ "isMulticolor2": false, "grid": 0, "tags": [ - "control-radio" + "search" ] }, "attrs": [ {} ], "properties": { - "order": 42, - "id": 27, - "name": "control-Radio", + "order": 23, + "id": 6, + "name": "search", "prevSize": 32, - "code": 59661 + "code": 59682 }, "setIdx": 1, "setId": 1, - "iconIdx": 19 + "iconIdx": 58 }, { "icon": { "paths": [ - "M0 0v204.8h76.8v76.8h51.2v-76.8h76.8v-204.8h-204.8zM819.2 0v204.8h204.8v-204.8h-204.8zM51.2 51.2h102.4v102.4h-102.4v-102.4zM870.4 51.2h102.4v102.4h-102.4v-102.4zM281.6 76.8v51.2h102.4v-51.2h-102.4zM486.4 76.8v51.2h102.4v-51.2h-102.4zM691.2 76.8v51.2h102.4v-51.2h-102.4zM333.25 204.8c-7.091-0.307-14.348 2.097-19.75 7.55l-74.75 74.75c-10.317 10.291-10.317 27.083 0 37.4s27.059 10.317 37.35 0l68.45-68.5h141.85v486.4h-50.7c-7.117-0.307-14.348 2.097-19.75 7.55l-23.6 23.55c-10.317 10.317-10.317 27.083 0 37.4 10.291 10.317 27.109 10.317 37.4 0l17.25-17.3h129.75l18.050 18c10.394 10.368 27.181 10.368 37.6 0 10.368-10.394 10.368-27.181 0-37.6l-24-24c-5.478-5.478-12.682-7.907-19.85-7.6h-50.95v-486.4h141.55l69.25 69.2c10.394 10.368 27.155 10.368 37.6 0 10.368-10.368 10.368-27.181 0-37.6l-75.2-75.2c-5.478-5.478-12.706-7.907-19.9-7.6h-357.65zM896 281.6v102.4h51.2v-102.4h-51.2zM76.8 384v102.4h51.2v-102.4h-51.2zM896 486.4v102.4h51.2v-102.4h-51.2zM76.8 588.8v102.4h51.2v-102.4h-51.2zM896 691.2v102.4h51.2v-102.4h-51.2zM76.8 793.6v25.6h-76.8v204.8h204.8v-76.8h76.8v-51.2h-76.8v-76.8h-76.8v-25.6h-51.2zM819.2 819.2v76.8h-25.6v51.2h25.6v76.8h204.8v-204.8h-204.8zM51.2 870.4h102.4v102.4h-102.4v-102.4zM870.4 870.4h102.4v102.4h-102.4v-102.4zM384 896v51.2h102.4v-51.2h-102.4zM588.8 896v51.2h102.4v-51.2h-102.4z" + "M1019.11 440.755c-1.946-13.747-14.438-23.398-28.16-21.888-16.947 1.843-34.253-0.589-50.048-7.091-52.25-21.504-77.261-81.459-55.757-133.709 6.605-15.846 16.947-29.85 30.208-40.602 10.803-8.653 12.698-24.294 4.352-35.354-28.902-37.99-62.797-71.706-100.838-100.045-10.701-8.090-25.805-6.451-34.662 3.661-28.8 33.254-75.546 44.262-116.198 27.546-40.704-16.742-66.099-57.498-63.206-101.453 0.845-13.338-8.755-25.19-21.99-27.008-47.002-6.605-94.797-6.605-142.054 0.077-13.722 1.946-23.398 14.387-21.862 28.211 1.843 16.896-0.614 34.202-7.168 49.997-21.504 52.25-81.408 77.21-133.632 55.706-15.821-6.502-29.85-16.947-40.602-30.157-8.653-10.752-24.32-12.698-35.379-4.301-37.99 28.851-71.68 62.694-100.045 100.762-8.090 10.701-6.451 25.83 3.635 34.637 33.28 28.902 44.288 75.597 27.546 116.301-16.742 40.653-57.498 66.048-101.427 63.155-13.363-0.845-25.19 8.755-26.982 21.99-6.63 47.002-6.63 94.822 0.102 142.080 1.946 13.696 14.387 23.322 28.16 21.811 16.896-1.818 34.202 0.691 50.022 7.168 52.224 21.53 77.21 81.459 55.706 133.734-6.502 15.795-16.947 29.773-30.157 40.525-10.803 8.73-12.698 24.346-4.352 35.354 28.877 38.042 62.822 71.731 100.813 100.122 1.741 1.357 3.661 2.355 5.606 3.2 9.933 4.045 21.709 1.536 29.082-6.938 28.826-33.178 75.571-44.262 116.275-27.52 40.653 16.742 66.048 57.498 63.13 101.453-0.819 13.338 8.755 25.165 22.067 27.059 47.002 6.579 94.72 6.554 142.029-0.102 13.645-1.971 23.347-14.464 21.811-28.237-1.843-16.947 0.691-34.253 7.194-50.048 21.504-52.25 81.459-77.21 133.658-55.68 15.795 6.528 29.85 16.947 40.55 30.157 8.704 10.803 24.346 12.698 35.405 4.326 37.99-28.902 71.654-62.746 100.096-100.813 7.987-10.675 6.4-25.805-3.712-34.662-33.254-28.826-44.288-75.571-27.546-116.224 16.742-40.73 57.498-66.099 101.453-63.232 13.338 0.922 25.139-8.678 27.008-21.965 6.554-47.002 6.502-94.771-0.128-142.003zM971.059 554.010c-56.141 5.274-105.702 41.114-127.642 94.464s-12.058 113.613 24.090 156.902c-17.69 21.478-37.453 41.318-58.854 59.315-12.749-11.213-27.392-20.352-43.238-26.854-78.259-32.282-168.243 5.197-200.499 83.584-6.502 15.718-10.291 32.563-11.29 49.536-27.853 2.56-55.859 2.637-83.61 0.077-5.274-56.090-41.114-105.677-94.464-127.616-53.35-21.99-113.613-11.981-156.928 24.064-21.504-17.69-41.318-37.453-59.29-58.88 11.213-12.723 20.352-27.392 26.906-43.136 32.205-78.387-5.274-168.294-83.584-200.55-15.821-6.502-32.589-10.342-49.613-11.366-2.534-27.853-2.586-55.859 0-83.558 56.090-5.299 105.626-41.088 127.565-94.438 21.965-53.402 12.058-113.638-24.090-156.902 17.69-21.555 37.478-41.395 58.88-59.341 12.749 11.213 27.392 20.352 43.213 26.854 78.285 32.256 168.218-5.248 200.474-83.558 6.528-15.795 10.342-32.589 11.366-49.613 27.853-2.509 55.808-2.56 83.558 0 5.299 56.090 41.139 105.6 94.49 127.59 53.35 21.939 113.638 12.006 156.902-24.090 21.504 17.741 41.293 37.453 59.29 58.854-11.213 12.8-20.352 27.392-26.854 43.213-32.256 78.31 5.248 168.294 83.507 200.499 15.846 6.502 32.691 10.342 49.638 11.392 2.56 27.853 2.611 55.808 0.077 83.558zM512 307.2c-113.101 0-204.8 91.699-204.8 204.8 0 113.126 91.699 204.826 204.8 204.826s204.8-91.699 204.8-204.826c0-113.101-91.699-204.8-204.8-204.8zM512 665.626c-84.813 0-153.6-68.813-153.6-153.626 0-84.838 68.787-153.6 153.6-153.6 84.838 0 153.6 68.762 153.6 153.6 0 84.813-68.762 153.626-153.6 153.626z" ], "attrs": [ {} @@ -1194,27 +1144,27 @@ "isMulticolor2": false, "grid": 0, "tags": [ - "control-textarea" + "settings" ] }, "attrs": [ {} ], "properties": { - "order": 17, - "id": 26, - "name": "control-TextArea", + "order": 22, + "id": 5, + "name": "settings", "prevSize": 32, - "code": 59662 + "code": 59683 }, "setIdx": 1, "setId": 1, - "iconIdx": 20 + "iconIdx": 59 }, { "icon": { "paths": [ - "M332.8 25.6c-127.258 0-230.4 103.142-230.4 230.4s103.142 230.4 230.4 230.4h358.4c127.258 0 230.4-103.142 230.4-230.4s-103.142-230.4-230.4-230.4h-358.4zM332.8 76.8h358.4c98.97 0 179.2 80.23 179.2 179.2s-80.23 179.2-179.2 179.2h-358.4c-98.97 0-179.2-80.23-179.2-179.2s80.23-179.2 179.2-179.2zM332.8 128c-70.707 0-128 57.293-128 128s57.293 128 128 128c70.707 0 128-57.293 128-128s-57.293-128-128-128zM332.8 179.2c42.419 0 76.8 34.381 76.8 76.8s-34.381 76.8-76.8 76.8c-42.419 0-76.8-34.381-76.8-76.8s34.381-76.8 76.8-76.8zM332.8 537.6c-127.258 0-230.4 103.142-230.4 230.4s103.142 230.4 230.4 230.4h358.4c127.258 0 230.4-103.142 230.4-230.4s-103.142-230.4-230.4-230.4h-358.4zM332.8 588.8h358.4c98.97 0 179.2 80.23 179.2 179.2s-80.23 179.2-179.2 179.2h-358.4c-98.97 0-179.2-80.23-179.2-179.2s80.23-179.2 179.2-179.2zM691.2 640c-70.707 0-128 57.293-128 128s57.293 128 128 128c70.707 0 128-57.293 128-128s-57.293-128-128-128zM691.2 691.2c42.419 0 76.8 34.381 76.8 76.8s-34.381 76.8-76.8 76.8c-42.419 0-76.8-34.381-76.8-76.8s34.381-76.8 76.8-76.8z" + "M77.005 102.605h128v332.8c0 14.131 11.418 25.6 25.6 25.6 14.106 0 25.6-11.469 25.6-25.6v-332.8h128c14.106 0 25.6-11.469 25.6-25.6 0-14.157-11.494-25.6-25.6-25.6h-307.2c-14.182 0-25.6 11.443-25.6 25.6 0 14.106 11.418 25.6 25.6 25.6zM947.405 716.979h-179.2v-102.4h179.2c14.157 0 25.6-11.443 25.6-25.6s-11.443-25.6-25.6-25.6h-204.8c-14.182 0-25.6 11.443-25.6 25.6v358.4c0 14.157 11.418 25.6 25.6 25.6 14.157 0 25.6-11.443 25.6-25.6v-179.2h179.2c14.157 0 25.6-11.443 25.6-25.6s-11.494-25.6-25.6-25.6zM965.094 58.47c-9.958-9.933-26.112-9.933-36.045 0l-870.605 870.579c-9.958 9.984-9.958 26.086 0 36.045 10.010 9.984 26.112 9.984 36.045 0l870.605-870.579c9.958-9.933 9.958-26.086 0-36.045z" ], "attrs": [ {} @@ -1223,27 +1173,27 @@ "isMulticolor2": false, "grid": 0, "tags": [ - "control-toggle" + "type-boolean" ] }, "attrs": [ {} ], "properties": { - "order": 16, - "id": 25, - "name": "control-Toggle", + "order": 21, + "id": 4, + "name": "type-Boolean", "prevSize": 32, - "code": 59663 + "code": 59684 }, "setIdx": 1, "setId": 1, - "iconIdx": 21 + "iconIdx": 60 }, { "icon": { "paths": [ - "M204.8 51.2c-56.525 0-102.4 45.875-102.4 102.4v512c0 56.525 45.875 102.4 102.4 102.4h409.6c56.525 0 102.4-45.875 102.4-102.4v-512c0-56.525-45.875-102.4-102.4-102.4h-409.6zM204.8 102.4h409.6c28.262 0 51.2 22.886 51.2 51.2v512c0 28.314-22.938 51.2-51.2 51.2h-409.6c-28.262 0-51.2-22.886-51.2-51.2v-512c0-28.314 22.938-51.2 51.2-51.2zM768 204.8v51.2c28.262 0 51.2 22.886 51.2 51.2v512c0 28.314-22.938 51.2-51.2 51.2h-409.6c-28.262 0-51.2-22.886-51.2-51.2h-51.2c0 56.525 45.875 102.4 102.4 102.4h409.6c56.525 0 102.4-45.875 102.4-102.4v-512c0-56.525-45.875-102.4-102.4-102.4z" + "M947.2 102.4h-128v-25.6c0-14.131-11.469-25.6-25.6-25.6s-25.6 11.469-25.6 25.6v25.6h-512v-25.6c0-14.131-11.52-25.6-25.6-25.6s-25.6 11.469-25.6 25.6v25.6h-128c-42.342 0-76.8 34.458-76.8 76.8v716.8c0 42.342 34.458 76.8 76.8 76.8h870.4c42.342 0 76.8-34.458 76.8-76.8v-716.8c0-42.342-34.458-76.8-76.8-76.8zM972.8 896c0 14.131-11.469 25.6-25.6 25.6h-870.4c-14.080 0-25.6-11.469-25.6-25.6v-537.6h921.6v537.6zM972.8 307.2h-921.6v-128c0-14.080 11.52-25.6 25.6-25.6h128v76.8c0 14.080 11.52 25.6 25.6 25.6s25.6-11.52 25.6-25.6v-76.8h512v76.8c0 14.080 11.469 25.6 25.6 25.6s25.6-11.52 25.6-25.6v-76.8h128c14.131 0 25.6 11.52 25.6 25.6v128zM332.8 512h51.2c14.080 0 25.6-11.52 25.6-25.6s-11.52-25.6-25.6-25.6h-51.2c-14.080 0-25.6 11.52-25.6 25.6s11.52 25.6 25.6 25.6zM486.4 512h51.2c14.131 0 25.6-11.52 25.6-25.6s-11.469-25.6-25.6-25.6h-51.2c-14.080 0-25.6 11.52-25.6 25.6s11.52 25.6 25.6 25.6zM640 512h51.2c14.131 0 25.6-11.52 25.6-25.6s-11.469-25.6-25.6-25.6h-51.2c-14.131 0-25.6 11.52-25.6 25.6s11.469 25.6 25.6 25.6zM793.6 512h51.2c14.131 0 25.6-11.52 25.6-25.6s-11.469-25.6-25.6-25.6h-51.2c-14.131 0-25.6 11.52-25.6 25.6s11.469 25.6 25.6 25.6zM179.2 614.4h51.2c14.080 0 25.6-11.469 25.6-25.6s-11.52-25.6-25.6-25.6h-51.2c-14.080 0-25.6 11.469-25.6 25.6s11.52 25.6 25.6 25.6zM332.8 614.4h51.2c14.080 0 25.6-11.469 25.6-25.6s-11.52-25.6-25.6-25.6h-51.2c-14.080 0-25.6 11.469-25.6 25.6s11.52 25.6 25.6 25.6zM486.4 614.4h51.2c14.131 0 25.6-11.469 25.6-25.6s-11.469-25.6-25.6-25.6h-51.2c-14.080 0-25.6 11.469-25.6 25.6s11.52 25.6 25.6 25.6zM640 614.4h51.2c14.131 0 25.6-11.469 25.6-25.6s-11.469-25.6-25.6-25.6h-51.2c-14.131 0-25.6 11.469-25.6 25.6s11.469 25.6 25.6 25.6zM793.6 614.4h51.2c14.131 0 25.6-11.469 25.6-25.6s-11.469-25.6-25.6-25.6h-51.2c-14.131 0-25.6 11.469-25.6 25.6s11.469 25.6 25.6 25.6zM179.2 716.8h51.2c14.080 0 25.6-11.469 25.6-25.6s-11.52-25.6-25.6-25.6h-51.2c-14.080 0-25.6 11.469-25.6 25.6s11.52 25.6 25.6 25.6zM332.8 716.8h51.2c14.080 0 25.6-11.469 25.6-25.6s-11.52-25.6-25.6-25.6h-51.2c-14.080 0-25.6 11.469-25.6 25.6s11.52 25.6 25.6 25.6zM486.4 716.8h51.2c14.131 0 25.6-11.469 25.6-25.6s-11.469-25.6-25.6-25.6h-51.2c-14.080 0-25.6 11.469-25.6 25.6s11.52 25.6 25.6 25.6zM640 716.8h51.2c14.131 0 25.6-11.469 25.6-25.6s-11.469-25.6-25.6-25.6h-51.2c-14.131 0-25.6 11.469-25.6 25.6s11.469 25.6 25.6 25.6zM793.6 716.8h51.2c14.131 0 25.6-11.469 25.6-25.6s-11.469-25.6-25.6-25.6h-51.2c-14.131 0-25.6 11.469-25.6 25.6s11.469 25.6 25.6 25.6zM179.2 819.2h51.2c14.080 0 25.6-11.469 25.6-25.6s-11.52-25.6-25.6-25.6h-51.2c-14.080 0-25.6 11.469-25.6 25.6s11.52 25.6 25.6 25.6zM332.8 819.2h51.2c14.080 0 25.6-11.469 25.6-25.6s-11.52-25.6-25.6-25.6h-51.2c-14.080 0-25.6 11.469-25.6 25.6s11.52 25.6 25.6 25.6zM486.4 819.2h51.2c14.131 0 25.6-11.469 25.6-25.6s-11.469-25.6-25.6-25.6h-51.2c-14.080 0-25.6 11.469-25.6 25.6s11.52 25.6 25.6 25.6zM640 819.2h51.2c14.131 0 25.6-11.469 25.6-25.6s-11.469-25.6-25.6-25.6h-51.2c-14.131 0-25.6 11.469-25.6 25.6s11.469 25.6 25.6 25.6zM793.6 819.2h51.2c14.131 0 25.6-11.469 25.6-25.6s-11.469-25.6-25.6-25.6h-51.2c-14.131 0-25.6 11.469-25.6 25.6s11.469 25.6 25.6 25.6z" ], "attrs": [ {} @@ -1252,62 +1202,56 @@ "isMulticolor2": false, "grid": 0, "tags": [ - "copy" + "type-datetime" ] }, "attrs": [ {} ], "properties": { - "order": 90, - "id": 24, - "name": "copy", + "order": 24, + "id": 3, + "name": "type-DateTime", "prevSize": 32, - "code": 59664 + "code": 59685 }, "setIdx": 1, "setId": 1, - "iconIdx": 22 + "iconIdx": 61 }, { "icon": { "paths": [ - "M828.8 1024h-633.6c-105.6 0-195.2-89.6-195.2-195.2v-320c0-281.6 227.2-508.8 505.6-508.8 288 0 518.4 230.4 518.4 518.4v310.4c0 105.6-89.6 195.2-195.2 195.2zM505.6 64c-243.2 0-441.6 198.4-441.6 441.6v320c0 73.6 60.8 134.4 131.2 134.4h630.4c73.6 0 131.2-60.8 131.2-131.2v-310.4c3.2-249.6-201.6-454.4-451.2-454.4z", - "M512 668.8c-3.2 0-6.4 0-6.4 0-32-3.2-64-19.2-80-48l-192-278.4c-9.6-9.6-9.6-25.6-0-38.4 9.6-9.6 25.6-12.8 38.4-6.4l294.4 172.8c28.8 16 48 44.8 51.2 76.8s-6.4 64-28.8 89.6c-19.2 22.4-48 32-76.8 32zM364.8 428.8l108.8 160c6.4 9.6 19.2 19.2 32 19.2s25.6-3.2 35.2-12.8c9.6-9.6 12.8-22.4 9.6-35.2s-9.6-22.4-19.2-32l-166.4-99.2z", - "M678.4 364.8c-6.4 0-12.8-3.2-19.2-6.4-16-9.6-19.2-28.8-9.6-44.8l54.4-83.2c9.6-16 28.8-19.2 44.8-9.6 19.2 12.8 22.4 35.2 12.8 48l-54.4 83.2c-6.4 9.6-16 12.8-28.8 12.8z" + "M179.2 256c0-28.262 22.938-51.2 51.2-51.2h25.6c14.157 0 25.6-11.443 25.6-25.6 0-14.131-11.443-25.6-25.6-25.6h-25.6c-56.55 0-102.4 45.85-102.4 102.4v179.2c0 28.262-22.938 51.2-51.2 51.2h-25.6c-14.157 0-25.6 11.469-25.6 25.6 0 14.157 11.443 25.6 25.6 25.6h25.6c28.262 0 51.2 22.938 51.2 51.2v179.2c0 56.55 45.85 102.4 102.4 102.4h25.6c14.157 0 25.6-11.443 25.6-25.6s-11.443-25.6-25.6-25.6h-25.6c-28.262 0-51.2-22.938-51.2-51.2v-179.2c0-30.746-13.85-58.061-35.328-76.8 21.478-18.765 35.328-46.029 35.328-76.8v-179.2zM972.8 486.4h-25.6c-28.262 0-51.2-22.938-51.2-51.2v-179.2c0-56.55-45.85-102.4-102.4-102.4h-25.6c-14.157 0-25.6 11.469-25.6 25.6 0 14.157 11.443 25.6 25.6 25.6h25.6c28.262 0 51.2 22.938 51.2 51.2v179.2c0 30.771 13.85 58.035 35.328 76.8-21.478 18.739-35.328 46.054-35.328 76.8v179.2c0 28.262-22.938 51.2-51.2 51.2h-25.6c-14.157 0-25.6 11.443-25.6 25.6s11.443 25.6 25.6 25.6h25.6c56.55 0 102.4-45.85 102.4-102.4v-179.2c0-28.262 22.938-51.2 51.2-51.2h25.6c14.157 0 25.6-11.443 25.6-25.6 0-14.131-11.443-25.6-25.6-25.6zM512 332.8c-14.157 0-25.6 11.469-25.6 25.6 0 14.157 11.443 25.6 25.6 25.6s25.6-11.443 25.6-25.6c0-14.131-11.443-25.6-25.6-25.6zM512 435.2c-14.157 0-25.6 11.469-25.6 25.6v204.8c0 14.157 11.443 25.6 25.6 25.6s25.6-11.443 25.6-25.6v-204.8c0-14.131-11.443-25.6-25.6-25.6z" ], "attrs": [ - {}, - {}, {} ], "isMulticolor": false, "isMulticolor2": false, "grid": 0, "tags": [ - "dashboard" + "json" ] }, "attrs": [ - {}, - {}, {} ], "properties": { - "order": 26, - "id": 23, - "name": "dashboard", + "order": 20, + "id": 14, + "name": "type-Json, json", "prevSize": 32, - "code": 59665 + "code": 59674 }, "setIdx": 1, "setId": 1, - "iconIdx": 23 + "iconIdx": 62 }, { "icon": { "paths": [ - "M597.35 819.2c14.131 0 25.6-11.469 25.6-25.6v-307.2c0-14.080-11.469-25.6-25.6-25.6s-25.6 11.52-25.6 25.6v307.2c0 14.131 11.418 25.6 25.6 25.6zM776.55 204.8h-153.6v-51.2c0-28.314-22.886-51.2-51.2-51.2h-102.4c-28.262 0-51.2 22.886-51.2 51.2v51.2h-153.6c-28.262 0-51.2 22.886-51.2 51.2v102.4c0 28.314 22.938 51.2 51.2 51.2v460.8c0 28.314 22.938 51.2 51.2 51.2h409.6c28.314 0 51.2-22.886 51.2-51.2v-460.8c28.314 0 51.2-22.886 51.2-51.2v-102.4c0-28.314-22.938-51.2-51.2-51.2zM469.35 153.6h102.4v51.2h-102.4v-51.2zM725.35 870.4h-409.6v-460.8h409.6v460.8zM776.55 358.4h-512v-102.4h512v102.4zM443.75 819.2c14.131 0 25.6-11.469 25.6-25.6v-307.2c0-14.080-11.469-25.6-25.6-25.6s-25.6 11.52-25.6 25.6v307.2c0 14.131 11.469 25.6 25.6 25.6z" + "M256 665.6h-76.8v-332.8c0-14.131-11.469-25.6-25.6-25.6h-76.8c-14.131 0-25.6 11.469-25.6 25.6s11.469 25.6 25.6 25.6h51.2v307.2h-76.8c-14.131 0-25.6 11.469-25.6 25.6s11.469 25.6 25.6 25.6h204.8c14.131 0 25.6-11.469 25.6-25.6s-11.469-25.6-25.6-25.6zM614.4 307.2h-204.8c-14.131 0-25.6 11.469-25.6 25.6s11.469 25.6 25.6 25.6h179.2v128h-179.2c-14.131 0-25.6 11.469-25.6 25.6v179.2c0 14.131 11.469 25.6 25.6 25.6h204.8c14.131 0 25.6-11.469 25.6-25.6s-11.469-25.6-25.6-25.6h-179.2v-128h179.2c14.131 0 25.6-11.469 25.6-25.6v-179.2c0-14.131-11.469-25.6-25.6-25.6zM972.8 307.2h-204.8c-14.131 0-25.6 11.469-25.6 25.6s11.469 25.6 25.6 25.6h179.2v128h-179.2c-14.131 0-25.6 11.469-25.6 25.6s11.469 25.6 25.6 25.6h179.2v128h-179.2c-14.131 0-25.6 11.469-25.6 25.6s11.469 25.6 25.6 25.6h204.8c14.131 0 25.6-11.469 25.6-25.6v-358.4c0-14.131-11.469-25.6-25.6-25.6z" ], "attrs": [ {} @@ -1316,27 +1260,27 @@ "isMulticolor2": false, "grid": 0, "tags": [ - "delete" + "type-number" ] }, "attrs": [ {} ], "properties": { - "order": 29, - "id": 22, - "name": "delete, bin", + "order": 32, + "id": 2, + "name": "type-Number", "prevSize": 32, - "code": 59666 + "code": 59686 }, "setIdx": 1, "setId": 1, - "iconIdx": 24 + "iconIdx": 63 }, { "icon": { "paths": [ - "M832 128h-192v-64c0-35.392-28.608-64-64-64h-128c-35.328 0-64 28.608-64 64v64h-192c-35.328 0-64 28.608-64 64v128c0 35.392 28.672 64 64 64v512c0 35.392 28.672 64 64 64h512c35.392 0 64-28.608 64-64v-512c35.392 0 64-28.608 64-64v-128c0-35.392-28.608-64-64-64zM448 64h128v64h-128v-64zM448 800c0 17.664-14.336 32-32 32s-32-14.336-32-32v-320c0-17.6 14.336-32 32-32s32 14.4 32 32v320zM640 800c0 17.664-14.336 32-32 32s-32-14.336-32-32v-320c0-17.6 14.336-32 32-32s32 14.4 32 32v320zM832 320h-640v-128h640v128z" + "M870.4 921.6h-716.8c-14.131 0-25.6 11.443-25.6 25.6s11.469 25.6 25.6 25.6h716.8c14.157 0 25.6-11.443 25.6-25.6s-11.443-25.6-25.6-25.6zM194.688 817.152c13.030 5.555 28.083-0.461 33.613-13.44l125.030-291.712h317.338l125.005 291.712c4.173 9.677 13.568 15.488 23.526 15.488 3.405 0 6.81-0.64 10.112-2.048 13.005-5.606 18.995-20.659 13.44-33.638l-131.61-306.944c-0.051-0.051-0.051-0.154-0.102-0.205l-175.488-409.6c-4.045-9.472-13.312-15.565-23.552-15.565s-19.507 6.093-23.552 15.514l-175.488 409.6c-0.051 0.051-0.051 0.154-0.102 0.205l-131.61 306.97c-5.53 13.005 0.461 28.058 13.44 33.664zM512 141.773l136.704 319.027h-273.408l136.704-319.027z" ], "attrs": [ {} @@ -1345,27 +1289,27 @@ "isMulticolor2": false, "grid": 0, "tags": [ - "delete-filled" + "type-string" ] }, "attrs": [ {} ], "properties": { - "order": 36, - "id": 21, - "name": "delete-filled", + "order": 48, + "id": 1, + "name": "type-String", "prevSize": 32, - "code": 59667 + "code": 59687 }, "setIdx": 1, "setId": 1, - "iconIdx": 25 + "iconIdx": 64 }, { "icon": { "paths": [ - "M358.4 102.4c-28.314 0-51.2 22.886-51.2 51.2v256h51.2v-256h307.2v153.6c0 28.314 22.886 51.2 51.2 51.2h153.6v512h-358.4v51.2h358.4c28.314 0 51.2-22.886 51.2-51.2v-548.2l-219.8-219.8h-343.4zM716.8 189.8l117.4 117.4h-117.4v-117.4zM332.8 460.8c-127.232 0-230.4 103.168-230.4 230.4s103.168 230.4 230.4 230.4c127.232 0 230.4-103.168 230.4-230.4s-103.168-230.4-230.4-230.4zM332.8 512c98.816 0 179.2 80.384 179.2 179.2s-80.384 179.2-179.2 179.2c-98.816 0-179.2-80.384-179.2-179.2s80.384-179.2 179.2-179.2zM227.2 665.6c-12.39 0-22.4 10.061-22.4 22.4v6.4c0 12.39 10.010 22.4 22.4 22.4h211.2c12.39 0 22.4-10.010 22.4-22.4v-6.4c0-12.39-10.061-22.4-22.4-22.4h-211.2z" + "M955.221 848c0-0.109 10.752 0 0 0-52.751-161.392-240.461-224-443.178-224-202.269 0-389.979 63.392-443.066 224-11.2-0.109 0-1.232 0 0 0 61.936 49.615 112 110.654 112h664.823c61.151 0 110.766-50.064 110.766-112zM290.399 288c0 123.648 99.231 336 221.645 336s221.645-212.352 221.645-336c0-123.648-99.231-224-221.645-224s-221.645 100.352-221.645 224z" ], "attrs": [ {} @@ -1374,143 +1318,157 @@ "isMulticolor2": false, "grid": 0, "tags": [ - "document-delete" + "user" ] }, "attrs": [ {} ], "properties": { - "order": 35, - "id": 20, - "name": "document-delete", + "order": 33, + "id": 0, + "name": "user", "prevSize": 32, - "code": 59668 + "code": 59688 }, "setIdx": 1, "setId": 1, - "iconIdx": 26 + "iconIdx": 65 }, { "icon": { "paths": [ - "M358.4 102.4c-28.314 0-51.2 22.886-51.2 51.2v256h51.2v-256h307.2v153.6c0 28.314 22.886 51.2 51.2 51.2h153.6v512h-358.4v51.2h358.4c28.314 0 51.2-22.886 51.2-51.2v-548.2l-219.8-219.8h-343.4zM716.8 189.8l117.4 117.4h-117.4v-117.4zM332.8 460.8c-127.232 0-230.4 103.168-230.4 230.4s103.168 230.4 230.4 230.4c127.232 0 230.4-103.168 230.4-230.4s-103.168-230.4-230.4-230.4zM332.8 512c39.934 0 76.475 13.533 106.3 35.7l-250.4 249c-21.807-29.683-35.1-65.924-35.1-105.5 0-98.816 80.384-179.2 179.2-179.2zM477 585.7c21.785 29.674 35 65.947 35 105.5 0 98.816-80.384 179.2-179.2 179.2-39.906 0-76.386-13.561-106.2-35.7l250.4-249z" + "M1024 397.050l-353.78-51.408-158.22-320.582-158.216 320.582-353.784 51.408 256 249.538-60.432 352.352 316.432-166.358 316.432 166.358-60.434-352.352 256.002-249.538z" ], "attrs": [ {} ], "isMulticolor": false, "isMulticolor2": false, - "grid": 0, "tags": [ - "document-disable" - ] + "star-full", + "rate", + "star", + "favorite", + "bookmark" + ], + "grid": 16 }, "attrs": [ {} ], "properties": { - "order": 40, - "id": 19, - "name": "document-disable", + "order": 1, + "id": 2, "prevSize": 32, - "code": 59669 + "code": 59741, + "name": "star-full" }, "setIdx": 1, "setId": 1, - "iconIdx": 27 + "iconIdx": 0 }, { "icon": { "paths": [ - "M358.4 102.4c-28.314 0-51.2 22.886-51.2 51.2v256h51.2v-256h307.2v153.6c0 28.314 22.886 51.2 51.2 51.2h153.6v512h-358.4v51.2h358.4c28.314 0 51.2-22.886 51.2-51.2v-548.2l-219.8-219.8h-343.4zM716.8 189.8l117.4 117.4h-117.4v-117.4zM332.8 460.8l-230.4 256v51.2h102.4v153.6h256v-153.6h102.4v-51.2l-230.4-256zM332.8 537.3l161.5 179.5h-84.7v153.6h-153.6v-153.6h-84.7l161.5-179.5z" + "M1024 397.050l-353.78-51.408-158.22-320.582-158.216 320.582-353.784 51.408 256 249.538-60.432 352.352 316.432-166.358 316.432 166.358-60.434-352.352 256.002-249.538zM512 753.498l-223.462 117.48 42.676-248.83-180.786-176.222 249.84-36.304 111.732-226.396 111.736 226.396 249.836 36.304-180.788 176.222 42.678 248.83-223.462-117.48z" ], "attrs": [ {} ], "isMulticolor": false, "isMulticolor2": false, - "grid": 0, "tags": [ - "document-publish" - ] + "star-empty", + "rate", + "star", + "favorite", + "bookmark" + ], + "grid": 16 }, "attrs": [ {} ], "properties": { - "order": 44, - "id": 18, - "name": "document-publish", + "order": 2, + "id": 1, "prevSize": 32, - "code": 59670 + "code": 59742, + "name": "star-empty" }, "setIdx": 1, "setId": 1, - "iconIdx": 28 + "iconIdx": 1 }, { "icon": { "paths": [ - "M665.6 51.2v102.4h102.4v-102.4h-102.4zM460.8 153.6h102.4v-102.4h-102.4v102.4zM460.8 358.4h102.4v-102.4h-102.4v102.4zM665.6 358.4h102.4v-102.4h-102.4v102.4zM665.6 563.2h102.4v-102.4h-102.4v102.4zM460.8 563.2h102.4v-102.4h-102.4v102.4zM460.8 768h102.4v-102.4h-102.4v102.4zM665.6 768h102.4v-102.4h-102.4v102.4zM665.6 972.8h102.4v-102.4h-102.4v102.4zM460.8 972.8h102.4v-102.4h-102.4v102.4zM256 153.6h102.4v-102.4h-102.4v102.4zM256 358.4h102.4v-102.4h-102.4v102.4zM256 563.2h102.4v-102.4h-102.4v102.4zM256 768h102.4v-102.4h-102.4v102.4zM256 972.8h102.4v-102.4h-102.4v102.4z" + "M1024 226.4c-37.6 16.8-78.2 28-120.6 33 43.4-26 76.6-67.2 92.4-116.2-40.6 24-85.6 41.6-133.4 51-38.4-40.8-93-66.2-153.4-66.2-116 0-210 94-210 210 0 16.4 1.8 32.4 5.4 47.8-174.6-8.8-329.4-92.4-433-219.6-18 31-28.4 67.2-28.4 105.6 0 72.8 37 137.2 93.4 174.8-34.4-1-66.8-10.6-95.2-26.2 0 0.8 0 1.8 0 2.6 0 101.8 72.4 186.8 168.6 206-17.6 4.8-36.2 7.4-55.4 7.4-13.6 0-26.6-1.4-39.6-3.8 26.8 83.4 104.4 144.2 196.2 146-72 56.4-162.4 90-261 90-17 0-33.6-1-50.2-3 93.2 59.8 203.6 94.4 322.2 94.4 386.4 0 597.8-320.2 597.8-597.8 0-9.2-0.2-18.2-0.6-27.2 41-29.4 76.6-66.4 104.8-108.6z" ], "attrs": [ {} ], "isMulticolor": false, "isMulticolor2": false, - "grid": 0, "tags": [ - "drag" - ] + "twitter", + "brand", + "tweet", + "social" + ], + "grid": 16 }, "attrs": [ {} ], "properties": { - "order": 43, - "id": 17, - "name": "drag", + "order": 1, + "id": 0, "prevSize": 32, - "code": 59671 + "code": 59740, + "name": "twitter, action-Tweet" }, "setIdx": 1, "setId": 1, - "iconIdx": 29 + "iconIdx": 2 }, { "icon": { "paths": [ - "M921.6 281.958c0-70.707-171.878-128.154-384-128.154s-384 57.19-384 127.898c0 10.035 3.789 19.712 10.342 29.030 0-0.051 296.858 406.067 296.858 406.067v256l153.6-51.2v-204.8c0 0 298.752-408.166 299.725-409.702 0 0 7.475-16.64 7.475-25.139zM537.6 204.8c206.899 0 318.208 53.248 332.083 76.8-13.875 23.552-125.184 76.8-332.083 76.8s-318.208-53.248-332.083-76.8c13.875-23.552 125.184-76.8 332.083-76.8zM869.376 345.856v0 0zM573.030 686.592c-6.4 8.755-9.83 19.354-9.83 30.208v167.885l-51.2 17.050v-184.934c0-10.854-3.43-21.453-9.83-30.208l-228.147-312.115c68.762 21.709 161.382 35.123 263.578 35.123 102.298 0 195.021-13.414 263.834-35.174-0.102 0.051-0.205 0.051-0.307 0.102l-228.096 312.064z" + "M728.992 512c137.754-87.334 231.008-255.208 231.008-448 0-21.676-1.192-43.034-3.478-64h-889.042c-2.29 20.968-3.48 42.326-3.48 64 0 192.792 93.254 360.666 231.006 448-137.752 87.334-231.006 255.208-231.006 448 0 21.676 1.19 43.034 3.478 64h889.042c2.288-20.966 3.478-42.324 3.478-64 0.002-192.792-93.252-360.666-231.006-448zM160 960c0-186.912 80.162-345.414 224-397.708v-100.586c-143.838-52.29-224-210.792-224-397.706v0h704c0 186.914-80.162 345.416-224 397.706v100.586c143.838 52.294 224 210.796 224 397.708h-704zM619.626 669.594c-71.654-40.644-75.608-93.368-75.626-125.366v-64.228c0-31.994 3.804-84.914 75.744-125.664 38.504-22.364 71.808-56.348 97.048-98.336h-409.582c25.266 42.032 58.612 76.042 97.166 98.406 71.654 40.644 75.606 93.366 75.626 125.366v64.228c0 31.992-3.804 84.914-75.744 125.664-72.622 42.18-126.738 125.684-143.090 226.336h501.67c-16.364-100.708-70.53-184.248-143.212-226.406z" ], "attrs": [ {} ], "isMulticolor": false, "isMulticolor2": false, - "grid": 0, "tags": [ - "filter" - ] + "hour-glass", + "loading", + "busy", + "wait" + ], + "grid": 16 }, "attrs": [ {} ], "properties": { - "order": 18, - "id": 16, - "name": "filter", + "order": 1, + "id": 1, "prevSize": 32, - "code": 59672 + "code": 59732, + "name": "hour-glass" }, "setIdx": 1, "setId": 1, - "iconIdx": 30 + "iconIdx": 3 }, { "icon": { "paths": [ - "M512 0c-282.88 0-512 229.248-512 512 0 226.24 146.688 418.112 350.080 485.76 25.6 4.8 35.008-11.008 35.008-24.64 0-12.16-0.448-44.352-0.64-87.040-142.464 30.912-172.48-68.672-172.48-68.672-23.296-59.136-56.96-74.88-56.96-74.88-46.4-31.744 3.584-31.104 3.584-31.104 51.392 3.584 78.4 52.736 78.4 52.736 45.696 78.272 119.872 55.68 149.12 42.56 4.608-33.088 17.792-55.68 32.448-68.48-113.728-12.8-233.216-56.832-233.216-252.992 0-55.872 19.84-101.568 52.672-137.408-5.76-12.928-23.040-64.96 4.48-135.488 0 0 42.88-13.76 140.8 52.48 40.96-11.392 84.48-17.024 128-17.28 43.52 0.256 87.040 5.888 128 17.28 97.28-66.24 140.16-52.48 140.16-52.48 27.52 70.528 10.24 122.56 5.12 135.488 32.64 35.84 52.48 81.536 52.48 137.408 0 196.672-119.68 240-233.6 252.608 17.92 15.36 34.56 46.72 34.56 94.72 0 68.48-0.64 123.52-0.64 140.16 0 13.44 8.96 29.44 35.2 24.32 204.864-67.136 351.424-259.136 351.424-485.056 0-282.752-229.248-512-512-512z" + "M192 512c0-12.18 0.704-24.196 2.030-36.022l-184.98-60.104c-5.916 31.14-9.050 63.264-9.050 96.126 0 147.23 62.166 279.922 161.654 373.324l114.284-157.296c-52.124-56.926-83.938-132.758-83.938-216.028zM832 512c0 83.268-31.812 159.102-83.938 216.028l114.284 157.296c99.488-93.402 161.654-226.094 161.654-373.324 0-32.862-3.132-64.986-9.048-96.126l-184.98 60.104c1.324 11.828 2.028 23.842 2.028 36.022zM576 198.408c91.934 18.662 169.544 76.742 214.45 155.826l184.978-60.102c-73.196-155.42-222.24-268.060-399.428-290.156v194.432zM233.55 354.232c44.906-79.084 122.516-137.164 214.45-155.826v-194.43c-177.188 22.096-326.23 134.736-399.426 290.154l184.976 60.102zM644.556 803.328c-40.39 18.408-85.272 28.672-132.556 28.672s-92.166-10.264-132.554-28.67l-114.292 157.31c73.206 40.366 157.336 63.36 246.846 63.36s173.64-22.994 246.848-63.36l-114.292-157.312z" ], "attrs": [ {} @@ -1518,497 +1476,568 @@ "isMulticolor": false, "isMulticolor2": false, "tags": [ - "brand", - "github" + "spinner", + "loading", + "loading-wheel", + "busy", + "wait" ], - "grid": 0 + "grid": 16 }, "attrs": [ {} ], "properties": { - "order": 77, + "order": 1, "id": 0, - "name": "github", "prevSize": 32, - "code": 59713 + "code": 59731, + "name": "spinner" }, "setIdx": 1, "setId": 1, - "iconIdx": 31 + "iconIdx": 4 }, { "icon": { "paths": [ - "M512 512h-204.8v51.2h204.8v-51.2zM768 153.6h-51.2c0-28.314-22.886-51.2-51.2-51.2h-307.2c-28.314 0-51.2 22.886-51.2 51.2h-51.2c-28.314 0-51.2 22.886-51.2 51.2v665.6c0 28.314 22.886 51.2 51.2 51.2h512c28.314 0 51.2-22.886 51.2-51.2v-665.6c0-28.314-22.886-51.2-51.2-51.2zM358.4 153.6h307.2v51.2h-307.2v-51.2zM768 819.2c0 28.314-22.886 51.2-51.2 51.2h-409.6c-28.314 0-51.2-22.886-51.2-51.2v-563.2c0-28.314 22.886-51.2 51.2-51.2 0 28.314 22.886 51.2 51.2 51.2h307.2c28.314 0 51.2-22.886 51.2-51.2 28.314 0 51.2 22.886 51.2 51.2v563.2zM307.2 460.8h409.6v-51.2h-409.6v51.2zM307.2 665.6h409.6v-51.2h-409.6v51.2z" + "M658.744 749.256l-210.744-210.746v-282.51h128v229.49l173.256 173.254zM512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM512 896c-212.078 0-384-171.922-384-384s171.922-384 384-384c212.078 0 384 171.922 384 384s-171.922 384-384 384z" ], "attrs": [ {} ], "isMulticolor": false, "isMulticolor2": false, - "grid": 0, "tags": [ - "help" - ] + "clock", + "time", + "schedule" + ], + "grid": 16 }, "attrs": [ {} ], "properties": { - "order": 19, - "id": 15, - "name": "help", + "order": 1, + "id": 0, "prevSize": 32, - "code": 59673 + "code": 59728, + "name": "clock" }, "setIdx": 1, "setId": 1, - "iconIdx": 32 + "iconIdx": 5 }, { "icon": { "paths": [ - "M512 0c-169.421 0-307.2 137.779-307.2 307.2 0 78.643 15.258 164.915 45.261 256.41 23.859 72.55 56.986 148.582 98.56 226.099 70.707 131.635 140.339 220.774 143.309 224.512 4.813 6.195 12.288 9.779 20.070 9.779 7.834 0 15.258-3.584 20.122-9.779 2.97-3.686 72.602-92.826 143.309-224.512 41.574-77.517 74.701-153.549 98.56-226.099 29.952-91.494 45.21-177.766 45.21-256.41 0-169.421-137.83-307.2-307.2-307.2zM630.682 764.672c-46.234 86.374-92.979 154.982-118.682 190.822-25.6-35.635-72.038-103.885-118.221-189.952-62.874-117.146-137.779-291.738-137.779-458.342 0-141.158 114.842-256 256-256s256 114.842 256 256c0 166.298-74.65 340.582-137.318 457.472zM512 153.6c-84.685 0-153.6 68.915-153.6 153.6s68.915 153.6 153.6 153.6 153.6-68.915 153.6-153.6-68.915-153.6-153.6-153.6zM512 409.6c-56.525 0-102.4-45.875-102.4-102.4 0-56.474 45.875-102.4 102.4-102.4 56.474 0 102.4 45.926 102.4 102.4 0 56.525-45.926 102.4-102.4 102.4z" + "M128 320v640c0 35.2 28.8 64 64 64h576c35.2 0 64-28.8 64-64v-640h-704zM320 896h-64v-448h64v448zM448 896h-64v-448h64v448zM576 896h-64v-448h64v448zM704 896h-64v-448h64v448z", + "M848 128h-208v-80c0-26.4-21.6-48-48-48h-224c-26.4 0-48 21.6-48 48v80h-208c-26.4 0-48 21.6-48 48v80h832v-80c0-26.4-21.6-48-48-48zM576 128h-192v-63.198h192v63.198z" ], "attrs": [ + {}, {} ], "isMulticolor": false, "isMulticolor2": false, - "grid": 0, "tags": [ - "location" - ] + "bin", + "trashcan", + "remove", + "delete", + "recycle", + "dispose" + ], + "grid": 16 }, "attrs": [ + {}, {} ], "properties": { - "order": 25, - "id": 13, - "name": "location, control-Map, type-Geolocation", + "order": 1, + "id": 0, + "name": "bin2", "prevSize": 32, - "code": 59675 + "code": 59650 }, "setIdx": 1, "setId": 1, - "iconIdx": 33 + "iconIdx": 6 }, { "icon": { "paths": [ - "M512.273 83.782c-0.141 0.056-182.959 84.073-229.418 256.782-4.481 16.584 32.696 9.296 31.036 27.527-2.034 22.136-44.668 31.201-39.109 94.764 5.659 64.734 60.321 130.141 68.527 169.673v27.655c-0.497 8.54-4.566 31.715-18.018 43.036-7.378 6.19-17.322 8.421-30.436 6.782-18.205-2.275-25.449-14.468-28.345-24.309-4.753-16.218-0.322-35.123 10.345-44 10.724-8.924 12.17-24.842 3.236-35.564-8.934-10.712-24.858-12.161-35.582-3.218-25.995 21.64-36.887 61.52-26.491 97 9.815 33.392 36.197 55.884 70.6 60.182 4.903 0.609 9.566 0.909 14 0.909 26.623 0 44.661-10.175 55.582-19.455 32.866-27.97 35.449-74.593 35.636-79.818 0.009-0.309 0.018-0.618 0.018-0.927v-21.218h0.109v-1.418c0-12.351 10.008-22.364 22.382-22.364 11.944 0 21.609 9.346 22.273 21.109v202.491c-0.206 2.912-2.536 29.892-17.891 42.945-7.368 6.274-17.384 8.53-30.545 6.873-18.214-2.275-25.476-14.468-28.364-24.291-4.762-16.228-0.322-35.151 10.345-44.018 10.724-8.933 12.188-24.833 3.255-35.564-8.924-10.694-24.876-12.161-35.6-3.218-26.013 21.631-36.887 61.52-26.491 97 9.796 33.392 36.197 55.893 70.6 60.2 4.903 0.609 9.566 0.891 14 0.891 26.623 0 44.671-10.156 55.564-19.436 32.875-27.97 35.458-74.611 35.636-79.836 0.019-0.328 0.018-0.609 0.018-0.909v-225.636l0.127-0.055v-1c0-12.595 10.219-22.8 22.836-22.8 12.349 0 22.333 9.824 22.727 22.073v227.418c0 0.309-0 0.591 0.018 0.909 0.187 5.216 2.779 51.866 35.655 79.836 10.912 9.28 28.959 19.436 55.582 19.436 4.443 0 9.088-0.282 13.982-0.891 34.394-4.307 60.804-26.818 70.6-60.2 10.405-35.48-0.487-75.36-26.491-97-10.743-8.943-26.676-7.466-35.6 3.218-8.934 10.74-7.488 26.63 3.236 35.564 10.668 8.868 15.135 27.79 10.364 44.018-2.878 9.823-10.159 22.015-28.364 24.291-13.105 1.648-23.050-0.592-30.418-6.782-13.508-11.358-17.558-34.657-18.036-43v-201.818c0.297-12.093 10.14-21.818 22.327-21.818 12.374 0 22.4 10.003 22.4 22.364v1.418h0.073v21.218c0 0.318-0 0.628 0.018 0.927 0.178 5.216 2.779 51.848 35.655 79.818 10.912 9.28 28.941 19.455 55.564 19.455 4.434 0 9.107-0.292 14-0.891 34.394-4.298 60.786-26.818 70.582-60.2 10.405-35.48-0.487-75.351-26.491-97-10.743-8.933-26.667-7.476-35.582 3.236-8.943 10.722-7.488 26.622 3.236 35.545 10.668 8.877 15.117 27.8 10.345 44.018-2.878 9.842-10.159 22.025-28.364 24.291-13.086 1.648-23.050-0.583-30.418-6.764-13.508-11.368-17.549-34.675-18.018-43v-21.018c5.305-54.103 63.095-107.777 69.091-176.364 5.531-63.563-37.121-72.627-39.145-94.764-1.669-18.232 35.498-10.944 31.036-27.527-46.468-172.709-229.269-256.726-229.4-256.782z" + "M512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM512 960.002c-62.958 0-122.872-13.012-177.23-36.452l233.148-262.29c5.206-5.858 8.082-13.422 8.082-21.26v-96c0-17.674-14.326-32-32-32-112.99 0-232.204-117.462-233.374-118.626-6-6.002-14.14-9.374-22.626-9.374h-128c-17.672 0-32 14.328-32 32v192c0 12.122 6.848 23.202 17.69 28.622l110.31 55.156v187.886c-116.052-80.956-192-215.432-192-367.664 0-68.714 15.49-133.806 43.138-192h116.862c8.488 0 16.626-3.372 22.628-9.372l128-128c6-6.002 9.372-14.14 9.372-22.628v-77.412c40.562-12.074 83.518-18.588 128-18.588 70.406 0 137.004 16.26 196.282 45.2-4.144 3.502-8.176 7.164-12.046 11.036-36.266 36.264-56.236 84.478-56.236 135.764s19.97 99.5 56.236 135.764c36.434 36.432 85.218 56.264 135.634 56.26 3.166 0 6.342-0.080 9.518-0.236 13.814 51.802 38.752 186.656-8.404 372.334-0.444 1.744-0.696 3.488-0.842 5.224-81.324 83.080-194.7 134.656-320.142 134.656z" + ], + "attrs": [], + "isMulticolor": false, + "isMulticolor2": false, + "tags": [ + "earth", + "globe", + "language", + "web", + "internet", + "sphere", + "planet" + ], + "defaultCode": 59850, + "grid": 16 + }, + "attrs": [], + "properties": { + "ligatures": "earth, globe2", + "name": "earth", + "id": 202, + "order": 91, + "prevSize": 32, + "code": 59850 + }, + "setIdx": 1, + "setId": 1, + "iconIdx": 7 + }, + { + "icon": { + "paths": [ + "M512.002 193.212v-65.212h128v-64c0-35.346-28.654-64-64.002-64h-191.998c-35.346 0-64 28.654-64 64v64h128v65.212c-214.798 16.338-384 195.802-384 414.788 0 229.75 186.25 416 416 416s416-186.25 416-416c0-218.984-169.202-398.448-384-414.788zM706.276 834.274c-60.442 60.44-140.798 93.726-226.274 93.726s-165.834-33.286-226.274-93.726c-60.44-60.44-93.726-140.8-93.726-226.274s33.286-165.834 93.726-226.274c58.040-58.038 134.448-91.018 216.114-93.548l-21.678 314.020c-1.86 26.29 12.464 37.802 31.836 37.802s33.698-11.512 31.836-37.802l-21.676-314.022c81.666 2.532 158.076 35.512 216.116 93.55 60.44 60.44 93.726 140.8 93.726 226.274s-33.286 165.834-93.726 226.274z" ], "attrs": [ {} ], "isMulticolor": false, "isMulticolor2": false, - "grid": 0, "tags": [ - "logo" - ] + "stopwatch", + "time", + "speed", + "meter", + "chronometer" + ], + "grid": 16 }, "attrs": [ {} ], "properties": { - "order": 31, - "id": 12, - "name": "logo", + "order": 1, + "id": 2, "prevSize": 32, - "code": 59676 + "code": 59715, + "name": "elapsed" }, "setIdx": 1, "setId": 1, - "iconIdx": 34 + "iconIdx": 8 }, { "icon": { "paths": [ - "M947.2 0h-870.4c-42.342 0-76.8 34.458-76.8 76.8v870.4c0 42.342 34.458 76.8 76.8 76.8h870.4c42.342 0 76.8-34.458 76.8-76.8v-870.4c0-42.342-34.458-76.8-76.8-76.8zM972.8 947.2c0 14.157-11.443 25.6-25.6 25.6h-870.4c-14.131 0-25.6-11.443-25.6-25.6v-870.4c0-14.131 11.469-25.6 25.6-25.6h870.4c14.157 0 25.6 11.469 25.6 25.6v870.4zM665.6 460.8c56.448 0 102.4-45.926 102.4-102.4s-45.952-102.4-102.4-102.4c-56.448 0-102.4 45.926-102.4 102.4s45.952 102.4 102.4 102.4zM665.6 307.2c28.211 0 51.2 22.989 51.2 51.2s-22.989 51.2-51.2 51.2c-28.211 0-51.2-22.989-51.2-51.2s22.989-51.2 51.2-51.2zM896 102.4h-768c-14.131 0-25.6 11.469-25.6 25.6v614.4c0 14.157 11.469 25.6 25.6 25.6h768c14.157 0 25.6-11.443 25.6-25.6v-614.4c0-14.131-11.443-25.6-25.6-25.6zM153.6 716.8v-118.246l164.301-184.858c4.198-4.787 9.728-7.373 15.462-7.475 5.734-0.051 11.29 2.458 15.642 7.040l283.238 303.539h-478.643zM870.4 716.8h-168.090l-315.853-338.432c-14.285-15.334-33.331-23.603-53.709-23.347-20.326 0.256-39.219 9.011-53.094 24.627l-126.054 141.798v-367.846h716.8v563.2z" + "M522.2 438.8v175.6h290.4c-11.8 75.4-87.8 220.8-290.4 220.8-174.8 0-317.4-144.8-317.4-323.2s142.6-323.2 317.4-323.2c99.4 0 166 42.4 204 79l139-133.8c-89.2-83.6-204.8-134-343-134-283 0-512 229-512 512s229 512 512 512c295.4 0 491.6-207.8 491.6-500.2 0-33.6-3.6-59.2-8-84.8l-483.6-0.2z" ], "attrs": [ {} ], "isMulticolor": false, "isMulticolor2": false, - "grid": 0, "tags": [ - "media" - ] + "google", + "brand" + ], + "grid": 16 }, "attrs": [ {} ], "properties": { - "order": 30, - "id": 11, - "name": "media, type-Assets, trigger-AssetChanged", + "order": 1, + "id": 0, "prevSize": 32, - "code": 59677 + "code": 59707, + "name": "google" }, "setIdx": 1, "setId": 1, - "iconIdx": 35 + "iconIdx": 9 }, { "icon": { "paths": [ - "M128 384c-70.656 0-128 57.344-128 128s57.344 128 128 128c70.656 0 128-57.344 128-128s-57.344-128-128-128zM512 384c-70.656 0-128 57.344-128 128s57.344 128 128 128c70.656 0 128-57.344 128-128s-57.344-128-128-128zM896 384c-70.656 0-128 57.344-128 128s57.344 128 128 128c70.656 0 128-57.344 128-128s-57.344-128-128-128z" + "M592 448h-16v-192c0-105.87-86.13-192-192-192h-128c-105.87 0-192 86.13-192 192v192h-16c-26.4 0-48 21.6-48 48v480c0 26.4 21.6 48 48 48h544c26.4 0 48-21.6 48-48v-480c0-26.4-21.6-48-48-48zM192 256c0-35.29 28.71-64 64-64h128c35.29 0 64 28.71 64 64v192h-256v-192z" ], "attrs": [ {} ], "isMulticolor": false, "isMulticolor2": false, - "grid": 0, "tags": [ - "more" - ] + "lock", + "secure", + "private", + "encrypted" + ], + "grid": 16 }, "attrs": [ {} ], "properties": { - "order": 34, - "id": 10, - "name": "more, dots", + "order": 2, + "id": 0, "prevSize": 32, - "code": 59678 + "code": 59700, + "name": "lock" }, "setIdx": 1, "setId": 1, - "iconIdx": 36 + "iconIdx": 10 }, { "icon": { "paths": [ - "M877.12 311.104l-66.304 66.368-228.224-228.224 66.368-66.368c25.216-25.152 66.048-25.152 91.264 0l136.896 137.024c25.216 25.216 25.216 65.984 0 91.2zM760.896 427.392l-386.176 386.112c-25.216 25.28-66.048 25.28-91.264 0l-136.96-136.896c-25.216-25.28-25.216-66.112 0-91.264l386.24-386.24 228.16 228.288zM64 896v-191.872l191.936 191.872h-191.936z" + "M0.35 512l-0.35-312.074 384-52.144v364.218zM448 138.482l511.872-74.482v448h-511.872zM959.998 576l-0.126 448-511.872-72.016v-375.984zM384 943.836l-383.688-52.594-0.020-315.242h383.708z" ], "attrs": [ {} ], "isMulticolor": false, "isMulticolor2": false, - "grid": 0, "tags": [ - "pencil" - ] + "windows8", + "brand", + "os" + ], + "grid": 16 }, "attrs": [ {} ], "properties": { - "order": 47, - "id": 9, - "name": "pencil", + "order": 1, + "id": 1, "prevSize": 32, - "code": 59679 + "code": 59712, + "name": "microsoft, action-AzureQueue" }, "setIdx": 1, "setId": 1, - "iconIdx": 37 + "iconIdx": 11 }, { "icon": { "paths": [ - "M892.083 131.917c-73.523-73.498-193.152-73.498-266.65 0l-157.184 157.107c-9.958 10.035-9.958 26.214 0 36.275 10.061 9.984 26.24 9.984 36.25 0l157.133-157.107c53.504-53.555 140.672-53.555 194.176 0 53.581 53.504 53.581 140.672 0 194.176l-186.138 186.163c-53.53 53.581-140.672 53.581-194.176 0-10.086-10.010-26.24-10.010-36.275 0-10.035 10.086-10.035 26.189 0 36.25 36.787 36.736 84.992 55.117 133.325 55.117s96.589-18.432 133.376-55.117l186.163-186.214c73.498-73.472 73.498-193.152 0-266.65zM519.45 698.726l-157.082 157.082c-53.504 53.555-140.672 53.555-194.176 0-53.581-53.504-53.581-140.672 0-194.176l186.138-186.163c53.53-53.581 140.672-53.581 194.176 0 10.086 9.984 26.189 9.984 36.275 0 10.035-10.086 10.035-26.214 0-36.25-73.549-73.498-193.203-73.498-266.701 0l-186.163 186.163c-73.498 73.574-73.498 193.203 0 266.701 36.787 36.71 85.043 55.117 133.325 55.117 48.333 0 96.538-18.406 133.325-55.117l157.133-157.133c10.010-10.010 10.010-26.189 0-36.224-10.010-9.984-26.189-9.984-36.25 0z" + "M128 128h320v768h-320zM576 128h320v768h-320z" ], "attrs": [ {} ], "isMulticolor": false, "isMulticolor2": false, - "grid": 0, "tags": [ - "reference" - ] + "pause", + "player" + ], + "grid": 16 }, "attrs": [ {} ], "properties": { - "order": 45, - "id": 8, - "name": "reference", + "order": 2, + "id": 1, "prevSize": 32, - "code": 59680 + "code": 59695, + "name": "pause" }, "setIdx": 1, "setId": 1, - "iconIdx": 38 + "iconIdx": 12 }, { "icon": { "paths": [ - "M800 1024h-576c-124.8 0-224-99.2-224-224v-300.8c0-124.8 99.2-224 224-224h576c124.8 0 224 99.2 224 224v300.8c0 124.8-99.2 224-224 224zM224 339.2c-89.6 0-160 70.4-160 160v300.8c0 89.6 70.4 160 160 160h576c89.6 0 160-70.4 160-160v-300.8c0-89.6-70.4-160-160-160h-576z", - "M828.8 201.6h-633.6c-19.2 0-32-12.8-32-32s12.8-32 32-32h630.4c19.2 0 32 12.8 32 32s-12.8 32-28.8 32z", - "M716.8 64h-409.6c-19.2 0-32-12.8-32-32s12.8-32 32-32h412.8c19.2 0 32 12.8 32 32s-16 32-35.2 32z", - "M800 416v64c0 48-38.4 83.2-83.2 83.2h-409.6c-44.8 3.2-83.2-35.2-83.2-83.2v-64h-54.4v64c0 76.8 64 140.8 140.8 140.8h406.4c76.8 0 140.8-64 140.8-140.8v-64h-57.6z" + "M192 128l640 384-640 384z" ], "attrs": [ - {}, - {}, - {}, {} ], "isMulticolor": false, "isMulticolor2": false, - "grid": 0, "tags": [ - "schemas" - ] + "play", + "player" + ], + "grid": 16 }, "attrs": [ - {}, - {}, - {}, {} ], "properties": { - "order": 46, - "id": 7, - "name": "schemas", + "order": 3, + "id": 0, "prevSize": 32, - "code": 59681 + "code": 59696, + "name": "play" }, "setIdx": 1, "setId": 1, - "iconIdx": 39 + "iconIdx": 13 }, { "icon": { "paths": [ - "M939.776 1003.776c-27.2 27.008-71.232 27.008-98.368 0l-168.96-168.96c-66.176 38.464-142.016 62.080-224 62.080-247.744 0-448.448-200.832-448.448-448.448 0-247.744 200.704-448.448 448.448-448.448 247.68 0 448.512 200.704 448.512 448.448 0 115.136-44.672 218.944-115.904 298.304l158.656 158.656c27.008 27.136 27.008 71.168 0.064 98.368zM448.448 128.128c-176.896 0-320.32 143.36-320.32 320.32s143.424 320.32 320.32 320.32c176.96 0 320.384-143.36 320.384-320.32s-143.488-320.32-320.384-320.32z" + "M889.68 166.32c-93.608-102.216-228.154-166.32-377.68-166.32-282.77 0-512 229.23-512 512h96c0-229.75 186.25-416 416-416 123.020 0 233.542 53.418 309.696 138.306l-149.696 149.694h352v-352l-134.32 134.32z", + "M928 512c0 229.75-186.25 416-416 416-123.020 0-233.542-53.418-309.694-138.306l149.694-149.694h-352v352l134.32-134.32c93.608 102.216 228.154 166.32 377.68 166.32 282.77 0 512-229.23 512-512h-96z" ], "attrs": [ + {}, {} ], "isMulticolor": false, "isMulticolor2": false, - "grid": 0, "tags": [ - "search" - ] + "loop", + "repeat", + "player", + "reload", + "refresh", + "update", + "synchronize", + "arrows" + ], + "grid": 16 }, "attrs": [ + {}, {} ], "properties": { - "order": 23, - "id": 6, - "name": "search", + "order": 49, + "id": 2, "prevSize": 32, - "code": 59682 + "code": 59694, + "name": "reset" }, "setIdx": 1, "setId": 1, - "iconIdx": 40 + "iconIdx": 14 }, { "icon": { "paths": [ - "M1019.11 440.755c-1.946-13.747-14.438-23.398-28.16-21.888-16.947 1.843-34.253-0.589-50.048-7.091-52.25-21.504-77.261-81.459-55.757-133.709 6.605-15.846 16.947-29.85 30.208-40.602 10.803-8.653 12.698-24.294 4.352-35.354-28.902-37.99-62.797-71.706-100.838-100.045-10.701-8.090-25.805-6.451-34.662 3.661-28.8 33.254-75.546 44.262-116.198 27.546-40.704-16.742-66.099-57.498-63.206-101.453 0.845-13.338-8.755-25.19-21.99-27.008-47.002-6.605-94.797-6.605-142.054 0.077-13.722 1.946-23.398 14.387-21.862 28.211 1.843 16.896-0.614 34.202-7.168 49.997-21.504 52.25-81.408 77.21-133.632 55.706-15.821-6.502-29.85-16.947-40.602-30.157-8.653-10.752-24.32-12.698-35.379-4.301-37.99 28.851-71.68 62.694-100.045 100.762-8.090 10.701-6.451 25.83 3.635 34.637 33.28 28.902 44.288 75.597 27.546 116.301-16.742 40.653-57.498 66.048-101.427 63.155-13.363-0.845-25.19 8.755-26.982 21.99-6.63 47.002-6.63 94.822 0.102 142.080 1.946 13.696 14.387 23.322 28.16 21.811 16.896-1.818 34.202 0.691 50.022 7.168 52.224 21.53 77.21 81.459 55.706 133.734-6.502 15.795-16.947 29.773-30.157 40.525-10.803 8.73-12.698 24.346-4.352 35.354 28.877 38.042 62.822 71.731 100.813 100.122 1.741 1.357 3.661 2.355 5.606 3.2 9.933 4.045 21.709 1.536 29.082-6.938 28.826-33.178 75.571-44.262 116.275-27.52 40.653 16.742 66.048 57.498 63.13 101.453-0.819 13.338 8.755 25.165 22.067 27.059 47.002 6.579 94.72 6.554 142.029-0.102 13.645-1.971 23.347-14.464 21.811-28.237-1.843-16.947 0.691-34.253 7.194-50.048 21.504-52.25 81.459-77.21 133.658-55.68 15.795 6.528 29.85 16.947 40.55 30.157 8.704 10.803 24.346 12.698 35.405 4.326 37.99-28.902 71.654-62.746 100.096-100.813 7.987-10.675 6.4-25.805-3.712-34.662-33.254-28.826-44.288-75.571-27.546-116.224 16.742-40.73 57.498-66.099 101.453-63.232 13.338 0.922 25.139-8.678 27.008-21.965 6.554-47.002 6.502-94.771-0.128-142.003zM971.059 554.010c-56.141 5.274-105.702 41.114-127.642 94.464s-12.058 113.613 24.090 156.902c-17.69 21.478-37.453 41.318-58.854 59.315-12.749-11.213-27.392-20.352-43.238-26.854-78.259-32.282-168.243 5.197-200.499 83.584-6.502 15.718-10.291 32.563-11.29 49.536-27.853 2.56-55.859 2.637-83.61 0.077-5.274-56.090-41.114-105.677-94.464-127.616-53.35-21.99-113.613-11.981-156.928 24.064-21.504-17.69-41.318-37.453-59.29-58.88 11.213-12.723 20.352-27.392 26.906-43.136 32.205-78.387-5.274-168.294-83.584-200.55-15.821-6.502-32.589-10.342-49.613-11.366-2.534-27.853-2.586-55.859 0-83.558 56.090-5.299 105.626-41.088 127.565-94.438 21.965-53.402 12.058-113.638-24.090-156.902 17.69-21.555 37.478-41.395 58.88-59.341 12.749 11.213 27.392 20.352 43.213 26.854 78.285 32.256 168.218-5.248 200.474-83.558 6.528-15.795 10.342-32.589 11.366-49.613 27.853-2.509 55.808-2.56 83.558 0 5.299 56.090 41.139 105.6 94.49 127.59 53.35 21.939 113.638 12.006 156.902-24.090 21.504 17.741 41.293 37.453 59.29 58.854-11.213 12.8-20.352 27.392-26.854 43.213-32.256 78.31 5.248 168.294 83.507 200.499 15.846 6.502 32.691 10.342 49.638 11.392 2.56 27.853 2.611 55.808 0.077 83.558zM512 307.2c-113.101 0-204.8 91.699-204.8 204.8 0 113.126 91.699 204.826 204.8 204.826s204.8-91.699 204.8-204.826c0-113.101-91.699-204.8-204.8-204.8zM512 665.626c-84.813 0-153.6-68.813-153.6-153.626 0-84.838 68.787-153.6 153.6-153.6 84.838 0 153.6 68.762 153.6 153.6 0 84.813-68.762 153.626-153.6 153.626z" + "M933.79 610.25c-53.726-93.054-21.416-212.304 72.152-266.488l-100.626-174.292c-28.75 16.854-62.176 26.518-97.846 26.518-107.536 0-194.708-87.746-194.708-195.99h-201.258c0.266 33.41-8.074 67.282-25.958 98.252-53.724 93.056-173.156 124.702-266.862 70.758l-100.624 174.292c28.97 16.472 54.050 40.588 71.886 71.478 53.638 92.908 21.512 211.92-71.708 266.224l100.626 174.292c28.65-16.696 61.916-26.254 97.4-26.254 107.196 0 194.144 87.192 194.7 194.958h201.254c-0.086-33.074 8.272-66.57 25.966-97.218 53.636-92.906 172.776-124.594 266.414-71.012l100.626-174.29c-28.78-16.466-53.692-40.498-71.434-71.228zM512 719.332c-114.508 0-207.336-92.824-207.336-207.334 0-114.508 92.826-207.334 207.336-207.334 114.508 0 207.332 92.826 207.332 207.334-0.002 114.51-92.824 207.334-207.332 207.334z" ], "attrs": [ {} ], "isMulticolor": false, "isMulticolor2": false, - "grid": 0, "tags": [ - "settings" - ] + "cog", + "gear", + "preferences", + "settings", + "generate", + "control", + "options" + ], + "grid": 16 }, "attrs": [ {} ], "properties": { - "order": 22, - "id": 5, - "name": "settings", + "order": 1, + "id": 1, "prevSize": 32, - "code": 59683 + "code": 59693, + "name": "settings2" }, "setIdx": 1, "setId": 1, - "iconIdx": 41 + "iconIdx": 15 }, { "icon": { "paths": [ - "M77.005 102.605h128v332.8c0 14.131 11.418 25.6 25.6 25.6 14.106 0 25.6-11.469 25.6-25.6v-332.8h128c14.106 0 25.6-11.469 25.6-25.6 0-14.157-11.494-25.6-25.6-25.6h-307.2c-14.182 0-25.6 11.443-25.6 25.6 0 14.106 11.418 25.6 25.6 25.6zM947.405 716.979h-179.2v-102.4h179.2c14.157 0 25.6-11.443 25.6-25.6s-11.443-25.6-25.6-25.6h-204.8c-14.182 0-25.6 11.443-25.6 25.6v358.4c0 14.157 11.418 25.6 25.6 25.6 14.157 0 25.6-11.443 25.6-25.6v-179.2h179.2c14.157 0 25.6-11.443 25.6-25.6s-11.494-25.6-25.6-25.6zM965.094 58.47c-9.958-9.933-26.112-9.933-36.045 0l-870.605 870.579c-9.958 9.984-9.958 26.086 0 36.045 10.010 9.984 26.112 9.984 36.045 0l870.605-870.579c9.958-9.933 9.958-26.086 0-36.045z" + "M512 128c-247.424 0-448 200.576-448 448s200.576 448 448 448 448-200.576 448-448-200.576-448-448-448zM512 936c-198.824 0-360-161.178-360-360 0-198.824 161.176-360 360-360 198.822 0 360 161.176 360 360 0 198.822-161.178 360-360 360zM934.784 287.174c16.042-28.052 25.216-60.542 25.216-95.174 0-106.040-85.96-192-192-192-61.818 0-116.802 29.222-151.92 74.596 131.884 27.236 245.206 105.198 318.704 212.578v0zM407.92 74.596c-35.116-45.374-90.102-74.596-151.92-74.596-106.040 0-192 85.96-192 192 0 34.632 9.174 67.122 25.216 95.174 73.5-107.38 186.822-185.342 318.704-212.578z", + "M512 576v-256h-64v320h256v-64z" ], "attrs": [ + {}, {} ], "isMulticolor": false, "isMulticolor2": false, - "grid": 0, "tags": [ - "type-boolean" - ] + "alarm", + "time", + "clock" + ], + "grid": 16 }, "attrs": [ + {}, {} ], "properties": { - "order": 21, - "id": 4, - "name": "type-Boolean", + "order": 2, + "id": 1, "prevSize": 32, - "code": 59684 + "code": 59716, + "name": "timeout" }, "setIdx": 1, "setId": 1, - "iconIdx": 42 + "iconIdx": 16 }, { "icon": { "paths": [ - "M947.2 102.4h-128v-25.6c0-14.131-11.469-25.6-25.6-25.6s-25.6 11.469-25.6 25.6v25.6h-512v-25.6c0-14.131-11.52-25.6-25.6-25.6s-25.6 11.469-25.6 25.6v25.6h-128c-42.342 0-76.8 34.458-76.8 76.8v716.8c0 42.342 34.458 76.8 76.8 76.8h870.4c42.342 0 76.8-34.458 76.8-76.8v-716.8c0-42.342-34.458-76.8-76.8-76.8zM972.8 896c0 14.131-11.469 25.6-25.6 25.6h-870.4c-14.080 0-25.6-11.469-25.6-25.6v-537.6h921.6v537.6zM972.8 307.2h-921.6v-128c0-14.080 11.52-25.6 25.6-25.6h128v76.8c0 14.080 11.52 25.6 25.6 25.6s25.6-11.52 25.6-25.6v-76.8h512v76.8c0 14.080 11.469 25.6 25.6 25.6s25.6-11.52 25.6-25.6v-76.8h128c14.131 0 25.6 11.52 25.6 25.6v128zM332.8 512h51.2c14.080 0 25.6-11.52 25.6-25.6s-11.52-25.6-25.6-25.6h-51.2c-14.080 0-25.6 11.52-25.6 25.6s11.52 25.6 25.6 25.6zM486.4 512h51.2c14.131 0 25.6-11.52 25.6-25.6s-11.469-25.6-25.6-25.6h-51.2c-14.080 0-25.6 11.52-25.6 25.6s11.52 25.6 25.6 25.6zM640 512h51.2c14.131 0 25.6-11.52 25.6-25.6s-11.469-25.6-25.6-25.6h-51.2c-14.131 0-25.6 11.52-25.6 25.6s11.469 25.6 25.6 25.6zM793.6 512h51.2c14.131 0 25.6-11.52 25.6-25.6s-11.469-25.6-25.6-25.6h-51.2c-14.131 0-25.6 11.52-25.6 25.6s11.469 25.6 25.6 25.6zM179.2 614.4h51.2c14.080 0 25.6-11.469 25.6-25.6s-11.52-25.6-25.6-25.6h-51.2c-14.080 0-25.6 11.469-25.6 25.6s11.52 25.6 25.6 25.6zM332.8 614.4h51.2c14.080 0 25.6-11.469 25.6-25.6s-11.52-25.6-25.6-25.6h-51.2c-14.080 0-25.6 11.469-25.6 25.6s11.52 25.6 25.6 25.6zM486.4 614.4h51.2c14.131 0 25.6-11.469 25.6-25.6s-11.469-25.6-25.6-25.6h-51.2c-14.080 0-25.6 11.469-25.6 25.6s11.52 25.6 25.6 25.6zM640 614.4h51.2c14.131 0 25.6-11.469 25.6-25.6s-11.469-25.6-25.6-25.6h-51.2c-14.131 0-25.6 11.469-25.6 25.6s11.469 25.6 25.6 25.6zM793.6 614.4h51.2c14.131 0 25.6-11.469 25.6-25.6s-11.469-25.6-25.6-25.6h-51.2c-14.131 0-25.6 11.469-25.6 25.6s11.469 25.6 25.6 25.6zM179.2 716.8h51.2c14.080 0 25.6-11.469 25.6-25.6s-11.52-25.6-25.6-25.6h-51.2c-14.080 0-25.6 11.469-25.6 25.6s11.52 25.6 25.6 25.6zM332.8 716.8h51.2c14.080 0 25.6-11.469 25.6-25.6s-11.52-25.6-25.6-25.6h-51.2c-14.080 0-25.6 11.469-25.6 25.6s11.52 25.6 25.6 25.6zM486.4 716.8h51.2c14.131 0 25.6-11.469 25.6-25.6s-11.469-25.6-25.6-25.6h-51.2c-14.080 0-25.6 11.469-25.6 25.6s11.52 25.6 25.6 25.6zM640 716.8h51.2c14.131 0 25.6-11.469 25.6-25.6s-11.469-25.6-25.6-25.6h-51.2c-14.131 0-25.6 11.469-25.6 25.6s11.469 25.6 25.6 25.6zM793.6 716.8h51.2c14.131 0 25.6-11.469 25.6-25.6s-11.469-25.6-25.6-25.6h-51.2c-14.131 0-25.6 11.469-25.6 25.6s11.469 25.6 25.6 25.6zM179.2 819.2h51.2c14.080 0 25.6-11.469 25.6-25.6s-11.52-25.6-25.6-25.6h-51.2c-14.080 0-25.6 11.469-25.6 25.6s11.52 25.6 25.6 25.6zM332.8 819.2h51.2c14.080 0 25.6-11.469 25.6-25.6s-11.52-25.6-25.6-25.6h-51.2c-14.080 0-25.6 11.469-25.6 25.6s11.52 25.6 25.6 25.6zM486.4 819.2h51.2c14.131 0 25.6-11.469 25.6-25.6s-11.469-25.6-25.6-25.6h-51.2c-14.080 0-25.6 11.469-25.6 25.6s11.52 25.6 25.6 25.6zM640 819.2h51.2c14.131 0 25.6-11.469 25.6-25.6s-11.469-25.6-25.6-25.6h-51.2c-14.131 0-25.6 11.469-25.6 25.6s11.469 25.6 25.6 25.6zM793.6 819.2h51.2c14.131 0 25.6-11.469 25.6-25.6s-11.469-25.6-25.6-25.6h-51.2c-14.131 0-25.6 11.469-25.6 25.6s11.469 25.6 25.6 25.6z" + "M768 64c105.87 0 192 86.13 192 192v192h-128v-192c0-35.29-28.71-64-64-64h-128c-35.29 0-64 28.71-64 64v192h16c26.4 0 48 21.6 48 48v480c0 26.4-21.6 48-48 48h-544c-26.4 0-48-21.6-48-48v-480c0-26.4 21.6-48 48-48h400v-192c0-105.87 86.13-192 192-192h128z" ], "attrs": [ {} ], "isMulticolor": false, "isMulticolor2": false, - "grid": 0, "tags": [ - "type-datetime" - ] + "unlocked", + "lock-open" + ], + "grid": 16 }, "attrs": [ {} ], "properties": { - "order": 24, - "id": 3, - "name": "type-DateTime", + "order": 1, + "id": 1, "prevSize": 32, - "code": 59685 + "code": 59699, + "name": "unlocked" }, "setIdx": 1, "setId": 1, - "iconIdx": 43 + "iconIdx": 17 }, { "icon": { "paths": [ - "M179.2 256c0-28.262 22.938-51.2 51.2-51.2h25.6c14.157 0 25.6-11.443 25.6-25.6 0-14.131-11.443-25.6-25.6-25.6h-25.6c-56.55 0-102.4 45.85-102.4 102.4v179.2c0 28.262-22.938 51.2-51.2 51.2h-25.6c-14.157 0-25.6 11.469-25.6 25.6 0 14.157 11.443 25.6 25.6 25.6h25.6c28.262 0 51.2 22.938 51.2 51.2v179.2c0 56.55 45.85 102.4 102.4 102.4h25.6c14.157 0 25.6-11.443 25.6-25.6s-11.443-25.6-25.6-25.6h-25.6c-28.262 0-51.2-22.938-51.2-51.2v-179.2c0-30.746-13.85-58.061-35.328-76.8 21.478-18.765 35.328-46.029 35.328-76.8v-179.2zM972.8 486.4h-25.6c-28.262 0-51.2-22.938-51.2-51.2v-179.2c0-56.55-45.85-102.4-102.4-102.4h-25.6c-14.157 0-25.6 11.469-25.6 25.6 0 14.157 11.443 25.6 25.6 25.6h25.6c28.262 0 51.2 22.938 51.2 51.2v179.2c0 30.771 13.85 58.035 35.328 76.8-21.478 18.739-35.328 46.054-35.328 76.8v179.2c0 28.262-22.938 51.2-51.2 51.2h-25.6c-14.157 0-25.6 11.443-25.6 25.6s11.443 25.6 25.6 25.6h25.6c56.55 0 102.4-45.85 102.4-102.4v-179.2c0-28.262 22.938-51.2 51.2-51.2h25.6c14.157 0 25.6-11.443 25.6-25.6 0-14.131-11.443-25.6-25.6-25.6zM512 332.8c-14.157 0-25.6 11.469-25.6 25.6 0 14.157 11.443 25.6 25.6 25.6s25.6-11.443 25.6-25.6c0-14.131-11.443-25.6-25.6-25.6zM512 435.2c-14.157 0-25.6 11.469-25.6 25.6v204.8c0 14.157 11.443 25.6 25.6 25.6s25.6-11.443 25.6-25.6v-204.8c0-14.131-11.443-25.6-25.6-25.6z" + "M512 128c212 0 384 172 384 384s-172 384-384 384c-88 0-170-30-234-80l60-60c50 34 110 54 174 54 166 0 298-132 298-298s-132-298-298-298-298 132-298 298h128l-172 170-170-170h128c0-212 172-384 384-384zM598 512c0 46-40 86-86 86s-86-40-86-86 40-86 86-86 86 40 86 86z" ], "attrs": [ {} ], "isMulticolor": false, "isMulticolor2": false, - "grid": 0, "tags": [ - "json" - ] + "settings_backup_restore" + ], + "grid": 24 }, "attrs": [ {} ], "properties": { - "order": 20, - "id": 14, - "name": "type-Json, json", - "prevSize": 32, - "code": 59674 + "order": 1, + "id": 2, + "prevSize": 24, + "code": 59739, + "name": "backup" }, "setIdx": 1, "setId": 1, - "iconIdx": 44 + "iconIdx": 18 }, { "icon": { "paths": [ - "M256 665.6h-76.8v-332.8c0-14.131-11.469-25.6-25.6-25.6h-76.8c-14.131 0-25.6 11.469-25.6 25.6s11.469 25.6 25.6 25.6h51.2v307.2h-76.8c-14.131 0-25.6 11.469-25.6 25.6s11.469 25.6 25.6 25.6h204.8c14.131 0 25.6-11.469 25.6-25.6s-11.469-25.6-25.6-25.6zM614.4 307.2h-204.8c-14.131 0-25.6 11.469-25.6 25.6s11.469 25.6 25.6 25.6h179.2v128h-179.2c-14.131 0-25.6 11.469-25.6 25.6v179.2c0 14.131 11.469 25.6 25.6 25.6h204.8c14.131 0 25.6-11.469 25.6-25.6s-11.469-25.6-25.6-25.6h-179.2v-128h179.2c14.131 0 25.6-11.469 25.6-25.6v-179.2c0-14.131-11.469-25.6-25.6-25.6zM972.8 307.2h-204.8c-14.131 0-25.6 11.469-25.6 25.6s11.469 25.6 25.6 25.6h179.2v128h-179.2c-14.131 0-25.6 11.469-25.6 25.6s11.469 25.6 25.6 25.6h179.2v128h-179.2c-14.131 0-25.6 11.469-25.6 25.6s11.469 25.6 25.6 25.6h204.8c14.131 0 25.6-11.469 25.6-25.6v-358.4c0-14.131-11.469-25.6-25.6-25.6z" + "M726 512c0 24-20 42-44 42h-426l-170 172v-598c0-24 18-42 42-42h554c24 0 44 18 44 42v384zM896 256c24 0 42 18 42 42v640l-170-170h-470c-24 0-42-18-42-42v-86h554v-384h86z" ], "attrs": [ {} ], "isMulticolor": false, "isMulticolor2": false, - "grid": 0, "tags": [ - "type-number" - ] + "question_answer" + ], + "grid": 24 }, "attrs": [ {} ], "properties": { - "order": 32, - "id": 2, - "name": "type-Number", - "prevSize": 32, - "code": 59686 + "order": 1, + "id": 0, + "prevSize": 24, + "code": 59738, + "name": "support" }, "setIdx": 1, "setId": 1, - "iconIdx": 45 + "iconIdx": 19 }, { "icon": { "paths": [ - "M870.4 921.6h-716.8c-14.131 0-25.6 11.443-25.6 25.6s11.469 25.6 25.6 25.6h716.8c14.157 0 25.6-11.443 25.6-25.6s-11.443-25.6-25.6-25.6zM194.688 817.152c13.030 5.555 28.083-0.461 33.613-13.44l125.030-291.712h317.338l125.005 291.712c4.173 9.677 13.568 15.488 23.526 15.488 3.405 0 6.81-0.64 10.112-2.048 13.005-5.606 18.995-20.659 13.44-33.638l-131.61-306.944c-0.051-0.051-0.051-0.154-0.102-0.205l-175.488-409.6c-4.045-9.472-13.312-15.565-23.552-15.565s-19.507 6.093-23.552 15.514l-175.488 409.6c-0.051 0.051-0.051 0.154-0.102 0.205l-131.61 306.97c-5.53 13.005 0.461 28.058 13.44 33.664zM512 141.773l136.704 319.027h-273.408l136.704-319.027z" + "M918 384v128h-128v298h-128v-298h-128v-128h384zM106 170h556v128h-214v512h-128v-512h-214v-128z" ], "attrs": [ {} ], "isMulticolor": false, "isMulticolor2": false, - "grid": 0, "tags": [ - "type-string" - ] + "text_fields" + ], + "grid": 24 }, "attrs": [ {} ], "properties": { - "order": 48, - "id": 1, - "name": "type-String", - "prevSize": 32, - "code": 59687 + "order": 75, + "id": 0, + "prevSize": 24, + "code": 59705, + "name": "control-RichText" }, "setIdx": 1, "setId": 1, - "iconIdx": 46 + "iconIdx": 20 }, { "icon": { "paths": [ - "M955.221 848c0-0.109 10.752 0 0 0-52.751-161.392-240.461-224-443.178-224-202.269 0-389.979 63.392-443.066 224-11.2-0.109 0-1.232 0 0 0 61.936 49.615 112 110.654 112h664.823c61.151 0 110.766-50.064 110.766-112zM290.399 288c0 123.648 99.231 336 221.645 336s221.645-212.352 221.645-336c0-123.648-99.231-224-221.645-224s-221.645 100.352-221.645 224z" + "M640 85.333q78 0 149.167 30.5t122.5 81.833 81.833 122.5 30.5 149.167q0 85-35 160.667t-96.667 129.167-140 77.5l21-20.667q18-18.333 28-42.667 9.333-22.667 9.333-49.333 0-6.667-0.333-9.333 59.333-41.333 93.833-105.833t34.5-139.5q0-60.667-23.667-116t-63.667-95.333-95.333-63.667-116-23.667q-55.333 0-106.5 19.833t-90 53.833-65 81.333-33.833 101h-88.667q-70.667 0-120.667 50t-50 120.667q0 38.667 15.167 71.667t39.833 54.167 54.833 33 60.833 11.833h50q11.667 29.333 30 48l37.667 37.333h-117.667q-69.667 0-128.5-34.333t-93.167-93.167-34.333-128.5 34.333-128.5 93.167-93.167 128.5-34.333h22q26.333-74.333 79.333-132.167t126.833-90.833 155.833-33zM554.667 426.667q17.667 0 30.167 12.5t12.5 30.167v281l55-55.333q12.333-12.333 30.333-12.333 18.333 0 30.5 12.167t12.167 30.5q0 18-12.333 30.333l-128 128q-12.333 12.333-30.333 12.333t-30.333-12.333l-128-128q-12.333-13-12.333-30.333 0-17.667 12.5-30.167t30.167-12.5q18 0 30.333 12.333l55 55.333v-281q0-17.667 12.5-30.167t30.167-12.5z" ], "attrs": [ {} ], "isMulticolor": false, "isMulticolor2": false, - "grid": 0, "tags": [ - "user" - ] + "cloud-download" + ], + "grid": 24 }, "attrs": [ {} ], "properties": { - "order": 33, + "order": 1, "id": 0, - "name": "user", - "prevSize": 32, - "code": 59688 + "prevSize": 24, + "code": 59710, + "name": "download" }, "setIdx": 1, "setId": 1, - "iconIdx": 47 + "iconIdx": 21 }, { "icon": { @@ -2047,7 +2076,7 @@ }, "setIdx": 1, "setId": 1, - "iconIdx": 48 + "iconIdx": 66 }, { "icon": { @@ -2089,7 +2118,7 @@ }, "setIdx": 1, "setId": 1, - "iconIdx": 49 + "iconIdx": 67 }, { "icon": { @@ -2127,7 +2156,7 @@ }, "setIdx": 1, "setId": 1, - "iconIdx": 50 + "iconIdx": 68 }, { "icon": { @@ -2157,7 +2186,7 @@ }, "setIdx": 1, "setId": 1, - "iconIdx": 51 + "iconIdx": 69 }, { "icon": { @@ -2187,7 +2216,7 @@ }, "setIdx": 1, "setId": 1, - "iconIdx": 52 + "iconIdx": 70 }, { "icon": { @@ -2217,7 +2246,7 @@ }, "setIdx": 1, "setId": 1, - "iconIdx": 53 + "iconIdx": 71 }, { "icon": { @@ -2246,7 +2275,7 @@ }, "setIdx": 1, "setId": 1, - "iconIdx": 54 + "iconIdx": 72 }, { "icon": { @@ -2278,7 +2307,7 @@ }, "setIdx": 1, "setId": 1, - "iconIdx": 55 + "iconIdx": 73 }, { "icon": { @@ -2310,7 +2339,7 @@ }, "setIdx": 1, "setId": 1, - "iconIdx": 56 + "iconIdx": 74 }, { "icon": { @@ -2340,7 +2369,7 @@ }, "setIdx": 1, "setId": 1, - "iconIdx": 57 + "iconIdx": 75 }, { "icon": { @@ -2370,7 +2399,7 @@ }, "setIdx": 1, "setId": 1, - "iconIdx": 58 + "iconIdx": 76 }, { "icon": { @@ -2400,7 +2429,7 @@ }, "setIdx": 1, "setId": 1, - "iconIdx": 59 + "iconIdx": 77 }, { "icon": { @@ -2430,7 +2459,7 @@ }, "setIdx": 1, "setId": 1, - "iconIdx": 60 + "iconIdx": 78 }, { "icon": { @@ -2471,7 +2500,7 @@ }, "setIdx": 1, "setId": 1, - "iconIdx": 61 + "iconIdx": 79 }, { "icon": { @@ -2506,7 +2535,7 @@ }, "setIdx": 1, "setId": 1, - "iconIdx": 62 + "iconIdx": 80 }, { "icon": { @@ -2536,7 +2565,7 @@ }, "setIdx": 1, "setId": 1, - "iconIdx": 63 + "iconIdx": 81 }, { "icon": { @@ -2566,7 +2595,7 @@ }, "setIdx": 1, "setId": 1, - "iconIdx": 64 + "iconIdx": 82 }, { "icon": { @@ -2596,7 +2625,7 @@ }, "setIdx": 1, "setId": 1, - "iconIdx": 65 + "iconIdx": 83 }, { "icon": { @@ -2626,7 +2655,7 @@ }, "setIdx": 1, "setId": 1, - "iconIdx": 66 + "iconIdx": 84 }, { "icon": { @@ -2656,7 +2685,7 @@ }, "setIdx": 1, "setId": 1, - "iconIdx": 67 + "iconIdx": 85 }, { "icon": { @@ -2694,7 +2723,7 @@ }, "setIdx": 1, "setId": 1, - "iconIdx": 68 + "iconIdx": 86 }, { "icon": { @@ -2723,7 +2752,7 @@ }, "setIdx": 1, "setId": 1, - "iconIdx": 69 + "iconIdx": 87 }, { "icon": { @@ -2752,7 +2781,7 @@ }, "setIdx": 1, "setId": 1, - "iconIdx": 70 + "iconIdx": 88 }, { "icon": { @@ -2781,7 +2810,7 @@ }, "setIdx": 1, "setId": 1, - "iconIdx": 71 + "iconIdx": 89 }, { "icon": { @@ -2808,7 +2837,7 @@ }, "setIdx": 1, "setId": 1, - "iconIdx": 72 + "iconIdx": 90 }, { "icon": { @@ -2837,7 +2866,7 @@ }, "setIdx": 1, "setId": 1, - "iconIdx": 73 + "iconIdx": 91 }, { "icon": { @@ -2866,7 +2895,7 @@ }, "setIdx": 1, "setId": 1, - "iconIdx": 74 + "iconIdx": 92 }, { "icon": { @@ -2916,7 +2945,7 @@ }, "setIdx": 1, "setId": 1, - "iconIdx": 75 + "iconIdx": 93 }, { "icon": { @@ -2949,7 +2978,7 @@ }, "setIdx": 1, "setId": 1, - "iconIdx": 91 + "iconIdx": 94 }, { "icon": { @@ -2981,7 +3010,7 @@ }, "setIdx": 1, "setId": 1, - "iconIdx": 92 + "iconIdx": 95 }, { "icon": { @@ -3011,7 +3040,7 @@ }, "setIdx": 1, "setId": 1, - "iconIdx": 93 + "iconIdx": 96 }, { "icon": { @@ -3040,7 +3069,7 @@ }, "setIdx": 1, "setId": 1, - "iconIdx": 94 + "iconIdx": 97 } ], "height": 1024, diff --git a/src/Squidex/app/theme/icomoon/style.css b/src/Squidex/app/theme/icomoon/style.css index 6a133a1d3..2daa5a44a 100644 --- a/src/Squidex/app/theme/icomoon/style.css +++ b/src/Squidex/app/theme/icomoon/style.css @@ -1,10 +1,10 @@ @font-face { font-family: 'icomoon'; - src: url('fonts/icomoon.eot?jk799'); - src: url('fonts/icomoon.eot?jk799#iefix') format('embedded-opentype'), - url('fonts/icomoon.ttf?jk799') format('truetype'), - url('fonts/icomoon.woff?jk799') format('woff'), - url('fonts/icomoon.svg?jk799#icomoon') format('svg'); + src: url('fonts/icomoon.eot?it2nng'); + src: url('fonts/icomoon.eot?it2nng#iefix') format('embedded-opentype'), + url('fonts/icomoon.ttf?it2nng') format('truetype'), + url('fonts/icomoon.woff?it2nng') format('woff'), + url('fonts/icomoon.svg?it2nng#icomoon') format('svg'); font-weight: normal; font-style: normal; } @@ -24,77 +24,8 @@ -moz-osx-font-smoothing: grayscale; } -.icon-star-full:before { - content: "\e95d"; -} -.icon-star-empty:before { - content: "\e95e"; -} -.icon-twitter:before { - content: "\e95c"; -} -.icon-action-Tweet:before { - content: "\e95c"; -} -.icon-hour-glass:before { - content: "\e954"; -} -.icon-spinner:before { - content: "\e953"; -} -.icon-clock:before { - content: "\e950"; -} -.icon-bin2:before { - content: "\e902"; -} -.icon-earth:before { - content: "\e9ca"; -} -.icon-elapsed:before { - content: "\e943"; -} -.icon-google:before { - content: "\e93b"; -} -.icon-lock:before { - content: "\e934"; -} -.icon-microsoft:before { - content: "\e940"; -} -.icon-action-AzureQueue:before { - content: "\e940"; -} -.icon-pause:before { - content: "\e92f"; -} -.icon-play:before { - content: "\e930"; -} -.icon-reset:before { - content: "\e92e"; -} -.icon-settings2:before { - content: "\e92d"; -} -.icon-timeout:before { - content: "\e944"; -} -.icon-unlocked:before { - content: "\e933"; -} -.icon-backup:before { - content: "\e95b"; -} -.icon-support:before { - content: "\e95a"; -} -.icon-control-RichText:before { - content: "\e939"; -} -.icon-download:before { - content: "\e93e"; +.icon-action-Discourse:before { + content: "\e95f"; } .icon-action-Medium:before { content: "\e959"; @@ -258,6 +189,78 @@ .icon-user:before { content: "\e928"; } +.icon-star-full:before { + content: "\e95d"; +} +.icon-star-empty:before { + content: "\e95e"; +} +.icon-twitter:before { + content: "\e95c"; +} +.icon-action-Tweet:before { + content: "\e95c"; +} +.icon-hour-glass:before { + content: "\e954"; +} +.icon-spinner:before { + content: "\e953"; +} +.icon-clock:before { + content: "\e950"; +} +.icon-bin2:before { + content: "\e902"; +} +.icon-earth:before { + content: "\e9ca"; +} +.icon-elapsed:before { + content: "\e943"; +} +.icon-google:before { + content: "\e93b"; +} +.icon-lock:before { + content: "\e934"; +} +.icon-microsoft:before { + content: "\e940"; +} +.icon-action-AzureQueue:before { + content: "\e940"; +} +.icon-pause:before { + content: "\e92f"; +} +.icon-play:before { + content: "\e930"; +} +.icon-reset:before { + content: "\e92e"; +} +.icon-settings2:before { + content: "\e92d"; +} +.icon-timeout:before { + content: "\e944"; +} +.icon-unlocked:before { + content: "\e933"; +} +.icon-backup:before { + content: "\e95b"; +} +.icon-support:before { + content: "\e95a"; +} +.icon-control-RichText:before { + content: "\e939"; +} +.icon-download:before { + content: "\e93e"; +} .icon-single-content:before { content: "\e958"; } diff --git a/tests/Squidex.Domain.Apps.Core.Tests/Model/Rules/RuleTests.cs b/tests/Squidex.Domain.Apps.Core.Tests/Model/Rules/RuleTests.cs index 44e26d2e1..f21956c5d 100644 --- a/tests/Squidex.Domain.Apps.Core.Tests/Model/Rules/RuleTests.cs +++ b/tests/Squidex.Domain.Apps.Core.Tests/Model/Rules/RuleTests.cs @@ -12,7 +12,6 @@ using FluentAssertions; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using Squidex.Domain.Apps.Core.Rules; -using Squidex.Domain.Apps.Core.Rules.Actions; using Squidex.Domain.Apps.Core.Rules.Triggers; using Xunit; @@ -24,13 +23,6 @@ namespace Squidex.Domain.Apps.Core.Model.Rules { private readonly JsonSerializer serializer = TestData.DefaultSerializer(); - public static readonly List Actions = - typeof(Rule).Assembly.GetTypes() - .Where(x => x.BaseType == typeof(RuleAction)) - .Select(Activator.CreateInstance) - .Select(x => new object[] { x }) - .ToList(); - public static readonly List Triggers = typeof(Rule).Assembly.GetTypes() .Where(x => x.BaseType == typeof(RuleTrigger)) @@ -38,7 +30,7 @@ namespace Squidex.Domain.Apps.Core.Model.Rules .Select(x => new object[] { x }) .ToList(); - private readonly Rule rule_0 = new Rule(new ContentChangedTrigger(), new WebhookAction()); + private readonly Rule rule_0 = new Rule(new ContentChangedTrigger(), new FirstAction()); public sealed class OtherTrigger : RuleTrigger { @@ -48,19 +40,21 @@ namespace Squidex.Domain.Apps.Core.Model.Rules } } + public sealed class FirstAction : RuleAction + { + public string Property { get; set; } + } + public sealed class OtherAction : RuleAction { - public override T Accept(IRuleActionVisitor visitor) - { - throw new NotSupportedException(); - } + public string Property { get; set; } } [Fact] public void Should_create_with_trigger_and_action() { var ruleTrigger = new ContentChangedTrigger(); - var ruleAction = new WebhookAction(); + var ruleAction = new FirstAction(); var newRule = new Rule(ruleTrigger, ruleAction); @@ -110,7 +104,7 @@ namespace Squidex.Domain.Apps.Core.Model.Rules [Fact] public void Should_replace_action_when_updating() { - var newAction = new WebhookAction(); + var newAction = new FirstAction(); var rule_1 = rule_0.Update(newAction); @@ -134,13 +128,6 @@ namespace Squidex.Domain.Apps.Core.Model.Rules appClients.Should().BeEquivalentTo(rule_0); } - [Theory] - [MemberData(nameof(Actions))] - public void Should_freeze_actions(RuleAction action) - { - TestData.TestFreeze(action); - } - [Theory] [MemberData(nameof(Triggers))] public void Should_freeze_triggers(RuleTrigger trigger) diff --git a/tests/Squidex.Domain.Apps.Core.Tests/Operations/HandleRules/RuleServiceTests.cs b/tests/Squidex.Domain.Apps.Core.Tests/Operations/HandleRules/RuleServiceTests.cs index 5c4b837b2..7f1e8a9cb 100644 --- a/tests/Squidex.Domain.Apps.Core.Tests/Operations/HandleRules/RuleServiceTests.cs +++ b/tests/Squidex.Domain.Apps.Core.Tests/Operations/HandleRules/RuleServiceTests.cs @@ -13,7 +13,6 @@ using NodaTime; using Squidex.Domain.Apps.Core.HandleRules; using Squidex.Domain.Apps.Core.HandleRules.EnrichedEvents; using Squidex.Domain.Apps.Core.Rules; -using Squidex.Domain.Apps.Core.Rules.Actions; using Squidex.Domain.Apps.Core.Rules.Triggers; using Squidex.Domain.Apps.Events; using Squidex.Domain.Apps.Events.Contents; @@ -38,12 +37,12 @@ namespace Squidex.Domain.Apps.Core.Operations.HandleRules { } + public sealed class ValidAction : RuleAction + { + } + public sealed class InvalidAction : RuleAction { - public override T Accept(IRuleActionVisitor visitor) - { - return default(T); - } } public sealed class InvalidTrigger : RuleTrigger @@ -57,13 +56,13 @@ namespace Squidex.Domain.Apps.Core.Operations.HandleRules public RuleServiceTests() { typeNameRegistry.Map(typeof(ContentCreated)); - typeNameRegistry.Map(typeof(WebhookAction)); + typeNameRegistry.Map(typeof(ValidAction), "ValidAction"); A.CallTo(() => eventEnricher.EnrichAsync(A>.Ignored)) .Returns(new EnrichedContentEvent()); A.CallTo(() => ruleActionHandler.ActionType) - .Returns(typeof(WebhookAction)); + .Returns(typeof(ValidAction)); A.CallTo(() => ruleTriggerHandler.TriggerType) .Returns(typeof(ContentChangedTrigger)); @@ -74,7 +73,7 @@ namespace Squidex.Domain.Apps.Core.Operations.HandleRules [Fact] public async Task Should_not_create_job_for_invalid_event() { - var ruleConfig = new Rule(new ContentChangedTrigger(), new WebhookAction()); + var ruleConfig = new Rule(new ContentChangedTrigger(), new ValidAction()); var ruleEnvelope = Envelope.Create(new InvalidEvent()); var job = await sut.CreateJobAsync(ruleConfig, ruleEnvelope); @@ -85,7 +84,7 @@ namespace Squidex.Domain.Apps.Core.Operations.HandleRules [Fact] public async Task Should_not_create_job_if_no_trigger_handler_registered() { - var ruleConfig = new Rule(new InvalidTrigger(), new WebhookAction()); + var ruleConfig = new Rule(new InvalidTrigger(), new ValidAction()); var ruleEnvelope = Envelope.Create(new ContentCreated()); var job = await sut.CreateJobAsync(ruleConfig, ruleEnvelope); @@ -107,7 +106,7 @@ namespace Squidex.Domain.Apps.Core.Operations.HandleRules [Fact] public async Task Should_not_create_if_not_triggered() { - var ruleConfig = new Rule(new ContentChangedTrigger(), new WebhookAction()); + var ruleConfig = new Rule(new ContentChangedTrigger(), new ValidAction()); var ruleEnvelope = Envelope.Create(new ContentCreated()); A.CallTo(() => ruleTriggerHandler.Triggers(A>.Ignored, ruleConfig.Trigger)) @@ -125,7 +124,7 @@ namespace Squidex.Domain.Apps.Core.Operations.HandleRules var now = SystemClock.Instance.GetCurrentInstant(); - var ruleConfig = new Rule(new ContentChangedTrigger(), new WebhookAction()); + var ruleConfig = new Rule(new ContentChangedTrigger(), new ValidAction()); var ruleEnvelope = Envelope.Create(e); ruleEnvelope.SetTimestamp(now.Minus(Duration.FromDays(3))); @@ -154,12 +153,12 @@ namespace Squidex.Domain.Apps.Core.Operations.HandleRules var now = SystemClock.Instance.GetCurrentInstant(); - var ruleConfig = new Rule(new ContentChangedTrigger(), new WebhookAction()); + var ruleConfig = new Rule(new ContentChangedTrigger(), new ValidAction()); var ruleEnvelope = Envelope.Create(e); ruleEnvelope.SetTimestamp(now); - var actionName = "WebhookAction"; + var actionName = "ValidAction"; var actionData = new JObject(); var actionDescription = "MyDescription"; @@ -197,7 +196,7 @@ namespace Squidex.Domain.Apps.Core.Operations.HandleRules A.CallTo(() => ruleActionHandler.ExecuteJobAsync(ruleJob)) .Returns((actionDump, null)); - var result = await sut.InvokeAsync("WebhookAction", ruleJob); + var result = await sut.InvokeAsync("ValidAction", ruleJob); Assert.Equal(RuleResult.Success, result.Result); @@ -216,7 +215,7 @@ namespace Squidex.Domain.Apps.Core.Operations.HandleRules A.CallTo(() => ruleActionHandler.ExecuteJobAsync(ruleJob)) .Returns((actionDump, new InvalidOperationException())); - var result = await sut.InvokeAsync("WebhookAction", ruleJob); + var result = await sut.InvokeAsync("ValidAction", ruleJob); Assert.Equal(RuleResult.Failed, result.Result); @@ -235,7 +234,7 @@ namespace Squidex.Domain.Apps.Core.Operations.HandleRules A.CallTo(() => ruleActionHandler.ExecuteJobAsync(ruleJob)) .Returns((actionDump, new TimeoutException())); - var result = await sut.InvokeAsync("WebhookAction", ruleJob); + var result = await sut.InvokeAsync("ValidAction", ruleJob); Assert.Equal(RuleResult.Timeout, result.Result); @@ -253,7 +252,7 @@ namespace Squidex.Domain.Apps.Core.Operations.HandleRules A.CallTo(() => ruleActionHandler.ExecuteJobAsync(ruleJob)) .Throws(ruleEx); - var result = await sut.InvokeAsync("WebhookAction", ruleJob); + var result = await sut.InvokeAsync("ValidAction", ruleJob); Assert.Equal((ruleEx.ToString(), RuleResult.Failed, TimeSpan.Zero), result); } diff --git a/tests/Squidex.Domain.Apps.Entities.Tests/Rules/Guards/Actions/AlgoliaActionTests.cs b/tests/Squidex.Domain.Apps.Entities.Tests/Rules/Guards/Actions/AlgoliaActionTests.cs index 6592c2b77..6cbdd4ebf 100644 --- a/tests/Squidex.Domain.Apps.Entities.Tests/Rules/Guards/Actions/AlgoliaActionTests.cs +++ b/tests/Squidex.Domain.Apps.Entities.Tests/Rules/Guards/Actions/AlgoliaActionTests.cs @@ -6,9 +6,8 @@ // ========================================================================== using System.Collections.Generic; -using System.Threading.Tasks; using FluentAssertions; -using Squidex.Domain.Apps.Core.Rules.Actions; +using Squidex.Domain.Apps.Rules.Action.Algolia; using Squidex.Infrastructure; using Xunit; @@ -17,53 +16,53 @@ namespace Squidex.Domain.Apps.Entities.Rules.Guards.Actions public class AlgoliaActionTests { [Fact] - public async Task Should_add_error_if_app_id_not_defined() + public void Should_add_error_if_app_id_not_defined() { var action = new AlgoliaAction { AppId = null, ApiKey = "KEY", IndexName = "IDX" }; - var errors = await RuleActionValidator.ValidateAsync(action); + var errors = action.Validate(); errors.Should().BeEquivalentTo( new List { - new ValidationError("Application ID is required.", "AppId") + new ValidationError("The Application Id field is required.", "AppId") }); } [Fact] - public async Task Should_add_error_if_api_key_not_defined() + public void Should_add_error_if_api_key_not_defined() { var action = new AlgoliaAction { AppId = "APP", ApiKey = null, IndexName = "IDX" }; - var errors = await RuleActionValidator.ValidateAsync(action); + var errors = action.Validate(); errors.Should().BeEquivalentTo( new List { - new ValidationError("Api Key is required.", "ApiKey") + new ValidationError("The Api Key field is required.", "ApiKey") }); } [Fact] - public async Task Should_add_error_if_index_name_not_defined() + public void Should_add_error_if_index_name_not_defined() { var action = new AlgoliaAction { AppId = "APP", ApiKey = "KEY", IndexName = null }; - var errors = await RuleActionValidator.ValidateAsync(action); + var errors = action.Validate(); errors.Should().BeEquivalentTo( new List { - new ValidationError("Index name is required.", "IndexName") + new ValidationError("The Index Name field is required.", "IndexName") }); } [Fact] - public async Task Should_not_add_error_everything_defined() + public void Should_not_add_error_everything_defined() { var action = new AlgoliaAction { AppId = "APP", ApiKey = "KEY", IndexName = "IDX" }; - var errors = await RuleActionValidator.ValidateAsync(action); + var errors = action.Validate(); Assert.Empty(errors); } diff --git a/tests/Squidex.Domain.Apps.Entities.Tests/Rules/Guards/Actions/AzureQueueActionTests.cs b/tests/Squidex.Domain.Apps.Entities.Tests/Rules/Guards/Actions/AzureQueueActionTests.cs index b53e0db90..ec4f39416 100644 --- a/tests/Squidex.Domain.Apps.Entities.Tests/Rules/Guards/Actions/AzureQueueActionTests.cs +++ b/tests/Squidex.Domain.Apps.Entities.Tests/Rules/Guards/Actions/AzureQueueActionTests.cs @@ -6,9 +6,8 @@ // ========================================================================== using System.Collections.Generic; -using System.Threading.Tasks; using FluentAssertions; -using Squidex.Domain.Apps.Core.Rules.Actions; +using Squidex.Domain.Apps.Rules.Action.AzureQueue; using Squidex.Infrastructure; using Xunit; @@ -17,53 +16,53 @@ namespace Squidex.Domain.Apps.Entities.Rules.Guards.Actions public class AzureQueueActionTests { [Fact] - public async Task Should_add_error_if_connection_string_is_null() + public void Should_add_error_if_connection_string_is_null() { var action = new AzureQueueAction { ConnectionString = null, Queue = "squidex" }; - var errors = await RuleActionValidator.ValidateAsync(action); + var errors = action.Validate(); errors.Should().BeEquivalentTo( new List { - new ValidationError("Connection string is required.", "ConnectionString") + new ValidationError("The Connection String field is required.", "ConnectionString") }); } [Fact] - public async Task Should_add_error_if_queue_is_null() + public void Should_add_error_if_queue_is_null() { var action = new AzureQueueAction { ConnectionString = "connection", Queue = null }; - var errors = await RuleActionValidator.ValidateAsync(action); + var errors = action.Validate(); errors.Should().BeEquivalentTo( new List { - new ValidationError("Queue name is required.", "Queue") + new ValidationError("The Queue field is required.", "Queue") }); } [Fact] - public async Task Should_add_error_if_queue_is_invalid() + public void Should_add_error_if_queue_is_invalid() { var action = new AzureQueueAction { ConnectionString = "connection", Queue = "Squidex" }; - var errors = await RuleActionValidator.ValidateAsync(action); + var errors = action.Validate(); errors.Should().BeEquivalentTo( new List { - new ValidationError("Queue name must be valid azure queue name.", "Queue") + new ValidationError("Queue must be valid azure queue name.", "Queue") }); } [Fact] - public async Task Should_not_add_error_if_values_are_valid() + public void Should_not_add_error_if_values_are_valid() { var action = new AzureQueueAction { ConnectionString = "connection", Queue = "squidex" }; - var errors = await RuleActionValidator.ValidateAsync(action); + var errors = action.Validate(); Assert.Empty(errors); } diff --git a/tests/Squidex.Domain.Apps.Entities.Tests/Rules/Guards/Actions/ElasticSearchActionTests.cs b/tests/Squidex.Domain.Apps.Entities.Tests/Rules/Guards/Actions/ElasticSearchActionTests.cs index c499f6499..2dcc07cb0 100644 --- a/tests/Squidex.Domain.Apps.Entities.Tests/Rules/Guards/Actions/ElasticSearchActionTests.cs +++ b/tests/Squidex.Domain.Apps.Entities.Tests/Rules/Guards/Actions/ElasticSearchActionTests.cs @@ -7,9 +7,8 @@ using System; using System.Collections.Generic; -using System.Threading.Tasks; using FluentAssertions; -using Squidex.Domain.Apps.Core.Rules.Actions; +using Squidex.Domain.Apps.Rules.Action.ElasticSearch; using Squidex.Infrastructure; using Xunit; @@ -18,67 +17,67 @@ namespace Squidex.Domain.Apps.Entities.Rules.Guards.Actions public class ElasticSearchActionTests { [Fact] - public async Task Should_add_error_if_host_is_null() + public void Should_add_error_if_host_is_null() { var action = new ElasticSearchAction { Host = null, IndexName = "squidex", IndexType = "squidex" }; - var errors = await RuleActionValidator.ValidateAsync(action); + var errors = action.Validate(); errors.Should().BeEquivalentTo( new List { - new ValidationError("Host is required and must be an absolute URL.", "Host") + new ValidationError("The Host field is required.", "Host") }); } [Fact] - public async Task Should_add_error_if_host_is_relative() + public void Should_add_error_if_host_is_relative() { var action = new ElasticSearchAction { Host = new Uri("/rel", UriKind.Relative), IndexName = "squidex", IndexType = "squidex" }; - var errors = await RuleActionValidator.ValidateAsync(action); + var errors = action.Validate(); errors.Should().BeEquivalentTo( new List { - new ValidationError("Host is required and must be an absolute URL.", "Host") + new ValidationError("The Host field must be an absolute URL.", "Host") }); } [Fact] - public async Task Should_add_error_if_index_name_is_null() + public void Should_add_error_if_index_name_is_null() { var action = new ElasticSearchAction { Host = new Uri("http://host", UriKind.Absolute), IndexName = null, IndexType = "squidex" }; - var errors = await RuleActionValidator.ValidateAsync(action); + var errors = action.Validate(); errors.Should().BeEquivalentTo( new List { - new ValidationError("Index name is required.", "IndexName") + new ValidationError("The Index Name field is required.", "IndexName") }); } [Fact] - public async Task Should_add_error_if_index_type_is_null() + public void Should_add_error_if_index_type_is_null() { var action = new ElasticSearchAction { Host = new Uri("http://host", UriKind.Absolute), IndexName = "squidex", IndexType = null }; - var errors = await RuleActionValidator.ValidateAsync(action); + var errors = action.Validate(); errors.Should().BeEquivalentTo( new List { - new ValidationError("Type name is required.", "IndexType") + new ValidationError("The Index Type field is required.", "IndexType") }); } [Fact] - public async Task Should_not_add_error_if_values_are_valid() + public void Should_not_add_error_if_values_are_valid() { var action = new ElasticSearchAction { Host = new Uri("http://host", UriKind.Absolute), IndexName = "squidex", IndexType = "squidex" }; - var errors = await RuleActionValidator.ValidateAsync(action); + var errors = action.Validate(); Assert.Empty(errors); } diff --git a/tests/Squidex.Domain.Apps.Entities.Tests/Rules/Guards/Actions/FastlyActionTests.cs b/tests/Squidex.Domain.Apps.Entities.Tests/Rules/Guards/Actions/FastlyActionTests.cs index a38d627fe..e8ce94392 100644 --- a/tests/Squidex.Domain.Apps.Entities.Tests/Rules/Guards/Actions/FastlyActionTests.cs +++ b/tests/Squidex.Domain.Apps.Entities.Tests/Rules/Guards/Actions/FastlyActionTests.cs @@ -6,9 +6,8 @@ // ========================================================================== using System.Collections.Generic; -using System.Threading.Tasks; using FluentAssertions; -using Squidex.Domain.Apps.Core.Rules.Actions; +using Squidex.Domain.Apps.Rules.Action.Fastly; using Squidex.Infrastructure; using Xunit; @@ -17,39 +16,39 @@ namespace Squidex.Domain.Apps.Entities.Rules.Guards.Actions public class FastlyActionTests { [Fact] - public async Task Should_add_error_if_service_id_not_defined() + public void Should_add_error_if_service_id_not_defined() { var action = new FastlyAction { ServiceId = null, ApiKey = "KEY" }; - var errors = await RuleActionValidator.ValidateAsync(action); + var errors = action.Validate(); errors.Should().BeEquivalentTo( new List { - new ValidationError("Service ID is required.", "ServiceId") + new ValidationError("The Service Id field is required.", "ServiceId") }); } [Fact] - public async Task Should_add_error_if_api_key_not_defined() + public void Should_add_error_if_api_key_not_defined() { var action = new FastlyAction { ServiceId = "APP", ApiKey = null }; - var errors = await RuleActionValidator.ValidateAsync(action); + var errors = action.Validate(); errors.Should().BeEquivalentTo( new List { - new ValidationError("Api Key is required.", "ApiKey") + new ValidationError("The Api Key field is required.", "ApiKey") }); } [Fact] - public async Task Should_not_add_error_everything_defined() + public void Should_not_add_error_everything_defined() { var action = new FastlyAction { ServiceId = "APP", ApiKey = "KEY" }; - var errors = await RuleActionValidator.ValidateAsync(action); + var errors = action.Validate(); Assert.Empty(errors); } diff --git a/tests/Squidex.Domain.Apps.Entities.Tests/Rules/Guards/Actions/MediumActionTests.cs b/tests/Squidex.Domain.Apps.Entities.Tests/Rules/Guards/Actions/MediumActionTests.cs index c309b52ac..5bcffaebe 100644 --- a/tests/Squidex.Domain.Apps.Entities.Tests/Rules/Guards/Actions/MediumActionTests.cs +++ b/tests/Squidex.Domain.Apps.Entities.Tests/Rules/Guards/Actions/MediumActionTests.cs @@ -6,9 +6,8 @@ // ========================================================================== using System.Collections.Generic; -using System.Threading.Tasks; using FluentAssertions; -using Squidex.Domain.Apps.Core.Rules.Actions; +using Squidex.Domain.Apps.Rules.Action.Medium; using Squidex.Infrastructure; using Xunit; @@ -17,53 +16,53 @@ namespace Squidex.Domain.Apps.Entities.Rules.Guards.Actions public class MediumActionTests { [Fact] - public async Task Should_add_error_if_access_token_is_null() + public void Should_add_error_if_access_token_is_null() { var action = new MediumAction { AccessToken = null, Title = "title", Content = "content" }; - var errors = await RuleActionValidator.ValidateAsync(action); + var errors = action.Validate(); errors.Should().BeEquivalentTo( new List { - new ValidationError("Access token is required.", "AccessToken") + new ValidationError("The Access Token field is required.", "AccessToken") }); } [Fact] - public async Task Should_add_error_if_title_null() + public void Should_add_error_if_title_null() { var action = new MediumAction { AccessToken = "token", Title = null, Content = "content" }; - var errors = await RuleActionValidator.ValidateAsync(action); + var errors = action.Validate(); errors.Should().BeEquivalentTo( new List { - new ValidationError("Title is required.", "Title") + new ValidationError("The Title field is required.", "Title") }); } [Fact] - public async Task Should_add_error_if_content_is_null() + public void Should_add_error_if_content_is_null() { var action = new MediumAction { AccessToken = "token", Title = "title", Content = null }; - var errors = await RuleActionValidator.ValidateAsync(action); + var errors = action.Validate(); errors.Should().BeEquivalentTo( new List { - new ValidationError("Content is required.", "Content") + new ValidationError("The Content field is required.", "Content") }); } [Fact] - public async Task Should_not_add_error_if_values_are_valid() + public void Should_not_add_error_if_values_are_valid() { var action = new MediumAction { AccessToken = "token", Title = "title", Content = "content" }; - var errors = await RuleActionValidator.ValidateAsync(action); + var errors = action.Validate(); Assert.Empty(errors); } diff --git a/tests/Squidex.Domain.Apps.Entities.Tests/Rules/Guards/Actions/SlackActionTests.cs b/tests/Squidex.Domain.Apps.Entities.Tests/Rules/Guards/Actions/SlackActionTests.cs index f6b248446..d4a9e60f6 100644 --- a/tests/Squidex.Domain.Apps.Entities.Tests/Rules/Guards/Actions/SlackActionTests.cs +++ b/tests/Squidex.Domain.Apps.Entities.Tests/Rules/Guards/Actions/SlackActionTests.cs @@ -7,9 +7,8 @@ using System; using System.Collections.Generic; -using System.Threading.Tasks; using FluentAssertions; -using Squidex.Domain.Apps.Core.Rules.Actions; +using Squidex.Domain.Apps.Rules.Action.Slack; using Squidex.Infrastructure; using Xunit; @@ -18,39 +17,53 @@ namespace Squidex.Domain.Apps.Entities.Rules.Guards.Actions public class SlackActionTests { [Fact] - public async Task Should_add_error_if_webhook_url_is_null() + public void Should_add_error_if_webhook_url_is_null() { - var action = new SlackAction { WebhookUrl = null }; + var action = new SlackAction { WebhookUrl = null, Text = "text" }; - var errors = await RuleActionValidator.ValidateAsync(action); + var errors = action.Validate(); errors.Should().BeEquivalentTo( new List { - new ValidationError("Webhook URL is required and must be an absolute URL.", "WebhookUrl") + new ValidationError("The Webhook Url field is required.", "WebhookUrl") }); } [Fact] - public async Task Should_add_error_if_webhook_url_is_relative() + public void Should_add_error_if_webhook_url_is_relative() { - var action = new SlackAction { WebhookUrl = new Uri("/invalid", UriKind.Relative) }; + var action = new SlackAction { WebhookUrl = new Uri("/invalid", UriKind.Relative), Text = "text" }; - var errors = await RuleActionValidator.ValidateAsync(action); + var errors = action.Validate(); errors.Should().BeEquivalentTo( new List { - new ValidationError("Webhook URL is required and must be an absolute URL.", "WebhookUrl") + new ValidationError("The Webhook Url field must be an absolute URL.", "WebhookUrl") }); } [Fact] - public async Task Should_not_add_error_if_webhook_url_is_absolute() + public void Should_add_error_if_text_is_null() { - var action = new SlackAction { WebhookUrl = new Uri("https://squidex.io", UriKind.Absolute) }; + var action = new SlackAction { WebhookUrl = new Uri("https://squidex.io", UriKind.Absolute), Text = null }; - var errors = await RuleActionValidator.ValidateAsync(action); + var errors = action.Validate(); + + errors.Should().BeEquivalentTo( + new List + { + new ValidationError("The Text field is required.", "Text") + }); + } + + [Fact] + public void Should_not_add_error_if_webhook_url_is_absolute() + { + var action = new SlackAction { WebhookUrl = new Uri("https://squidex.io", UriKind.Absolute), Text = "text" }; + + var errors = action.Validate(); Assert.Empty(errors); } diff --git a/tests/Squidex.Domain.Apps.Entities.Tests/Rules/Guards/Actions/TweetActionTests.cs b/tests/Squidex.Domain.Apps.Entities.Tests/Rules/Guards/Actions/TweetActionTests.cs index eeaa1a17f..98f601134 100644 --- a/tests/Squidex.Domain.Apps.Entities.Tests/Rules/Guards/Actions/TweetActionTests.cs +++ b/tests/Squidex.Domain.Apps.Entities.Tests/Rules/Guards/Actions/TweetActionTests.cs @@ -6,9 +6,8 @@ // ========================================================================== using System.Collections.Generic; -using System.Threading.Tasks; using FluentAssertions; -using Squidex.Domain.Apps.Core.Rules.Actions; +using Squidex.Domain.Apps.Rules.Action.Twitter; using Squidex.Infrastructure; using Xunit; @@ -17,39 +16,53 @@ namespace Squidex.Domain.Apps.Entities.Rules.Guards.Actions public class TweetActionTests { [Fact] - public async Task Should_add_error_if_access_token_is_null() + public void Should_add_error_if_access_token_is_null() { - var action = new TweetAction { AccessToken = null, AccessSecret = "secret" }; + var action = new TweetAction { AccessToken = null, AccessSecret = "secret", Text = "text" }; - var errors = await RuleActionValidator.ValidateAsync(action); + var errors = action.Validate(); errors.Should().BeEquivalentTo( new List { - new ValidationError("Access Token is required.", "AccessToken") + new ValidationError("The Access Token field is required.", "AccessToken") }); } [Fact] - public async Task Should_add_error_if_access_secret_is_null() + public void Should_add_error_if_access_secret_is_null() { - var action = new TweetAction { AccessToken = "token", AccessSecret = null }; + var action = new TweetAction { AccessToken = "token", AccessSecret = null, Text = "text" }; - var errors = await RuleActionValidator.ValidateAsync(action); + var errors = action.Validate(); errors.Should().BeEquivalentTo( new List { - new ValidationError("Access Secret is required.", "AccessSecret") + new ValidationError("The Access Secret field is required.", "AccessSecret") }); } [Fact] - public async Task Should_not_add_error_if_access_token_and_secret_defined() + public void Should_add_error_if_text_is_null() { - var action = new TweetAction { AccessToken = "token", AccessSecret = "secret" }; + var action = new TweetAction { AccessToken = "token", AccessSecret = "secret", Text = null }; - var errors = await RuleActionValidator.ValidateAsync(action); + var errors = action.Validate(); + + errors.Should().BeEquivalentTo( + new List + { + new ValidationError("The Text field is required.", "Text") + }); + } + + [Fact] + public void Should_not_add_error_if_access_token_and_secret_defined() + { + var action = new TweetAction { AccessToken = "token", AccessSecret = "secret", Text = "text" }; + + var errors = action.Validate(); Assert.Empty(errors); } diff --git a/tests/Squidex.Domain.Apps.Entities.Tests/Rules/Guards/Actions/WebhookActionTests.cs b/tests/Squidex.Domain.Apps.Entities.Tests/Rules/Guards/Actions/WebhookActionTests.cs index 6a523a4f1..f2702877a 100644 --- a/tests/Squidex.Domain.Apps.Entities.Tests/Rules/Guards/Actions/WebhookActionTests.cs +++ b/tests/Squidex.Domain.Apps.Entities.Tests/Rules/Guards/Actions/WebhookActionTests.cs @@ -7,9 +7,8 @@ using System; using System.Collections.Generic; -using System.Threading.Tasks; using FluentAssertions; -using Squidex.Domain.Apps.Core.Rules.Actions; +using Squidex.Domain.Apps.Rules.Action.Webhook; using Squidex.Infrastructure; using Xunit; @@ -18,39 +17,39 @@ namespace Squidex.Domain.Apps.Entities.Rules.Guards.Actions public class WebhookActionTests { [Fact] - public async Task Should_add_error_if_url_is_null() + public void Should_add_error_if_url_is_null() { var action = new WebhookAction { Url = null }; - var errors = await RuleActionValidator.ValidateAsync(action); + var errors = action.Validate(); errors.Should().BeEquivalentTo( new List { - new ValidationError("URL is required and must be an absolute URL.", "Url") + new ValidationError("The Url field is required.", "Url") }); } [Fact] - public async Task Should_add_error_if_url_is_relative() + public void Should_add_error_if_url_is_relative() { var action = new WebhookAction { Url = new Uri("/invalid", UriKind.Relative) }; - var errors = await RuleActionValidator.ValidateAsync(action); + var errors = action.Validate(); errors.Should().BeEquivalentTo( new List { - new ValidationError("URL is required and must be an absolute URL.", "Url") + new ValidationError("The Url field must be an absolute URL.", "Url") }); } [Fact] - public async Task Should_not_add_error_if_url_is_absolute() + public void Should_not_add_error_if_url_is_absolute() { var action = new WebhookAction { Url = new Uri("https://squidex.io", UriKind.Absolute) }; - var errors = await RuleActionValidator.ValidateAsync(action); + var errors = action.Validate(); Assert.Empty(errors); } diff --git a/tests/Squidex.Domain.Apps.Entities.Tests/Rules/Guards/GuardRuleTests.cs b/tests/Squidex.Domain.Apps.Entities.Tests/Rules/Guards/GuardRuleTests.cs index 86189e1d8..987fcc84c 100644 --- a/tests/Squidex.Domain.Apps.Entities.Tests/Rules/Guards/GuardRuleTests.cs +++ b/tests/Squidex.Domain.Apps.Entities.Tests/Rules/Guards/GuardRuleTests.cs @@ -10,11 +10,11 @@ using System.Collections.Immutable; using System.Threading.Tasks; using FakeItEasy; using Squidex.Domain.Apps.Core.Rules; -using Squidex.Domain.Apps.Core.Rules.Actions; using Squidex.Domain.Apps.Core.Rules.Triggers; using Squidex.Domain.Apps.Entities.Rules.Commands; using Squidex.Domain.Apps.Entities.Schemas; using Squidex.Domain.Apps.Entities.TestHelpers; +using Squidex.Domain.Apps.Rules.Action.Webhook; using Squidex.Infrastructure; using Xunit; diff --git a/tests/Squidex.Domain.Apps.Entities.Tests/Rules/RuleEnqueuerTests.cs b/tests/Squidex.Domain.Apps.Entities.Tests/Rules/RuleEnqueuerTests.cs index 16f02a2db..84e28d779 100644 --- a/tests/Squidex.Domain.Apps.Entities.Tests/Rules/RuleEnqueuerTests.cs +++ b/tests/Squidex.Domain.Apps.Entities.Tests/Rules/RuleEnqueuerTests.cs @@ -14,10 +14,10 @@ using Microsoft.Extensions.Options; using NodaTime; using Squidex.Domain.Apps.Core.HandleRules; using Squidex.Domain.Apps.Core.Rules; -using Squidex.Domain.Apps.Core.Rules.Actions; using Squidex.Domain.Apps.Core.Rules.Triggers; using Squidex.Domain.Apps.Entities.Rules.Repositories; using Squidex.Domain.Apps.Events.Contents; +using Squidex.Domain.Apps.Rules.Action.Webhook; using Squidex.Infrastructure; using Squidex.Infrastructure.EventSourcing; using Xunit; diff --git a/tests/Squidex.Domain.Apps.Entities.Tests/Rules/RuleGrainTests.cs b/tests/Squidex.Domain.Apps.Entities.Tests/Rules/RuleGrainTests.cs index 2fa3d6770..8d79e240b 100644 --- a/tests/Squidex.Domain.Apps.Entities.Tests/Rules/RuleGrainTests.cs +++ b/tests/Squidex.Domain.Apps.Entities.Tests/Rules/RuleGrainTests.cs @@ -9,12 +9,12 @@ using System; using System.Collections.Immutable; using System.Threading.Tasks; using FakeItEasy; -using Squidex.Domain.Apps.Core.Rules.Actions; using Squidex.Domain.Apps.Core.Rules.Triggers; using Squidex.Domain.Apps.Entities.Rules.Commands; using Squidex.Domain.Apps.Entities.Rules.State; using Squidex.Domain.Apps.Entities.TestHelpers; using Squidex.Domain.Apps.Events.Rules; +using Squidex.Domain.Apps.Rules.Action.Webhook; using Squidex.Infrastructure; using Squidex.Infrastructure.Commands; using Squidex.Infrastructure.Log; diff --git a/tests/Squidex.Domain.Apps.Entities.Tests/Squidex.Domain.Apps.Entities.Tests.csproj b/tests/Squidex.Domain.Apps.Entities.Tests/Squidex.Domain.Apps.Entities.Tests.csproj index 45f9a5357..5556bacee 100644 --- a/tests/Squidex.Domain.Apps.Entities.Tests/Squidex.Domain.Apps.Entities.Tests.csproj +++ b/tests/Squidex.Domain.Apps.Entities.Tests/Squidex.Domain.Apps.Entities.Tests.csproj @@ -14,6 +14,7 @@ +