diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Account/Localization/Resources/de-DE.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Account/Localization/Resources/de-DE.json
new file mode 100644
index 0000000000..b0418f082f
--- /dev/null
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Account/Localization/Resources/de-DE.json
@@ -0,0 +1,14 @@
+{
+ "culture": "de-DE",
+ "texts": {
+ "Account": "ABP Benutzerkonto - Anmeldung & Registrierung | ABP.IO",
+ "Welcome": "Willkommen",
+ "UseOneOfTheFollowingLinksToContinue": "Nutzen Sie einen der nachfolgenden Links um fortzusetzen",
+ "FrameworkHomePage": "Framework Website",
+ "FrameworkDocumentation": "Framework Dokumentation",
+ "OfficialBlog": "Offizieller Blog",
+ "CommercialHomePage": "Commercial Website",
+ "CommercialSupportWebSite": "Commercial Support-Website",
+ "CommunityWebSite": "ABP Community-Website"
+ }
+}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/de-DE.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/de-DE.json
new file mode 100644
index 0000000000..60725c437b
--- /dev/null
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/de-DE.json
@@ -0,0 +1,199 @@
+{
+ "culture": "de-DE",
+ "texts": {
+ "Permission:Organizations": "Organisationen",
+ "Permission:Manage": "Organisationen verwalten",
+ "Permission:DiscountRequests": "Rabattanfragen",
+ "Permission:DiscountManage": "Rabattanfragen verwalten",
+ "Permission:Disable": "Deaktivieren",
+ "Permission:Enable": "Aktivieren",
+ "Permission:EnableSendEmail": "E-Mail-Senden aktivieren",
+ "Permission:SendEmail": "E-Mail senden",
+ "Permission:NpmPackages": "NPM-Pakete",
+ "Permission:NugetPackages": "Nuget-Pakete",
+ "Permission:Maintenance": "Wartung",
+ "Permission:Maintain": "Warten",
+ "Permission:ClearCaches": "Caches leeren",
+ "Permission:Modules": "Module",
+ "Permission:Packages": "Pakete",
+ "Permission:Edit": "Bearbeiten",
+ "Permission:Delete": "Löschen",
+ "Permission:Create": "Erstellen",
+ "Permission:Accounting": "Abrechnung",
+ "Permission:Accounting:Quotation": "Angebot",
+ "Permission:Accounting:Invoice": "Rechnung",
+ "Menu:Organizations": "Organisationen",
+ "Menu:Accounting": "Abrechnung",
+ "Menu:Packages": "Pakete",
+ "Menu:DiscountRequests": "Rabattanfragen",
+ "NpmPackageDeletionWarningMessage": "Dieses NPM-Paket wird entfernt. Bestätigen Sie das?",
+ "NugetPackageDeletionWarningMessage": "Dieses Nuget-Paket wird entfernt. Bestägiten Sie das?",
+ "ModuleDeletionWarningMessage": "Dieses Modul wird entfernt. Bestätigen Sie das?",
+ "Name": "Name",
+ "DisplayName": "Anzeigename",
+ "ShortDescription": "Kurzbeschreibung",
+ "NameFilter": "Name",
+ "CreationTime": "Erstellungszeitpunkt",
+ "IsPro": "Ist pro",
+ "ShowOnModuleList": "In Modulliste anzeigen",
+ "EfCoreConfigureMethodName": "Methodenname konfigurieren",
+ "IsProFilter": "Ist pro",
+ "ApplicationType": "Anwendungstyp",
+ "Target": "Ziel",
+ "TargetFilter": "Ziel",
+ "ModuleClass": "Modulklasse",
+ "NugetPackageTarget.DomainShared": "Gemeinsame Domain",
+ "NugetPackageTarget.Domain": "Domain",
+ "NugetPackageTarget.Application": "Anwendung",
+ "NugetPackageTarget.ApplicationContracts": "Anwedungsverträge",
+ "NugetPackageTarget.HttpApi": "HTTP-API",
+ "NugetPackageTarget.HttpApiClient": "HTTP-API-Client",
+ "NugetPackageTarget.Web": "Web",
+ "NugetPackageTarget.EntityFrameworkCore": "DeleteAllEntityFramework Core",
+ "NugetPackageTarget.MongoDB": "MongoDB",
+ "Edit": "Bearbeiten",
+ "Delete": "Löschen",
+ "Refresh": "Aktualisieren",
+ "NpmPackages": "NPM-Pakete",
+ "NugetPackages": "Nuget-Pakete",
+ "NpmPackageCount": "NPM-Paketanzahl",
+ "NugetPackageCount": "Nuget-Paketanzahl",
+ "Module": "Module",
+ "ModuleInfo": "Modulinfo",
+ "CreateANpmPackage": "Erstellen Sie ein NPM Paket",
+ "CreateAModule": "Erstellen Sie in Modul",
+ "CreateANugetPackage": "Erstellen Sei ein Nuget-Paket",
+ "AddNew": "Neu hinzufügen",
+ "PackageAlreadyExist{0}": "\"{0}\" Paket ist bereits hinzugefügt.",
+ "ModuleAlreadyExist{0}": "\"{0}\" Modul ist bereits hinzugefügt.",
+ "ClearCache": "Cache leeren",
+ "SuccessfullyCleared": "Erfolgreich geleert",
+ "Menu:NpmPackages": "NPM-Pakete",
+ "Menu:Modules": "Module",
+ "Menu:Maintenance": "Wartung",
+ "Menu:NugetPackages": "Nuget-Pakete",
+ "CreateAnOrganization": "Erstellen Sie eine Organisation",
+ "Organizations": "Organisationen",
+ "LongName": "Lange Name",
+ "LicenseType": "Lizenztyp",
+ "MissingLicenseTypeField": "Das Feld Lizenztyp ist erforderlich!",
+ "LicenseStartTime": "Startzeit der Lizenz",
+ "LicenseEndTime": "Endzeit der Lizenz",
+ "AllowedDeveloperCount": "Zulässige Entwickleranzahl",
+ "UserNameOrEmailAddress": "Benutzername oder E-Mail-Adresse",
+ "AddOwner": "Besitzer hinzufügen",
+ "UserName": "Benutzername",
+ "Email": "E-Mail",
+ "Developers": "Entwickler",
+ "AddDeveloper": "Entwickler hinzufügen",
+ "Create": "Erstellen",
+ "UserNotFound": "Benutzer nicht gefunden",
+ "{0}WillBeRemovedFromDevelopers": "{0} wird von den Entwicklern entfernt. Bestätigen Sie das?",
+ "{0}WillBeRemovedFromOwners": "{0} wird von den Besitzern entfernt. Bestätigen Sie das?",
+ "Computers": "Computer",
+ "UniqueComputerId": "Eindeutig Computer-ID",
+ "LastSeenDate": "Zuletzt gesehenes Datum",
+ "{0}Computer{1}WillBeRemovedFromRecords": "Computer von {0} ({1}) wird aus den Datensätzen entfernt",
+ "OrganizationDeletionWarningMessage": "Organisation wird gelöscht",
+ "DeletingLastOwnerWarningMessage": "Eine Organisation muss zumindest einen Besitzer aufweisen! Daher können Sie diesen Besitzer nicht entfernen",
+ "This{0}AlreadyExistInThisOrganization": "Dies {0} existiert bereits in dieser Organisation",
+ "AreYouSureYouWantToDeleteAllComputers": "Sind Sie sicher, dass Sie alle Computer löschen möchten?",
+ "DeleteAll": "Alles Löschen",
+ "DoYouWantToCreateNewUser": "Möchten Sie einen neuen Benutzer erstellen?",
+ "MasterModules": "Master-Module",
+ "OrganizationName": "Organisationsname",
+ "CreationDate": "Erstellungsdatum",
+ "LicenseStartDate": "Startdatum der Lizenz",
+ "LicenseEndDate": "Enddatum der Lizenz",
+ "OrganizationNamePlaceholder": "Organisationsname...",
+ "TotalQuestionCountPlaceholder": "Gesamtzahl der Fragen...",
+ "RemainingQuestionCountPlaceholder": "Anzahl verbleibender Fragen...",
+ "LicenseTypePlaceholder": "Lizenztyp...",
+ "CreationDatePlaceholder": "Erstellungsdatum...",
+ "LicenseStartDatePlaceholder": "Startdatum der Lizenz...",
+ "LicenseEndDatePlaceholder": "Enddatum der Lizenz...",
+ "UsernameOrEmail": "Benutzername oder E-Mail-Adresse",
+ "UsernameOrEmailPlaceholder": "Benutzername oder E-Mail-Adresse...",
+ "Member": "Mitglied",
+ "PurchaseOrderNo": "Bestellnummer",
+ "QuotationDate": "Angebotsdatum",
+ "CompanyName": "Firmenname",
+ "CompanyAddress": "Firmenanschrift",
+ "Price": "Preis",
+ "DiscountText": "Rabatttext",
+ "DiscountQuantity": "Rabattmenge",
+ "DiscountPrice": "Rabattpreis",
+ "Quotation": "Angebot",
+ "ExtraText": "Zusätzlicher Text",
+ "ExtraAmount": "Zusätzliche Menge",
+ "DownloadQuotation": "Angebot herunterladen",
+ "Invoice": "Rechnung",
+ "TaxNumber": "Steuernummer",
+ "InvoiceNumber": "Rechnungsnummer",
+ "InvoiceDate": "Rechnungsdatum",
+ "InvoiceNote": "Rechnungsnotiz",
+ "Quantity": "Menge",
+ "AddProduct": "Produkt hinzufügen",
+ "AddProductWarning": "Sie müssen ein Produkt hinzufügen!",
+ "TotalPrice": "Gesamtpreis",
+ "Generate": "Generieren",
+ "MissingQuantityField": "Das Feld Menge ist erforderlich!",
+ "MissingPriceField": "Das Feld Preis ist erforderlich!",
+ "CodeUsageStatus": "Status",
+ "Country": "Land",
+ "DeveloperCount": "Entwickleranzahl",
+ "RequestCode": "Anfrage-Code",
+ "WebSite": "Webseite",
+ "GithubUsername": "Github Benutzername",
+ "PhoneNumber": "Telefonnummer",
+ "ProjectDescription": "Projektbeschreibung",
+ "Referrer": "Referrer",
+ "DiscountRequests": "Rabattanfrage",
+ "Copylink": "Link kopieren",
+ "Disable": "Deaktivieren",
+ "Enable": "Aktivieren",
+ "EnableSendEmail": "E-Mail-Senden aktivieren",
+ "SendEmail": "E-Mail senden",
+ "SuccessfullyDisabled": "Erfolgreich deaktiviert",
+ "SuccessfullyEnabled": "Erfolgreich aktiviert",
+ "EmailSent": "E-Mail gesendet",
+ "SuccessfullySent": "Erfolgreich gesendet",
+ "SuccessfullyDeleted": "Erfolgreich gelöscht",
+ "DiscountRequestDeletionWarningMessage": "Rabattanfrage wird gelöscht",
+ "BusinessType": "Unternehmensart",
+ "TotalQuestionCount": "Gesamtzahl der Fragen",
+ "RemainingQuestionCount": "Anzahl verbleibender Fragen",
+ "TotalQuestionMustBeGreaterWarningMessage": "TotalQuestionCount muss größer sein als RemainingQuestionCount !",
+ "QuestionCountsMustBeGreaterThanZero": "TotalQuestionCount und RemainingQuestionCount müssen Null oder größer als Null sein !",
+ "UnlimitedQuestionCount": "Unbegrenzte Anzahl von Fragen",
+ "Notes": "Anmerkungen",
+ "Menu:Community": "Community",
+ "Menu:Articles": "Beiträge",
+ "Wait": "Warten",
+ "Approve": "Genehmigen",
+ "Reject": "Ablehnen",
+ "Details": "Details",
+ "Url": "URL",
+ "Title": "Titel",
+ "ContentSource": "Inhaltsquelle",
+ "Status": "Status",
+ "ReadArticle": "Beitrag lesen",
+ "ArticleHasBeenWaiting": "Beitrag hat gewartet",
+ "ArticleHasBeenApproved": "Beitrag wurde genehmigt",
+ "ArticleHasBeenRejected": "Beitrag wurde abgelehnt",
+ "Permission:Community": "Community",
+ "Permission:CommunityArticle": "Beitrag",
+ "Link": "Link",
+ "Enum:ContentSource:0": "Github",
+ "Enum:ContentSource:1": "Extern",
+ "Enum:Status:0": "Wartend",
+ "Enum:Status:1": "Abgelehnt",
+ "Enum:Status:2": "Genehmigt",
+ "Summary": "Zusammenfassung",
+ "AuthorName": "Autorenname",
+ "CoverImage": "Titelbild",
+ "RemoveCacheConfirmationMessage": "Sind Sie sicher, dass Sie den Cache für den Artikel \"{0}\" entfernen wollen?",
+ "SuccessfullyRemoved": "Erfolgreich geleert",
+ "RemoveCache": "Cache entfernen"
+ }
+}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/de-DE.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/de-DE.json
new file mode 100644
index 0000000000..77e1b2090a
--- /dev/null
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/de-DE.json
@@ -0,0 +1,33 @@
+{
+ "culture": "de-DE",
+ "texts": {
+ "Volo.AbpIo.Domain:010004": "Maximale Mitgliederanzahl erreicht!",
+ "Volo.AbpIo.Domain:010005": "Miximale Besizeranzahl erreicht!",
+ "Volo.AbpIo.Domain:010006": "Dieser Benutzer ist bereits ein Besitzer in dieser Organisation!",
+ "Volo.AbpIo.Domain:010007": "Dieser Benutzer ist bereits ein Entwickler in dieser Organisation!",
+ "Volo.AbpIo.Domain:010008": "Die zulässige Entwickleranzahl darf nicht geringer sein als die aktuelle Entwickleranzahl!",
+ "Volo.AbpIo.Domain:010009": "Die zulässige Entwickleranzahl darf nicht kleiner als 0 sein!",
+ "Volo.AbpIo.Domain:010010": "Die maximale Anzahl der Mac-Adressen ist überschritten!",
+ "Volo.AbpIo.Domain:010011": "Die persönliche Lizenz kann nicht mehr als 1 Entwickler haben!",
+ "Volo.AbpIo.Domain:010012": "Die Lizenz kann nicht einen Monat nach Ablauf der Lizenz verlängert werden!",
+ "Volo.AbpIo.Domain:020001": "Dieses NPM-Paket konnte nicht gelöscht werden, da \"{NugetPackages}\" Nuget-Pakete von diesem Paket abhängig sind.",
+ "Volo.AbpIo.Domain:020002": "Dieses NPM-Paket konnte nicht gelöscht werden, da \"{Module}\" Module dieses Paket verwenden.",
+ "Volo.AbpIo.Domain:020003": "Dieses NPM-Paket konnte nicht gelöscht werden, da \"{Module}\" Module dieses Paket verwenden und \"{NugetPackages}\" Nuget-Pakete von diesem Paket abhängig sind.",
+ "Volo.AbpIo.Domain:020004": "Dieses Nuget-Paket konnte nicht gelöscht werden, da \"{Module}\" Module dieses Paket verwenden.",
+ "WantToLearn?": "Wollen Sie sich einlernen?",
+ "ReadyToGetStarted?": "Bereit anzufangen?",
+ "JoinOurCommunity": "Tritt unserer Community bei",
+ "GetStartedUpper": "LOSLEGEN",
+ "ForkMeOnGitHub": "Fork me on GitHub",
+ "Features": "Features",
+ "GetStarted": "Loslegen",
+ "Documents": "Unterlagen",
+ "Community": "Community",
+ "ContributionGuide": "Leitfaden für Mitwirkende",
+ "Blog": "Blog",
+ "Commercial": "Commercial",
+ "MyAccount": "Mein Benutzerkonto",
+ "SeeDocuments": "Siehe Unterlagen",
+ "Samples": "Beispiele"
+ }
+}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/de-DE.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/de-DE.json
new file mode 100644
index 0000000000..ddc493e63b
--- /dev/null
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/de-DE.json
@@ -0,0 +1,35 @@
+{
+ "culture": "de-DE",
+ "texts": {
+ "OrganizationManagement": "Organisationsverwaltung",
+ "OrganizationList": "Organisationsauflistung",
+ "Volo.AbpIo.Commercial:010003": "Sie sind der Besitzer dieser Organisation!",
+ "OrganizationNotFoundMessage": "Keine Organisation gefunden!",
+ "DeveloperCount": "Zugeordnete / Gesamte Entwickler",
+ "QuestionCount": "Verbleibende / Gesamte Fragen",
+ "Unlimited": "Unbegrenzt",
+ "Owners": "Besitzer",
+ "AddMember": "Mitglied hinzufügen",
+ "AddOwner": "Besizer hinzufügen",
+ "AddDeveloper": "Entwickler hinzufügen",
+ "UserName": "Benutzername",
+ "Name": "Name",
+ "EmailAddress": "E-Mail-Adress",
+ "Developers": "Entwickler",
+ "LicenseType": "Lizenztyp",
+ "Manage": "Verwalten",
+ "StartDate": "Startdatum",
+ "EndDate": "Enddatum",
+ "Modules": "Module",
+ "LicenseExtendMessage": "Ihr Lizenzenddatum wird auf {0} verlängert",
+ "LicenseUpgradeMessage": "Ihre Lizenz wird auf {0} aktualisiert",
+ "LicenseAddDeveloperMessage": "{0} Entwickler zu Ihrer Lizenz hinzugefügt",
+ "Volo.AbpIo.Commercial:010004": "Kann den angegebenen Benutzer nicht finden! Der Benutzer muss sich bereits registriert haben.",
+ "MyOrganizations": "Meine Organisationen",
+ "ApiKey": "API-Schlüssel",
+ "UserNameNotFound": "Es gibt keinen Benutzer mit dem Benutzernamen {0}",
+ "SuccessfullyAddedToNewsletter": "Vielen Dank, dass Sie unseren Newsletter abonniert haben!",
+ "MyProfile": "Mein Profil",
+ "EmailNotValid": "Bitte geben Sie eine gültige E-Mail-Adresse ein."
+ }
+}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/de-DE.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/de-DE.json
new file mode 100644
index 0000000000..cc8d76012c
--- /dev/null
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/de-DE.json
@@ -0,0 +1,90 @@
+{
+ "culture": "de-DE",
+ "texts": {
+ "Permission:CommunityArticle": "Community-Beitrag",
+ "Permission:Edit": "Bearbeiten",
+ "Waiting": "Wartend",
+ "Approved": "Genehmigt",
+ "Rejected": "Abgelehnt",
+ "Wait": "Warten",
+ "Approve": "Genehmigen",
+ "Reject": "Ablehnen",
+ "ReadArticle": "Beitrag lesen",
+ "Status": "Status",
+ "ContentSource": "Inhaltsquelle",
+ "Details": "Details",
+ "Url": "URL",
+ "Title": "Titel",
+ "CreationTime": "Erstellungszeitpunkt",
+ "Save": "Speichern",
+ "SameUrlAlreadyExist": "Dieselbe URL existiert bereits, wenn Sie diesen Beitrag hinzufügen möchten, sollten Sie die URL ändern!",
+ "UrlIsNotValid": "Der URL ist nicht korrekt.",
+ "UrlNotFound": "URL nicht gefunden.",
+ "UrlContentNotFound": "URL-Inhalt nicht gefunden",
+ "Summary": "Zusammenfassung",
+ "MostRead": "Meist gelesen",
+ "Latest": "Neueste",
+ "ContributeAbpCommunity": "Tragen Sie zur ABP Community bei",
+ "SubmitYourArticle": "Reichen Sie Ihren Beitrag ein",
+ "ContributionGuide": "Leitfaden für Mitwirkende",
+ "BugReport": "Fehler melden",
+ "SeeAllArticles": "Alle Beiträge anzeigen",
+ "WelcomeToABPCommunity!": "Willkommen in der ABP Community!",
+ "MyProfile": "Mein Profil",
+ "MyOrganizations": "Meine Organisationen",
+ "EmailNotValid": "Bitte geben Sie eine gültige E-Mail-Adresse ein.",
+ "FeatureRequest": "Featureanfrage",
+ "CreateArticleTitleInfo": "Titel des Beitrags, der in der Beitragsliste angezeigt werden soll.",
+ "CreateArticleUrlInfo": "Original GitHub-/externe URL des Beitrags.",
+ "CreateArticleSummaryInfo": "Eine kurze Zusammenfassung des Beitrags, der in der Beitragsliste angezeigt werden soll.",
+ "CreateArticleCoverInfo": "Fügen Sie zum Erstellen eines effektiven Beitrags ein Titelbild hinzu. Laden Sie Bilder mit einem Seitenverhältnis von 16: 9 hoch, um die beste Ansicht zu erhalten.",
+ "ThisExtensionIsNotAllowed": "Diese Erweiterung ist nicht zulässig.",
+ "TheFileIsTooLarge": "Die Datei ist zu groß.",
+ "GoToTheArticle": "Gehe zum Beitrag",
+ "Contribute": "Beitragen",
+ "OverallProgress": "Gesamtfortschritt",
+ "Done": "Ferig",
+ "Open": "Offen",
+ "Closed": "Geschlossen",
+ "LatestQuestionOnThe": "Letzte Frage zum",
+ "Stackoverflow": "Stackoverflow",
+ "Votes": "Stimmen",
+ "Answer": "Antworten",
+ "Views": "Ansichten",
+ "Answered": "Beantwortet",
+ "WaitingForYourAnswer": "Warten auf Ihre Antwort",
+ "Asked": "gefragt",
+ "AllQuestions": "Alle Fragen",
+ "NextVersion": "Nächste Version",
+ "MilestoneErrorMessage": "Die aktuellen Meilensteindetails konnten von Github nicht abgerufen werden.",
+ "QuestionItemErrorMessage": "Die neuesten Fragendetails konnten von Stackoverflow nicht abgerufen werden.",
+ "Oops": "Hoppla!",
+ "CreateArticleSuccessMessage": "Der Beitrag wurde erfolgreich eingereicht. Er wird nach einer Überprüfung durch den Site-Administrator veröffentlicht.",
+ "ChooseCoverImage": "Wählen Sie ein Titelbild ...",
+ "CoverImage": "Titelbild",
+ "ShareYourExperiencesWithTheABPFramework": "Teilen Sie Ihre Erfahrungen mit dem ABP Framework!",
+ "Optional": "Optional",
+ "UpdateUserWebSiteInfo": "Beispiel: https://johndoe.com",
+ "UpdateUserTwitterInfo": "Beispiel: johndoe",
+ "UpdateUserGithubInfo": "Beispiel: johndoe",
+ "UpdateUserLinkedinInfo": "Beispiel: https://www.linkedin.com/...",
+ "UpdateUserCompanyInfo": "Beispiel: Volosoft",
+ "UpdateUserJobTitleInfo": "Beispiel: Software Developer",
+ "UserName": "Benutzername",
+ "Company": "Firma",
+ "PersonalWebsite": "Persönliche Website",
+ "RegistrationDate": "Registrierungsdatum",
+ "Social": "Social",
+ "Biography": "Biographie",
+ "HasNoPublishedArticlesYet": "hat noch keine Beiträge veröffentlicht",
+ "Author": "Autor",
+ "LatestGithubAnnouncements": "Neueste Github-Ankündigungen",
+ "SeeAllAnnouncements": "Alle Ankündigungen anzeigen",
+ "LatestBlogPost": "Letzter Blog-Beitrag",
+ "Edit": "Bearbeiten",
+ "ProfileImageChange": "Ändern Sie das Profilbild",
+ "BlogItemErrorMessage": "Die neuesten Blogpost-Details konnten von ABP nicht abgerufen werden.",
+ "PlannedReleaseDate": "Geplantes Erscheinungsdatum",
+ "CommunityArticleRequestErrorMessage": "Die Anfrage nach den neuesten Beiträgen von Github konnte nicht abgerufen werden."
+ }
+}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json
index 87db8c931a..2d146db401 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json
@@ -85,6 +85,11 @@
"ProfileImageChange": "Change the profile image",
"BlogItemErrorMessage": "Could not get the latest blog post details from ABP.",
"PlannedReleaseDate": "Planned release date",
- "CommunityArticleRequestErrorMessage": "Could not get the latest article request from Github."
+ "CommunityArticleRequestErrorMessage": "Could not get the latest article request from Github.",
+ "ArticleRequestFromGithubIssue": "There are not any article requests now.",
+ "LatestArticles": "Latest Articles",
+ "ArticleRequests": "Article Requests",
+ "AllArticleRequests": "See All Article Requests",
+ "ArticleAssignRequest": "Want to write this article? Click here to assign yourself."
}
}
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/de-DE.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/de-DE.json
new file mode 100644
index 0000000000..6f9f0726cf
--- /dev/null
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/de-DE.json
@@ -0,0 +1,189 @@
+{
+ "culture": "de-DE",
+ "texts": {
+ "GetStarted": "Erste Schritte - Startvorlagen",
+ "Create": "Erstellen",
+ "NewProject": "Neues Projekt",
+ "DirectDownload": "Direkter Download",
+ "ProjectName": "Proejktname",
+ "ProjectType": "Projekttyp",
+ "DatabaseProvider": "Datenbankanbieter",
+ "NTier": "N-Tier",
+ "IncludeUserInterface": "Benutzeroberfläche einschließen",
+ "CreateNow": "Jetzt erstellen",
+ "TheStartupProject": "Das Startprojekt",
+ "Tutorial": "Lernprogramm",
+ "UsingCLI": "mit CLI",
+ "SeeDetails": "Details ansehen",
+ "AbpShortDescription": "ABP Framework ist eine vollständige Infrastruktur zum Erstellen moderner Webanwendungen unter Befolgung von Best Practices und Konventionen für Softwareentwicklung.",
+ "SourceCodeUpper": "QUELLCODE",
+ "LatestReleaseLogs": "Akteulle Release",
+ "Infrastructure": "Infrastrutkur",
+ "Architecture": "Architektur",
+ "Modular": "Modular",
+ "DontRepeatYourself": "Don't Repeat Yourself",
+ "DeveloperFocused": "Entwickler-Zentriert",
+ "FullStackApplicationInfrastructure": "Full-Stack-Anwendungsinfrastruktur.",
+ "DomainDrivenDesign": "Domain Driven Design",
+ "DomainDrivenDesignExplanation": "Entworfen und entwickelt basierend auf DDD-Mustern und -Prinzipien. Bietet ein Schichtenmodell für Ihre Anwendung.",
+ "Authorization": "Authorization",
+ "AuthorizationExplanation": "Erweiterte Autorisierung mit Benutzer-, Rollen- und fein abgestimmtem Berechtigungssystem. Aufbauend auf der Microsoft Identity-Bibliothek.",
+ "MultiTenancy": "Multi-Tenancy",
+ "MultiTenancyExplanationShort": "SaaS-Anwendungen leicht gemacht! Integrierte Mandantenfähigkeit von der Datenbank bis zur Benutzeroberfläche.",
+ "CrossCuttingConcerns": "Cross Cutting Concerns",
+ "CrossCuttingConcernsExplanationShort": "Komplette Infrastruktur für Autorisierung, Validierung, Ausnahmebehandlung, Caching, Überwachungsprotokollierung, Transaktionsverwaltung und mehr.",
+ "BuiltInBundlingMinification": "Built-In Bundling & Minification",
+ "BuiltInBundlingMinificationExplanation": "Für die Bundling und Minification müssen keine externen Tools verwendet werden. ABP bietet eine einfachere, dynamische, leistungsstarke, modulare und integrierte Methode!",
+ "VirtualFileSystem": "Virtual File System",
+ "VirtualFileSystemExplanation": "Betten Sie Ansichten, Skripte, Stile, Bilder ... in Pakete/Bibliotheken ein und verwenden Sie sie in verschiedenen Anwendungen wieder.",
+ "Theming": "Theming",
+ "ThemingExplanationShort": "Verwenden und passen Sie das Bootstrap-basierte Standard-UI-Design an oder erstellen Sie Ihr eigenes.",
+ "BootstrapTagHelpersDynamicForms": "Bootstrap Tag Helpers & Dynamic Forms",
+ "BootstrapTagHelpersDynamicFormsExplanation": "Anstatt die sich wiederholenden Details von Bootstrap-Komponenten manuell zu schreiben, verwenden Sie die Tag-Helper von ABP, um diese zu vereinfachen und dabei die Vorteile von Intellisense zu nutzen. Erstellen Sie mit dem dynamischen Formular-Tag-Helfer schnell UI-Formulare basierend auf einem C#-Modell.",
+ "HTTPAPIsDynamicProxies": "HTTP APIs & Dynamic Proxies",
+ "HTTPAPIsDynamicProxiesExplanation": "Stellen Sie Anwendungsdienste automatisch als HTTP-APIs im REST-Stil bereit und verwenden Sie diese mit dynamischen JavaScript- und C#-Proxys.",
+ "CompleteArchitectureInfo": "Moderne Architektur zur Erstellung wartbarer Softwarelösungen.",
+ "DomainDrivenDesignBasedLayeringModelExplanation": "Hilft Ihnen bei der Implementierung einer DDD-basierten Schichtarchitektur und beim Aufbau einer wartbaren Codebasis.",
+ "DomainDrivenDesignBasedLayeringModelExplanationCont": "Bietet Startvorlagen, Abstraktionen, Basisklassen, Dienste, Dokumentation und Anleitungen, mit denen Sie Ihre Anwendung basierend auf DDD-Mustern und -Prinzipien entwickeln können.",
+ "MicroserviceCompatibleModelExplanation": "Das Kernframework und die vorgefertigten Module sind unter Berücksichtigung der Microservice-Architektur konzipiert.",
+ "MicroserviceCompatibleModelExplanationCont": "Bietet Infrastruktur, Integrationen, Beispiele und Dokumentation zur einfacheren Implementierung von Microservice-Lösungen, ohne zusätzliche Komplexität zu verursachen, wenn Sie eine monolithische Anwendung wünschen.",
+ "ModularInfo": "ABP bietet ein Modulsystem, mit dem Sie wiederverwendbare Anwendungsmodule entwickeln, Ereignisse im Anwendungslebenszyklus verknüpfen und Abhängigkeiten zwischen Kernteilen Ihres Systems ausdrücken können.",
+ "PreBuiltModulesThemes": "Vorgefertigte Module & Themes",
+ "PreBuiltModulesThemesExplanation": "Open Source- und kommerzielle Module und Themes stehen bereit, um in Ihrer Geschäftsanwendung verwendet zu werden.",
+ "NuGetNPMPackages": "NuGet- & NPM-Pakete",
+ "NuGetNPMPackagesExplanation": "Bereitgestellt als NuGet- & NPM-Pakete. Einfach zu installieren und zu aktualisieren.",
+ "ExtensibleReplaceable": "Erweiterbar/Austauschbar",
+ "ExtensibleReplaceableExplanation": "Alle Dienste und Module sind auf Erweiterbarkeit ausgelegt. Sie können Dienste, Seiten, Stile und Komponenten ersetzen.",
+ "CrossCuttingConcernsExplanation2": "Halten Sie Ihre Codebasis kleiner, damit Sie sich auf ihre geschäftsspezifischen Code konzentrieren können.",
+ "CrossCuttingConcernsExplanation3": "Verbringen Sie keine Zeit damit, grundlegende Anwendungsanforderungen für jedes neue Projekte zu implementieren.",
+ "AuthenticationAuthorization": "Authentifizierung & Autorisierung",
+ "ExceptionHandling": "Fehlerbehandlung",
+ "Validation": "Validierung",
+ "DatabaseConnection": "Datenbankverbindung",
+ "TransactionManagement": "Transaktionsmanagement",
+ "AuditLogging": "Audit Logging",
+ "Caching": "Caching",
+ "Multitenancy": "Multimandantenfähigkeit",
+ "DataFiltering": "Datenfilterung",
+ "ConventionOverConfiguration": "Convention Over Configuration",
+ "ConventionOverConfigurationExplanation": "ABP implementiert standardmäßig allgemeine Anwendungskonventionen mit einer minimalen oder Null-Konfiguration.",
+ "ConventionOverConfigurationExplanationList1": "Automatische Registrierung bekannter Services für Dependency Injection.",
+ "ConventionOverConfigurationExplanationList2": "Stellt Anwendungsdienste mittels Namenskonventionen als HTTP-APIs bereit.",
+ "ConventionOverConfigurationExplanationList3": "Erstellt dynamische HTTP-Client-Proxys für C# und JavaScript.",
+ "ConventionOverConfigurationExplanationList4": "Bietet Standard-Repositorys für Ihre Entities.",
+ "ConventionOverConfigurationExplanationList5": "Verwaltet die Unit-of-Work gemäß Webanforderung oder Anwendungsdienstmethode.",
+ "ConventionOverConfigurationExplanationList6": "Triggert Erstellungs-, Aktualisierungs- und Lösch-Events für Ihre Entities.",
+ "BaseClasses": "Basisklassen",
+ "BaseClassesExplanation": "Vorgefertigte Basisklassen für gängige Anwendungsmuster.",
+ "DeveloperFocusedExplanation": "ABP ist für Entwickler",
+ "DeveloperFocusedExplanationCont": "Es zielt darauf ab, Ihre tägliche Softwareentwicklung zu vereinfachen, ohne Sie daran zu hindern, Low-Level-Code zu schreiben.",
+ "SeeAllFeatures": "Alle Features anzeigen",
+ "CLI_CommandLineInterface": "CLI (Command Line Interface)",
+ "CLI_CommandLineInterfaceExplanation": "Enthält eine CLI, mit der Sie die Erstellung neuer Projekte und das Hinzufügen neuer Module automatisieren können.",
+ "StartupTemplates": "Startvorlagen",
+ "StartupTemplatesExplanation": "Verschiedene Startvorlagen bieten eine vollständig konfigurierte Lösung, um Ihre Entwicklung zu beschleunigen.",
+ "BasedOnFamiliarTools": "Basierend auf vertrauten Tools",
+ "BasedOnFamiliarToolsExplanation": "Aufbauend auf und integriert mit beliebten Tools, die Sie bereits kennen. Geringe Lernkurve, einfache Anpassung, komfortable Entwicklung.",
+ "ORMIndependent": "ORM-unabhängig",
+ "ORMIndependentExplanation": "Das Kernframework ist ORM-/datenbankunabhängig und kann mit jeder Datenquelle arbeiten. Entity Framework Core- und MongoDB-Anbieter sind bereits verfügbar.",
+ "Features": "Entdecken Sie die ABP Framework-Features",
+ "ABPCLI": "ABP CLI",
+ "Modularity": "Modularität",
+ "BootstrapTagHelpers": "Bootstrap Tag Helpers",
+ "DynamicForms": "Dynamische Formulare",
+ "BundlingMinification": "Bundling & Minification",
+ "BackgroundJobs": "Background Jobs",
+ "BackgroundJobsExplanation": "Definieren Sie einfache Klassen, um Jobs im Hintergrund in der Warteschlange auszuführen. Verwenden Sie den integrierten Jobmanager oder integrieren Sie Ihren eigenen. Hangfire & RabbitMQ -Integrationen sind bereits verfügbar.",
+ "DDDInfrastructure": "DDD-Infrastruktur",
+ "DomainDrivenDesignInfrastructure": "Domain Driven Design-Infrastruktur",
+ "AutoRESTAPIs": "Auto REST APIs",
+ "DynamicClientProxies": "Dynamische Client-Proxies",
+ "DistributedEventBus": "Distributed Event Bus",
+ "DistributedEventBusWithRabbitMQIntegration": "Distributed Event Bus mit RabbitMQ-Integration",
+ "TestInfrastructure": "Test-Infrastruktur",
+ "AuditLoggingEntityHistories": "Audit Logging & Entity Histories",
+ "ObjectToObjectMapping": "Object to Object Mapping",
+ "ObjectToObjectMappingExplanation": " Object to Object Mapping Abstraktion mit AutoMapper-Integration.",
+ "EmailSMSAbstractions": "E-Mail & SMS Abstraktionen",
+ "EmailSMSAbstractionsWithTemplatingSupport": "E-Mail- und SMS-Abstraktionen mit Vorlagenunterstützung",
+ "Localization": "Lokalisierung",
+ "SettingManagement": "Einstellungsverwaltung",
+ "ExtensionMethods": "Erweiterungsmethoden",
+ "ExtensionMethodsHelpers": "Erweiterungsmethoden & Helfer",
+ "AspectOrientedProgramming": "Aspektorientierte Programmierung",
+ "DependencyInjection": "Dependency Injection",
+ "DependencyInjectionByConventions": "Dependency Injection durch Konventionen",
+ "ABPCLIExplanation": "ABP CLI (Command Line Interface) ist ein Befehlszeilenprogramm zum Ausführen einiger gängiger Vorgänge für ABP-basierte Lösungen.",
+ "ModularityExplanation": "ABP bietet eine vollständige Infrastruktur zum Erstellen eigener Anwendungsmodule, die Entities, Services, Datenbankintegration, APIs, UI-Komponenten usw. enthalten können.",
+ "MultiTenancyExplanation": "Das ABP-Framework unterstützt nicht nur die Entwicklung von Multi-Mandantenanwendungen, sondern macht Ihren Code von der Mandantenfähigkeit auch weitgehend unabhängig.",
+ "MultiTenancyExplanation2": "Kann den aktuellen Mandanten automatisch ermitteln und Daten verschiedener Mandanten voneinander isolieren.",
+ "MultiTenancyExplanation3": "Unterstützt einzelne Datenbank-, Datenbank-pro-Mandanten- und Hybrid-Ansätze.",
+ "MultiTenancyExplanation4": "Sie konzentrieren sich auf Ihren geschäftsspezifischen Code und lassen das Framework die Mandantenfähigkeit für Sie übernehmen.",
+ "BootstrapTagHelpersExplanation": "Anstatt die sich wiederholenden Details von Bootstrap-Komponenten manuell zu schreiben, verwenden Sie die Tag-Helper von ABP, um diese zu vereinfachen und dabei die Vorteile von Intellisense zu nutzen. Sie können Bootstrap weitherhin verwenden, wann immer Sie es benötigen.",
+ "DynamicFormsExplanation": "Helfer für dynamische Formular- und Input-Tags können das vollständige Formular anhand einer C#-Klasse als Model erstellen.",
+ "AuthenticationAuthorizationExplanation": "Umfangreiche Authentifizierungs- und Autorisierungsoptionen, die in ASP.NET Core Identity & IdentityServer4 integriert sind. Bietet ein erweiterbares und detailliertes Berechtigungssystem.",
+ "CrossCuttingConcernsExplanation": "Wiederholen Sie sich nicht, um all diese allgemeinen Dinge immer wieder zu implementieren. Konzentrieren Sie sich auf Ihren geschäftsspezifischen Code und lassen Sie ihn von ABP durch Konventionen automatisieren.",
+ "DatabaseConnectionTransactionManagement": "Datenbankverbindungs- und Transaktionsmanagement",
+ "CorrelationIdTracking": "Correlation-ID-Verfolgung",
+ "BundlingMinificationExplanation": "ABP bietet ein einfaches, dynamisches, leistungsstarkes, modulares und integriertes Bundling- und Minification-System.",
+ "VirtualFileSystemnExplanation": "Das virtuelle Dateisystem ermöglicht die Verwaltung von Dateien, die physisch nicht auf dem Dateisystem (Datenträger) vorhanden sind. Es wird hauptsächlich verwendet, um Dateien (js, css, image, cshtml ...) in Assemblys einzubetten und sie zur Laufzeit wie physische Dateien zu verwenden.",
+ "ThemingExplanation": "Mit dem Theming-System können Sie Ihre Anwendung & Module Theme-unabhängig entwickeln, indem Sie eine Reihe gemeinsamer Basisbibliotheken und Layouts definieren, die auf dem neuesten Bootstrap-Framework basieren.",
+ "DomainDrivenDesignInfrastructureExplanation": "Eine vollständige Infrastruktur zum Erstellen von mehrschichtigen Anwendungen basierend auf den Domain Driven Design Entwurfsmustern und -prinzipien;",
+ "Specification": "Specification",
+ "Repository": "Repository",
+ "DomainService": "Domain Service",
+ "ValueObject": "Value Object",
+ "ApplicationService": "Application Service",
+ "DataTransferObject": "Data Transfer Object",
+ "AggregateRootEntity": "Aggregate Root, Entity",
+ "AutoRESTAPIsExplanation": "ABP kann Ihre Anwendungsservices gemäß Konvention automatisch als API-Controller konfigurieren.",
+ "DynamicClientProxiesExplanation": "Verwenden Sie Ihre APIs ganz einfach in JavaScript- und C#-Clients.",
+ "DistributedEventBusWithRabbitMQIntegrationExplanation": "Veröffentlichen und konsumieren Sie Distributed Events einfach mithilfe des integrierten Distributed Event Bus mit verfügbarer RabbitMQ-Integration.",
+ "TestInfrastructureExplanation": "Das Framework wurde unter Berücksichtigung von Unit- und Integrationstests entwickelt. Bietet Ihnen Basisklassen, um es einfacher zu machen. Startvorlagen werden mit vorkonfiguriert Tests geliefert.",
+ "AuditLoggingEntityHistoriesExplanation": "Integriertes Audit Logging für geschäftskritische Anwendungen. Audit Logging auf Request-, Service-, und Methodenebene sowie Entity-Historien mit Details auf Property-Ebene.",
+ "EmailSMSAbstractionsWithTemplatingSupportExplanation": "IEmailSender- und ISmsSender-Abstraktionen entkoppeln Ihre Anwendungslogik von der Infrastruktur. Das erweiterte E-Mail-Vorlagensystem ermöglicht das Erstellen und Lokalisieren von E-Mail-Vorlagen und deren einfache Verwendung bei Bedarf.",
+ "LocalizationExplanation": "Das Lokalisierungssystem ermöglicht das Erstellen von Ressourcen in einfachen JSON-Dateien und die Lokalisierung Ihrer Benutzeroberfläche. Es unterstützt erweiterte Szenarien wie Vererbung, Erweiterungen und JavaScript-Integration und ist vollständig mit dem Lokalisierungssystem von AspNet Core kompatibel.",
+ "SettingManagementExplanation": "Definieren Sie Einstellungen für Ihre Anwendung und erhalten Sie zur Laufzeit Werte basierend auf der aktuellen Konfiguration, dem Mandanten und dem Benutzer.",
+ "ExtensionMethodsHelpersExplanation": "Wiederholen Sie sich nicht einmal für triviale Codeteile. Erweiterungen und Helfer für Standardtypen machen Ihren Code viel sauberer und einfacher zu schreiben.",
+ "AspectOrientedProgrammingExplanation": "Bietet eine komfortable Infrastruktur zum Erstellen dynamischer Proxys und zum Implementieren der aspektorientierten Programmierung. Fangen Sie eine Klasse ab und führen Sie Ihren Code vor und nach jeder Methodenausführung aus.",
+ "DependencyInjectionByConventionsExplanation": "Sie müssen Ihre Klassen nicht manuell für die Dependency Injection registrieren. Registriert gängige Servicetypen automatisch gemäß Konvention. Für andere Arten von Services können Sie Schnittstellen und Attribute verwenden, um dies einfacher gestalten und an Ort und Stelle zu ermöglichen.",
+ "DataFilteringExplanation": "Definieren und verwenden Sie Datenfilter, die automatisch angewendet werden, wenn Sie Entities aus der Datenbank abfragen. Soft Delete- und Multimandanten-Filter sind sofort verfügbar, wenn Sie einfache Schnittstellen implementieren.",
+ "PublishEvents": "Events veröffentlichen",
+ "HandleEvents": "Auf Events reagieren",
+ "AndMore": "und mehr...",
+ "Code": "Code",
+ "Result": "Resultat",
+ "SeeTheDocumentForMoreInformation": "Weitere Informationen finden Sie in der {0} -Dokumentation ",
+ "IndexPageHeroSection": "Open Source Webanwendung Framework für ASP.Net Core ",
+ "UiFramework": "UI-Framework",
+ "EmailAddress": "E-Mail-Adresse",
+ "Mobile": "Mobile",
+ "ReactNative": "React Native",
+ "Strong": "Stark",
+ "Complete": "Vollständig",
+ "BasedLayeringModel": "Based Layering Model",
+ "Microservice": "Microservice",
+ "Compatible": "Kompatibel",
+ "MeeTTheABPCommunityInfo": "Unsere Mission ist es, eine Umgebung zu schaffen, in der Entwickler sich gegenseitig mit Beiträgen, Tutorials, Fallstudien usw. helfen und Gleichgesinnte treffen können.",
+ "JoinTheABPCommunityInfo": "Beteiligen Sie sich an einer lebendigen Community und tragen Sie zum ABP Framework bei!",
+ "AllArticles": "Alle Beiträge",
+ "SubmitYourArticle": "Reichen Sie Ihren Beitrag ein",
+ "DynamicClientProxyDocument": "In der Dokumentation zu den Dynamischen Client-Proxies finden Sie Informationen zu JavaScript & C# .",
+ "EmailSMSAbstractionsDocument": "Weitere Informationen finden Sie in den Unterlagen E-Mail-Senden and SMS-Senden .",
+ "CreateProjectWizard": "Dieser Assistent erstellt ein neues Projekt aus der Startvorlage, die ordnungsgemäß konfiguriert ist, um Ihr Projekt zu starten.",
+ "TieredOption": "Erstellt eine Tiered Lösung, bei der Web- und HTTP-API-Ebenen physisch getrennt sind. Wenn diese Option nicht aktiviert ist, wird eine mehrschichtige Lösung erstellt, die weniger komplex und für die meisten Szenarien geeignet ist.",
+ "SeparateIdentityServerOption": "Trennt die Serverseite in zwei Anwendungen: Die erste ist für den Identitätsserver und die zweite für die serverseitige HTTP-API.",
+ "UseslatestPreVersion": "Verwendet die neueste Vorabversion",
+ "ReadTheDocumentation": "Lesen Sie Die Dokumentation ",
+ "Documentation": "Dokumentation",
+ "GettingStartedTutorial": "Erste Schritte Tutorial",
+ "ApplicationDevelopmentTutorial": "Tutorial zur Anwendungsentwicklung",
+ "TheStartupTemplate": "Die Startvorlage",
+ "InstallABPCLIInfo": "ABP CLI ist der schnellste Weg, um eine neue Lösung mit dem ABP-Framework zu starten. Installieren Sie die ABP-CLI über die Eingabeaufforderung:",
+ "DifferentLevelOfNamespaces": "Sie können verschiedene Ebenen von Namespaces verwenden; z.B. BookStore, Acme.BookStore or Acme.Retail.BookStore.",
+ "ABPCLIExamplesInfo": "Der Befehl new erstellt eine mehrschichtige MVC-Anwendung mit Entity Framework Core als Datenbankanbieter. Es gibt jedoch zusätzliche Optionen. Beispiele:",
+ "SeeCliDocumentForMoreInformation": "Weitere Optionen finden Sie im ABP CLI-Dokument oder wählen Sie oben die Registerkarte \"Direkter Download\".",
+ "Optional": "Optional",
+ "LocalFrameworkRef": "Behalten Sie die lokale Projektreferenz für die Framework-Pakete bei."
+ }
+}
\ No newline at end of file
diff --git a/docs/en/CLI.md b/docs/en/CLI.md
index 8713bc9019..12efb3862f 100644
--- a/docs/en/CLI.md
+++ b/docs/en/CLI.md
@@ -159,6 +159,8 @@ abp add-package Volo.Abp.MongoDB
Adds a [multi-package application module](Modules/Index) to a solution by finding all packages of the module, finding related projects in the solution and adding each package to the corresponding project in the solution.
+It can also create a new module for your solution and add it to your solution. See `--new-template` option.
+
> A business module generally consists of several packages (because of layering, different database provider options or other reasons). Using `add-module` command dramatically simplifies adding a module to a solution. However, each module may require some additional configurations which is generally indicated in the documentation of the related module.
Usage
@@ -167,21 +169,29 @@ Usage
abp add-module [options]
````
-Example:
+Examples:
```bash
abp add-module Volo.Blogging
```
-* This example add the Volo.Blogging module to the solution.
+* This example adds the `Volo.Blogging` module to the solution.
+
+```bash
+abp add-module ProductManagement --new-template --add-to-solution-file
+```
+
+* This command creates a fresh new module customized for your solution (named `ProductManagement`) and adds it to your solution.
+
#### Options
* `--solution` or `-s`: Specifies the solution (.sln) file path. If not specified, CLI tries to find a .sln file in the current directory.
* `--skip-db-migrations`: For EF Core database provider, it automatically adds a new code first migration (`Add-Migration`) and updates the database (`Update-Database`) if necessary. Specify this option to skip this operation.
* `-sp` or `--startup-project`: Relative path to the project folder of the startup project. Default value is the current folder.
-* `--with-source-code`: Downloads the source code of the module to your solution folder and uses local project references instead of NuGet/NPM packages.
-* `--add-to-solution-file`: Adds the downloaded module to your solution file, so you will also see the projects of the module when you open the solution on a IDE. (only available when `--with-source-code` is used.)
+* `--new-template`: Creates a fresh new module (customized for your solution) and adds it to your solution.
+* `--with-source-code`: Downloads the source code of the module to your solution folder and uses local project references instead of NuGet/NPM packages. This options is always `True` if `--new-template` is used.
+* `--add-to-solution-file`: Adds the downloaded/created module to your solution file, so you will also see the projects of the module when you open the solution on a IDE. (only available when `--with-source-code` is `True`.)
### get-source
diff --git a/docs/en/Domain-Driven-Design.md b/docs/en/Domain-Driven-Design.md
index bbf22eab13..f3d2699cab 100644
--- a/docs/en/Domain-Driven-Design.md
+++ b/docs/en/Domain-Driven-Design.md
@@ -27,10 +27,10 @@ See the following documents to learn what ABP Framework provides to you to imple
* **Domain Layer**
* [Entities & Aggregate Roots](Entities.md)
- * Value Objects
* [Repositories](Repositories.md)
- * Domain Services
- * Specifications
+ * [Domain Services](Domain-Services.md)
+ * [Value Objects](Value-Objects.md)
+ * [Specifications](Specifications.md)
* **Application Layer**
* [Application Services](Application-Services.md)
* [Data Transfer Objects (DTOs)](Data-Transfer-Objects.md)
diff --git a/docs/en/Domain-Services.md b/docs/en/Domain-Services.md
index 9f4a5ee544..5a4f6393e1 100644
--- a/docs/en/Domain-Services.md
+++ b/docs/en/Domain-Services.md
@@ -1,3 +1,135 @@
# Domain Services
-TODO
\ No newline at end of file
+## Introduction
+
+In a [Domain Driven Design](Domain-Driven-Design.md) (DDD) solution, the core business logic is generally implemented in aggregates ([entities](Entities.md)) and the Domain Services. Creating a Domain Service is especially needed when;
+
+* You implement a core domain logic that depends on some services (like repositories or other external services).
+* The logic you need to implement is related to more than one aggregate/entity, so it doesn't properly fit in any of the aggregates.
+
+## ABP Domain Service Infrastructure
+
+Domain Services are simple, stateless classes. While you don't have to derive from any service or interface, ABP Framework provides some useful base classes and conventions.
+
+### DomainService & IDomainService
+
+Either derive a Domain Service from the `DomainService` base class or directly implement the `IDomainService` interface.
+
+**Example: Create a Domain Service deriving from the `DomainService` base class.**
+
+````csharp
+using Volo.Abp.Domain.Services;
+
+namespace MyProject.Issues
+{
+ public class IssueManager : DomainService
+ {
+
+ }
+}
+````
+
+When you do that;
+
+* ABP Framework automatically registers the class to the Dependency Injection system with a Transient lifetime.
+* You can directly use some common services as base properties, without needing to manually inject (e.g. [ILogger](Logging.md) and [IGuidGenerator](Guid-Generation.md)).
+
+> It is suggested to name a Domain Service with a `Manager` or `Service` suffix. We typically use the `Manager` suffix as used in the sample above.
+
+**Example: Implement the domain logic of assigning an Issue to a User**
+
+````csharp
+public class IssueManager : DomainService
+{
+ private readonly IRepository _issueRepository;
+
+ public IssueManager(IRepository issueRepository)
+ {
+ _issueRepository = issueRepository;
+ }
+
+ public async Task AssignAsync(Issue issue, AppUser user)
+ {
+ var currentIssueCount = await _issueRepository
+ .CountAsync(i => i.AssignedUserId == user.Id);
+
+ //Implementing a core business validation
+ if (currentIssueCount >= 3)
+ {
+ throw new IssueAssignmentException(user.UserName);
+ }
+
+ issue.AssignedUserId = user.Id;
+ }
+}
+````
+
+Issue is an [aggregate root](Entities.md) defined as shown below:
+
+````csharp
+public class Issue : AggregateRoot
+{
+ public Guid? AssignedUserId { get; internal set; }
+
+ //...
+}
+````
+
+* Making the setter `internal` ensures that it can not directly set in the upper layers and forces to always use the `IssueManager` to assign an `Issue` to a `User`.
+
+### Using a Domain Service
+
+A Domain Service is typically used in an [application service](Application-Services.md).
+
+**Example: Use the `IssueManager` to assign an Issue to a User**
+
+````csharp
+using System;
+using System.Threading.Tasks;
+using MyProject.Users;
+using Volo.Abp.Application.Services;
+using Volo.Abp.Domain.Repositories;
+
+namespace MyProject.Issues
+{
+ public class IssueAppService : ApplicationService, IIssueAppService
+ {
+ private readonly IssueManager _issueManager;
+ private readonly IRepository _userRepository;
+ private readonly IRepository _issueRepository;
+
+ public IssueAppService(
+ IssueManager issueManager,
+ IRepository userRepository,
+ IRepository issueRepository)
+ {
+ _issueManager = issueManager;
+ _userRepository = userRepository;
+ _issueRepository = issueRepository;
+ }
+
+ public async Task AssignAsync(Guid id, Guid userId)
+ {
+ var issue = await _issueRepository.GetAsync(id);
+ var user = await _userRepository.GetAsync(userId);
+
+ await _issueManager.AssignAsync(issue, user);
+ await _issueRepository.UpdateAsync(issue);
+ }
+ }
+}
+````
+
+Since the `IssueAppService` is in the Application Layer, it can't directly assign an issue to a user. So, it uses the `IssueManager`.
+
+## Application Services vs Domain Services
+
+While both of [Application Services](Application-Services.md) and Domain Services implement the business rules, there are fundamental logical and formal differences;
+
+* Application Services implement the **use cases** of the application (user interactions in a typical web application), while Domain Services implement the **core, use case independent domain logic**.
+* Application Services get/return [Data Transfer Objects](Data-Transfer-Objects.md), Domain Service methods typically get and return the **domain objects** ([entities](Entities.md), [value objects](Value-Objects.md)).
+* Domain services are typically used by the Application Services or other Domain Services, while Application Services are used by the Presentation Layer or Client Applications.
+
+## Lifetime
+
+Lifetime of Domain Services are [transient](https://docs.abp.io/en/abp/latest/Dependency-Injection) and they are automatically registered to the dependency injection system.
\ No newline at end of file
diff --git a/docs/en/Specifications.md b/docs/en/Specifications.md
index ea4f140e95..036baa749e 100644
--- a/docs/en/Specifications.md
+++ b/docs/en/Specifications.md
@@ -1,3 +1,255 @@
# Specifications
-TODO!
\ No newline at end of file
+Specification Pattern is used to define **named, reusable, combinable and testable filters** for entities and other business objects.
+
+> A Specification is a part of the Domain Layer.
+
+## Installation
+
+> This package is **already installed** when you use the startup templates. So, most of the times you don't need to manually install it.
+
+Install the [Volo.Abp.Specifications](https://abp.io/package-detail/Volo.Abp.Specifications) package to your project. You can use the [ABP CLI](CLI.md) *add-package* command in a command line terminal when the current folder is the root folder of your project (`.csproj`):
+
+````bash
+abp add-package Volo.Abp.Specifications
+````
+
+## Defining the Specifications
+
+Assume that you've a Customer entity as defined below:
+
+````csharp
+using System;
+using Volo.Abp.Domain.Entities;
+
+namespace MyProject
+{
+ public class Customer : AggregateRoot
+ {
+ public string Name { get; set; }
+
+ public byte Age { get; set; }
+
+ public long Balance { get; set; }
+
+ public string Location { get; set; }
+ }
+}
+````
+
+You can create a new Specification class derived from the `Specification`.
+
+**Example: A specification to select the customers with 18+ age:**
+
+````csharp
+using System;
+using System.Linq.Expressions;
+using Volo.Abp.Specifications;
+
+namespace MyProject
+{
+ public class Age18PlusCustomerSpecification : Specification
+ {
+ public override Expression> ToExpression()
+ {
+ return c => c.Age >= 18;
+ }
+ }
+}
+````
+
+You simply define a lambda [Expression](https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/lambda-expressions) to define a specification.
+
+> Instead, you can directly implement the `ISpecification` interface, but the `Specification` base class much simplifies it.
+
+## Using the Specifications
+
+There are two common use cases of the specifications.
+
+### IsSatisfiedBy
+
+`IsSatisfiedBy` method can be used to check if a single object satisfies the specification.
+
+**Example: Throw exception if the customer doesn't satisfy the age specification**
+
+````csharp
+using System;
+using System.Threading.Tasks;
+using Volo.Abp.DependencyInjection;
+
+namespace MyProject
+{
+ public class CustomerService : ITransientDependency
+ {
+ public async Task BuyAlcohol(Customer customer)
+ {
+ if (!new Age18PlusCustomerSpecification().IsSatisfiedBy(customer))
+ {
+ throw new Exception(
+ "This customer doesn't satisfy the Age specification!"
+ );
+ }
+
+ //TODO...
+ }
+ }
+}
+````
+
+### ToExpression & Repositories
+
+`ToExpression()` method can be used to use the specification as Expression. In this way, you can use a specification to **filter entities while querying from the database**.
+
+````csharp
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Volo.Abp.DependencyInjection;
+using Volo.Abp.Domain.Repositories;
+using Volo.Abp.Domain.Services;
+
+namespace MyProject
+{
+ public class CustomerManager : DomainService, ITransientDependency
+ {
+ private readonly IRepository _customerRepository;
+
+ public CustomerManager(IRepository customerRepository)
+ {
+ _customerRepository = customerRepository;
+ }
+
+ public async Task> GetCustomersCanBuyAlcohol()
+ {
+ var query = _customerRepository.Where(
+ new Age18PlusCustomerSpecification().ToExpression()
+ );
+
+ return await AsyncExecuter.ToListAsync(query);
+ }
+ }
+}
+````
+
+> Specifications are correctly translated to SQL/Database queries and executed efficiently in the DBMS side. While it is not related to the Specifications, see the [Repositories](Repositories.md) document if you want to know more about the `AsyncExecuter`.
+
+Actually, using the `ToExpression()` method is not necessary since the specifications are automatically casted to Expressions. This would also work:
+
+````csharp
+var query = _customerRepository.Where(
+ new Age18PlusCustomerSpecification()
+);
+````
+
+## Composing the Specifications
+
+One powerful feature of the specifications is that they are composable with `And`, `Or`, `Not` and `AndNot` extension methods.
+
+Assume that you have another specification as defined below:
+
+```csharp
+using System;
+using System.Linq.Expressions;
+using Volo.Abp.Specifications;
+
+namespace MyProject
+{
+ public class PremiumCustomerSpecification : Specification
+ {
+ public override Expression> ToExpression()
+ {
+ return (customer) => (customer.Balance >= 100000);
+ }
+ }
+}
+```
+
+You can combine the `PremiumCustomerSpecification` with the `Age18PlusCustomerSpecification` to query the count of premium adult customers as shown below:
+
+````csharp
+using System;
+using System.Threading.Tasks;
+using Volo.Abp.DependencyInjection;
+using Volo.Abp.Domain.Repositories;
+using Volo.Abp.Domain.Services;
+using Volo.Abp.Specifications;
+
+namespace MyProject
+{
+ public class CustomerManager : DomainService, ITransientDependency
+ {
+ private readonly IRepository _customerRepository;
+
+ public CustomerManager(IRepository customerRepository)
+ {
+ _customerRepository = customerRepository;
+ }
+
+ public async Task GetAdultPremiumCustomerCountAsync()
+ {
+ return await _customerRepository.CountAsync(
+ new Age18PlusCustomerSpecification()
+ .And(new PremiumCustomerSpecification()).ToExpression()
+ );
+ }
+ }
+}
+````
+
+If you want to make this combination another reusable specification, you can create such a combination specification class deriving from the `AndSpecification`:
+
+````csharp
+using Volo.Abp.Specifications;
+
+namespace MyProject
+{
+ public class AdultPremiumCustomerSpecification : AndSpecification
+ {
+ public AdultPremiumCustomerSpecification()
+ : base(new Age18PlusCustomerSpecification(),
+ new PremiumCustomerSpecification())
+ {
+ }
+ }
+}
+````
+
+Now, you can re-write the `GetAdultPremiumCustomerCountAsync` method as shown below:
+
+````csharp
+public async Task GetAdultPremiumCustomerCountAsync()
+{
+ return await _customerRepository.CountAsync(
+ new AdultPremiumCustomerSpecification()
+ );
+}
+````
+
+> You see the power of the specifications with these samples. If you change the `PremiumCustomerSpecification` later, say change the balance from `100.000` to `200.000`, all the queries and combined specifications will be effected by the change. This is a good way to reduce code duplication!
+
+## Discussions
+
+While the specification pattern is older than C# lambda expressions, it's generally compared to expressions. Some developers may think it's not needed anymore and we can directly pass expressions to a repository or to a domain service as shown below:
+
+````csharp
+var count = await _customerRepository.CountAsync(c => c.Balance > 100000 && c.Age => 18);
+````
+
+Since ABP's [Repository](Repositories.md) supports Expressions, this is a completely valid use. You don't have to define or use any specification in your application and you can go with expressions.
+
+So, what's the point of a specification? Why and when should we consider to use them?
+
+### When To Use?
+
+Some benefits of using specifications:
+
+- **Reusabe**: Imagine that you need the Premium Customer filter in many places in your code base. If you go with expressions and do not create a specification, what happens if you later change the "Premium Customer" definition? Say you want to change the minimum balance from $100,000 to $250,000 and add another condition to be a customer older than 3 years. If you'd used a specification, you just change a single class. If you repeated (copy/pasted) the same expression everywhere, you need to change all of them.
+- **Composable**: You can combine multiple specifications to create new specifications. This is another type of reusability.
+- **Named**: `PremiumCustomerSpecification` better explains the intent rather than a complex expression. So, if you have an expression that is meaningful in your business, consider using specifications.
+- **Testable**: A specification is a separately (and easily) testable object.
+
+### When To Not Use?
+
+- **Non business expressions**: Do not use specifications for non business-related expressions and operations.
+- **Reporting**: If you are just creating a report, do not create specifications, but directly use `IQueryable` & LINQ expressions. You can even use plain SQL, views or another tool for reporting. DDD does not necessarily care about reporting, so the way you query the underlying data store can be important from a performance perspective.
\ No newline at end of file
diff --git a/docs/en/UI/AspNetCore/Client-Side-Package-Management.md b/docs/en/UI/AspNetCore/Client-Side-Package-Management.md
index 77dee7a383..645200a363 100644
--- a/docs/en/UI/AspNetCore/Client-Side-Package-Management.md
+++ b/docs/en/UI/AspNetCore/Client-Side-Package-Management.md
@@ -76,7 +76,8 @@ module.exports = {
"@libs": "./wwwroot/libs"
},
clean: [
- "@libs"
+ "@libs",
+ "!@libs/**/foo.txt"
],
mappings: {
@@ -85,7 +86,7 @@ module.exports = {
````
* **aliases** section defines standard aliases (placeholders) that can be used in the mapping paths. **@node_modules** and **@libs** are required (by the standard packages), you can define your own aliases to reduce duplication.
-* **clean** section is a list of folders to clean before copying the files.
+* **clean** section is a list of folders to clean before copying the files. Glob matching and negation is enabled, so you can fine-tune what to delete and keep. The example above will clean everything inside `./wwwroot/libs`, but keep any `foo.txt` files.
* **mappings** section is a list of mappings of files/folders to copy. This example does not copy any resource itself, but depends on a standard package.
An example mapping configuration is shown below:
diff --git a/docs/en/Value-Objects.md b/docs/en/Value-Objects.md
index 0c6c8d4424..f61e32245b 100644
--- a/docs/en/Value-Objects.md
+++ b/docs/en/Value-Objects.md
@@ -1,3 +1,75 @@
-## Value Objects
+# Value Objects
-TODO
\ No newline at end of file
+> An object that represents a descriptive aspect of the domain with no conceptual identity is called a VALUE OBJECT.
+>
+> (Eric Evans)
+
+Two [Entities](Entities.md) with the same properties but with different `Id`s are considered as different entities. However, Value Objects have no `Id`s and they are considered as equals if they have the same property values.
+
+## The ValueObject Class
+
+`ValueObject` is an abstract class that can be inherited to create a Value Object class.
+
+**Example: An Address class**
+
+````csharp
+public class Address : ValueObject
+{
+ public Guid CityId { get; private set; }
+
+ public string Street { get; private set; }
+
+ public int Number { get; private set; }
+
+ private Address()
+ {
+
+ }
+
+ public Address(
+ Guid cityId,
+ string street,
+ int number)
+ {
+ CityId = cityId;
+ Street = street;
+ Number = number;
+ }
+
+ protected override IEnumerable GetAtomicValues()
+ {
+ yield return Street;
+ yield return CityId;
+ yield return Number;
+ }
+}
+````
+
+* A Value Object class must implement the `GetAtomicValues()` method to return the primitive values.
+
+### ValueEquals
+
+`ValueObject.ValueEquals(...)` method is used to check if two Value Objects are equals.
+
+**Example: Check if two addresses are equals**
+
+````csharp
+Address address1 = ...
+Address address2 = ...
+
+if (address1.ValueEquals(address2)) //Check equality
+{
+ ...
+}
+````
+
+## Best Practices
+
+Here are some best practices when using Value Objects:
+
+- Design a value object as **immutable** (like the Address above) if there is not a good reason for designing it as mutable.
+- The properties that make up a Value Object should form a conceptual whole. For example, CityId, Street and Number shouldn't be separate properties of a Person entity. This also makes the Person entity simpler.
+
+## See Also
+
+* [Entities](Entities.md)
\ No newline at end of file
diff --git a/docs/en/docs-nav.json b/docs/en/docs-nav.json
index 838e41d5be..54004e2e83 100644
--- a/docs/en/docs-nav.json
+++ b/docs/en/docs-nav.json
@@ -344,14 +344,16 @@
"path": "Entities.md"
},
{
- "text": "Value Objects"
+ "text": "Value Objects",
+ "path": "Value-Objects.md"
},
{
"text": "Repositories",
"path": "Repositories.md"
},
{
- "text": "Domain Services"
+ "text": "Domain Services",
+ "path": "Domain-Services.md"
},
{
"text": "Specifications",
diff --git a/framework/Volo.Abp.sln b/framework/Volo.Abp.sln
index 65cac6e7cd..6957eb2baf 100644
--- a/framework/Volo.Abp.sln
+++ b/framework/Volo.Abp.sln
@@ -355,6 +355,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.AspNetCore.Compone
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.Swashbuckle", "src\Volo.Abp.Swashbuckle\Volo.Abp.Swashbuckle.csproj", "{DD9519E0-5A68-48DC-A051-7BF2AC922F3E}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.Json.Tests", "test\Volo.Abp.Json.Tests\Volo.Abp.Json.Tests.csproj", "{00D07595-993C-40FC-BD90-0DD6331414D3}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -1057,6 +1059,10 @@ Global
{DD9519E0-5A68-48DC-A051-7BF2AC922F3E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DD9519E0-5A68-48DC-A051-7BF2AC922F3E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{DD9519E0-5A68-48DC-A051-7BF2AC922F3E}.Release|Any CPU.Build.0 = Release|Any CPU
+ {00D07595-993C-40FC-BD90-0DD6331414D3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {00D07595-993C-40FC-BD90-0DD6331414D3}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {00D07595-993C-40FC-BD90-0DD6331414D3}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {00D07595-993C-40FC-BD90-0DD6331414D3}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -1236,6 +1242,7 @@ Global
{B9D1ADCB-D552-4626-A1F1-78FF72C1E822} = {5DF0E140-0513-4D0D-BE2E-3D4D85CD70E6}
{89840441-5A3A-4FD7-9CB4-E5B52FAEF72A} = {5DF0E140-0513-4D0D-BE2E-3D4D85CD70E6}
{DD9519E0-5A68-48DC-A051-7BF2AC922F3E} = {5DF0E140-0513-4D0D-BE2E-3D4D85CD70E6}
+ {00D07595-993C-40FC-BD90-0DD6331414D3} = {447C8A77-E5F0-4538-8687-7383196D04EA}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {BB97ECF4-9A84-433F-A80B-2A3285BDD1D5}
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/BundleContributer.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/BundleContributer.cs
new file mode 100644
index 0000000000..666a6e24f5
--- /dev/null
+++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/BundleContributer.cs
@@ -0,0 +1,15 @@
+using Volo.Abp.Bundling;
+
+namespace Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme
+{
+ public class BundleContributer : BaseBundleContributer
+ {
+ public override string[] GetStyles()
+ {
+ return new string[]
+ {
+ "_content/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/libs/abp/css/theme.css",
+ };
+ }
+ }
+}
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/FirstLevelNavMenuItem.razor b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/FirstLevelNavMenuItem.razor
index 574a684213..31090ac092 100644
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/FirstLevelNavMenuItem.razor
+++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/FirstLevelNavMenuItem.razor
@@ -15,7 +15,7 @@
{
if (MenuItem.Icon.StartsWith("fa"))
{
-
+
}
}
@MenuItem.DisplayName
@@ -32,7 +32,7 @@ else
{
if (MenuItem.Icon.StartsWith("fa"))
{
-
+
}
}
@MenuItem.DisplayName
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/BundleContributer.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/BundleContributer.cs
new file mode 100644
index 0000000000..f9150e7c2b
--- /dev/null
+++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/BundleContributer.cs
@@ -0,0 +1,17 @@
+using System.Collections.Generic;
+using Volo.Abp.Bundling;
+
+namespace Volo.Abp.AspNetCore.Components.WebAssembly.Theming
+{
+ public class BundleContributer : BaseBundleContributer
+ {
+ public override string[] GetStyles()
+ {
+ return new string[]
+ {
+ "_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/bootstrap/css/bootstrap.min.css",
+ "_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/libs/fontawesome/css/all.css",
+ };
+ }
+ }
+}
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/css/flag-icon.css b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/css/flag-icon.css
deleted file mode 100644
index b54375090b..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/css/flag-icon.css
+++ /dev/null
@@ -1,1568 +0,0 @@
-.flag-icon-background {
- background-size: contain;
- background-position: 50%;
- background-repeat: no-repeat;
-}
-.flag-icon {
- background-size: contain;
- background-position: 50%;
- background-repeat: no-repeat;
- position: relative;
- display: inline-block;
- width: 1.33333333em;
- line-height: 1em;
-}
-.flag-icon:before {
- content: "\00a0";
-}
-.flag-icon.flag-icon-squared {
- width: 1em;
-}
-.flag-icon-ad {
- background-image: url(../flags/4x3/ad.svg);
-}
-.flag-icon-ad.flag-icon-squared {
- background-image: url(../flags/1x1/ad.svg);
-}
-.flag-icon-ae {
- background-image: url(../flags/4x3/ae.svg);
-}
-.flag-icon-ae.flag-icon-squared {
- background-image: url(../flags/1x1/ae.svg);
-}
-.flag-icon-af {
- background-image: url(../flags/4x3/af.svg);
-}
-.flag-icon-af.flag-icon-squared {
- background-image: url(../flags/1x1/af.svg);
-}
-.flag-icon-ag {
- background-image: url(../flags/4x3/ag.svg);
-}
-.flag-icon-ag.flag-icon-squared {
- background-image: url(../flags/1x1/ag.svg);
-}
-.flag-icon-ai {
- background-image: url(../flags/4x3/ai.svg);
-}
-.flag-icon-ai.flag-icon-squared {
- background-image: url(../flags/1x1/ai.svg);
-}
-.flag-icon-al {
- background-image: url(../flags/4x3/al.svg);
-}
-.flag-icon-al.flag-icon-squared {
- background-image: url(../flags/1x1/al.svg);
-}
-.flag-icon-am {
- background-image: url(../flags/4x3/am.svg);
-}
-.flag-icon-am.flag-icon-squared {
- background-image: url(../flags/1x1/am.svg);
-}
-.flag-icon-ao {
- background-image: url(../flags/4x3/ao.svg);
-}
-.flag-icon-ao.flag-icon-squared {
- background-image: url(../flags/1x1/ao.svg);
-}
-.flag-icon-aq {
- background-image: url(../flags/4x3/aq.svg);
-}
-.flag-icon-aq.flag-icon-squared {
- background-image: url(../flags/1x1/aq.svg);
-}
-.flag-icon-ar {
- background-image: url(../flags/4x3/ar.svg);
-}
-.flag-icon-ar.flag-icon-squared {
- background-image: url(../flags/1x1/ar.svg);
-}
-.flag-icon-as {
- background-image: url(../flags/4x3/as.svg);
-}
-.flag-icon-as.flag-icon-squared {
- background-image: url(../flags/1x1/as.svg);
-}
-.flag-icon-at {
- background-image: url(../flags/4x3/at.svg);
-}
-.flag-icon-at.flag-icon-squared {
- background-image: url(../flags/1x1/at.svg);
-}
-.flag-icon-au {
- background-image: url(../flags/4x3/au.svg);
-}
-.flag-icon-au.flag-icon-squared {
- background-image: url(../flags/1x1/au.svg);
-}
-.flag-icon-aw {
- background-image: url(../flags/4x3/aw.svg);
-}
-.flag-icon-aw.flag-icon-squared {
- background-image: url(../flags/1x1/aw.svg);
-}
-.flag-icon-ax {
- background-image: url(../flags/4x3/ax.svg);
-}
-.flag-icon-ax.flag-icon-squared {
- background-image: url(../flags/1x1/ax.svg);
-}
-.flag-icon-az {
- background-image: url(../flags/4x3/az.svg);
-}
-.flag-icon-az.flag-icon-squared {
- background-image: url(../flags/1x1/az.svg);
-}
-.flag-icon-ba {
- background-image: url(../flags/4x3/ba.svg);
-}
-.flag-icon-ba.flag-icon-squared {
- background-image: url(../flags/1x1/ba.svg);
-}
-.flag-icon-bb {
- background-image: url(../flags/4x3/bb.svg);
-}
-.flag-icon-bb.flag-icon-squared {
- background-image: url(../flags/1x1/bb.svg);
-}
-.flag-icon-bd {
- background-image: url(../flags/4x3/bd.svg);
-}
-.flag-icon-bd.flag-icon-squared {
- background-image: url(../flags/1x1/bd.svg);
-}
-.flag-icon-be {
- background-image: url(../flags/4x3/be.svg);
-}
-.flag-icon-be.flag-icon-squared {
- background-image: url(../flags/1x1/be.svg);
-}
-.flag-icon-bf {
- background-image: url(../flags/4x3/bf.svg);
-}
-.flag-icon-bf.flag-icon-squared {
- background-image: url(../flags/1x1/bf.svg);
-}
-.flag-icon-bg {
- background-image: url(../flags/4x3/bg.svg);
-}
-.flag-icon-bg.flag-icon-squared {
- background-image: url(../flags/1x1/bg.svg);
-}
-.flag-icon-bh {
- background-image: url(../flags/4x3/bh.svg);
-}
-.flag-icon-bh.flag-icon-squared {
- background-image: url(../flags/1x1/bh.svg);
-}
-.flag-icon-bi {
- background-image: url(../flags/4x3/bi.svg);
-}
-.flag-icon-bi.flag-icon-squared {
- background-image: url(../flags/1x1/bi.svg);
-}
-.flag-icon-bj {
- background-image: url(../flags/4x3/bj.svg);
-}
-.flag-icon-bj.flag-icon-squared {
- background-image: url(../flags/1x1/bj.svg);
-}
-.flag-icon-bl {
- background-image: url(../flags/4x3/bl.svg);
-}
-.flag-icon-bl.flag-icon-squared {
- background-image: url(../flags/1x1/bl.svg);
-}
-.flag-icon-bm {
- background-image: url(../flags/4x3/bm.svg);
-}
-.flag-icon-bm.flag-icon-squared {
- background-image: url(../flags/1x1/bm.svg);
-}
-.flag-icon-bn {
- background-image: url(../flags/4x3/bn.svg);
-}
-.flag-icon-bn.flag-icon-squared {
- background-image: url(../flags/1x1/bn.svg);
-}
-.flag-icon-bo {
- background-image: url(../flags/4x3/bo.svg);
-}
-.flag-icon-bo.flag-icon-squared {
- background-image: url(../flags/1x1/bo.svg);
-}
-.flag-icon-bq {
- background-image: url(../flags/4x3/bq.svg);
-}
-.flag-icon-bq.flag-icon-squared {
- background-image: url(../flags/1x1/bq.svg);
-}
-.flag-icon-br {
- background-image: url(../flags/4x3/br.svg);
-}
-.flag-icon-br.flag-icon-squared {
- background-image: url(../flags/1x1/br.svg);
-}
-.flag-icon-bs {
- background-image: url(../flags/4x3/bs.svg);
-}
-.flag-icon-bs.flag-icon-squared {
- background-image: url(../flags/1x1/bs.svg);
-}
-.flag-icon-bt {
- background-image: url(../flags/4x3/bt.svg);
-}
-.flag-icon-bt.flag-icon-squared {
- background-image: url(../flags/1x1/bt.svg);
-}
-.flag-icon-bv {
- background-image: url(../flags/4x3/bv.svg);
-}
-.flag-icon-bv.flag-icon-squared {
- background-image: url(../flags/1x1/bv.svg);
-}
-.flag-icon-bw {
- background-image: url(../flags/4x3/bw.svg);
-}
-.flag-icon-bw.flag-icon-squared {
- background-image: url(../flags/1x1/bw.svg);
-}
-.flag-icon-by {
- background-image: url(../flags/4x3/by.svg);
-}
-.flag-icon-by.flag-icon-squared {
- background-image: url(../flags/1x1/by.svg);
-}
-.flag-icon-bz {
- background-image: url(../flags/4x3/bz.svg);
-}
-.flag-icon-bz.flag-icon-squared {
- background-image: url(../flags/1x1/bz.svg);
-}
-.flag-icon-ca {
- background-image: url(../flags/4x3/ca.svg);
-}
-.flag-icon-ca.flag-icon-squared {
- background-image: url(../flags/1x1/ca.svg);
-}
-.flag-icon-cc {
- background-image: url(../flags/4x3/cc.svg);
-}
-.flag-icon-cc.flag-icon-squared {
- background-image: url(../flags/1x1/cc.svg);
-}
-.flag-icon-cd {
- background-image: url(../flags/4x3/cd.svg);
-}
-.flag-icon-cd.flag-icon-squared {
- background-image: url(../flags/1x1/cd.svg);
-}
-.flag-icon-cf {
- background-image: url(../flags/4x3/cf.svg);
-}
-.flag-icon-cf.flag-icon-squared {
- background-image: url(../flags/1x1/cf.svg);
-}
-.flag-icon-cg {
- background-image: url(../flags/4x3/cg.svg);
-}
-.flag-icon-cg.flag-icon-squared {
- background-image: url(../flags/1x1/cg.svg);
-}
-.flag-icon-ch {
- background-image: url(../flags/4x3/ch.svg);
-}
-.flag-icon-ch.flag-icon-squared {
- background-image: url(../flags/1x1/ch.svg);
-}
-.flag-icon-ci {
- background-image: url(../flags/4x3/ci.svg);
-}
-.flag-icon-ci.flag-icon-squared {
- background-image: url(../flags/1x1/ci.svg);
-}
-.flag-icon-ck {
- background-image: url(../flags/4x3/ck.svg);
-}
-.flag-icon-ck.flag-icon-squared {
- background-image: url(../flags/1x1/ck.svg);
-}
-.flag-icon-cl {
- background-image: url(../flags/4x3/cl.svg);
-}
-.flag-icon-cl.flag-icon-squared {
- background-image: url(../flags/1x1/cl.svg);
-}
-.flag-icon-cm {
- background-image: url(../flags/4x3/cm.svg);
-}
-.flag-icon-cm.flag-icon-squared {
- background-image: url(../flags/1x1/cm.svg);
-}
-.flag-icon-cn {
- background-image: url(../flags/4x3/cn.svg);
-}
-.flag-icon-cn.flag-icon-squared {
- background-image: url(../flags/1x1/cn.svg);
-}
-.flag-icon-co {
- background-image: url(../flags/4x3/co.svg);
-}
-.flag-icon-co.flag-icon-squared {
- background-image: url(../flags/1x1/co.svg);
-}
-.flag-icon-cr {
- background-image: url(../flags/4x3/cr.svg);
-}
-.flag-icon-cr.flag-icon-squared {
- background-image: url(../flags/1x1/cr.svg);
-}
-.flag-icon-cu {
- background-image: url(../flags/4x3/cu.svg);
-}
-.flag-icon-cu.flag-icon-squared {
- background-image: url(../flags/1x1/cu.svg);
-}
-.flag-icon-cv {
- background-image: url(../flags/4x3/cv.svg);
-}
-.flag-icon-cv.flag-icon-squared {
- background-image: url(../flags/1x1/cv.svg);
-}
-.flag-icon-cw {
- background-image: url(../flags/4x3/cw.svg);
-}
-.flag-icon-cw.flag-icon-squared {
- background-image: url(../flags/1x1/cw.svg);
-}
-.flag-icon-cx {
- background-image: url(../flags/4x3/cx.svg);
-}
-.flag-icon-cx.flag-icon-squared {
- background-image: url(../flags/1x1/cx.svg);
-}
-.flag-icon-cy {
- background-image: url(../flags/4x3/cy.svg);
-}
-.flag-icon-cy.flag-icon-squared {
- background-image: url(../flags/1x1/cy.svg);
-}
-.flag-icon-cz {
- background-image: url(../flags/4x3/cz.svg);
-}
-.flag-icon-cz.flag-icon-squared {
- background-image: url(../flags/1x1/cz.svg);
-}
-.flag-icon-de {
- background-image: url(../flags/4x3/de.svg);
-}
-.flag-icon-de.flag-icon-squared {
- background-image: url(../flags/1x1/de.svg);
-}
-.flag-icon-dj {
- background-image: url(../flags/4x3/dj.svg);
-}
-.flag-icon-dj.flag-icon-squared {
- background-image: url(../flags/1x1/dj.svg);
-}
-.flag-icon-dk {
- background-image: url(../flags/4x3/dk.svg);
-}
-.flag-icon-dk.flag-icon-squared {
- background-image: url(../flags/1x1/dk.svg);
-}
-.flag-icon-dm {
- background-image: url(../flags/4x3/dm.svg);
-}
-.flag-icon-dm.flag-icon-squared {
- background-image: url(../flags/1x1/dm.svg);
-}
-.flag-icon-do {
- background-image: url(../flags/4x3/do.svg);
-}
-.flag-icon-do.flag-icon-squared {
- background-image: url(../flags/1x1/do.svg);
-}
-.flag-icon-dz {
- background-image: url(../flags/4x3/dz.svg);
-}
-.flag-icon-dz.flag-icon-squared {
- background-image: url(../flags/1x1/dz.svg);
-}
-.flag-icon-ec {
- background-image: url(../flags/4x3/ec.svg);
-}
-.flag-icon-ec.flag-icon-squared {
- background-image: url(../flags/1x1/ec.svg);
-}
-.flag-icon-ee {
- background-image: url(../flags/4x3/ee.svg);
-}
-.flag-icon-ee.flag-icon-squared {
- background-image: url(../flags/1x1/ee.svg);
-}
-.flag-icon-eg {
- background-image: url(../flags/4x3/eg.svg);
-}
-.flag-icon-eg.flag-icon-squared {
- background-image: url(../flags/1x1/eg.svg);
-}
-.flag-icon-eh {
- background-image: url(../flags/4x3/eh.svg);
-}
-.flag-icon-eh.flag-icon-squared {
- background-image: url(../flags/1x1/eh.svg);
-}
-.flag-icon-er {
- background-image: url(../flags/4x3/er.svg);
-}
-.flag-icon-er.flag-icon-squared {
- background-image: url(../flags/1x1/er.svg);
-}
-.flag-icon-es {
- background-image: url(../flags/4x3/es.svg);
-}
-.flag-icon-es.flag-icon-squared {
- background-image: url(../flags/1x1/es.svg);
-}
-.flag-icon-et {
- background-image: url(../flags/4x3/et.svg);
-}
-.flag-icon-et.flag-icon-squared {
- background-image: url(../flags/1x1/et.svg);
-}
-.flag-icon-fi {
- background-image: url(../flags/4x3/fi.svg);
-}
-.flag-icon-fi.flag-icon-squared {
- background-image: url(../flags/1x1/fi.svg);
-}
-.flag-icon-fj {
- background-image: url(../flags/4x3/fj.svg);
-}
-.flag-icon-fj.flag-icon-squared {
- background-image: url(../flags/1x1/fj.svg);
-}
-.flag-icon-fk {
- background-image: url(../flags/4x3/fk.svg);
-}
-.flag-icon-fk.flag-icon-squared {
- background-image: url(../flags/1x1/fk.svg);
-}
-.flag-icon-fm {
- background-image: url(../flags/4x3/fm.svg);
-}
-.flag-icon-fm.flag-icon-squared {
- background-image: url(../flags/1x1/fm.svg);
-}
-.flag-icon-fo {
- background-image: url(../flags/4x3/fo.svg);
-}
-.flag-icon-fo.flag-icon-squared {
- background-image: url(../flags/1x1/fo.svg);
-}
-.flag-icon-fr {
- background-image: url(../flags/4x3/fr.svg);
-}
-.flag-icon-fr.flag-icon-squared {
- background-image: url(../flags/1x1/fr.svg);
-}
-.flag-icon-ga {
- background-image: url(../flags/4x3/ga.svg);
-}
-.flag-icon-ga.flag-icon-squared {
- background-image: url(../flags/1x1/ga.svg);
-}
-.flag-icon-gb {
- background-image: url(../flags/4x3/gb.svg);
-}
-.flag-icon-gb.flag-icon-squared {
- background-image: url(../flags/1x1/gb.svg);
-}
-.flag-icon-gd {
- background-image: url(../flags/4x3/gd.svg);
-}
-.flag-icon-gd.flag-icon-squared {
- background-image: url(../flags/1x1/gd.svg);
-}
-.flag-icon-ge {
- background-image: url(../flags/4x3/ge.svg);
-}
-.flag-icon-ge.flag-icon-squared {
- background-image: url(../flags/1x1/ge.svg);
-}
-.flag-icon-gf {
- background-image: url(../flags/4x3/gf.svg);
-}
-.flag-icon-gf.flag-icon-squared {
- background-image: url(../flags/1x1/gf.svg);
-}
-.flag-icon-gg {
- background-image: url(../flags/4x3/gg.svg);
-}
-.flag-icon-gg.flag-icon-squared {
- background-image: url(../flags/1x1/gg.svg);
-}
-.flag-icon-gh {
- background-image: url(../flags/4x3/gh.svg);
-}
-.flag-icon-gh.flag-icon-squared {
- background-image: url(../flags/1x1/gh.svg);
-}
-.flag-icon-gi {
- background-image: url(../flags/4x3/gi.svg);
-}
-.flag-icon-gi.flag-icon-squared {
- background-image: url(../flags/1x1/gi.svg);
-}
-.flag-icon-gl {
- background-image: url(../flags/4x3/gl.svg);
-}
-.flag-icon-gl.flag-icon-squared {
- background-image: url(../flags/1x1/gl.svg);
-}
-.flag-icon-gm {
- background-image: url(../flags/4x3/gm.svg);
-}
-.flag-icon-gm.flag-icon-squared {
- background-image: url(../flags/1x1/gm.svg);
-}
-.flag-icon-gn {
- background-image: url(../flags/4x3/gn.svg);
-}
-.flag-icon-gn.flag-icon-squared {
- background-image: url(../flags/1x1/gn.svg);
-}
-.flag-icon-gp {
- background-image: url(../flags/4x3/gp.svg);
-}
-.flag-icon-gp.flag-icon-squared {
- background-image: url(../flags/1x1/gp.svg);
-}
-.flag-icon-gq {
- background-image: url(../flags/4x3/gq.svg);
-}
-.flag-icon-gq.flag-icon-squared {
- background-image: url(../flags/1x1/gq.svg);
-}
-.flag-icon-gr {
- background-image: url(../flags/4x3/gr.svg);
-}
-.flag-icon-gr.flag-icon-squared {
- background-image: url(../flags/1x1/gr.svg);
-}
-.flag-icon-gs {
- background-image: url(../flags/4x3/gs.svg);
-}
-.flag-icon-gs.flag-icon-squared {
- background-image: url(../flags/1x1/gs.svg);
-}
-.flag-icon-gt {
- background-image: url(../flags/4x3/gt.svg);
-}
-.flag-icon-gt.flag-icon-squared {
- background-image: url(../flags/1x1/gt.svg);
-}
-.flag-icon-gu {
- background-image: url(../flags/4x3/gu.svg);
-}
-.flag-icon-gu.flag-icon-squared {
- background-image: url(../flags/1x1/gu.svg);
-}
-.flag-icon-gw {
- background-image: url(../flags/4x3/gw.svg);
-}
-.flag-icon-gw.flag-icon-squared {
- background-image: url(../flags/1x1/gw.svg);
-}
-.flag-icon-gy {
- background-image: url(../flags/4x3/gy.svg);
-}
-.flag-icon-gy.flag-icon-squared {
- background-image: url(../flags/1x1/gy.svg);
-}
-.flag-icon-hk {
- background-image: url(../flags/4x3/hk.svg);
-}
-.flag-icon-hk.flag-icon-squared {
- background-image: url(../flags/1x1/hk.svg);
-}
-.flag-icon-hm {
- background-image: url(../flags/4x3/hm.svg);
-}
-.flag-icon-hm.flag-icon-squared {
- background-image: url(../flags/1x1/hm.svg);
-}
-.flag-icon-hn {
- background-image: url(../flags/4x3/hn.svg);
-}
-.flag-icon-hn.flag-icon-squared {
- background-image: url(../flags/1x1/hn.svg);
-}
-.flag-icon-hr {
- background-image: url(../flags/4x3/hr.svg);
-}
-.flag-icon-hr.flag-icon-squared {
- background-image: url(../flags/1x1/hr.svg);
-}
-.flag-icon-ht {
- background-image: url(../flags/4x3/ht.svg);
-}
-.flag-icon-ht.flag-icon-squared {
- background-image: url(../flags/1x1/ht.svg);
-}
-.flag-icon-hu {
- background-image: url(../flags/4x3/hu.svg);
-}
-.flag-icon-hu.flag-icon-squared {
- background-image: url(../flags/1x1/hu.svg);
-}
-.flag-icon-id {
- background-image: url(../flags/4x3/id.svg);
-}
-.flag-icon-id.flag-icon-squared {
- background-image: url(../flags/1x1/id.svg);
-}
-.flag-icon-ie {
- background-image: url(../flags/4x3/ie.svg);
-}
-.flag-icon-ie.flag-icon-squared {
- background-image: url(../flags/1x1/ie.svg);
-}
-.flag-icon-il {
- background-image: url(../flags/4x3/il.svg);
-}
-.flag-icon-il.flag-icon-squared {
- background-image: url(../flags/1x1/il.svg);
-}
-.flag-icon-im {
- background-image: url(../flags/4x3/im.svg);
-}
-.flag-icon-im.flag-icon-squared {
- background-image: url(../flags/1x1/im.svg);
-}
-.flag-icon-in {
- background-image: url(../flags/4x3/in.svg);
-}
-.flag-icon-in.flag-icon-squared {
- background-image: url(../flags/1x1/in.svg);
-}
-.flag-icon-io {
- background-image: url(../flags/4x3/io.svg);
-}
-.flag-icon-io.flag-icon-squared {
- background-image: url(../flags/1x1/io.svg);
-}
-.flag-icon-iq {
- background-image: url(../flags/4x3/iq.svg);
-}
-.flag-icon-iq.flag-icon-squared {
- background-image: url(../flags/1x1/iq.svg);
-}
-.flag-icon-ir {
- background-image: url(../flags/4x3/ir.svg);
-}
-.flag-icon-ir.flag-icon-squared {
- background-image: url(../flags/1x1/ir.svg);
-}
-.flag-icon-is {
- background-image: url(../flags/4x3/is.svg);
-}
-.flag-icon-is.flag-icon-squared {
- background-image: url(../flags/1x1/is.svg);
-}
-.flag-icon-it {
- background-image: url(../flags/4x3/it.svg);
-}
-.flag-icon-it.flag-icon-squared {
- background-image: url(../flags/1x1/it.svg);
-}
-.flag-icon-je {
- background-image: url(../flags/4x3/je.svg);
-}
-.flag-icon-je.flag-icon-squared {
- background-image: url(../flags/1x1/je.svg);
-}
-.flag-icon-jm {
- background-image: url(../flags/4x3/jm.svg);
-}
-.flag-icon-jm.flag-icon-squared {
- background-image: url(../flags/1x1/jm.svg);
-}
-.flag-icon-jo {
- background-image: url(../flags/4x3/jo.svg);
-}
-.flag-icon-jo.flag-icon-squared {
- background-image: url(../flags/1x1/jo.svg);
-}
-.flag-icon-jp {
- background-image: url(../flags/4x3/jp.svg);
-}
-.flag-icon-jp.flag-icon-squared {
- background-image: url(../flags/1x1/jp.svg);
-}
-.flag-icon-ke {
- background-image: url(../flags/4x3/ke.svg);
-}
-.flag-icon-ke.flag-icon-squared {
- background-image: url(../flags/1x1/ke.svg);
-}
-.flag-icon-kg {
- background-image: url(../flags/4x3/kg.svg);
-}
-.flag-icon-kg.flag-icon-squared {
- background-image: url(../flags/1x1/kg.svg);
-}
-.flag-icon-kh {
- background-image: url(../flags/4x3/kh.svg);
-}
-.flag-icon-kh.flag-icon-squared {
- background-image: url(../flags/1x1/kh.svg);
-}
-.flag-icon-ki {
- background-image: url(../flags/4x3/ki.svg);
-}
-.flag-icon-ki.flag-icon-squared {
- background-image: url(../flags/1x1/ki.svg);
-}
-.flag-icon-km {
- background-image: url(../flags/4x3/km.svg);
-}
-.flag-icon-km.flag-icon-squared {
- background-image: url(../flags/1x1/km.svg);
-}
-.flag-icon-kn {
- background-image: url(../flags/4x3/kn.svg);
-}
-.flag-icon-kn.flag-icon-squared {
- background-image: url(../flags/1x1/kn.svg);
-}
-.flag-icon-kp {
- background-image: url(../flags/4x3/kp.svg);
-}
-.flag-icon-kp.flag-icon-squared {
- background-image: url(../flags/1x1/kp.svg);
-}
-.flag-icon-kr {
- background-image: url(../flags/4x3/kr.svg);
-}
-.flag-icon-kr.flag-icon-squared {
- background-image: url(../flags/1x1/kr.svg);
-}
-.flag-icon-kw {
- background-image: url(../flags/4x3/kw.svg);
-}
-.flag-icon-kw.flag-icon-squared {
- background-image: url(../flags/1x1/kw.svg);
-}
-.flag-icon-ky {
- background-image: url(../flags/4x3/ky.svg);
-}
-.flag-icon-ky.flag-icon-squared {
- background-image: url(../flags/1x1/ky.svg);
-}
-.flag-icon-kz {
- background-image: url(../flags/4x3/kz.svg);
-}
-.flag-icon-kz.flag-icon-squared {
- background-image: url(../flags/1x1/kz.svg);
-}
-.flag-icon-la {
- background-image: url(../flags/4x3/la.svg);
-}
-.flag-icon-la.flag-icon-squared {
- background-image: url(../flags/1x1/la.svg);
-}
-.flag-icon-lb {
- background-image: url(../flags/4x3/lb.svg);
-}
-.flag-icon-lb.flag-icon-squared {
- background-image: url(../flags/1x1/lb.svg);
-}
-.flag-icon-lc {
- background-image: url(../flags/4x3/lc.svg);
-}
-.flag-icon-lc.flag-icon-squared {
- background-image: url(../flags/1x1/lc.svg);
-}
-.flag-icon-li {
- background-image: url(../flags/4x3/li.svg);
-}
-.flag-icon-li.flag-icon-squared {
- background-image: url(../flags/1x1/li.svg);
-}
-.flag-icon-lk {
- background-image: url(../flags/4x3/lk.svg);
-}
-.flag-icon-lk.flag-icon-squared {
- background-image: url(../flags/1x1/lk.svg);
-}
-.flag-icon-lr {
- background-image: url(../flags/4x3/lr.svg);
-}
-.flag-icon-lr.flag-icon-squared {
- background-image: url(../flags/1x1/lr.svg);
-}
-.flag-icon-ls {
- background-image: url(../flags/4x3/ls.svg);
-}
-.flag-icon-ls.flag-icon-squared {
- background-image: url(../flags/1x1/ls.svg);
-}
-.flag-icon-lt {
- background-image: url(../flags/4x3/lt.svg);
-}
-.flag-icon-lt.flag-icon-squared {
- background-image: url(../flags/1x1/lt.svg);
-}
-.flag-icon-lu {
- background-image: url(../flags/4x3/lu.svg);
-}
-.flag-icon-lu.flag-icon-squared {
- background-image: url(../flags/1x1/lu.svg);
-}
-.flag-icon-lv {
- background-image: url(../flags/4x3/lv.svg);
-}
-.flag-icon-lv.flag-icon-squared {
- background-image: url(../flags/1x1/lv.svg);
-}
-.flag-icon-ly {
- background-image: url(../flags/4x3/ly.svg);
-}
-.flag-icon-ly.flag-icon-squared {
- background-image: url(../flags/1x1/ly.svg);
-}
-.flag-icon-ma {
- background-image: url(../flags/4x3/ma.svg);
-}
-.flag-icon-ma.flag-icon-squared {
- background-image: url(../flags/1x1/ma.svg);
-}
-.flag-icon-mc {
- background-image: url(../flags/4x3/mc.svg);
-}
-.flag-icon-mc.flag-icon-squared {
- background-image: url(../flags/1x1/mc.svg);
-}
-.flag-icon-md {
- background-image: url(../flags/4x3/md.svg);
-}
-.flag-icon-md.flag-icon-squared {
- background-image: url(../flags/1x1/md.svg);
-}
-.flag-icon-me {
- background-image: url(../flags/4x3/me.svg);
-}
-.flag-icon-me.flag-icon-squared {
- background-image: url(../flags/1x1/me.svg);
-}
-.flag-icon-mf {
- background-image: url(../flags/4x3/mf.svg);
-}
-.flag-icon-mf.flag-icon-squared {
- background-image: url(../flags/1x1/mf.svg);
-}
-.flag-icon-mg {
- background-image: url(../flags/4x3/mg.svg);
-}
-.flag-icon-mg.flag-icon-squared {
- background-image: url(../flags/1x1/mg.svg);
-}
-.flag-icon-mh {
- background-image: url(../flags/4x3/mh.svg);
-}
-.flag-icon-mh.flag-icon-squared {
- background-image: url(../flags/1x1/mh.svg);
-}
-.flag-icon-mk {
- background-image: url(../flags/4x3/mk.svg);
-}
-.flag-icon-mk.flag-icon-squared {
- background-image: url(../flags/1x1/mk.svg);
-}
-.flag-icon-ml {
- background-image: url(../flags/4x3/ml.svg);
-}
-.flag-icon-ml.flag-icon-squared {
- background-image: url(../flags/1x1/ml.svg);
-}
-.flag-icon-mm {
- background-image: url(../flags/4x3/mm.svg);
-}
-.flag-icon-mm.flag-icon-squared {
- background-image: url(../flags/1x1/mm.svg);
-}
-.flag-icon-mn {
- background-image: url(../flags/4x3/mn.svg);
-}
-.flag-icon-mn.flag-icon-squared {
- background-image: url(../flags/1x1/mn.svg);
-}
-.flag-icon-mo {
- background-image: url(../flags/4x3/mo.svg);
-}
-.flag-icon-mo.flag-icon-squared {
- background-image: url(../flags/1x1/mo.svg);
-}
-.flag-icon-mp {
- background-image: url(../flags/4x3/mp.svg);
-}
-.flag-icon-mp.flag-icon-squared {
- background-image: url(../flags/1x1/mp.svg);
-}
-.flag-icon-mq {
- background-image: url(../flags/4x3/mq.svg);
-}
-.flag-icon-mq.flag-icon-squared {
- background-image: url(../flags/1x1/mq.svg);
-}
-.flag-icon-mr {
- background-image: url(../flags/4x3/mr.svg);
-}
-.flag-icon-mr.flag-icon-squared {
- background-image: url(../flags/1x1/mr.svg);
-}
-.flag-icon-ms {
- background-image: url(../flags/4x3/ms.svg);
-}
-.flag-icon-ms.flag-icon-squared {
- background-image: url(../flags/1x1/ms.svg);
-}
-.flag-icon-mt {
- background-image: url(../flags/4x3/mt.svg);
-}
-.flag-icon-mt.flag-icon-squared {
- background-image: url(../flags/1x1/mt.svg);
-}
-.flag-icon-mu {
- background-image: url(../flags/4x3/mu.svg);
-}
-.flag-icon-mu.flag-icon-squared {
- background-image: url(../flags/1x1/mu.svg);
-}
-.flag-icon-mv {
- background-image: url(../flags/4x3/mv.svg);
-}
-.flag-icon-mv.flag-icon-squared {
- background-image: url(../flags/1x1/mv.svg);
-}
-.flag-icon-mw {
- background-image: url(../flags/4x3/mw.svg);
-}
-.flag-icon-mw.flag-icon-squared {
- background-image: url(../flags/1x1/mw.svg);
-}
-.flag-icon-mx {
- background-image: url(../flags/4x3/mx.svg);
-}
-.flag-icon-mx.flag-icon-squared {
- background-image: url(../flags/1x1/mx.svg);
-}
-.flag-icon-my {
- background-image: url(../flags/4x3/my.svg);
-}
-.flag-icon-my.flag-icon-squared {
- background-image: url(../flags/1x1/my.svg);
-}
-.flag-icon-mz {
- background-image: url(../flags/4x3/mz.svg);
-}
-.flag-icon-mz.flag-icon-squared {
- background-image: url(../flags/1x1/mz.svg);
-}
-.flag-icon-na {
- background-image: url(../flags/4x3/na.svg);
-}
-.flag-icon-na.flag-icon-squared {
- background-image: url(../flags/1x1/na.svg);
-}
-.flag-icon-nc {
- background-image: url(../flags/4x3/nc.svg);
-}
-.flag-icon-nc.flag-icon-squared {
- background-image: url(../flags/1x1/nc.svg);
-}
-.flag-icon-ne {
- background-image: url(../flags/4x3/ne.svg);
-}
-.flag-icon-ne.flag-icon-squared {
- background-image: url(../flags/1x1/ne.svg);
-}
-.flag-icon-nf {
- background-image: url(../flags/4x3/nf.svg);
-}
-.flag-icon-nf.flag-icon-squared {
- background-image: url(../flags/1x1/nf.svg);
-}
-.flag-icon-ng {
- background-image: url(../flags/4x3/ng.svg);
-}
-.flag-icon-ng.flag-icon-squared {
- background-image: url(../flags/1x1/ng.svg);
-}
-.flag-icon-ni {
- background-image: url(../flags/4x3/ni.svg);
-}
-.flag-icon-ni.flag-icon-squared {
- background-image: url(../flags/1x1/ni.svg);
-}
-.flag-icon-nl {
- background-image: url(../flags/4x3/nl.svg);
-}
-.flag-icon-nl.flag-icon-squared {
- background-image: url(../flags/1x1/nl.svg);
-}
-.flag-icon-no {
- background-image: url(../flags/4x3/no.svg);
-}
-.flag-icon-no.flag-icon-squared {
- background-image: url(../flags/1x1/no.svg);
-}
-.flag-icon-np {
- background-image: url(../flags/4x3/np.svg);
-}
-.flag-icon-np.flag-icon-squared {
- background-image: url(../flags/1x1/np.svg);
-}
-.flag-icon-nr {
- background-image: url(../flags/4x3/nr.svg);
-}
-.flag-icon-nr.flag-icon-squared {
- background-image: url(../flags/1x1/nr.svg);
-}
-.flag-icon-nu {
- background-image: url(../flags/4x3/nu.svg);
-}
-.flag-icon-nu.flag-icon-squared {
- background-image: url(../flags/1x1/nu.svg);
-}
-.flag-icon-nz {
- background-image: url(../flags/4x3/nz.svg);
-}
-.flag-icon-nz.flag-icon-squared {
- background-image: url(../flags/1x1/nz.svg);
-}
-.flag-icon-om {
- background-image: url(../flags/4x3/om.svg);
-}
-.flag-icon-om.flag-icon-squared {
- background-image: url(../flags/1x1/om.svg);
-}
-.flag-icon-pa {
- background-image: url(../flags/4x3/pa.svg);
-}
-.flag-icon-pa.flag-icon-squared {
- background-image: url(../flags/1x1/pa.svg);
-}
-.flag-icon-pe {
- background-image: url(../flags/4x3/pe.svg);
-}
-.flag-icon-pe.flag-icon-squared {
- background-image: url(../flags/1x1/pe.svg);
-}
-.flag-icon-pf {
- background-image: url(../flags/4x3/pf.svg);
-}
-.flag-icon-pf.flag-icon-squared {
- background-image: url(../flags/1x1/pf.svg);
-}
-.flag-icon-pg {
- background-image: url(../flags/4x3/pg.svg);
-}
-.flag-icon-pg.flag-icon-squared {
- background-image: url(../flags/1x1/pg.svg);
-}
-.flag-icon-ph {
- background-image: url(../flags/4x3/ph.svg);
-}
-.flag-icon-ph.flag-icon-squared {
- background-image: url(../flags/1x1/ph.svg);
-}
-.flag-icon-pk {
- background-image: url(../flags/4x3/pk.svg);
-}
-.flag-icon-pk.flag-icon-squared {
- background-image: url(../flags/1x1/pk.svg);
-}
-.flag-icon-pl {
- background-image: url(../flags/4x3/pl.svg);
-}
-.flag-icon-pl.flag-icon-squared {
- background-image: url(../flags/1x1/pl.svg);
-}
-.flag-icon-pm {
- background-image: url(../flags/4x3/pm.svg);
-}
-.flag-icon-pm.flag-icon-squared {
- background-image: url(../flags/1x1/pm.svg);
-}
-.flag-icon-pn {
- background-image: url(../flags/4x3/pn.svg);
-}
-.flag-icon-pn.flag-icon-squared {
- background-image: url(../flags/1x1/pn.svg);
-}
-.flag-icon-pr {
- background-image: url(../flags/4x3/pr.svg);
-}
-.flag-icon-pr.flag-icon-squared {
- background-image: url(../flags/1x1/pr.svg);
-}
-.flag-icon-ps {
- background-image: url(../flags/4x3/ps.svg);
-}
-.flag-icon-ps.flag-icon-squared {
- background-image: url(../flags/1x1/ps.svg);
-}
-.flag-icon-pt {
- background-image: url(../flags/4x3/pt.svg);
-}
-.flag-icon-pt.flag-icon-squared {
- background-image: url(../flags/1x1/pt.svg);
-}
-.flag-icon-pw {
- background-image: url(../flags/4x3/pw.svg);
-}
-.flag-icon-pw.flag-icon-squared {
- background-image: url(../flags/1x1/pw.svg);
-}
-.flag-icon-py {
- background-image: url(../flags/4x3/py.svg);
-}
-.flag-icon-py.flag-icon-squared {
- background-image: url(../flags/1x1/py.svg);
-}
-.flag-icon-qa {
- background-image: url(../flags/4x3/qa.svg);
-}
-.flag-icon-qa.flag-icon-squared {
- background-image: url(../flags/1x1/qa.svg);
-}
-.flag-icon-re {
- background-image: url(../flags/4x3/re.svg);
-}
-.flag-icon-re.flag-icon-squared {
- background-image: url(../flags/1x1/re.svg);
-}
-.flag-icon-ro {
- background-image: url(../flags/4x3/ro.svg);
-}
-.flag-icon-ro.flag-icon-squared {
- background-image: url(../flags/1x1/ro.svg);
-}
-.flag-icon-rs {
- background-image: url(../flags/4x3/rs.svg);
-}
-.flag-icon-rs.flag-icon-squared {
- background-image: url(../flags/1x1/rs.svg);
-}
-.flag-icon-ru {
- background-image: url(../flags/4x3/ru.svg);
-}
-.flag-icon-ru.flag-icon-squared {
- background-image: url(../flags/1x1/ru.svg);
-}
-.flag-icon-rw {
- background-image: url(../flags/4x3/rw.svg);
-}
-.flag-icon-rw.flag-icon-squared {
- background-image: url(../flags/1x1/rw.svg);
-}
-.flag-icon-sa {
- background-image: url(../flags/4x3/sa.svg);
-}
-.flag-icon-sa.flag-icon-squared {
- background-image: url(../flags/1x1/sa.svg);
-}
-.flag-icon-sb {
- background-image: url(../flags/4x3/sb.svg);
-}
-.flag-icon-sb.flag-icon-squared {
- background-image: url(../flags/1x1/sb.svg);
-}
-.flag-icon-sc {
- background-image: url(../flags/4x3/sc.svg);
-}
-.flag-icon-sc.flag-icon-squared {
- background-image: url(../flags/1x1/sc.svg);
-}
-.flag-icon-sd {
- background-image: url(../flags/4x3/sd.svg);
-}
-.flag-icon-sd.flag-icon-squared {
- background-image: url(../flags/1x1/sd.svg);
-}
-.flag-icon-se {
- background-image: url(../flags/4x3/se.svg);
-}
-.flag-icon-se.flag-icon-squared {
- background-image: url(../flags/1x1/se.svg);
-}
-.flag-icon-sg {
- background-image: url(../flags/4x3/sg.svg);
-}
-.flag-icon-sg.flag-icon-squared {
- background-image: url(../flags/1x1/sg.svg);
-}
-.flag-icon-sh {
- background-image: url(../flags/4x3/sh.svg);
-}
-.flag-icon-sh.flag-icon-squared {
- background-image: url(../flags/1x1/sh.svg);
-}
-.flag-icon-si {
- background-image: url(../flags/4x3/si.svg);
-}
-.flag-icon-si.flag-icon-squared {
- background-image: url(../flags/1x1/si.svg);
-}
-.flag-icon-sj {
- background-image: url(../flags/4x3/sj.svg);
-}
-.flag-icon-sj.flag-icon-squared {
- background-image: url(../flags/1x1/sj.svg);
-}
-.flag-icon-sk {
- background-image: url(../flags/4x3/sk.svg);
-}
-.flag-icon-sk.flag-icon-squared {
- background-image: url(../flags/1x1/sk.svg);
-}
-.flag-icon-sl {
- background-image: url(../flags/4x3/sl.svg);
-}
-.flag-icon-sl.flag-icon-squared {
- background-image: url(../flags/1x1/sl.svg);
-}
-.flag-icon-sm {
- background-image: url(../flags/4x3/sm.svg);
-}
-.flag-icon-sm.flag-icon-squared {
- background-image: url(../flags/1x1/sm.svg);
-}
-.flag-icon-sn {
- background-image: url(../flags/4x3/sn.svg);
-}
-.flag-icon-sn.flag-icon-squared {
- background-image: url(../flags/1x1/sn.svg);
-}
-.flag-icon-so {
- background-image: url(../flags/4x3/so.svg);
-}
-.flag-icon-so.flag-icon-squared {
- background-image: url(../flags/1x1/so.svg);
-}
-.flag-icon-sr {
- background-image: url(../flags/4x3/sr.svg);
-}
-.flag-icon-sr.flag-icon-squared {
- background-image: url(../flags/1x1/sr.svg);
-}
-.flag-icon-ss {
- background-image: url(../flags/4x3/ss.svg);
-}
-.flag-icon-ss.flag-icon-squared {
- background-image: url(../flags/1x1/ss.svg);
-}
-.flag-icon-st {
- background-image: url(../flags/4x3/st.svg);
-}
-.flag-icon-st.flag-icon-squared {
- background-image: url(../flags/1x1/st.svg);
-}
-.flag-icon-sv {
- background-image: url(../flags/4x3/sv.svg);
-}
-.flag-icon-sv.flag-icon-squared {
- background-image: url(../flags/1x1/sv.svg);
-}
-.flag-icon-sx {
- background-image: url(../flags/4x3/sx.svg);
-}
-.flag-icon-sx.flag-icon-squared {
- background-image: url(../flags/1x1/sx.svg);
-}
-.flag-icon-sy {
- background-image: url(../flags/4x3/sy.svg);
-}
-.flag-icon-sy.flag-icon-squared {
- background-image: url(../flags/1x1/sy.svg);
-}
-.flag-icon-sz {
- background-image: url(../flags/4x3/sz.svg);
-}
-.flag-icon-sz.flag-icon-squared {
- background-image: url(../flags/1x1/sz.svg);
-}
-.flag-icon-tc {
- background-image: url(../flags/4x3/tc.svg);
-}
-.flag-icon-tc.flag-icon-squared {
- background-image: url(../flags/1x1/tc.svg);
-}
-.flag-icon-td {
- background-image: url(../flags/4x3/td.svg);
-}
-.flag-icon-td.flag-icon-squared {
- background-image: url(../flags/1x1/td.svg);
-}
-.flag-icon-tf {
- background-image: url(../flags/4x3/tf.svg);
-}
-.flag-icon-tf.flag-icon-squared {
- background-image: url(../flags/1x1/tf.svg);
-}
-.flag-icon-tg {
- background-image: url(../flags/4x3/tg.svg);
-}
-.flag-icon-tg.flag-icon-squared {
- background-image: url(../flags/1x1/tg.svg);
-}
-.flag-icon-th {
- background-image: url(../flags/4x3/th.svg);
-}
-.flag-icon-th.flag-icon-squared {
- background-image: url(../flags/1x1/th.svg);
-}
-.flag-icon-tj {
- background-image: url(../flags/4x3/tj.svg);
-}
-.flag-icon-tj.flag-icon-squared {
- background-image: url(../flags/1x1/tj.svg);
-}
-.flag-icon-tk {
- background-image: url(../flags/4x3/tk.svg);
-}
-.flag-icon-tk.flag-icon-squared {
- background-image: url(../flags/1x1/tk.svg);
-}
-.flag-icon-tl {
- background-image: url(../flags/4x3/tl.svg);
-}
-.flag-icon-tl.flag-icon-squared {
- background-image: url(../flags/1x1/tl.svg);
-}
-.flag-icon-tm {
- background-image: url(../flags/4x3/tm.svg);
-}
-.flag-icon-tm.flag-icon-squared {
- background-image: url(../flags/1x1/tm.svg);
-}
-.flag-icon-tn {
- background-image: url(../flags/4x3/tn.svg);
-}
-.flag-icon-tn.flag-icon-squared {
- background-image: url(../flags/1x1/tn.svg);
-}
-.flag-icon-to {
- background-image: url(../flags/4x3/to.svg);
-}
-.flag-icon-to.flag-icon-squared {
- background-image: url(../flags/1x1/to.svg);
-}
-.flag-icon-tr {
- background-image: url(../flags/4x3/tr.svg);
-}
-.flag-icon-tr.flag-icon-squared {
- background-image: url(../flags/1x1/tr.svg);
-}
-.flag-icon-tt {
- background-image: url(../flags/4x3/tt.svg);
-}
-.flag-icon-tt.flag-icon-squared {
- background-image: url(../flags/1x1/tt.svg);
-}
-.flag-icon-tv {
- background-image: url(../flags/4x3/tv.svg);
-}
-.flag-icon-tv.flag-icon-squared {
- background-image: url(../flags/1x1/tv.svg);
-}
-.flag-icon-tw {
- background-image: url(../flags/4x3/tw.svg);
-}
-.flag-icon-tw.flag-icon-squared {
- background-image: url(../flags/1x1/tw.svg);
-}
-.flag-icon-tz {
- background-image: url(../flags/4x3/tz.svg);
-}
-.flag-icon-tz.flag-icon-squared {
- background-image: url(../flags/1x1/tz.svg);
-}
-.flag-icon-ua {
- background-image: url(../flags/4x3/ua.svg);
-}
-.flag-icon-ua.flag-icon-squared {
- background-image: url(../flags/1x1/ua.svg);
-}
-.flag-icon-ug {
- background-image: url(../flags/4x3/ug.svg);
-}
-.flag-icon-ug.flag-icon-squared {
- background-image: url(../flags/1x1/ug.svg);
-}
-.flag-icon-um {
- background-image: url(../flags/4x3/um.svg);
-}
-.flag-icon-um.flag-icon-squared {
- background-image: url(../flags/1x1/um.svg);
-}
-.flag-icon-us {
- background-image: url(../flags/4x3/us.svg);
-}
-.flag-icon-us.flag-icon-squared {
- background-image: url(../flags/1x1/us.svg);
-}
-.flag-icon-uy {
- background-image: url(../flags/4x3/uy.svg);
-}
-.flag-icon-uy.flag-icon-squared {
- background-image: url(../flags/1x1/uy.svg);
-}
-.flag-icon-uz {
- background-image: url(../flags/4x3/uz.svg);
-}
-.flag-icon-uz.flag-icon-squared {
- background-image: url(../flags/1x1/uz.svg);
-}
-.flag-icon-va {
- background-image: url(../flags/4x3/va.svg);
-}
-.flag-icon-va.flag-icon-squared {
- background-image: url(../flags/1x1/va.svg);
-}
-.flag-icon-vc {
- background-image: url(../flags/4x3/vc.svg);
-}
-.flag-icon-vc.flag-icon-squared {
- background-image: url(../flags/1x1/vc.svg);
-}
-.flag-icon-ve {
- background-image: url(../flags/4x3/ve.svg);
-}
-.flag-icon-ve.flag-icon-squared {
- background-image: url(../flags/1x1/ve.svg);
-}
-.flag-icon-vg {
- background-image: url(../flags/4x3/vg.svg);
-}
-.flag-icon-vg.flag-icon-squared {
- background-image: url(../flags/1x1/vg.svg);
-}
-.flag-icon-vi {
- background-image: url(../flags/4x3/vi.svg);
-}
-.flag-icon-vi.flag-icon-squared {
- background-image: url(../flags/1x1/vi.svg);
-}
-.flag-icon-vn {
- background-image: url(../flags/4x3/vn.svg);
-}
-.flag-icon-vn.flag-icon-squared {
- background-image: url(../flags/1x1/vn.svg);
-}
-.flag-icon-vu {
- background-image: url(../flags/4x3/vu.svg);
-}
-.flag-icon-vu.flag-icon-squared {
- background-image: url(../flags/1x1/vu.svg);
-}
-.flag-icon-wf {
- background-image: url(../flags/4x3/wf.svg);
-}
-.flag-icon-wf.flag-icon-squared {
- background-image: url(../flags/1x1/wf.svg);
-}
-.flag-icon-ws {
- background-image: url(../flags/4x3/ws.svg);
-}
-.flag-icon-ws.flag-icon-squared {
- background-image: url(../flags/1x1/ws.svg);
-}
-.flag-icon-ye {
- background-image: url(../flags/4x3/ye.svg);
-}
-.flag-icon-ye.flag-icon-squared {
- background-image: url(../flags/1x1/ye.svg);
-}
-.flag-icon-yt {
- background-image: url(../flags/4x3/yt.svg);
-}
-.flag-icon-yt.flag-icon-squared {
- background-image: url(../flags/1x1/yt.svg);
-}
-.flag-icon-za {
- background-image: url(../flags/4x3/za.svg);
-}
-.flag-icon-za.flag-icon-squared {
- background-image: url(../flags/1x1/za.svg);
-}
-.flag-icon-zm {
- background-image: url(../flags/4x3/zm.svg);
-}
-.flag-icon-zm.flag-icon-squared {
- background-image: url(../flags/1x1/zm.svg);
-}
-.flag-icon-zw {
- background-image: url(../flags/4x3/zw.svg);
-}
-.flag-icon-zw.flag-icon-squared {
- background-image: url(../flags/1x1/zw.svg);
-}
-.flag-icon-es-ca {
- background-image: url(../flags/4x3/es-ca.svg);
-}
-.flag-icon-es-ca.flag-icon-squared {
- background-image: url(../flags/1x1/es-ca.svg);
-}
-.flag-icon-es-ga {
- background-image: url(../flags/4x3/es-ga.svg);
-}
-.flag-icon-es-ga.flag-icon-squared {
- background-image: url(../flags/1x1/es-ga.svg);
-}
-.flag-icon-eu {
- background-image: url(../flags/4x3/eu.svg);
-}
-.flag-icon-eu.flag-icon-squared {
- background-image: url(../flags/1x1/eu.svg);
-}
-.flag-icon-gb-eng {
- background-image: url(../flags/4x3/gb-eng.svg);
-}
-.flag-icon-gb-eng.flag-icon-squared {
- background-image: url(../flags/1x1/gb-eng.svg);
-}
-.flag-icon-gb-nir {
- background-image: url(../flags/4x3/gb-nir.svg);
-}
-.flag-icon-gb-nir.flag-icon-squared {
- background-image: url(../flags/1x1/gb-nir.svg);
-}
-.flag-icon-gb-sct {
- background-image: url(../flags/4x3/gb-sct.svg);
-}
-.flag-icon-gb-sct.flag-icon-squared {
- background-image: url(../flags/1x1/gb-sct.svg);
-}
-.flag-icon-gb-wls {
- background-image: url(../flags/4x3/gb-wls.svg);
-}
-.flag-icon-gb-wls.flag-icon-squared {
- background-image: url(../flags/1x1/gb-wls.svg);
-}
-.flag-icon-un {
- background-image: url(../flags/4x3/un.svg);
-}
-.flag-icon-un.flag-icon-squared {
- background-image: url(../flags/1x1/un.svg);
-}
-.flag-icon-xk {
- background-image: url(../flags/4x3/xk.svg);
-}
-.flag-icon-xk.flag-icon-squared {
- background-image: url(../flags/1x1/xk.svg);
-}
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/css/flag-icon.min.css b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/css/flag-icon.min.css
deleted file mode 100644
index 3d049b3953..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/css/flag-icon.min.css
+++ /dev/null
@@ -1 +0,0 @@
-.flag-icon-background{background-size:contain;background-position:50%;background-repeat:no-repeat}.flag-icon{background-size:contain;background-position:50%;background-repeat:no-repeat;position:relative;display:inline-block;width:1.33333333em;line-height:1em}.flag-icon:before{content:'\00a0'}.flag-icon.flag-icon-squared{width:1em}.flag-icon-ad{background-image:url(../flags/4x3/ad.svg)}.flag-icon-ad.flag-icon-squared{background-image:url(../flags/1x1/ad.svg)}.flag-icon-ae{background-image:url(../flags/4x3/ae.svg)}.flag-icon-ae.flag-icon-squared{background-image:url(../flags/1x1/ae.svg)}.flag-icon-af{background-image:url(../flags/4x3/af.svg)}.flag-icon-af.flag-icon-squared{background-image:url(../flags/1x1/af.svg)}.flag-icon-ag{background-image:url(../flags/4x3/ag.svg)}.flag-icon-ag.flag-icon-squared{background-image:url(../flags/1x1/ag.svg)}.flag-icon-ai{background-image:url(../flags/4x3/ai.svg)}.flag-icon-ai.flag-icon-squared{background-image:url(../flags/1x1/ai.svg)}.flag-icon-al{background-image:url(../flags/4x3/al.svg)}.flag-icon-al.flag-icon-squared{background-image:url(../flags/1x1/al.svg)}.flag-icon-am{background-image:url(../flags/4x3/am.svg)}.flag-icon-am.flag-icon-squared{background-image:url(../flags/1x1/am.svg)}.flag-icon-ao{background-image:url(../flags/4x3/ao.svg)}.flag-icon-ao.flag-icon-squared{background-image:url(../flags/1x1/ao.svg)}.flag-icon-aq{background-image:url(../flags/4x3/aq.svg)}.flag-icon-aq.flag-icon-squared{background-image:url(../flags/1x1/aq.svg)}.flag-icon-ar{background-image:url(../flags/4x3/ar.svg)}.flag-icon-ar.flag-icon-squared{background-image:url(../flags/1x1/ar.svg)}.flag-icon-as{background-image:url(../flags/4x3/as.svg)}.flag-icon-as.flag-icon-squared{background-image:url(../flags/1x1/as.svg)}.flag-icon-at{background-image:url(../flags/4x3/at.svg)}.flag-icon-at.flag-icon-squared{background-image:url(../flags/1x1/at.svg)}.flag-icon-au{background-image:url(../flags/4x3/au.svg)}.flag-icon-au.flag-icon-squared{background-image:url(../flags/1x1/au.svg)}.flag-icon-aw{background-image:url(../flags/4x3/aw.svg)}.flag-icon-aw.flag-icon-squared{background-image:url(../flags/1x1/aw.svg)}.flag-icon-ax{background-image:url(../flags/4x3/ax.svg)}.flag-icon-ax.flag-icon-squared{background-image:url(../flags/1x1/ax.svg)}.flag-icon-az{background-image:url(../flags/4x3/az.svg)}.flag-icon-az.flag-icon-squared{background-image:url(../flags/1x1/az.svg)}.flag-icon-ba{background-image:url(../flags/4x3/ba.svg)}.flag-icon-ba.flag-icon-squared{background-image:url(../flags/1x1/ba.svg)}.flag-icon-bb{background-image:url(../flags/4x3/bb.svg)}.flag-icon-bb.flag-icon-squared{background-image:url(../flags/1x1/bb.svg)}.flag-icon-bd{background-image:url(../flags/4x3/bd.svg)}.flag-icon-bd.flag-icon-squared{background-image:url(../flags/1x1/bd.svg)}.flag-icon-be{background-image:url(../flags/4x3/be.svg)}.flag-icon-be.flag-icon-squared{background-image:url(../flags/1x1/be.svg)}.flag-icon-bf{background-image:url(../flags/4x3/bf.svg)}.flag-icon-bf.flag-icon-squared{background-image:url(../flags/1x1/bf.svg)}.flag-icon-bg{background-image:url(../flags/4x3/bg.svg)}.flag-icon-bg.flag-icon-squared{background-image:url(../flags/1x1/bg.svg)}.flag-icon-bh{background-image:url(../flags/4x3/bh.svg)}.flag-icon-bh.flag-icon-squared{background-image:url(../flags/1x1/bh.svg)}.flag-icon-bi{background-image:url(../flags/4x3/bi.svg)}.flag-icon-bi.flag-icon-squared{background-image:url(../flags/1x1/bi.svg)}.flag-icon-bj{background-image:url(../flags/4x3/bj.svg)}.flag-icon-bj.flag-icon-squared{background-image:url(../flags/1x1/bj.svg)}.flag-icon-bl{background-image:url(../flags/4x3/bl.svg)}.flag-icon-bl.flag-icon-squared{background-image:url(../flags/1x1/bl.svg)}.flag-icon-bm{background-image:url(../flags/4x3/bm.svg)}.flag-icon-bm.flag-icon-squared{background-image:url(../flags/1x1/bm.svg)}.flag-icon-bn{background-image:url(../flags/4x3/bn.svg)}.flag-icon-bn.flag-icon-squared{background-image:url(../flags/1x1/bn.svg)}.flag-icon-bo{background-image:url(../flags/4x3/bo.svg)}.flag-icon-bo.flag-icon-squared{background-image:url(../flags/1x1/bo.svg)}.flag-icon-bq{background-image:url(../flags/4x3/bq.svg)}.flag-icon-bq.flag-icon-squared{background-image:url(../flags/1x1/bq.svg)}.flag-icon-br{background-image:url(../flags/4x3/br.svg)}.flag-icon-br.flag-icon-squared{background-image:url(../flags/1x1/br.svg)}.flag-icon-bs{background-image:url(../flags/4x3/bs.svg)}.flag-icon-bs.flag-icon-squared{background-image:url(../flags/1x1/bs.svg)}.flag-icon-bt{background-image:url(../flags/4x3/bt.svg)}.flag-icon-bt.flag-icon-squared{background-image:url(../flags/1x1/bt.svg)}.flag-icon-bv{background-image:url(../flags/4x3/bv.svg)}.flag-icon-bv.flag-icon-squared{background-image:url(../flags/1x1/bv.svg)}.flag-icon-bw{background-image:url(../flags/4x3/bw.svg)}.flag-icon-bw.flag-icon-squared{background-image:url(../flags/1x1/bw.svg)}.flag-icon-by{background-image:url(../flags/4x3/by.svg)}.flag-icon-by.flag-icon-squared{background-image:url(../flags/1x1/by.svg)}.flag-icon-bz{background-image:url(../flags/4x3/bz.svg)}.flag-icon-bz.flag-icon-squared{background-image:url(../flags/1x1/bz.svg)}.flag-icon-ca{background-image:url(../flags/4x3/ca.svg)}.flag-icon-ca.flag-icon-squared{background-image:url(../flags/1x1/ca.svg)}.flag-icon-cc{background-image:url(../flags/4x3/cc.svg)}.flag-icon-cc.flag-icon-squared{background-image:url(../flags/1x1/cc.svg)}.flag-icon-cd{background-image:url(../flags/4x3/cd.svg)}.flag-icon-cd.flag-icon-squared{background-image:url(../flags/1x1/cd.svg)}.flag-icon-cf{background-image:url(../flags/4x3/cf.svg)}.flag-icon-cf.flag-icon-squared{background-image:url(../flags/1x1/cf.svg)}.flag-icon-cg{background-image:url(../flags/4x3/cg.svg)}.flag-icon-cg.flag-icon-squared{background-image:url(../flags/1x1/cg.svg)}.flag-icon-ch{background-image:url(../flags/4x3/ch.svg)}.flag-icon-ch.flag-icon-squared{background-image:url(../flags/1x1/ch.svg)}.flag-icon-ci{background-image:url(../flags/4x3/ci.svg)}.flag-icon-ci.flag-icon-squared{background-image:url(../flags/1x1/ci.svg)}.flag-icon-ck{background-image:url(../flags/4x3/ck.svg)}.flag-icon-ck.flag-icon-squared{background-image:url(../flags/1x1/ck.svg)}.flag-icon-cl{background-image:url(../flags/4x3/cl.svg)}.flag-icon-cl.flag-icon-squared{background-image:url(../flags/1x1/cl.svg)}.flag-icon-cm{background-image:url(../flags/4x3/cm.svg)}.flag-icon-cm.flag-icon-squared{background-image:url(../flags/1x1/cm.svg)}.flag-icon-cn{background-image:url(../flags/4x3/cn.svg)}.flag-icon-cn.flag-icon-squared{background-image:url(../flags/1x1/cn.svg)}.flag-icon-co{background-image:url(../flags/4x3/co.svg)}.flag-icon-co.flag-icon-squared{background-image:url(../flags/1x1/co.svg)}.flag-icon-cr{background-image:url(../flags/4x3/cr.svg)}.flag-icon-cr.flag-icon-squared{background-image:url(../flags/1x1/cr.svg)}.flag-icon-cu{background-image:url(../flags/4x3/cu.svg)}.flag-icon-cu.flag-icon-squared{background-image:url(../flags/1x1/cu.svg)}.flag-icon-cv{background-image:url(../flags/4x3/cv.svg)}.flag-icon-cv.flag-icon-squared{background-image:url(../flags/1x1/cv.svg)}.flag-icon-cw{background-image:url(../flags/4x3/cw.svg)}.flag-icon-cw.flag-icon-squared{background-image:url(../flags/1x1/cw.svg)}.flag-icon-cx{background-image:url(../flags/4x3/cx.svg)}.flag-icon-cx.flag-icon-squared{background-image:url(../flags/1x1/cx.svg)}.flag-icon-cy{background-image:url(../flags/4x3/cy.svg)}.flag-icon-cy.flag-icon-squared{background-image:url(../flags/1x1/cy.svg)}.flag-icon-cz{background-image:url(../flags/4x3/cz.svg)}.flag-icon-cz.flag-icon-squared{background-image:url(../flags/1x1/cz.svg)}.flag-icon-de{background-image:url(../flags/4x3/de.svg)}.flag-icon-de.flag-icon-squared{background-image:url(../flags/1x1/de.svg)}.flag-icon-dj{background-image:url(../flags/4x3/dj.svg)}.flag-icon-dj.flag-icon-squared{background-image:url(../flags/1x1/dj.svg)}.flag-icon-dk{background-image:url(../flags/4x3/dk.svg)}.flag-icon-dk.flag-icon-squared{background-image:url(../flags/1x1/dk.svg)}.flag-icon-dm{background-image:url(../flags/4x3/dm.svg)}.flag-icon-dm.flag-icon-squared{background-image:url(../flags/1x1/dm.svg)}.flag-icon-do{background-image:url(../flags/4x3/do.svg)}.flag-icon-do.flag-icon-squared{background-image:url(../flags/1x1/do.svg)}.flag-icon-dz{background-image:url(../flags/4x3/dz.svg)}.flag-icon-dz.flag-icon-squared{background-image:url(../flags/1x1/dz.svg)}.flag-icon-ec{background-image:url(../flags/4x3/ec.svg)}.flag-icon-ec.flag-icon-squared{background-image:url(../flags/1x1/ec.svg)}.flag-icon-ee{background-image:url(../flags/4x3/ee.svg)}.flag-icon-ee.flag-icon-squared{background-image:url(../flags/1x1/ee.svg)}.flag-icon-eg{background-image:url(../flags/4x3/eg.svg)}.flag-icon-eg.flag-icon-squared{background-image:url(../flags/1x1/eg.svg)}.flag-icon-eh{background-image:url(../flags/4x3/eh.svg)}.flag-icon-eh.flag-icon-squared{background-image:url(../flags/1x1/eh.svg)}.flag-icon-er{background-image:url(../flags/4x3/er.svg)}.flag-icon-er.flag-icon-squared{background-image:url(../flags/1x1/er.svg)}.flag-icon-es{background-image:url(../flags/4x3/es.svg)}.flag-icon-es.flag-icon-squared{background-image:url(../flags/1x1/es.svg)}.flag-icon-et{background-image:url(../flags/4x3/et.svg)}.flag-icon-et.flag-icon-squared{background-image:url(../flags/1x1/et.svg)}.flag-icon-fi{background-image:url(../flags/4x3/fi.svg)}.flag-icon-fi.flag-icon-squared{background-image:url(../flags/1x1/fi.svg)}.flag-icon-fj{background-image:url(../flags/4x3/fj.svg)}.flag-icon-fj.flag-icon-squared{background-image:url(../flags/1x1/fj.svg)}.flag-icon-fk{background-image:url(../flags/4x3/fk.svg)}.flag-icon-fk.flag-icon-squared{background-image:url(../flags/1x1/fk.svg)}.flag-icon-fm{background-image:url(../flags/4x3/fm.svg)}.flag-icon-fm.flag-icon-squared{background-image:url(../flags/1x1/fm.svg)}.flag-icon-fo{background-image:url(../flags/4x3/fo.svg)}.flag-icon-fo.flag-icon-squared{background-image:url(../flags/1x1/fo.svg)}.flag-icon-fr{background-image:url(../flags/4x3/fr.svg)}.flag-icon-fr.flag-icon-squared{background-image:url(../flags/1x1/fr.svg)}.flag-icon-ga{background-image:url(../flags/4x3/ga.svg)}.flag-icon-ga.flag-icon-squared{background-image:url(../flags/1x1/ga.svg)}.flag-icon-gb{background-image:url(../flags/4x3/gb.svg)}.flag-icon-gb.flag-icon-squared{background-image:url(../flags/1x1/gb.svg)}.flag-icon-gd{background-image:url(../flags/4x3/gd.svg)}.flag-icon-gd.flag-icon-squared{background-image:url(../flags/1x1/gd.svg)}.flag-icon-ge{background-image:url(../flags/4x3/ge.svg)}.flag-icon-ge.flag-icon-squared{background-image:url(../flags/1x1/ge.svg)}.flag-icon-gf{background-image:url(../flags/4x3/gf.svg)}.flag-icon-gf.flag-icon-squared{background-image:url(../flags/1x1/gf.svg)}.flag-icon-gg{background-image:url(../flags/4x3/gg.svg)}.flag-icon-gg.flag-icon-squared{background-image:url(../flags/1x1/gg.svg)}.flag-icon-gh{background-image:url(../flags/4x3/gh.svg)}.flag-icon-gh.flag-icon-squared{background-image:url(../flags/1x1/gh.svg)}.flag-icon-gi{background-image:url(../flags/4x3/gi.svg)}.flag-icon-gi.flag-icon-squared{background-image:url(../flags/1x1/gi.svg)}.flag-icon-gl{background-image:url(../flags/4x3/gl.svg)}.flag-icon-gl.flag-icon-squared{background-image:url(../flags/1x1/gl.svg)}.flag-icon-gm{background-image:url(../flags/4x3/gm.svg)}.flag-icon-gm.flag-icon-squared{background-image:url(../flags/1x1/gm.svg)}.flag-icon-gn{background-image:url(../flags/4x3/gn.svg)}.flag-icon-gn.flag-icon-squared{background-image:url(../flags/1x1/gn.svg)}.flag-icon-gp{background-image:url(../flags/4x3/gp.svg)}.flag-icon-gp.flag-icon-squared{background-image:url(../flags/1x1/gp.svg)}.flag-icon-gq{background-image:url(../flags/4x3/gq.svg)}.flag-icon-gq.flag-icon-squared{background-image:url(../flags/1x1/gq.svg)}.flag-icon-gr{background-image:url(../flags/4x3/gr.svg)}.flag-icon-gr.flag-icon-squared{background-image:url(../flags/1x1/gr.svg)}.flag-icon-gs{background-image:url(../flags/4x3/gs.svg)}.flag-icon-gs.flag-icon-squared{background-image:url(../flags/1x1/gs.svg)}.flag-icon-gt{background-image:url(../flags/4x3/gt.svg)}.flag-icon-gt.flag-icon-squared{background-image:url(../flags/1x1/gt.svg)}.flag-icon-gu{background-image:url(../flags/4x3/gu.svg)}.flag-icon-gu.flag-icon-squared{background-image:url(../flags/1x1/gu.svg)}.flag-icon-gw{background-image:url(../flags/4x3/gw.svg)}.flag-icon-gw.flag-icon-squared{background-image:url(../flags/1x1/gw.svg)}.flag-icon-gy{background-image:url(../flags/4x3/gy.svg)}.flag-icon-gy.flag-icon-squared{background-image:url(../flags/1x1/gy.svg)}.flag-icon-hk{background-image:url(../flags/4x3/hk.svg)}.flag-icon-hk.flag-icon-squared{background-image:url(../flags/1x1/hk.svg)}.flag-icon-hm{background-image:url(../flags/4x3/hm.svg)}.flag-icon-hm.flag-icon-squared{background-image:url(../flags/1x1/hm.svg)}.flag-icon-hn{background-image:url(../flags/4x3/hn.svg)}.flag-icon-hn.flag-icon-squared{background-image:url(../flags/1x1/hn.svg)}.flag-icon-hr{background-image:url(../flags/4x3/hr.svg)}.flag-icon-hr.flag-icon-squared{background-image:url(../flags/1x1/hr.svg)}.flag-icon-ht{background-image:url(../flags/4x3/ht.svg)}.flag-icon-ht.flag-icon-squared{background-image:url(../flags/1x1/ht.svg)}.flag-icon-hu{background-image:url(../flags/4x3/hu.svg)}.flag-icon-hu.flag-icon-squared{background-image:url(../flags/1x1/hu.svg)}.flag-icon-id{background-image:url(../flags/4x3/id.svg)}.flag-icon-id.flag-icon-squared{background-image:url(../flags/1x1/id.svg)}.flag-icon-ie{background-image:url(../flags/4x3/ie.svg)}.flag-icon-ie.flag-icon-squared{background-image:url(../flags/1x1/ie.svg)}.flag-icon-il{background-image:url(../flags/4x3/il.svg)}.flag-icon-il.flag-icon-squared{background-image:url(../flags/1x1/il.svg)}.flag-icon-im{background-image:url(../flags/4x3/im.svg)}.flag-icon-im.flag-icon-squared{background-image:url(../flags/1x1/im.svg)}.flag-icon-in{background-image:url(../flags/4x3/in.svg)}.flag-icon-in.flag-icon-squared{background-image:url(../flags/1x1/in.svg)}.flag-icon-io{background-image:url(../flags/4x3/io.svg)}.flag-icon-io.flag-icon-squared{background-image:url(../flags/1x1/io.svg)}.flag-icon-iq{background-image:url(../flags/4x3/iq.svg)}.flag-icon-iq.flag-icon-squared{background-image:url(../flags/1x1/iq.svg)}.flag-icon-ir{background-image:url(../flags/4x3/ir.svg)}.flag-icon-ir.flag-icon-squared{background-image:url(../flags/1x1/ir.svg)}.flag-icon-is{background-image:url(../flags/4x3/is.svg)}.flag-icon-is.flag-icon-squared{background-image:url(../flags/1x1/is.svg)}.flag-icon-it{background-image:url(../flags/4x3/it.svg)}.flag-icon-it.flag-icon-squared{background-image:url(../flags/1x1/it.svg)}.flag-icon-je{background-image:url(../flags/4x3/je.svg)}.flag-icon-je.flag-icon-squared{background-image:url(../flags/1x1/je.svg)}.flag-icon-jm{background-image:url(../flags/4x3/jm.svg)}.flag-icon-jm.flag-icon-squared{background-image:url(../flags/1x1/jm.svg)}.flag-icon-jo{background-image:url(../flags/4x3/jo.svg)}.flag-icon-jo.flag-icon-squared{background-image:url(../flags/1x1/jo.svg)}.flag-icon-jp{background-image:url(../flags/4x3/jp.svg)}.flag-icon-jp.flag-icon-squared{background-image:url(../flags/1x1/jp.svg)}.flag-icon-ke{background-image:url(../flags/4x3/ke.svg)}.flag-icon-ke.flag-icon-squared{background-image:url(../flags/1x1/ke.svg)}.flag-icon-kg{background-image:url(../flags/4x3/kg.svg)}.flag-icon-kg.flag-icon-squared{background-image:url(../flags/1x1/kg.svg)}.flag-icon-kh{background-image:url(../flags/4x3/kh.svg)}.flag-icon-kh.flag-icon-squared{background-image:url(../flags/1x1/kh.svg)}.flag-icon-ki{background-image:url(../flags/4x3/ki.svg)}.flag-icon-ki.flag-icon-squared{background-image:url(../flags/1x1/ki.svg)}.flag-icon-km{background-image:url(../flags/4x3/km.svg)}.flag-icon-km.flag-icon-squared{background-image:url(../flags/1x1/km.svg)}.flag-icon-kn{background-image:url(../flags/4x3/kn.svg)}.flag-icon-kn.flag-icon-squared{background-image:url(../flags/1x1/kn.svg)}.flag-icon-kp{background-image:url(../flags/4x3/kp.svg)}.flag-icon-kp.flag-icon-squared{background-image:url(../flags/1x1/kp.svg)}.flag-icon-kr{background-image:url(../flags/4x3/kr.svg)}.flag-icon-kr.flag-icon-squared{background-image:url(../flags/1x1/kr.svg)}.flag-icon-kw{background-image:url(../flags/4x3/kw.svg)}.flag-icon-kw.flag-icon-squared{background-image:url(../flags/1x1/kw.svg)}.flag-icon-ky{background-image:url(../flags/4x3/ky.svg)}.flag-icon-ky.flag-icon-squared{background-image:url(../flags/1x1/ky.svg)}.flag-icon-kz{background-image:url(../flags/4x3/kz.svg)}.flag-icon-kz.flag-icon-squared{background-image:url(../flags/1x1/kz.svg)}.flag-icon-la{background-image:url(../flags/4x3/la.svg)}.flag-icon-la.flag-icon-squared{background-image:url(../flags/1x1/la.svg)}.flag-icon-lb{background-image:url(../flags/4x3/lb.svg)}.flag-icon-lb.flag-icon-squared{background-image:url(../flags/1x1/lb.svg)}.flag-icon-lc{background-image:url(../flags/4x3/lc.svg)}.flag-icon-lc.flag-icon-squared{background-image:url(../flags/1x1/lc.svg)}.flag-icon-li{background-image:url(../flags/4x3/li.svg)}.flag-icon-li.flag-icon-squared{background-image:url(../flags/1x1/li.svg)}.flag-icon-lk{background-image:url(../flags/4x3/lk.svg)}.flag-icon-lk.flag-icon-squared{background-image:url(../flags/1x1/lk.svg)}.flag-icon-lr{background-image:url(../flags/4x3/lr.svg)}.flag-icon-lr.flag-icon-squared{background-image:url(../flags/1x1/lr.svg)}.flag-icon-ls{background-image:url(../flags/4x3/ls.svg)}.flag-icon-ls.flag-icon-squared{background-image:url(../flags/1x1/ls.svg)}.flag-icon-lt{background-image:url(../flags/4x3/lt.svg)}.flag-icon-lt.flag-icon-squared{background-image:url(../flags/1x1/lt.svg)}.flag-icon-lu{background-image:url(../flags/4x3/lu.svg)}.flag-icon-lu.flag-icon-squared{background-image:url(../flags/1x1/lu.svg)}.flag-icon-lv{background-image:url(../flags/4x3/lv.svg)}.flag-icon-lv.flag-icon-squared{background-image:url(../flags/1x1/lv.svg)}.flag-icon-ly{background-image:url(../flags/4x3/ly.svg)}.flag-icon-ly.flag-icon-squared{background-image:url(../flags/1x1/ly.svg)}.flag-icon-ma{background-image:url(../flags/4x3/ma.svg)}.flag-icon-ma.flag-icon-squared{background-image:url(../flags/1x1/ma.svg)}.flag-icon-mc{background-image:url(../flags/4x3/mc.svg)}.flag-icon-mc.flag-icon-squared{background-image:url(../flags/1x1/mc.svg)}.flag-icon-md{background-image:url(../flags/4x3/md.svg)}.flag-icon-md.flag-icon-squared{background-image:url(../flags/1x1/md.svg)}.flag-icon-me{background-image:url(../flags/4x3/me.svg)}.flag-icon-me.flag-icon-squared{background-image:url(../flags/1x1/me.svg)}.flag-icon-mf{background-image:url(../flags/4x3/mf.svg)}.flag-icon-mf.flag-icon-squared{background-image:url(../flags/1x1/mf.svg)}.flag-icon-mg{background-image:url(../flags/4x3/mg.svg)}.flag-icon-mg.flag-icon-squared{background-image:url(../flags/1x1/mg.svg)}.flag-icon-mh{background-image:url(../flags/4x3/mh.svg)}.flag-icon-mh.flag-icon-squared{background-image:url(../flags/1x1/mh.svg)}.flag-icon-mk{background-image:url(../flags/4x3/mk.svg)}.flag-icon-mk.flag-icon-squared{background-image:url(../flags/1x1/mk.svg)}.flag-icon-ml{background-image:url(../flags/4x3/ml.svg)}.flag-icon-ml.flag-icon-squared{background-image:url(../flags/1x1/ml.svg)}.flag-icon-mm{background-image:url(../flags/4x3/mm.svg)}.flag-icon-mm.flag-icon-squared{background-image:url(../flags/1x1/mm.svg)}.flag-icon-mn{background-image:url(../flags/4x3/mn.svg)}.flag-icon-mn.flag-icon-squared{background-image:url(../flags/1x1/mn.svg)}.flag-icon-mo{background-image:url(../flags/4x3/mo.svg)}.flag-icon-mo.flag-icon-squared{background-image:url(../flags/1x1/mo.svg)}.flag-icon-mp{background-image:url(../flags/4x3/mp.svg)}.flag-icon-mp.flag-icon-squared{background-image:url(../flags/1x1/mp.svg)}.flag-icon-mq{background-image:url(../flags/4x3/mq.svg)}.flag-icon-mq.flag-icon-squared{background-image:url(../flags/1x1/mq.svg)}.flag-icon-mr{background-image:url(../flags/4x3/mr.svg)}.flag-icon-mr.flag-icon-squared{background-image:url(../flags/1x1/mr.svg)}.flag-icon-ms{background-image:url(../flags/4x3/ms.svg)}.flag-icon-ms.flag-icon-squared{background-image:url(../flags/1x1/ms.svg)}.flag-icon-mt{background-image:url(../flags/4x3/mt.svg)}.flag-icon-mt.flag-icon-squared{background-image:url(../flags/1x1/mt.svg)}.flag-icon-mu{background-image:url(../flags/4x3/mu.svg)}.flag-icon-mu.flag-icon-squared{background-image:url(../flags/1x1/mu.svg)}.flag-icon-mv{background-image:url(../flags/4x3/mv.svg)}.flag-icon-mv.flag-icon-squared{background-image:url(../flags/1x1/mv.svg)}.flag-icon-mw{background-image:url(../flags/4x3/mw.svg)}.flag-icon-mw.flag-icon-squared{background-image:url(../flags/1x1/mw.svg)}.flag-icon-mx{background-image:url(../flags/4x3/mx.svg)}.flag-icon-mx.flag-icon-squared{background-image:url(../flags/1x1/mx.svg)}.flag-icon-my{background-image:url(../flags/4x3/my.svg)}.flag-icon-my.flag-icon-squared{background-image:url(../flags/1x1/my.svg)}.flag-icon-mz{background-image:url(../flags/4x3/mz.svg)}.flag-icon-mz.flag-icon-squared{background-image:url(../flags/1x1/mz.svg)}.flag-icon-na{background-image:url(../flags/4x3/na.svg)}.flag-icon-na.flag-icon-squared{background-image:url(../flags/1x1/na.svg)}.flag-icon-nc{background-image:url(../flags/4x3/nc.svg)}.flag-icon-nc.flag-icon-squared{background-image:url(../flags/1x1/nc.svg)}.flag-icon-ne{background-image:url(../flags/4x3/ne.svg)}.flag-icon-ne.flag-icon-squared{background-image:url(../flags/1x1/ne.svg)}.flag-icon-nf{background-image:url(../flags/4x3/nf.svg)}.flag-icon-nf.flag-icon-squared{background-image:url(../flags/1x1/nf.svg)}.flag-icon-ng{background-image:url(../flags/4x3/ng.svg)}.flag-icon-ng.flag-icon-squared{background-image:url(../flags/1x1/ng.svg)}.flag-icon-ni{background-image:url(../flags/4x3/ni.svg)}.flag-icon-ni.flag-icon-squared{background-image:url(../flags/1x1/ni.svg)}.flag-icon-nl{background-image:url(../flags/4x3/nl.svg)}.flag-icon-nl.flag-icon-squared{background-image:url(../flags/1x1/nl.svg)}.flag-icon-no{background-image:url(../flags/4x3/no.svg)}.flag-icon-no.flag-icon-squared{background-image:url(../flags/1x1/no.svg)}.flag-icon-np{background-image:url(../flags/4x3/np.svg)}.flag-icon-np.flag-icon-squared{background-image:url(../flags/1x1/np.svg)}.flag-icon-nr{background-image:url(../flags/4x3/nr.svg)}.flag-icon-nr.flag-icon-squared{background-image:url(../flags/1x1/nr.svg)}.flag-icon-nu{background-image:url(../flags/4x3/nu.svg)}.flag-icon-nu.flag-icon-squared{background-image:url(../flags/1x1/nu.svg)}.flag-icon-nz{background-image:url(../flags/4x3/nz.svg)}.flag-icon-nz.flag-icon-squared{background-image:url(../flags/1x1/nz.svg)}.flag-icon-om{background-image:url(../flags/4x3/om.svg)}.flag-icon-om.flag-icon-squared{background-image:url(../flags/1x1/om.svg)}.flag-icon-pa{background-image:url(../flags/4x3/pa.svg)}.flag-icon-pa.flag-icon-squared{background-image:url(../flags/1x1/pa.svg)}.flag-icon-pe{background-image:url(../flags/4x3/pe.svg)}.flag-icon-pe.flag-icon-squared{background-image:url(../flags/1x1/pe.svg)}.flag-icon-pf{background-image:url(../flags/4x3/pf.svg)}.flag-icon-pf.flag-icon-squared{background-image:url(../flags/1x1/pf.svg)}.flag-icon-pg{background-image:url(../flags/4x3/pg.svg)}.flag-icon-pg.flag-icon-squared{background-image:url(../flags/1x1/pg.svg)}.flag-icon-ph{background-image:url(../flags/4x3/ph.svg)}.flag-icon-ph.flag-icon-squared{background-image:url(../flags/1x1/ph.svg)}.flag-icon-pk{background-image:url(../flags/4x3/pk.svg)}.flag-icon-pk.flag-icon-squared{background-image:url(../flags/1x1/pk.svg)}.flag-icon-pl{background-image:url(../flags/4x3/pl.svg)}.flag-icon-pl.flag-icon-squared{background-image:url(../flags/1x1/pl.svg)}.flag-icon-pm{background-image:url(../flags/4x3/pm.svg)}.flag-icon-pm.flag-icon-squared{background-image:url(../flags/1x1/pm.svg)}.flag-icon-pn{background-image:url(../flags/4x3/pn.svg)}.flag-icon-pn.flag-icon-squared{background-image:url(../flags/1x1/pn.svg)}.flag-icon-pr{background-image:url(../flags/4x3/pr.svg)}.flag-icon-pr.flag-icon-squared{background-image:url(../flags/1x1/pr.svg)}.flag-icon-ps{background-image:url(../flags/4x3/ps.svg)}.flag-icon-ps.flag-icon-squared{background-image:url(../flags/1x1/ps.svg)}.flag-icon-pt{background-image:url(../flags/4x3/pt.svg)}.flag-icon-pt.flag-icon-squared{background-image:url(../flags/1x1/pt.svg)}.flag-icon-pw{background-image:url(../flags/4x3/pw.svg)}.flag-icon-pw.flag-icon-squared{background-image:url(../flags/1x1/pw.svg)}.flag-icon-py{background-image:url(../flags/4x3/py.svg)}.flag-icon-py.flag-icon-squared{background-image:url(../flags/1x1/py.svg)}.flag-icon-qa{background-image:url(../flags/4x3/qa.svg)}.flag-icon-qa.flag-icon-squared{background-image:url(../flags/1x1/qa.svg)}.flag-icon-re{background-image:url(../flags/4x3/re.svg)}.flag-icon-re.flag-icon-squared{background-image:url(../flags/1x1/re.svg)}.flag-icon-ro{background-image:url(../flags/4x3/ro.svg)}.flag-icon-ro.flag-icon-squared{background-image:url(../flags/1x1/ro.svg)}.flag-icon-rs{background-image:url(../flags/4x3/rs.svg)}.flag-icon-rs.flag-icon-squared{background-image:url(../flags/1x1/rs.svg)}.flag-icon-ru{background-image:url(../flags/4x3/ru.svg)}.flag-icon-ru.flag-icon-squared{background-image:url(../flags/1x1/ru.svg)}.flag-icon-rw{background-image:url(../flags/4x3/rw.svg)}.flag-icon-rw.flag-icon-squared{background-image:url(../flags/1x1/rw.svg)}.flag-icon-sa{background-image:url(../flags/4x3/sa.svg)}.flag-icon-sa.flag-icon-squared{background-image:url(../flags/1x1/sa.svg)}.flag-icon-sb{background-image:url(../flags/4x3/sb.svg)}.flag-icon-sb.flag-icon-squared{background-image:url(../flags/1x1/sb.svg)}.flag-icon-sc{background-image:url(../flags/4x3/sc.svg)}.flag-icon-sc.flag-icon-squared{background-image:url(../flags/1x1/sc.svg)}.flag-icon-sd{background-image:url(../flags/4x3/sd.svg)}.flag-icon-sd.flag-icon-squared{background-image:url(../flags/1x1/sd.svg)}.flag-icon-se{background-image:url(../flags/4x3/se.svg)}.flag-icon-se.flag-icon-squared{background-image:url(../flags/1x1/se.svg)}.flag-icon-sg{background-image:url(../flags/4x3/sg.svg)}.flag-icon-sg.flag-icon-squared{background-image:url(../flags/1x1/sg.svg)}.flag-icon-sh{background-image:url(../flags/4x3/sh.svg)}.flag-icon-sh.flag-icon-squared{background-image:url(../flags/1x1/sh.svg)}.flag-icon-si{background-image:url(../flags/4x3/si.svg)}.flag-icon-si.flag-icon-squared{background-image:url(../flags/1x1/si.svg)}.flag-icon-sj{background-image:url(../flags/4x3/sj.svg)}.flag-icon-sj.flag-icon-squared{background-image:url(../flags/1x1/sj.svg)}.flag-icon-sk{background-image:url(../flags/4x3/sk.svg)}.flag-icon-sk.flag-icon-squared{background-image:url(../flags/1x1/sk.svg)}.flag-icon-sl{background-image:url(../flags/4x3/sl.svg)}.flag-icon-sl.flag-icon-squared{background-image:url(../flags/1x1/sl.svg)}.flag-icon-sm{background-image:url(../flags/4x3/sm.svg)}.flag-icon-sm.flag-icon-squared{background-image:url(../flags/1x1/sm.svg)}.flag-icon-sn{background-image:url(../flags/4x3/sn.svg)}.flag-icon-sn.flag-icon-squared{background-image:url(../flags/1x1/sn.svg)}.flag-icon-so{background-image:url(../flags/4x3/so.svg)}.flag-icon-so.flag-icon-squared{background-image:url(../flags/1x1/so.svg)}.flag-icon-sr{background-image:url(../flags/4x3/sr.svg)}.flag-icon-sr.flag-icon-squared{background-image:url(../flags/1x1/sr.svg)}.flag-icon-ss{background-image:url(../flags/4x3/ss.svg)}.flag-icon-ss.flag-icon-squared{background-image:url(../flags/1x1/ss.svg)}.flag-icon-st{background-image:url(../flags/4x3/st.svg)}.flag-icon-st.flag-icon-squared{background-image:url(../flags/1x1/st.svg)}.flag-icon-sv{background-image:url(../flags/4x3/sv.svg)}.flag-icon-sv.flag-icon-squared{background-image:url(../flags/1x1/sv.svg)}.flag-icon-sx{background-image:url(../flags/4x3/sx.svg)}.flag-icon-sx.flag-icon-squared{background-image:url(../flags/1x1/sx.svg)}.flag-icon-sy{background-image:url(../flags/4x3/sy.svg)}.flag-icon-sy.flag-icon-squared{background-image:url(../flags/1x1/sy.svg)}.flag-icon-sz{background-image:url(../flags/4x3/sz.svg)}.flag-icon-sz.flag-icon-squared{background-image:url(../flags/1x1/sz.svg)}.flag-icon-tc{background-image:url(../flags/4x3/tc.svg)}.flag-icon-tc.flag-icon-squared{background-image:url(../flags/1x1/tc.svg)}.flag-icon-td{background-image:url(../flags/4x3/td.svg)}.flag-icon-td.flag-icon-squared{background-image:url(../flags/1x1/td.svg)}.flag-icon-tf{background-image:url(../flags/4x3/tf.svg)}.flag-icon-tf.flag-icon-squared{background-image:url(../flags/1x1/tf.svg)}.flag-icon-tg{background-image:url(../flags/4x3/tg.svg)}.flag-icon-tg.flag-icon-squared{background-image:url(../flags/1x1/tg.svg)}.flag-icon-th{background-image:url(../flags/4x3/th.svg)}.flag-icon-th.flag-icon-squared{background-image:url(../flags/1x1/th.svg)}.flag-icon-tj{background-image:url(../flags/4x3/tj.svg)}.flag-icon-tj.flag-icon-squared{background-image:url(../flags/1x1/tj.svg)}.flag-icon-tk{background-image:url(../flags/4x3/tk.svg)}.flag-icon-tk.flag-icon-squared{background-image:url(../flags/1x1/tk.svg)}.flag-icon-tl{background-image:url(../flags/4x3/tl.svg)}.flag-icon-tl.flag-icon-squared{background-image:url(../flags/1x1/tl.svg)}.flag-icon-tm{background-image:url(../flags/4x3/tm.svg)}.flag-icon-tm.flag-icon-squared{background-image:url(../flags/1x1/tm.svg)}.flag-icon-tn{background-image:url(../flags/4x3/tn.svg)}.flag-icon-tn.flag-icon-squared{background-image:url(../flags/1x1/tn.svg)}.flag-icon-to{background-image:url(../flags/4x3/to.svg)}.flag-icon-to.flag-icon-squared{background-image:url(../flags/1x1/to.svg)}.flag-icon-tr{background-image:url(../flags/4x3/tr.svg)}.flag-icon-tr.flag-icon-squared{background-image:url(../flags/1x1/tr.svg)}.flag-icon-tt{background-image:url(../flags/4x3/tt.svg)}.flag-icon-tt.flag-icon-squared{background-image:url(../flags/1x1/tt.svg)}.flag-icon-tv{background-image:url(../flags/4x3/tv.svg)}.flag-icon-tv.flag-icon-squared{background-image:url(../flags/1x1/tv.svg)}.flag-icon-tw{background-image:url(../flags/4x3/tw.svg)}.flag-icon-tw.flag-icon-squared{background-image:url(../flags/1x1/tw.svg)}.flag-icon-tz{background-image:url(../flags/4x3/tz.svg)}.flag-icon-tz.flag-icon-squared{background-image:url(../flags/1x1/tz.svg)}.flag-icon-ua{background-image:url(../flags/4x3/ua.svg)}.flag-icon-ua.flag-icon-squared{background-image:url(../flags/1x1/ua.svg)}.flag-icon-ug{background-image:url(../flags/4x3/ug.svg)}.flag-icon-ug.flag-icon-squared{background-image:url(../flags/1x1/ug.svg)}.flag-icon-um{background-image:url(../flags/4x3/um.svg)}.flag-icon-um.flag-icon-squared{background-image:url(../flags/1x1/um.svg)}.flag-icon-us{background-image:url(../flags/4x3/us.svg)}.flag-icon-us.flag-icon-squared{background-image:url(../flags/1x1/us.svg)}.flag-icon-uy{background-image:url(../flags/4x3/uy.svg)}.flag-icon-uy.flag-icon-squared{background-image:url(../flags/1x1/uy.svg)}.flag-icon-uz{background-image:url(../flags/4x3/uz.svg)}.flag-icon-uz.flag-icon-squared{background-image:url(../flags/1x1/uz.svg)}.flag-icon-va{background-image:url(../flags/4x3/va.svg)}.flag-icon-va.flag-icon-squared{background-image:url(../flags/1x1/va.svg)}.flag-icon-vc{background-image:url(../flags/4x3/vc.svg)}.flag-icon-vc.flag-icon-squared{background-image:url(../flags/1x1/vc.svg)}.flag-icon-ve{background-image:url(../flags/4x3/ve.svg)}.flag-icon-ve.flag-icon-squared{background-image:url(../flags/1x1/ve.svg)}.flag-icon-vg{background-image:url(../flags/4x3/vg.svg)}.flag-icon-vg.flag-icon-squared{background-image:url(../flags/1x1/vg.svg)}.flag-icon-vi{background-image:url(../flags/4x3/vi.svg)}.flag-icon-vi.flag-icon-squared{background-image:url(../flags/1x1/vi.svg)}.flag-icon-vn{background-image:url(../flags/4x3/vn.svg)}.flag-icon-vn.flag-icon-squared{background-image:url(../flags/1x1/vn.svg)}.flag-icon-vu{background-image:url(../flags/4x3/vu.svg)}.flag-icon-vu.flag-icon-squared{background-image:url(../flags/1x1/vu.svg)}.flag-icon-wf{background-image:url(../flags/4x3/wf.svg)}.flag-icon-wf.flag-icon-squared{background-image:url(../flags/1x1/wf.svg)}.flag-icon-ws{background-image:url(../flags/4x3/ws.svg)}.flag-icon-ws.flag-icon-squared{background-image:url(../flags/1x1/ws.svg)}.flag-icon-ye{background-image:url(../flags/4x3/ye.svg)}.flag-icon-ye.flag-icon-squared{background-image:url(../flags/1x1/ye.svg)}.flag-icon-yt{background-image:url(../flags/4x3/yt.svg)}.flag-icon-yt.flag-icon-squared{background-image:url(../flags/1x1/yt.svg)}.flag-icon-za{background-image:url(../flags/4x3/za.svg)}.flag-icon-za.flag-icon-squared{background-image:url(../flags/1x1/za.svg)}.flag-icon-zm{background-image:url(../flags/4x3/zm.svg)}.flag-icon-zm.flag-icon-squared{background-image:url(../flags/1x1/zm.svg)}.flag-icon-zw{background-image:url(../flags/4x3/zw.svg)}.flag-icon-zw.flag-icon-squared{background-image:url(../flags/1x1/zw.svg)}.flag-icon-es-ca{background-image:url(../flags/4x3/es-ca.svg)}.flag-icon-es-ca.flag-icon-squared{background-image:url(../flags/1x1/es-ca.svg)}.flag-icon-es-ga{background-image:url(../flags/4x3/es-ga.svg)}.flag-icon-es-ga.flag-icon-squared{background-image:url(../flags/1x1/es-ga.svg)}.flag-icon-eu{background-image:url(../flags/4x3/eu.svg)}.flag-icon-eu.flag-icon-squared{background-image:url(../flags/1x1/eu.svg)}.flag-icon-gb-eng{background-image:url(../flags/4x3/gb-eng.svg)}.flag-icon-gb-eng.flag-icon-squared{background-image:url(../flags/1x1/gb-eng.svg)}.flag-icon-gb-nir{background-image:url(../flags/4x3/gb-nir.svg)}.flag-icon-gb-nir.flag-icon-squared{background-image:url(../flags/1x1/gb-nir.svg)}.flag-icon-gb-sct{background-image:url(../flags/4x3/gb-sct.svg)}.flag-icon-gb-sct.flag-icon-squared{background-image:url(../flags/1x1/gb-sct.svg)}.flag-icon-gb-wls{background-image:url(../flags/4x3/gb-wls.svg)}.flag-icon-gb-wls.flag-icon-squared{background-image:url(../flags/1x1/gb-wls.svg)}.flag-icon-un{background-image:url(../flags/4x3/un.svg)}.flag-icon-un.flag-icon-squared{background-image:url(../flags/1x1/un.svg)}.flag-icon-xk{background-image:url(../flags/4x3/xk.svg)}.flag-icon-xk.flag-icon-squared{background-image:url(../flags/1x1/xk.svg)}
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ad.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ad.svg
deleted file mode 100644
index e7fc56abbc..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ad.svg
+++ /dev/null
@@ -1,148 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ae.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ae.svg
deleted file mode 100644
index 739c5d4646..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ae.svg
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/af.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/af.svg
deleted file mode 100644
index 90c34b8d5a..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/af.svg
+++ /dev/null
@@ -1,81 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ag.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ag.svg
deleted file mode 100644
index d0b2a83cbe..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ag.svg
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ai.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ai.svg
deleted file mode 100644
index 472be200e7..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ai.svg
+++ /dev/null
@@ -1,763 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/al.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/al.svg
deleted file mode 100644
index 75995ecde6..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/al.svg
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/am.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/am.svg
deleted file mode 100644
index 1198be035f..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/am.svg
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ao.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ao.svg
deleted file mode 100644
index a5a25bf107..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ao.svg
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/aq.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/aq.svg
deleted file mode 100644
index 80e682abd6..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/aq.svg
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ar.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ar.svg
deleted file mode 100644
index 1730ecac9e..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ar.svg
+++ /dev/null
@@ -1,31 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/as.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/as.svg
deleted file mode 100644
index b8d8162d0a..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/as.svg
+++ /dev/null
@@ -1,33 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/at.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/at.svg
deleted file mode 100644
index 649d6efe0a..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/at.svg
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/au.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/au.svg
deleted file mode 100644
index ca5d607ea0..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/au.svg
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/aw.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/aw.svg
deleted file mode 100644
index 248a08d69b..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/aw.svg
+++ /dev/null
@@ -1,186 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ax.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ax.svg
deleted file mode 100644
index cdeb07e273..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ax.svg
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/az.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/az.svg
deleted file mode 100644
index 0119e1ab4e..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/az.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ba.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ba.svg
deleted file mode 100644
index 5b92b0ab54..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ba.svg
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bb.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bb.svg
deleted file mode 100644
index 9d627842f1..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bb.svg
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bd.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bd.svg
deleted file mode 100644
index 4cb38cf503..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bd.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/be.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/be.svg
deleted file mode 100644
index 01496c3cac..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/be.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bf.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bf.svg
deleted file mode 100644
index a3c7c44a4f..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bf.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bg.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bg.svg
deleted file mode 100644
index 5abe67f642..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bg.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bh.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bh.svg
deleted file mode 100644
index 22fba621a9..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bh.svg
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bi.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bi.svg
deleted file mode 100644
index cc11dcff2c..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bi.svg
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bj.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bj.svg
deleted file mode 100644
index 07c4c117ca..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bj.svg
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bl.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bl.svg
deleted file mode 100644
index 0fa74e1c3c..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bl.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bm.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bm.svg
deleted file mode 100644
index a7057d24c0..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bm.svg
+++ /dev/null
@@ -1,98 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bn.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bn.svg
deleted file mode 100644
index 2e93aea326..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bn.svg
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bo.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bo.svg
deleted file mode 100644
index 52a534fe2b..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bo.svg
+++ /dev/null
@@ -1,678 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bq.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bq.svg
deleted file mode 100644
index cc872ef1b8..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bq.svg
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/br.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/br.svg
deleted file mode 100644
index 8353e823fc..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/br.svg
+++ /dev/null
@@ -1,45 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bs.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bs.svg
deleted file mode 100644
index decdebb1ef..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bs.svg
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bt.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bt.svg
deleted file mode 100644
index 3bbbfaac74..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bt.svg
+++ /dev/null
@@ -1,89 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bv.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bv.svg
deleted file mode 100644
index 01c9ee147d..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bv.svg
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bw.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bw.svg
deleted file mode 100644
index 0bc5d3d34f..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bw.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/by.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/by.svg
deleted file mode 100644
index 73e14f7a23..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/by.svg
+++ /dev/null
@@ -1,22 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bz.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bz.svg
deleted file mode 100644
index 0e9a27ca6a..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/bz.svg
+++ /dev/null
@@ -1,145 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ca.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ca.svg
deleted file mode 100644
index 6882f6da65..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ca.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cc.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cc.svg
deleted file mode 100644
index dd6e20003e..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cc.svg
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cd.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cd.svg
deleted file mode 100644
index 5da2a96892..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cd.svg
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cf.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cf.svg
deleted file mode 100644
index e924621528..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cf.svg
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cg.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cg.svg
deleted file mode 100644
index a52ba7e211..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cg.svg
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ch.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ch.svg
deleted file mode 100644
index 773cdc8a3e..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ch.svg
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ci.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ci.svg
deleted file mode 100644
index bd1e3f4141..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ci.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ck.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ck.svg
deleted file mode 100644
index f2df0dbe34..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ck.svg
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cl.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cl.svg
deleted file mode 100644
index b808896721..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cl.svg
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cm.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cm.svg
deleted file mode 100644
index 08b710bb87..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cm.svg
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cn.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cn.svg
deleted file mode 100644
index 7873c1b4fa..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cn.svg
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/co.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/co.svg
deleted file mode 100644
index 18d1c5f450..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/co.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cr.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cr.svg
deleted file mode 100644
index a60a6dd614..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cr.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cu.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cu.svg
deleted file mode 100644
index 396817620d..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cu.svg
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cv.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cv.svg
deleted file mode 100644
index a8311b2f83..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cv.svg
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cw.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cw.svg
deleted file mode 100644
index d7ba21865b..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cw.svg
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cx.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cx.svg
deleted file mode 100644
index ef82c45363..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cx.svg
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cy.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cy.svg
deleted file mode 100644
index ba2b0f8908..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cy.svg
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cz.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cz.svg
deleted file mode 100644
index 9557b6e88d..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/cz.svg
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/de.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/de.svg
deleted file mode 100644
index b9ea8a6134..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/de.svg
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/dj.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/dj.svg
deleted file mode 100644
index 3f6b2e4f35..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/dj.svg
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/dk.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/dk.svg
deleted file mode 100644
index 51ff69feb0..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/dk.svg
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/dm.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/dm.svg
deleted file mode 100644
index 405a4b6b96..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/dm.svg
+++ /dev/null
@@ -1,152 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/do.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/do.svg
deleted file mode 100644
index 03d3f3547b..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/do.svg
+++ /dev/null
@@ -1,6745 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/dz.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/dz.svg
deleted file mode 100644
index 37df0c8bba..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/dz.svg
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ec.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ec.svg
deleted file mode 100644
index 65fd0bad2e..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ec.svg
+++ /dev/null
@@ -1,138 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ee.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ee.svg
deleted file mode 100644
index fbc9e33943..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ee.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/eg.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/eg.svg
deleted file mode 100644
index 2965b6afa0..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/eg.svg
+++ /dev/null
@@ -1,38 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/eh.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/eh.svg
deleted file mode 100644
index 4c3feba1b3..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/eh.svg
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/er.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/er.svg
deleted file mode 100644
index 86343349e3..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/er.svg
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/es-ca.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/es-ca.svg
deleted file mode 100644
index 2a50685ddb..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/es-ca.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/es-ga.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/es-ga.svg
deleted file mode 100644
index 5c55ff855b..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/es-ga.svg
+++ /dev/null
@@ -1,189 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/es.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/es.svg
deleted file mode 100644
index d7030eb292..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/es.svg
+++ /dev/null
@@ -1,547 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/et.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/et.svg
deleted file mode 100644
index 8b02f6b7ca..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/et.svg
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/eu.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/eu.svg
deleted file mode 100644
index b031d2d336..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/eu.svg
+++ /dev/null
@@ -1,28 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/fi.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/fi.svg
deleted file mode 100644
index aff1304c6b..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/fi.svg
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/fj.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/fj.svg
deleted file mode 100644
index 9d9c3029e1..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/fj.svg
+++ /dev/null
@@ -1,125 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/fk.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/fk.svg
deleted file mode 100644
index 12a34c46dc..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/fk.svg
+++ /dev/null
@@ -1,93 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/fm.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/fm.svg
deleted file mode 100644
index 791fde9929..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/fm.svg
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/fo.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/fo.svg
deleted file mode 100644
index b28915c013..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/fo.svg
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/fr.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/fr.svg
deleted file mode 100644
index f8e3ca0d57..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/fr.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ga.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ga.svg
deleted file mode 100644
index 16c81b3029..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ga.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gb-eng.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gb-eng.svg
deleted file mode 100644
index 18026d2941..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gb-eng.svg
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gb-nir.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gb-nir.svg
deleted file mode 100644
index 6d8a3a3974..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gb-nir.svg
+++ /dev/null
@@ -1,131 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gb-sct.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gb-sct.svg
deleted file mode 100644
index 6987b0886b..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gb-sct.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gb-wls.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gb-wls.svg
deleted file mode 100644
index 3931a17954..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gb-wls.svg
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gb.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gb.svg
deleted file mode 100644
index ef048dc2a1..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gb.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gd.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gd.svg
deleted file mode 100644
index cca37ba483..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gd.svg
+++ /dev/null
@@ -1,27 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ge.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ge.svg
deleted file mode 100644
index ac1d87bb49..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ge.svg
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gf.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gf.svg
deleted file mode 100644
index c00a576342..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gf.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gg.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gg.svg
deleted file mode 100644
index 2d06a9f86f..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gg.svg
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gh.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gh.svg
deleted file mode 100644
index 4b6446d645..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gh.svg
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gi.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gi.svg
deleted file mode 100644
index 39f5b2770c..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gi.svg
+++ /dev/null
@@ -1,32 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gl.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gl.svg
deleted file mode 100644
index 7a026d995f..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gl.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gm.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gm.svg
deleted file mode 100644
index b06ab6cb58..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gm.svg
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gn.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gn.svg
deleted file mode 100644
index 8f8855da4b..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gn.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gp.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gp.svg
deleted file mode 100644
index 0a5bdb0056..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gp.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gq.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gq.svg
deleted file mode 100644
index 8149406de4..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gq.svg
+++ /dev/null
@@ -1,23 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gr.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gr.svg
deleted file mode 100644
index 4bc68fc1fa..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gr.svg
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gs.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gs.svg
deleted file mode 100644
index 48f68b8b67..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gs.svg
+++ /dev/null
@@ -1,206 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- L
-
-
- E
-
-
- O
-
-
- T
-
-
- E
-
-
- R
-
-
- R
-
-
- R
-
-
- R
-
-
- R
-
-
- E
-
-
- O
-
-
- O
-
-
- A
-
-
- A
-
-
- A
-
-
- M
-
-
- P
-
-
- P
-
-
- P
-
-
- I
-
-
- T
-
-
- T
-
-
- M
-
-
- G
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gt.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gt.svg
deleted file mode 100644
index 761801ca47..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gt.svg
+++ /dev/null
@@ -1,204 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gu.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gu.svg
deleted file mode 100644
index d6f5d535ca..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gu.svg
+++ /dev/null
@@ -1,39 +0,0 @@
-
-
-
-
-
-
-
-
-
-
- G
-
-
- U
-
-
- A
-
-
- M
-
-
-
-
-
-
-
- G
-
-
- U
-
-
- A
-
-
- M
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gw.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gw.svg
deleted file mode 100644
index 064a593473..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gw.svg
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gy.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gy.svg
deleted file mode 100644
index 57eb520903..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/gy.svg
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/hk.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/hk.svg
deleted file mode 100644
index 024c070555..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/hk.svg
+++ /dev/null
@@ -1,30 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/hm.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/hm.svg
deleted file mode 100644
index 7e1f7e7e64..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/hm.svg
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/hn.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/hn.svg
deleted file mode 100644
index c7c4c4acfd..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/hn.svg
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/hr.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/hr.svg
deleted file mode 100644
index 7ea00410d5..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/hr.svg
+++ /dev/null
@@ -1,56 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ht.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ht.svg
deleted file mode 100644
index 920833a66e..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ht.svg
+++ /dev/null
@@ -1,116 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/hu.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/hu.svg
deleted file mode 100644
index 94bc29f134..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/hu.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/id.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/id.svg
deleted file mode 100644
index 6d2cf0941e..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/id.svg
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ie.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ie.svg
deleted file mode 100644
index 60448a9ded..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ie.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/il.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/il.svg
deleted file mode 100644
index 6cb4b1c1f7..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/il.svg
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/im.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/im.svg
deleted file mode 100644
index 0f487f67d7..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/im.svg
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/in.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/in.svg
deleted file mode 100644
index e6557cd01a..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/in.svg
+++ /dev/null
@@ -1,25 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/io.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/io.svg
deleted file mode 100644
index 4d809e03e6..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/io.svg
+++ /dev/null
@@ -1,140 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/iq.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/iq.svg
deleted file mode 100644
index 6b96774d97..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/iq.svg
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ir.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ir.svg
deleted file mode 100644
index 79f66324f1..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ir.svg
+++ /dev/null
@@ -1,219 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/is.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/is.svg
deleted file mode 100644
index 08d1e68383..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/is.svg
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/it.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/it.svg
deleted file mode 100644
index 615c58fb8f..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/it.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/je.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/je.svg
deleted file mode 100644
index c63ccb29ec..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/je.svg
+++ /dev/null
@@ -1,29 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/jm.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/jm.svg
deleted file mode 100644
index c261da0971..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/jm.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/jo.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/jo.svg
deleted file mode 100644
index ab1c62aaa1..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/jo.svg
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/jp.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/jp.svg
deleted file mode 100644
index dc7a64a5c7..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/jp.svg
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ke.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ke.svg
deleted file mode 100644
index 0b82f3a6c3..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ke.svg
+++ /dev/null
@@ -1,23 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/kg.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/kg.svg
deleted file mode 100644
index 71ee7b8df5..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/kg.svg
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/kh.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/kh.svg
deleted file mode 100644
index 8c888f1681..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/kh.svg
+++ /dev/null
@@ -1,61 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ki.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ki.svg
deleted file mode 100644
index bfc5ccab46..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ki.svg
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/km.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/km.svg
deleted file mode 100644
index 8f842ea8c0..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/km.svg
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/kn.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/kn.svg
deleted file mode 100644
index 4b2a2488be..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/kn.svg
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/kp.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/kp.svg
deleted file mode 100644
index 8eda6be874..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/kp.svg
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/kr.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/kr.svg
deleted file mode 100644
index 2db51b02a6..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/kr.svg
+++ /dev/null
@@ -1,24 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/kw.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/kw.svg
deleted file mode 100644
index 3d4047fff5..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/kw.svg
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ky.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ky.svg
deleted file mode 100644
index b4ae00aa86..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ky.svg
+++ /dev/null
@@ -1,70 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/kz.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/kz.svg
deleted file mode 100644
index f17bd6e0f8..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/kz.svg
+++ /dev/null
@@ -1,23 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/la.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/la.svg
deleted file mode 100644
index 1e7686a935..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/la.svg
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/lb.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/lb.svg
deleted file mode 100644
index a047b0b948..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/lb.svg
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/lc.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/lc.svg
deleted file mode 100644
index b13b8852aa..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/lc.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/li.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/li.svg
deleted file mode 100644
index cbed5cc84c..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/li.svg
+++ /dev/null
@@ -1,43 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/lk.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/lk.svg
deleted file mode 100644
index 2b112155f6..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/lk.svg
+++ /dev/null
@@ -1,22 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/lr.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/lr.svg
deleted file mode 100644
index 0ae34e7282..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/lr.svg
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ls.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ls.svg
deleted file mode 100644
index e71bb5bb70..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ls.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/lt.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/lt.svg
deleted file mode 100644
index aa96cf3236..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/lt.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/lu.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/lu.svg
deleted file mode 100644
index 6293671602..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/lu.svg
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/lv.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/lv.svg
deleted file mode 100644
index 5556de1a3d..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/lv.svg
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ly.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ly.svg
deleted file mode 100644
index fe0ed81b60..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ly.svg
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ma.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ma.svg
deleted file mode 100644
index 85c99b3b9e..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ma.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mc.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mc.svg
deleted file mode 100644
index d38822ddac..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mc.svg
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/md.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/md.svg
deleted file mode 100644
index 86b2a96149..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/md.svg
+++ /dev/null
@@ -1,71 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/me.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/me.svg
deleted file mode 100644
index 56a19ed0a0..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/me.svg
+++ /dev/null
@@ -1,118 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mf.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mf.svg
deleted file mode 100644
index 310afce407..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mf.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mg.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mg.svg
deleted file mode 100644
index f0375cc6be..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mg.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mh.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mh.svg
deleted file mode 100644
index 97f34631af..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mh.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mk.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mk.svg
deleted file mode 100644
index da2e9a4c40..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mk.svg
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ml.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ml.svg
deleted file mode 100644
index 1e4d98900c..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ml.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mm.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mm.svg
deleted file mode 100644
index 5076184c32..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mm.svg
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mn.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mn.svg
deleted file mode 100644
index 568fda088a..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mn.svg
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mo.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mo.svg
deleted file mode 100644
index 83d04ea28a..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mo.svg
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mp.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mp.svg
deleted file mode 100644
index 54a0ede9f2..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mp.svg
+++ /dev/null
@@ -1,86 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mq.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mq.svg
deleted file mode 100644
index 7a69fb5842..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mq.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mr.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mr.svg
deleted file mode 100644
index 7da23e5f4e..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mr.svg
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ms.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ms.svg
deleted file mode 100644
index d7d910d020..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ms.svg
+++ /dev/null
@@ -1,70 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mt.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mt.svg
deleted file mode 100644
index 96acc15e73..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mt.svg
+++ /dev/null
@@ -1,50 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mu.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mu.svg
deleted file mode 100644
index 773d3d59ee..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mu.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mv.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mv.svg
deleted file mode 100644
index aa5ed5333e..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mv.svg
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mw.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mw.svg
deleted file mode 100644
index a9521a08c1..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mw.svg
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mx.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mx.svg
deleted file mode 100644
index a440656807..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mx.svg
+++ /dev/null
@@ -1,378 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/my.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/my.svg
deleted file mode 100644
index 7ebe064b74..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/my.svg
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mz.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mz.svg
deleted file mode 100644
index 113a205792..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/mz.svg
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/na.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/na.svg
deleted file mode 100644
index b934fc157c..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/na.svg
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/nc.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/nc.svg
deleted file mode 100644
index 2bdf6ee5b5..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/nc.svg
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ne.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ne.svg
deleted file mode 100644
index e76e44c0bb..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ne.svg
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/nf.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/nf.svg
deleted file mode 100644
index 21495222f6..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/nf.svg
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ng.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ng.svg
deleted file mode 100644
index 57d65d380a..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ng.svg
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ni.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ni.svg
deleted file mode 100644
index 8f68d42255..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ni.svg
+++ /dev/null
@@ -1,129 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/nl.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/nl.svg
deleted file mode 100644
index 9db233dd4b..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/nl.svg
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/no.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/no.svg
deleted file mode 100644
index 08ea5728d2..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/no.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/np.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/np.svg
deleted file mode 100644
index f34ee8c638..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/np.svg
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/nr.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/nr.svg
deleted file mode 100644
index 282d80fa14..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/nr.svg
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/nu.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/nu.svg
deleted file mode 100644
index aced440dc1..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/nu.svg
+++ /dev/null
@@ -1,26 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/nz.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/nz.svg
deleted file mode 100644
index 5283a96ed4..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/nz.svg
+++ /dev/null
@@ -1,41 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/om.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/om.svg
deleted file mode 100644
index 055d1e6986..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/om.svg
+++ /dev/null
@@ -1,115 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/pa.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/pa.svg
deleted file mode 100644
index 57965b9ea2..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/pa.svg
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/pe.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/pe.svg
deleted file mode 100644
index 40b87badbb..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/pe.svg
+++ /dev/null
@@ -1,244 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/pf.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/pf.svg
deleted file mode 100644
index 94ff90cb2c..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/pf.svg
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/pg.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/pg.svg
deleted file mode 100644
index 7397754182..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/pg.svg
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ph.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ph.svg
deleted file mode 100644
index 681cf23ff5..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ph.svg
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/pk.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/pk.svg
deleted file mode 100644
index 06b6022f0c..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/pk.svg
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/pl.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/pl.svg
deleted file mode 100644
index f7c12a1843..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/pl.svg
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/pm.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/pm.svg
deleted file mode 100644
index 3d4014a414..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/pm.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/pn.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/pn.svg
deleted file mode 100644
index 47b0749a0a..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/pn.svg
+++ /dev/null
@@ -1,67 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/pr.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/pr.svg
deleted file mode 100644
index 79cf4c0991..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/pr.svg
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ps.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ps.svg
deleted file mode 100644
index 7c1ea3f9a6..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ps.svg
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/pt.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/pt.svg
deleted file mode 100644
index 425515054a..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/pt.svg
+++ /dev/null
@@ -1,57 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/pw.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/pw.svg
deleted file mode 100644
index 83bc3f71d5..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/pw.svg
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/py.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/py.svg
deleted file mode 100644
index 88f55e6f02..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/py.svg
+++ /dev/null
@@ -1,156 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/qa.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/qa.svg
deleted file mode 100644
index 0bf30ea37f..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/qa.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/re.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/re.svg
deleted file mode 100644
index 027c9f32ce..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/re.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ro.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ro.svg
deleted file mode 100644
index 994992ab66..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ro.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/rs.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/rs.svg
deleted file mode 100644
index 3270f304c4..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/rs.svg
+++ /dev/null
@@ -1,296 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ru.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ru.svg
deleted file mode 100644
index d643087430..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ru.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/rw.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/rw.svg
deleted file mode 100644
index 26e41f6ad7..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/rw.svg
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sa.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sa.svg
deleted file mode 100644
index 1cc41b80bf..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sa.svg
+++ /dev/null
@@ -1,26 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sb.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sb.svg
deleted file mode 100644
index f61bafd6a9..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sb.svg
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sc.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sc.svg
deleted file mode 100644
index 65d8943d64..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sc.svg
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sd.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sd.svg
deleted file mode 100644
index 72a729708b..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sd.svg
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/se.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/se.svg
deleted file mode 100644
index e824395ebb..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/se.svg
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sg.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sg.svg
deleted file mode 100644
index 1444e5b6ab..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sg.svg
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sh.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sh.svg
deleted file mode 100644
index 599a09d73b..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sh.svg
+++ /dev/null
@@ -1,81 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/si.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/si.svg
deleted file mode 100644
index 6de77ef473..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/si.svg
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sj.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sj.svg
deleted file mode 100644
index f4e5829735..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sj.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sk.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sk.svg
deleted file mode 100644
index fd728680b0..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sk.svg
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sl.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sl.svg
deleted file mode 100644
index 18c76d781b..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sl.svg
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sm.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sm.svg
deleted file mode 100644
index 1ed18eed6c..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sm.svg
+++ /dev/null
@@ -1,89 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- L
-
-
- I
-
-
- B
-
-
- E
-
-
- R
-
-
- T
-
-
- A
-
-
- S
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sn.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sn.svg
deleted file mode 100644
index fbbad5e026..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sn.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/so.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/so.svg
deleted file mode 100644
index 96d88a992a..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/so.svg
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sr.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sr.svg
deleted file mode 100644
index a0ca03e367..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sr.svg
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ss.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ss.svg
deleted file mode 100644
index 7e6a47ffd9..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ss.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/st.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/st.svg
deleted file mode 100644
index da5df2990d..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/st.svg
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sv.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sv.svg
deleted file mode 100644
index 65b44baeec..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sv.svg
+++ /dev/null
@@ -1,596 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sx.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sx.svg
deleted file mode 100644
index 5d9fadfa2e..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sx.svg
+++ /dev/null
@@ -1,56 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sy.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sy.svg
deleted file mode 100644
index 904dc1f65c..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sy.svg
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sz.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sz.svg
deleted file mode 100644
index b3009e4d92..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/sz.svg
+++ /dev/null
@@ -1,45 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tc.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tc.svg
deleted file mode 100644
index 1029615f55..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tc.svg
+++ /dev/null
@@ -1,74 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/td.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/td.svg
deleted file mode 100644
index e3e81ce2fd..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/td.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tf.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tf.svg
deleted file mode 100644
index 2061867c96..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tf.svg
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tg.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tg.svg
deleted file mode 100644
index 2c1fd98fd4..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tg.svg
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/th.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/th.svg
deleted file mode 100644
index 86850f5fbf..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/th.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tj.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tj.svg
deleted file mode 100644
index 853a4a4555..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tj.svg
+++ /dev/null
@@ -1,26 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tk.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tk.svg
deleted file mode 100644
index c5ff6b4cb4..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tk.svg
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tl.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tl.svg
deleted file mode 100644
index ec6d44bd13..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tl.svg
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tm.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tm.svg
deleted file mode 100644
index d856424fe6..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tm.svg
+++ /dev/null
@@ -1,203 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tn.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tn.svg
deleted file mode 100644
index d46a1cd9aa..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tn.svg
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/to.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/to.svg
deleted file mode 100644
index 201d6bc39d..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/to.svg
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tr.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tr.svg
deleted file mode 100644
index 861d4ea580..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tr.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tt.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tt.svg
deleted file mode 100644
index 87e439a07d..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tt.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tv.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tv.svg
deleted file mode 100644
index f30c8f3710..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tv.svg
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tw.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tw.svg
deleted file mode 100644
index 5f284fc612..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tw.svg
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tz.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tz.svg
deleted file mode 100644
index f993ff15d6..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/tz.svg
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ua.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ua.svg
deleted file mode 100644
index 18ebe0d49d..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ua.svg
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ug.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ug.svg
deleted file mode 100644
index d9be945945..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ug.svg
+++ /dev/null
@@ -1,30 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/um.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/um.svg
deleted file mode 100644
index 25b08ce6ab..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/um.svg
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/un.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/un.svg
deleted file mode 100644
index 1d50ea9250..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/un.svg
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/us.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/us.svg
deleted file mode 100644
index 31f90c6c3a..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/us.svg
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/uy.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/uy.svg
deleted file mode 100644
index 0194a7cb0b..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/uy.svg
+++ /dev/null
@@ -1,28 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/uz.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/uz.svg
deleted file mode 100644
index 641af1b826..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/uz.svg
+++ /dev/null
@@ -1,30 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/va.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/va.svg
deleted file mode 100644
index 7da6d3e739..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/va.svg
+++ /dev/null
@@ -1,479 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/vc.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/vc.svg
deleted file mode 100644
index ee72f781ac..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/vc.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ve.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ve.svg
deleted file mode 100644
index 205fe848a3..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ve.svg
+++ /dev/null
@@ -1,26 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/vg.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/vg.svg
deleted file mode 100644
index 9572de3480..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/vg.svg
+++ /dev/null
@@ -1,128 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/vi.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/vi.svg
deleted file mode 100644
index 2740f24ffa..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/vi.svg
+++ /dev/null
@@ -1,28 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/vn.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/vn.svg
deleted file mode 100644
index 6b158145ad..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/vn.svg
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/vu.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/vu.svg
deleted file mode 100644
index 397d30e60b..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/vu.svg
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/wf.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/wf.svg
deleted file mode 100644
index bb726a7c2e..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/wf.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ws.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ws.svg
deleted file mode 100644
index 155ad7b558..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ws.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/xk.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/xk.svg
deleted file mode 100644
index 69146ca449..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/xk.svg
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ye.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ye.svg
deleted file mode 100644
index d49d2c414e..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/ye.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/yt.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/yt.svg
deleted file mode 100644
index 7bf3837379..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/yt.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/za.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/za.svg
deleted file mode 100644
index 9bae96fe3e..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/za.svg
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/zm.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/zm.svg
deleted file mode 100644
index 105f1076ad..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/zm.svg
+++ /dev/null
@@ -1,27 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/zw.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/zw.svg
deleted file mode 100644
index ca5b7a20f9..0000000000
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/libs/flag-icon/flags/1x1/zw.svg
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor/AbpIdentityBlazorMessageLocalizerHelper.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/AbpBlazorMessageLocalizerHelper.cs
similarity index 84%
rename from modules/identity/src/Volo.Abp.Identity.Blazor/AbpIdentityBlazorMessageLocalizerHelper.cs
rename to framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/AbpBlazorMessageLocalizerHelper.cs
index 5d858843b8..e47e7f611c 100644
--- a/modules/identity/src/Volo.Abp.Identity.Blazor/AbpIdentityBlazorMessageLocalizerHelper.cs
+++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/AbpBlazorMessageLocalizerHelper.cs
@@ -3,13 +3,13 @@ using System.Linq;
using JetBrains.Annotations;
using Microsoft.Extensions.Localization;
-namespace Volo.Abp.Identity.Blazor
+namespace Volo.Abp.AspNetCore.Components.WebAssembly
{
- public class AbpIdentityBlazorMessageLocalizerHelper
+ public class AbpBlazorMessageLocalizerHelper
{
private readonly IStringLocalizer stringLocalizer;
- public AbpIdentityBlazorMessageLocalizerHelper(IStringLocalizer stringLocalizer)
+ public AbpBlazorMessageLocalizerHelper(IStringLocalizer stringLocalizer)
{
this.stringLocalizer = stringLocalizer;
}
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/BundleContributer.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/BundleContributer.cs
new file mode 100644
index 0000000000..693bf8f575
--- /dev/null
+++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/BundleContributer.cs
@@ -0,0 +1,15 @@
+using Volo.Abp.Bundling;
+
+namespace Volo.Abp.AspNetCore.Components.WebAssembly
+{
+ public class BundleContributer : BaseBundleContributer
+ {
+ public override string[] GetScripts()
+ {
+ return new string[]
+ {
+ "_content/Volo.Abp.AspNetCore.Components.WebAssembly/libs/abp/js/abp.js",
+ };
+ }
+ }
+}
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/de-DE.json b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/de-DE.json
new file mode 100644
index 0000000000..3b1f12c29d
--- /dev/null
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/de-DE.json
@@ -0,0 +1,12 @@
+{
+ "culture": "de-DE",
+ "texts": {
+ "GivenTenantIsNotAvailable": "Der angegebene Mandant ist nicht verfügbar: {0}",
+ "Tenant": "Mandant",
+ "Switch": "wechseln",
+ "Name": "Name",
+ "SwitchTenantHint": "Lassen Sie das Namensfeld leer, um zur Host-Seite zu wechseln.",
+ "SwitchTenant": "Mandant wechseln",
+ "NotSelected": "Nicht ausgewählt"
+ }
+}
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo.Abp.AspNetCore.Mvc.csproj b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo.Abp.AspNetCore.Mvc.csproj
index 3e691f57f3..a018dbbffd 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo.Abp.AspNetCore.Mvc.csproj
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo.Abp.AspNetCore.Mvc.csproj
@@ -28,8 +28,8 @@
-
+
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcModule.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcModule.cs
index 715ec0a0ce..61d73cb48b 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcModule.cs
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcModule.cs
@@ -35,6 +35,7 @@ using Volo.Abp.Http;
using Volo.Abp.DynamicProxy;
using Volo.Abp.GlobalFeatures;
using Volo.Abp.Http.Modeling;
+using Volo.Abp.Json;
using Volo.Abp.Localization;
using Volo.Abp.Modularity;
using Volo.Abp.UI;
@@ -115,11 +116,6 @@ namespace Volo.Abp.AspNetCore.Mvc
);
var mvcBuilder = context.Services.AddMvc()
- .AddNewtonsoftJson(options =>
- {
- options.SerializerSettings.ContractResolver =
- new AbpMvcJsonContractResolver(context.Services);
- })
.AddRazorRuntimeCompilation()
.AddDataAnnotationsLocalization(options =>
{
@@ -140,6 +136,8 @@ namespace Volo.Abp.AspNetCore.Mvc
})
.AddViewLocalization(); //TODO: How to configure from the application? Also, consider to move to a UI module since APIs does not care about it.
+ mvcCoreBuilder.AddAbpHybridJson();
+
Configure(options =>
{
options.FileProviders.Add(
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpHybridJsonInputFormatter.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpHybridJsonInputFormatter.cs
new file mode 100644
index 0000000000..bd2ade69ad
--- /dev/null
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpHybridJsonInputFormatter.cs
@@ -0,0 +1,39 @@
+using System.Text;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Mvc.Formatters;
+using Microsoft.Extensions.DependencyInjection;
+using Volo.Abp.Json.SystemTextJson;
+
+namespace Volo.Abp.AspNetCore.Mvc.Json
+{
+ public class AbpHybridJsonInputFormatter : TextInputFormatter, IInputFormatterExceptionPolicy
+ {
+ public AbpHybridJsonInputFormatter()
+ {
+ SupportedEncodings.Add(UTF8EncodingWithoutBOM);
+ SupportedEncodings.Add(UTF16EncodingLittleEndian);
+
+ SupportedMediaTypes.Add(MediaTypeHeaderValues.ApplicationJson);
+ SupportedMediaTypes.Add(MediaTypeHeaderValues.TextJson);
+ SupportedMediaTypes.Add(MediaTypeHeaderValues.ApplicationAnyJsonSyntax);
+ }
+
+ public async override Task ReadRequestBodyAsync(InputFormatterContext context, Encoding encoding)
+ {
+ return await GetTextInputFormatter(context).ReadRequestBodyAsync(context, encoding);
+ }
+
+ protected virtual TextInputFormatter GetTextInputFormatter(InputFormatterContext context)
+ {
+ var typesMatcher = context.HttpContext.RequestServices.GetRequiredService();
+ if (!typesMatcher.Match(context.ModelType))
+ {
+ return context.HttpContext.RequestServices.GetRequiredService();
+ }
+
+ return context.HttpContext.RequestServices.GetRequiredService();
+ }
+
+ public virtual InputFormatterExceptionPolicy ExceptionPolicy => InputFormatterExceptionPolicy.MalformedInputExceptions;
+ }
+}
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpHybridJsonOutputFormatter.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpHybridJsonOutputFormatter.cs
new file mode 100644
index 0000000000..1507457f08
--- /dev/null
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpHybridJsonOutputFormatter.cs
@@ -0,0 +1,37 @@
+using System.Text;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Mvc.Formatters;
+using Microsoft.Extensions.DependencyInjection;
+using Volo.Abp.Json.SystemTextJson;
+
+namespace Volo.Abp.AspNetCore.Mvc.Json
+{
+ public class AbpHybridJsonOutputFormatter : TextOutputFormatter
+ {
+ public AbpHybridJsonOutputFormatter()
+ {
+ SupportedEncodings.Add(Encoding.UTF8);
+ SupportedEncodings.Add(Encoding.Unicode);
+
+ SupportedMediaTypes.Add(MediaTypeHeaderValues.ApplicationJson);
+ SupportedMediaTypes.Add(MediaTypeHeaderValues.TextJson);
+ SupportedMediaTypes.Add(MediaTypeHeaderValues.ApplicationAnyJsonSyntax);
+ }
+
+ public async override Task WriteResponseBodyAsync(OutputFormatterWriteContext context, Encoding selectedEncoding)
+ {
+ await GetTextInputFormatter(context).WriteResponseBodyAsync(context, selectedEncoding);
+ }
+
+ protected virtual TextOutputFormatter GetTextInputFormatter(OutputFormatterWriteContext context)
+ {
+ var typesMatcher = context.HttpContext.RequestServices.GetRequiredService();
+ if (!typesMatcher.Match(context.ObjectType))
+ {
+ return context.HttpContext.RequestServices.GetRequiredService();
+ }
+
+ return context.HttpContext.RequestServices.GetRequiredService();
+ }
+ }
+}
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpJsonOptionsSetup.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpJsonOptionsSetup.cs
new file mode 100644
index 0000000000..4b63828997
--- /dev/null
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpJsonOptionsSetup.cs
@@ -0,0 +1,28 @@
+using System;
+using System.Text.Json;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Options;
+using Volo.Abp.Json.SystemTextJson.JsonConverters;
+
+namespace Volo.Abp.AspNetCore.Mvc.Json
+{
+ public class AbpJsonOptionsSetup : IConfigureOptions
+ {
+ protected IServiceProvider ServiceProvider { get; }
+
+ public AbpJsonOptionsSetup(IServiceProvider serviceProvider)
+ {
+ ServiceProvider = serviceProvider;
+ }
+
+ public void Configure(JsonOptions options)
+ {
+ options.JsonSerializerOptions.ReadCommentHandling = JsonCommentHandling.Skip;
+ options.JsonSerializerOptions.AllowTrailingCommas = true;
+
+ options.JsonSerializerOptions.Converters.Add(ServiceProvider.GetRequiredService());
+ options.JsonSerializerOptions.Converters.Add(ServiceProvider.GetRequiredService());
+ }
+ }
+}
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpMvcJsonContractResolver.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpMvcJsonContractResolver.cs
index 695212f563..2021afd492 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpMvcJsonContractResolver.cs
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpMvcJsonContractResolver.cs
@@ -1,28 +1,32 @@
-using Microsoft.Extensions.DependencyInjection;
+using System;
+using System.Reflection;
+using Microsoft.Extensions.DependencyInjection;
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
-using System;
-using System.Reflection;
+using Volo.Abp.DependencyInjection;
using Volo.Abp.Json.Newtonsoft;
using Volo.Abp.Reflection;
using Volo.Abp.Timing;
namespace Volo.Abp.AspNetCore.Mvc.Json
{
- public class AbpMvcJsonContractResolver : DefaultContractResolver
+ public class AbpMvcJsonContractResolver : DefaultContractResolver, ITransientDependency
{
private readonly Lazy _dateTimeConverter;
- public AbpMvcJsonContractResolver(IServiceCollection services)
+ public AbpMvcJsonContractResolver(IServiceProvider serviceProvider)
{
- _dateTimeConverter = services.GetServiceLazy();
+ _dateTimeConverter = new Lazy(
+ serviceProvider.GetRequiredService,
+ true
+ );
NamingStrategy = new CamelCaseNamingStrategy();
}
protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
{
- JsonProperty property = base.CreateProperty(member, memberSerialization);
+ var property = base.CreateProperty(member, memberSerialization);
ModifyProperty(member, property);
@@ -40,7 +44,6 @@ namespace Volo.Abp.AspNetCore.Mvc.Json
{
property.Converter = _dateTimeConverter.Value;
}
-
}
}
}
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpMvcNewtonsoftJsonOptionsSetup.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpMvcNewtonsoftJsonOptionsSetup.cs
new file mode 100644
index 0000000000..48a09e2426
--- /dev/null
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/AbpMvcNewtonsoftJsonOptionsSetup.cs
@@ -0,0 +1,22 @@
+using System;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Options;
+
+namespace Volo.Abp.AspNetCore.Mvc.Json
+{
+ public class AbpMvcNewtonsoftJsonOptionsSetup : IConfigureOptions
+ {
+ protected IServiceProvider ServiceProvider { get; }
+
+ public AbpMvcNewtonsoftJsonOptionsSetup(IServiceProvider serviceProvider)
+ {
+ ServiceProvider = serviceProvider;
+ }
+
+ public void Configure(MvcNewtonsoftJsonOptions options)
+ {
+ options.SerializerSettings.ContractResolver = ServiceProvider.GetRequiredService();
+ }
+ }
+}
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/MediaTypeHeaderValues.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/MediaTypeHeaderValues.cs
new file mode 100644
index 0000000000..d1f1b34b1a
--- /dev/null
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/MediaTypeHeaderValues.cs
@@ -0,0 +1,22 @@
+using Microsoft.Net.Http.Headers;
+
+namespace Volo.Abp.AspNetCore.Mvc.Json
+{
+ ///
+ /// https://github.com/dotnet/aspnetcore/blob/master/src/Mvc/Mvc.NewtonsoftJson/src/MediaTypeHeaderValues.cs
+ ///
+ internal static class MediaTypeHeaderValues
+ {
+ public static readonly MediaTypeHeaderValue ApplicationJson = MediaTypeHeaderValue.Parse("application/json").CopyAsReadOnly();
+
+ public static readonly MediaTypeHeaderValue TextJson = MediaTypeHeaderValue.Parse("text/json").CopyAsReadOnly();
+
+ public static readonly MediaTypeHeaderValue ApplicationAnyJsonSyntax = MediaTypeHeaderValue.Parse("application/*+json").CopyAsReadOnly();
+
+ public static readonly MediaTypeHeaderValue ApplicationXml = MediaTypeHeaderValue.Parse("application/xml").CopyAsReadOnly();
+
+ public static readonly MediaTypeHeaderValue TextXml = MediaTypeHeaderValue.Parse("text/xml").CopyAsReadOnly();
+
+ public static readonly MediaTypeHeaderValue ApplicationAnyXmlSyntax = MediaTypeHeaderValue.Parse("application/*+xml").CopyAsReadOnly();
+ }
+}
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/MvcCoreBuilderExtensions.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/MvcCoreBuilderExtensions.cs
new file mode 100644
index 0000000000..9ff3ac21b0
--- /dev/null
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/MvcCoreBuilderExtensions.cs
@@ -0,0 +1,83 @@
+using System.Buffers;
+using System.Text.Json;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.AspNetCore.Mvc.Formatters;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.DependencyInjection.Extensions;
+using Microsoft.Extensions.Options;
+using System.Text.Encodings.Web;
+using Microsoft.Extensions.Logging;
+using Microsoft.Extensions.ObjectPool;
+
+namespace Volo.Abp.AspNetCore.Mvc.Json
+{
+ public static class MvcCoreBuilderExtensions
+ {
+ public static IMvcCoreBuilder AddAbpHybridJson(this IMvcCoreBuilder builder)
+ {
+ //SystemTextJsonInputFormatter
+ builder.Services.AddTransient(provider =>
+ {
+ var jsonOptions = provider.GetRequiredService>();
+ var logger = provider.GetRequiredService().CreateLogger();
+ return new SystemTextJsonInputFormatter(jsonOptions.Value, logger);
+ });
+
+ builder.Services.TryAddTransient();
+ //NewtonsoftJsonInputFormatter
+ builder.Services.AddTransient(provider =>
+ {
+ var jsonOptions = provider.GetRequiredService>().Value;
+
+ return new NewtonsoftJsonInputFormatter(
+ provider.GetRequiredService().CreateLogger(),
+ jsonOptions.SerializerSettings,
+ provider.GetRequiredService>(),
+ provider.GetRequiredService(),
+ provider.GetRequiredService>().Value,
+ jsonOptions);
+ });
+
+ //SystemTextJsonOutputFormatter
+ builder.Services.AddTransient(provider =>
+ {
+ var jsonSerializerOptions = provider.GetRequiredService>().Value.JsonSerializerOptions;
+ if (jsonSerializerOptions.Encoder is null)
+ {
+ // If the user hasn't explicitly configured the encoder, use the less strict encoder that does not encode all non-ASCII characters.
+ jsonSerializerOptions = new JsonSerializerOptions(jsonSerializerOptions)
+ {
+ Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping,
+ };
+ }
+ return new SystemTextJsonOutputFormatter(jsonSerializerOptions);
+ });
+
+ //NewtonsoftJsonOutputFormatter
+ builder.Services.AddTransient(provider =>
+ {
+ var jsonOptions = provider.GetRequiredService>().Value;
+ return new NewtonsoftJsonOutputFormatter(
+ jsonOptions.SerializerSettings,
+ provider.GetRequiredService>(),
+ provider.GetRequiredService>().Value);
+ });
+
+ builder.Services.TryAddEnumerable(ServiceDescriptor.Transient, AbpJsonOptionsSetup>());
+ builder.Services.TryAddEnumerable(ServiceDescriptor.Transient, AbpMvcNewtonsoftJsonOptionsSetup>());
+
+ builder.Services.Configure(options =>
+ {
+ options.InputFormatters.RemoveType();
+ options.InputFormatters.RemoveType();
+ options.InputFormatters.Add(new AbpHybridJsonInputFormatter());
+
+ options.OutputFormatters.RemoveType();
+ options.OutputFormatters.RemoveType();
+ options.OutputFormatters.Add(new AbpHybridJsonOutputFormatter());
+ });
+
+ return builder;
+ }
+ }
+}
diff --git a/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditPropertySetter.cs b/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditPropertySetter.cs
index 1863c8f938..841a7f63de 100644
--- a/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditPropertySetter.cs
+++ b/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditPropertySetter.cs
@@ -48,7 +48,7 @@ namespace Volo.Abp.Auditing
if (objectWithCreationTime.CreationTime == default)
{
- objectWithCreationTime.CreationTime = Clock.Now;
+ ObjectHelper.TrySetProperty(objectWithCreationTime, x => x.CreationTime, () => Clock.Now);
}
}
@@ -82,7 +82,7 @@ namespace Volo.Abp.Auditing
return;
}
- mayHaveCreatorObject.CreatorId = CurrentUser.Id;
+ ObjectHelper.TrySetProperty(mayHaveCreatorObject, x => x.CreatorId, () => CurrentUser.Id);
}
else if (targetObject is IMustHaveCreator mustHaveCreatorObject)
{
@@ -91,7 +91,7 @@ namespace Volo.Abp.Auditing
return;
}
- mustHaveCreatorObject.CreatorId = CurrentUser.Id.Value;
+ ObjectHelper.TrySetProperty(mustHaveCreatorObject, x => x.CreatorId, () => CurrentUser.Id.Value);
}
}
diff --git a/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditingContractResolver.cs b/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditingContractResolver.cs
index e6d03bf707..a88de55aea 100644
--- a/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditingContractResolver.cs
+++ b/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditingContractResolver.cs
@@ -1,5 +1,6 @@
-using System;
+using System;
using System.Collections.Generic;
+using System.Linq;
using System.Reflection;
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
@@ -19,18 +20,21 @@ namespace Volo.Abp.Auditing
{
var property = base.CreateProperty(member, memberSerialization);
- if (member.IsDefined(typeof(DisableAuditingAttribute)) || member.IsDefined(typeof(JsonIgnoreAttribute)))
+ if (_ignoredTypes.Any(ignoredType => ignoredType.GetTypeInfo().IsAssignableFrom(property.PropertyType)))
{
property.ShouldSerialize = instance => false;
+ return property;
}
- foreach (var ignoredType in _ignoredTypes)
+ if (member.DeclaringType != null && (member.DeclaringType.IsDefined(typeof(DisableAuditingAttribute)) || member.DeclaringType.IsDefined(typeof(JsonIgnoreAttribute))))
{
- if (ignoredType.GetTypeInfo().IsAssignableFrom(property.PropertyType))
- {
- property.ShouldSerialize = instance => false;
- break;
- }
+ property.ShouldSerialize = instance => false;
+ return property;
+ }
+
+ if (member.IsDefined(typeof(DisableAuditingAttribute)) || member.IsDefined(typeof(JsonIgnoreAttribute)))
+ {
+ property.ShouldSerialize = instance => false;
}
return property;
diff --git a/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/IHasCreationTime.cs b/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/IHasCreationTime.cs
index 58e64cabef..07e9a7525b 100644
--- a/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/IHasCreationTime.cs
+++ b/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/IHasCreationTime.cs
@@ -10,6 +10,6 @@ namespace Volo.Abp.Auditing
///
/// Creation time.
///
- DateTime CreationTime { get; set; }
+ DateTime CreationTime { get; }
}
-}
\ No newline at end of file
+}
diff --git a/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/IMayHaveCreator.cs b/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/IMayHaveCreator.cs
index 7960827d77..4fb4f9f49d 100644
--- a/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/IMayHaveCreator.cs
+++ b/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/IMayHaveCreator.cs
@@ -9,7 +9,7 @@ namespace Volo.Abp.Auditing
/// Reference to the creator.
///
[CanBeNull]
- TCreator Creator { get; set; }
+ TCreator Creator { get; }
}
///
@@ -20,6 +20,6 @@ namespace Volo.Abp.Auditing
///
/// Id of the creator.
///
- Guid? CreatorId { get; set; }
+ Guid? CreatorId { get; }
}
-}
\ No newline at end of file
+}
diff --git a/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/IMustHaveCreator.cs b/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/IMustHaveCreator.cs
index 87671f97d6..14c6050dcd 100644
--- a/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/IMustHaveCreator.cs
+++ b/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/IMustHaveCreator.cs
@@ -12,7 +12,7 @@ namespace Volo.Abp.Auditing
/// Reference to the creator.
///
[NotNull]
- TCreator Creator { get; set; }
+ TCreator Creator { get; }
}
///
@@ -23,6 +23,6 @@ namespace Volo.Abp.Auditing
///
/// Id of the creator.
///
- Guid CreatorId { get; set; }
+ Guid CreatorId { get; }
}
-}
\ No newline at end of file
+}
diff --git a/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/JsonNetAuditSerializer.cs b/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/JsonNetAuditSerializer.cs
index b86df6b6c8..b1ce95675b 100644
--- a/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/JsonNetAuditSerializer.cs
+++ b/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/JsonNetAuditSerializer.cs
@@ -41,4 +41,4 @@ namespace Volo.Abp.Auditing
return _sharedJsonSerializerSettings;
}
}
-}
\ No newline at end of file
+}
diff --git a/framework/src/Volo.Abp.BlazoriseUI/AbpBlazoriseModule.cs b/framework/src/Volo.Abp.BlazoriseUI/AbpBlazoriseModule.cs
index 716f36b1ea..7ab435a34e 100644
--- a/framework/src/Volo.Abp.BlazoriseUI/AbpBlazoriseModule.cs
+++ b/framework/src/Volo.Abp.BlazoriseUI/AbpBlazoriseModule.cs
@@ -1,4 +1,5 @@
using Blazorise;
+using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.AspNetCore.Components.WebAssembly;
using Volo.Abp.Modularity;
@@ -18,6 +19,8 @@ namespace Volo.Abp.BlazoriseUI
{
context.Services
.AddBlazorise();
+
+ context.Services.AddSingleton(typeof(AbpBlazorMessageLocalizerHelper<>));
}
}
}
diff --git a/framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs b/framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs
index ffd93e6954..57337f0155 100644
--- a/framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs
+++ b/framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs
@@ -204,7 +204,7 @@ namespace Volo.Abp.BlazoriseUI
EditingEntity = new TUpdateViewModel();
}
- protected async override Task OnInitializedAsync()
+ protected override async Task OnInitializedAsync()
{
await SetBreadcrumbItemsAsync();
await SetPermissionsAsync();
diff --git a/framework/src/Volo.Abp.BlazoriseUI/BundleContributer.cs b/framework/src/Volo.Abp.BlazoriseUI/BundleContributer.cs
new file mode 100644
index 0000000000..0e72dc1e36
--- /dev/null
+++ b/framework/src/Volo.Abp.BlazoriseUI/BundleContributer.cs
@@ -0,0 +1,26 @@
+using Volo.Abp.Bundling;
+
+namespace Volo.Abp.BlazoriseUI
+{
+ public class BundleContributer : BaseBundleContributer
+ {
+ public override string[] GetStyles()
+ {
+ return new string[]
+ {
+ "_content/Blazorise/blazorise.css",
+ "_content/Blazorise.Bootstrap/blazorise.bootstrap.css",
+ "_content/Blazorise.Snackbar/blazorise.snackbar.css"
+ };
+ }
+
+ public override string[] GetScripts()
+ {
+ return new string[]
+ {
+ "_content/Blazorise/blazorise.js",
+ "_content/Blazorise.Bootstrap/blazorise.bootstrap.js"
+ };
+ }
+ }
+}
diff --git a/framework/src/Volo.Abp.BlazoriseUI/Components/UiMessageAlert.razor b/framework/src/Volo.Abp.BlazoriseUI/Components/UiMessageAlert.razor
index cd8fd5cada..35f50dea6c 100644
--- a/framework/src/Volo.Abp.BlazoriseUI/Components/UiMessageAlert.razor
+++ b/framework/src/Volo.Abp.BlazoriseUI/Components/UiMessageAlert.razor
@@ -9,16 +9,18 @@
@if ( ShowMessageIcon )
{
-
+
}
- @Message
+
+ @Message
+
@if ( IsConfirmation )
{
-
+
@if ( Options?.CancelButtonIcon != null )
{
diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/AbpCliCoreModule.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/AbpCliCoreModule.cs
index 29238a3e35..d4d1d1d22e 100644
--- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/AbpCliCoreModule.cs
+++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/AbpCliCoreModule.cs
@@ -37,6 +37,7 @@ namespace Volo.Abp.Cli
options.Commands["switch-to-nightly"] = typeof(SwitchToNightlyCommand);
options.Commands["translate"] = typeof(TranslateCommand);
options.Commands["build"] = typeof(BuildCommand);
+ options.Commands["bundle"] = typeof(BundleCommand);
});
}
}
diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Bundling/BundleTypeDefinition.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Bundling/BundleTypeDefinition.cs
new file mode 100644
index 0000000000..5fc9ecadeb
--- /dev/null
+++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Bundling/BundleTypeDefinition.cs
@@ -0,0 +1,10 @@
+using System;
+
+namespace Volo.Abp.Cli.Bundling
+{
+ internal class BundleTypeDefinition
+ {
+ public int Level { get; set; }
+ public Type BundleContributerType { get; set; }
+ }
+}
diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Bundling/BundlingException.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Bundling/BundlingException.cs
new file mode 100644
index 0000000000..31f40a2cd7
--- /dev/null
+++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Bundling/BundlingException.cs
@@ -0,0 +1,12 @@
+using System;
+
+namespace Volo.Abp.Cli.Bundling
+{
+ public class BundlingException : Exception
+ {
+ public BundlingException(string message) : base(message)
+ {
+
+ }
+ }
+}
diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Bundling/BundlingService.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Bundling/BundlingService.cs
new file mode 100644
index 0000000000..3057e81002
--- /dev/null
+++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Bundling/BundlingService.cs
@@ -0,0 +1,245 @@
+using Microsoft.CodeAnalysis.CSharp;
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Reflection;
+using System.Text;
+using System.Threading.Tasks;
+using System.Xml;
+using Volo.Abp.Bundling;
+using Volo.Abp.Cli.Build;
+using Volo.Abp.DependencyInjection;
+using Volo.Abp.Modularity;
+
+namespace Volo.Abp.Cli.Bundling
+{
+ public class BundlingService : IBundlingService, ITransientDependency
+ {
+ const string StylePlaceholderStart = "";
+ const string StylePlaceholderEnd = "";
+ const string ScriptPlaceholderStart = "";
+ const string ScriptPlaceholderEnd = "";
+ const string SupportedWebAssemblyProjectType = "Microsoft.NET.Sdk.BlazorWebAssembly";
+
+ public IDotNetProjectBuilder DotNetProjectBuilder { get; set; }
+
+ public async Task BundleAsync(string directory, bool forceBuild)
+ {
+ var projectFiles = Directory.GetFiles(directory, "*.csproj");
+ if (!projectFiles.Any())
+ {
+ throw new BundlingException("No project file found in the directory");
+ }
+
+ var projectFilePath = projectFiles[0];
+
+ if (forceBuild)
+ {
+ var projects = new List()
+ {
+ new DotNetProjectInfo(string.Empty, projectFilePath, true)
+ };
+ DotNetProjectBuilder.Build(projects, string.Empty);
+ }
+
+ var frameworkVersion = GetTargetFrameworkVersion(projectFilePath);
+ var assemblyFilePath = GetAssemblyFilePath(directory, frameworkVersion, Path.GetFileNameWithoutExtension(projectFilePath));
+ var startupModule = GetStartupModule(assemblyFilePath);
+
+ var bundleDefinitions = new List();
+ FindBundleContributersRecursively(startupModule, 0, bundleDefinitions);
+ bundleDefinitions = bundleDefinitions.OrderByDescending(t => t.Level).ToList();
+
+ var styleDefinitons = GenerateStyleDefinitions(bundleDefinitions);
+ var scriptDefinitions = GenerateScriptDefinitions(bundleDefinitions);
+
+ await UpdateDependenciesInHtmlFileAsync(directory, styleDefinitons, scriptDefinitions);
+ }
+
+ protected virtual async Task UpdateDependenciesInHtmlFileAsync(string directory, string styleDefinitions, string scriptDefinitions)
+ {
+ var htmlFilePath = Path.Combine(directory, "wwwroot", "index.html");
+ if (!File.Exists(htmlFilePath))
+ {
+ throw new BundlingException($"index.html file could not be found in the following path:{htmlFilePath}");
+ }
+
+ Encoding fileEncoding;
+ string content;
+ using (var reader = new StreamReader(htmlFilePath, true))
+ {
+ fileEncoding = reader.CurrentEncoding;
+ content = await reader.ReadToEndAsync();
+ }
+
+ content = UpdatePlaceholders(content, StylePlaceholderStart, StylePlaceholderEnd, styleDefinitions);
+ content = UpdatePlaceholders(content, ScriptPlaceholderStart, ScriptPlaceholderEnd, scriptDefinitions);
+
+ using var writer = new StreamWriter(htmlFilePath, false, fileEncoding);
+ await writer.WriteAsync(content);
+ await writer.FlushAsync();
+ }
+
+ private string UpdatePlaceholders(string content, string placeholderStart, string placeholderEnd, string definitions)
+ {
+ var placeholderStartIndex = content.IndexOf(placeholderStart);
+ var placeholderEndIndex = content.IndexOf(placeholderEnd);
+ var updatedContent = content.Remove(placeholderStartIndex, (placeholderEndIndex + placeholderEnd.Length) - placeholderStartIndex);
+ return updatedContent.Insert(placeholderStartIndex, definitions);
+ }
+
+ private string GenerateStyleDefinitions(List bundleDefinitions)
+ {
+ var styles = new List();
+ foreach (var bundleDefinition in bundleDefinitions)
+ {
+ var contributer = CreateContributerInstance(bundleDefinition.BundleContributerType);
+ contributer.AddStyles(styles);
+ }
+
+ var builder = new StringBuilder();
+ builder.AppendLine($"{StylePlaceholderStart}");
+ foreach (var style in styles)
+ {
+ if (style.AdditionalProperties != null && style.AdditionalProperties.Any())
+ {
+ builder.Append($"\t ");
+ }
+ else
+ {
+ builder.AppendLine($"\t ");
+ }
+ }
+ builder.Append($"\t{StylePlaceholderEnd}");
+
+ return builder.ToString();
+ }
+
+ private string GenerateScriptDefinitions(List bundleDefinitions)
+ {
+ var scripts = new List
+ {
+ new BundleDefinition("_framework/blazor.webassembly.js")
+ };
+ foreach (var bundleDefinition in bundleDefinitions)
+ {
+ var contributer = CreateContributerInstance(bundleDefinition.BundleContributerType);
+ contributer.AddScripts(scripts);
+ }
+
+ var builder = new StringBuilder();
+ builder.AppendLine($"{ScriptPlaceholderStart}");
+ foreach (var script in scripts)
+ {
+ if (script.AdditionalProperties != null && script.AdditionalProperties.Any())
+ {
+ builder.Append($"\t");
+ }
+ else
+ {
+ builder.AppendLine($"\t");
+ }
+ }
+ builder.Append($"\t{ScriptPlaceholderEnd}");
+
+ return builder.ToString();
+ }
+
+ private IBundleContributer CreateContributerInstance(Type bundleContributerType)
+ {
+ var instance = Activator.CreateInstance(bundleContributerType);
+ return instance.As();
+ }
+
+ private void FindBundleContributersRecursively(Type module, int level, List bundleDefinitions)
+ {
+ var dependencyDescriptors = module
+ .GetCustomAttributes()
+ .OfType();
+
+ var bundleContributer = module.Assembly.GetTypes().SingleOrDefault(t => t.IsAssignableTo());
+ if (bundleContributer != null)
+ {
+ var definition = bundleDefinitions.SingleOrDefault(t => t.BundleContributerType == bundleContributer);
+ if (definition != null)
+ {
+ if (definition.Level < level)
+ {
+ definition.Level = level;
+ }
+ }
+ else
+ {
+ bundleDefinitions.Add(new BundleTypeDefinition
+ {
+ Level = level,
+ BundleContributerType = bundleContributer
+ });
+ }
+ }
+
+ foreach (var descriptor in dependencyDescriptors)
+ {
+ foreach (var dependedModuleType in descriptor.GetDependedTypes())
+ {
+ FindBundleContributersRecursively(dependedModuleType, level + 1, bundleDefinitions);
+ }
+ }
+ }
+
+ private Type GetStartupModule(string assemblyPath)
+ {
+ var assembly = Assembly.LoadFrom(assemblyPath);
+ return assembly.GetTypes().SingleOrDefault(IsAbpModule);
+
+ static bool IsAbpModule(Type type)
+ {
+ var typeInfo = type.GetTypeInfo();
+
+ return
+ typeInfo.IsClass &&
+ !typeInfo.IsAbstract &&
+ !typeInfo.IsGenericType &&
+ typeof(IAbpModule).GetTypeInfo().IsAssignableFrom(type);
+ }
+ }
+
+ private string GetFrameworkFolderPath(string projectDirectory, string frameworkVersion)
+ {
+ return Path.Combine(projectDirectory, "bin", "Debug", frameworkVersion, "wwwroot", "_framework"); ;
+ }
+
+ private string GetTargetFrameworkVersion(string projectFilePath)
+ {
+ var document = new XmlDocument();
+ document.Load(projectFilePath);
+ var sdk = document.DocumentElement.GetAttribute("Sdk");
+ if (sdk == SupportedWebAssemblyProjectType)
+ {
+ var frameworkVersion = document.SelectSingleNode("//TargetFramework").InnerText;
+ return frameworkVersion;
+ }
+ else
+ {
+ throw new BundlingException($"Unsupported project type. Project type must be {SupportedWebAssemblyProjectType}.");
+ }
+ }
+
+ private string GetAssemblyFilePath(string directory, string frameworkVersion, string projectFileName)
+ {
+ var outputDirectory = GetFrameworkFolderPath(directory, frameworkVersion);
+ return Path.Combine(outputDirectory, projectFileName + ".dll");
+ }
+ }
+}
diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Bundling/IBundlingService.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Bundling/IBundlingService.cs
new file mode 100644
index 0000000000..817735ee20
--- /dev/null
+++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Bundling/IBundlingService.cs
@@ -0,0 +1,9 @@
+using System.Threading.Tasks;
+
+namespace Volo.Abp.Cli.Bundling
+{
+ public interface IBundlingService
+ {
+ Task BundleAsync(string directory, bool forceBuild);
+ }
+}
diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/AddModuleCommand.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/AddModuleCommand.cs
index 42a8d76b98..5b4180d989 100644
--- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/AddModuleCommand.cs
+++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/AddModuleCommand.cs
@@ -36,10 +36,12 @@ namespace Volo.Abp.Cli.Commands
);
}
- var withSourceCode = commandLineArgs.Options.ContainsKey(Options.SourceCode.Long);
+ var newTemplate = commandLineArgs.Options.ContainsKey(Options.NewTemplate.Long);
+ var newProTemplate = commandLineArgs.Options.ContainsKey(Options.NewProTemplate.Long);
+ var withSourceCode = newTemplate || newProTemplate || commandLineArgs.Options.ContainsKey(Options.SourceCode.Long);
var addSourceCodeToSolutionFile = withSourceCode && commandLineArgs.Options.ContainsKey("add-to-solution-file");
- var skipDbMigrations = Convert.ToBoolean(
+ var skipDbMigrations = newTemplate || newProTemplate || Convert.ToBoolean(
commandLineArgs.Options.GetOrNull(Options.DbMigrations.Skip) ?? "false");
var solutionFile = GetSolutionFile(commandLineArgs);
@@ -57,7 +59,9 @@ namespace Volo.Abp.Cli.Commands
version,
skipDbMigrations,
withSourceCode,
- addSourceCodeToSolutionFile
+ addSourceCodeToSolutionFile,
+ newTemplate,
+ newProTemplate
);
}
@@ -73,10 +77,11 @@ namespace Volo.Abp.Cli.Commands
sb.AppendLine(" abp add-module [options]");
sb.AppendLine("");
sb.AppendLine("Options:");
- sb.AppendLine(" --with-source-code Downloads the source code of the module to your solution folder.");
- sb.AppendLine(" --add-to-solution-file Adds the downloaded module to your solution file. (only available when --with-source-code used)");
+ sb.AppendLine(" --new-template Creates a fresh new module (speсialized for your solution) and adds it your solution.");
+ sb.AppendLine(" --with-source-code Downloads the source code of the module to your solution folder. (Always True if `--new-template` is used.)");
+ sb.AppendLine(" --add-to-solution-file Adds the downloaded/created module to your solution file. (only available when --with-source-code used)");
sb.AppendLine(" -s|--solution Specify the solution file explicitly.");
- sb.AppendLine(" --skip-db-migrations Specify if a new migration will be added or not.");
+ sb.AppendLine(" --skip-db-migrations Specify if a new migration will be added or not. (Always True if `--new-template` is used.)");
sb.AppendLine(" -sp|--startup-project Relative path to the project folder of the startup project. Default value is the current folder.");
sb.AppendLine(" -v|--version Specify the version of the module. Default is your project's ABP version.");
sb.AppendLine("");
@@ -86,6 +91,8 @@ namespace Volo.Abp.Cli.Commands
sb.AppendLine(" abp add-module Volo.Blogging -s Acme.BookStore Adds the module to the given solution.");
sb.AppendLine(" abp add-module Volo.Blogging -s Acme.BookStore --skip-db-migrations false Adds the module to the given solution but doesn't create a database migration.");
sb.AppendLine(@" abp add-module Volo.Blogging -s Acme.BookStore -sp ..\Acme.BookStore.Web\Acme.BookStore.Web.csproj Adds the module to the given solution and specify migration startup project.");
+ sb.AppendLine(@" abp add-module ProductManagement --new-template -sp ..\Acme.BookStore.Web\Acme.BookStore.Web.csproj Crates a new module named `ProductManagement` and adds it to your solution.");
+ sb.AppendLine(@" abp add-module ProductManagement --new-template --add-to-solution-file -sp ..\Acme.BookStore.Web\Acme.BookStore.Web.csproj Crates a new module named `ProductManagement`, adds it to your solution & solution file.");
sb.AppendLine("");
sb.AppendLine("See the documentation for more info: https://docs.abp.io/en/abp/latest/CLI");
@@ -166,6 +173,16 @@ namespace Volo.Abp.Cli.Commands
{
public const string Long = "with-source-code";
}
+
+ public class NewTemplate
+ {
+ public const string Long = "new-template";
+ }
+
+ public class NewProTemplate
+ {
+ public const string Long = "new-pro-template";
+ }
}
}
}
diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/BundleCommand.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/BundleCommand.cs
new file mode 100644
index 0000000000..eaf0b33116
--- /dev/null
+++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/BundleCommand.cs
@@ -0,0 +1,89 @@
+using Microsoft.Extensions.Logging;
+using System;
+using System.IO;
+using System.Text;
+using System.Threading.Tasks;
+using Volo.Abp.Cli.Args;
+using Volo.Abp.Cli.Bundling;
+using Volo.Abp.DependencyInjection;
+
+namespace Volo.Abp.Cli.Commands
+{
+ public class BundleCommand : IConsoleCommand, ITransientDependency
+ {
+ public ILogger Logger { get; set; }
+
+ public IBundlingService BundlingService { get; set; }
+
+
+ public async Task ExecuteAsync(CommandLineArgs commandLineArgs)
+ {
+ var workingDirectoryArg = commandLineArgs.Options.GetOrNull(
+ Options.WorkingDirectory.Short,
+ Options.WorkingDirectory.Long
+ );
+
+ var workingDirectory = workingDirectoryArg ?? Directory.GetCurrentDirectory();
+
+ var forceBuild = commandLineArgs.Options.ContainsKey(Options.ForceBuild.Short) ||
+ commandLineArgs.Options.ContainsKey(Options.ForceBuild.Long);
+
+ if (!Directory.Exists(workingDirectory))
+ {
+ throw new CliUsageException(
+ "Specified directory does not exist." +
+ Environment.NewLine + Environment.NewLine +
+ GetUsageInfo()
+ );
+ }
+
+ try
+ {
+ await BundlingService.BundleAsync(workingDirectory, forceBuild);
+ }
+ catch (BundlingException ex)
+ {
+ Logger.LogError(ex.Message);
+ }
+ }
+
+ public string GetShortDescription()
+ {
+ return "Bundles all third party styles and scripts required by modules and updates index.html file.";
+ }
+
+ public string GetUsageInfo()
+ {
+ var sb = new StringBuilder();
+
+ sb.AppendLine("");
+ sb.AppendLine("Usage:");
+ sb.AppendLine("");
+ sb.AppendLine(" abp bundle [options]");
+ sb.AppendLine("");
+ sb.AppendLine("Options:");
+ sb.AppendLine("");
+ sb.AppendLine("-wd|--working-directory (default: empty)");
+ sb.AppendLine("-f | --force (default: false)");
+ sb.AppendLine("");
+ sb.AppendLine("See the documentation for more info: https://docs.abp.io/en/abp/latest/CLI");
+
+ return sb.ToString();
+ }
+
+ public static class Options
+ {
+ public static class WorkingDirectory
+ {
+ public const string Short = "wd";
+ public const string Long = "working-directory";
+ }
+
+ public static class ForceBuild
+ {
+ public const string Short = "f";
+ public const string Long = "force";
+ }
+ }
+ }
+}
diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/NugetPackageToLocalReferenceConverter.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/NugetPackageToLocalReferenceConverter.cs
index d342e993d7..8e45378f72 100644
--- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/NugetPackageToLocalReferenceConverter.cs
+++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/NugetPackageToLocalReferenceConverter.cs
@@ -12,19 +12,19 @@ namespace Volo.Abp.Cli.ProjectModification
{
public class NugetPackageToLocalReferenceConverter : ITransientDependency
{
- public async Task Convert(ModuleWithMastersInfo module, string solutionFile)
+ public async Task Convert(ModuleWithMastersInfo module, string solutionFile, string modulePrefix = "Volo.")
{
var nugetPackageList = GetNugetPackages(module);
var modulesFolder = Path.Combine(Path.GetDirectoryName(solutionFile), "modules");
var srcFolder = Path.Combine(Path.GetDirectoryName(solutionFile), "src");
var testFolder = Path.Combine(Path.GetDirectoryName(solutionFile), "test");
- ConvertToLocalReference(modulesFolder, nugetPackageList, "..\\..\\..\\");
- ConvertToLocalReference(srcFolder, nugetPackageList, "..\\..\\modules\\");
- ConvertToLocalReference(testFolder, nugetPackageList, "..\\..\\modules\\", "test");
+ ConvertToLocalReference(modulesFolder, nugetPackageList, "..\\..\\..\\", "src", modulePrefix);
+ ConvertToLocalReference(srcFolder, nugetPackageList, "..\\..\\modules\\", "src", modulePrefix);
+ ConvertToLocalReference(testFolder, nugetPackageList, "..\\..\\modules\\", "test", modulePrefix);
}
- private void ConvertToLocalReference(string folder, List nugetPackageList, string localPathPrefix, string sourceFile = "src")
+ private void ConvertToLocalReference(string folder, List nugetPackageList, string localPathPrefix, string sourceFile, string modulePrefix)
{
var projectFiles = GetProjectFilesUnder(folder);
@@ -35,15 +35,15 @@ namespace Volo.Abp.Cli.ProjectModification
doc.Load(StreamHelper.GenerateStreamFromString(content));
- var convertedProject = ProcessReferenceNodes(folder, doc, nugetPackageList, localPathPrefix, sourceFile);
+ var convertedProject = ProcessReferenceNodes(folder, doc, nugetPackageList, localPathPrefix, sourceFile, modulePrefix);
File.WriteAllText(projectFile, convertedProject);
}
}
- private string ProcessReferenceNodes(string folder, XmlDocument doc, List nugetPackageList, string localPathPrefix, string sourceFile = "src")
+ private string ProcessReferenceNodes(string folder, XmlDocument doc, List nugetPackageList, string localPathPrefix, string sourceFile, string modulePrefix)
{
- var nodes = doc.SelectNodes("/Project/ItemGroup/PackageReference[starts-with(@Include, 'Volo.')]");
+ var nodes = doc.SelectNodes($"/Project/ItemGroup/PackageReference[starts-with(@Include, '{modulePrefix}')]");
if (nodes == null)
{
diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/ProjectNugetPackageAdder.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/ProjectNugetPackageAdder.cs
index 5f1e18efbd..de25b11da7 100644
--- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/ProjectNugetPackageAdder.cs
+++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/ProjectNugetPackageAdder.cs
@@ -50,7 +50,8 @@ namespace Volo.Abp.Cli.ProjectModification
);
}
- public Task AddAsync(string projectFile, NugetPackageInfo package, string version = null)
+ public Task AddAsync(string projectFile, NugetPackageInfo package, string version = null,
+ bool useDotnetCliToInstall = true)
{
var projectFileContent = File.ReadAllText(projectFile);
@@ -66,21 +67,30 @@ namespace Volo.Abp.Cli.ProjectModification
using (DirectoryHelper.ChangeCurrentDirectory(Path.GetDirectoryName(projectFile)))
{
- Logger.LogInformation($"Installing '{package.Name}' package to the project '{Path.GetFileNameWithoutExtension(projectFile)}'...");
+ Logger.LogInformation(
+ $"Installing '{package.Name}' package to the project '{Path.GetFileNameWithoutExtension(projectFile)}'...");
- var versionOption = version == null ? "" : $" -v {version}";
-
- CmdHelper.Run("dotnet", $"add package {package.Name}{versionOption}");
+ if (useDotnetCliToInstall)
+ {
+ AddUsingDotnetCli(package, version);
+ }
+ else
+ {
+ AddToCsprojManuallyAsync(projectFile, package, version);
+ }
var moduleFiles = ModuleClassFinder.Find(projectFile, "AbpModule");
if (moduleFiles.Count == 0)
{
- throw new CliUsageException($"Could not find a class derived from AbpModule in the project {projectFile}");
+ throw new CliUsageException(
+ $"Could not find a class derived from AbpModule in the project {projectFile}");
}
if (moduleFiles.Count > 1)
{
- throw new CliUsageException($"There are multiple classes derived from AbpModule in the project {projectFile}: " + moduleFiles.JoinAsString(", "));
+ throw new CliUsageException(
+ $"There are multiple classes derived from AbpModule in the project {projectFile}: " +
+ moduleFiles.JoinAsString(", "));
}
ModuleClassDependcyAdder.Add(moduleFiles.First(), package.ModuleClass);
@@ -91,9 +101,60 @@ namespace Volo.Abp.Cli.ProjectModification
return Task.CompletedTask;
}
+ private Task AddUsingDotnetCli(NugetPackageInfo package, string version = null)
+ {
+ var versionOption = version == null ? "" : $" -v {version}";
+
+ CmdHelper.Run("dotnet", $"add package {package.Name}{versionOption}");
+
+ return Task.CompletedTask;
+ }
+
+ private Task AddToCsprojManuallyAsync(string projectFile, NugetPackageInfo package, string version = null)
+ {
+ var projectFileContent = File.ReadAllText(projectFile);
+ var doc = new XmlDocument() {PreserveWhitespace = true};
+ doc.Load(StreamHelper.GenerateStreamFromString(projectFileContent));
+
+ var itemGroupNodes = doc.SelectNodes("/Project/ItemGroup");
+ XmlNode itemGroupNode = null;
+
+ if (itemGroupNodes == null || itemGroupNodes.Count < 1)
+ {
+ var projectNodes = doc.SelectNodes("/Project");
+ var projectNode = projectNodes[0];
+
+ itemGroupNode = doc.CreateElement("ItemGroup");
+ projectNode.AppendChild(itemGroupNode);
+ }
+ else
+ {
+ itemGroupNode = itemGroupNodes[0];
+ }
+
+ var packageReferenceNode = doc.CreateElement("PackageReference");
+
+ var includeAttr = doc.CreateAttribute("Include");
+ includeAttr.Value = package.Name;
+ packageReferenceNode.Attributes.Append(includeAttr);
+
+ if (version != null)
+ {
+ var versionAttr = doc.CreateAttribute("Version");
+ versionAttr.Value = version;
+ packageReferenceNode.Attributes.Append(versionAttr);
+ }
+
+ itemGroupNode.AppendChild(packageReferenceNode);
+
+ File.WriteAllText(projectFile, doc.OuterXml);
+
+ return Task.CompletedTask;
+ }
+
private string GetAbpVersionOrNull(string projectFileContent)
{
- var doc = new XmlDocument() { PreserveWhitespace = true };
+ var doc = new XmlDocument() {PreserveWhitespace = true};
doc.Load(StreamHelper.GenerateStreamFromString(projectFileContent));
diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionFileModifier.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionFileModifier.cs
index a24b31e5f1..9eda6efa10 100644
--- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionFileModifier.cs
+++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionFileModifier.cs
@@ -18,6 +18,11 @@ namespace Volo.Abp.Cli.ProjectModification
File.WriteAllText(solutionFile, RemoveProject(lines.ToList(), projectName).JoinAsString(Environment.NewLine));
}
+ public async Task AddModuleToSolutionFileAsync(ModuleWithMastersInfo module, string solutionFile)
+ {
+ await AddModuleAsync(module, solutionFile);
+ }
+
private List RemoveProject(List solutionFileLines, string projectName)
{
var projectKey = FindProjectKey(solutionFileLines, projectName);
@@ -65,12 +70,7 @@ namespace Volo.Abp.Cli.ProjectModification
return null;
}
- public async Task AddModuleToSolutionFileAsync(ModuleWithMastersInfo module, string solutionFile)
- {
- await AddModule(module, solutionFile);
- }
-
- private async Task AddModule(ModuleWithMastersInfo module, string solutionFile)
+ private async Task AddModuleAsync(ModuleWithMastersInfo module, string solutionFile)
{
var srcModuleFolderId = await AddNewFolderAndGetIdOrGetExistingId(solutionFile, module.Name, await AddNewFolderAndGetIdOrGetExistingId(solutionFile, "modules"));
var testModuleFolderId = await AddNewFolderAndGetIdOrGetExistingId(solutionFile, module.Name + ".Tests", await AddNewFolderAndGetIdOrGetExistingId(solutionFile, "test"));
@@ -128,7 +128,7 @@ namespace Volo.Abp.Cli.ProjectModification
{
foreach (var masterModule in module.MasterModuleInfos)
{
- await AddModule(masterModule, solutionFile);
+ await AddModuleAsync(masterModule, solutionFile);
}
}
}
diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs
index cc563f97cf..3bcdc34bc9 100644
--- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs
+++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs
@@ -1,15 +1,17 @@
using JetBrains.Annotations;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions;
-using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Threading.Tasks;
+using Volo.Abp.Cli.Args;
+using Volo.Abp.Cli.Commands;
using Volo.Abp.Cli.Commands.Services;
using Volo.Abp.Cli.Http;
using Volo.Abp.Cli.ProjectBuilding;
+using Volo.Abp.Cli.ProjectBuilding.Templates.MvcModule;
using Volo.Abp.Cli.Utils;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Json;
@@ -32,6 +34,7 @@ namespace Volo.Abp.Cli.ProjectModification
public SolutionFileModifier SolutionFileModifier { get; }
public NugetPackageToLocalReferenceConverter NugetPackageToLocalReferenceConverter { get; }
public AngularModuleSourceCodeAdder AngularModuleSourceCodeAdder { get; }
+ public NewCommand NewCommand { get; }
public SolutionModuleAdder(
IJsonSerializer jsonSerializer,
@@ -45,7 +48,8 @@ namespace Volo.Abp.Cli.ProjectModification
SourceCodeDownloadService sourceCodeDownloadService,
SolutionFileModifier solutionFileModifier,
NugetPackageToLocalReferenceConverter nugetPackageToLocalReferenceConverter,
- AngularModuleSourceCodeAdder angularModuleSourceCodeAdder)
+ AngularModuleSourceCodeAdder angularModuleSourceCodeAdder,
+ NewCommand newCommand)
{
JsonSerializer = jsonSerializer;
ProjectNugetPackageAdder = projectNugetPackageAdder;
@@ -59,6 +63,7 @@ namespace Volo.Abp.Cli.ProjectModification
SolutionFileModifier = solutionFileModifier;
NugetPackageToLocalReferenceConverter = nugetPackageToLocalReferenceConverter;
AngularModuleSourceCodeAdder = angularModuleSourceCodeAdder;
+ NewCommand = newCommand;
Logger = NullLogger.Instance;
}
@@ -69,24 +74,27 @@ namespace Volo.Abp.Cli.ProjectModification
string version,
bool skipDbMigrations = false,
bool withSourceCode = false,
- bool addSourceCodeToSolutionFile = false)
+ bool addSourceCodeToSolutionFile = false,
+ bool newTemplate = false,
+ bool newProTemplate = false)
{
Check.NotNull(solutionFile, nameof(solutionFile));
Check.NotNull(moduleName, nameof(moduleName));
- var module = await FindModuleInfoAsync(moduleName);
+ var module = await GetModuleInfoAsync(moduleName, newTemplate, newProTemplate);
Logger.LogInformation(
$"Installing module '{module.Name}' to the solution '{Path.GetFileNameWithoutExtension(solutionFile)}'");
var projectFiles = ProjectFinder.GetProjectFiles(solutionFile);
- await AddNugetAndNpmReferences(module, projectFiles);
+ await AddNugetAndNpmReferences(module, projectFiles, !(newTemplate || newProTemplate));
- if (withSourceCode)
+ if (withSourceCode || newTemplate || newProTemplate)
{
var modulesFolderInSolution = Path.Combine(Path.GetDirectoryName(solutionFile), "modules");
- await DownloadSourceCodesToSolutionFolder(module, modulesFolderInSolution, version);
+ await DownloadSourceCodesToSolutionFolder(module, modulesFolderInSolution, version, newTemplate,
+ newProTemplate);
await RemoveUnnecessaryProjectsAsync(Path.GetDirectoryName(solutionFile), module, projectFiles);
if (addSourceCodeToSolutionFile)
@@ -94,7 +102,15 @@ namespace Volo.Abp.Cli.ProjectModification
await SolutionFileModifier.AddModuleToSolutionFileAsync(module, solutionFile);
}
- await NugetPackageToLocalReferenceConverter.Convert(module, solutionFile);
+ if (newTemplate || newProTemplate)
+ {
+ await NugetPackageToLocalReferenceConverter.Convert(module, solutionFile, $"{module.Name}.");
+ }
+ else
+ {
+ await NugetPackageToLocalReferenceConverter.Convert(module, solutionFile);
+ }
+
await AddAngularSourceCode(modulesFolderInSolution, solutionFile);
}
else
@@ -105,15 +121,17 @@ namespace Volo.Abp.Cli.ProjectModification
ModifyDbContext(projectFiles, module, startupProject, skipDbMigrations);
}
- private async Task RemoveUnnecessaryProjectsAsync(string solutionDirectory, ModuleWithMastersInfo module, string[] projectFiles)
+ private async Task RemoveUnnecessaryProjectsAsync(string solutionDirectory, ModuleWithMastersInfo module,
+ string[] projectFiles)
{
var moduleDirectory = Path.Combine(solutionDirectory, "modules", module.Name);
- var moduleSolutionFile = Directory.GetFiles(moduleDirectory, "*.sln", SearchOption.TopDirectoryOnly).First();
+ var moduleSolutionFile =
+ Directory.GetFiles(moduleDirectory, "*.sln", SearchOption.TopDirectoryOnly).First();
var isProjectTiered = await IsProjectTiered(projectFiles);
if (!projectFiles.Any(p => p.EndsWith(".Blazor.csproj")))
{
- await RemoveProjectByTarget(module, moduleSolutionFile, NuGetPackageTarget.Blazor,isProjectTiered);
+ await RemoveProjectByTarget(module, moduleSolutionFile, NuGetPackageTarget.Blazor, isProjectTiered);
}
if (!projectFiles.Any(p => p.EndsWith(".Web.csproj")))
@@ -124,15 +142,18 @@ namespace Volo.Abp.Cli.ProjectModification
if (!projectFiles.Any(p => p.EndsWith(".MongoDB.csproj")))
{
await RemoveProjectByTarget(module, moduleSolutionFile, NuGetPackageTarget.MongoDB, isProjectTiered);
+ await RemoveProjectByPostFix(module, moduleSolutionFile, "test", ".MongoDB.Tests");
}
if (!projectFiles.Any(p => p.EndsWith(".EntityFrameworkCore.csproj")))
{
await RemoveProjectByTarget(module, moduleSolutionFile, NuGetPackageTarget.EntityFrameworkCore, isProjectTiered);
+ await RemoveProjectByPostFix(module, moduleSolutionFile, "test", ".EntityFrameworkCore.Tests");
}
}
- private async Task RemoveProjectByTarget(ModuleWithMastersInfo module, string moduleSolutionFile, NuGetPackageTarget target, bool isTieredProject)
+ private async Task RemoveProjectByTarget(ModuleWithMastersInfo module, string moduleSolutionFile,
+ NuGetPackageTarget target, bool isTieredProject)
{
var packages = module.NugetPackages.Where(n =>
(isTieredProject && n.TieredTarget != NuGetPackageTarget.Undefined
@@ -152,6 +173,19 @@ namespace Volo.Abp.Cli.ProjectModification
}
}
+ private async Task RemoveProjectByPostFix(ModuleWithMastersInfo module, string moduleSolutionFile, string targetFolder,
+ string postFix)
+ {
+ var srcPath = Path.Combine(Path.GetDirectoryName(moduleSolutionFile), targetFolder);
+ var projectFolderPath = Directory.GetDirectories(srcPath).FirstOrDefault(d=> d.EndsWith(postFix));
+ await SolutionFileModifier.RemoveProjectFromSolutionFileAsync(moduleSolutionFile, Path.GetDirectoryName(projectFolderPath));
+
+ if (Directory.Exists(projectFolderPath))
+ {
+ Directory.Delete(projectFolderPath, true);
+ }
+ }
+
private async Task AddAngularPackages(string solutionFilePath, ModuleWithMastersInfo module)
{
var angularPath = Path.Combine(Path.GetDirectoryName(Path.GetDirectoryName(solutionFilePath)), "angular");
@@ -201,18 +235,26 @@ namespace Volo.Abp.Cli.ProjectModification
}
private async Task DownloadSourceCodesToSolutionFolder(ModuleWithMastersInfo module,
- string modulesFolderInSolution, string version = null)
+ string modulesFolderInSolution, string version = null, bool newTemplate = false,
+ bool newProTemplate = false)
{
var targetModuleFolder = Path.Combine(modulesFolderInSolution, module.Name);
- await SourceCodeDownloadService.DownloadAsync(
- module.Name,
- targetModuleFolder,
- version,
- null,
- null,
- null
- );
+ if (newTemplate || newProTemplate)
+ {
+ await CreateNewModuleAsync(module, modulesFolderInSolution, version, newProTemplate);
+ }
+ else
+ {
+ await SourceCodeDownloadService.DownloadAsync(
+ module.Name,
+ targetModuleFolder,
+ version,
+ null,
+ null,
+ null
+ );
+ }
await DeleteAppAndDemoFolderAsync(targetModuleFolder);
@@ -227,6 +269,18 @@ namespace Volo.Abp.Cli.ProjectModification
}
}
+ private async Task CreateNewModuleAsync(ModuleWithMastersInfo module, string modulesFolderInSolution,
+ string version, bool newProTemplate = false)
+ {
+ var args = new CommandLineArgs("new", module.Name);
+
+ args.Options.Add("t", newProTemplate ? ModuleProTemplate.TemplateName : ModuleTemplate.TemplateName);
+ args.Options.Add("v", version);
+ args.Options.Add("o", Path.Combine(modulesFolderInSolution, module.Name));
+
+ await NewCommand.ExecuteAsync(args);
+ }
+
private async Task DeleteAppAndDemoFolderAsync(string targetModuleFolder)
{
var appFolder = Path.Combine(targetModuleFolder, "app");
@@ -248,7 +302,8 @@ namespace Volo.Abp.Cli.ProjectModification
}
}
- private async Task AddNugetAndNpmReferences(ModuleWithMastersInfo module, string[] projectFiles)
+ private async Task AddNugetAndNpmReferences(ModuleWithMastersInfo module, string[] projectFiles,
+ bool useDotnetCliToInstall)
{
foreach (var nugetPackage in module.NugetPackages)
{
@@ -264,7 +319,7 @@ namespace Volo.Abp.Cli.ProjectModification
continue;
}
- await ProjectNugetPackageAdder.AddAsync(targetProjectFile, nugetPackage);
+ await ProjectNugetPackageAdder.AddAsync(targetProjectFile, nugetPackage, null, useDotnetCliToInstall);
}
var mvcNpmPackages = module.NpmPackages?.Where(p => p.ApplicationType.HasFlag(NpmApplicationType.Mvc))
@@ -357,8 +412,14 @@ namespace Volo.Abp.Cli.ProjectModification
}
}
- protected virtual async Task FindModuleInfoAsync(string moduleName)
+ protected virtual async Task GetModuleInfoAsync(string moduleName, bool newTemplate,
+ bool newProTemplate = false)
{
+ if (newTemplate || newProTemplate)
+ {
+ return await GetEmptyModuleProjectInfoAsync(moduleName, newProTemplate);
+ }
+
using (var client = new CliHttpClient())
{
var url = $"{CliUrls.WwwAbpIo}api/app/module/byNameWithDetails/?name=" + moduleName;
@@ -380,6 +441,85 @@ namespace Volo.Abp.Cli.ProjectModification
}
}
+ private async Task GetEmptyModuleProjectInfoAsync(string moduleName,
+ bool newProTemplate = false)
+ {
+ var module = new ModuleWithMastersInfo();
+
+ module.Name = moduleName;
+ module.DisplayName = moduleName;
+ module.EfCoreConfigureMethodName = $"{module.Name}.EntityFrameworkCore:Configure{module.Name}";
+ module.MasterModuleInfos = new List();
+
+ module.NugetPackages = new List
+ {
+ new NugetPackageInfo
+ {
+ Name = $"{module.Name}.Application",
+ ModuleClass = $"{module.Name}.{module.Name}ApplicationModule",
+ Target = NuGetPackageTarget.Application
+ },
+ new NugetPackageInfo
+ {
+ Name = $"{module.Name}.Application.Contracts",
+ ModuleClass = $"{module.Name}.{module.Name}ApplicationContractsModule",
+ Target = NuGetPackageTarget.ApplicationContracts
+ },
+ new NugetPackageInfo
+ {
+ Name = $"{module.Name}.Blazor",
+ ModuleClass = $"{module.Name}.Blazor.{module.Name}BlazorModule",
+ Target = NuGetPackageTarget.Blazor
+ },
+ new NugetPackageInfo
+ {
+ Name = $"{module.Name}.Domain",
+ ModuleClass = $"{module.Name}.{module.Name}DomainModule",
+ Target = NuGetPackageTarget.Domain
+ },
+ new NugetPackageInfo
+ {
+ Name = $"{module.Name}.Domain.Shared",
+ ModuleClass = $"{module.Name}.{module.Name}DomainSharedModule",
+ Target = NuGetPackageTarget.DomainShared
+ },
+ new NugetPackageInfo
+ {
+ Name = $"{module.Name}.EntityFrameworkCore",
+ ModuleClass = $"{module.Name}.EntityFrameworkCore.{module.Name}EntityFrameworkCoreModule",
+ Target = NuGetPackageTarget.EntityFrameworkCore
+ },
+ new NugetPackageInfo
+ {
+ Name = $"{module.Name}.HttpApi",
+ ModuleClass = $"{module.Name}.{module.Name}HttpApiModule",
+ Target = NuGetPackageTarget.HttpApi
+ },
+ new NugetPackageInfo
+ {
+ Name = $"{module.Name}.HttpApi.Client",
+ ModuleClass = $"{module.Name}.{module.Name}HttpApiClientModule",
+ Target = NuGetPackageTarget.HttpApiClient
+ },
+ new NugetPackageInfo
+ {
+ Name = $"{module.Name}.MongoDB",
+ ModuleClass = $"{module.Name}.MongoDB.{module.Name}MongoDbModule",
+ Target = NuGetPackageTarget.MongoDB
+ },
+ new NugetPackageInfo
+ {
+ Name = $"{module.Name}.Web",
+ ModuleClass = $"{module.Name}.Web.{module.Name}WebModule",
+ Target = NuGetPackageTarget.Web
+ },
+ };
+
+ module.NpmPackages = new List();
+
+ return module;
+ }
+
protected virtual async Task IsProjectTiered(string[] projectFiles)
{
return projectFiles.Select(ProjectFileNameHelper.GetAssemblyNameFromProjectPath)
diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Bundling/BaseBundleContributer.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Bundling/BaseBundleContributer.cs
new file mode 100644
index 0000000000..214b021afb
--- /dev/null
+++ b/framework/src/Volo.Abp.Core/Volo/Abp/Bundling/BaseBundleContributer.cs
@@ -0,0 +1,38 @@
+using System;
+using System.Collections.Generic;
+
+namespace Volo.Abp.Bundling
+{
+ public class BaseBundleContributer : IBundleContributer
+ {
+ public virtual void AddScripts(List scriptDefinitions)
+ {
+ var scripts = GetScripts();
+
+ foreach (var script in scripts)
+ {
+ scriptDefinitions.AddIfNotContains((item) => item.Source == script, () => new BundleDefinition(script));
+ }
+ }
+
+ public virtual void AddStyles(List styleDefinitions)
+ {
+ var styles = GetStyles();
+
+ foreach (var style in styles)
+ {
+ styleDefinitions.AddIfNotContains((item) => item.Source == style, () => new BundleDefinition(style));
+ }
+ }
+
+ public virtual string[] GetStyles()
+ {
+ return Array.Empty();
+ }
+
+ public virtual string[] GetScripts()
+ {
+ return Array.Empty();
+ }
+ }
+}
diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Bundling/BundleDefinition.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Bundling/BundleDefinition.cs
new file mode 100644
index 0000000000..2bc82a86ef
--- /dev/null
+++ b/framework/src/Volo.Abp.Core/Volo/Abp/Bundling/BundleDefinition.cs
@@ -0,0 +1,16 @@
+using System.Collections.Generic;
+
+namespace Volo.Abp.Bundling
+{
+ public class BundleDefinition
+ {
+ public string Source { get; set; }
+ public Dictionary AdditionalProperties { get; set; }
+
+ public BundleDefinition(string source)
+ {
+ Source = source;
+ AdditionalProperties = new Dictionary();
+ }
+ }
+}
diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Bundling/IBundleContributer.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Bundling/IBundleContributer.cs
new file mode 100644
index 0000000000..2bf8dfff85
--- /dev/null
+++ b/framework/src/Volo.Abp.Core/Volo/Abp/Bundling/IBundleContributer.cs
@@ -0,0 +1,10 @@
+using System.Collections.Generic;
+
+namespace Volo.Abp.Bundling
+{
+ public interface IBundleContributer
+ {
+ void AddScripts(List scriptDefinitions);
+ void AddStyles(List styleDefinitions);
+ }
+}
diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/ObjectHelper.cs b/framework/src/Volo.Abp.Core/Volo/Abp/ObjectHelper.cs
new file mode 100644
index 0000000000..9f9e8f3fe8
--- /dev/null
+++ b/framework/src/Volo.Abp.Core/Volo/Abp/ObjectHelper.cs
@@ -0,0 +1,64 @@
+using System;
+using System.Collections.Concurrent;
+using System.Collections.Generic;
+using System.Linq;
+using System.Linq.Expressions;
+using System.Reflection;
+
+namespace Volo.Abp
+{
+ public static class ObjectHelper
+ {
+ private static readonly ConcurrentDictionary CachedObjectProperties =
+ new ConcurrentDictionary();
+
+ public static void TrySetProperty(
+ TObject obj,
+ Expression> propertySelector,
+ Func valueFactory,
+ params Type[] ignoreAttributeTypes)
+ {
+ TrySetProperty(obj, propertySelector, x => valueFactory(), ignoreAttributeTypes);
+ }
+
+ public static void TrySetProperty(
+ TObject obj,
+ Expression> propertySelector,
+ Func valueFactory,
+ params Type[] ignoreAttributeTypes)
+ {
+ var cacheKey = $"{obj.GetType().FullName}-" +
+ $"{propertySelector}-" +
+ $"{(ignoreAttributeTypes != null ? "-" + string.Join("-", ignoreAttributeTypes.Select(x => x.FullName)) : "")}";
+
+ var property = CachedObjectProperties.GetOrAdd(cacheKey, () =>
+ {
+ if (propertySelector.Body.NodeType != ExpressionType.MemberAccess)
+ {
+ return null;
+ }
+
+ var memberExpression = propertySelector.Body.As();
+
+ var propertyInfo = obj.GetType().GetProperties().FirstOrDefault(x =>
+ x.Name == memberExpression.Member.Name &&
+ x.GetSetMethod(true) != null);
+
+ if (propertyInfo == null)
+ {
+ return null;
+ }
+
+ if (ignoreAttributeTypes != null &&
+ ignoreAttributeTypes.Any(ignoreAttribute => propertyInfo.IsDefined(ignoreAttribute, true)))
+ {
+ return null;
+ }
+
+ return propertyInfo;
+ });
+
+ property?.SetValue(obj, valueFactory(obj));
+ }
+ }
+}
diff --git a/framework/src/Volo.Abp.Ddd.Application.Contracts/Volo/Abp/Application/Localization/Resources/AbpDdd/de-DE.json b/framework/src/Volo.Abp.Ddd.Application.Contracts/Volo/Abp/Application/Localization/Resources/AbpDdd/de-DE.json
new file mode 100644
index 0000000000..4397fbf5af
--- /dev/null
+++ b/framework/src/Volo.Abp.Ddd.Application.Contracts/Volo/Abp/Application/Localization/Resources/AbpDdd/de-DE.json
@@ -0,0 +1,6 @@
+{
+ "culture": "de-DE",
+ "texts": {
+ "MaxResultCountExceededExceptionMessage": "{0} kann nicht mehr als {1} sein! Erhöhen Sie {2}.{3} auf der Serverseite, um mehr Ergebnisse zu erzielen."
+ }
+}
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo.Abp.Ddd.Domain.csproj b/framework/src/Volo.Abp.Ddd.Domain/Volo.Abp.Ddd.Domain.csproj
index 9fd8702f22..87879334af 100644
--- a/framework/src/Volo.Abp.Ddd.Domain/Volo.Abp.Ddd.Domain.csproj
+++ b/framework/src/Volo.Abp.Ddd.Domain/Volo.Abp.Ddd.Domain.csproj
@@ -22,6 +22,7 @@
+
diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/AbpDddDomainModule.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/AbpDddDomainModule.cs
index 87965924e4..41767d213e 100644
--- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/AbpDddDomainModule.cs
+++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/AbpDddDomainModule.cs
@@ -6,6 +6,7 @@ using Volo.Abp.Guids;
using Volo.Abp.Modularity;
using Volo.Abp.MultiTenancy;
using Volo.Abp.ObjectMapping;
+using Volo.Abp.Specifications;
using Volo.Abp.Threading;
using Volo.Abp.Timing;
using Volo.Abp.Uow;
@@ -22,7 +23,8 @@ namespace Volo.Abp.Domain
typeof(AbpTimingModule),
typeof(AbpUnitOfWorkModule),
typeof(AbpObjectMappingModule),
- typeof(AbpExceptionHandlingModule)
+ typeof(AbpExceptionHandlingModule),
+ typeof(AbpSpecificationsModule)
)]
public class AbpDddDomainModule : AbpModule
{
diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/AuditedAggregateRootWithUser.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/AuditedAggregateRootWithUser.cs
index 477f8750fd..69e6961630 100644
--- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/AuditedAggregateRootWithUser.cs
+++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/AuditedAggregateRootWithUser.cs
@@ -12,7 +12,7 @@ namespace Volo.Abp.Domain.Entities.Auditing
where TUser : IEntity
{
///
- public virtual TUser Creator { get; set; }
+ public virtual TUser Creator { get; protected set; }
///
public virtual TUser LastModifier { get; set; }
@@ -28,7 +28,7 @@ namespace Volo.Abp.Domain.Entities.Auditing
where TUser : IEntity
{
///
- public virtual TUser Creator { get; set; }
+ public virtual TUser Creator { get; protected set; }
///
public virtual TUser LastModifier { get; set; }
@@ -44,4 +44,4 @@ namespace Volo.Abp.Domain.Entities.Auditing
}
}
-}
\ No newline at end of file
+}
diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/AuditedEntityWithUser.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/AuditedEntityWithUser.cs
index cc54209595..1aa12a17da 100644
--- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/AuditedEntityWithUser.cs
+++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/AuditedEntityWithUser.cs
@@ -12,7 +12,7 @@ namespace Volo.Abp.Domain.Entities.Auditing
where TUser : IEntity
{
///
- public virtual TUser Creator { get; set; }
+ public virtual TUser Creator { get; protected set; }
///
public virtual TUser LastModifier { get; set; }
@@ -28,7 +28,7 @@ namespace Volo.Abp.Domain.Entities.Auditing
where TUser : IEntity
{
///
- public virtual TUser Creator { get; set; }
+ public virtual TUser Creator { get; protected set; }
///
public virtual TUser LastModifier { get; set; }
@@ -44,4 +44,4 @@ namespace Volo.Abp.Domain.Entities.Auditing
}
}
-}
\ No newline at end of file
+}
diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/CreationAuditedAggregateRoot.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/CreationAuditedAggregateRoot.cs
index 084c907606..4e42738b85 100644
--- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/CreationAuditedAggregateRoot.cs
+++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/CreationAuditedAggregateRoot.cs
@@ -10,10 +10,10 @@ namespace Volo.Abp.Domain.Entities.Auditing
public abstract class CreationAuditedAggregateRoot : AggregateRoot, ICreationAuditedObject
{
///
- public virtual DateTime CreationTime { get; set; }
+ public virtual DateTime CreationTime { get; protected set; }
///
- public virtual Guid? CreatorId { get; set; }
+ public virtual Guid? CreatorId { get; protected set; }
}
///
diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/CreationAuditedAggregateRootWithUser.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/CreationAuditedAggregateRootWithUser.cs
index 7d491d7be1..f576ba8452 100644
--- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/CreationAuditedAggregateRootWithUser.cs
+++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/CreationAuditedAggregateRootWithUser.cs
@@ -11,7 +11,7 @@ namespace Volo.Abp.Domain.Entities.Auditing
public abstract class CreationAuditedAggregateRootWithUser : CreationAuditedAggregateRoot, ICreationAuditedObject
{
///
- public virtual TUser Creator { get; set; }
+ public virtual TUser Creator { get; protected set; }
}
///
@@ -23,7 +23,7 @@ namespace Volo.Abp.Domain.Entities.Auditing
public abstract class CreationAuditedAggregateRootWithUser : CreationAuditedAggregateRoot, ICreationAuditedObject
{
///
- public virtual TUser Creator { get; set; }
+ public virtual TUser Creator { get; protected set; }
protected CreationAuditedAggregateRootWithUser()
{
@@ -36,4 +36,4 @@ namespace Volo.Abp.Domain.Entities.Auditing
}
}
-}
\ No newline at end of file
+}
diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/CreationAuditedEntity.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/CreationAuditedEntity.cs
index 41802c78b7..d039318fc1 100644
--- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/CreationAuditedEntity.cs
+++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/CreationAuditedEntity.cs
@@ -10,10 +10,10 @@ namespace Volo.Abp.Domain.Entities.Auditing
public abstract class CreationAuditedEntity : Entity, ICreationAuditedObject
{
///
- public virtual DateTime CreationTime { get; set; }
+ public virtual DateTime CreationTime { get; protected set; }
///
- public virtual Guid? CreatorId { get; set; }
+ public virtual Guid? CreatorId { get; protected set; }
}
///
@@ -24,10 +24,10 @@ namespace Volo.Abp.Domain.Entities.Auditing
public abstract class CreationAuditedEntity : Entity, ICreationAuditedObject
{
///
- public virtual DateTime CreationTime { get; set; }
+ public virtual DateTime CreationTime { get; protected set; }
///
- public virtual Guid? CreatorId { get; set; }
+ public virtual Guid? CreatorId { get; protected set; }
protected CreationAuditedEntity()
{
@@ -40,4 +40,4 @@ namespace Volo.Abp.Domain.Entities.Auditing
}
}
-}
\ No newline at end of file
+}
diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/CreationAuditedEntityWithUser.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/CreationAuditedEntityWithUser.cs
index 45d844efa7..c193f9486c 100644
--- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/CreationAuditedEntityWithUser.cs
+++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/CreationAuditedEntityWithUser.cs
@@ -11,7 +11,7 @@ namespace Volo.Abp.Domain.Entities.Auditing
public abstract class CreationAuditedEntityWithUser : CreationAuditedEntity, ICreationAuditedObject
{
///
- public virtual TUser Creator { get; set; }
+ public virtual TUser Creator { get; protected set; }
}
///
@@ -23,7 +23,7 @@ namespace Volo.Abp.Domain.Entities.Auditing
public abstract class CreationAuditedEntityWithUser : CreationAuditedEntity, ICreationAuditedObject
{
///
- public virtual TUser Creator { get; set; }
+ public virtual TUser Creator { get; protected set; }
protected CreationAuditedEntityWithUser()
{
@@ -36,4 +36,4 @@ namespace Volo.Abp.Domain.Entities.Auditing
}
}
-}
\ No newline at end of file
+}
diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/FullAuditedAggregateRootWithUser.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/FullAuditedAggregateRootWithUser.cs
index c6bfefbb23..312c3abd51 100644
--- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/FullAuditedAggregateRootWithUser.cs
+++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/FullAuditedAggregateRootWithUser.cs
@@ -15,7 +15,7 @@ namespace Volo.Abp.Domain.Entities.Auditing
public virtual TUser Deleter { get; set; }
///
- public virtual TUser Creator { get; set; }
+ public virtual TUser Creator { get; protected set; }
///
public virtual TUser LastModifier { get; set; }
@@ -34,7 +34,7 @@ namespace Volo.Abp.Domain.Entities.Auditing
public virtual TUser Deleter { get; set; }
///
- public virtual TUser Creator { get; set; }
+ public virtual TUser Creator { get; protected set; }
///
public virtual TUser LastModifier { get; set; }
@@ -50,4 +50,4 @@ namespace Volo.Abp.Domain.Entities.Auditing
}
}
-}
\ No newline at end of file
+}
diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/FullAuditedEntityWithUser.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/FullAuditedEntityWithUser.cs
index f7ec2b672f..1ce198304d 100644
--- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/FullAuditedEntityWithUser.cs
+++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Auditing/FullAuditedEntityWithUser.cs
@@ -15,7 +15,7 @@ namespace Volo.Abp.Domain.Entities.Auditing
public virtual TUser Deleter { get; set; }
///
- public virtual TUser Creator { get; set; }
+ public virtual TUser Creator { get; protected set; }
///
public virtual TUser LastModifier { get; set; }
@@ -34,8 +34,8 @@ namespace Volo.Abp.Domain.Entities.Auditing
public virtual TUser Deleter { get; set; }
///
- public virtual TUser Creator { get; set; }
-
+ public virtual TUser Creator { get; protected set; }
+
///
public virtual TUser LastModifier { get; set; }
@@ -50,4 +50,4 @@ namespace Volo.Abp.Domain.Entities.Auditing
}
}
-}
\ No newline at end of file
+}
diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/EntityHelper.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/EntityHelper.cs
index 65f2992257..5e81e2270d 100644
--- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/EntityHelper.cs
+++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/EntityHelper.cs
@@ -15,9 +15,6 @@ namespace Volo.Abp.Domain.Entities
///
public static class EntityHelper
{
- private static readonly ConcurrentDictionary CachedIdProperties =
- new ConcurrentDictionary();
-
public static bool EntityEquals(IEntity entity1, IEntity entity2)
{
if (entity1 == null || entity2 == null)
@@ -77,7 +74,7 @@ namespace Volo.Abp.Domain.Entities
{
var entity1Key = entity1Keys[i];
var entity2Key = entity2Keys[i];
-
+
if (entity1Key == null)
{
if (entity2Key == null)
@@ -89,13 +86,13 @@ namespace Volo.Abp.Domain.Entities
//entity2Key is not null!
return false;
}
-
+
if (entity2Key == null)
{
//entity1Key was not null!
return false;
}
-
+
if (TypeHelper.IsDefaultValue(entity1Key) && TypeHelper.IsDefaultValue(entity2Key))
{
return false;
@@ -241,30 +238,13 @@ namespace Volo.Abp.Domain.Entities
Func idFactory,
bool checkForDisableIdGenerationAttribute = false)
{
- var property = CachedIdProperties.GetOrAdd(
- $"{entity.GetType().FullName}-{checkForDisableIdGenerationAttribute}", () =>
- {
- var idProperty = entity
- .GetType()
- .GetProperties()
- .FirstOrDefault(x => x.Name == nameof(entity.Id) &&
- x.GetSetMethod(true) != null);
-
- if (idProperty == null)
- {
- return null;
- }
-
- if (checkForDisableIdGenerationAttribute &&
- idProperty.IsDefined(typeof(DisableIdGenerationAttribute), true))
- {
- return null;
- }
-
- return idProperty;
- });
-
- property?.SetValue(entity, idFactory());
+ ObjectHelper.TrySetProperty(
+ entity,
+ x => x.Id,
+ idFactory,
+ checkForDisableIdGenerationAttribute
+ ? new Type[] { typeof(DisableIdGenerationAttribute) }
+ : new Type[] { });
}
}
-}
\ No newline at end of file
+}
diff --git a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Localization/de-DE.json b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Localization/de-DE.json
new file mode 100644
index 0000000000..89da090ccf
--- /dev/null
+++ b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Localization/de-DE.json
@@ -0,0 +1,25 @@
+{
+ "culture": "de-DE",
+ "texts": {
+ "DisplayName:Abp.Mailing.DefaultFromAddress": "Standard-Absenderadresse",
+ "DisplayName:Abp.Mailing.DefaultFromDisplayName": "Standard-Absendername",
+ "DisplayName:Abp.Mailing.Smtp.Host": "Host",
+ "DisplayName:Abp.Mailing.Smtp.Port": "Port",
+ "DisplayName:Abp.Mailing.Smtp.UserName": "Benutzername",
+ "DisplayName:Abp.Mailing.Smtp.Password": "Passwort",
+ "DisplayName:Abp.Mailing.Smtp.Domain": "Domain",
+ "DisplayName:Abp.Mailing.Smtp.EnableSsl": "SSL aktivieren",
+ "DisplayName:Abp.Mailing.Smtp.UseDefaultCredentials": "Standard-Anmeldeinformationen verwenden",
+ "Description:Abp.Mailing.DefaultFromAddress": "Die Standard-Absenderadresse",
+ "Description:Abp.Mailing.DefaultFromDisplayName": "Der Standard-Absendername",
+ "Description:Abp.Mailing.Smtp.Host": "Der Name oder die IP-Adresse des Hosts, der für SMTP-Transaktionen verwendet wird.",
+ "Description:Abp.Mailing.Smtp.Port": "Der Port, der für SMTP-Transaktionen verwendete wird.",
+ "Description:Abp.Mailing.Smtp.UserName": "Der Benutzername, der den Anmeldeinformationen zugeordnet ist.",
+ "Description:Abp.Mailing.Smtp.Password": "Das Kennwort für den Benutzernamen, der den Anmeldeinformationen zugeordnet ist.",
+ "Description:Abp.Mailing.Smtp.Domain": "Der Domänen- oder Computername, der die Anmeldeinformationen überprüft.",
+ "Description:Abp.Mailing.Smtp.EnableSsl": "Gibt an, ob der SmtpClient SSL (Secure Sockets Layer) zum Verschlüsseln der Verbindung verwendet.",
+ "Description:Abp.Mailing.Smtp.UseDefaultCredentials": "Gibt an, ob die DefaultCredentials mit Anforderungen mitgesendet werden.",
+ "TextTemplate:StandardEmailTemplates.Layout": "Standard-E-Mail-Layoutvorlage",
+ "TextTemplate:StandardEmailTemplates.Message": "Einfache Nachrichtenvorlage für E-Mails"
+ }
+}
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/AbpJsonValueConverter.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/AbpJsonValueConverter.cs
index 6ecf19fa98..7378ab8eff 100644
--- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/AbpJsonValueConverter.cs
+++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/AbpJsonValueConverter.cs
@@ -1,6 +1,6 @@
-using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
-using Newtonsoft.Json;
-using Volo.Abp.Data;
+using System.Text.Json;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+using Volo.Abp.Json.SystemTextJson.JsonConverters;
namespace Volo.Abp.EntityFrameworkCore.ValueConverters
{
@@ -16,12 +16,14 @@ namespace Volo.Abp.EntityFrameworkCore.ValueConverters
private static string SerializeObject(TPropertyType d)
{
- return JsonConvert.SerializeObject(d, Formatting.None);
+ return JsonSerializer.Serialize(d);
}
private static TPropertyType DeserializeObject(string s)
{
- return JsonConvert.DeserializeObject(s);
+ var deserializeOptions = new JsonSerializerOptions();
+ deserializeOptions.Converters.Add(new ObjectToInferredTypesConverter());
+ return JsonSerializer.Deserialize(s, deserializeOptions);
}
}
}
diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/ExtraPropertiesValueConverter.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/ExtraPropertiesValueConverter.cs
index 2fa00e3caf..661da95a19 100644
--- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/ExtraPropertiesValueConverter.cs
+++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ValueConverters/ExtraPropertiesValueConverter.cs
@@ -1,8 +1,8 @@
using System;
using System.Collections.Generic;
-using System.ComponentModel;
+using System.Text.Json;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
-using Newtonsoft.Json;
+using Volo.Abp.Json.SystemTextJson.JsonConverters;
using Volo.Abp.ObjectExtending;
namespace Volo.Abp.EntityFrameworkCore.ValueConverters
@@ -36,13 +36,14 @@ namespace Volo.Abp.EntityFrameworkCore.ValueConverters
}
}
- return JsonConvert.SerializeObject(copyDictionary, Formatting.None);
+ return JsonSerializer.Serialize(copyDictionary);
}
private static Dictionary DeserializeObject(string extraPropertiesAsJson, Type entityType)
{
- var dictionary = JsonConvert.DeserializeObject>(extraPropertiesAsJson);
-
+ var deserializeOptions = new JsonSerializerOptions();
+ deserializeOptions.Converters.Add(new ObjectToInferredTypesConverter());
+ var dictionary = JsonSerializer.Deserialize>(extraPropertiesAsJson, deserializeOptions) ?? new Dictionary();
if (entityType != null)
{
var objectExtension = ObjectExtensionManager.Instance.GetOrNull(entityType);
@@ -59,7 +60,7 @@ namespace Volo.Abp.EntityFrameworkCore.ValueConverters
}
private static object GetNormalizedValue(
- Dictionary dictionary,
+ Dictionary dictionary,
ObjectExtensionPropertyInfo property)
{
var value = dictionary.GetOrDefault(property.Name);
@@ -84,4 +85,4 @@ namespace Volo.Abp.EntityFrameworkCore.ValueConverters
}
}
}
-}
\ No newline at end of file
+}
diff --git a/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/de-DE.json b/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/de-DE.json
new file mode 100644
index 0000000000..7ec6a74841
--- /dev/null
+++ b/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/de-DE.json
@@ -0,0 +1,23 @@
+{
+ "culture": "de-DE",
+ "texts": {
+ "InternalServerErrorMessage": "Bei Ihrer Anfrage ist ein interner Fehler aufgetreten!",
+ "ValidationErrorMessage": "Ihre Anfrage ist ungültig!",
+ "ValidationNarrativeErrorMessageTitle": "Die folgenden Fehler wurden während der Validierung festgestellt.",
+ "DefaultErrorMessage": "Ein Fehler ist aufgetreten!",
+ "DefaultErrorMessageDetail": "Fehlerdetail nicht vom Server gesendet.",
+ "DefaultErrorMessage401": "Sie sind nicht authentifiziert!",
+ "DefaultErrorMessage401Detail": "Sie sollten sich anmelden, um diesen Vorgang auszuführen.",
+ "DefaultErrorMessage403": "Sie sind nicht berechtigt!",
+ "DefaultErrorMessage403Detail": "Sie dürfen diesen Vorgang nicht ausführen!",
+ "DefaultErrorMessage404": "Ressource nicht gefunden!",
+ "DefaultErrorMessage404Detail": "Die angeforderte Ressource konnte nicht auf dem Server gefunden werden!",
+ "EntityNotFoundErrorMessage": "Es gibt keine Entität {0} mit id = {1}!",
+ "Error": "Fehler",
+ "UnhandledException": "Unbehandelte Ausnahme!",
+ "401Message": "Nicht autorisiert",
+ "403Message": "Unzulässig",
+ "404Message": "Seite nicht gefunden",
+ "500Message": "Interner Serverfehler"
+ }
+}
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.Http.Client.IdentityModel.WebAssembly/Volo/Abp/Http/Client/IdentityModel/WebAssembly/BundleContributer.cs b/framework/src/Volo.Abp.Http.Client.IdentityModel.WebAssembly/Volo/Abp/Http/Client/IdentityModel/WebAssembly/BundleContributer.cs
new file mode 100644
index 0000000000..e4dec37162
--- /dev/null
+++ b/framework/src/Volo.Abp.Http.Client.IdentityModel.WebAssembly/Volo/Abp/Http/Client/IdentityModel/WebAssembly/BundleContributer.cs
@@ -0,0 +1,15 @@
+using Volo.Abp.Bundling;
+
+namespace Volo.Abp.Http.Client.IdentityModel.WebAssembly
+{
+ public class BundleContributer : BaseBundleContributer
+ {
+ public override string[] GetScripts()
+ {
+ return new string[]
+ {
+ "_content/Microsoft.AspNetCore.Components.WebAssembly.Authentication/AuthenticationService.js",
+ };
+ }
+ }
+}
diff --git a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/ApiDescriptionFinder.cs b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/ApiDescriptionFinder.cs
index a9b51eca6a..9142118b97 100644
--- a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/ApiDescriptionFinder.cs
+++ b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/ApiDescriptionFinder.cs
@@ -2,9 +2,8 @@
using System.Linq;
using System.Net.Http;
using System.Reflection;
+using System.Text.Json;
using System.Threading.Tasks;
-using Newtonsoft.Json;
-using Newtonsoft.Json.Serialization;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Http.Modeling;
using Volo.Abp.Threading;
@@ -17,11 +16,6 @@ namespace Volo.Abp.Http.Client.DynamicProxying
protected IApiDescriptionCache Cache { get; }
- private static readonly JsonSerializerSettings SharedJsonSerializerSettings = new JsonSerializerSettings
- {
- ContractResolver = new CamelCasePropertyNamesContractResolver()
- };
-
public ApiDescriptionFinder(IApiDescriptionCache cache)
{
Cache = cache;
@@ -91,9 +85,10 @@ namespace Volo.Abp.Http.Client.DynamicProxying
var content = await response.Content.ReadAsStringAsync();
- var result = JsonConvert.DeserializeObject(
- content,
- typeof(ApplicationApiDescriptionModel), SharedJsonSerializerSettings);
+ var result = JsonSerializer.Deserialize(content, new JsonSerializerOptions
+ {
+ PropertyNamingPolicy = JsonNamingPolicy.CamelCase
+ });
return (ApplicationApiDescriptionModel)result;
}
diff --git a/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ActionApiDescriptionModel.cs b/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ActionApiDescriptionModel.cs
index 7e9d375d06..fffd9d14d5 100644
--- a/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ActionApiDescriptionModel.cs
+++ b/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ActionApiDescriptionModel.cs
@@ -26,7 +26,7 @@ namespace Volo.Abp.Http.Modeling
public ReturnValueApiDescriptionModel ReturnValue { get; set; }
- private ActionApiDescriptionModel()
+ public ActionApiDescriptionModel()
{
}
@@ -71,4 +71,4 @@ namespace Volo.Abp.Http.Modeling
return $"[ActionApiDescriptionModel {Name}]";
}
}
-}
\ No newline at end of file
+}
diff --git a/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ApplicationApiDescriptionModel.cs b/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ApplicationApiDescriptionModel.cs
index cc09b7a153..77fb28eed5 100644
--- a/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ApplicationApiDescriptionModel.cs
+++ b/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ApplicationApiDescriptionModel.cs
@@ -12,9 +12,9 @@ namespace Volo.Abp.Http.Modeling
public IDictionary Types { get; set; }
- private ApplicationApiDescriptionModel()
+ public ApplicationApiDescriptionModel()
{
-
+
}
public static ApplicationApiDescriptionModel Create()
@@ -56,4 +56,4 @@ namespace Volo.Abp.Http.Modeling
return subModel;
}
}
-}
\ No newline at end of file
+}
diff --git a/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ControllerApiDescriptionModel.cs b/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ControllerApiDescriptionModel.cs
index db5a5eb37a..3c4b1ee538 100644
--- a/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ControllerApiDescriptionModel.cs
+++ b/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ControllerApiDescriptionModel.cs
@@ -16,7 +16,7 @@ namespace Volo.Abp.Http.Modeling
public Dictionary Actions { get; set; }
- private ControllerApiDescriptionModel()
+ public ControllerApiDescriptionModel()
{
}
@@ -79,4 +79,4 @@ namespace Volo.Abp.Http.Modeling
return $"[ControllerApiDescriptionModel {ControllerName}]";
}
}
-}
\ No newline at end of file
+}
diff --git a/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ControllerInterfaceApiDescriptionModel.cs b/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ControllerInterfaceApiDescriptionModel.cs
index 04b5ea1bc9..3515ee3129 100644
--- a/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ControllerInterfaceApiDescriptionModel.cs
+++ b/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ControllerInterfaceApiDescriptionModel.cs
@@ -7,9 +7,9 @@ namespace Volo.Abp.Http.Modeling
{
public string Type { get; set; }
- private ControllerInterfaceApiDescriptionModel()
+ public ControllerInterfaceApiDescriptionModel()
{
-
+
}
public static ControllerInterfaceApiDescriptionModel Create(Type type)
@@ -20,4 +20,4 @@ namespace Volo.Abp.Http.Modeling
};
}
}
-}
\ No newline at end of file
+}
diff --git a/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/MethodParameterApiDescriptionModel.cs b/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/MethodParameterApiDescriptionModel.cs
index b4e272c2f3..49e51fed17 100644
--- a/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/MethodParameterApiDescriptionModel.cs
+++ b/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/MethodParameterApiDescriptionModel.cs
@@ -19,7 +19,7 @@ namespace Volo.Abp.Http.Modeling
public object DefaultValue { get; set; }
- private MethodParameterApiDescriptionModel()
+ public MethodParameterApiDescriptionModel()
{
}
diff --git a/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ModuleApiDescriptionModel.cs b/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ModuleApiDescriptionModel.cs
index b879b90135..5c7c53745c 100644
--- a/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ModuleApiDescriptionModel.cs
+++ b/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ModuleApiDescriptionModel.cs
@@ -11,22 +11,22 @@ namespace Volo.Abp.Http.Modeling
///
/// "app".
///
- public const string DefaultRootPath = "app";
+ public const string DefaultRootPath = "app";
///
/// "Default".
///
- public const string DefaultRemoteServiceName = "Default";
-
+ public const string DefaultRemoteServiceName = "Default";
+
public string RootPath { get; set; }
public string RemoteServiceName { get; set; }
public IDictionary Controllers { get; set; }
- private ModuleApiDescriptionModel()
+ public ModuleApiDescriptionModel()
{
-
+
}
public static ModuleApiDescriptionModel Create(string rootPath, string remoteServiceName)
@@ -53,7 +53,7 @@ namespace Volo.Abp.Http.Modeling
{
return Controllers.GetOrAdd(uniqueName, () => ControllerApiDescriptionModel.Create(name, type, ignoredInterfaces));
}
-
+
public ModuleApiDescriptionModel CreateSubModel(string[] controllers, string[] actions)
{
var subModel = Create(RootPath, RemoteServiceName);
@@ -69,4 +69,4 @@ namespace Volo.Abp.Http.Modeling
return subModel;
}
}
-}
\ No newline at end of file
+}
diff --git a/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ParameterApiDescriptionModel.cs b/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ParameterApiDescriptionModel.cs
index 675ba8bf54..8bdead565e 100644
--- a/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ParameterApiDescriptionModel.cs
+++ b/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ParameterApiDescriptionModel.cs
@@ -24,7 +24,7 @@ namespace Volo.Abp.Http.Modeling
public string DescriptorName { get; set; }
- private ParameterApiDescriptionModel()
+ public ParameterApiDescriptionModel()
{
}
diff --git a/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ReturnValueApiDescriptionModel.cs b/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ReturnValueApiDescriptionModel.cs
index 83fa4bb6be..291abf09ae 100644
--- a/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ReturnValueApiDescriptionModel.cs
+++ b/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/ReturnValueApiDescriptionModel.cs
@@ -11,7 +11,7 @@ namespace Volo.Abp.Http.Modeling
public string TypeSimple { get; set; }
- private ReturnValueApiDescriptionModel()
+ public ReturnValueApiDescriptionModel()
{
}
diff --git a/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/TypeApiDescriptionModel.cs b/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/TypeApiDescriptionModel.cs
index 4b0b0b870c..6114ed2ee6 100644
--- a/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/TypeApiDescriptionModel.cs
+++ b/framework/src/Volo.Abp.Http/Volo/Abp/Http/Modeling/TypeApiDescriptionModel.cs
@@ -19,7 +19,7 @@ namespace Volo.Abp.Http.Modeling
public PropertyApiDescriptionModel[] Properties { get; set; }
- private TypeApiDescriptionModel()
+ public TypeApiDescriptionModel()
{
}
diff --git a/framework/src/Volo.Abp.Json/Volo.Abp.Json.csproj b/framework/src/Volo.Abp.Json/Volo.Abp.Json.csproj
index 4e891a687d..1ef71853fa 100644
--- a/framework/src/Volo.Abp.Json/Volo.Abp.Json.csproj
+++ b/framework/src/Volo.Abp.Json/Volo.Abp.Json.csproj
@@ -14,12 +14,9 @@
-
-
-
-
+
diff --git a/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpHybridJsonSerializer.cs b/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpHybridJsonSerializer.cs
new file mode 100644
index 0000000000..560d6baa36
--- /dev/null
+++ b/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpHybridJsonSerializer.cs
@@ -0,0 +1,62 @@
+using System;
+using System.Linq;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Options;
+using Volo.Abp.DependencyInjection;
+
+namespace Volo.Abp.Json
+{
+ public class AbpHybridJsonSerializer : IJsonSerializer, ITransientDependency
+ {
+ protected AbpJsonOptions Options { get; }
+
+ protected IServiceScopeFactory ServiceScopeFactory { get; }
+
+ public AbpHybridJsonSerializer(IOptions options, IServiceScopeFactory serviceScopeFactory)
+ {
+ Options = options.Value;
+ ServiceScopeFactory = serviceScopeFactory;
+ }
+
+ public string Serialize(object obj, bool camelCase = true, bool indented = false)
+ {
+ using (var scope = ServiceScopeFactory.CreateScope())
+ {
+ var serializerProvider = GetSerializerProvider(scope.ServiceProvider, obj.GetType());
+ return serializerProvider.Serialize(obj, camelCase, indented);
+ }
+ }
+
+ public T Deserialize(string jsonString, bool camelCase = true)
+ {
+ using (var scope = ServiceScopeFactory.CreateScope())
+ {
+ var serializerProvider = GetSerializerProvider(scope.ServiceProvider, typeof(T));
+ return serializerProvider.Deserialize(jsonString, camelCase);
+ }
+ }
+
+ public object Deserialize(Type type, string jsonString, bool camelCase = true)
+ {
+ using (var scope = ServiceScopeFactory.CreateScope())
+ {
+ var serializerProvider = GetSerializerProvider(scope.ServiceProvider, type);
+ return serializerProvider.Deserialize(type, jsonString, camelCase);
+ }
+ }
+
+ protected virtual IJsonSerializerProvider GetSerializerProvider(IServiceProvider serviceProvider, Type type)
+ {
+ foreach (var providerType in Options.Providers.Reverse())
+ {
+ var provider = serviceProvider.GetRequiredService(providerType) as IJsonSerializerProvider;
+ if (provider.CanHandle(type))
+ {
+ return provider;
+ }
+ }
+
+ throw new AbpException($"There is no IJsonSerializerProvider that can handle '{type.GetFullNameWithAssemblyName()}'!");
+ }
+ }
+}
diff --git a/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonModule.cs b/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonModule.cs
index c3ea13da43..fae54ec08b 100644
--- a/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonModule.cs
+++ b/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonModule.cs
@@ -1,4 +1,8 @@
-using Volo.Abp.Json.Newtonsoft;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.DependencyInjection.Extensions;
+using Microsoft.Extensions.Options;
+using Volo.Abp.Json.Newtonsoft;
+using Volo.Abp.Json.SystemTextJson;
using Volo.Abp.Modularity;
using Volo.Abp.Timing;
@@ -9,6 +13,15 @@ namespace Volo.Abp.Json
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
+ context.Services.TryAddEnumerable(ServiceDescriptor
+ .Transient, AbpSystemTextJsonSerializerOptionsSetup>());
+
+ Configure(options =>
+ {
+ options.Providers.Add();
+ options.Providers.Add();
+ });
+
Configure(options =>
{
options.Converters.Add();
diff --git a/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonOptions.cs b/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonOptions.cs
index 9449aa338d..55a4683e26 100644
--- a/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonOptions.cs
+++ b/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonOptions.cs
@@ -1,4 +1,6 @@
-namespace Volo.Abp.Json
+using Volo.Abp.Collections;
+
+namespace Volo.Abp.Json
{
public class AbpJsonOptions
{
@@ -6,5 +8,12 @@
/// Used to set default value for the DateTimeFormat.
///
public string DefaultDateTimeFormat { get; set; }
+
+ public ITypeList Providers { get; }
+
+ public AbpJsonOptions()
+ {
+ Providers = new TypeList();
+ }
}
-}
\ No newline at end of file
+}
diff --git a/framework/src/Volo.Abp.Json/Volo/Abp/Json/IJsonSerializerProvider.cs b/framework/src/Volo.Abp.Json/Volo/Abp/Json/IJsonSerializerProvider.cs
new file mode 100644
index 0000000000..f844dc5fd0
--- /dev/null
+++ b/framework/src/Volo.Abp.Json/Volo/Abp/Json/IJsonSerializerProvider.cs
@@ -0,0 +1,15 @@
+using System;
+
+namespace Volo.Abp.Json
+{
+ public interface IJsonSerializerProvider
+ {
+ bool CanHandle(Type type);
+
+ string Serialize(object obj, bool camelCase = true, bool indented = false);
+
+ T Deserialize(string jsonString, bool camelCase = true);
+
+ object Deserialize(Type type, string jsonString, bool camelCase = true);
+ }
+}
diff --git a/framework/src/Volo.Abp.Json/Volo/Abp/Json/Newtonsoft/NewtonsoftJsonSerializer.cs b/framework/src/Volo.Abp.Json/Volo/Abp/Json/Newtonsoft/AbpNewtonsoftJsonSerializerProvider.cs
similarity index 91%
rename from framework/src/Volo.Abp.Json/Volo/Abp/Json/Newtonsoft/NewtonsoftJsonSerializer.cs
rename to framework/src/Volo.Abp.Json/Volo/Abp/Json/Newtonsoft/AbpNewtonsoftJsonSerializerProvider.cs
index 20e49ac817..2d288459cf 100644
--- a/framework/src/Volo.Abp.Json/Volo/Abp/Json/Newtonsoft/NewtonsoftJsonSerializer.cs
+++ b/framework/src/Volo.Abp.Json/Volo/Abp/Json/Newtonsoft/AbpNewtonsoftJsonSerializerProvider.cs
@@ -9,14 +9,14 @@ using Volo.Abp.DependencyInjection;
namespace Volo.Abp.Json.Newtonsoft
{
- public class NewtonsoftJsonSerializer : IJsonSerializer, ITransientDependency
+ public class AbpNewtonsoftJsonSerializerProvider : IJsonSerializerProvider, ITransientDependency
{
private static readonly CamelCaseExceptDictionaryKeysResolver SharedCamelCaseExceptDictionaryKeysResolver =
new CamelCaseExceptDictionaryKeysResolver();
protected List Converters { get; }
- public NewtonsoftJsonSerializer(
+ public AbpNewtonsoftJsonSerializerProvider(
IOptions options,
IServiceProvider serviceProvider)
{
@@ -26,6 +26,11 @@ namespace Volo.Abp.Json.Newtonsoft
.ToList();
}
+ public bool CanHandle(Type type)
+ {
+ return true;
+ }
+
public string Serialize(object obj, bool camelCase = true, bool indented = false)
{
return JsonConvert.SerializeObject(obj, CreateSerializerSettings(camelCase, indented));
diff --git a/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/AbpSystemTextJsonSerializerOptions.cs b/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/AbpSystemTextJsonSerializerOptions.cs
new file mode 100644
index 0000000000..e2774df58a
--- /dev/null
+++ b/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/AbpSystemTextJsonSerializerOptions.cs
@@ -0,0 +1,23 @@
+using System.Text.Json;
+using Volo.Abp.Collections;
+
+namespace Volo.Abp.Json.SystemTextJson
+{
+ public class AbpSystemTextJsonSerializerOptions
+ {
+ public JsonSerializerOptions JsonSerializerOptions { get; }
+
+ public ITypeList UnsupportedTypes { get; }
+
+ public AbpSystemTextJsonSerializerOptions()
+ {
+ JsonSerializerOptions = new JsonSerializerOptions(JsonSerializerDefaults.Web)
+ {
+ ReadCommentHandling = JsonCommentHandling.Skip,
+ AllowTrailingCommas = true
+ };
+
+ UnsupportedTypes = new TypeList();
+ }
+ }
+}
diff --git a/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/AbpSystemTextJsonSerializerOptionsSetup.cs b/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/AbpSystemTextJsonSerializerOptionsSetup.cs
new file mode 100644
index 0000000000..4b56997d47
--- /dev/null
+++ b/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/AbpSystemTextJsonSerializerOptionsSetup.cs
@@ -0,0 +1,24 @@
+using System;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Options;
+using Volo.Abp.Json.SystemTextJson;
+using Volo.Abp.Json.SystemTextJson.JsonConverters;
+
+namespace Volo.Abp.Json
+{
+ public class AbpSystemTextJsonSerializerOptionsSetup : IConfigureOptions
+ {
+ protected IServiceProvider ServiceProvider { get; }
+
+ public AbpSystemTextJsonSerializerOptionsSetup(IServiceProvider serviceProvider)
+ {
+ ServiceProvider = serviceProvider;
+ }
+
+ public void Configure(AbpSystemTextJsonSerializerOptions options)
+ {
+ options.JsonSerializerOptions.Converters.Add(ServiceProvider.GetRequiredService());
+ options.JsonSerializerOptions.Converters.Add(ServiceProvider.GetRequiredService());
+ }
+ }
+}
diff --git a/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/AbpSystemTextJsonSerializerProvider.cs b/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/AbpSystemTextJsonSerializerProvider.cs
new file mode 100644
index 0000000000..570d1c162c
--- /dev/null
+++ b/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/AbpSystemTextJsonSerializerProvider.cs
@@ -0,0 +1,59 @@
+using System;
+using System.Text.Json;
+using Microsoft.Extensions.Options;
+using Volo.Abp.DependencyInjection;
+
+namespace Volo.Abp.Json.SystemTextJson
+{
+ public class AbpSystemTextJsonSerializerProvider : IJsonSerializerProvider, ITransientDependency
+ {
+ protected AbpSystemTextJsonSerializerOptions Options { get; }
+
+ protected AbpSystemTextJsonUnsupportedTypeMatcher AbpSystemTextJsonUnsupportedTypeMatcher { get; }
+
+ public AbpSystemTextJsonSerializerProvider(
+ IOptions options,
+ AbpSystemTextJsonUnsupportedTypeMatcher abpSystemTextJsonUnsupportedTypeMatcher)
+ {
+ AbpSystemTextJsonUnsupportedTypeMatcher = abpSystemTextJsonUnsupportedTypeMatcher;
+ Options = options.Value;
+ }
+
+ public bool CanHandle(Type type)
+ {
+ return !AbpSystemTextJsonUnsupportedTypeMatcher.Match(type);
+ }
+
+ public string Serialize(object obj, bool camelCase = true, bool indented = false)
+ {
+ return JsonSerializer.Serialize(obj, CreateJsonSerializerOptions(camelCase, indented));
+ }
+
+ public T Deserialize(string jsonString, bool camelCase = true)
+ {
+ return JsonSerializer.Deserialize(jsonString, CreateJsonSerializerOptions(camelCase));
+ }
+
+ public object Deserialize(Type type, string jsonString, bool camelCase = true)
+ {
+ return JsonSerializer.Deserialize(jsonString, type, CreateJsonSerializerOptions(camelCase));
+ }
+
+ protected virtual JsonSerializerOptions CreateJsonSerializerOptions(bool camelCase = true, bool indented = false)
+ {
+ var settings = new JsonSerializerOptions(Options.JsonSerializerOptions);
+
+ if (camelCase)
+ {
+ settings.PropertyNamingPolicy = JsonNamingPolicy.CamelCase;
+ }
+
+ if (indented)
+ {
+ settings.WriteIndented = true;
+ }
+
+ return settings;
+ }
+ }
+}
diff --git a/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/AbpSystemTextJsonUnsupportedTypeMatcher.cs b/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/AbpSystemTextJsonUnsupportedTypeMatcher.cs
new file mode 100644
index 0000000000..2beea42c68
--- /dev/null
+++ b/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/AbpSystemTextJsonUnsupportedTypeMatcher.cs
@@ -0,0 +1,21 @@
+using System;
+using Microsoft.Extensions.Options;
+using Volo.Abp.DependencyInjection;
+
+namespace Volo.Abp.Json.SystemTextJson
+{
+ public class AbpSystemTextJsonUnsupportedTypeMatcher : ITransientDependency
+ {
+ protected AbpSystemTextJsonSerializerOptions Options { get; }
+
+ public AbpSystemTextJsonUnsupportedTypeMatcher(IOptions options)
+ {
+ Options = options.Value;
+ }
+
+ public virtual bool Match(Type type)
+ {
+ return Options.UnsupportedTypes.Contains(type);
+ }
+ }
+}
diff --git a/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/JsonConverters/AbpDateTimeConverter.cs b/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/JsonConverters/AbpDateTimeConverter.cs
new file mode 100644
index 0000000000..a87add029e
--- /dev/null
+++ b/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/JsonConverters/AbpDateTimeConverter.cs
@@ -0,0 +1,38 @@
+using System;
+using System.Text.Json;
+using System.Text.Json.Serialization;
+using Microsoft.Extensions.Options;
+using Volo.Abp.DependencyInjection;
+using Volo.Abp.Timing;
+
+namespace Volo.Abp.Json.SystemTextJson.JsonConverters
+{
+ public class AbpDateTimeConverter : JsonConverter, ITransientDependency
+ {
+ private readonly IClock _clock;
+ private readonly AbpJsonOptions _options;
+
+ public AbpDateTimeConverter(IClock clock, IOptions abpJsonOptions)
+ {
+ _clock = clock;
+ _options = abpJsonOptions.Value;
+ }
+
+ public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+ {
+ return _clock.Normalize(reader.GetDateTime());
+ }
+
+ public override void Write(Utf8JsonWriter writer, DateTime value, JsonSerializerOptions options)
+ {
+ if (_options.DefaultDateTimeFormat.IsNullOrWhiteSpace())
+ {
+ writer.WriteStringValue(_clock.Normalize(value));
+ }
+ else
+ {
+ writer.WriteStringValue(_clock.Normalize(value).ToString(_options.DefaultDateTimeFormat));
+ }
+ }
+ }
+}
diff --git a/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/JsonConverters/AbpNullableDateTimeConverter.cs b/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/JsonConverters/AbpNullableDateTimeConverter.cs
new file mode 100644
index 0000000000..bad650b4d8
--- /dev/null
+++ b/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/JsonConverters/AbpNullableDateTimeConverter.cs
@@ -0,0 +1,50 @@
+using System;
+using System.Text.Json;
+using System.Text.Json.Serialization;
+using Microsoft.Extensions.Options;
+using Volo.Abp.DependencyInjection;
+using Volo.Abp.Timing;
+
+namespace Volo.Abp.Json.SystemTextJson.JsonConverters
+{
+ public class AbpNullableDateTimeConverter : JsonConverter, ITransientDependency
+ {
+ private readonly IClock _clock;
+ private readonly AbpJsonOptions _options;
+
+ public AbpNullableDateTimeConverter(IClock clock, IOptions abpJsonOptions)
+ {
+ _clock = clock;
+ _options = abpJsonOptions.Value;
+ }
+
+ public override DateTime? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+ {
+ if (reader.TryGetDateTime(out var dateTime))
+ {
+ return _clock.Normalize(dateTime);
+ }
+
+ return null;
+ }
+
+ public override void Write(Utf8JsonWriter writer, DateTime? value, JsonSerializerOptions options)
+ {
+ if (value == null)
+ {
+ writer.WriteNullValue();
+ }
+ else
+ {
+ if (_options.DefaultDateTimeFormat.IsNullOrWhiteSpace())
+ {
+ writer.WriteStringValue(_clock.Normalize(value.Value));
+ }
+ else
+ {
+ writer.WriteStringValue(_clock.Normalize(value.Value).ToString(_options.DefaultDateTimeFormat));
+ }
+ }
+ }
+ }
+}
diff --git a/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/JsonConverters/ObjectToInferredTypesConverter.cs b/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/JsonConverters/ObjectToInferredTypesConverter.cs
new file mode 100644
index 0000000000..02fa9bbaff
--- /dev/null
+++ b/framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/JsonConverters/ObjectToInferredTypesConverter.cs
@@ -0,0 +1,57 @@
+using System;
+using System.Text.Json;
+using System.Text.Json.Serialization;
+
+namespace Volo.Abp.Json.SystemTextJson.JsonConverters
+{
+ ///
+ /// https://docs.microsoft.com/en-us/dotnet/standard/serialization/system-text-json-converters-how-to#deserialize-inferred-types-to-object-properties
+ ///
+ public class ObjectToInferredTypesConverter : JsonConverter
+ {
+ public override object Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+ {
+ if (reader.TokenType == JsonTokenType.True)
+ {
+ return true;
+ }
+
+ if (reader.TokenType == JsonTokenType.False)
+ {
+ return false;
+ }
+
+ if (reader.TokenType == JsonTokenType.Number)
+ {
+ if (reader.TryGetInt64(out var l))
+ {
+ return l;
+ }
+
+ return reader.GetDouble();
+ }
+
+ if (reader.TokenType == JsonTokenType.String)
+ {
+ if (reader.TryGetDateTime(out var datetime))
+ {
+ return datetime;
+ }
+
+ return reader.GetString();
+ }
+
+ // Use JsonElement as fallback.
+ // Newtonsoft uses JArray or JObject.
+ using (var document = JsonDocument.ParseValue(ref reader))
+ {
+ return document.RootElement.Clone();
+ }
+ }
+
+ public override void Write(Utf8JsonWriter writer, object objectToWrite, JsonSerializerOptions options)
+ {
+ throw new InvalidOperationException("Should not get here.");
+ }
+ }
+}
diff --git a/framework/src/Volo.Abp.Ldap/Volo/Abp/Ldap/Localization/de-DE.json b/framework/src/Volo.Abp.Ldap/Volo/Abp/Ldap/Localization/de-DE.json
new file mode 100644
index 0000000000..3d2dbb07da
--- /dev/null
+++ b/framework/src/Volo.Abp.Ldap/Volo/Abp/Ldap/Localization/de-DE.json
@@ -0,0 +1,15 @@
+{
+ "culture": "de-DE",
+ "texts": {
+ "DisplayName:Abp.Ldap.ServerHost": "Server-Host",
+ "Description:Abp.Ldap.ServerHost": "Server-Host",
+ "DisplayName:Abp.Ldap.ServerPort": "Server-Port",
+ "Description:Abp.Ldap.ServerPort": "Server-Port",
+ "DisplayName:Abp.Ldap.BaseDc": "Basisdomänenkomponente",
+ "Description:Abp.Ldap.BaseDc": "Basisdomänenkomponente",
+ "DisplayName:Abp.Ldap.UserName": "Benutzername",
+ "Description:Abp.Ldap.UserName": "Benutzername",
+ "DisplayName:Abp.Ldap.Password": "Passwort",
+ "Description:Abp.Ldap.Password": "Passwort"
+ }
+}
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.Localization/Volo.Abp.Localization.csproj b/framework/src/Volo.Abp.Localization/Volo.Abp.Localization.csproj
index df04ab95df..64352257f3 100644
--- a/framework/src/Volo.Abp.Localization/Volo.Abp.Localization.csproj
+++ b/framework/src/Volo.Abp.Localization/Volo.Abp.Localization.csproj
@@ -19,10 +19,6 @@
-
-
-
-
diff --git a/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Json/JsonLocalizationDictionaryBuilder.cs b/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Json/JsonLocalizationDictionaryBuilder.cs
index 9b1f1617f6..9ccc6738a6 100644
--- a/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Json/JsonLocalizationDictionaryBuilder.cs
+++ b/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Json/JsonLocalizationDictionaryBuilder.cs
@@ -1,19 +1,13 @@
using System;
using System.Collections.Generic;
using System.IO;
+using System.Text.Json;
using Microsoft.Extensions.Localization;
-using Newtonsoft.Json;
-using Newtonsoft.Json.Serialization;
namespace Volo.Abp.Localization.Json
{
public static class JsonLocalizationDictionaryBuilder
{
- private static readonly JsonSerializerSettings SharedJsonSerializerSettings = new JsonSerializerSettings
- {
- ContractResolver = new CamelCasePropertyNamesContractResolver()
- };
-
///
/// Builds an from given file.
///
@@ -39,8 +33,15 @@ namespace Volo.Abp.Localization.Json
JsonLocalizationFile jsonFile;
try
{
- jsonFile = JsonConvert.DeserializeObject(
- jsonString, SharedJsonSerializerSettings);
+ var options = new JsonSerializerOptions
+ {
+ PropertyNameCaseInsensitive = true,
+ DictionaryKeyPolicy = JsonNamingPolicy.CamelCase,
+ ReadCommentHandling = JsonCommentHandling.Skip,
+ AllowTrailingCommas = true
+ };
+
+ jsonFile = JsonSerializer.Deserialize(jsonString, options);
}
catch (JsonException ex)
{
@@ -80,4 +81,4 @@ namespace Volo.Abp.Localization.Json
return new StaticLocalizationDictionary(cultureCode, dictionary);
}
}
-}
\ No newline at end of file
+}
diff --git a/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Json/JsonLocalizationFile.cs b/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Json/JsonLocalizationFile.cs
index c2dc911532..2af738221a 100644
--- a/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Json/JsonLocalizationFile.cs
+++ b/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Json/JsonLocalizationFile.cs
@@ -9,11 +9,11 @@ namespace Volo.Abp.Localization.Json
///
public string Culture { get; set; }
- public Dictionary Texts { get; }
+ public Dictionary Texts { get; set; }
public JsonLocalizationFile()
{
Texts = new Dictionary();
}
}
-}
\ No newline at end of file
+}
diff --git a/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Resources/AbpLocalization/de-DE.json b/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Resources/AbpLocalization/de-DE.json
new file mode 100644
index 0000000000..7e2aef7fd7
--- /dev/null
+++ b/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Resources/AbpLocalization/de-DE.json
@@ -0,0 +1,7 @@
+{
+ "culture": "de-DE",
+ "texts": {
+ "DisplayName:Abp.Localization.DefaultLanguage": "Standard-Sprache",
+ "Description:Abp.Localization.DefaultLanguage": "Die Standard-Sprache der Anwendung."
+ }
+}
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/Utf8JsonMemoryDbSerializer.cs b/framework/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/Utf8JsonMemoryDbSerializer.cs
index e68b4b6f37..e0040a678d 100644
--- a/framework/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/Utf8JsonMemoryDbSerializer.cs
+++ b/framework/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/Utf8JsonMemoryDbSerializer.cs
@@ -1,52 +1,27 @@
using System;
-using System.Reflection;
-using System.Text;
-using Newtonsoft.Json;
-using Newtonsoft.Json.Serialization;
+using System.Text.Json;
+using Microsoft.Extensions.Options;
using Volo.Abp.DependencyInjection;
-using Volo.Abp.Json;
namespace Volo.Abp.Domain.Repositories.MemoryDb
{
public class Utf8JsonMemoryDbSerializer : IMemoryDbSerializer, ITransientDependency
{
- private static readonly JsonSerializerSettings MemoryDbSerializerSettings;
+ protected Utf8JsonMemoryDbSerializerOptions Options { get; }
- static Utf8JsonMemoryDbSerializer()
+ public Utf8JsonMemoryDbSerializer(IOptions options)
{
- MemoryDbSerializerSettings = new JsonSerializerSettings
- {
- ContractResolver = new ResolverWithPrivateSetters(),
- ConstructorHandling = ConstructorHandling.AllowNonPublicDefaultConstructor
- };
+ Options = options.Value;
}
byte[] IMemoryDbSerializer.Serialize(object obj)
{
- var jsonString = JsonConvert.SerializeObject(obj, MemoryDbSerializerSettings);
- return Encoding.UTF8.GetBytes(jsonString);
+ return JsonSerializer.SerializeToUtf8Bytes(obj, Options.JsonSerializerOptions);
}
public object Deserialize(byte[] value, Type type)
{
- var jsonString = Encoding.UTF8.GetString(value);
- return JsonConvert.DeserializeObject(jsonString, type, MemoryDbSerializerSettings);
- }
-
- public class ResolverWithPrivateSetters : DefaultContractResolver
- {
- protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
- {
- var prop = base.CreateProperty(member, memberSerialization);
- if (prop.Writable)
- {
- return prop;
- }
-
- prop.Writable = member.As()?.GetSetMethod(true) != null;
-
- return prop;
- }
+ return JsonSerializer.Deserialize(value, type, Options.JsonSerializerOptions);
}
}
-}
\ No newline at end of file
+}
diff --git a/framework/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/Utf8JsonMemoryDbSerializerOptions.cs b/framework/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/Utf8JsonMemoryDbSerializerOptions.cs
new file mode 100644
index 0000000000..a31e9d5eff
--- /dev/null
+++ b/framework/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/Utf8JsonMemoryDbSerializerOptions.cs
@@ -0,0 +1,14 @@
+using System.Text.Json;
+
+namespace Volo.Abp.Domain.Repositories.MemoryDb
+{
+ public class Utf8JsonMemoryDbSerializerOptions
+ {
+ public JsonSerializerOptions JsonSerializerOptions { get; }
+
+ public Utf8JsonMemoryDbSerializerOptions()
+ {
+ JsonSerializerOptions = new JsonSerializerOptions();
+ }
+ }
+}
diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/AbpMongoDbContext.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/AbpMongoDbContext.cs
index e961fdf256..5e7eb84111 100644
--- a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/AbpMongoDbContext.cs
+++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/AbpMongoDbContext.cs
@@ -1,5 +1,4 @@
using System.Collections.Generic;
-using MongoDB.Bson;
using MongoDB.Driver;
using Volo.Abp.DependencyInjection;
@@ -9,6 +8,8 @@ namespace Volo.Abp.MongoDB
{
public IMongoModelSource ModelSource { get; set; }
+ public IMongoClient Client { get; private set; }
+
public IMongoDatabase Database { get; private set; }
public IClientSessionHandle SessionHandle { get; private set; }
@@ -18,9 +19,10 @@ namespace Volo.Abp.MongoDB
}
- public virtual void InitializeDatabase(IMongoDatabase database, IClientSessionHandle sessionHandle)
+ public virtual void InitializeDatabase(IMongoDatabase database, IMongoClient client, IClientSessionHandle sessionHandle)
{
Database = database;
+ Client = client;
SessionHandle = sessionHandle;
}
diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/IAbpMongoDbContext.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/IAbpMongoDbContext.cs
index c4049e1389..008c4d5fef 100644
--- a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/IAbpMongoDbContext.cs
+++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/IAbpMongoDbContext.cs
@@ -4,6 +4,8 @@ namespace Volo.Abp.MongoDB
{
public interface IAbpMongoDbContext
{
+ IMongoClient Client { get; }
+
IMongoDatabase Database { get; }
IMongoCollection Collection();
diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/Uow/MongoDB/UnitOfWorkMongoDbContextProvider.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/Uow/MongoDB/UnitOfWorkMongoDbContextProvider.cs
index 0d9969ee51..d3d8a419fb 100644
--- a/framework/src/Volo.Abp.MongoDB/Volo/Abp/Uow/MongoDB/UnitOfWorkMongoDbContextProvider.cs
+++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/Uow/MongoDB/UnitOfWorkMongoDbContextProvider.cs
@@ -59,7 +59,7 @@ namespace Volo.Abp.Uow.MongoDB
}
var dbContext = unitOfWork.ServiceProvider.GetRequiredService();
- dbContext.ToAbpMongoDbContext().InitializeDatabase(database, null);
+ dbContext.ToAbpMongoDbContext().InitializeDatabase(database, client, null);
return dbContext;
}
@@ -90,11 +90,11 @@ namespace Volo.Abp.Uow.MongoDB
new MongoDbTransactionApi(session)
);
- dbContext.ToAbpMongoDbContext().InitializeDatabase(database, session);
+ dbContext.ToAbpMongoDbContext().InitializeDatabase(database, client, session);
}
else
{
- dbContext.ToAbpMongoDbContext().InitializeDatabase(database, activeTransaction.SessionHandle);
+ dbContext.ToAbpMongoDbContext().InitializeDatabase(database, client, activeTransaction.SessionHandle);
}
return dbContext;
diff --git a/framework/src/Volo.Abp.Timing/Volo/Abp/Timing/Localization/de-DE.json b/framework/src/Volo.Abp.Timing/Volo/Abp/Timing/Localization/de-DE.json
new file mode 100644
index 0000000000..f4e1f7668d
--- /dev/null
+++ b/framework/src/Volo.Abp.Timing/Volo/Abp/Timing/Localization/de-DE.json
@@ -0,0 +1,7 @@
+{
+ "culture": "de-DE",
+ "texts": {
+ "DisplayName:Abp.Timing.Timezone": "Zeitzone",
+ "Description:Abp.Timing.Timezone": "Anwendungszeitzone"
+ }
+}
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/Localization/Resource/de-DE.json b/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/Localization/Resource/de-DE.json
new file mode 100644
index 0000000000..854ab862d1
--- /dev/null
+++ b/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/Localization/Resource/de-DE.json
@@ -0,0 +1,6 @@
+{
+ "culture": "de-DE",
+ "texts": {
+ "Menu:Administration": "Administration"
+ }
+}
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/de-DE.json b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/de-DE.json
new file mode 100644
index 0000000000..2ab3dd90e9
--- /dev/null
+++ b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/de-DE.json
@@ -0,0 +1,52 @@
+{
+ "culture": "de-DE",
+ "texts": {
+ "Languages": "Sprachen",
+ "AreYouSure": "Sind Sie sicher?",
+ "Cancel": "Abbrechen",
+ "Clear": "Bereinigen",
+ "Yes": "Ja",
+ "No": "Nein",
+ "Ok": "Ok",
+ "Close": "Schließen",
+ "Save": "Speichern",
+ "SavingWithThreeDot": "Speichern...",
+ "Actions": "Aktionen",
+ "Delete": "Löschen",
+ "Edit": "Bearbeiten",
+ "Refresh": "Aktualisieren",
+ "Language": "Sprache",
+ "LoadMore": "Mehr laden",
+ "ProcessingWithThreeDot": "Wird Bearbeitet...",
+ "LoadingWithThreeDot": "Wird geladen...",
+ "Welcome": "Wilkommen",
+ "Login": "Anmelden",
+ "Register": "Registrieren",
+ "Logout": "Abmelden",
+ "Submit": "Senden",
+ "Back": "Zurück",
+ "PagerSearch": "Suche",
+ "PagerNext": "Nächste",
+ "PagerPrevious": "Vorherige",
+ "PagerFirst": "Erste",
+ "PagerLast": "Letzte",
+ "PagerInfo": "Anzeigen von _START_ bis _END_ von _TOTAL_ Einträgen",
+ "PagerInfo{0}{1}{2}": "{0} bis {1} von {2} Einträgen anzeigen",
+ "PagerInfoEmpty": "0 bis 0 von 0 Einträgen anzeigen",
+ "PagerInfoFiltered": "(gefiltert aus _MAX_ Gesamteinträgen)",
+ "NoDataAvailableInDatatable": "Keine Daten verfügbar",
+ "Total": "gesamt",
+ "Selected": "ausgewählt",
+ "PagerShowMenuEntries": "_MENU_ Einträge anzeigen",
+ "DatatableActionDropdownDefaultText": "Aktionen",
+ "ChangePassword": "Passwort ändern",
+ "PersonalInfo": "Mein Profil",
+ "AreYouSureYouWantToCancelEditingWarningMessage": "Sie haben nicht gespeicherte Änderungen.",
+ "GoHomePage": "Gehen Sie zur Startseite",
+ "GoBack": "Geh zurück",
+ "Search": "Suche",
+ "ItemWillBeDeletedMessageWithFormat": "{0} wird gelöscht!",
+ "ItemWillBeDeletedMessage": "Dieser Element wird gelöscht!",
+ "ManageYourAccount": "Verwalten Sie Ihr Benutzerkonto"
+ }
+}
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/DataAnnotationObjectValidationContributor.cs b/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/DataAnnotationObjectValidationContributor.cs
index 25b59fbbcf..ae016e6954 100644
--- a/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/DataAnnotationObjectValidationContributor.cs
+++ b/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/DataAnnotationObjectValidationContributor.cs
@@ -52,7 +52,7 @@ namespace Volo.Abp.Validation
foreach (var item in enumerable)
{
//Do not recursively validate for primitive objects
- if (TypeHelper.IsPrimitiveExtended(item.GetType()))
+ if (item == null || TypeHelper.IsPrimitiveExtended(item.GetType()))
{
break;
}
diff --git a/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/de-DE.json b/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/de-DE.json
new file mode 100644
index 0000000000..f36417ecf4
--- /dev/null
+++ b/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/de-DE.json
@@ -0,0 +1,34 @@
+{
+ "culture": "de-DE",
+ "texts": {
+ "'{0}' and '{1}' do not match.": "'{0}' und '{1}' stimmen nicht überein.",
+ "The {0} field is not a valid credit card number.": "Das Feld {0} ist keine gültige Kreditkartennummer.",
+ "{0} is not valid.": "{0} ist ungültig.",
+ "The {0} field is not a valid e-mail address.": "Das Feld {0} ist keine gültige E-Mail-Adresse.",
+ "The {0} field only accepts files with the following extensions: {1}": "Das Feld {0} akzeptiert nur Dateien mit den folgenden Erweiterungen: {1}",
+ "The field {0} must be a string or array type with a maximum length of '{1}'.": "Das Feld {0} muss ein String- oder Array-Typ mit einer maximalen Länge von '{1}' sein.",
+ "The field {0} must be a string or array type with a minimum length of '{1}'.": "Das Feld {0} muss ein String- oder Array-Typ mit einer Mindestlänge von '{1}' sein.",
+ "The {0} field is not a valid phone number.": "Das Feld {0} ist keine gültige Telefonnummer.",
+ "The field {0} must be between {1} and {2}.": "Das Feld {0} muss zwischen {1} und {2} liegen.",
+ "The field {0} must match the regular expression '{1}'.": "Das Feld {0} stimmt nicht mit dem gefordeten Format überein.",
+ "The {0} field is required.": "Das Feld {0} stimmt nicht mit dem angeforderten Format überein.",
+ "The field {0} must be a string with a maximum length of {1}.": "Das Feld {0} muss eine Zeichenfolge mit einer maximalen Länge von {1} sein.",
+ "The field {0} must be a string with a minimum length of {2} and a maximum length of {1}.": "Das Feld {0} muss eine Zeichenfolge mit einer Mindestlänge von {2} und einer Maximallänge von {1} sein.",
+ "The {0} field is not a valid fully-qualified http, https, or ftp URL.": "Das Feld {0} ist keine gültige, vollqualifizierte http-, https- oder ftp-URL.",
+ "The field {0} is invalid.": "Das Feld {0} ist ungültig.",
+ "ThisFieldIsNotAValidCreditCardNumber.": "Dieses Feld ist keine gültige Kreditkartennummer.",
+ "ThisFieldIsNotValid.": "Dieses Feld ist ungültig.",
+ "ThisFieldIsNotAValidEmailAddress.": "Dieses Feld ist keine gültige E-Mail-Adresse.",
+ "ThisFieldOnlyAcceptsFilesWithTheFollowingExtensions:{0}": "Dieses Feld akzeptiert nur Dateien mit den folgenden Erweiterungen: {0}",
+ "ThisFieldMustBeAStringOrArrayTypeWithAMaximumLengthOf{0}": "Dieses Feld muss ein String- oder Array-Typ mit einer maximalen Länge von '{0}' sein.",
+ "ThisFieldMustBeAStringOrArrayTypeWithAMinimumLengthOf{0}": "Dieses Feld muss ein String- oder Array-Typ mit einer Mindestlänge von '{0}' sein.",
+ "ThisFieldIsNotAValidPhoneNumber.": "Dieses Feld ist keine gültige Telefonnummer.",
+ "ThisFieldMustBeBetween{0}And{1}": "Dieses Feld muss zwischen {0} und {1} liegen.",
+ "ThisFieldMustMatchTheRegularExpression{0}": "Dieses Feld muss mit dem regulären Ausdruck '{0}' übereinstimmen.",
+ "ThisFieldIsRequired.": "Dieses Feld wird benötigt.",
+ "ThisFieldMustBeAStringWithAMaximumLengthOf{0}": "Dieses Feld muss eine Zeichenfolge mit einer maximalen Länge von {0} sein.",
+ "ThisFieldMustBeAStringWithAMinimumLengthOf{1}AndAMaximumLengthOf{0}": "Dieses Feld muss eine Zeichenfolge mit einer Mindestlänge von {1} und einer Maximallänge von {0} sein.",
+ "ThisFieldIsNotAValidFullyQualifiedHttpHttpsOrFtpUrl": "Dieses Feld ist keine gültige, vollqualifizierte http-, https- oder ftp-URL.",
+ "ThisFieldIsInvalid.": "Dieses Feld ist ungültig."
+ }
+}
\ No newline at end of file
diff --git a/framework/test/Volo.Abp.AspNetCore.Authentication.OAuth.Tests/Volo/Abp/AspNetCore/Authentication/OAuth/Claims/MultipleClaimAction_Tests.cs b/framework/test/Volo.Abp.AspNetCore.Authentication.OAuth.Tests/Volo/Abp/AspNetCore/Authentication/OAuth/Claims/MultipleClaimAction_Tests.cs
index bf869fc809..dd53e82167 100644
--- a/framework/test/Volo.Abp.AspNetCore.Authentication.OAuth.Tests/Volo/Abp/AspNetCore/Authentication/OAuth/Claims/MultipleClaimAction_Tests.cs
+++ b/framework/test/Volo.Abp.AspNetCore.Authentication.OAuth.Tests/Volo/Abp/AspNetCore/Authentication/OAuth/Claims/MultipleClaimAction_Tests.cs
@@ -1,7 +1,6 @@
using System.Linq;
using System.Security.Claims;
using System.Text.Json;
-using Newtonsoft.Json.Linq;
using Shouldly;
using Volo.Abp.Security.Claims;
using Xunit;
diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Localization/Resource/de-DE.json b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Localization/Resource/de-DE.json
new file mode 100644
index 0000000000..4df3b36adf
--- /dev/null
+++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Localization/Resource/de-DE.json
@@ -0,0 +1,7 @@
+{
+ "culture": "de-DE",
+ "texts": {
+ "BirthDate": "Geburtsdatum",
+ "Value1": "Wert Eins"
+ }
+}
\ No newline at end of file
diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ModelBinding/ModelBindingController.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ModelBinding/ModelBindingController.cs
index 2c5a69e7e7..eea25417fc 100644
--- a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ModelBinding/ModelBindingController.cs
+++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ModelBinding/ModelBindingController.cs
@@ -39,6 +39,16 @@ namespace Volo.Abp.AspNetCore.Mvc.ModelBinding
input.Time3.Value.Kind.ToString().ToLower() + "_" +
input.InnerModel.Time4.Kind.ToString().ToLower();
}
+
+ //JSON input and output.
+ [HttpPost("ComplexTypeDateTimeKind_JSON")]
+ public string ComplexTypeDateTimeKind_JSON([FromBody]GetDateTimeKindModel input)
+ {
+ return input.Time1.Kind.ToString().ToLower() + "_" +
+ input.Time2.Kind.ToString().ToLower() + "_" +
+ input.Time3.Value.Kind.ToString().ToLower() + "_" +
+ input.InnerModel.Time4.Kind.ToString().ToLower();
+ }
}
public class GetDateTimeKindModel
diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ModelBinding/ModelBindingController_Tests.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ModelBinding/ModelBindingController_Tests.cs
index 698723a34a..fcce316772 100644
--- a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ModelBinding/ModelBindingController_Tests.cs
+++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ModelBinding/ModelBindingController_Tests.cs
@@ -1,9 +1,14 @@
using System;
using System.Net;
+using System.Net.Http;
+using System.Text;
+using System.Text.Json;
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Shouldly;
+using Volo.Abp.Http;
+using Volo.Abp.Json.SystemTextJson;
using Volo.Abp.Timing;
using Xunit;
@@ -13,6 +18,15 @@ namespace Volo.Abp.AspNetCore.Mvc.ModelBinding
{
protected DateTimeKind DateTimeKind { get; set; }
+ protected override void ConfigureServices(HostBuilderContext context, IServiceCollection services)
+ {
+ services.Configure(options =>
+ {
+ options.UnsupportedTypes.Add();
+ options.UnsupportedTypes.Add();
+ });
+ }
+
[Fact]
public async Task DateTimeKind_Test()
{
@@ -75,8 +89,29 @@ namespace Volo.Abp.AspNetCore.Mvc.ModelBinding
var resultAsString = await response.Content.ReadAsStringAsync();
//Time parameter(2010-01-01T00:00:00Z) with time zone information, so the default Kind is UTC
//https://docs.microsoft.com/en-us/aspnet/core/migration/31-to-50?view=aspnetcore-3.1&tabs=visual-studio#datetime-values-are-model-bound-as-utc-times
- resultAsString.ShouldBe(
- $"utc_{DateTimeKind.ToString().ToLower()}_{DateTimeKind.ToString().ToLower()}_utc");
+ resultAsString.ShouldBe($"utc_{DateTimeKind.ToString().ToLower()}_{DateTimeKind.ToString().ToLower()}_utc");
+ }
+
+ [Fact]
+ public async Task ComplexTypeDateTimeKind_JSON_Test()
+ {
+ var time = DateTime.Parse("2010-01-01T00:00:00Z");
+ var response = await Client.PostAsync("/api/model-Binding-test/ComplexTypeDateTimeKind_JSON",
+ new StringContent(JsonSerializer.Serialize(
+ new GetDateTimeKindModel {
+ Time1 = time,
+ Time2 = time,
+ Time3 = time,
+ InnerModel = new GetDateTimeKindModel.GetDateTimeKindInnerModel
+ {
+ Time4 = time
+ }
+ }
+ ), Encoding.UTF8, MimeTypes.Application.Json));
+
+ response.StatusCode.ShouldBe(HttpStatusCode.OK);
+ var resultAsString = await response.Content.ReadAsStringAsync();
+ resultAsString.ShouldBe($"local_{DateTimeKind.ToString().ToLower()}_{DateTimeKind.ToString().ToLower()}_local");
}
}
@@ -86,6 +121,8 @@ namespace Volo.Abp.AspNetCore.Mvc.ModelBinding
{
DateTimeKind = DateTimeKind.Utc;
services.Configure(x => x.Kind = DateTimeKind);
+
+ base.ConfigureServices(context, services);
}
}
@@ -95,6 +132,8 @@ namespace Volo.Abp.AspNetCore.Mvc.ModelBinding
{
DateTimeKind = DateTimeKind.Local;
services.Configure(x => x.Kind = DateTimeKind);
+
+ base.ConfigureServices(context, services);
}
}
}
diff --git a/framework/test/Volo.Abp.AspNetCore.Tests/Volo/Abp/AspNetCore/AbpAspNetCoreTestBase.cs b/framework/test/Volo.Abp.AspNetCore.Tests/Volo/Abp/AspNetCore/AbpAspNetCoreTestBase.cs
index dd5edff807..3c5571f115 100644
--- a/framework/test/Volo.Abp.AspNetCore.Tests/Volo/Abp/AspNetCore/AbpAspNetCoreTestBase.cs
+++ b/framework/test/Volo.Abp.AspNetCore.Tests/Volo/Abp/AspNetCore/AbpAspNetCoreTestBase.cs
@@ -1,10 +1,8 @@
using System.Globalization;
using System.Net;
using System.Net.Http;
-using System.Net.Http.Headers;
+using System.Text.Json;
using System.Threading.Tasks;
-using Newtonsoft.Json;
-using Newtonsoft.Json.Serialization;
using Shouldly;
using Volo.Abp.AspNetCore.TestBase;
@@ -18,16 +16,10 @@ namespace Volo.Abp.AspNetCore
public abstract class AbpAspNetCoreTestBase : AbpAspNetCoreIntegratedTestBase
where TStartup : class
{
- private static readonly JsonSerializerSettings SharedJsonSerializerSettings =
- new JsonSerializerSettings
- {
- ContractResolver = new CamelCasePropertyNamesContractResolver()
- };
-
protected virtual async Task GetResponseAsObjectAsync(string url, HttpStatusCode expectedStatusCode = HttpStatusCode.OK)
{
var strResponse = await GetResponseAsStringAsync(url, expectedStatusCode);
- return JsonConvert.DeserializeObject(strResponse, SharedJsonSerializerSettings);
+ return JsonSerializer.Deserialize(strResponse, new JsonSerializerOptions { PropertyNamingPolicy = JsonNamingPolicy.CamelCase });
}
protected virtual async Task GetResponseAsStringAsync(string url, HttpStatusCode expectedStatusCode = HttpStatusCode.OK)
@@ -49,4 +41,4 @@ namespace Volo.Abp.AspNetCore
}
}
}
-}
\ No newline at end of file
+}
diff --git a/framework/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/JsonNetAuditSerializer_Test.cs b/framework/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/JsonNetAuditSerializer_Test.cs
new file mode 100644
index 0000000000..da98f49bd6
--- /dev/null
+++ b/framework/test/Volo.Abp.Auditing.Tests/Volo/Abp/Auditing/JsonNetAuditSerializer_Test.cs
@@ -0,0 +1,67 @@
+using System;
+using System.Collections.Generic;
+using Microsoft.Extensions.DependencyInjection;
+using Shouldly;
+using Xunit;
+
+namespace Volo.Abp.Auditing
+{
+ public class JsonNetAuditSerializer_Test : AbpAuditingTestBase
+ {
+ private readonly JsonNetAuditSerializer _jsonNetAuditSerializer;
+
+ public JsonNetAuditSerializer_Test()
+ {
+ _jsonNetAuditSerializer = GetRequiredService();
+ }
+
+ protected override void AfterAddApplication(IServiceCollection services)
+ {
+ services.Configure(options =>
+ {
+ options.IgnoredTypes.Add(typeof(DateTime));
+ });
+
+ base.AfterAddApplication(services);
+ }
+
+ [Fact]
+ public void Serialize_Test()
+ {
+ var arguments = new Dictionary
+ {
+ {"input", new InputDto {PersonData = "IdCard:123123"}},
+ {"input2", new Input2Dto {UserName = "admin", Password = "1q2w3E*", Birthday = DateTime.Now}}
+ };
+
+ var str = _jsonNetAuditSerializer.Serialize(arguments);
+
+ str.ShouldNotContain("IdCard");
+ str.ShouldNotContain("1q2w3E*");
+ str.ShouldNotContain("Birthday");
+
+ str.ShouldContain("UserName");
+ str.ShouldContain("admin");
+ }
+
+
+ [DisableAuditing]
+ class InputDto
+ {
+ public string PersonData { get; set; }
+ }
+
+ class Input2Dto
+ {
+ public string UserName { get; set; }
+
+ [DisableAuditing]
+ public string Password { get; set; }
+
+ [Newtonsoft.Json.JsonIgnore]
+ public string PrivateEmail { get; set; }
+
+ public DateTime Birthday { get; set; }
+ }
+ }
+}
diff --git a/framework/test/Volo.Abp.Core.Tests/Volo/Abp/ObjectHelper_Tests.cs b/framework/test/Volo.Abp.Core.Tests/Volo/Abp/ObjectHelper_Tests.cs
new file mode 100644
index 0000000000..facefbe915
--- /dev/null
+++ b/framework/test/Volo.Abp.Core.Tests/Volo/Abp/ObjectHelper_Tests.cs
@@ -0,0 +1,78 @@
+using System.Runtime.Serialization;
+using Shouldly;
+using Xunit;
+
+namespace Volo.Abp
+{
+ public class ObjectHelper_Tests
+ {
+ [Fact]
+ public void TrySetProperty_Test()
+ {
+ var testClass = new MyClass();
+
+ ObjectHelper.TrySetProperty(testClass, x => x.Name, () => "NewName");
+ testClass.Name.ShouldBe("NewName");
+
+ ObjectHelper.TrySetProperty(testClass, x => x.Name2, () => "NewName2");
+ testClass.Name2.ShouldBe("NewName2");
+
+ ObjectHelper.TrySetProperty(testClass, x => x.Name3, () => "NewName3");
+ testClass.Name3.ShouldBe("NewName3");
+
+ ObjectHelper.TrySetProperty(testClass, x => x.Name4, () => "NewName4");
+ testClass.Name4.ShouldBe("Name4"); // readonly
+
+ ObjectHelper.TrySetProperty(testClass, x => x.Name5, () => "NewName5", ignoreAttributeTypes: typeof(IgnoreDataMemberAttribute));
+ testClass.Name5.ShouldNotBe("NewName5"); // ignore by attribute
+
+ ObjectHelper.TrySetProperty(testClass, x => x.ChildClass.Name, () => "NewChildName");
+ testClass.ChildClass.Name.ShouldNotBe("NewChildName");
+
+ ObjectHelper.TrySetProperty(testClass.ChildClass, x => x.Name, () => "NewChildName");
+ testClass.ChildClass.Name.ShouldBe("NewChildName");
+
+ ObjectHelper.TrySetProperty(testClass.ChildClass, x => x, () => new MyChildClass
+ {
+ Name = "NewChildName"
+ });
+ testClass.ChildClass.Name.ShouldBe("NewChildName");
+ }
+
+ class MyClass
+ {
+ public string Name { get; set; }
+
+ public string Name2 { get; protected set; }
+
+ public string Name3 { get; private set; }
+
+ public string Name4 { get; }
+
+ [IgnoreDataMember]
+ public string Name5 { get; }
+
+ public MyChildClass ChildClass { get; set; }
+
+ public MyClass()
+ {
+ Name = "Name";
+ Name2 = "Name2";
+ Name3 = "Name3";
+ Name4 = "Name4";
+ Name5 = "Name5";
+ ChildClass = new MyChildClass();
+ }
+ }
+
+ class MyChildClass
+ {
+ public string Name { get; set; }
+
+ public MyChildClass()
+ {
+ Name = "Name";
+ }
+ }
+ }
+}
diff --git a/framework/test/Volo.Abp.Ddd.Tests/Volo/Abp/Domain/Values/Address.cs b/framework/test/Volo.Abp.Ddd.Tests/Volo/Abp/Domain/Values/Address.cs
new file mode 100644
index 0000000000..0fdc29280f
--- /dev/null
+++ b/framework/test/Volo.Abp.Ddd.Tests/Volo/Abp/Domain/Values/Address.cs
@@ -0,0 +1,36 @@
+using System;
+using System.Collections.Generic;
+
+namespace Volo.Abp.Domain.Values
+{
+ public class Address : ValueObject
+ {
+ public Guid CityId { get; }
+
+ public string Street { get; }
+
+ public int Number { get; }
+
+ private Address()
+ {
+ }
+
+ public Address(
+ Guid cityId,
+ string street,
+ int number)
+ {
+ CityId = cityId;
+ Street = street;
+ Number = number;
+ }
+
+ //Requires to implement this method to return properties.
+ protected override IEnumerable GetAtomicValues()
+ {
+ yield return Street;
+ yield return CityId;
+ yield return Number;
+ }
+ }
+}
diff --git a/framework/test/Volo.Abp.Ddd.Tests/Volo/Abp/Domain/Values/ValueObject_Tests.cs b/framework/test/Volo.Abp.Ddd.Tests/Volo/Abp/Domain/Values/ValueObject_Tests.cs
new file mode 100644
index 0000000000..9142dfd45e
--- /dev/null
+++ b/framework/test/Volo.Abp.Ddd.Tests/Volo/Abp/Domain/Values/ValueObject_Tests.cs
@@ -0,0 +1,30 @@
+using System;
+using Shouldly;
+using Xunit;
+
+namespace Volo.Abp.Domain.Values
+{
+ public class ValueObject_Tests
+ {
+ [Fact]
+ public void ValueObjects_With_Same_Properties_Should_Be_Equals()
+ {
+ var cityId = Guid.NewGuid();
+ var address1 = new Address(cityId, "Baris Manco", 42);
+ var address2 = new Address(cityId, "Baris Manco", 42);
+
+ address1.ValueEquals(address2).ShouldBeTrue();
+ }
+
+ //[Fact]
+ public void ValueObjects_With_Different_Properties_Should_Not_Be_Equals()
+ {
+ var cityId = Guid.NewGuid();
+
+ var address1 = new Address(cityId, "Baris Manco", 42);
+ var address2 = new Address(cityId, "Baris Manco", 42);
+
+ address1.ValueEquals(address2).ShouldBeFalse();
+ }
+ }
+}
diff --git a/framework/test/Volo.Abp.Emailing.Tests/Volo/Abp/Emailing/Localization/de-DE.json b/framework/test/Volo.Abp.Emailing.Tests/Volo/Abp/Emailing/Localization/de-DE.json
new file mode 100644
index 0000000000..4b5809aa99
--- /dev/null
+++ b/framework/test/Volo.Abp.Emailing.Tests/Volo/Abp/Emailing/Localization/de-DE.json
@@ -0,0 +1,6 @@
+{
+ "culture": "de-DE",
+ "texts": {
+ "hello": "Hallo"
+ }
+}
\ No newline at end of file
diff --git a/framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/Localization/de-DE.json b/framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/Localization/de-DE.json
new file mode 100644
index 0000000000..0bc97b136f
--- /dev/null
+++ b/framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/Localization/de-DE.json
@@ -0,0 +1,6 @@
+{
+ "culture": "de-DE",
+ "texts": {
+ "Volo.Abp.Http.DynamicProxying:10001": "Geschäftsausnahme mit Daten: {0}"
+ }
+}
\ No newline at end of file
diff --git a/framework/test/Volo.Abp.Json.Tests/Volo.Abp.Json.Tests.csproj b/framework/test/Volo.Abp.Json.Tests/Volo.Abp.Json.Tests.csproj
new file mode 100644
index 0000000000..fbc56e6ac2
--- /dev/null
+++ b/framework/test/Volo.Abp.Json.Tests/Volo.Abp.Json.Tests.csproj
@@ -0,0 +1,16 @@
+
+
+
+
+
+ net5.0
+
+
+
+
+
+
+
+
+
+
diff --git a/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/AbpHybridJsonSerializer_Tests.cs b/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/AbpHybridJsonSerializer_Tests.cs
new file mode 100644
index 0000000000..98f8acc7b4
--- /dev/null
+++ b/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/AbpHybridJsonSerializer_Tests.cs
@@ -0,0 +1,125 @@
+using System;
+using System.Collections.Generic;
+using System.Reflection;
+using System.Text.Json;
+using Microsoft.Extensions.DependencyInjection;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Serialization;
+using Shouldly;
+using Volo.Abp.DependencyInjection;
+using Volo.Abp.Json.Newtonsoft;
+using Volo.Abp.Json.SystemTextJson;
+using Xunit;
+using JsonSerializer = Newtonsoft.Json.JsonSerializer;
+
+namespace Volo.Abp.Json
+{
+ public class AbpHybridJsonSerializer_Tests : AbpJsonTestBase
+ {
+ private readonly IJsonSerializer _jsonSerializer;
+
+ public AbpHybridJsonSerializer_Tests()
+ {
+ _jsonSerializer = GetRequiredService();
+ }
+
+ protected override void AfterAddApplication(IServiceCollection services)
+ {
+ services.Configure(options =>
+ {
+ options.UnsupportedTypes.Add();
+
+ options.JsonSerializerOptions.Converters.Add(new SystemTextJsonConverter());
+ });
+
+ services.Configure(options =>
+ {
+ options.Converters.Add();
+ });
+ }
+
+ [Fact]
+ public void NewtonsoftSerialize_Test()
+ {
+ var json = _jsonSerializer.Serialize(new MyClass1
+ {
+ Providers = new List
+ {
+ new MyClass3()
+ }
+ });
+
+ json.ShouldContain("Newtonsoft");
+ }
+
+ [Fact]
+ public void SystemTextJsonSerialize_Test()
+ {
+ var json = _jsonSerializer.Serialize(new MyClass2
+ {
+ Providers = new List
+ {
+ new MyClass3()
+ }
+ });
+
+ json.ShouldContain("SystemTextJson");
+ }
+
+ public class MyClass1
+ {
+ public string Provider { get; set; }
+
+ public List Providers { get; set; }
+ }
+
+ public class MyClass2
+ {
+ public string Provider { get; set; }
+
+ public List Providers { get; set; }
+ }
+
+ public class MyClass3
+ {
+ public string Provider { get; set; }
+ }
+
+ class NewtonsoftJsonConverter : JsonConverter, ITransientDependency
+ {
+ public override void WriteJson(JsonWriter writer, MyClass1 value, JsonSerializer serializer)
+ {
+ value.Provider = "Newtonsoft";
+ foreach (var provider in value.Providers)
+ {
+ provider.Provider = "Newtonsoft";
+ }
+
+ writer.WriteRawValue(JsonConvert.SerializeObject(value));
+ }
+
+ public override MyClass1 ReadJson(JsonReader reader, Type objectType, MyClass1 existingValue, bool hasExistingValue, JsonSerializer serializer)
+ {
+ return (MyClass1)serializer.Deserialize(reader, objectType);
+ }
+ }
+
+ class SystemTextJsonConverter : System.Text.Json.Serialization.JsonConverter, ITransientDependency
+ {
+ public override void Write(Utf8JsonWriter writer, MyClass2 value, JsonSerializerOptions options)
+ {
+ value.Provider = "SystemTextJson";
+ foreach (var provider in value.Providers)
+ {
+ provider.Provider = "SystemTextJson";
+ }
+ System.Text.Json.JsonSerializer.Serialize(writer, value);
+ }
+
+ public override MyClass2 Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+ {
+ return (MyClass2)System.Text.Json.JsonSerializer.Deserialize(ref reader, typeToConvert);
+ }
+ }
+ }
+}
diff --git a/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/AbpJsonTestBase.cs b/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/AbpJsonTestBase.cs
new file mode 100644
index 0000000000..5c9065ad80
--- /dev/null
+++ b/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/AbpJsonTestBase.cs
@@ -0,0 +1,12 @@
+using Volo.Abp.Testing;
+
+namespace Volo.Abp.Json
+{
+ public abstract class AbpJsonTestBase : AbpIntegratedTest
+ {
+ protected override void SetAbpApplicationCreationOptions(AbpApplicationCreationOptions options)
+ {
+ options.UseAutofac();
+ }
+ }
+}
diff --git a/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/AbpJsonTestModule.cs b/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/AbpJsonTestModule.cs
new file mode 100644
index 0000000000..ddbc08ac3f
--- /dev/null
+++ b/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/AbpJsonTestModule.cs
@@ -0,0 +1,15 @@
+using Volo.Abp.Autofac;
+using Volo.Abp.Modularity;
+
+namespace Volo.Abp.Json
+{
+ [DependsOn(
+ typeof(AbpAutofacModule),
+ typeof(AbpJsonModule),
+ typeof(AbpTestBaseModule)
+ )]
+ public class AbpJsonTestModule : AbpModule
+ {
+
+ }
+}
diff --git a/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/AbpSystemTextJsonUnsupportedTypeMatcher_Tests.cs b/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/AbpSystemTextJsonUnsupportedTypeMatcher_Tests.cs
new file mode 100644
index 0000000000..cc31ceca34
--- /dev/null
+++ b/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/AbpSystemTextJsonUnsupportedTypeMatcher_Tests.cs
@@ -0,0 +1,66 @@
+using System;
+using System.Collections.Generic;
+using Microsoft.Extensions.DependencyInjection;
+using Shouldly;
+using Volo.Abp.Json.SystemTextJson;
+using Xunit;
+
+namespace Volo.Abp.Json
+{
+ public class AbpSystemTextJsonUnsupportedTypeMatcher_Tests : AbpJsonTestBase
+ {
+ private readonly AbpSystemTextJsonUnsupportedTypeMatcher _abpSystemTextJsonUnsupportedTypeMatcher;
+
+ public AbpSystemTextJsonUnsupportedTypeMatcher_Tests()
+ {
+ _abpSystemTextJsonUnsupportedTypeMatcher = GetRequiredService();
+ }
+
+ protected override void AfterAddApplication(IServiceCollection services)
+ {
+ services.Configure(options =>
+ {
+ options.UnsupportedTypes.Add();
+ options.UnsupportedTypes.Add();
+ options.UnsupportedTypes.Add>();
+ });
+ }
+
+ [Fact]
+ public void Match_Test()
+ {
+ _abpSystemTextJsonUnsupportedTypeMatcher.Match(typeof(MyClass)).ShouldBeTrue();
+ _abpSystemTextJsonUnsupportedTypeMatcher.Match(typeof(byte[])).ShouldBeTrue();
+
+ _abpSystemTextJsonUnsupportedTypeMatcher.Match(typeof(MyClass2)).ShouldBeFalse();
+ _abpSystemTextJsonUnsupportedTypeMatcher.Match(typeof(MyClass3)).ShouldBeFalse();
+ _abpSystemTextJsonUnsupportedTypeMatcher.Match(typeof(MyClass4)).ShouldBeFalse();
+
+ _abpSystemTextJsonUnsupportedTypeMatcher.Match(typeof(string)).ShouldBeFalse();
+ _abpSystemTextJsonUnsupportedTypeMatcher.Match(typeof(string[])).ShouldBeFalse();
+
+ _abpSystemTextJsonUnsupportedTypeMatcher.Match(typeof(Dictionary)).ShouldBeTrue();
+ _abpSystemTextJsonUnsupportedTypeMatcher.Match(typeof(IDictionary)).ShouldBeFalse();
+ }
+
+ class MyClass
+ {
+ public DateTime Prop1 { get; set; }
+ }
+
+ class MyClass2
+ {
+ public DateTime Prop1 { get; set; }
+ }
+
+ class MyClass3
+ {
+ public MyClass4 Prop1 { get; set; }
+ }
+
+ class MyClass4
+ {
+ public DateTime Prop1 { get; set; }
+ }
+ }
+}
diff --git a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/CountryNames/de-DE.json b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/CountryNames/de-DE.json
new file mode 100644
index 0000000000..9ddb93d58d
--- /dev/null
+++ b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/CountryNames/de-DE.json
@@ -0,0 +1,7 @@
+{
+ "culture": "de-DE",
+ "texts": {
+ "USA": "Vereinigte Staaten von Amerika",
+ "Brazil": "Brasilien"
+ }
+}
\ No newline at end of file
diff --git a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/Validation/de-DE.json b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/Validation/de-DE.json
new file mode 100644
index 0000000000..1ae73a9601
--- /dev/null
+++ b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/Validation/de-DE.json
@@ -0,0 +1,7 @@
+{
+ "culture": "de-DE",
+ "texts": {
+ "ThisFieldIsRequired": "Dieses Feld wird benötigt",
+ "MaxLenghtErrorMessage": "Dieses Feld darf maximal '{0}' Zeichen enthalten"
+ }
+}
\ No newline at end of file
diff --git a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Source/de-DE.json b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Source/de-DE.json
new file mode 100644
index 0000000000..e300ad9edc
--- /dev/null
+++ b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Source/de-DE.json
@@ -0,0 +1,11 @@
+{
+ "culture": "de-DE",
+ "texts": {
+ "Hello {0} .": "Hallo {0} .",
+ "Car": "Auto",
+ "CarPlural": "Autos",
+ "MaxLenghtErrorMessage": "Die Länge dieses Feldes darf maximal '{0}' Zeichen betragen",
+ "Universe": "Universum",
+ "FortyTwo": "Zweiundvierzig"
+ }
+}
\ No newline at end of file
diff --git a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/SourceExt/de-DE.json b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/SourceExt/de-DE.json
new file mode 100644
index 0000000000..8519a0eb29
--- /dev/null
+++ b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/SourceExt/de-DE.json
@@ -0,0 +1,6 @@
+{
+ "culture": "de-DE",
+ "texts": {
+ "SeeYou": "Wir sehen uns"
+ }
+}
\ No newline at end of file
diff --git a/framework/test/Volo.Abp.MemoryDb.Tests/Volo/Abp/MemoryDb/AbpMemoryDbTestModule.cs b/framework/test/Volo.Abp.MemoryDb.Tests/Volo/Abp/MemoryDb/AbpMemoryDbTestModule.cs
index 7e5d9fcb6b..6f5d7a3718 100644
--- a/framework/test/Volo.Abp.MemoryDb.Tests/Volo/Abp/MemoryDb/AbpMemoryDbTestModule.cs
+++ b/framework/test/Volo.Abp.MemoryDb.Tests/Volo/Abp/MemoryDb/AbpMemoryDbTestModule.cs
@@ -4,14 +4,17 @@ using Volo.Abp.Modularity;
using Volo.Abp.TestApp.MemoryDb;
using Volo.Abp.Data;
using Volo.Abp.Autofac;
+using Volo.Abp.Domain.Entities;
+using Volo.Abp.Domain.Repositories.MemoryDb;
+using Volo.Abp.MemoryDb.JsonConverters;
using Volo.Abp.TestApp;
using Volo.Abp.TestApp.Domain;
namespace Volo.Abp.MemoryDb
{
[DependsOn(
- typeof(TestAppModule),
- typeof(AbpMemoryDbModule),
+ typeof(TestAppModule),
+ typeof(AbpMemoryDbModule),
typeof(AbpAutofacModule))]
public class AbpMemoryDbTestModule : AbpModule
{
@@ -29,6 +32,11 @@ namespace Volo.Abp.MemoryDb
options.AddDefaultRepositories();
options.AddRepository();
});
+
+ Configure(options =>
+ {
+ options.JsonSerializerOptions.Converters.Add(new EntityJsonConverter());
+ });
}
}
}
diff --git a/framework/test/Volo.Abp.MemoryDb.Tests/Volo/Abp/MemoryDb/JsonConverters/EntityJsonConverter.cs b/framework/test/Volo.Abp.MemoryDb.Tests/Volo/Abp/MemoryDb/JsonConverters/EntityJsonConverter.cs
new file mode 100644
index 0000000000..576e7512fa
--- /dev/null
+++ b/framework/test/Volo.Abp.MemoryDb.Tests/Volo/Abp/MemoryDb/JsonConverters/EntityJsonConverter.cs
@@ -0,0 +1,34 @@
+using System;
+using System.Text.Json;
+using System.Text.Json.Serialization;
+using Volo.Abp.Domain.Entities;
+
+namespace Volo.Abp.MemoryDb.JsonConverters
+{
+ public class EntityJsonConverter : JsonConverter
+ where TEntity : IEntity
+ {
+ public override TEntity Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+ {
+ var jsonDocument = JsonDocument.ParseValue(ref reader);
+ var entity = (TEntity)JsonSerializer.Deserialize(jsonDocument.RootElement.GetRawText(), typeToConvert);
+ var idJsonElement = jsonDocument.RootElement.GetProperty(nameof(IEntity.Id));
+
+ var id = JsonSerializer.Deserialize(idJsonElement.GetRawText());
+ if (id != null)
+ {
+ EntityHelper.TrySetId(entity, () => id);
+ }
+
+ return entity;
+ }
+
+ public override void Write(Utf8JsonWriter writer, TEntity value, JsonSerializerOptions options)
+ {
+ var newOptions = new JsonSerializerOptions(options);
+ newOptions.Converters.Remove(this);
+ var entityConverter = (JsonConverter)newOptions.GetConverter(typeof(TEntity));
+ entityConverter.Write(writer, value, newOptions);
+ }
+ }
+}
diff --git a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/Repository_Basic_Tests_With_Int_Pk.cs b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/Repository_Basic_Tests_With_Int_Pk.cs
index f873fe4265..821a80492b 100644
--- a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/Repository_Basic_Tests_With_Int_Pk.cs
+++ b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/Repository_Basic_Tests_With_Int_Pk.cs
@@ -1,4 +1,5 @@
using System.Linq;
+using System.Text.Json;
using System.Threading.Tasks;
using Shouldly;
using Volo.Abp.Domain.Repositories;
diff --git a/framework/test/Volo.Abp.TextTemplating.Tests/Volo/Abp/TextTemplating/Localization/de-DE.json b/framework/test/Volo.Abp.TextTemplating.Tests/Volo/Abp/TextTemplating/Localization/de-DE.json
new file mode 100644
index 0000000000..30d812cf15
--- /dev/null
+++ b/framework/test/Volo.Abp.TextTemplating.Tests/Volo/Abp/TextTemplating/Localization/de-DE.json
@@ -0,0 +1,7 @@
+{
+ "culture": "de-DE",
+ "texts": {
+ "HelloText": "Hallo {0}",
+ "HowAreYou": "wie geht es Ihnen?"
+ }
+}
\ No newline at end of file
diff --git a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/de-DE.json b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/de-DE.json
new file mode 100644
index 0000000000..9a5b7314e1
--- /dev/null
+++ b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/de-DE.json
@@ -0,0 +1,62 @@
+{
+ "culture": "de-DE",
+ "texts": {
+ "UserName": "Benutzername",
+ "EmailAddress": "E-Mail-Adresse",
+ "UserNameOrEmailAddress": "Benutzername oder E-Mail-Adresse",
+ "Password": "Passwort",
+ "RememberMe": "Angemeldet bleiben",
+ "UseAnotherServiceToLogin": "Verwenden Sie einen anderen Dienst, um sich anzumelden",
+ "UserLockedOutMessage": "Das Benutzerkonto wurde aufgrund ungültiger Anmeldeversuche gesperrt. Bitte warten Sie eine Weile und versuchen Sie es erneut.",
+ "InvalidUserNameOrPassword": "Ungültiger Benutzername oder Passwort!",
+ "LoginIsNotAllowed": "Sie dürfen sich nicht anmelden! Sie müssen Ihre E-Mail-Adresse / Telefonnummer bestätigen.",
+ "SelfRegistrationDisabledMessage": "Die Selbstregistrierung ist für diese Anwendung deaktiviert. Bitte wenden Sie sich an den Anwendungsadministrator, um einen neuen Benutzer zu registrieren.",
+ "LocalLoginDisabledMessage": "Die lokale Anmeldung ist für diese Anwendung deaktiviert.",
+ "Login": "Anmelden",
+ "Cancel": "Abbrechen",
+ "Register": "Registrieren",
+ "AreYouANewUser": "Sind Sie ein neuer Benutzer",
+ "AlreadyRegistered": "Bereits registriert?",
+ "InvalidLoginRequest": "Ungültiger Anmeldeversuch",
+ "ThereAreNoLoginSchemesConfiguredForThisClient": "Für diesen Client sind keine Anmeldeschemata konfiguriert.",
+ "LogInUsingYourProviderAccount": "Melden Sie sich mit Ihrem {0} Benutzerkonto an",
+ "DisplayName:CurrentPassword": "Derzeitiges Passwort",
+ "DisplayName:NewPassword": "Neues Passwort",
+ "DisplayName:NewPasswordConfirm": "Neues Passwort bestätigen",
+ "PasswordChangedMessage": "Ihr Passwort wurde erfolgreich geändert.",
+ "DisplayName:UserName": "Benutzername",
+ "DisplayName:Email": "E-Mail-Adresse",
+ "DisplayName:Name": "Name",
+ "DisplayName:Surname": "Nachname",
+ "DisplayName:Password": "Passwort",
+ "DisplayName:EmailAddress": "E-Mail-Adresse",
+ "DisplayName:PhoneNumber": "Telefonnummer",
+ "PersonalSettings": "Persönliche Einstellungen",
+ "PersonalSettingsSaved": "Persönliche Einstellungen gespeichert",
+ "PasswordChanged": "Passwort geändert",
+ "NewPasswordConfirmFailed": "Bitte bestätigen Sie das neue Passwort.",
+ "Manage": "Verwalten",
+ "ManageYourProfile": "Verwalten Sie Ihr Profil",
+ "DisplayName:Abp.Account.IsSelfRegistrationEnabled": "Selbstregistrierung ist aktiviert",
+ "Description:Abp.Account.IsSelfRegistrationEnabled": "Gibt an, ob ein Benutzer das Benutzerkonto selbst registrieren kann.",
+ "DisplayName:Abp.Account.EnableLocalLogin": "Authentifizieren Sie sich mit einem lokalen Benutzerkonto",
+ "Description:Abp.Account.EnableLocalLogin": "Gibt an, ob der Server Benutzern die Authentifizierung mit einem lokalen Konto ermöglicht.",
+ "LoggedOutTitle": "Abgemeldet",
+ "LoggedOutText": "Sie wurden abgemeldet und werden bald weitergeleitet.",
+ "ReturnToText": "Klicken Sie hier, um zu {0} umzuleiten",
+ "OrLoginWith": "Oder melden Sie sich an mit;",
+ "ForgotPassword": "Passwort vergessen?",
+ "SendPasswordResetLink_Information": "Ein Link zum Zurücksetzen des Passworts wird an Ihre E-Mail gesendet. Wenn Sie innerhalb weniger Minuten keine E-Mail erhalten, versuchen Sie es erneut.",
+ "PasswordResetMailSentMessage": "E-Mail zur Kontowiederherstellung an Ihre E-Mail-Adresse gesendet. Wenn Sie diese E-Mail nicht innerhalb von 15 Minuten in Ihrem Posteingang sehen, suchen Sie sie in Ihrem Junk-Mail-Ordner. Wenn Sie es dort finden, markieren Sie es bitte als -Kein Junk-. ",
+ "ResetPassword": "Passwort zurücksetzen",
+ "ConfirmPassword": "Bestätigen (wiederholen) Sie das Passwort",
+ "ResetPassword_Information": "Bitte geben Sie Ihr neues Passwort ein.",
+ "YourPasswordIsSuccessfullyReset": "Ihr Passwort wurde erfolgreich zurückgesetzt.",
+ "GoToTheApplication": "Gehen Sie zur Anwendung",
+ "BackToLogin": "Zurück zur Anmeldung",
+ "ProfileTab:Password": "Passwort ändern",
+ "ProfileTab:PersonalInfo": "Persönliche Informationen",
+ "ReturnToApplication": "Zur Anwendung zurückkehren",
+ "Volo.Account:InvalidEmailAddress": "Die angegebene E-Mail-Adresse kann nicht gefunden werden: {0}"
+ }
+}
\ No newline at end of file
diff --git a/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain.Shared/Volo/Abp/BlobStoring/Database/Localization/de-DE.json b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain.Shared/Volo/Abp/BlobStoring/Database/Localization/de-DE.json
new file mode 100644
index 0000000000..6d0b0b7a36
--- /dev/null
+++ b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain.Shared/Volo/Abp/BlobStoring/Database/Localization/de-DE.json
@@ -0,0 +1,6 @@
+{
+ "culture": "de-DE",
+ "texts": {
+ "ManageYourProfile": "Verwalten Sie Ihr Profil"
+ }
+}
\ No newline at end of file
diff --git a/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/de-DE.json b/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/de-DE.json
new file mode 100644
index 0000000000..a56444847e
--- /dev/null
+++ b/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/de-DE.json
@@ -0,0 +1,58 @@
+{
+ "culture": "de-DE",
+ "texts": {
+ "Menu:Blogs": "Blogs",
+ "Menu:BlogManagement": "Blogging",
+ "Permission:Management": "Verwaltung",
+ "Permission:Edit": "Bearbeiten",
+ "Permission:Create": "Erstellen",
+ "Permission:Delete": "Löschen",
+ "Permission:Blogging": "Blog",
+ "Permission:Blogs": "Blogs",
+ "Permission:Posts": "Beiträge",
+ "Permission:Tags": "Schlagwörter",
+ "Permission:Comments": "Kommentare",
+ "Title": "Titel",
+ "Delete": "Löschen",
+ "Reply": "Antworten",
+ "ReplyTo": "Antwort auf {0}",
+ "ContinueReading": "Weiterlesen",
+ "DaysAgo": "Vor {0} Tagen",
+ "YearsAgo": "Vor {0} Jahren",
+ "MonthsAgo": "Vor {0} Monaten",
+ "WeeksAgo": "Vor {0} Wochen",
+ "MinutesAgo": "Vor {0} Minuten",
+ "SecondsAgo": "Vor {0} Sekunden",
+ "HoursAgo": "Vor {0} Stunden",
+ "Now": "jetzt",
+ "Content": "Inhalt",
+ "SeeAll": "Alles sehen",
+ "PopularTags": "Beliebte Schlagworte",
+ "WiewsWithCount": "{0} Ansichten",
+ "LastPosts": "Letzte Beiträge",
+ "LeaveComment": "Einen Kommentar hinterlassen",
+ "TagsInThisArticle": "Schlagworte in diesem Beitrag",
+ "Posts": "Beiträge",
+ "Edit": "Bearbeiten",
+ "BLOG": "BLOG",
+ "CommentDeletionWarningMessage": "Kommentar wird gelöscht.",
+ "PostDeletionWarningMessage": "Beitrag wird gelöscht.",
+ "BlogDeletionWarningMessage": "Blog wird gelöscht.",
+ "AreYouSure": "Sind Sie sicher?",
+ "CommentWithCount": "{0} Kommentare",
+ "Comment": "Kommentar",
+ "ShareOnTwitter": "Auf Twitter teilen",
+ "CoverImage": "Titelbild",
+ "CreateANewPost": "Erstellen Sie einen neuen Beitrag",
+ "CreateANewBlog": "Erstellen Sie einen neuen Blog",
+ "WhatIsNew": "Was ist neu?",
+ "Name": "Name",
+ "ShortName": "Kurzer Name",
+ "CreationTime": "Erstellungszeitpunkt",
+ "Description": "Beschreibung",
+ "Blogs": "Blogs",
+ "Tags": "Schlagwörter",
+ "ShareOn": "Teilen auf",
+ "TitleLengthWarning": "Halten Sie Ihre Titellänge unter 60 Zeichen, um SEO-freundlich zu sein!"
+ }
+}
\ No newline at end of file
diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/de-DE.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/de-DE.json
new file mode 100644
index 0000000000..e5d9e294dc
--- /dev/null
+++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/de-DE.json
@@ -0,0 +1,22 @@
+{
+ "culture": "de-DE",
+ "texts": {
+ "PickYourReaction": "Wählen Sie Ihre Reaktion",
+ "YourComment": "Ihr Kommentar",
+ "YourReply": "Ihre Antwort",
+ "Comments": "Kommentare",
+ "Send": "Senden",
+ "Delete": "Löschen",
+ "Reply": "Antworten",
+ "Update": "Aktualisieren",
+ "Edit": "Bearbeiten",
+ "LoginToAddComment": "Melden Sie sich an, um zu Kommentieren",
+ "LoginToReply": "Melden Sie sich an, um zu Antworten",
+ "MessageDeletionConfirmationMessage": "Dieser Kommentar wird vollständig gelöscht.",
+ "CommentAuthorizationExceptionMessage": "Diese Kommentare dürfen nicht öffentlich angezeigt werden.",
+ "Undo": "Rüchkängig machen",
+ "RatingUndoMessage": "Ihre Bewertung wird rückgängig gemacht.",
+ "LoginToRate": "Melden Sie sich an, um zu Bewerten",
+ "Star": "Stern"
+ }
+}
\ No newline at end of file
diff --git a/modules/docs/app/VoloDocs.Web/Localization/Resources/VoloDocs/Web/de-DE.json b/modules/docs/app/VoloDocs.Web/Localization/Resources/VoloDocs/Web/de-DE.json
new file mode 100644
index 0000000000..6fa1db9d7a
--- /dev/null
+++ b/modules/docs/app/VoloDocs.Web/Localization/Resources/VoloDocs/Web/de-DE.json
@@ -0,0 +1,10 @@
+{
+ "culture": "de-DE",
+ "texts": {
+ "DocsTitle": "VoloDocs",
+ "WelcomeVoloDocs": "Willkommen bei den VoloDocs!",
+ "NoProjectWarning": "Es gibt noch kein definiertes Projekt!",
+ "CreateYourFirstProject": "Klicken Sie hier, um Ihr erstes Projekt zu starten",
+ "NoProject": "Kein Projekt!"
+ }
+}
\ No newline at end of file
diff --git a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/de-DE.json b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/de-DE.json
new file mode 100644
index 0000000000..28d5f53f47
--- /dev/null
+++ b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/de-DE.json
@@ -0,0 +1,59 @@
+{
+ "culture": "de-DE",
+ "texts": {
+ "Permission:DocumentManagement": "Dokumentenverwaltung",
+ "Permission:Projects": "Projekte",
+ "Permission:Edit": "Bearbeiten",
+ "Permission:Delete": "Löschen",
+ "Permission:Create": "Erstellen",
+ "Permission:Documents": "Dokumente",
+ "Menu:Documents": "Dokumente",
+ "Menu:DocumentManagement": "Dokumente",
+ "Menu:ProjectManagement": "Projekte",
+ "CreateANewProject": "Neues Projekt erstellen",
+ "Edit": "Bearbeiten",
+ "Create": "Erstellen",
+ "Pull": "Pull",
+ "Projects": "Projekte",
+ "Name": "Name",
+ "ShortName": "Kurzname",
+ "DocumentStoreType": "DocumentStoreType",
+ "Format": "Format",
+ "ShortNameInfoText": "Wird für eine eindeutige URL verwendet.",
+ "DisplayName:Name": "Name",
+ "DisplayName:ShortName": "Kurzname",
+ "DisplayName:Format": "Format",
+ "DisplayName:DefaultDocumentName": "Standard-Dokumentenname",
+ "DisplayName:NavigationDocumentName": "Name des Navigationsdokuments",
+ "DisplayName:MinimumVersion": "Mindestversion",
+ "DisplayName:MainWebsiteUrl": "URL der Hauptwebsite",
+ "DisplayName:LatestVersionBranchName": "Name der neuesten Version des Branch",
+ "DisplayName:GitHubRootUrl": "GitHub-Root-URL",
+ "DisplayName:GitHubAccessToken": "GitHub-Zugriffstoken",
+ "DisplayName:GitHubUserAgent": "GitHub-User-Agent",
+ "DisplayName:GithubVersionProviderSource": "Quelle des GitHub-Versionsanbieters",
+ "DisplayName:VersionBranchPrefix": "Version-Branch-Präfix",
+ "DisplayName:All": "Pull all",
+ "DisplayName:LanguageCode": "Sprachcode",
+ "DisplayName:Version": "Version",
+ "Documents": "Dokumente",
+ "RemoveFromCache": "Aus dem Cache entfernen",
+ "Reindex": "Neuindizierung",
+ "ReindexCompleted": "Neuindizierung abgeschlossen",
+ "RemovedFromCache": "Aus dem Cache entfernt",
+ "RemoveFromCacheConfirmation": "Möchten Sie dieses Element wirklich aus dem Cache entfernen?",
+ "ReIndexDocumentConfirmation": "Möchten Sie diesen Beitrag wirklich neu indizieren?",
+ "DeleteFromDatabase": "Aus Datenbank löschen",
+ "Deleted": "Gelöscht",
+ "Search": "Suchen",
+ "StartDate": "Startdatum",
+ "EndDate": "Enddatum",
+ "CreationTime": "Erstellungszeitpunkt",
+ "LastUpdateTime": "Letzte Änderung",
+ "LastSignificantUpdateTime": "Letzte wichtige Aktualisierung",
+ "Version": "Version",
+ "LanguageCode": "Sprachcode",
+ "FileName": "Dateiname",
+ "LastCachedTime": "Cache-Zeit"
+ }
+}
\ No newline at end of file
diff --git a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/de-DE.json b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/de-DE.json
new file mode 100644
index 0000000000..b6687f978b
--- /dev/null
+++ b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/de-DE.json
@@ -0,0 +1,39 @@
+{
+ "culture": "de-DE",
+ "texts": {
+ "Documents": "Unterlagen",
+ "BackToWebsite": "Zurück zur Website",
+ "Contributors": "Mitwirkende",
+ "ShareOn": "Teilen auf",
+ "Version": "Version",
+ "Edit": "Bearbeiten",
+ "LastEditTime": "Letzte Änderung",
+ "Delete": "Löschen",
+ "ClearCache": "Cache leeren",
+ "ClearCacheConfirmationMessage": "Sind Sie sicher, alle Caches für das Projekt \"{0}\" zu löschen?",
+ "ReIndexAllProjects": "Alle Projekte neu indizieren",
+ "ReIndexProject": "Projekt neu indizieren",
+ "ReIndexProjectConfirmationMessage": "Sind Sie sicher, dass Sie das Projekt \"{0}\" neu indizieren?",
+ "SuccessfullyReIndexProject": "Neuindizierung für Projekt \"{0}\"",
+ "ReIndexAllProjectConfirmationMessage": "Sind Sie sicher, alle Projekte neu zu indizieren?",
+ "SuccessfullyReIndexAllProject": "Alle Projekte erfolgreich neu indizieren",
+ "InThisDocument": "In diesem Dokument",
+ "GoToTop": "Nach oben",
+ "Projects": "Projekt(e)",
+ "NoProjectWarning": "Es gibt noch keine Projekte!",
+ "DocumentNotFound": "Hoppla, das angeforderte Dokument wurde nicht gefunden!",
+ "ProjectNotFound": "Hoppla, das angeforderte Projekt wurde nicht gefunden!",
+ "NavigationDocumentNotFound": "Diese Version hat kein Navigationsdokument!",
+ "DocumentNotFoundInSelectedLanguage": "Dokument in der gewünschten Sprache wurde nicht gefunden. Dokument in der Standardsprache wird angezeigt.",
+ "FilterTopics": "Themen filtern",
+ "FullSearch": "In Dokumenten suchen",
+ "Volo.Docs.Domain:010001": "Elastic Search ist nicht aktiviert",
+ "MultipleVersionDocumentInfo": "Dieses Dokument hat mehrere Versionen. Wählen Sie die Optionen aus, die am besten zu Ihnen passen.",
+ "New": "Neu",
+ "Upd": "Upd",
+ "NewExplanation": "In den letzten zwei Wochen erstellt.",
+ "UpdatedExplanation": "In den letzten zwei Wochen aktualisiert.",
+ "Volo.Docs.Domain:010002": "Kurzname {ShortName} existiert bereits.",
+ "Preview": "Vorschau"
+ }
+}
\ No newline at end of file
diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/AbpFeatureManagementApplicationContractsModule.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/AbpFeatureManagementApplicationContractsModule.cs
index 37b49f2d8a..32939a2430 100644
--- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/AbpFeatureManagementApplicationContractsModule.cs
+++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/AbpFeatureManagementApplicationContractsModule.cs
@@ -1,5 +1,8 @@
-using Volo.Abp.Application;
-using Volo.Abp.Json.Newtonsoft;
+using System.Collections.Generic;
+using Volo.Abp.Application;
+using Volo.Abp.FeatureManagement.JsonConverters;
+using Volo.Abp.Json;
+using Volo.Abp.Json.SystemTextJson;
using Volo.Abp.Modularity;
using Volo.Abp.VirtualFileSystem;
@@ -7,7 +10,8 @@ namespace Volo.Abp.FeatureManagement
{
[DependsOn(
typeof(AbpFeatureManagementDomainSharedModule),
- typeof(AbpDddApplicationModule)
+ typeof(AbpDddApplicationModule),
+ typeof(AbpJsonModule)
)]
public class AbpFeatureManagementApplicationContractsModule : AbpModule
{
@@ -18,9 +22,9 @@ namespace Volo.Abp.FeatureManagement
options.FileSets.AddEmbedded();
});
- Configure(options =>
+ Configure(options =>
{
- options.Converters.Add();
+ options.JsonSerializerOptions.Converters.AddIfNotContains(new StringValueTypeJsonConverter());
});
}
}
diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/JsonConverters/JsonSerializerOptionsHelper.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/JsonConverters/JsonSerializerOptionsHelper.cs
new file mode 100644
index 0000000000..26927f59fe
--- /dev/null
+++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/JsonConverters/JsonSerializerOptionsHelper.cs
@@ -0,0 +1,17 @@
+using System.Collections.Generic;
+using System.Text.Json;
+using System.Text.Json.Serialization;
+
+namespace Volo.Abp.FeatureManagement.JsonConverters
+{
+ internal static class JsonSerializerOptionsHelper
+ {
+ public static JsonSerializerOptions Create(JsonSerializerOptions baseOptions, JsonConverter removeConverter, params JsonConverter[] addConverters)
+ {
+ var options = new JsonSerializerOptions(baseOptions);
+ options.Converters.RemoveAll(x => x == removeConverter);
+ options.Converters.AddIfNotContains(addConverters);
+ return options;
+ }
+ }
+}
diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/JsonConverters/SelectionStringValueItemSourceJsonConverter.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/JsonConverters/SelectionStringValueItemSourceJsonConverter.cs
new file mode 100644
index 0000000000..feaa68ccc6
--- /dev/null
+++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/JsonConverters/SelectionStringValueItemSourceJsonConverter.cs
@@ -0,0 +1,32 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text.Json;
+using System.Text.Json.Serialization;
+using Volo.Abp.Validation.StringValues;
+
+namespace Volo.Abp.FeatureManagement.JsonConverters
+{
+ public class SelectionStringValueItemSourceJsonConverter : JsonConverter
+ {
+ public override ISelectionStringValueItemSource Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+ {
+ var newOptions = JsonSerializerOptionsHelper.Create(options, this);
+
+ var rootElement = JsonDocument.ParseValue(ref reader).RootElement;
+ var items = rootElement.EnumerateObject().FirstOrDefault(x => x.Name.Equals("Items", StringComparison.InvariantCultureIgnoreCase)).Value.GetRawText();
+
+ var selectionStringValueItem =
+ JsonSerializer.Deserialize>(items, newOptions) ??
+ new List();
+
+ return new StaticSelectionStringValueItemSource(selectionStringValueItem.ToArray());
+ }
+
+ public override void Write(Utf8JsonWriter writer, ISelectionStringValueItemSource value, JsonSerializerOptions options)
+ {
+ var newOptions = JsonSerializerOptionsHelper.Create(options, this);
+ JsonSerializer.Serialize(writer, value, value.GetType(), newOptions);
+ }
+ }
+}
diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/JsonConverters/StringValueTypeJsonConverter.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/JsonConverters/StringValueTypeJsonConverter.cs
new file mode 100644
index 0000000000..32748231da
--- /dev/null
+++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/JsonConverters/StringValueTypeJsonConverter.cs
@@ -0,0 +1,31 @@
+using System;
+using System.Linq;
+using System.Text.Json;
+using System.Text.Json.Serialization;
+using Volo.Abp.Validation.StringValues;
+
+namespace Volo.Abp.FeatureManagement.JsonConverters
+{
+ public class StringValueTypeJsonConverter : JsonConverter
+ {
+ public override IStringValueType Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+ {
+ var rootElement = JsonDocument.ParseValue(ref reader).RootElement;
+ var name = rootElement.EnumerateObject().FirstOrDefault(x => x.Name.Equals("Name", StringComparison.InvariantCultureIgnoreCase)).Value.GetString();
+ var newOptions = JsonSerializerOptionsHelper.Create(options, this, new ValueValidatorJsonConverter(), new SelectionStringValueItemSourceJsonConverter());
+ return name switch
+ {
+ "SelectionStringValueType" => JsonSerializer.Deserialize(rootElement.GetRawText(), newOptions),
+ "FreeTextStringValueType" => JsonSerializer.Deserialize(rootElement.GetRawText(), newOptions),
+ "ToggleStringValueType" => JsonSerializer.Deserialize(rootElement.GetRawText(), newOptions),
+ _ => throw new ArgumentException($"{nameof(IStringValueType)} named {name} was not found!")
+ };
+ }
+
+ public override void Write(Utf8JsonWriter writer, IStringValueType value, JsonSerializerOptions options)
+ {
+ var newOptions = JsonSerializerOptionsHelper.Create(options, this);
+ JsonSerializer.Serialize(writer, value, value.GetType(), newOptions);
+ }
+ }
+}
diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/JsonConverters/ValueValidatorJsonConverter.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/JsonConverters/ValueValidatorJsonConverter.cs
new file mode 100644
index 0000000000..7276a36923
--- /dev/null
+++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/JsonConverters/ValueValidatorJsonConverter.cs
@@ -0,0 +1,51 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text.Json;
+using System.Text.Json.Serialization;
+using Volo.Abp.Json.SystemTextJson.JsonConverters;
+using Volo.Abp.Validation.StringValues;
+
+namespace Volo.Abp.FeatureManagement.JsonConverters
+{
+ public class ValueValidatorJsonConverter : JsonConverter
+ {
+ public override IValueValidator Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+ {
+ var rootElement = JsonDocument.ParseValue(ref reader).RootElement;
+ var name = rootElement.EnumerateObject().FirstOrDefault(x => x.Name.Equals("Name", StringComparison.InvariantCultureIgnoreCase)).Value.GetString();
+ var valueValidator = CreateValueValidatorByName(name);
+
+ var propertiesRawText = rootElement.EnumerateObject().FirstOrDefault(x => x.Name.Equals("Properties", StringComparison.InvariantCultureIgnoreCase)).Value.GetRawText();
+ var newOptions = JsonSerializerOptionsHelper.Create(options, this, new ObjectToInferredTypesConverter());
+ var properties = JsonSerializer.Deserialize>(propertiesRawText, newOptions);
+ if (properties != null && properties.Any())
+ {
+ foreach (var property in properties)
+ {
+ valueValidator.Properties[property.Key] = property.Value;
+ }
+ }
+
+ return valueValidator;
+ }
+
+ public override void Write(Utf8JsonWriter writer, IValueValidator value, JsonSerializerOptions options)
+ {
+ var newOptions = JsonSerializerOptionsHelper.Create(options, this);
+ JsonSerializer.Serialize(writer, value, value.GetType(), newOptions);
+ }
+
+ protected virtual IValueValidator CreateValueValidatorByName(string name)
+ {
+ return name switch
+ {
+ "NULL" => new AlwaysValidValueValidator(),
+ "BOOLEAN" => new BooleanValueValidator(),
+ "NUMERIC" => new NumericValueValidator(),
+ "STRING" => new StringValueValidator(),
+ _ => throw new ArgumentException($"{nameof(IValueValidator)} named {name} was not found!")
+ };
+ }
+ }
+}
diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/StringValueTypeJsonConverter.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/StringValueTypeJsonConverter.cs
deleted file mode 100644
index 0ee276cce1..0000000000
--- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/StringValueTypeJsonConverter.cs
+++ /dev/null
@@ -1,90 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
-using Newtonsoft.Json;
-using Newtonsoft.Json.Linq;
-using Volo.Abp.DependencyInjection;
-using Volo.Abp.Validation.StringValues;
-
-namespace Volo.Abp.FeatureManagement
-{
- public class StringValueTypeJsonConverter : JsonConverter, ITransientDependency
- {
- public override bool CanWrite => false;
-
- public override bool CanConvert(Type objectType)
- {
- return objectType == typeof(IStringValueType);
- }
-
- public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
- {
- throw new NotImplementedException("This method should not be called to write (since CanWrite is false).");
- }
-
- public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
- {
- if (reader.TokenType != JsonToken.StartObject)
- {
- return null;
- }
-
- var jsonObject = JObject.Load(reader);
-
- var stringValue = CreateStringValueTypeByName(jsonObject, jsonObject["name"].ToString());
- foreach (var o in serializer.Deserialize>(
- new JsonTextReader(new StringReader(jsonObject["properties"].ToString()))))
- {
- stringValue[o.Key] = o.Value;
- }
-
- stringValue.Validator = CreateValueValidatorByName(jsonObject["validator"], jsonObject["validator"]["name"].ToString());
- foreach (var o in serializer.Deserialize>(
- new JsonTextReader(new StringReader(jsonObject["validator"]["properties"].ToString()))))
- {
- stringValue.Validator[o.Key] = o.Value;
- }
-
- return stringValue;
- }
-
- protected virtual IStringValueType CreateStringValueTypeByName(JObject jObject, string name)
- {
- if (name == "SelectionStringValueType")
- {
- var selectionStringValueType = new SelectionStringValueType();
- if (jObject["itemSource"].HasValues)
- {
- selectionStringValueType.ItemSource = new StaticSelectionStringValueItemSource(jObject["itemSource"]["items"]
- .Select(item => new LocalizableSelectionStringValueItem()
- {
- Value = item["value"].ToString(),
- DisplayText = new LocalizableStringInfo(item["displayText"]["resourceName"].ToString(), item["displayText"]["name"].ToString())
- }).ToArray());
- }
-
- return selectionStringValueType;
- }
-
- return name switch
- {
- "FreeTextStringValueType" => new FreeTextStringValueType(),
- "ToggleStringValueType" => new ToggleStringValueType(),
- _ => throw new ArgumentException($"{nameof(IStringValueType)} named {name} was not found!")
- };
- }
-
- protected virtual IValueValidator CreateValueValidatorByName(JToken jObject, string name)
- {
- return name switch
- {
- "NULL" => new AlwaysValidValueValidator(),
- "BOOLEAN" => new BooleanValueValidator(),
- "NUMERIC" => new NumericValueValidator(),
- "STRING" => new StringValueValidator(),
- _ => throw new ArgumentException($"{nameof(IValueValidator)} named {name} was not found!")
- };
- }
- }
-}
diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/de-DE.json b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/de-DE.json
new file mode 100644
index 0000000000..af3a7601af
--- /dev/null
+++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/de-DE.json
@@ -0,0 +1,10 @@
+{
+ "culture": "de-DE",
+ "texts": {
+ "Features": "Features",
+ "NoFeatureFoundMessage": "Es ist kein Feature verfügbar.",
+ "Permission:FeatureManagement": "Feature-Verwaltung",
+ "Permission:FeatureManagement.ManageHostFeatures": "Host-Features verwalten",
+ "Volo.Abp.FeatureManagement:InvalidFeatureValue": "{0} Feature-Wert ist ungültig!"
+ }
+}
\ No newline at end of file
diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.HttpApi/Volo/Abp/FeatureManagement/AbpFeatureManagementHttpApiModule.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.HttpApi/Volo/Abp/FeatureManagement/AbpFeatureManagementHttpApiModule.cs
index 5146061c3b..f062317d66 100644
--- a/modules/feature-management/src/Volo.Abp.FeatureManagement.HttpApi/Volo/Abp/FeatureManagement/AbpFeatureManagementHttpApiModule.cs
+++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.HttpApi/Volo/Abp/FeatureManagement/AbpFeatureManagementHttpApiModule.cs
@@ -1,9 +1,12 @@
-using Localization.Resources.AbpUi;
+using System.Collections.Generic;
+using Localization.Resources.AbpUi;
+using Microsoft.AspNetCore.Mvc;
using Volo.Abp.AspNetCore.Mvc;
using Volo.Abp.FeatureManagement.Localization;
using Volo.Abp.Localization;
using Volo.Abp.Modularity;
using Microsoft.Extensions.DependencyInjection;
+using Volo.Abp.FeatureManagement.JsonConverters;
namespace Volo.Abp.FeatureManagement
{
@@ -28,6 +31,11 @@ namespace Volo.Abp.FeatureManagement
.Get()
.AddBaseTypes(typeof(AbpUiResource));
});
+
+ Configure(options =>
+ {
+ options.JsonSerializerOptions.Converters.AddIfNotContains(new StringValueTypeJsonConverter());
+ });
}
}
}
diff --git a/modules/feature-management/test/Volo.Abp.FeatureManagement.Application.Tests/Volo/Abp/FeatureManagement/StringValueJsonConverter_Tests.cs b/modules/feature-management/test/Volo.Abp.FeatureManagement.Application.Tests/Volo/Abp/FeatureManagement/StringValueJsonConverter_Tests.cs
index 1b7553b773..c72cbddffd 100644
--- a/modules/feature-management/test/Volo.Abp.FeatureManagement.Application.Tests/Volo/Abp/FeatureManagement/StringValueJsonConverter_Tests.cs
+++ b/modules/feature-management/test/Volo.Abp.FeatureManagement.Application.Tests/Volo/Abp/FeatureManagement/StringValueJsonConverter_Tests.cs
@@ -1,6 +1,6 @@
using System;
using System.Collections.Generic;
-using Newtonsoft.Json;
+using System.Text.Json;
using Shouldly;
using Volo.Abp.Json;
using Volo.Abp.Validation.StringValues;
@@ -67,8 +67,10 @@ namespace Volo.Abp.FeatureManagement
};
var serialized = _jsonSerializer.Serialize(featureListDto, indented: true);
+
var featureListDto2 = _jsonSerializer.Deserialize(serialized);
+ featureListDto2.ShouldNotBeNull();
featureListDto2.Groups[0].Features[0].ValueType.ShouldBeOfType();
featureListDto2.Groups[0].Features[0].ValueType.Validator.ShouldBeOfType();
diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor/AbpIdentityBlazorModule.cs b/modules/identity/src/Volo.Abp.Identity.Blazor/AbpIdentityBlazorModule.cs
index 7f11267132..7cdeb0295b 100644
--- a/modules/identity/src/Volo.Abp.Identity.Blazor/AbpIdentityBlazorModule.cs
+++ b/modules/identity/src/Volo.Abp.Identity.Blazor/AbpIdentityBlazorModule.cs
@@ -1,6 +1,7 @@
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.AspNetCore.Components.WebAssembly.Theming.Routing;
using Volo.Abp.AutoMapper;
+using Volo.Abp.BlazoriseUI;
using Volo.Abp.Modularity;
using Volo.Abp.PermissionManagement.Blazor;
using Volo.Abp.UI.Navigation;
@@ -10,7 +11,8 @@ namespace Volo.Abp.Identity.Blazor
[DependsOn(
typeof(AbpIdentityHttpApiClientModule),
typeof(AbpAutoMapperModule),
- typeof(AbpPermissionManagementBlazorModule)
+ typeof(AbpPermissionManagementBlazorModule),
+ typeof(AbpBlazoriseUIModule)
)]
public class AbpIdentityBlazorModule : AbpModule
{
@@ -32,8 +34,6 @@ namespace Volo.Abp.Identity.Blazor
{
options.AdditionalAssemblies.Add(typeof(AbpIdentityBlazorModule).Assembly);
});
-
- context.Services.AddSingleton(typeof(AbpIdentityBlazorMessageLocalizerHelper<>));
}
}
}
diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor
index 946fae64c3..410ccc2cae 100644
--- a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor
+++ b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor
@@ -6,10 +6,9 @@
@using Volo.Abp.PermissionManagement.Blazor.Components
@using Microsoft.Extensions.Localization
@using Volo.Abp.Identity.Localization
-@inject AbpIdentityBlazorMessageLocalizerHelper LH
+@inject AbpBlazorMessageLocalizerHelper LH
@inherits AbpCrudPageBase
-
@* ************************* PAGE HEADER ************************* *@
@@ -57,11 +56,11 @@
@(context.Name)
@if (context.IsDefault)
{
- @L["DisplayName:IsDefault"]
+ @L["DisplayName:IsDefault"]
}
@if (context.IsPublic)
{
- @L["DisplayName:IsPublic"]
+ @L["DisplayName:IsPublic"]
}
@@ -74,52 +73,17 @@
-
- @L["NewRole"]
-
-
-
-
-
-
- @L["DisplayName:RoleName"]
-
-
-
-
-
-
-
-
- @L["DisplayName:IsDefault"]
- @L["DisplayName:IsPublic"]
-
-
-
-
- @L["Cancel"]
- @L["Save"]
-
-
-
-}
-@* ************************* EDIT MODAL ************************* *@
-@if (HasUpdatePermission)
-{
-
-
-
+
+
+
+}
+@* ************************* EDIT MODAL ************************* *@
+@if (HasUpdatePermission)
+{
+
+
+
+
}
diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor
index 36db98f78e..6f26d28a8b 100644
--- a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor
+++ b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor
@@ -1,14 +1,13 @@
@page "/identity/users"
-@attribute [Authorize(IdentityPermissions.Users.Default)]
+@attribute [Authorize( IdentityPermissions.Users.Default )]
@using Microsoft.AspNetCore.Authorization
@using Microsoft.AspNetCore.Components.Forms
@using Volo.Abp.PermissionManagement.Blazor.Components
@using Microsoft.Extensions.Localization
@using Volo.Abp.Identity.Localization
+@inject AbpBlazorMessageLocalizerHelper LH
@inherits AbpCrudPageBase
-
-@inject AbpIdentityBlazorMessageLocalizerHelper LH
@* ************************* PAGE HEADER ************************* *@
@@ -75,103 +74,105 @@
-
- @L["NewUser"]
-
-
-
-
-
-
- @L["UserInformations"]
- @L["Roles"]
-
-
-
-
-
- @L["DisplayName:UserName"]
-
-
-
-
-
-
-
-
-
- @L["DisplayName:Name"]
-
-
-
-
-
-
-
-
-
- @L["DisplayName:Surname"]
-
-
-
-
-
-
-
-
-
- @L["DisplayName:Password"]
-
-
-
-
-
-
-
-
-
- @L["DisplayName:Email"]
-
-
-
-
-
-
-
-
+
-
- @L["DisplayName:LockoutEnabled"]
-
-
-
- @if (NewUserRoles != null)
- {
- @foreach (var role in NewUserRoles)
+
+
+ @if (NewUserRoles != null)
{
-
-
- @role.Name
-
+ @foreach (var role in NewUserRoles)
+ {
+
+
+ @role.Name
+
+ }
}
- }
-
-
-
-
-
-
- @L["Cancel"]
- @L["Save"]
-
+
+
+
+
+
+
+ @L["Cancel"]
+ @L["Save"]
+
+
}
@@ -182,105 +183,107 @@
-
- @L["Edit"]
-
-
-
-
-
+
+
+
+ @L["Cancel"]
+ @L["Save"]
+
+
}
diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/de-DE.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/de-DE.json
new file mode 100644
index 0000000000..3ad1a5d8ae
--- /dev/null
+++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/de-DE.json
@@ -0,0 +1,120 @@
+{
+ "culture": "de-DE",
+ "texts": {
+ "Menu:IdentityManagement": "Identitätsverwaltung",
+ "Users": "Benutzer",
+ "NewUser": "Neuer Benutzer",
+ "UserName": "Benutzername",
+ "EmailAddress": "E-Mail-Adresse",
+ "PhoneNumber": "Telefonnummer",
+ "UserInformations": "Nutzerinformation",
+ "DisplayName:IsDefault": "Standard",
+ "DisplayName:IsStatic": "Statisch",
+ "DisplayName:IsPublic": "Öffentlich",
+ "Roles": "Rollen",
+ "Password": "Passwort",
+ "PersonalInfo": "Mein Profil",
+ "PersonalSettings": "Persönliche Einstellungen",
+ "UserDeletionConfirmationMessage": "Benutzer '{0}' wird gelöscht. Bestätigen Sie das?",
+ "RoleDeletionConfirmationMessage": "Die Rolle '{0}' wird gelöscht. Bestätigen Sie das?",
+ "DisplayName:RoleName": "Rollenname",
+ "DisplayName:UserName": "Benutzername",
+ "DisplayName:Name": "Name",
+ "DisplayName:Surname": "Nachname",
+ "DisplayName:Password": "Passwort",
+ "DisplayName:Email": "E-Mail-Adresse",
+ "DisplayName:PhoneNumber": "Telefonnummer",
+ "DisplayName:TwoFactorEnabled": "Zwei-Faktor-Überprüfung",
+ "DisplayName:LockoutEnabled": "Benutzerkonto nach fehlgeschlagenen Anmeldeversuchen sperren",
+ "NewRole": "Neue Rolle",
+ "RoleName": "Rollenname",
+ "CreationTime": "Erstellungszeitpunkt",
+ "Permissions": "Berechtigungen",
+ "DisplayName:CurrentPassword": "Derzeitiges Passwort",
+ "DisplayName:NewPassword": "Neues Passwort",
+ "DisplayName:NewPasswordConfirm": "Neues Passwort bestätigen",
+ "PasswordChangedMessage": "Ihr Passwort wurde erfolgreich geändert.",
+ "PersonalSettingsSavedMessage": "Ihre persönlichen Einstellungen wurden erfolgreich gespeichert.",
+ "Volo.Abp.Identity:DefaultError": "Ein unbekannter Fehler ist aufgetreten.",
+ "Volo.Abp.Identity:ConcurrencyFailure": "Optimitic Concurrency-Fehler, Objekt wurde geändert.",
+ "Volo.Abp.Identity:DuplicateEmail": "E-Mail '{0}' ist bereits vergeben.",
+ "Volo.Abp.Identity:DuplicateRoleName": "Der Rollenname '{0}' ist bereits vergeben.",
+ "Volo.Abp.Identity:DuplicateUserName": "Der Benutzername '{0}' ist bereits vergeben.",
+ "Volo.Abp.Identity:InvalidEmail": "E-Mail '{0}' ist ungültig.",
+ "Volo.Abp.Identity:InvalidPasswordHasherCompatibilityMode": "Der angegebene PasswordHasherCompatibilityMode ist ungültig.",
+ "Volo.Abp.Identity:InvalidPasswordHasherIterationCount": "Die Iterationszahl muss eine positive Ganzzahl sein.",
+ "Volo.Abp.Identity:InvalidRoleName": "Der Rollenname '{0}' ist ungültig.",
+ "Volo.Abp.Identity:InvalidToken": "Ungültiger Token.",
+ "Volo.Abp.Identity:InvalidUserName": "Der Benutzername '{0}' ist ungültig und darf nur Buchstaben oder Ziffern enthalten.",
+ "Volo.Abp.Identity:LoginAlreadyAssociated": "Ein Benutzer mit diesem Login existiert bereits.",
+ "Volo.Abp.Identity:PasswordMismatch": "Falsches Passwort.",
+ "Volo.Abp.Identity:PasswordRequiresDigit": "Passwörter müssen mindestens eine Ziffer haben ('0' - '9').",
+ "Volo.Abp.Identity:PasswordRequiresLower": "Passwörter müssen mindestens einen Kleinbuchstaben haben ('a' - 'z').",
+ "Volo.Abp.Identity:PasswordRequiresNonAlphanumeric": "Passwörter müssen mindestens ein nicht alphanumerisches Zeichen haben.",
+ "Volo.Abp.Identity:PasswordRequiresUpper": "Passwörter müssen mindestens einen Großbuchstaben ('A' - 'Z') enthalten.",
+ "Volo.Abp.Identity:PasswordTooShort": "Passwörter müssen mindestens {0} Zeichen lang sein.",
+ "Volo.Abp.Identity:RoleNotFound": "Rolle {0} existiert nicht.",
+ "Volo.Abp.Identity:UserAlreadyHasPassword": "Der Benutzer hat bereits ein Passwort festgelegt.",
+ "Volo.Abp.Identity:UserAlreadyInRole": "Benutzer bereits in Rolle '{0}'.",
+ "Volo.Abp.Identity:UserLockedOut": "Benutzer ist gesperrt.",
+ "Volo.Abp.Identity:UserLockoutNotEnabled": "Die Sperrung ist für diesen Benutzer nicht aktiviert.",
+ "Volo.Abp.Identity:UserNameNotFound": "Benutzer {0} existiert nicht.",
+ "Volo.Abp.Identity:UserNotInRole": "Der Benutzer hat nicht die Rolle '{0}'.",
+ "Volo.Abp.Identity:PasswordConfirmationFailed": "Das Passwort stimmt nicht mit dem Bestätigungspasswort überein.",
+ "Volo.Abp.Identity:010001": "Sie können Ihr eigenes Benutzerkonto nicht löschen!",
+ "Volo.Abp.Identity:010002": "Es kann nicht mehr als die Organisationseinheit {MaxUserMembershipCount} für einen Benutzer festgelegt werden!",
+ "Volo.Abp.Identity:010003": "Passwort eines extern angemeldeten Benutzers kann nicht geändert werden!",
+ "Volo.Abp.Identity:010004": "Es gibt bereits eine Organisationseinheit mit dem Namen {0}. Zwei Einheiten mit demselben Namen können nicht auf derselben Ebene erstellt werden.",
+ "Volo.Abp.Identity:010005": "Statische Rollen können nicht umbenannt werden.",
+ "Volo.Abp.Identity:010006": "Statische Rollen können nicht gelöscht werden.",
+ "Volo.Abp.Identity:010007": "Sie können Ihre Zwei-Faktor-Einstellung nicht ändern.",
+ "Volo.Abp.Identity:010008": "Die Zwei-Faktor-Einstellung dürfen nicht geändert werden.",
+ "Identity.OrganizationUnit.MaxUserMembershipCount": "Maximal zulässige Anzahl an Mitgliedschaften in Organisationseinheiten für einen Benutzer",
+ "Permission:IdentityManagement": "Identitätsverwaltung",
+ "Permission:RoleManagement": "Rollenverwaltung",
+ "Permission:Create": "Erstellen",
+ "Permission:Edit": "Bearbeiten",
+ "Permission:Delete": "Löschen",
+ "Permission:ChangePermissions": "Berechtigungen ändern",
+ "Permission:UserManagement": "Benutzerverwaltung",
+ "Permission:UserLookup": "Benutzersuche",
+ "Feature:IdentityGroup": "Identität",
+ "Feature:TwoFactor": "Zwei-Faktor-Verhalten",
+ "Feature:TwoFactorDescription": "Stellen Sie das Zwei-Faktor-Verhalten ein. Optionale Werte: Optional, Deaktiviert, Erzwungen",
+ "Feature:TwoFactor.Optional": "Optional",
+ "Feature:TwoFactor.Disabled": "Deaktiviert",
+ "Feature:TwoFactor.Forced": "Erzwungen",
+ "DisplayName:Abp.Identity.Password.RequiredLength": "Erforderliche Länge",
+ "DisplayName:Abp.Identity.Password.RequiredUniqueChars": "Erforderliche eindeutige Zeichennummer",
+ "DisplayName:Abp.Identity.Password.RequireNonAlphanumeric": "Erforderliches nicht alphanumerisches Zeichen",
+ "DisplayName:Abp.Identity.Password.RequireLowercase": "Erforderlicher Kleinbuchstabe",
+ "DisplayName:Abp.Identity.Password.RequireUppercase": "Erforderlicher Großbuchstabe",
+ "DisplayName:Abp.Identity.Password.RequireDigit": "Erforderliche Ziffer",
+ "DisplayName:Abp.Identity.Lockout.AllowedForNewUsers": "Für neue Benutzer aktiviert",
+ "DisplayName:Abp.Identity.Lockout.LockoutDuration": "Sperrdauer (Sekunden)",
+ "DisplayName:Abp.Identity.Lockout.MaxFailedAccessAttempts": "Max. Fehlgeschlagene Zugriffsversuche",
+ "DisplayName:Abp.Identity.SignIn.RequireConfirmedEmail": "Bestätigte E-Mail-Adresse erforderlich",
+ "DisplayName:Abp.Identity.SignIn.EnablePhoneNumberConfirmation": "Ermöglichen Sie Benutzern, ihre Telefonnummer zu bestätigen",
+ "DisplayName:Abp.Identity.SignIn.RequireConfirmedPhoneNumber": "Bestätigte Telefonnummer erforderlich",
+ "DisplayName:Abp.Identity.User.IsUserNameUpdateEnabled": "Ermöglichen Sie Benutzern, ihre Benutzernamen zu ändern",
+ "DisplayName:Abp.Identity.User.IsEmailUpdateEnabled": "Ermöglichen Sie Benutzern, ihre E-Mail-Adressen zu ändern",
+ "Description:Abp.Identity.Password.RequiredLength": "Die Mindestlänge, die ein Passworts aufweisen muss.",
+ "Description:Abp.Identity.Password.RequiredUniqueChars": "Die Mindestanzahl unterschiedlicher Zeichen, die ein Kennwort enthalten muss.",
+ "Description:Abp.Identity.Password.RequireNonAlphanumeric": "Wenn Passwörter ein nicht alphanumerisches Zeichen enthalten müssen.",
+ "Description:Abp.Identity.Password.RequireLowercase": "Wenn Kennwörter einen ASCII-Kleinbuchstaben enthalten müssen.",
+ "Description:Abp.Identity.Password.RequireUppercase": "Wenn Kennwörter einen ASCII-Großbuchstaben enthalten müssen.",
+ "Description:Abp.Identity.Password.RequireDigit": "Wenn Passwörter eine Ziffer enthalten müssen.",
+ "Description:Abp.Identity.Lockout.AllowedForNewUsers": "Gibt an, ob ein neuer Benutzer gesperrt werden kann.",
+ "Description:Abp.Identity.Lockout.LockoutDuration": "Die Dauer, für die ein Benutzer gesperrt ist, wenn eine Sperre auftritt.",
+ "Description:Abp.Identity.Lockout.MaxFailedAccessAttempts": "Die Anzahl der fehlgeschlagenen Zugriffsversuche, die zulässig sind, bevor ein Benutzer gesperrt wird, sofern die Sperre aktiviert ist.",
+ "Description:Abp.Identity.SignIn.RequireConfirmedEmail": "Gibt an, ob eine bestätigte E-Mail-Adresse erforderlich ist, um sich anzumelden.",
+ "Description:Abp.Identity.SignIn.EnablePhoneNumberConfirmation": "Gibt an, ob die Telefonnummer vom Benutzer bestätigt werden kann.",
+ "Description:Abp.Identity.SignIn.RequireConfirmedPhoneNumber": "Gibt an, ob eine bestätigte Telefonnummer erforderlich ist, um sich anzumelden.",
+ "Description:Abp.Identity.User.IsUserNameUpdateEnabled": "Gibt an, ob der Benutzername vom Benutzer aktualisiert werden kann.",
+ "Description:Abp.Identity.User.IsEmailUpdateEnabled": "Gibt an, ob die E-Mail-Adresse vom Benutzer aktualisiert werden kann.",
+ "DisplayName:Abp.Identity.TwoFactorBehaviour": "Zwei-Faktoren-Verhalten",
+ "Description:Abp.Identity.TwoFactorBehaviour": "Zwei-Faktoren-Verhalten",
+ "DisplayName:Abp.Identity.UsersCanChange": "Ermöglichen Sie Benutzern, ihre Zwei-Faktor-Authentifizierung zu ändern.",
+ "Description:Abp.Identity.UsersCanChange": "Ermöglichen Sie Benutzern, ihre Zwei-Faktor-Authentifizierung zu ändern."
+ }
+}
\ No newline at end of file
diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Localization/Resources/de-DE.json b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Localization/Resources/de-DE.json
new file mode 100644
index 0000000000..bbb835af15
--- /dev/null
+++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Localization/Resources/de-DE.json
@@ -0,0 +1,14 @@
+{
+ "culture": "de-DE",
+ "texts": {
+ "Volo.IdentityServer:DuplicateIdentityResourceName": "Identitätsressourcenname existiert bereits: {Name}",
+ "Volo.IdentityServer:DuplicateApiResourceName": "Der Name der API-Ressource ist bereits vorhanden: {Name}",
+ "Volo.IdentityServer:DuplicateApiScopeName": "Der Name des Api-Bereichs existiert bereits: {Name}",
+ "Volo.IdentityServer:DuplicateClientId": "ClientId existiert bereits: {ClientId}",
+ "UserLockedOut": "Das Benutzerkonto wurde aufgrund ungültiger Anmeldeversuche gesperrt. Bitte warten Sie eine Weile und versuchen Sie es erneut.",
+ "InvalidUserNameOrPassword": "Ungültiger Benutzername oder Passwort!",
+ "LoginIsNotAllowed": "Sie dürfen sich nicht anmelden! Sie müssen Ihre E-Mail-Adresse / Telefonnummer bestätigen.",
+ "InvalidUsername": "Ungültiger Benutzername oder Passwort!",
+ "TheTargetUserIsNotLinkedToYou": "Der Zielbenutzer ist nicht mit Ihnen verknüpft!"
+ }
+}
\ No newline at end of file
diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/de-DE.json b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/de-DE.json
new file mode 100644
index 0000000000..ab64118c53
--- /dev/null
+++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/de-DE.json
@@ -0,0 +1,10 @@
+{
+ "culture": "de-DE",
+ "texts": {
+ "Permissions": "Berechtigungen",
+ "OnlyProviderPermissons": "Nur dieser Anbieter",
+ "All": "Alles",
+ "SelectAllInAllTabs": "Alle Berechtigungen gewähren",
+ "SelectAllInThisTab": "Alles auswählen"
+ }
+}
\ No newline at end of file
diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/de-DE.json b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/de-DE.json
new file mode 100644
index 0000000000..04ada53d3e
--- /dev/null
+++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/de-DE.json
@@ -0,0 +1,7 @@
+{
+ "culture": "de-DE",
+ "texts": {
+ "Settings": "Einstellungen",
+ "SuccessfullySaved": "Erfolgreich gespeichert"
+ }
+}
\ No newline at end of file
diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/TenantCreateOrUpdateDtoBase.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/TenantCreateOrUpdateDtoBase.cs
index 9f047af2fd..eb5b71ba05 100644
--- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/TenantCreateOrUpdateDtoBase.cs
+++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/TenantCreateOrUpdateDtoBase.cs
@@ -8,11 +8,12 @@ namespace Volo.Abp.TenantManagement
{
[Required]
[DynamicStringLength(typeof(TenantConsts), nameof(TenantConsts.MaxNameLength))]
+ [Display(Name = "TenantName")]
public string Name { get; set; }
public TenantCreateOrUpdateDtoBase() : base(false)
{
-
+
}
}
}
\ No newline at end of file
diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor
index 81c61ae9fa..1d62dc6be0 100644
--- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor
+++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor
@@ -1,15 +1,15 @@
@page "/tenant-management/tenants"
-@attribute [Authorize(TenantManagementPermissions.Tenants.Default)]
+@attribute [Authorize( TenantManagementPermissions.Tenants.Default )]
@using Microsoft.AspNetCore.Authorization
@using Volo.Abp.FeatureManagement.Blazor.Components
@using Microsoft.AspNetCore.Components.Forms
-
+@using Volo.Abp.TenantManagement.Localization
+@inject AbpBlazorMessageLocalizerHelper LH
@inherits AbpCrudPageBase
-
@* ************************* PAGE HEADER ************************* *@
- @L["Tenants"]
+ @L["Tenants"]
@if (HasCreatePermission)
@@ -65,31 +65,52 @@
{
-
-
- @L["NewTenant"]
-
-
-
-
-
- @L["TenantName"]
-
-
-
- @L["DisplayName:AdminEmailAddress"]
-
-
-
- @L["DisplayName:AdminPassword"]
-
-
-
-
-
- @L["Cancel"]
- @L["Save"]
-
+
+
}
@@ -99,23 +120,31 @@
{
-
-
- @L["Edit"]
-
-
-
-
-
- @L["TenantName"]
-
-
-
-
-
- @L["Cancel"]
- @L["Save"]
-
+
+
}
@@ -125,30 +154,36 @@
{
-
-
- @L["ConnectionStrings"]
-
-
-
-
-
- @L["DisplayName:DefaultConnectionString"]
-
-
- @if (!TenantInfo.UseSharedDatabase)
- {
-
- @L["DisplayName:DefaultConnectionString"]
-
-
- }
-
-
-
- @L["Cancel"]
- @L["Save"]
-
+
+
}
diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor.cs
index e5fcc9c4a3..ad33b68e5c 100644
--- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor.cs
+++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor.cs
@@ -1,4 +1,5 @@
using System;
+using System.ComponentModel.DataAnnotations;
using System.Threading.Tasks;
using Blazorise;
using Microsoft.AspNetCore.Authorization;
@@ -20,9 +21,10 @@ namespace Volo.Abp.TenantManagement.Blazor.Pages.TenantManagement
protected FeatureManagementModal FeatureManagementModal;
protected Modal ManageConnectionStringModal;
+ protected Validations ManageConnectionStringValidations;
protected TenantInfoModel TenantInfo;
-
+
public TenantManagement()
{
LocalizationResource = typeof(AbpTenantManagementResource);
@@ -36,7 +38,7 @@ namespace Volo.Abp.TenantManagement.Blazor.Pages.TenantManagement
TenantInfo = new TenantInfoModel();
}
-
+
protected async override Task SetPermissionsAsync()
{
await base.SetPermissionsAsync();
@@ -47,6 +49,8 @@ namespace Volo.Abp.TenantManagement.Blazor.Pages.TenantManagement
protected virtual async Task OpenEditConnectionStringModalAsync(Guid id)
{
+ ManageConnectionStringValidations.ClearAll();
+
var tenantConnectionString = await AppService.GetDefaultConnectionStringAsync(id);
TenantInfo = new TenantInfoModel
@@ -67,18 +71,21 @@ namespace Volo.Abp.TenantManagement.Blazor.Pages.TenantManagement
protected virtual async Task UpdateConnectionStringAsync()
{
- await CheckPolicyAsync(ManageConnectionStringsPolicyName);
-
- if (TenantInfo.UseSharedDatabase || TenantInfo.DefaultConnectionString.IsNullOrWhiteSpace())
+ if (ManageConnectionStringValidations.ValidateAll())
{
- await AppService.DeleteDefaultConnectionStringAsync(TenantInfo.Id);
+ await CheckPolicyAsync(ManageConnectionStringsPolicyName);
+
+ if (TenantInfo.UseSharedDatabase || TenantInfo.DefaultConnectionString.IsNullOrWhiteSpace())
+ {
+ await AppService.DeleteDefaultConnectionStringAsync(TenantInfo.Id);
+ }
+ else
+ {
+ await AppService.UpdateDefaultConnectionStringAsync(TenantInfo.Id, TenantInfo.DefaultConnectionString);
+ }
+
+ ManageConnectionStringModal.Hide();
}
- else
- {
- await AppService.UpdateDefaultConnectionStringAsync(TenantInfo.Id, TenantInfo.DefaultConnectionString);
- }
-
- ManageConnectionStringModal.Hide();
}
protected override string GetDeleteConfirmationMessage(TenantDto entity)
@@ -93,6 +100,7 @@ namespace Volo.Abp.TenantManagement.Blazor.Pages.TenantManagement
public bool UseSharedDatabase { get; set; }
+ [Required]
public string DefaultConnectionString { get; set; }
}
}
\ No newline at end of file
diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/de-DE.json b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/de-DE.json
new file mode 100644
index 0000000000..16644b17aa
--- /dev/null
+++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/de-DE.json
@@ -0,0 +1,23 @@
+{
+ "culture": "de-DE",
+ "texts": {
+ "Menu:TenantManagement": "Mandantenverwaltung",
+ "Tenants": "Mandanten",
+ "NewTenant": "Neuer Mandant",
+ "TenantName": "Mandantenname",
+ "DisplayName:TenantName": "Mandantenname",
+ "TenantDeletionConfirmationMessage": "Der Mandant '{0}' wird gelöscht. Bestätigen Sie das?",
+ "ConnectionStrings": "Connection Strings",
+ "DisplayName:DefaultConnectionString": "Standard-Connection String",
+ "DisplayName:UseSharedDatabase": "Verwenden Sie die freigegebene Datenbank",
+ "ManageHostFeatures": "Host-Features verwalten",
+ "Permission:TenantManagement": "Mandantenverwaltung",
+ "Permission:Create": "Erstellen",
+ "Permission:Edit": "Bearbeiten",
+ "Permission:Delete": "Löschen",
+ "Permission:ManageConnectionStrings": "Connection Strings verwalten",
+ "Permission:ManageFeatures": "Features verwalten",
+ "DisplayName:AdminEmailAddress": "Admin-E-Mail-Adresse",
+ "DisplayName:AdminPassword": "Admin-Passwort"
+ }
+}
\ No newline at end of file
diff --git a/modules/virtual-file-explorer/src/Volo.Abp.VirtualFileExplorer.Web/Localization/Resources/de-DE.json b/modules/virtual-file-explorer/src/Volo.Abp.VirtualFileExplorer.Web/Localization/Resources/de-DE.json
new file mode 100644
index 0000000000..78e2d41ed4
--- /dev/null
+++ b/modules/virtual-file-explorer/src/Volo.Abp.VirtualFileExplorer.Web/Localization/Resources/de-DE.json
@@ -0,0 +1,14 @@
+{
+ "culture": "de-DE",
+ "texts": {
+ "VirtualFileExplorer": "Virtueller Dateiexplorer",
+ "VirtualFileType": "Virtueller Dateityp",
+ "Menu:VirtualFileExplorer": "Virtueller Dateiexplorer",
+ "LastUpdateTime": "Letzte Aktualisierung",
+ "VirtualFileName": "Name der virtuellen Datei",
+ "FileContent": "Dateiinhalt",
+ "Size": "Größe",
+ "BackToRoot": "Zurück zum Stammverzeichnis",
+ "EmptyFileInfoList": "Es gibt keine virtuellen Dateien"
+ }
+}
\ No newline at end of file
diff --git a/npm/ng-packs/angular.json b/npm/ng-packs/angular.json
index 0f1ca59f48..1f4aed25fa 100644
--- a/npm/ng-packs/angular.json
+++ b/npm/ng-packs/angular.json
@@ -496,6 +496,15 @@
"with": "apps/dev-app/src/environments/environment.internal.ts"
}
]
+ },
+ "regression": {
+ "tsConfig": "apps/dev-app/tsconfig.dev.json",
+ "fileReplacements": [
+ {
+ "replace": "apps/dev-app/src/environments/environment.ts",
+ "with": "apps/dev-app/src/environments/environment.regression.ts"
+ }
+ ]
}
}
},
@@ -510,6 +519,9 @@
},
"internal": {
"browserTarget": "dev-app:build:internal"
+ },
+ "regression": {
+ "browserTarget": "dev-app:build:regression"
}
}
},
diff --git a/npm/ng-packs/apps/dev-app/src/app/app.module.ts b/npm/ng-packs/apps/dev-app/src/app/app.module.ts
index 2be6a1d523..94ebbb5cc0 100644
--- a/npm/ng-packs/apps/dev-app/src/app/app.module.ts
+++ b/npm/ng-packs/apps/dev-app/src/app/app.module.ts
@@ -9,6 +9,7 @@ import { ThemeSharedModule } from '@abp/ng.theme.shared';
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
+import { InspectorModule } from '@ngneat/inspector';
import { NgxsLoggerPluginModule } from '@ngxs/logger-plugin';
import { NgxsModule } from '@ngxs/store';
import { environment } from '../environments/environment';
@@ -16,7 +17,10 @@ import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
import { APP_ROUTE_PROVIDER } from './route.provider';
-const LOGGERS = [NgxsLoggerPluginModule.forRoot({ disabled: true })];
+const INSPECTION_TOOLS = [
+ NgxsLoggerPluginModule.forRoot({ disabled: true }),
+ InspectorModule.forRoot(),
+];
@NgModule({
imports: [
@@ -36,7 +40,7 @@ const LOGGERS = [NgxsLoggerPluginModule.forRoot({ disabled: true })];
SettingManagementConfigModule.forRoot(),
NgxsModule.forRoot(),
ThemeBasicModule.forRoot(),
- ...(environment.production ? [] : LOGGERS),
+ ...(environment.production || environment.test ? [] : INSPECTION_TOOLS),
],
providers: [APP_ROUTE_PROVIDER],
declarations: [AppComponent],
diff --git a/npm/ng-packs/apps/dev-app/src/environments/environment.regression.ts b/npm/ng-packs/apps/dev-app/src/environments/environment.regression.ts
new file mode 100644
index 0000000000..1ce44bfc74
--- /dev/null
+++ b/npm/ng-packs/apps/dev-app/src/environments/environment.regression.ts
@@ -0,0 +1,43 @@
+import { Config } from '@abp/ng.core';
+
+const baseUrl = 'http://localhost:4200';
+
+export const environment = {
+ test: true,
+ production: false,
+ hmr: false,
+ application: {
+ baseUrl,
+ name: 'MyProjectName',
+ logoUrl: '',
+ },
+ oAuthConfig: {
+ issuer: 'https://localhost:44305',
+ redirectUri: baseUrl,
+ clientId: 'MyProjectName_App',
+ responseType: 'code',
+ scope: 'offline_access MyProjectName',
+ },
+ apis: {
+ default: {
+ url: 'https://localhost:44305',
+ rootNamespace: 'MyCompanyName.MyProjectName',
+ },
+ AbpFeatureManagement: {
+ url: 'https://localhost:44305',
+ rootNamespace: 'Volo.Abp',
+ },
+ AbpPermissionManagement: {
+ url: 'https://localhost:44305',
+ rootNamespace: 'Volo.Abp.PermissionManagement',
+ },
+ AbpTenantManagement: {
+ url: 'https://localhost:44305',
+ rootNamespace: 'Volo.Abp.TenantManagement',
+ },
+ AbpIdentity: {
+ url: 'https://localhost:44305',
+ rootNamespace: 'Volo.Abp',
+ },
+ },
+} as Config.Environment;
diff --git a/npm/ng-packs/package.json b/npm/ng-packs/package.json
index 9ce382c01f..42284c0e07 100644
--- a/npm/ng-packs/package.json
+++ b/npm/ng-packs/package.json
@@ -9,6 +9,7 @@
"symlink": "symlink",
"start": "ng serve dev-app",
"start:internal": "ng serve dev-app --configuration=internal",
+ "start:regression": "ng serve dev-app --configuration=regression",
"build": "ng build",
"test": "ng test --watchAll --runInBand",
"commit": "git-cz",
@@ -54,6 +55,7 @@
"@angular/router": "~10.1.2",
"@fortawesome/fontawesome-free": "^5.14.0",
"@ng-bootstrap/ng-bootstrap": "^7.0.0",
+ "@ngneat/inspector": "^1.0.0",
"@ngneat/spectator": "^5.13.0",
"@ngx-validate/core": "^0.0.12",
"@ngxs/devtools-plugin": "^3.7.0",
diff --git a/npm/ng-packs/packages/account/src/lib/components/login/login.component.ts b/npm/ng-packs/packages/account/src/lib/components/login/login.component.ts
index 21ba727692..3a6a8663cc 100644
--- a/npm/ng-packs/packages/account/src/lib/components/login/login.component.ts
+++ b/npm/ng-packs/packages/account/src/lib/components/login/login.component.ts
@@ -58,7 +58,7 @@ export class LoginComponent implements OnInit {
this.toasterService.error(
snq(() => err.error.error_description) ||
snq(() => err.error.error.message, 'AbpAccount::DefaultErrorMessage'),
- 'Error',
+ 'AbpAccount::Error',
{ life: 7000 },
);
return throwError(err);
diff --git a/npm/ng-packs/packages/core/src/lib/models/config.ts b/npm/ng-packs/packages/core/src/lib/models/config.ts
index cf4eb007c9..be2c128d37 100644
--- a/npm/ng-packs/packages/core/src/lib/models/config.ts
+++ b/npm/ng-packs/packages/core/src/lib/models/config.ts
@@ -10,6 +10,7 @@ export namespace Config {
apis: Apis;
application: Application;
hmr?: boolean;
+ test?: boolean;
localization?: { defaultResourceName?: string };
oAuthConfig: AuthConfig;
production: boolean;
diff --git a/npm/ng-packs/yarn.lock b/npm/ng-packs/yarn.lock
index 99efbc0100..98afa1cf3a 100644
--- a/npm/ng-packs/yarn.lock
+++ b/npm/ng-packs/yarn.lock
@@ -2,20 +2,20 @@
# yarn lockfile v1
-"@abp/ng.account@~3.3.0":
- version "3.3.0"
- resolved "https://registry.yarnpkg.com/@abp/ng.account/-/ng.account-3.3.0.tgz#db36a62b9b3106096a95844c5f8c8df664dc68f0"
- integrity sha512-jJuGUIsQL4rBgpr8TqnEKp9PKtrl4KooeizeQIQWrm4JwC0ZQRyo1PB+D3mDI6sPXQo4Uc2YA14nRSGJ9OSdXA==
+"@abp/ng.account@~3.3.1":
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/@abp/ng.account/-/ng.account-3.3.1.tgz#e660ede11f2e73b62f9a58ada24afe38836056b3"
+ integrity sha512-IJeCB+Y8IeZIF54f406OYw/Bsg0hGSLbYC9X0up/o0Lwm16+UTCZOXVBQ4OifIf8mmWLDlX81zO2KX68fEm97g==
dependencies:
- "@abp/ng.theme.shared" "~3.3.0"
+ "@abp/ng.theme.shared" "~3.3.1"
tslib "^2.0.0"
-"@abp/ng.core@~3.3.0":
- version "3.3.0"
- resolved "https://registry.yarnpkg.com/@abp/ng.core/-/ng.core-3.3.0.tgz#dd013e171c18a66eede4b8404211d69f09a60533"
- integrity sha512-ERH1XyAY1tviWctyYKL8w/9stGogcN5g2ty/6OdZf3dUPcN2MrjXt8o8nRdvA7yUfP4VFKH8xl7qAnSMO+5iCQ==
+"@abp/ng.core@~3.3.1":
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/@abp/ng.core/-/ng.core-3.3.1.tgz#230518da3cd1a8b4efef85df9d4d07e5c66b2549"
+ integrity sha512-x2zD3zhK5YD9EaV1p8AEboj9yoqzYCvyOkb7YDDBNR1VP2v+m7T8NRASBHkVrGZLwLkyd/qwOBUjEitz8XAbUA==
dependencies:
- "@abp/utils" "^3.3.0-rc.2"
+ "@abp/utils" "^3.3.0"
"@angular/localize" "~10.0.10"
"@ngxs/router-plugin" "^3.7.0"
"@ngxs/storage-plugin" "^3.7.0"
@@ -27,35 +27,35 @@
ts-toolbelt "6.15.4"
tslib "^2.0.0"
-"@abp/ng.feature-management@~3.3.0":
- version "3.3.0"
- resolved "https://registry.yarnpkg.com/@abp/ng.feature-management/-/ng.feature-management-3.3.0.tgz#6f83895acd8cf2bb163cc5260404eab86d6d7a4d"
- integrity sha512-XjCEDw1aiQ9zt8McEazqx+lgbtMicQn2KAq/Z45G3Pp138twvT7nDYKwEy3Zo/kzeaQcZYya9/xNP6r7aSnI4A==
+"@abp/ng.feature-management@~3.3.1":
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/@abp/ng.feature-management/-/ng.feature-management-3.3.1.tgz#b4497d999e87049b266473daf8d274d5fb26b248"
+ integrity sha512-SdUrZ67bGJQZ0RchS7bcA5wSF6PiD3hcJwsReWzw49nM2Qr8vbHlsstXww6slvq8nT5gwC6O0OA71zsHarpHfg==
dependencies:
- "@abp/ng.theme.shared" "~3.3.0"
+ "@abp/ng.theme.shared" "~3.3.1"
tslib "^2.0.0"
-"@abp/ng.identity@~3.3.0":
- version "3.3.0"
- resolved "https://registry.yarnpkg.com/@abp/ng.identity/-/ng.identity-3.3.0.tgz#587b81e806d35185bee0a72cc400969c0992a8bc"
- integrity sha512-AzIMkWpiHSVdq4E8n6LNl/QXZHn0KNB3Ok6cfOVIPWWUl1NuTmdG3UdGOZAXGOm9bQmflbTKbBZcdhLOzHlLGw==
+"@abp/ng.identity@~3.3.1":
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/@abp/ng.identity/-/ng.identity-3.3.1.tgz#e357e8bb1281e4fcbdeb20ef9d288eee6b274d3c"
+ integrity sha512-NjCmLdHUQtyGWPqIBo0OVSxUeQ4laQ501xPsJYZG7WOWmMJGTkBQKIFkUAG8gLKv8EDTIzBuVs8V8scr+EUSiw==
dependencies:
- "@abp/ng.permission-management" "~3.3.0"
- "@abp/ng.theme.shared" "~3.3.0"
+ "@abp/ng.permission-management" "~3.3.1"
+ "@abp/ng.theme.shared" "~3.3.1"
tslib "^2.0.0"
-"@abp/ng.permission-management@~3.3.0":
- version "3.3.0"
- resolved "https://registry.yarnpkg.com/@abp/ng.permission-management/-/ng.permission-management-3.3.0.tgz#c686dca6d80fa5dafe9d940accf4b91853743ec1"
- integrity sha512-jHVmgsZ06umNuMp9Uj1SWXm9dz7UNKMyDZjYrbWuG0S8ciwCCmykfOar0C+BK1kvycJXXJw2VKd0Kj36/57FxQ==
+"@abp/ng.permission-management@~3.3.1":
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/@abp/ng.permission-management/-/ng.permission-management-3.3.1.tgz#2870a517b00b266c064df0914f0c4227c83677d7"
+ integrity sha512-69h0MLXOOQ9Iav4drwg1P6dcA+tl7+Vgt34IGJW1o0Aj0pYBlqBZQqq8IOW2g/xVLRE8qkfRnmoyAGBQfbJkTA==
dependencies:
- "@abp/ng.theme.shared" "~3.3.0"
+ "@abp/ng.theme.shared" "~3.3.1"
tslib "^2.0.0"
-"@abp/ng.schematics@~3.3.0":
- version "3.3.0"
- resolved "https://registry.yarnpkg.com/@abp/ng.schematics/-/ng.schematics-3.3.0.tgz#b2e05826e19fa8096ca11f2117ff81061fbde24f"
- integrity sha512-WSIDGoxX2HGtIpLY6uMpX0r/vOClilN478sHKdzX4OL3yXetdvrRp8evB87EOteP4r5DbRIjpWk3GEbknlyeEg==
+"@abp/ng.schematics@~3.3.1":
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/@abp/ng.schematics/-/ng.schematics-3.3.1.tgz#ca5588574a6bbe10551d828ae0940b2004bdd3b2"
+ integrity sha512-1altHVHSWL0RLXKcsVltSqAUdiqxFItBYReR8YniJT7nQNOy+QeWiwX6H+Epv79K3m0Uf7G1d3fH1uCM6Qqq4A==
dependencies:
"@angular-devkit/core" "~10.0.3"
"@angular-devkit/schematics" "~10.0.3"
@@ -63,37 +63,37 @@
jsonc-parser "^2.3.0"
typescript "~3.9.2"
-"@abp/ng.setting-management@~3.3.0":
- version "3.3.0"
- resolved "https://registry.yarnpkg.com/@abp/ng.setting-management/-/ng.setting-management-3.3.0.tgz#a53a370e201760570945e9130c7e85bdfcb48ac8"
- integrity sha512-54EhudWaXrN0e7bFXNBVkK3bwEM6A/y8OF79Q9//YCD7eB56KvNdP4XXdSRKUfH7P9bvxJn/bmSAZcRQ1uk9Ww==
+"@abp/ng.setting-management@~3.3.1":
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/@abp/ng.setting-management/-/ng.setting-management-3.3.1.tgz#f89ed79ab5b6348a5bd57a8699ee6298279e30ec"
+ integrity sha512-TGIeAUemaKEFcC/HG6d9JEYOG9EIYTry1goAKJReI0CShrykZUM5WPHe3wK0CQIqgI6MChVSYeq4yC+oyl8JnQ==
dependencies:
- "@abp/ng.theme.shared" "~3.3.0"
+ "@abp/ng.theme.shared" "~3.3.1"
tslib "^2.0.0"
-"@abp/ng.tenant-management@~3.3.0":
- version "3.3.0"
- resolved "https://registry.yarnpkg.com/@abp/ng.tenant-management/-/ng.tenant-management-3.3.0.tgz#c5479c3d2b17a96308f8e2e87907dd405003fb5d"
- integrity sha512-NPqTP2vU40IxZ0sQ8QNEgl5okptwf6J99Vkl1ELYwa8ztEnfBBo94gK/1q+I8CiQHp3fr//3ycrimPRszW/CCQ==
+"@abp/ng.tenant-management@~3.3.1":
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/@abp/ng.tenant-management/-/ng.tenant-management-3.3.1.tgz#315fdc5980adddbc9d561fba15bed6c27d8203ec"
+ integrity sha512-dehegHTe459UCc+45G0yL/ptGBk4xDk+Nl5DIRKDyf0k7l5HZstS5UrWwOAY8JO2SECUB5RjX33yvqt2/nxt4Q==
dependencies:
- "@abp/ng.feature-management" "~3.3.0"
- "@abp/ng.theme.shared" "~3.3.0"
+ "@abp/ng.feature-management" "~3.3.1"
+ "@abp/ng.theme.shared" "~3.3.1"
tslib "^2.0.0"
-"@abp/ng.theme.basic@~3.3.0":
- version "3.3.0"
- resolved "https://registry.yarnpkg.com/@abp/ng.theme.basic/-/ng.theme.basic-3.3.0.tgz#c216c344273a2f816fa723ddcb3840e416dc5a5d"
- integrity sha512-BiwpYd8C5ZL0ew8eVwtpC+nXoSNaP64tJkw1CJScvgJ0fPRiVPddFzgEd3PDFPjqeWtupN1Q8pyp5ng7vqOOpA==
+"@abp/ng.theme.basic@~3.3.1":
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/@abp/ng.theme.basic/-/ng.theme.basic-3.3.1.tgz#e9d711c3d1895a481d15409f35e52608d71259fc"
+ integrity sha512-DcAdBQNdgpkEGhFHXClBJIfTOuG43AQkk6o4yzaglCkYKQDuJ4XRtbRdFQNb/we/OtdIFHQtxVLEeqrMTZYYcQ==
dependencies:
- "@abp/ng.theme.shared" "~3.3.0"
+ "@abp/ng.theme.shared" "~3.3.1"
tslib "^2.0.0"
-"@abp/ng.theme.shared@~3.3.0":
- version "3.3.0"
- resolved "https://registry.yarnpkg.com/@abp/ng.theme.shared/-/ng.theme.shared-3.3.0.tgz#08c6af4ca5877d5cad0a49e002889938b7904c70"
- integrity sha512-2X1O+JAUQWlFmuTWm/bHypHEVN084g6w4cVWUuum7+X2Fk01LVRjnJPwCEIRklS3teFoTX/IbKZXG24wVC6liA==
+"@abp/ng.theme.shared@~3.3.1":
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/@abp/ng.theme.shared/-/ng.theme.shared-3.3.1.tgz#694453546b4e4147a9f89058570dbbef81ef1196"
+ integrity sha512-21wJPa/cNBU3OoLiact4w1sHnQpsm0R5JUD6pRCzp14EyPN3QgOY8JC+/YgGuasKY2xm5pvgbgIdTryy9j4IyQ==
dependencies:
- "@abp/ng.core" "~3.3.0"
+ "@abp/ng.core" "~3.3.1"
"@fortawesome/fontawesome-free" "^5.14.0"
"@ng-bootstrap/ng-bootstrap" "^7.0.0"
"@ngx-validate/core" "^0.0.12"
@@ -109,6 +109,13 @@
dependencies:
just-compare "^1.3.0"
+"@abp/utils@^3.3.1":
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.3.1.tgz#f1759161ac8af10e57b50ac90538a24a51b64ebd"
+ integrity sha512-XEYJYp94zDdln48P7X51wa4v1yg3Q+p0o2DdZxQbZxXChRkCwVC/B0uyMGPs75wkft6xiz965Xr7vcNvMo0nOA==
+ dependencies:
+ just-compare "^1.3.0"
+
"@angular-builders/jest@^10.0.0":
version "10.0.1"
resolved "https://registry.yarnpkg.com/@angular-builders/jest/-/jest-10.0.1.tgz#a1a6fb5d11b5d54c051bdaa2012b5f046371560c"
@@ -2424,6 +2431,15 @@
dependencies:
tslib "^2.0.0"
+"@ngneat/inspector@^1.0.0":
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/@ngneat/inspector/-/inspector-1.0.0.tgz#88e0f645f4292df8e050320e2855ce327c710b64"
+ integrity sha512-FO3iUcFdDEvc2IDgGfF490C3GI9O6dnPQZhBrwA3NNE7bMX0pvC/5fdSQh5wewVqu+1+1NpuT2+3aTjiam3FFQ==
+ dependencies:
+ ace-builds "^1.4.12"
+ tinykeys "^1.1.0"
+ tslib "^2.0.0"
+
"@ngneat/spectator@^5.13.0":
version "5.13.4"
resolved "https://registry.yarnpkg.com/@ngneat/spectator/-/spectator-5.13.4.tgz#e422369e8c8123a096cddf15c1c703339db1424e"
@@ -3189,6 +3205,11 @@ accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7:
mime-types "~2.1.24"
negotiator "0.6.2"
+ace-builds@^1.4.12:
+ version "1.4.12"
+ resolved "https://registry.yarnpkg.com/ace-builds/-/ace-builds-1.4.12.tgz#888efa386e36f4345f40b5233fcc4fe4c588fae7"
+ integrity sha512-G+chJctFPiiLGvs3+/Mly3apXTcfgE45dT5yp12BcWZ1kUs+gm0qd3/fv4gsz6fVag4mM0moHVpjHDIgph6Psg==
+
acorn-globals@^4.3.2:
version "4.3.4"
resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.4.tgz#9fa1926addc11c97308c4e66d7add0d40c3272e7"
@@ -13001,6 +13022,11 @@ tinycolor2@^1.4.1:
resolved "https://registry.yarnpkg.com/tinycolor2/-/tinycolor2-1.4.2.tgz#3f6a4d1071ad07676d7fa472e1fac40a719d8803"
integrity sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA==
+tinykeys@^1.1.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/tinykeys/-/tinykeys-1.1.1.tgz#2535e8b24c8e2be447dd0ee1cff656ef435cd63d"
+ integrity sha512-YEA1TGMlkMabXI0NGddRFti+c1eMO2QP7wefwibSz0Pip8sA+d99yX5Pp7pK7wUeTKmrF4ys4XZVz44YydlTYg==
+
tmp@0.0.30:
version "0.0.30"
resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.30.tgz#72419d4a8be7d6ce75148fd8b324e593a711c2ed"
diff --git a/npm/packs/aspnetcore.mvc.ui/gulp/copy-resources.js b/npm/packs/aspnetcore.mvc.ui/gulp/copy-resources.js
index b20a6efa7d..03b9dc1e4a 100644
--- a/npm/packs/aspnetcore.mvc.ui/gulp/copy-resources.js
+++ b/npm/packs/aspnetcore.mvc.ui/gulp/copy-resources.js
@@ -4,7 +4,9 @@
var gulp = require("gulp"),
merge = require("merge-stream"),
- rimraf = require("rimraf"),
+ fse = require('fs-extra'),
+ glob = require('glob'),
+ micromatch = require('micromatch'),
path = require("path"),
extendObject = require('extend-object');
@@ -41,13 +43,42 @@
return undefined;
}
}
-
- function cleanFiles() {
- if (resourceMapping.clean) {
- for (var i = 0; i < resourceMapping.clean.length; i++) {
- rimraf.sync(replaceAliases(resourceMapping.clean[i]) + '/**/*', { force: true });
- }
- }
+
+ function cleanDirsAndFiles(patterns) {
+ const { dirs, files } = findDirsAndFiles(patterns);
+
+ files.forEach(file => fse.unlinkSync(file));
+ dirs.forEach(dir => {
+ try {
+ fse.rmdirSync(dir);
+ } catch (_) {}
+ });
+ }
+
+ function findDirsAndFiles(patterns) {
+ const dirs = [];
+ const files = [];
+
+ const list = glob.sync('**/*', { dot: true });
+
+ const matches = micromatch(list, normalizeGlob(patterns), {
+ dot: true,
+ });
+
+ matches.forEach(match => {
+ if (!fse.pathExistsSync(match)) return;
+
+ (fse.statSync(match).isDirectory() ? dirs : files).push(match);
+ });
+
+ return { dirs, files };
+ }
+
+ function normalizeGlob(patterns) {
+ return patterns.map(pattern => {
+ const prefix = /\*$/.test(pattern) ? '' : '/**';
+ return replaceAliases(pattern).replace(/(!?)\.\//, '$1') + prefix;
+ });
}
function normalizeResourceMapping(resourcemapping) {
@@ -64,13 +95,7 @@
extendObject(defaultSettings.aliases, resourcemapping.aliases);
resourcemapping.aliases = defaultSettings.aliases;
- if (!resourcemapping.clean) {
- resourcemapping.clean = [];
- }
-
- for (var i = 0; i < defaultSettings.clean.length; ++i) {
- resourcemapping.clean.push(defaultSettings.clean[i]);
- }
+ resourcemapping.clean = resourcemapping.clean || defaultSettings.clean;
return resourcemapping;
}
@@ -112,7 +137,7 @@
rootPath = path;
resourceMapping = normalizeResourceMapping(buildResourceMapping(rootPath));
- cleanFiles();
+ cleanDirsAndFiles(resourceMapping.clean);
var tasks = [];
diff --git a/npm/packs/aspnetcore.mvc.ui/package-lock.json b/npm/packs/aspnetcore.mvc.ui/package-lock.json
new file mode 100644
index 0000000000..18c07aa98d
--- /dev/null
+++ b/npm/packs/aspnetcore.mvc.ui/package-lock.json
@@ -0,0 +1,2857 @@
+{
+ "name": "@abp/aspnetcore.mvc.ui",
+ "version": "3.3.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "ansi-colors": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
+ "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA=="
+ },
+ "ansi-gray": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz",
+ "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=",
+ "requires": {
+ "ansi-wrap": "0.1.0"
+ }
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
+ },
+ "ansi-wrap": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz",
+ "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768="
+ },
+ "anymatch": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
+ "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
+ "requires": {
+ "micromatch": "^3.1.4",
+ "normalize-path": "^2.1.1"
+ },
+ "dependencies": {
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.3.1",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "extglob": "^2.0.4",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^6.0.2",
+ "nanomatch": "^1.2.9",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.2"
+ }
+ },
+ "normalize-path": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
+ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+ "requires": {
+ "remove-trailing-separator": "^1.0.1"
+ }
+ }
+ }
+ },
+ "append-buffer": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz",
+ "integrity": "sha1-2CIM9GYIFSXv6lBhTz3mUU36WPE=",
+ "requires": {
+ "buffer-equal": "^1.0.0"
+ }
+ },
+ "archy": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz",
+ "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA="
+ },
+ "arr-diff": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA="
+ },
+ "arr-filter": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/arr-filter/-/arr-filter-1.1.2.tgz",
+ "integrity": "sha1-Q/3d0JHo7xGqTEXZzcGOLf8XEe4=",
+ "requires": {
+ "make-iterator": "^1.0.0"
+ }
+ },
+ "arr-flatten": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
+ "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg=="
+ },
+ "arr-map": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/arr-map/-/arr-map-2.0.2.tgz",
+ "integrity": "sha1-Onc0X/wc814qkYJWAfnljy4kysQ=",
+ "requires": {
+ "make-iterator": "^1.0.0"
+ }
+ },
+ "arr-union": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ="
+ },
+ "array-each": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz",
+ "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8="
+ },
+ "array-initial": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/array-initial/-/array-initial-1.1.0.tgz",
+ "integrity": "sha1-L6dLJnOTccOUe9enrcc74zSz15U=",
+ "requires": {
+ "array-slice": "^1.0.0",
+ "is-number": "^4.0.0"
+ },
+ "dependencies": {
+ "is-number": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
+ "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ=="
+ }
+ }
+ },
+ "array-last": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/array-last/-/array-last-1.3.0.tgz",
+ "integrity": "sha512-eOCut5rXlI6aCOS7Z7kCplKRKyiFQ6dHFBem4PwlwKeNFk2/XxTrhRh5T9PyaEWGy/NHTZWbY+nsZlNFJu9rYg==",
+ "requires": {
+ "is-number": "^4.0.0"
+ },
+ "dependencies": {
+ "is-number": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
+ "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ=="
+ }
+ }
+ },
+ "array-slice": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz",
+ "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w=="
+ },
+ "array-sort": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/array-sort/-/array-sort-1.0.0.tgz",
+ "integrity": "sha512-ihLeJkonmdiAsD7vpgN3CRcx2J2S0TiYW+IS/5zHBI7mKUq3ySvBdzzBfD236ubDBQFiiyG3SWCPc+msQ9KoYg==",
+ "requires": {
+ "default-compare": "^1.0.0",
+ "get-value": "^2.0.6",
+ "kind-of": "^5.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw=="
+ }
+ }
+ },
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg="
+ },
+ "assign-symbols": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c="
+ },
+ "async-done": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/async-done/-/async-done-1.3.2.tgz",
+ "integrity": "sha512-uYkTP8dw2og1tu1nmza1n1CMW0qb8gWWlwqMmLb7MhBVs4BXrFziT6HXUd+/RlRA/i4H9AkofYloUbs1fwMqlw==",
+ "requires": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.2",
+ "process-nextick-args": "^2.0.0",
+ "stream-exhaust": "^1.0.1"
+ }
+ },
+ "async-each": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz",
+ "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ=="
+ },
+ "async-settle": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/async-settle/-/async-settle-1.0.0.tgz",
+ "integrity": "sha1-HQqRS7Aldb7IqPOnTlCA9yssDGs=",
+ "requires": {
+ "async-done": "^1.2.2"
+ }
+ },
+ "at-least-node": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz",
+ "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg=="
+ },
+ "atob": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
+ "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg=="
+ },
+ "bach": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/bach/-/bach-1.2.0.tgz",
+ "integrity": "sha1-Szzpa/JxNPeaG0FKUcFONMO9mIA=",
+ "requires": {
+ "arr-filter": "^1.1.1",
+ "arr-flatten": "^1.0.1",
+ "arr-map": "^2.0.0",
+ "array-each": "^1.0.0",
+ "array-initial": "^1.0.0",
+ "array-last": "^1.1.1",
+ "async-done": "^1.2.2",
+ "async-settle": "^1.0.0",
+ "now-and-later": "^2.0.0"
+ }
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
+ },
+ "base": {
+ "version": "0.11.2",
+ "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
+ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
+ "requires": {
+ "cache-base": "^1.0.1",
+ "class-utils": "^0.3.5",
+ "component-emitter": "^1.2.1",
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.1",
+ "mixin-deep": "^1.2.0",
+ "pascalcase": "^0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ }
+ }
+ },
+ "binary-extensions": {
+ "version": "1.13.1",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz",
+ "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw=="
+ },
+ "bindings": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz",
+ "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==",
+ "optional": true,
+ "requires": {
+ "file-uri-to-path": "1.0.0"
+ }
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "requires": {
+ "arr-flatten": "^1.1.0",
+ "array-unique": "^0.3.2",
+ "extend-shallow": "^2.0.1",
+ "fill-range": "^4.0.0",
+ "isobject": "^3.0.1",
+ "repeat-element": "^1.1.2",
+ "snapdragon": "^0.8.1",
+ "snapdragon-node": "^2.0.1",
+ "split-string": "^3.0.2",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "buffer-equal": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz",
+ "integrity": "sha1-WWFrSYME1Var1GaWayLu2j7KX74="
+ },
+ "buffer-from": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
+ "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A=="
+ },
+ "cache-base": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
+ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
+ "requires": {
+ "collection-visit": "^1.0.0",
+ "component-emitter": "^1.2.1",
+ "get-value": "^2.0.6",
+ "has-value": "^1.0.0",
+ "isobject": "^3.0.1",
+ "set-value": "^2.0.0",
+ "to-object-path": "^0.3.0",
+ "union-value": "^1.0.0",
+ "unset-value": "^1.0.0"
+ }
+ },
+ "call-bind": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.0.tgz",
+ "integrity": "sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w==",
+ "requires": {
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.0.0"
+ }
+ },
+ "camelcase": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz",
+ "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo="
+ },
+ "chokidar": {
+ "version": "2.1.8",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz",
+ "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==",
+ "requires": {
+ "anymatch": "^2.0.0",
+ "async-each": "^1.0.1",
+ "braces": "^2.3.2",
+ "fsevents": "^1.2.7",
+ "glob-parent": "^3.1.0",
+ "inherits": "^2.0.3",
+ "is-binary-path": "^1.0.0",
+ "is-glob": "^4.0.0",
+ "normalize-path": "^3.0.0",
+ "path-is-absolute": "^1.0.0",
+ "readdirp": "^2.2.1",
+ "upath": "^1.1.1"
+ }
+ },
+ "class-utils": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
+ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
+ "requires": {
+ "arr-union": "^3.1.0",
+ "define-property": "^0.2.5",
+ "isobject": "^3.0.0",
+ "static-extend": "^0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ }
+ }
+ },
+ "cliui": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
+ "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
+ "requires": {
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1",
+ "wrap-ansi": "^2.0.0"
+ }
+ },
+ "clone": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
+ "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18="
+ },
+ "clone-buffer": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz",
+ "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg="
+ },
+ "clone-stats": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz",
+ "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA="
+ },
+ "cloneable-readable": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz",
+ "integrity": "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==",
+ "requires": {
+ "inherits": "^2.0.1",
+ "process-nextick-args": "^2.0.0",
+ "readable-stream": "^2.3.5"
+ }
+ },
+ "code-point-at": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
+ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c="
+ },
+ "collection-map": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/collection-map/-/collection-map-1.0.0.tgz",
+ "integrity": "sha1-rqDwb40mx4DCt1SUOFVEsiVa8Yw=",
+ "requires": {
+ "arr-map": "^2.0.2",
+ "for-own": "^1.0.0",
+ "make-iterator": "^1.0.0"
+ }
+ },
+ "collection-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
+ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+ "requires": {
+ "map-visit": "^1.0.0",
+ "object-visit": "^1.0.0"
+ }
+ },
+ "color-support": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
+ "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg=="
+ },
+ "component-emitter": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
+ "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg=="
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
+ },
+ "concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ }
+ },
+ "convert-source-map": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz",
+ "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==",
+ "requires": {
+ "safe-buffer": "~5.1.1"
+ }
+ },
+ "copy-descriptor": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
+ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40="
+ },
+ "copy-props": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/copy-props/-/copy-props-2.0.4.tgz",
+ "integrity": "sha512-7cjuUME+p+S3HZlbllgsn2CDwS+5eCCX16qBgNC4jgSTf49qR1VKy/Zhl400m0IQXl/bPGEVqncgUUMjrr4s8A==",
+ "requires": {
+ "each-props": "^1.3.0",
+ "is-plain-object": "^2.0.1"
+ }
+ },
+ "core-util-is": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
+ },
+ "d": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz",
+ "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==",
+ "requires": {
+ "es5-ext": "^0.10.50",
+ "type": "^1.0.1"
+ }
+ },
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
+ },
+ "decode-uri-component": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
+ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU="
+ },
+ "default-compare": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/default-compare/-/default-compare-1.0.0.tgz",
+ "integrity": "sha512-QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ==",
+ "requires": {
+ "kind-of": "^5.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw=="
+ }
+ }
+ },
+ "default-resolution": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/default-resolution/-/default-resolution-2.0.0.tgz",
+ "integrity": "sha1-vLgrqnKtebQmp2cy8aga1t8m1oQ="
+ },
+ "define-properties": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
+ "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
+ "requires": {
+ "object-keys": "^1.0.12"
+ }
+ },
+ "define-property": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+ "requires": {
+ "is-descriptor": "^1.0.2",
+ "isobject": "^3.0.1"
+ },
+ "dependencies": {
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ }
+ }
+ },
+ "detect-file": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz",
+ "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc="
+ },
+ "duplexify": {
+ "version": "3.7.1",
+ "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz",
+ "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==",
+ "requires": {
+ "end-of-stream": "^1.0.0",
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.0.0",
+ "stream-shift": "^1.0.0"
+ }
+ },
+ "each-props": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/each-props/-/each-props-1.3.2.tgz",
+ "integrity": "sha512-vV0Hem3zAGkJAyU7JSjixeU66rwdynTAa1vofCrSA5fEln+m67Az9CcnkVD776/fsN/UjIWmBDoNRS6t6G9RfA==",
+ "requires": {
+ "is-plain-object": "^2.0.1",
+ "object.defaults": "^1.1.0"
+ }
+ },
+ "end-of-stream": {
+ "version": "1.4.4",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
+ "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
+ "requires": {
+ "once": "^1.4.0"
+ }
+ },
+ "error-ex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+ "requires": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
+ "es5-ext": {
+ "version": "0.10.53",
+ "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz",
+ "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==",
+ "requires": {
+ "es6-iterator": "~2.0.3",
+ "es6-symbol": "~3.1.3",
+ "next-tick": "~1.0.0"
+ }
+ },
+ "es6-iterator": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz",
+ "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=",
+ "requires": {
+ "d": "1",
+ "es5-ext": "^0.10.35",
+ "es6-symbol": "^3.1.1"
+ }
+ },
+ "es6-symbol": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz",
+ "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==",
+ "requires": {
+ "d": "^1.0.1",
+ "ext": "^1.1.2"
+ }
+ },
+ "es6-weak-map": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz",
+ "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==",
+ "requires": {
+ "d": "1",
+ "es5-ext": "^0.10.46",
+ "es6-iterator": "^2.0.3",
+ "es6-symbol": "^3.1.1"
+ }
+ },
+ "expand-brackets": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+ "requires": {
+ "debug": "^2.3.3",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "posix-character-classes": "^0.1.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "expand-tilde": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz",
+ "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=",
+ "requires": {
+ "homedir-polyfill": "^1.0.1"
+ }
+ },
+ "ext": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz",
+ "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==",
+ "requires": {
+ "type": "^2.0.0"
+ },
+ "dependencies": {
+ "type": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/type/-/type-2.1.0.tgz",
+ "integrity": "sha512-G9absDWvhAWCV2gmF1zKud3OyC61nZDwWvBL2DApaVFogI07CprggiQAOOjvp2NRjYWFzPyu7vwtDrQFq8jeSA=="
+ }
+ }
+ },
+ "extend": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
+ },
+ "extend-object": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/extend-object/-/extend-object-1.0.0.tgz",
+ "integrity": "sha1-QlFPhAFdE1bK9Rh5ad+yvBvaCCM="
+ },
+ "extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "requires": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ }
+ }
+ },
+ "extglob": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "requires": {
+ "array-unique": "^0.3.2",
+ "define-property": "^1.0.0",
+ "expand-brackets": "^2.1.4",
+ "extend-shallow": "^2.0.1",
+ "fragment-cache": "^0.2.1",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ }
+ }
+ },
+ "fancy-log": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz",
+ "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==",
+ "requires": {
+ "ansi-gray": "^0.1.1",
+ "color-support": "^1.1.3",
+ "parse-node-version": "^1.0.0",
+ "time-stamp": "^1.0.0"
+ }
+ },
+ "fast-levenshtein": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-1.1.4.tgz",
+ "integrity": "sha1-5qdUzI8V5YmHqpy9J69m/W9OWvk="
+ },
+ "file-uri-to-path": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
+ "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==",
+ "optional": true
+ },
+ "fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1",
+ "to-regex-range": "^2.1.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "find-up": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
+ "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
+ "requires": {
+ "path-exists": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ }
+ },
+ "findup-sync": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz",
+ "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==",
+ "requires": {
+ "detect-file": "^1.0.0",
+ "is-glob": "^4.0.0",
+ "micromatch": "^3.0.4",
+ "resolve-dir": "^1.0.1"
+ },
+ "dependencies": {
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.3.1",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "extglob": "^2.0.4",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^6.0.2",
+ "nanomatch": "^1.2.9",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.2"
+ }
+ }
+ }
+ },
+ "fined": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz",
+ "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==",
+ "requires": {
+ "expand-tilde": "^2.0.2",
+ "is-plain-object": "^2.0.3",
+ "object.defaults": "^1.1.0",
+ "object.pick": "^1.2.0",
+ "parse-filepath": "^1.0.1"
+ }
+ },
+ "flagged-respawn": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz",
+ "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q=="
+ },
+ "flush-write-stream": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz",
+ "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==",
+ "requires": {
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.3.6"
+ }
+ },
+ "for-in": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA="
+ },
+ "for-own": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz",
+ "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=",
+ "requires": {
+ "for-in": "^1.0.1"
+ }
+ },
+ "fragment-cache": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
+ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+ "requires": {
+ "map-cache": "^0.2.2"
+ }
+ },
+ "fs-extra": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz",
+ "integrity": "sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==",
+ "requires": {
+ "at-least-node": "^1.0.0",
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^6.0.1",
+ "universalify": "^1.0.0"
+ }
+ },
+ "fs-mkdirp-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz",
+ "integrity": "sha1-C3gV/DIBxqaeFNuYzgmMFpNSWes=",
+ "requires": {
+ "graceful-fs": "^4.1.11",
+ "through2": "^2.0.3"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
+ },
+ "fsevents": {
+ "version": "1.2.13",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz",
+ "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==",
+ "optional": true,
+ "requires": {
+ "bindings": "^1.5.0",
+ "nan": "^2.12.1"
+ }
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
+ },
+ "get-caller-file": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz",
+ "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w=="
+ },
+ "get-intrinsic": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.0.1.tgz",
+ "integrity": "sha512-ZnWP+AmS1VUaLgTRy47+zKtjTxz+0xMpx3I52i+aalBK1QP19ggLF3Db89KJX7kjfOfP2eoa01qc++GwPgufPg==",
+ "requires": {
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.1"
+ }
+ },
+ "get-value": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
+ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg="
+ },
+ "glob": {
+ "version": "7.1.6",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
+ "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "glob-parent": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
+ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+ "requires": {
+ "is-glob": "^3.1.0",
+ "path-dirname": "^1.0.0"
+ },
+ "dependencies": {
+ "is-glob": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "requires": {
+ "is-extglob": "^2.1.0"
+ }
+ }
+ }
+ },
+ "glob-stream": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz",
+ "integrity": "sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ=",
+ "requires": {
+ "extend": "^3.0.0",
+ "glob": "^7.1.1",
+ "glob-parent": "^3.1.0",
+ "is-negated-glob": "^1.0.0",
+ "ordered-read-streams": "^1.0.0",
+ "pumpify": "^1.3.5",
+ "readable-stream": "^2.1.5",
+ "remove-trailing-separator": "^1.0.1",
+ "to-absolute-glob": "^2.0.0",
+ "unique-stream": "^2.0.2"
+ }
+ },
+ "glob-watcher": {
+ "version": "5.0.5",
+ "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-5.0.5.tgz",
+ "integrity": "sha512-zOZgGGEHPklZNjZQaZ9f41i7F2YwE+tS5ZHrDhbBCk3stwahn5vQxnFmBJZHoYdusR6R1bLSXeGUy/BhctwKzw==",
+ "requires": {
+ "anymatch": "^2.0.0",
+ "async-done": "^1.2.0",
+ "chokidar": "^2.0.0",
+ "is-negated-glob": "^1.0.0",
+ "just-debounce": "^1.0.0",
+ "normalize-path": "^3.0.0",
+ "object.defaults": "^1.1.0"
+ }
+ },
+ "global-modules": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz",
+ "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==",
+ "requires": {
+ "global-prefix": "^1.0.1",
+ "is-windows": "^1.0.1",
+ "resolve-dir": "^1.0.0"
+ }
+ },
+ "global-prefix": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz",
+ "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=",
+ "requires": {
+ "expand-tilde": "^2.0.2",
+ "homedir-polyfill": "^1.0.1",
+ "ini": "^1.3.4",
+ "is-windows": "^1.0.1",
+ "which": "^1.2.14"
+ }
+ },
+ "glogg": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.2.tgz",
+ "integrity": "sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA==",
+ "requires": {
+ "sparkles": "^1.0.0"
+ }
+ },
+ "graceful-fs": {
+ "version": "4.2.4",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz",
+ "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw=="
+ },
+ "gulp": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/gulp/-/gulp-4.0.2.tgz",
+ "integrity": "sha512-dvEs27SCZt2ibF29xYgmnwwCYZxdxhQ/+LFWlbAW8y7jt68L/65402Lz3+CKy0Ov4rOs+NERmDq7YlZaDqUIfA==",
+ "requires": {
+ "glob-watcher": "^5.0.3",
+ "gulp-cli": "^2.2.0",
+ "undertaker": "^1.2.1",
+ "vinyl-fs": "^3.0.0"
+ },
+ "dependencies": {
+ "ansi-colors": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz",
+ "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==",
+ "requires": {
+ "ansi-wrap": "^0.1.0"
+ }
+ },
+ "gulp-cli": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-2.3.0.tgz",
+ "integrity": "sha512-zzGBl5fHo0EKSXsHzjspp3y5CONegCm8ErO5Qh0UzFzk2y4tMvzLWhoDokADbarfZRL2pGpRp7yt6gfJX4ph7A==",
+ "requires": {
+ "ansi-colors": "^1.0.1",
+ "archy": "^1.0.0",
+ "array-sort": "^1.0.0",
+ "color-support": "^1.1.3",
+ "concat-stream": "^1.6.0",
+ "copy-props": "^2.0.1",
+ "fancy-log": "^1.3.2",
+ "gulplog": "^1.0.0",
+ "interpret": "^1.4.0",
+ "isobject": "^3.0.1",
+ "liftoff": "^3.1.0",
+ "matchdep": "^2.0.0",
+ "mute-stdout": "^1.0.0",
+ "pretty-hrtime": "^1.0.0",
+ "replace-homedir": "^1.0.0",
+ "semver-greatest-satisfied-range": "^1.1.0",
+ "v8flags": "^3.2.0",
+ "yargs": "^7.1.0"
+ }
+ }
+ }
+ },
+ "gulplog": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz",
+ "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=",
+ "requires": {
+ "glogg": "^1.0.0"
+ }
+ },
+ "has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
+ "has-symbols": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz",
+ "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg=="
+ },
+ "has-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
+ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
+ "requires": {
+ "get-value": "^2.0.6",
+ "has-values": "^1.0.0",
+ "isobject": "^3.0.0"
+ }
+ },
+ "has-values": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
+ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
+ "requires": {
+ "is-number": "^3.0.0",
+ "kind-of": "^4.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "homedir-polyfill": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz",
+ "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==",
+ "requires": {
+ "parse-passwd": "^1.0.0"
+ }
+ },
+ "hosted-git-info": {
+ "version": "2.8.8",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz",
+ "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg=="
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ },
+ "ini": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
+ "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw=="
+ },
+ "interpret": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz",
+ "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA=="
+ },
+ "invert-kv": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
+ "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY="
+ },
+ "is-absolute": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz",
+ "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==",
+ "requires": {
+ "is-relative": "^1.0.0",
+ "is-windows": "^1.0.1"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0="
+ },
+ "is-binary-path": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
+ "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
+ "requires": {
+ "binary-extensions": "^1.0.0"
+ }
+ },
+ "is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
+ },
+ "is-core-module": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.0.0.tgz",
+ "integrity": "sha512-jq1AH6C8MuteOoBPwkxHafmByhL9j5q4OaPGdbuD+ZtQJVzH+i6E3BJDQcBA09k57i2Hh2yQbEG8yObZ0jdlWw==",
+ "requires": {
+ "has": "^1.0.3"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "requires": {
+ "is-accessor-descriptor": "^0.1.6",
+ "is-data-descriptor": "^0.1.4",
+ "kind-of": "^5.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw=="
+ }
+ }
+ },
+ "is-extendable": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik="
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI="
+ },
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
+ "is-glob": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
+ "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+ },
+ "is-negated-glob": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz",
+ "integrity": "sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI="
+ },
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-plain-object": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "requires": {
+ "isobject": "^3.0.1"
+ }
+ },
+ "is-relative": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz",
+ "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==",
+ "requires": {
+ "is-unc-path": "^1.0.0"
+ }
+ },
+ "is-unc-path": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz",
+ "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==",
+ "requires": {
+ "unc-path-regex": "^0.1.2"
+ }
+ },
+ "is-utf8": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
+ "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI="
+ },
+ "is-valid-glob": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz",
+ "integrity": "sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao="
+ },
+ "is-windows": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA=="
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
+ },
+ "json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE="
+ },
+ "jsonfile": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
+ "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
+ "requires": {
+ "graceful-fs": "^4.1.6",
+ "universalify": "^2.0.0"
+ },
+ "dependencies": {
+ "universalify": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
+ "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ=="
+ }
+ }
+ },
+ "just-debounce": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/just-debounce/-/just-debounce-1.0.0.tgz",
+ "integrity": "sha1-h/zPrv/AtozRnVX2cilD+SnqNeo="
+ },
+ "kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw=="
+ },
+ "last-run": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/last-run/-/last-run-1.1.1.tgz",
+ "integrity": "sha1-RblpQsF7HHnHchmCWbqUO+v4yls=",
+ "requires": {
+ "default-resolution": "^2.0.0",
+ "es6-weak-map": "^2.0.1"
+ }
+ },
+ "lazystream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz",
+ "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=",
+ "requires": {
+ "readable-stream": "^2.0.5"
+ }
+ },
+ "lcid": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
+ "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
+ "requires": {
+ "invert-kv": "^1.0.0"
+ }
+ },
+ "lead": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz",
+ "integrity": "sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI=",
+ "requires": {
+ "flush-write-stream": "^1.0.2"
+ }
+ },
+ "liftoff": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-3.1.0.tgz",
+ "integrity": "sha512-DlIPlJUkCV0Ips2zf2pJP0unEoT1kwYhiiPUGF3s/jtxTCjziNLoiVVh+jqWOWeFi6mmwQ5fNxvAUyPad4Dfog==",
+ "requires": {
+ "extend": "^3.0.0",
+ "findup-sync": "^3.0.0",
+ "fined": "^1.0.1",
+ "flagged-respawn": "^1.0.0",
+ "is-plain-object": "^2.0.4",
+ "object.map": "^1.0.0",
+ "rechoir": "^0.6.2",
+ "resolve": "^1.1.7"
+ }
+ },
+ "load-json-file": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
+ "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "parse-json": "^2.2.0",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0",
+ "strip-bom": "^2.0.0"
+ }
+ },
+ "make-iterator": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz",
+ "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==",
+ "requires": {
+ "kind-of": "^6.0.2"
+ }
+ },
+ "map-cache": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8="
+ },
+ "map-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
+ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
+ "requires": {
+ "object-visit": "^1.0.0"
+ }
+ },
+ "matchdep": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/matchdep/-/matchdep-2.0.0.tgz",
+ "integrity": "sha1-xvNINKDY28OzfCfui7yyfHd1WC4=",
+ "requires": {
+ "findup-sync": "^2.0.0",
+ "micromatch": "^3.0.4",
+ "resolve": "^1.4.0",
+ "stack-trace": "0.0.10"
+ },
+ "dependencies": {
+ "findup-sync": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz",
+ "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=",
+ "requires": {
+ "detect-file": "^1.0.0",
+ "is-glob": "^3.1.0",
+ "micromatch": "^3.0.4",
+ "resolve-dir": "^1.0.1"
+ }
+ },
+ "is-glob": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "requires": {
+ "is-extglob": "^2.1.0"
+ }
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.3.1",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "extglob": "^2.0.4",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^6.0.2",
+ "nanomatch": "^1.2.9",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.2"
+ }
+ }
+ }
+ },
+ "merge-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
+ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w=="
+ },
+ "micromatch": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz",
+ "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==",
+ "requires": {
+ "braces": "^3.0.1",
+ "picomatch": "^2.0.5"
+ },
+ "dependencies": {
+ "braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "requires": {
+ "fill-range": "^7.0.1"
+ }
+ },
+ "fill-range": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "requires": {
+ "to-regex-range": "^5.0.1"
+ }
+ },
+ "is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="
+ },
+ "to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "requires": {
+ "is-number": "^7.0.0"
+ }
+ }
+ }
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "mixin-deep": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
+ "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==",
+ "requires": {
+ "for-in": "^1.0.2",
+ "is-extendable": "^1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ }
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ },
+ "mute-stdout": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/mute-stdout/-/mute-stdout-1.0.1.tgz",
+ "integrity": "sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg=="
+ },
+ "nan": {
+ "version": "2.14.2",
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz",
+ "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==",
+ "optional": true
+ },
+ "nanomatch": {
+ "version": "1.2.13",
+ "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
+ "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "fragment-cache": "^0.2.1",
+ "is-windows": "^1.0.2",
+ "kind-of": "^6.0.2",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ }
+ },
+ "next-tick": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz",
+ "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw="
+ },
+ "normalize-package-data": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
+ "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
+ "requires": {
+ "hosted-git-info": "^2.1.4",
+ "resolve": "^1.10.0",
+ "semver": "2 || 3 || 4 || 5",
+ "validate-npm-package-license": "^3.0.1"
+ }
+ },
+ "normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="
+ },
+ "now-and-later": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz",
+ "integrity": "sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==",
+ "requires": {
+ "once": "^1.3.2"
+ }
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0="
+ },
+ "object-copy": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
+ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
+ "requires": {
+ "copy-descriptor": "^0.1.0",
+ "define-property": "^0.2.5",
+ "kind-of": "^3.0.3"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "object-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="
+ },
+ "object-visit": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
+ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
+ "requires": {
+ "isobject": "^3.0.0"
+ }
+ },
+ "object.assign": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz",
+ "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==",
+ "requires": {
+ "call-bind": "^1.0.0",
+ "define-properties": "^1.1.3",
+ "has-symbols": "^1.0.1",
+ "object-keys": "^1.1.1"
+ }
+ },
+ "object.defaults": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz",
+ "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=",
+ "requires": {
+ "array-each": "^1.0.1",
+ "array-slice": "^1.0.0",
+ "for-own": "^1.0.0",
+ "isobject": "^3.0.0"
+ }
+ },
+ "object.map": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz",
+ "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=",
+ "requires": {
+ "for-own": "^1.0.0",
+ "make-iterator": "^1.0.0"
+ }
+ },
+ "object.pick": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
+ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+ "requires": {
+ "isobject": "^3.0.1"
+ }
+ },
+ "object.reduce": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object.reduce/-/object.reduce-1.0.1.tgz",
+ "integrity": "sha1-b+NI8qx/oPlcpiEiZZkJaCW7A60=",
+ "requires": {
+ "for-own": "^1.0.0",
+ "make-iterator": "^1.0.0"
+ }
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "ordered-read-streams": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz",
+ "integrity": "sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4=",
+ "requires": {
+ "readable-stream": "^2.0.1"
+ }
+ },
+ "os-locale": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz",
+ "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=",
+ "requires": {
+ "lcid": "^1.0.0"
+ }
+ },
+ "parse-filepath": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz",
+ "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=",
+ "requires": {
+ "is-absolute": "^1.0.0",
+ "map-cache": "^0.2.0",
+ "path-root": "^0.1.1"
+ }
+ },
+ "parse-json": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
+ "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
+ "requires": {
+ "error-ex": "^1.2.0"
+ }
+ },
+ "parse-node-version": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz",
+ "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA=="
+ },
+ "parse-passwd": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz",
+ "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY="
+ },
+ "pascalcase": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
+ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ="
+ },
+ "path": {
+ "version": "0.12.7",
+ "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz",
+ "integrity": "sha1-1NwqUGxM4hl+tIHr/NWzbAFAsQ8=",
+ "requires": {
+ "process": "^0.11.1",
+ "util": "^0.10.3"
+ }
+ },
+ "path-dirname": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
+ "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA="
+ },
+ "path-exists": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
+ "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
+ "requires": {
+ "pinkie-promise": "^2.0.0"
+ }
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
+ },
+ "path-parse": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
+ "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw=="
+ },
+ "path-root": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz",
+ "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=",
+ "requires": {
+ "path-root-regex": "^0.1.0"
+ }
+ },
+ "path-root-regex": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz",
+ "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0="
+ },
+ "path-type": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
+ "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ }
+ },
+ "picomatch": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz",
+ "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg=="
+ },
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw="
+ },
+ "pinkie": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
+ "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA="
+ },
+ "pinkie-promise": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
+ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
+ "requires": {
+ "pinkie": "^2.0.0"
+ }
+ },
+ "posix-character-classes": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
+ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs="
+ },
+ "pretty-hrtime": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz",
+ "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE="
+ },
+ "process": {
+ "version": "0.11.10",
+ "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
+ "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI="
+ },
+ "process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
+ },
+ "pump": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz",
+ "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==",
+ "requires": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ },
+ "pumpify": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz",
+ "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==",
+ "requires": {
+ "duplexify": "^3.6.0",
+ "inherits": "^2.0.3",
+ "pump": "^2.0.0"
+ }
+ },
+ "read-pkg": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
+ "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
+ "requires": {
+ "load-json-file": "^1.0.0",
+ "normalize-package-data": "^2.3.2",
+ "path-type": "^1.0.0"
+ }
+ },
+ "read-pkg-up": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
+ "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
+ "requires": {
+ "find-up": "^1.0.0",
+ "read-pkg": "^1.0.0"
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "readdirp": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz",
+ "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==",
+ "requires": {
+ "graceful-fs": "^4.1.11",
+ "micromatch": "^3.1.10",
+ "readable-stream": "^2.0.2"
+ },
+ "dependencies": {
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.3.1",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "extglob": "^2.0.4",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^6.0.2",
+ "nanomatch": "^1.2.9",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.2"
+ }
+ }
+ }
+ },
+ "rechoir": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
+ "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=",
+ "requires": {
+ "resolve": "^1.1.6"
+ }
+ },
+ "regex-not": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
+ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
+ "requires": {
+ "extend-shallow": "^3.0.2",
+ "safe-regex": "^1.1.0"
+ }
+ },
+ "remove-bom-buffer": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz",
+ "integrity": "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==",
+ "requires": {
+ "is-buffer": "^1.1.5",
+ "is-utf8": "^0.2.1"
+ }
+ },
+ "remove-bom-stream": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz",
+ "integrity": "sha1-BfGlk/FuQuH7kOv1nejlaVJflSM=",
+ "requires": {
+ "remove-bom-buffer": "^3.0.0",
+ "safe-buffer": "^5.1.0",
+ "through2": "^2.0.3"
+ }
+ },
+ "remove-trailing-separator": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
+ "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8="
+ },
+ "repeat-element": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz",
+ "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g=="
+ },
+ "repeat-string": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc="
+ },
+ "replace-ext": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz",
+ "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw=="
+ },
+ "replace-homedir": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/replace-homedir/-/replace-homedir-1.0.0.tgz",
+ "integrity": "sha1-6H9tUTuSjd6AgmDBK+f+xv9ueYw=",
+ "requires": {
+ "homedir-polyfill": "^1.0.1",
+ "is-absolute": "^1.0.0",
+ "remove-trailing-separator": "^1.1.0"
+ }
+ },
+ "require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I="
+ },
+ "require-main-filename": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
+ "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE="
+ },
+ "resolve": {
+ "version": "1.18.1",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.18.1.tgz",
+ "integrity": "sha512-lDfCPaMKfOJXjy0dPayzPdF1phampNWr3qFCjAu+rw/qbQmr5jWH5xN2hwh9QKfw9E5v4hwV7A+jrCmL8yjjqA==",
+ "requires": {
+ "is-core-module": "^2.0.0",
+ "path-parse": "^1.0.6"
+ }
+ },
+ "resolve-dir": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz",
+ "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=",
+ "requires": {
+ "expand-tilde": "^2.0.0",
+ "global-modules": "^1.0.0"
+ }
+ },
+ "resolve-options": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz",
+ "integrity": "sha1-MrueOcBtZzONyTeMDW1gdFZq0TE=",
+ "requires": {
+ "value-or-function": "^3.0.0"
+ }
+ },
+ "resolve-url": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
+ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo="
+ },
+ "ret": {
+ "version": "0.1.15",
+ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
+ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg=="
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "safe-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
+ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
+ "requires": {
+ "ret": "~0.1.10"
+ }
+ },
+ "semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
+ },
+ "semver-greatest-satisfied-range": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.1.0.tgz",
+ "integrity": "sha1-E+jCZYq5aRywzXEJMkAoDTb3els=",
+ "requires": {
+ "sver-compat": "^1.5.0"
+ }
+ },
+ "set-blocking": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
+ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
+ },
+ "set-value": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
+ "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==",
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-extendable": "^0.1.1",
+ "is-plain-object": "^2.0.3",
+ "split-string": "^3.0.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "snapdragon": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
+ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
+ "requires": {
+ "base": "^0.11.1",
+ "debug": "^2.2.0",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "map-cache": "^0.2.2",
+ "source-map": "^0.5.6",
+ "source-map-resolve": "^0.5.0",
+ "use": "^3.1.0"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "snapdragon-node": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
+ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
+ "requires": {
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.0",
+ "snapdragon-util": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ }
+ }
+ },
+ "snapdragon-util": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
+ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
+ "requires": {
+ "kind-of": "^3.2.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+ },
+ "source-map-resolve": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz",
+ "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==",
+ "requires": {
+ "atob": "^2.1.2",
+ "decode-uri-component": "^0.2.0",
+ "resolve-url": "^0.2.1",
+ "source-map-url": "^0.4.0",
+ "urix": "^0.1.0"
+ }
+ },
+ "source-map-url": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
+ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM="
+ },
+ "sparkles": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz",
+ "integrity": "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw=="
+ },
+ "spdx-correct": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz",
+ "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==",
+ "requires": {
+ "spdx-expression-parse": "^3.0.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-exceptions": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz",
+ "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A=="
+ },
+ "spdx-expression-parse": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
+ "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
+ "requires": {
+ "spdx-exceptions": "^2.1.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-license-ids": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.6.tgz",
+ "integrity": "sha512-+orQK83kyMva3WyPf59k1+Y525csj5JejicWut55zeTWANuN17qSiSLUXWtzHeNWORSvT7GLDJ/E/XiIWoXBTw=="
+ },
+ "split-string": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
+ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
+ "requires": {
+ "extend-shallow": "^3.0.0"
+ }
+ },
+ "stack-trace": {
+ "version": "0.0.10",
+ "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
+ "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA="
+ },
+ "static-extend": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
+ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
+ "requires": {
+ "define-property": "^0.2.5",
+ "object-copy": "^0.1.0"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ }
+ }
+ },
+ "stream-exhaust": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/stream-exhaust/-/stream-exhaust-1.0.2.tgz",
+ "integrity": "sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw=="
+ },
+ "stream-shift": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz",
+ "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ=="
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "requires": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "strip-bom": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
+ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
+ "requires": {
+ "is-utf8": "^0.2.0"
+ }
+ },
+ "sver-compat": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/sver-compat/-/sver-compat-1.5.0.tgz",
+ "integrity": "sha1-PPh9/rTQe0o/FIJ7wYaz/QxkXNg=",
+ "requires": {
+ "es6-iterator": "^2.0.1",
+ "es6-symbol": "^3.1.1"
+ }
+ },
+ "through2": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
+ "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
+ "requires": {
+ "readable-stream": "~2.3.6",
+ "xtend": "~4.0.1"
+ }
+ },
+ "through2-filter": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz",
+ "integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==",
+ "requires": {
+ "through2": "~2.0.0",
+ "xtend": "~4.0.0"
+ }
+ },
+ "time-stamp": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz",
+ "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM="
+ },
+ "to-absolute-glob": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz",
+ "integrity": "sha1-GGX0PZ50sIItufFFt4z/fQ98hJs=",
+ "requires": {
+ "is-absolute": "^1.0.0",
+ "is-negated-glob": "^1.0.0"
+ }
+ },
+ "to-object-path": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
+ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "to-regex": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
+ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
+ "requires": {
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "regex-not": "^1.0.2",
+ "safe-regex": "^1.1.0"
+ }
+ },
+ "to-regex-range": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+ "requires": {
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1"
+ }
+ },
+ "to-through": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz",
+ "integrity": "sha1-/JKtq6ByZHvAtn1rA2ZKoZUJOvY=",
+ "requires": {
+ "through2": "^2.0.3"
+ }
+ },
+ "type": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz",
+ "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg=="
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c="
+ },
+ "unc-path-regex": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz",
+ "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo="
+ },
+ "undertaker": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/undertaker/-/undertaker-1.3.0.tgz",
+ "integrity": "sha512-/RXwi5m/Mu3H6IHQGww3GNt1PNXlbeCuclF2QYR14L/2CHPz3DFZkvB5hZ0N/QUkiXWCACML2jXViIQEQc2MLg==",
+ "requires": {
+ "arr-flatten": "^1.0.1",
+ "arr-map": "^2.0.0",
+ "bach": "^1.0.0",
+ "collection-map": "^1.0.0",
+ "es6-weak-map": "^2.0.1",
+ "fast-levenshtein": "^1.0.0",
+ "last-run": "^1.1.0",
+ "object.defaults": "^1.0.0",
+ "object.reduce": "^1.0.0",
+ "undertaker-registry": "^1.0.0"
+ }
+ },
+ "undertaker-registry": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/undertaker-registry/-/undertaker-registry-1.0.1.tgz",
+ "integrity": "sha1-XkvaMI5KiirlhPm5pDWaSZglzFA="
+ },
+ "union-value": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
+ "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==",
+ "requires": {
+ "arr-union": "^3.1.0",
+ "get-value": "^2.0.6",
+ "is-extendable": "^0.1.1",
+ "set-value": "^2.0.1"
+ }
+ },
+ "unique-stream": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz",
+ "integrity": "sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==",
+ "requires": {
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "through2-filter": "^3.0.0"
+ }
+ },
+ "universalify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz",
+ "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug=="
+ },
+ "unset-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
+ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
+ "requires": {
+ "has-value": "^0.3.1",
+ "isobject": "^3.0.0"
+ },
+ "dependencies": {
+ "has-value": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
+ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
+ "requires": {
+ "get-value": "^2.0.3",
+ "has-values": "^0.1.4",
+ "isobject": "^2.0.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ }
+ }
+ },
+ "has-values": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
+ "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E="
+ }
+ }
+ },
+ "upath": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz",
+ "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg=="
+ },
+ "urix": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
+ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI="
+ },
+ "use": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
+ "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ=="
+ },
+ "util": {
+ "version": "0.10.4",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz",
+ "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==",
+ "requires": {
+ "inherits": "2.0.3"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
+ }
+ }
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
+ },
+ "v8flags": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz",
+ "integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==",
+ "requires": {
+ "homedir-polyfill": "^1.0.1"
+ }
+ },
+ "validate-npm-package-license": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
+ "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
+ "requires": {
+ "spdx-correct": "^3.0.0",
+ "spdx-expression-parse": "^3.0.0"
+ }
+ },
+ "value-or-function": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz",
+ "integrity": "sha1-HCQ6ULWVwb5Up1S/7OhWO5/42BM="
+ },
+ "vinyl": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz",
+ "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==",
+ "requires": {
+ "clone": "^2.1.1",
+ "clone-buffer": "^1.0.0",
+ "clone-stats": "^1.0.0",
+ "cloneable-readable": "^1.0.0",
+ "remove-trailing-separator": "^1.0.1",
+ "replace-ext": "^1.0.0"
+ }
+ },
+ "vinyl-fs": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz",
+ "integrity": "sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==",
+ "requires": {
+ "fs-mkdirp-stream": "^1.0.0",
+ "glob-stream": "^6.1.0",
+ "graceful-fs": "^4.0.0",
+ "is-valid-glob": "^1.0.0",
+ "lazystream": "^1.0.0",
+ "lead": "^1.0.0",
+ "object.assign": "^4.0.4",
+ "pumpify": "^1.3.5",
+ "readable-stream": "^2.3.3",
+ "remove-bom-buffer": "^3.0.0",
+ "remove-bom-stream": "^1.2.0",
+ "resolve-options": "^1.1.0",
+ "through2": "^2.0.0",
+ "to-through": "^2.0.0",
+ "value-or-function": "^3.0.0",
+ "vinyl": "^2.0.0",
+ "vinyl-sourcemap": "^1.1.0"
+ }
+ },
+ "vinyl-sourcemap": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz",
+ "integrity": "sha1-kqgAWTo4cDqM2xHYswCtS+Y7PhY=",
+ "requires": {
+ "append-buffer": "^1.0.2",
+ "convert-source-map": "^1.5.0",
+ "graceful-fs": "^4.1.6",
+ "normalize-path": "^2.1.1",
+ "now-and-later": "^2.0.0",
+ "remove-bom-buffer": "^3.0.0",
+ "vinyl": "^2.0.0"
+ },
+ "dependencies": {
+ "normalize-path": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
+ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+ "requires": {
+ "remove-trailing-separator": "^1.0.1"
+ }
+ }
+ }
+ },
+ "which": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ },
+ "which-module": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz",
+ "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8="
+ },
+ "wrap-ansi": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
+ "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
+ "requires": {
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
+ },
+ "xtend": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
+ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="
+ },
+ "y18n": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
+ "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE="
+ },
+ "yargs": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.1.tgz",
+ "integrity": "sha512-huO4Fr1f9PmiJJdll5kwoS2e4GqzGSsMT3PPMpOwoVkOK8ckqAewMTZyA6LXVQWflleb/Z8oPBEvNsMft0XE+g==",
+ "requires": {
+ "camelcase": "^3.0.0",
+ "cliui": "^3.2.0",
+ "decamelize": "^1.1.1",
+ "get-caller-file": "^1.0.1",
+ "os-locale": "^1.4.0",
+ "read-pkg-up": "^1.0.1",
+ "require-directory": "^2.1.1",
+ "require-main-filename": "^1.0.1",
+ "set-blocking": "^2.0.0",
+ "string-width": "^1.0.2",
+ "which-module": "^1.0.0",
+ "y18n": "^3.2.1",
+ "yargs-parser": "5.0.0-security.0"
+ }
+ },
+ "yargs-parser": {
+ "version": "5.0.0-security.0",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0-security.0.tgz",
+ "integrity": "sha512-T69y4Ps64LNesYxeYGYPvfoMTt/7y1XtfpIslUeK4um+9Hu7hlGoRtaDLvdXb7+/tfq4opVa2HRY5xGip022rQ==",
+ "requires": {
+ "camelcase": "^3.0.0",
+ "object.assign": "^4.1.0"
+ }
+ }
+ }
+}
diff --git a/npm/packs/aspnetcore.mvc.ui/package.json b/npm/packs/aspnetcore.mvc.ui/package.json
index bc9a15759b..6bf20fd283 100644
--- a/npm/packs/aspnetcore.mvc.ui/package.json
+++ b/npm/packs/aspnetcore.mvc.ui/package.json
@@ -7,10 +7,12 @@
"dependencies": {
"ansi-colors": "^4.1.1",
"extend-object": "^1.0.0",
+ "fs-extra": "^9.0.1",
+ "glob": "^7.1.6",
"gulp": "^4.0.2",
"merge-stream": "^2.0.0",
- "path": "^0.12.7",
- "rimraf": "^3.0.2"
+ "micromatch": "^4.0.2",
+ "path": "^0.12.7"
},
"gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431"
}
diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/index.html b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/index.html
index bf8c9d7902..bf47072416 100644
--- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/index.html
+++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/index.html
@@ -7,24 +7,31 @@
MyCompanyName.MyProjectName.Blazor
-
-
+
+
+
+
+
+
Loading...
-
-
+
+
-
-
+
+
+
+
+