diff --git a/.github/ISSUE_TEMPLATE/03_studio.yml b/.github/ISSUE_TEMPLATE/03_studio.yml new file mode 100644 index 0000000000..c6839403d7 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/03_studio.yml @@ -0,0 +1,94 @@ +name: đŸ€  ABP Studio +description: Create a report to help us improve the ABP Studio +labels: [studio] +body: + - type: markdown + attributes: + value: | + We welcome bug reports! This template will help us gather the information we need to start the triage process. + + Please keep in mind that the GitHub issue tracker is not intended as a general support forum, but for reporting **non-security** bugs and feature requests. + If you believe you have an issue that affects the SECURITY of the platform, please do NOT create an issue and instead email your issue details to info@abp.io. + For other types of questions, consider using [StackOverflow](https://stackoverflow.com/questions/tagged/abp). + - type: checkboxes + id: searched + attributes: + label: Is there an existing issue for this? + description: Please search to see if an issue already exists for the bug you encountered or feature request ([abp/issues](https://github.com/abpframework/abp/issues?q=is%3Aopen+is%3Aissue+label%3Astudio)). + options: + - label: I have searched the existing issues + required: true + - type: textarea + id: background + attributes: + label: Description + description: Please share a clear and concise description of the problem. + placeholder: Description + validations: + required: true + - type: markdown + attributes: + value: | + ## Setup + Please provide more information on your ABP Studio setup. + - type: input + id: version + attributes: + label: Version + description: Which version of ABP Studio are you using? + placeholder: Version + validations: + required: true + - type: dropdown + id: Operation-System + attributes: + label: Operation System + description: What is the operation system of the computer? + options: + - Windows (Default) + - Linux + - macOS + - Others + validations: + required: true + - type: textarea + id: solution-config + attributes: + label: Solution Configuration + description: | + If there is an open solution, what are the configurations of the solution? + 🧐 Hint: You can see all the information about your solution from the configuration window, which opens when you right-click on the [solution](https://abp.io/docs/latest/studio/solution-explorer#solution) and click on the `Solution Configuration` button. + placeholder: | + - **Template**: app + - **Created ABP Studio Version**: 0.7.9 + - **Tiered**: No + - **UI Framework**: mvc + - **Theme**: leptonx + - **Theme Style**: system + - **Database Provider**: ef + - **Database Management System**: sqlserver + - **Separate Tenant Schema**: No + - **Mobile Framework**: none + - **Public Website**: No + - **Optional Modules**: + * GDPR + * TextTemplateManagement + * LanguageManagement + * AuditLogging + * SaaS + * OpenIddictAdmin + validations: + required: false + - type: markdown + attributes: + value: | + --- + - type: textarea + id: other-info + attributes: + label: Other information + description: | + If you have an idea where the problem might lie, let us know that here. Please include any pointers to code, relevant changes, or related issues you know of. + placeholder: Other information + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/03_article_request.yml b/.github/ISSUE_TEMPLATE/04_article_request.yml similarity index 100% rename from .github/ISSUE_TEMPLATE/03_article_request.yml rename to .github/ISSUE_TEMPLATE/04_article_request.yml diff --git a/.github/ISSUE_TEMPLATE/04_performance_issue.md b/.github/ISSUE_TEMPLATE/05_performance_issue.md similarity index 100% rename from .github/ISSUE_TEMPLATE/04_performance_issue.md rename to .github/ISSUE_TEMPLATE/05_performance_issue.md diff --git a/.github/ISSUE_TEMPLATE/05_blank_issue.md b/.github/ISSUE_TEMPLATE/06_blank_issue.md similarity index 100% rename from .github/ISSUE_TEMPLATE/05_blank_issue.md rename to .github/ISSUE_TEMPLATE/06_blank_issue.md diff --git a/Directory.Packages.props b/Directory.Packages.props index b43886f7cf..8f741e93b8 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -6,7 +6,7 @@ - + @@ -38,6 +38,7 @@ + diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Account/Localization/Resources/sv.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Account/Localization/Resources/sv.json new file mode 100644 index 0000000000..d5b7e713d9 --- /dev/null +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Account/Localization/Resources/sv.json @@ -0,0 +1,18 @@ +{ + "culture": "sv", + "texts": { + "Account": "ABP-konto - Logga in och registrera dig | ABP.IO", + "Welcome": "VĂ€lkommen", + "UseOneOfTheFollowingLinksToContinue": "AnvĂ€nd nĂ„gon av följande lĂ€nkar för att fortsĂ€tta", + "FrameworkHomePage": "Ramverkets startsida", + "FrameworkDocumentation": "Dokumentation av ramverk", + "OfficialBlog": "Officiell blogg", + "CommercialHomePage": "Kommersiell hemsida", + "CommercialSupportWebSite": "Webbplats för kommersiellt stöd", + "CommunityWebSite": "ABP:s gemensamma webbplats", + "ManageAccount": "Mitt konto | ABP.IO", + "ManageYourProfile": "Hantera din profil", + "ReturnToApplication": "ÅtergĂ„ till ansökan", + "IdentityUserNotAvailable:Deleted": "Den hĂ€r e-postadressen Ă€r inte tillgĂ€nglig. Anledning till detta: Redan raderad." + } +} \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en-GB.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en-GB.json index 2429f52eef..7e2642e88b 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en-GB.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en-GB.json @@ -15,6 +15,7 @@ "Permission:Maintain": "Maintain", "Permission:ClearCaches": "Clear caches", "Permission:Modules": "Modules", + "Permission:UserDownloads": "User Downloads", "Permission:Packages": "Packages", "Permission:Edit": "Edit", "Permission:Delete": "Delete", @@ -32,12 +33,15 @@ "Name": "Name", "DisplayName": "Display name", "ShortDescription": "Short description", + "LongDescription": "Long description", "NameFilter": "Name", "CreationTime": "Creation time", - "IsPro": "Is pro", + "IsPro": "Pro package", "ShowOnModuleList": "Show in module list", "EfCoreConfigureMethodName": "Configure method name", "IsProFilter": "Is pro", + "ShowOnModuleFilter": "Show on module list", + "ShowOnModuleListFilter": "Show on module list", "ApplicationType": "Application type", "Target": "Target", "TargetFilter": "Target", @@ -56,8 +60,10 @@ "Refresh": "Refresh", "NpmPackages": "NPM Packages", "NugetPackages": "Nuget Packages", + "NuGetPackages": "NuGet Packages", "NpmPackageCount": "NPM Package Count", "NugetPackageCount": "Nuget Package Count", + "NuGetPackageCount": "NuGet Package Count", "Module": "Modules", "ModuleInfo": "Module info", "CreateANpmPackage": "Create a NPM package", @@ -102,6 +108,9 @@ "DoYouWantToCreateNewUser": "Do you want to create new user?", "MasterModules": "Master Modules", "OrganizationName": "Organisation name", + "DownloadType": "Download type", + "UserDownloads": "User Downloads", + "AcceptNewsletter": "Accept newsletter", "CreationDate": "Creation date", "LicenseStartDate": "License start date", "LicenseEndDate": "License end date", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json index 76a35b48ff..9fb30d3fda 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json @@ -28,17 +28,21 @@ "Menu:DiscountRequests": "Discount Requests", "NpmPackageDeletionWarningMessage": "This NPM Package will be deleted. Do you confirm that?", "NugetPackageDeletionWarningMessage": "This Nuget Package will be deleted. Do you confirm that?", + "NuGetPackages": "NuGet Packages", "ModuleDeletionWarningMessage": "This Module will be deleted. Do you confirm that?", "Name": "Name", "DisplayName": "Display name", "ShortDescription": "Short description", + "LongDescription": "Long description", "NameFilter": "Name", "CreationTime": "Creation time", - "IsPro": "Is pro", + "IsPro": "Pro package", "IsFreeToActiveLicenseOwners": "Free to license owners", "ShowOnModuleList": "Show on module list", "EfCoreConfigureMethodName": "Configure method name", - "IsProFilter": "Is pro", + "IsProFilter": "Pro package", + "ShowOnModuleFilter": "Show on module list", + "ShowOnModuleListFilter": "Show on module list", "ApplicationType": "Application type", "Target": "Target", "TargetFilter": "Target", @@ -59,6 +63,7 @@ "NugetPackages": "Nuget Packages", "NpmPackageCount": "NPM Package Count", "NugetPackageCount": "Nuget Package Count", + "NuGetPackageCount": "NuGet Package Count", "Module": "Modules", "ModuleInfo": "Module info", "CreateANpmPackage": "Create a NPM package", @@ -120,8 +125,15 @@ "PurchaseOrderNo": "Purchase order no", "QuotationDate": "Quotation date", "CompanyName": "Company name", + "DownloadType": "Download type", + "UserDownloads": "User Downloads", + "AcceptNewsletter": "Accept newsletter", "CompanyAddress": "Company address", "Price": "Price", + "Unknown": "Unknown", + "DddEBook": "Ddd EBook", + "MasteringAbpFrameworkEBook": "Mastering AbpFramework EBook", + "MicroserviceEBook": "Microservice EBook", "DiscountText": "Discount text", "DiscountQuantity": "Discount quantity", "DiscountPrice": "Discount price", @@ -284,6 +296,7 @@ "Menu:Quotation": "Quotation", "Menu:Invoice": "Invoice", "Menu:Quotation/Invoice": "Quotation/Invoice", + "Menu:UserDownloads": "User Downloads", "Menu:PaymentRequests": "Payment Requests", "Permission:PaymentRequests": "Payment Requests", "PaymentRequests": "Payment Requests", @@ -457,7 +470,7 @@ "MoveWaitList": "Move to wait list", "CommunityLinkTitle": "Open on the community website", "CommunityLink": "Link", - "IpAddress": "Ip Address", + "IpAddress": "IP Address", "ReloadFromSource": "Reload From the Source", "ReloadFromSourceConfirmationMessage": "This post will be refreshed from \"{0}\". Do you want to continue?", "UnitPrice": "Unit Price", @@ -566,6 +579,7 @@ "AllowAbpStudioBetaAccess": "Allow ABP Studio Beta Access", "TotalQuestionCanNotBeNullMessage": "Total Question can not be null", "Permission:OrganizationAutoRenewalPayments": "Organization Auto Renewal Payments", + "Permission:UserDownloads": "User Downloads", "Permission:RetryFailedPayments": "Retry Failed Payments", "AutoRenewalIsNotEnabled": "Auto Renewal is not enabled!", "LicenseIsNotExpired": "License is not expired!", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/sv.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/sv.json new file mode 100644 index 0000000000..f6b113895b --- /dev/null +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/sv.json @@ -0,0 +1,640 @@ +{ + "culture": "sv", + "texts": { + "Permission:Organizations": "Organisationer", + "Permission:Manage": "Hantera organisationer", + "Permission:DiscountRequests": "RabattförfrĂ„gningar", + "Permission:DiscountManage": "Hantera rabattförfrĂ„gningar", + "Permission:Disable": "Avaktivera", + "Permission:Enable": "Aktivera", + "Permission:EnableSendEmail": "Aktivera skicka e-post", + "Permission:SendEmail": "Skicka e-post", + "Permission:NpmPackages": "NPM-paket", + "Permission:NugetPackages": "Nuget-paket", + "Permission:Maintenance": "UnderhĂ„ll", + "Permission:Maintain": "BehĂ„lla", + "Permission:ClearCaches": "Rensa cacheminnen", + "Permission:Modules": "Moduler", + "Permission:Packages": "Paket", + "Permission:Edit": "Redigera", + "Permission:Delete": "Radera", + "Permission:Create": "Skapa", + "Permission:Accounting": "Redovisning", + "Permission:Accounting:Quotation": "Offert", + "Permission:Accounting:Invoice": "Faktura", + "Menu:Organizations": "Organisationer", + "Menu:Accounting": "Redovisning", + "Menu:Packages": "Paket", + "Menu:DiscountRequests": "RabattförfrĂ„gningar", + "NpmPackageDeletionWarningMessage": "Detta NPM-paket kommer att raderas. Kan du bekrĂ€fta det?", + "NugetPackageDeletionWarningMessage": "Detta Nuget-paket kommer att raderas. Kan du bekrĂ€fta det?", + "ModuleDeletionWarningMessage": "Denna modul kommer att raderas. Kan du bekrĂ€fta det?", + "Name": "Namn", + "DisplayName": "Visa namn", + "ShortDescription": "Kort beskrivning", + "NameFilter": "Namn", + "CreationTime": "Skapelsetid", + "IsPro": "Är pro", + "IsFreeToActiveLicenseOwners": "Gratis för licensinnehavare", + "ShowOnModuleList": "Visa pĂ„ modullistan", + "EfCoreConfigureMethodName": "Konfigurera metodnamn", + "IsProFilter": "Är pro", + "ApplicationType": "Typ av applikation", + "Target": "MĂ„l", + "TargetFilter": "MĂ„l", + "ModuleClass": "Modul klass", + "NugetPackageTarget.DomainShared": "Delad domĂ€n", + "NugetPackageTarget.Domain": "DomĂ€n", + "NugetPackageTarget.Application": "TillĂ€mpning", + "NugetPackageTarget.ApplicationContracts": "Ansökan Kontrakt", + "NugetPackageTarget.HttpApi": "Http Api", + "NugetPackageTarget.HttpApiClient": "Http Api-klient", + "NugetPackageTarget.Web": "Webb", + "NugetPackageTarget.EntityFrameworkCore": "DeleteAllEntityFramework Core", + "NugetPackageTarget.MongoDB": "MongoDB", + "Edit": "Redigera", + "Delete": "Radera", + "Refresh": "Uppdatera", + "NpmPackages": "NPM-paket", + "NugetPackages": "Nuget-paket", + "NpmPackageCount": "Antal NPM-paket", + "NugetPackageCount": "Antal Nuget-paket", + "Module": "Moduler", + "ModuleInfo": "Modulinformation", + "CreateANpmPackage": "Skapa ett NPM-paket", + "CreateAModule": "Skapa en modul", + "CreateANugetPackage": "Skapa ett Nuget-paket", + "AddNew": "LĂ€gg till ny", + "PackageAlreadyExist{0}": "\"{0}\"-paketet Ă€r redan tillagt.", + "ModuleAlreadyExist{0}": "\"{0}\"-modulen Ă€r redan tillagd.", + "ClearCache": "Rensa cache", + "SuccessfullyCleared": "FramgĂ„ngsrikt rensad", + "Menu:NpmPackages": "NPM-paket", + "Menu:Modules": "Moduler", + "Menu:Maintenance": "UnderhĂ„ll", + "Menu:NugetPackages": "NuGet-paket", + "CreateAnOrganization": "Skapa en organisation", + "Organizations": "Organisationer", + "LongName": "LĂ„ngt namn", + "LicenseType": "Typ av licens", + "MissingLicenseTypeField": "FĂ€ltet för licenstyp Ă€r obligatoriskt!", + "LicenseStartTime": "Licensens starttid", + "LicenseEndTime": "Licensens sluttid", + "AllowedDeveloperCount": "TillĂ„tet antal utvecklare", + "UserNameOrEmailAddress": "AnvĂ€ndarnamn eller e-postadress", + "AddOwner": "LĂ€gg till Ă€gare", + "UserName": "AnvĂ€ndarnamn", + "Email": "E-post", + "Developers": "Utvecklare", + "AddDeveloper": "LĂ€gg till utvecklare", + "Create": "Skapa", + "UserNotFound": "AnvĂ€ndaren hittades inte", + "{0}WillBeRemovedFromDevelopers": "{0} Kommer att tas bort frĂ„n utvecklare, bekrĂ€ftar du?", + "{0}WillBeRemovedFromOwners": "{Kommer att tas bort frĂ„n Ă€garna, bekrĂ€ftar du?", + "{0}WillBeRemovedFromMembers": "{0} Kommer att tas bort frĂ„n medlemmar, bekrĂ€ftar du?", + "Computers": "Datorer", + "UniqueComputerId": "Unikt dator-ID", + "LastSeenDate": "Datum för senaste observation", + "{0}Computer{1}WillBeRemovedFromRecords": "Dator för {0} ({1}) kommer att tas bort frĂ„n register", + "OrganizationDeletionWarningMessage": "Organisationen kommer att raderas", + "DeletingLastOwnerWarningMessage": "En organisation mĂ„ste ha minst en Ă€gare! DĂ€rför kan du inte ta bort den hĂ€r Ă€garen", + "This{0}AlreadyExistInThisOrganization": "Denna {0} finns redan i denna organisation", + "AreYouSureYouWantToDeleteAllComputers": "Är du sĂ€ker pĂ„ att du vill radera alla datorer?", + "DeleteAll": "Radera alla", + "DoYouWantToCreateNewUser": "Vill du skapa en ny anvĂ€ndare?", + "MasterModules": "Master-moduler", + "OrganizationName": "Organisationens namn", + "CreationDate": "Datum för skapande", + "LicenseStartDate": "Licensens startdatum", + "LicenseEndDate": "Licensens slutdatum", + "OrganizationNamePlaceholder": "Organisationens namn...", + "TotalQuestionCountPlaceholder": "Totalt antal frĂ„gor...", + "RemainingQuestionCountPlaceholder": "KvarstĂ„ende frĂ„gor Ă€r...", + "LicenseTypePlaceholder": "Licenstyp...", + "CreationDatePlaceholder": "Datum för skapande...", + "LicenseStartDatePlaceholder": "Licensens startdatum...", + "LicenseEndDatePlaceholder": "Licensens slutdatum...", + "UsernameOrEmail": "AnvĂ€ndarnamn eller e-post", + "UsernameOrEmailPlaceholder": "AnvĂ€ndarnamn eller e-post...", + "Member": "Ledamot", + "PurchaseOrderNo": "Inköpsorder nr", + "QuotationDate": "Datum för offert", + "CompanyName": "Företagets namn", + "CompanyAddress": "Företagets adress", + "Price": "Pris", + "DiscountText": "Rabatt text", + "DiscountQuantity": "Rabatt kvantitet", + "DiscountPrice": "Rabatterat pris", + "Quotation": "Offert", + "ExtraText": "Extra text", + "ExtraAmount": "Extra belopp", + "DownloadQuotation": "Ladda ner offert", + "Invoice": "Faktura", + "TaxNumber": "Skattenummer", + "InvoiceNumber": "Fakturanummer", + "InvoiceDate": "Fakturadatum", + "InvoiceNote": "Fakturanota", + "Quantity": "Kvantitet", + "AddProduct": "LĂ€gg till produkt", + "AddProductWarning": "Du mĂ„ste lĂ€gga till produkt!", + "TotalPrice": "Totalt pris", + "Generate": "Generera", + "MissingQuantityField": "KvantitetsfĂ€ltet Ă€r obligatoriskt!", + "MissingPriceField": "PrisfĂ€ltet Ă€r obligatoriskt!", + "CodeUsageStatus": "Status", + "Country": "Land", + "DeveloperCount": "Antal utvecklare", + "RequestCode": "BegĂ€r kod", + "WebSite": "Webbplats", + "GithubUsername": "AnvĂ€ndarnamn för Github", + "PhoneNumber": "Telefonnummer", + "ProjectDescription": "Projektbeskrivning", + "Referrer": "HĂ€nvisare", + "DiscountRequests": "BegĂ€ran om rabatt", + "Copylink": "Kopiera lĂ€nk", + "Disable": "Avaktivera", + "Enable": "Aktivera", + "EnableSendEmail": "Aktivera skicka e-post", + "SendEmail": "Skicka e-post", + "SuccessfullyDisabled": "FramgĂ„ngsrikt avaktiverad", + "SuccessfullyEnabled": "FramgĂ„ngsrikt aktiverad", + "EmailSent": "Skickad e-post", + "SuccessfullySent": "FramgĂ„ngsrikt skickat", + "SuccessfullyDeleted": "FramgĂ„ngsrikt raderad", + "DiscountRequestDeletionWarningMessage": "BegĂ€ran om rabatt kommer att raderas", + "BusinessType": "Typ av verksamhet", + "TotalQuestionCount": "Totalt antal frĂ„gor", + "RemainingQuestionCount": "Antal Ă„terstĂ„ende frĂ„gor", + "TotalQuestionMustBeGreaterWarningMessage": "TotalQuestionCount mĂ„ste vara större Ă€n RemainingQuestionCount !", + "QuestionCountsMustBeGreaterThanZero": "TotalQuestionCount och RemainingQuestionCount mĂ„ste vara noll eller större Ă€n noll!", + "UnlimitedQuestionCount": "ObegrĂ€nsat antal frĂ„gor", + "Notes": "Anteckningar", + "Menu:Community": "Gemenskap", + "Menu:Posts": "InlĂ€gg", + "Wait": "VĂ€nta", + "Approve": "GodkĂ€nna", + "Reject": "Avvisa", + "Details": "Detaljer", + "Url": "Url", + "Title": "Titel", + "ContentSource": "KĂ€lla för innehĂ„ll", + "Status": "Status", + "ReadPost": "LĂ€s inlĂ€gget", + "PostHasBeenWaiting": "Posten har vĂ€ntat", + "PostHasBeenApproved": "InlĂ€gget har godkĂ€nts", + "PostHasBeenRejected": "InlĂ€gget har avvisats", + "Permission:Community": "Gemenskap", + "Permission:CommunityPost": "Post", + "Link": "Link", + "Enum:ContentSource:0": "Github", + "Enum:ContentSource:1": "Extern", + "Enum:Status:0": "VĂ€ntar pĂ„", + "Enum:Status:1": "Avvisad", + "Enum:Status:2": "GodkĂ€nd", + "Summary": "Sammanfattning", + "AuthorName": "Författarens namn", + "CoverImage": "Omslagsbild", + "RemoveCacheConfirmationMessage": "Är du sĂ€ker pĂ„ att du tar bort cacheminnet för \"{0}\" -posten?", + "SuccessfullyRemoved": "FramgĂ„ngsrikt rensad", + "RemoveCache": "Ta bort cachen", + "Language": "SprĂ„k", + "Optional": "Valfritt", + "CreatePostLanguageInfo": "Det sprĂ„k som inlĂ€gget Ă€r skrivet pĂ„", + "Enum:ContentSource:2": "VideoinlĂ€gg", + "VideoPreview": "Förhandsgranskning av video", + "VideoPreviewErrorMessage": "Angiven video-URL kunde inte hĂ€mtas frĂ„n Youtube. Detta kan orsakas av att videon Ă€r privat eller att den angivna webbadressen inte Ă€r tillgĂ€nglig.", + "DeleteCoverImage": "Ta bort omslagsbild", + "DeleteCoverImageConfirmationMessage": "Är du sĂ€ker att du vill ta bort omslagsbilden för \"{0}\"?", + "DeleteCoverImageSuccessMessage": "Omslagsbilden har raderats framgĂ„ngsrikt", + "PaymentsOf": "Betalningar av", + "ShowPaymentsOfOrganization": "Betalningar", + "Date": "Datum", + "Products": "Produkter", + "TotalAmount": "Totalt belopp", + "Currency": "Valuta", + "Gateway": "Gateway", + "State": "Stat", + "FailReason": "Orsak till misslyckande", + "ReIndexAllPosts": "Återindexera alla inlĂ€gg", + "ReIndexAllPostsConfirmationMessage": "Är du sĂ€ker pĂ„ att du vill indexera om alla inlĂ€gg?", + "SuccessfullyReIndexAllPosts": "Alla inlĂ€gg har framgĂ„ngsrikt indexerats om.", + "Permission:FullSearch": "Fulltextsökning", + "Menu:CliAnalytics": "CLI Analys", + "Menu:Reports": "Dynamiska rapporter", + "TemplateName": "Mallens namn", + "TemplateVersion": "Mallversion", + "DatabaseProvider": "Databasleverantör", + "IsTiered": "Är Tiered", + "ProjectName": "Projektets namn", + "Username": "AnvĂ€ndarens namn", + "Tool": "Verktyg", + "Command": "Kommando", + "UiFramework": "Ramverk för anvĂ€ndargrĂ€nssnitt", + "Options": "Alternativ", + "CliAnalytics": "Cli Analytics", + "Reports": "Dynamiska rapporter", + "Permission:CliAnalyticses": "Cli Analyticses", + "Permission:CliAnalytics": "Cli Analytics", + "Permission:Reports": "Rapporter", + "Search": "Sök", + "ClearFilter": "Rensa filter", + "LicensePrivateKey": "Licens privat nyckel", + "LicensePublicKey": "Licens offentlig nyckel", + "ApiKey": "NuGet API-nyckel", + "ShowInvoiceRequestsOfOrganization": "FakturaförfrĂ„gningar", + "ShowQuestionsOfOrganization": "FrĂ„gor och svar", + "Question": "FrĂ„ga", + "Open": "Öppna", + "Questions": "FrĂ„gor och svar", + "InvoiceRequests": "FakturaförfrĂ„gningar", + "Address": "Adress", + "TaxNo": "Skatt Nej", + "Permission:InvoiceRequest": "FakturabegĂ€ran", + "Permission:Question": "FrĂ„ga", + "AddNoteSuccessMessage": "Not framgĂ„ngsrikt tillagd", + "NameSurname": "Namn Efternamn", + "Note": "Notera", + "Add": "LĂ€gg till", + "ProjectDownloads": "Projektnedladdningar", + "ShowProjectDownloadsOfOrganization": "Projektnedladdningar", + "ShowAuditLogsOfOrganization": "Granskningsloggar", + "Enum:EntityChangeType:0": "Skapad", + "Enum:EntityChangeType:1": "Uppdaterad", + "Enum:EntityChangeType:2": "Borttagen", + "TenantId": "HyresgĂ€st-ID", + "ChangeTime": "Ändra tid", + "EntityTypeFullName": "FullstĂ€ndigt namn pĂ„ entitetstyp", + "AuditLogsFor{0}Organization": "Granskningsloggar för organisationen \"{0}\"", + "Permission:EntityChange": "FörĂ€ndring av enhet", + "Permission:ProjectDownload": "Projekt Ladda ner", + "Permission:PaymentRequest": "BegĂ€ran om betalning", + "CreatorEmailAddress": "E-postadress till skaparen", + "EmailSendDate": "Datum för e-postutskick", + "PaymentRequestsFor{0}Organization": "BetalningsförfrĂ„gningar för \"{0}\" organisation", + "PaymentDetails": "Betalningsinformation", + "PaymentProduct": "Betalning Produkt", + "ProductName": "Produktens namn", + "Code": "Kod", + "GenerateInvoice": "Generera faktura", + "ExportOrganizationsToExcel": "Exportera till Excel", + "ThisExtensionIsNotAllowed": "Denna förlĂ€ngning Ă€r inte tillĂ„ten.", + "TheFileIsTooLarge": "Filen Ă€r för stor!", + "PostDeletionConfirmationMessage": "Är du sĂ€ker pĂ„ att du vill radera det hĂ€r inlĂ€gget?", + "ChooseCoverImage": "VĂ€lj en omslagsbild...", + "Menu:Quotation": "Offert", + "Menu:Invoice": "Faktura", + "Menu:Quotation/Invoice": "Offert/faktura", + "Menu:PaymentRequests": "BetalningsförfrĂ„gningar", + "Permission:PaymentRequests": "BetalningsförfrĂ„gningar", + "PaymentRequests": "BetalningsförfrĂ„gningar", + "Creator": "Skapare", + "ExtraProperties": "Extra egenskaper", + "Organization": "Organisation", + "Waiting": "VĂ€ntar pĂ„", + "Completed": "FĂ€rdigstĂ€lld", + "Failed": "Misslyckades", + "PaymentRequestDeletionWarningMessage": "Denna betalningsbegĂ€ran kommer att raderas. Kan du bekrĂ€fta det?", + "Payment": "Betalning", + "AddPayment": "LĂ€gg till betalning", + "Enum:PurchaseType:1": "Ny licens", + "Enum:PurchaseType:2": "LicensförlĂ€ngning", + "Enum:PurchaseType:3": "Uppgradering av licens", + "Enum:PurchaseType:4": "Ytterligare utvecklare", + "LicenceType": "Typ av licens", + "PurchaseType": "Typ av köp", + "ReceiptNo": "Kvitto nr", + "PaymentTime": "Betalningstid", + "ProductPrice": "Produktens pris", + "AdditionalDeveloper": "Ytterligare utvecklare", + "ThisPaymentHasBeenAlreadyUsed": "Denna betalning har redan anvĂ€nts", + "PaymentTimeCannotBeFutureTime": "Betalningstid kan inte vara en framtida tid!", + "SaveAndDownload": "Spara och ladda ner", + "BillingInfo": "Faktureringsinformation", + "DeleteInvoice": "Ta bort faktura", + "PaymentStateSetTo": "Betalningsstatus satt till {0}", + "ChangeState": "Ändra tillstĂ„nd", + "Permission:TrialLicense": "Trial-licens", + "Menu:TrialLicenses": "PreliminĂ€ra licenser", + "TrialLicenses": "PreliminĂ€ra licenser", + "UserNameFilter": "AnvĂ€ndarnamn", + "TrialLicenseStatusFilter": "Status", + "TrialLicenseStartDateFilter": "Startdatum", + "TrialLicenseEndDateFilter": "Slutdatum", + "FirstName": "Förnamn", + "LastName": "Efternamn", + "StartDate": "Startdatum", + "EndDate": "Slutdatum", + "PurchasedDate": "Inköpsdatum", + "OrganizationDetail": "Organisation Detalj", + "TrialLicenseStatus": "Status för provlicens", + "TrialLicenseDetail": "Trial licens detalj", + "AcceptsMarketingCommunications": "Marknadskommunikation", + "PurposeOfUsage": "Syfte med anvĂ€ndningen", + "CountryName": "Landets namn", + "CompanySize": "Företagets storlek", + "DetailTrialLicense": "Detaljer", + "Requested": "BegĂ€rd", + "Activated": "Aktiverad", + "PurchasedToNormalLicense": "Köpte", + "Expired": "UtgĂ„tt", + "TrialLicenseDeletionWarningMessage": "Är du sĂ€ker pĂ„ att du vill ta bort testlicensen? Testlicens, organisation och supportkonton kommer att raderas!", + "LicenseCategoryFilter": "Licenskategori", + "Permission:SendWelcomeEmail": "Skicka vĂ€lkomstmejl", + "SendWelcomeEmail": "Skicka vĂ€lkomstmejl", + "SendWelcomeEmailWarningMessage": "Är du sĂ€ker pĂ„ att du vill skicka ett vĂ€lkomstmeddelande till organisationens medlemmar?", + "SendWelcomeEmailSuccessMessage": "VĂ€lkomstmejl skickat framgĂ„ngsrikt!", + "Activate": "Aktivera", + "ActivateTrialLicenseWarningMessage": " NĂ€r du aktiverar en testlicens skickas ett vĂ€lkomstmeddelande till anvĂ€ndaren. Vill du aktivera det?", + "ActivateTrialLicenseSuccessMessage": "Aktiverades framgĂ„ngsrikt och vĂ€lkomstmeddelandet skickades till organisationsmedlemmarna.", + "PaymentRequestId": "BetalningsbegĂ€ran Id", + "AdditionalDeveloperCount": "Ytterligare antal utvecklare", + "LicensePrice": "Licenspris", + "PurchaseDate": "Köpdatum", + "IsAbpBookDownloaded": "Mastering ABP Book nedladdad?", + "IsMasteringAbpBookDownloadEnabled": "ABP Book nedladdning aktiverad", + "Permission:Accounting:CustomPaymentLinkGenerator": "Anpassad betalningslĂ€nk", + "CustomPaymentLink": "Anpassad betalningslĂ€nk", + "Menu:CustomPaymentLink": "Anpassad betalningslĂ€nk", + "Amount": "Belopp", + "GenerateCustomPaymentLink": "Generera anpassad betalningslĂ€nk", + "GeneratedPaymentLink": "Genererad betalningslĂ€nk", + "CopyText": "Kopiera text", + "Permission:CommunityEvents": "HĂ€ndelser", + "Menu:Events": "HĂ€ndelser", + "Events": "HĂ€ndelser", + "EventType": "Typ av hĂ€ndelse", + "Number": "Antal", + "RegistrationURL": "URL för registrering", + "URL": "URL", + "EventDeletionConfirmationMessage": "Är du sĂ€ker pĂ„ att du vill ta bort den hĂ€r hĂ€ndelsen?", + "Enum:EventType:0": "Samtal med gemenskapen", + "CreateAnEvent": "Skapa ett evenemang", + "Permission:CommunitySpeakers": "Högtalare", + "CreateASpeaker": "Skapa en högtalare", + "Speakers": "Högtalare", + "Image": "Bild", + "GithubURL": "URL till Github", + "SpeakerDeletionConfirmationMessage": "Är du sĂ€ker att du vill ta bort den hĂ€r högtalaren?", + "Menu:Speakers": "Högtalare", + "ChooseSpeakerImage": "VĂ€lj en högtalarbild...", + "SpeakerImage": "Bild pĂ„ högtalare", + "AddSpeaker": "LĂ€gg till högtalare", + "ShowPurchaseItemsOfOrganizations": "Köp av föremĂ„l", + "Enum:OrganizationPurchaseState:0": "Ej levererad", + "Enum:OrganizationPurchaseState:1": "Levereras", + "PurchaseItems": "Köp av föremĂ„l", + "SuccessfullyUpdated": "FramgĂ„ngsrikt uppdaterad", + "SuccessfullyAdded": "FramgĂ„ngsrikt tillagt", + "PurchaseState": "Status för köp", + "ShowBetweenDayCount": "Visa mellan dagarna", + "PurchaseOrder": "Inköpsorder", + "ShowCreateInvoiceOfOrganization": "Skapa faktura", + "ShowCreateQuotationOfOrganization": "Skapa offert/faktura", + "BookDiscounts": "Boka rabatter", + "Permission:BookDiscount": "Boka rabatt", + "Menu:BookDiscounts": "Boka rabatter", + "BookType": "Typ av bok", + "PurchasePlatform": "Plattform för inköp", + "StartTime": "Starttid", + "EndTime": "Sluttid", + "CreateABookDiscount": "Skapa en bokrabatt", + "BookDiscountDeletionConfirmationMessage": "Är du sĂ€ker pĂ„ att du vill ta bort den hĂ€r bokrabatten?", + "CustomPaymentFlexSwitchDescription": "Med licens", + "AllowFeatureUpgradeOnLicenseExpire": "TillĂ„t uppgradering av funktioner nĂ€r licensen löper ut", + "Deleted{0}": "[Raderad {0}]", + "Tags": "Etiketter", + "SetTagsInfo": "Taggar ska vara kommaseparerade. Exempel: CSharp, Entity Framework", + "RejectTrialLicenseWarningMessage": "Är du sĂ€ker pĂ„ att du vill avvisa denna begĂ€ran om testlicens?", + "ExportToExcel": "Exportera till Excel", + "OverallTotalPrice": "Totalt totalpris", + "OverallDiscountPrice": "Totalt Rabatt Pris", + "OverallDiscountText": "Övergripande rabatt Text", + "SelectReport": "- VĂ€lj rapport", + "NoDataAvailable": "Inga uppgifter tillgĂ€ngliga", + "StatisticsOfCachedContents": "Statistik över cachelagrat NuGet-paketinnehĂ„ll för nuget.abp.io", + "Compact": "Kompakt", + "EditSettings": "Redigera instĂ€llningar", + "CurrentEstimatedSize": "Nuvarande uppskattad storlek", + "CurrentEntryCount": "Aktuellt antal poster", + "TotalHits": "Totalt antal trĂ€ffar", + "TotalMisses": "Totalt antal missar", + "NoResponseFrom": "Inget svar frĂ„n", + "ContentCacheSlidingExpirationByDay": "InnehĂ„llscache glidande utgĂ„ng per dag", + "MaxDaysForCaching": "Max dagar för cachelagring", + "Enabled": "Aktiverad", + "Menu:NugetPackagesContentCache": "NuGet Cache", + "NugetPackagesContentCache": "NuGet Cache för innehĂ„ll", + "SlidingExpritionByDayInfo": "HĂ€mtar eller anger hur lĂ€nge en cache-post kan vara inaktiv (t.ex. inte Ă„tkommen) innan den tas bort. Detta kommer inte att förlĂ€nga postens livstid utöver den absoluta expirationen.", + "MaxDaysForCachingInfo": "HĂ€mtar eller anger en absolut utgĂ„ngstid i förhĂ„llande till nu.", + "CurrentEstimatedSizeInfo": "Anger en uppskattad summa av alla NuGet-pakets innehĂ„llsstorlek som för nĂ€rvarande finns i minnescachen", + "CurrentEntryCountInfo": "Anger antalet instanser som för nĂ€rvarande finns i minnescachen.", + "TotalHitsInfo": "Anger det totala antalet cache-missar. En cachetrĂ€ff intrĂ€ffar nĂ€r en fil begĂ€rs frĂ„n en cache och cachen kan uppfylla denna begĂ€ran.", + "TotalMissesInfo": "Anger det totala antalet trĂ€ffar i cachen. En cachemiss Ă€r nĂ€r cacheminnet inte innehĂ„ller det begĂ€rda innehĂ„llet.", + "Permission:VersionHistory": "Versionshistorik", + "Caches": "Cacher", + "VersionHistories": "Versionshistorik", + "Version": "Version", + "PublishDate": "Publiceringsdatum", + "IsStableVersion": "Stabil version", + "IsActive": "Aktiv", + "NewVersion": "Ny version", + "VersionHistoryDeletionConfirmationMessage": "Är du sĂ€ker pĂ„ att du vill radera den hĂ€r versionen?", + "CreateAbpConsultantLogoInfo": "Maximal filstorlek: 1MB
Filtyper som stöds: jpg, jpeg, png, SVG, WebP", + "UrlCode": "Url-kod", + "Clear": "Klart", + "Permission:AbpConsultant": "ABP Konsult", + "Menu:AbpConsultants": "ABP Konsulter", + "CreateAbpConsultant": "Skapa ABP-konsult", + "UrlCodeIsNotAvailable": "Url-koden anvĂ€nds av en annan ABP-konsult.", + "AbpConsultants": "ABP Konsulter", + "AbpConsultant": "ABP Konsult", + "AbpConsultantEdit": "Edit ABP Konsult", + "AbpConsultantCreate": "Skapa ABP-konsult", + "WhoWeAreItem": "Vilka vi Ă€r Artikel", + "FieldIsRequired": "{0} krĂ€vs.", + "FieldIsNotValid": " {0} Ă€r inte giltig.", + "InterestedLicenseType": "Intresserad licenstyp", + "MoveWaitList": "Flytta till vĂ€ntelista", + "CommunityLinkTitle": "Öppna pĂ„ community-webbplatsen", + "CommunityLink": "Link", + "IpAddress": "Ip-adress", + "ReloadFromSource": "Ladda om frĂ„n kĂ€llan", + "ReloadFromSourceConfirmationMessage": "Detta inlĂ€gg kommer att uppdateras frĂ„n \"{0}\". Vill du fortsĂ€tta?", + "UnitPrice": "Enhetspris", + "OverallDiscountAmount": "Totalt rabattbelopp", + "DiscountAmount": "Diskonteringsbelopp", + "FullChangeHistory": "FullstĂ€ndig Ă€ndringshistorik", + "Permission:RefreshReleaseLogs": "Uppdatera release-loggar", + "ReleaseLogs": "Release Loggar", + "AuthorUserName": "AnvĂ€ndarnamn för författare", + "Type": "Typ", + "TotalDiscount": "Total rabatt", + "SubTotal": "Subtotal", + "TotalDue": "Totalt förfallna", + "QuotationNo": "Offert nr", + "ValidTill": "Giltig till och med", + "QuotationNote": "Citatanteckning", + "QuotationTemplate.Address:": "Adress:", + "QuotationTemplate.VATNo:": "Momsregistreringsnummer", + "QuotationTemplate.Phone:": "Telefon:", + "QuotationTemplate.E-mail:": "E-post:", + "QuotationTemplate.Quotation": "Offert", + "QuotationTemplate.To": "Till", + "QuotationTemplate.Details": "Detaljer", + "QuotationTemplate.QuotationNo:": "Citat #:", + "QuotationTemplate.IssueDate:": "Utgivningsdatum:", + "QuotationTemplate.ValidTill:": "Giltig till:", + "QuotationTemplate.ValidDays": "{0} dagar", + "QuotationTemplate.Description": "Beskrivning", + "QuotationTemplate.UnitPrice": "Enhetspris", + "QuotationTemplate.Qty": "Antal", + "QuotationTemplate.Discount": "Rabatt", + "QuotationTemplate.Total": "Totalt", + "QuotationTemplate.Notes": "Anteckningar", + "QuotationTemplate.SubTotal:": "Sub Total :", + "QuotationTemplate.Tax/VAT:": "Skatt / moms (%{0}) :", + "QuotationTemplate.TotalDiscount:": "Total rabatt :", + "QuotationTemplate.TOTALDUE:": "TOTAL SKULD :", + "QuotationTemplate.BankAccount": "Information om vĂ„rt bankkonto finns pĂ„ {0}.", + "Permission:Raffles": "Lottdragning", + "Permission:Draw": "Dragning", + "Menu:Raffles": "Raffles", + "RaffleIsNotDrawable": "Lottdragning Ă€r inte dragbar", + "WinnerCountMustBeGreaterThanZero": "Antalet vinnare mĂ„ste vara större Ă€n noll", + "FullDescription": "FullstĂ€ndig beskrivning", + "VisibilityStartDate": "Synlighet Startdatum", + "VisibilityEndDate": "Slutdatum för synlighet", + "RaffleDate": "Lottdragning Datum", + "SubscriptionCode": "Prenumerationskod", + "GroupCode": "Gruppkod", + "MaxWinnerCount": "Max antal vinnare", + "ReDraw": "Rita om", + "EditRaffle": "Redigera utlottning", + "Raffles": "Raffles", + "CreateARaffle": "Skapa en utlottning", + "Draw": "Dragning", + "Enum:RaffleStatus:0": "Aktiv", + "Enum:RaffleStatus:1": "NĂ€sta", + "Enum:RaffleStatus:2": "Tidigare", + "DrawDone": "Ritning klar", + "HomePageShowType": "Startsida Visa typ", + "None": "Ingen", + "Card": "Kort", + "Horizontal": "Horisontell", + "Winners": "Vinnare", + "StartDateMustBeLessThanEndDate": "Startdatum mĂ„ste vara mindre Ă€n slutdatum", + "VisibilityStartDateMustBeLessThanVisibilityEndDate": "Startdatum för synlighet mĂ„ste vara mindre Ă€n slutdatum för synlighet", + "StartDateMustBeGreaterThanVisibilityStartDate": "Startdatum mĂ„ste vara större Ă€n startdatum för synlighet", + "EndDateMustBeLessThanVisibilityEndDate": "Slutdatum mĂ„ste vara mindre Ă€n visibilitetens slutdatum", + "DrawnDone": "Ritad Gjord", + "AddColor": "LĂ€gg till fĂ€rg", + "Colors": "FĂ€rger", + "RemoveColor": "Ta bort fĂ€rg", + "MaxColorCountWarning": "Du kan lĂ€gga till upp till {0} fĂ€rger", + "MinColorCountWarning": "Du mĂ„ste lĂ€gga till minst {0} fĂ€rger", + "RaffleDeletionConfirmationMessage": "Är du sĂ€ker pĂ„ att du vill ta bort den hĂ€r utlottningen?", + "CreateRaffle": "Skapa utlottning", + "RemoveImage": "Ta bort bild", + "SavedSuccessfully": "Sparades framgĂ„ngsrikt", + "Menu:CommunityTalks": "Samtal med gemenskapen", + "Menu:Conferences": "Konferenser", + "Menu:OtherLiveEvents": "Andra live-evenemang", + "Menu:SponsoredConferences": "Sponsrade konferenser", + "Logo": "Logotyp", + "Slug": "Snigel", + "CompanyUrl": "Företagets webbadress", + "TalkTitle": "Titel pĂ„ samtal", + "AbstractTopic": "Sammanfattning Ämne", + "Bio": "Bio", + "LinkedIn": "LinkedIn", + "Github": "Github", + "Twitch": "Twitch", + "Youtube": "Youtube", + "Twitter": "Twitter", + "PersonalWebsite": "Personlig webbplats", + "VideoId": "Video Id", + "Order": "BestĂ€llning", + "Image1x1": "Bild 1x1", + "Image16x9": "Bild 16x9", + "Banner": "Banner", + "Speaker": "Högtalare", + "SessionDate": "Datum för session", + "AddSession": "LĂ€gg till session", + "AddSponsor": "LĂ€gg till sponsor", + "SponsorLogo": "Sponsorlogotyp", + "RegistrationUrl": "Url för registrering", + "AllowAbpStudioBetaAccess": "TillĂ„t Ă„tkomst till ABP Studio Beta", + "TotalQuestionCanNotBeNullMessage": "Total frĂ„ga kan inte vara null", + "Permission:OrganizationAutoRenewalPayments": "Betalningar för automatisk förnyelse av organisation", + "Permission:RetryFailedPayments": "Försök pĂ„ nytt med misslyckade betalningar", + "AutoRenewalIsNotEnabled": "Automatisk förnyelse Ă€r inte aktiverad!", + "LicenseIsNotExpired": "Licensen har inte gĂ„tt ut!", + "PaymentNotFound": "Betalning hittades inte!", + "PaymentAlreadyTried": "Betalning redan försökt!", + "PaymentIsNotFailed": "Betalning Ă€r inte misslyckad!", + "OrganizationIdIsNull": "OrganizationId Ă€r null!", + "Menu:AutoRenewals": "Förnyelse av bilar", + "OrganizationAutoRenewalPayments": "Betalningar för automatisk förnyelse av organisation", + "PaymentDate": "Betalningsdag", + "TryCount": "Försök rĂ€kna", + "ErrorMessage": "Felmeddelande", + "ErrorCode": "Felkod", + "CreditCard": "Kreditkort", + "BuyerName": "Köparens namn", + "BuyerSurname": "Köparens efternamn", + "BuyerEmail": "Köparens e-post", + "AutoRenewalStartTime": "Starttid för automatisk förnyelse", + "AutoRenewalEndTime": "Sluttid för automatisk förnyelse", + "AutoRenewalEnabled": "Automatisk förnyelse aktiverad", + "LastAutoRenewalPaymentTime": "Sista betalningstid för automatisk förnyelse", + "OrganizationDoesNotHaveACreditCard": "Organisationen har inte ett kreditkort!", + "OrganizationDoesNotHaveACreditCardInGateway": "Organisationen har inte ett kreditkort i porten!", + "Permission:EditWinners": "Redigera vinnare", + "Permission:ChangeDrawingStatus": "Ändra ritningsstatus", + "Menu:Licenses": "Licensiering", + "OrganizationId": "Organisations-ID", + "RemoveAllWinnersConfirmationMessage": "Är du sĂ€ker pĂ„ att du vill ta bort alla vinnare?", + "AutoRenewals": "Förnyelse av bilar", + "OrganizationHasCreditCard": "Organisationen har kreditkort. VĂ€nligen ta bort kreditkortet först!", + "DisplayName:DontSendEmailForLicenseExpire": "Skicka inte e-post för att licensen löper ut", + "DontSendEmailForLicenseExpire": "Skicka inte e-post för att licensen löper ut", + "SuccessfullyChanged": "FramgĂ„ngsrikt Ă€ndrat", + "WinnerCountMustBeLessThanMaxWinnerCount": "Antalet vinnare mĂ„ste vara mindre Ă€n det maximala antalet vinnare", + "NoChangesDetected": "Inga förĂ€ndringar upptĂ€ckta", + "ProductCount": "ProduktrĂ€kning", + "Actions": "ÅtgĂ€rder", + "CreateInvoice": "Skapa faktura", + "IsVisible": "Synlig", + "Menu:Testimonials": "VittnesmĂ„l", + "TestimonialDeletionConfirmationMessage": "Är du sĂ€ker pĂ„ att du vill ta bort detta vittnesmĂ„l?", + "FullName": "FullstĂ€ndigt namn", + "TestimonialText": "Text i vittnesmĂ„l", + "ExperienceYear": "ErfarenhetsĂ„r", + "Position": "Titel", + "YearsOfExperience": "ErfarenhetsĂ„r", + "AllowedLicenses": "TillĂ„tna licenser", + "AllowedModules": "TillĂ„tna moduler", + "ModuleName": "Modulens namn", + "NonYet": "Inte Ă€nnu", + "Permission:Testimonials": "VittnesmĂ„l", + "SelectCompanySizePlaceholder": "Företagets storlek", + "SelectExperienceYearPlaceholder": "ErfarenhetsĂ„r", + "SelectCountryPlaceholder": "Land", + "DeleteImageConfirmationMessage": "Är du sĂ€ker att du vill ta bort bilden för \"{0}\"?", + "DeleteImageSuccessMessage": "Bilden har raderats framgĂ„ngsrikt", + "DeleteImage": "Ta bort bild", + "NetTerms": "Villkor (dagar)", + "Menu:DynamicReports": "Dynamiska rapporter", + "Menu:Others": "Övriga", + "Menu:Packs&Modules": "Paket & moduler", + "ReleaseCaches": "Frigör cachen", + "Menu:HeroSections": "HjĂ€lte-sektioner", + "HeroSections": "HjĂ€lte-sektioner", + "DynamicReports": "Dynamiska rapporter", + "Menu:ReportsMenu": "Rapporter", + "Permission:HeroSections": "HjĂ€lte-sektioner", + "RedirectLink": "Omdirigera lĂ€nk", + "HeroSectionsDeletionConfirmationMessage": "Är du sĂ€ker pĂ„ att du vill ta bort hjĂ€lteavsnittet?", + "AbpStudioName": "Abp Studio namn" + } +} \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/sv.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/sv.json new file mode 100644 index 0000000000..9bcca4c170 --- /dev/null +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/sv.json @@ -0,0 +1,256 @@ +{ + "culture": "sv", + "texts": { + "Volo.AbpIo.Domain:010004": "Maximalt antal medlemmar uppnĂ„tt!", + "Volo.AbpIo.Domain:010005": "Maximalt antal Ă€gare uppnĂ„tt!", + "Volo.AbpIo.Domain:010006": "Den hĂ€r anvĂ€ndaren Ă€r redan Ă€gare i den hĂ€r organisationen!", + "Volo.AbpIo.Domain:010007": "Den hĂ€r anvĂ€ndaren Ă€r redan en utvecklare i den hĂ€r organisationen!", + "Volo.AbpIo.Domain:010008": "TillĂ„tet antal utvecklare kan inte vara mindre Ă€n nuvarande antal utvecklare!", + "Volo.AbpIo.Domain:010009": "TillĂ„tet antal utvecklare kan inte vara mindre Ă€n 0!", + "Volo.AbpIo.Domain:010010": "Maximalt antal mac-adresser har överskridits!", + "Volo.AbpIo.Domain:010011": "Personlig licens kan inte ha mer Ă€n 1 utvecklare!", + "Volo.AbpIo.Domain:010012": "Licensen kan inte förlĂ€ngas en mĂ„nad efter att licensen har löpt ut!", + "Volo.AbpIo.Domain:020001": "Det gick inte att ta bort detta NPM-paket eftersom \"{NugetPackages}\" Nuget-paket Ă€r beroende av detta paket.", + "Volo.AbpIo.Domain:020002": "Det gick inte att ta bort detta NPM-paket eftersom \"{Moduler}\" Moduler anvĂ€nder detta paket.", + "Volo.AbpIo.Domain:020003": "Det gick inte att ta bort detta NPM-paket eftersom \"{Modules}\" Moduler anvĂ€nder det hĂ€r paketet och \"{NugetPackages}\" Nuget-paket Ă€r beroende av detta paket.", + "Volo.AbpIo.Domain:020004": "Det gick inte att ta bort detta Nuget-paket eftersom \"{Moduler}\" Moduler anvĂ€nder detta paket.", + "Volo.AbpIo.Domain:030000": "Du har redan avslutat din provperiod.", + "Volo.AbpIo.Domain:030001": "Det hĂ€r organisationsnamnet finns redan.", + "Volo.AbpIo.Domain:030002": "Efter aktivering kan du inte Ă€ndra testlicensen till -requested- status!", + "Volo.AbpIo.Domain:030003": "Det finns ingen sĂ„dan status!", + "Volo.AbpIo.Domain:030004": "Status kunde inte Ă€ndras pĂ„ grund av ett ovĂ€ntat fel!", + "Volo.AbpIo.Domain:030005": "Start- och slutdatum kan uppdateras nĂ€r testlicensen Ă€r i statusen -aktiverad!", + "Volo.AbpIo.Domain:030006": "Slutdatumet mĂ„ste vara större Ă€n startdatumet!", + "Volo.AbpIo.Domain:030007": "Denna testlicens har redan aktiverats!", + "Volo.AbpIo.Domain:030008": "Köpdatumet kan endast stĂ€llas in nĂ€r statusen Ă€r -köpt-!", + "Volo.AbpIo.Domain:030009": "AnvĂ€ndaren hittades inte!", + "Volo.AbpIo.Domain:030010": "För att köpa testlicensen mĂ„ste du först aktivera din testlicens!", + "Volo.AbpIo.Domain:030011": "Du kan inte ta bort en testlicens nĂ€r den Ă€r köpt!", + "Volo.AbpIo.Domain:030012": "En anvĂ€ndare har endast rĂ€tt till 1 gratis provperiod. Du har redan anvĂ€nt din testlicens.", + "Volo.AbpIo.Domain:030013": "En anvĂ€ndare med en aktiv licens kan inte starta en testlicens.", + "Volo.AbpIo.Domain:040000": "Telemetri finns redan!", + "Volo.AbpIo.Domain:050000": "Organisationen har kreditkort. Du kan inte ta bort det!", + "Volo.AbpIo.Domain:070000": "Organisationsnamnet fĂ„r endast innehĂ„lla latinska bokstĂ€ver, siffror, punkter och bindestreck!", + "Volo.AbpIo.Domain:070001": "Företagsnamnet fĂ„r endast innehĂ„lla latinska bokstĂ€ver, siffror, punkter, mellanslag och bindestreck!", + "WantToLearn?": "Vill du lĂ€ra dig mer?", + "ReadyToGetStarted?": "Är du redo att komma igĂ„ng?", + "JoinOurCommunity": "GĂ„ med i vĂ„r community", + "GetStartedUpper": "KOM IGÅNG", + "ForkMeOnGitHub": "Fork mig pĂ„ GitHub", + "Features": "Funktioner", + "GetStarted": "Kom igĂ„ng", + "Documents": "Dokument", + "Community": "Gemenskap", + "ContributionGuide": "Bidragsguide", + "Blog": "Blogg", + "Commercial": "Kommersiell", + "MyAccount": "Mitt konto", + "Permission:License": "Licens", + "Permission:UserInfo": "AnvĂ€ndarinformation", + "SeeDocuments": "Se dokument", + "Samples": "Prover", + "Framework": "Ramverk", + "Support": "Stöd", + "FreeDDDBook": "Gratis e-bok om DDD", + "New": "Nya", + "Volo.AbpIo.Domain:020005": "LicensförlĂ€ngningsĂ„ret fĂ„r inte vara lĂ€gre Ă€n {MinExtendLicenseYear} Ă„r och inte högre Ă€n {MaxExtendLicenseYear} Ă„r", + "TrialLicensePeriodHasExpired": "Din testlicensperiod löpte ut för {0} dagar sedan.", + "TrialLicensePeriodWillExpire": "Din testlicensperiod kommer att löpa ut om {0} dagar.", + "TrialLicensePeriodExpireToday": "Din testlicensperiod kommer att löpa ut idag.", + "PurchaseNow": "Köp nu!", + "LatestReleaseLogs": "Senaste versionsloggar", + "RoadMap": "VĂ€gkarta", + "FAQ": "VANLIGA FRÅGOR", + "SourceCode": "KĂ€llkod", + "SeeAllPosts": "Se alla inlĂ€gg", + "Contribute": "Bidra", + "LiveDemo": "Live Demo", + "GetLicense": "Skaffa licens", + "OpenSource": "Öppen kĂ€llkod", + "WebApplication": "Webbapplikation", + "MeetTheABP": "Möt ABP", + "CompleteWebDevelopment": "En komplett webbutveckling", + "Platform": "Plattform", + "ABPDescription": "Ett ramverk med öppen kĂ€llkod för utveckling av webbapplikationer för ASP.NET Core. Det erbjuder en komplett infrastruktur genom att följa bĂ€sta praxis för programvaruutveckling.", + "StrongInfrastructure": "Stark infrastruktur", + "CompleteArchitecture": "Komplett arkitektur", + "DeveloperFocused": "Fokus pĂ„ utvecklare", + "ShareYourExperiences": "Dela dina erfarenheter av ABP-ramverket", + "LatestPosts": "Senaste inlĂ€gg", + "LatestVideos": "Senaste videor", + "Views": "Utsikt", + "LearnLatestNewsAboutABPFramework": "FĂ„ information om hĂ€ndelser i ABP som nya utgĂ„vor, fria kĂ€llor, inlĂ€gg och mycket mer.", + "DeveloperTools": "Verktyg för utvecklare", + "StartupTemplates": "Mallar för nystartade företag", + "ApplicationModules": "Applikationsmoduler", + "UI": "UI", + "Themes": "Teman", + "Premium": "Premium", + "PrivacyPolicy": "Integritetspolicy", + "TermsAndConditions": "Villkor och anvisningar", + "WouldLikeToReceiveMarketingMaterials": "Jag skulle vilja fĂ„ marknadsföringsmaterial som produkterbjudanden och specialerbjudanden.", + "JoinOurMarketingNewsletter": "AnmĂ€l dig till vĂ„rt marknadsföringsnyhetsbrev", + "CommunityPrivacyPolicyConfirmation": "Jag godkĂ€nner de allmĂ€nna villkoren och Privatlivspolicyn.", + "WouldLikeToReceiveNotification": "Jag skulle vilja fĂ„ de senaste nyheterna frĂ„n abp.io webbplatser.", + "CommercialNewsletterConfirmationMessage": "Jag samtycker till Terms & Conditions och Privacy Policy.", + "FreeDDDEBook": "Gratis e-bok om DDD", + "AdditionalServices": "Ytterligare tjĂ€nster", + "Learn": "LĂ€r dig", + "AccountOverview": "Översikt över konton", + "MyOrganizations": "Mina organisationer", + "MySupportQuestions": "Mina frĂ„gor om support", + "MyProfile": "Min profil", + "Logout": "Logga ut", + "Home": "Hem", + "Posts": "InlĂ€gg", + "Videos": "Videor", + "JoinTheABPCommunity": "GĂ„ med i ABP:s gemenskap", + "SubmitYourPost": "Skicka in ditt inlĂ€gg", + "Modules": "Moduler", + "Tools": "Verktyg", + "Pricing": "PrissĂ€ttning", + "ChangeLogs": "Ändra loggar", + "SubscribeToNewsletter": "Prenumerera pĂ„ nyhetsbrevet", + "SubscribeToNewsletterDescription": "FĂ„ information om hĂ€ndelser i ABP som nya utgĂ„vor, fria kĂ€llor, inlĂ€gg och mycket mer.", + "EmailAddress": "E-postadress", + "Subscribe": "Prenumerera", + "WelcomeToABP": "VĂ€lkommen till ABP", + "EULA": "EULA", + "ABPCommercialIntroductionMessage": "Förbyggda applikationsmoduler, avancerade startmallar, verktyg för snabb applikationsutveckling, professionella UI-teman och premiumsupport.", + "MasteringAbpFrameworkEBook": "BehĂ€rskar ABP-ramverket", + "MasteringTheABPFrameworkExplanation": "Mastering ABP Framework e-bok; skriven av skaparen av ABP Framework, hjĂ€lper dig att fĂ„ en fullstĂ€ndig förstĂ„else för ramverket och moderna tekniker för utveckling av webbapplikationer.", + "Speakers": "Högtalare", + "PreviousEvents": "Tidigare hĂ€ndelser", + "WatchTheEvent": "Titta pĂ„ evenemanget", + "RegisterNow": "Registrera dig nu", + "ThereIsNoEvent": "Det finns ingen hĂ€ndelse.", + "Events": "HĂ€ndelser", + "Volo.AbpIo.Domain:080000": "Det finns redan ett inköpsobjekt som heter \"{Namn}\"", + "MasteringAbpFrameworkBook": "Bok: Att bemĂ€stra ABP:s ramverk", + "ABPIO-CommonPreferenceDefinition": "FĂ„ de senaste nyheterna om ABP Platform som nya inlĂ€gg, evenemang och mer.", + "BuiltOn": "Inbyggd", + "AbpFramework": "ABP-ramverk", + "Volo.AbpIo.Domain:080001": "Starttiden fĂ„r inte vara större Ă€n sluttiden", + "Enum:BookType:0": "BehĂ€rskar ABP-ramverket", + "Enum:PurchasePlatform:0": "Amazonas", + "Enum:PurchasePlatform:1": "Förpackningar", + "Copied": "Kopierat!", + "CouldNotCopy": "Kunde inte kopiera!", + "CopyNotSupportByYourBrowser": "Den hĂ€r funktionen fungerar inte i den webblĂ€sare du anvĂ€nder.", + "City": "Stad", + "ZipCode": "Postnummer", + "Address": "Adress", + "Homepage": "Hemsida", + "Year": "År", + "Year_Plural": "År", + "Copyright": "Copyright © {1}", + "DomainDrivenDesign": "DomĂ€nstyrd design", + "CrossCuttingConcerns": "TvĂ€rgĂ„ende angelĂ€genheter", + "AbpCommunity": "ABP Gemenskap", + "Footer_GithubStarCount": "{0} StjĂ€rnor pĂ„ GitHub", + "Footer_NugetDownloadCount": "{Nedladdningar pĂ„ NuGet", + "AbpDescription": "ABP Ă€r ett applikationsramverk med öppen kĂ€llkod som fokuserar pĂ„ AspNet Core-baserad utveckling av webbapplikationer. Upprepa inte dig sjĂ€lv, fokusera pĂ„ din egen affĂ€rskod.", + "Layout_AbpFramework_MetaTitle": "ABP Framework | Ramverk för webbapplikationer med öppen kĂ€llkod för ASP.NET Core", + "CommunityTalks_CountdownDays": "Dagar", + "CommunityTalks_CountdownHours": "Timmar", + "CommunityTalks_CountdownMinutes": "Min", + "CommunityTalks_CountdownSeconds": "Sek", + "SeePreviousEvents": "Se tidigare evenemang", + "CookieConsent_Accept": "Acceptera", + "CookieConsent_Explanation_1": "Vi anvĂ€nder cookies för att ge dig den bĂ€sta upplevelsen pĂ„ vĂ„r webbplats.", + "CookieConsent_Explanation_2": "Om du fortsĂ€tter att surfa samtycker du till vĂ„r Privatpolicy och cookiepolicy..", + "Error_Page_400_Title": "Det uppstod ett problem med att visa den begĂ€rda sidan.", + "Error_Page_400_Description_1": "Vanligtvis betyder det att ett ovĂ€ntat fel intrĂ€ffade nĂ€r vi behandlade din begĂ€ran.", + "Error_Page_400_Description_2": "Om problemet kvarstĂ„r, kontakta oss pĂ„ info@abp.io sĂ„ hjĂ€lper vi dig att komma vidare.", + "GoToHomepage": "GĂ„ till hemsidan", + "Error_Page_404_Title": "Sidan hittades inte!", + "Error_Page_404_Description_1": "Det hĂ€r Ă€r inte den webbsida du letar efter.", + "Error_Page_500_Title": "Det ser ut som om nĂ„got gick fel!", + "Error_Page_500_Description_1": "Vi spĂ„rar dessa fel automatiskt, men om problemet kvarstĂ„r Ă€r du vĂ€lkommen att
kontakta oss. Under tiden kan du prova att uppdatera.", + "Error_Page_500_Description_2": "Kontakta oss pĂ„ info@abp.io.", + "Books": "Böcker", + "ABPDiscordServer": "ABP Discord Server", + "ABPCommunityTalks": "ABP:s samtal med allmĂ€nheten", + "ABPCommunityPosts": "ABP Gemenskap InlĂ€gg", + "BuyAndGetMonths": "KÖP 12 MÅNADER, FÅ 14 MÅNADER!", + "GetYourDeal": "FĂ„ ditt erbjudande", + "BuyOrRenewLicense": "Köp eller förnya licensen nu och fĂ„ 2 extra mĂ„nader!", + "BuyOrRenewLicenseToGetExtra2Months": "Köp eller förnya licens nu och fĂ„ 2 extra mĂ„nader! SKYNDA DIG UPP! ⏰ Sista dag: {0}", + "HurryUp": "SKYNDA PÅ!", + "LastDay": "Sista dagen: {0}", + "BuyNewLicenseBetweenDatesToGetBenefit": "Köp en ny licens mellan {0} och {1} för att fĂ„ förmĂ„nen i extra 2 mĂ„nader!", + "CheckAllCommunityTalks": "Kontrollera alla inlĂ€gg i gemenskapen", + "ReadMore": "LĂ€s mer om", + "ContinueReading": "FortsĂ€tta lĂ€sa", + "Post": "Post", + "ExploreTheContentsCreatedByTheCoreABPTeamAndTheABPCommunity": "Utforska innehĂ„llet som skapats av ABP:s kĂ€rnteam och ABP:s community.", + "WelcomeFallCampaign": "VĂ€lkommen till höstkampanjen!", + "GiveAwayForNewPurchases": "Application Development Classroom Training kommer att ges bort för de nya inköpen!", + "BlackFriday": "BLACK FRIDAY", + "ValidForExistingCustomers": "GĂ€ller Ă€ven för
befintliga kunder!", + "CampaignBetweenDates": "FrÄn {0}
Till {1}", + "SaveUpTo": "Spara Upp till${0}K", + "ImplementingDDD": "Implementering av domÀndriven design", + "ExploreTheEBook": "Utforska e-boken", + "ExploreTheBook": "Utforska boken", + "ConsultantType": "Typ av konsultverksamhet", + "Expert": "ABP Expert", + "Partner": "ABP Partner", + "Industry": "Industri", + "Location": "Plats", + "Contact": "Kontakt", + "Partner_Year": "PartnerskapsÄr", + "Info": "Info", + "SpokenLanguages": "Talade sprÄk", + "SocialMedia": "Sociala medier", + "Activity": "Aktivitet", + "Type": "Typ", + "Contribution": "Bidrag", + "WhoWeAre": "Vilka vi Àr", + "Icons": "Ikoner", + "Url": "Url", + "Icon": "Ikon", + "RecentActivities": "Senaste aktiviteterna", + "SpringCampaign": "VÀlkommen
VÄrens försÀljning!", + "SpringCampaign2": "BegrÀnsat
tidserbjudande!
", + "AboutUs": "Om oss", + "HowItWorks": "Hur fungerar det?", + "ReleaseNotes": "Releaseanteckningar", + "DetailedChangeNotes": "Detaljerade Ă€ndringsanteckningar", + "SeeTrainings": "Se utbildningar", + "NoContent": "Inget innehĂ„ll", + "More": "Mer om", + "WhyABPIOPlatform": "Varför ABP.IO Platform?", + "AbpStudio": "ABP Studio", + "ExtraMonths": "{0}EXTRA MÅNADER", + "RSS": "RSS", + "RSSFeed": "RSS-flöde", + "Articles": "Artiklar", + "Organizations": "Organisationer", + "ManageAccount": "Hantera konto", + "CommunityProfile": "Gemenskapsprofil", + "BlogProfile": "Bloggprofil", + "Tickets": "Tickets", + "Raffles": "Raffles", + "Status": "Status", + "Resources": "Resurser", + "Video Courses": "Videokurser", + "Packages": "Paket", + "Trainings": "Utbildningar", + "MeetTheABPCommunity": "Möt ABP Community", + "DisplayName:CommunityIndexPagePoll": "Community Index Page Poll", + "ReturnOnInvestment": "Avkastning pĂ„ investeringar", + "PromotionalOffers": "Kampanjerbjudanden", + "PromotionalOffersDefinition": "Rabatter, sĂ€songskampanjer etc.", + "EventsDefinition": "Community Talks, webbseminarier, ABP .NET-konferens, etc.", + "ReleaseNotesDefinition": "ABP.IO Plattformsreleaser, nya produkter etc.", + "Newsletter": "Nyhetsbrev", + "NewsletterDefinition": "BlogginlĂ€gg, nyheter om samhĂ€llet etc.", + "OrganizationOverview": "Översikt över organisationen", + "EmailPreferences": "InstĂ€llningar för e-post", + "VideoCourses": "Viktiga videor", + "DoYouAgreePrivacyPolicy": "Genom att klicka pĂ„ Prenumerera-knappen godkĂ€nner du Villkor och bestĂ€mmelser och Privatlivspolicy.", + "AbpConferenceDescription": "ABP Conference Ă€r ett virtuellt evenemang för .NET-utvecklare dĂ€r de kan lĂ€ra sig mer och fĂ„ kontakt med andra.", + "Mobile": "Mobil" + } +} \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Blog/Localization/Resources/sv.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Blog/Localization/Resources/sv.json new file mode 100644 index 0000000000..2ac06f43f8 --- /dev/null +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Blog/Localization/Resources/sv.json @@ -0,0 +1,8 @@ +{ + "culture": "sv", + "texts": { + "AbpTitle": "LĂ€s alla blogginlĂ€gg", + "AbpDescription": "ABP Ă€r ett applikationsramverk med öppen kĂ€llkod som fokuserar pĂ„ AspNet Core-baserad utveckling av webbapplikationer. Upprepa inte dig sjĂ€lv, fokusera pĂ„ din egen affĂ€rskod.", + "AbpDefinition": "ABP-blogg för .NET-utveckling, plattformsoberoende, ASP.NET-applikationsmallar, ABP-relaterade nyheter och mer..." + } +} \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/sv.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/sv.json new file mode 100644 index 0000000000..f6e1184c2d --- /dev/null +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/sv.json @@ -0,0 +1,1215 @@ +{ + "culture": "sv", + "texts": { + "OrganizationManagement": "Organisation och ledning", + "OrganizationList": "Organisationslista", + "Volo.AbpIo.Commercial:010003": "Du Ă€r inte Ă€gare till den hĂ€r organisationen!", + "OrganizationNotFoundMessage": "Ingen organisation hittades!", + "DeveloperCount": "Tilldelade / totala utvecklare", + "QuestionCount": "Kvarvarande / totala frĂ„gor", + "Unlimited": "ObegrĂ€nsad", + "Owners": "Ägare", + "Owner": "Ägare", + "AddMember": "LĂ€gg till medlem", + "AddNewOwner": "LĂ€gg till ny Ă€gare", + "AddNewDeveloper": "LĂ€gg till ny utvecklare", + "UserName": "AnvĂ€ndarnamn", + "Name": "Namn", + "EmailAddress": "E-postadress", + "Developers": "Utvecklare", + "LicenseType": "Typ av licens", + "Manage": "Hantera", + "SetDefault": "StĂ€ll in som standard", + "DefaultOrganization": "Standard", + "StartDate": "Startdatum", + "EndDate": "Slutdatum", + "Modules": "Moduler", + "LicenseExtendMessage": "Slutdatum för din licens förlĂ€ngs till {0}.", + "LicenseUpgradeMessage": "Din licens har uppgraderats till {0}.", + "LicenseExtendAdnUpgradeMessage": "Din licens har förlĂ€ngts till {0} och din licensplan har uppgraderats till {1}.", + "LicenseAddDeveloperMessage": "{0} utvecklare lĂ€ggs till i din licens", + "Volo.AbpIo.Commercial:010004": "Kan inte hitta den angivna anvĂ€ndaren! AnvĂ€ndaren mĂ„ste redan ha registrerats.", + "MyOrganizations": "Mina organisationer", + "ApiKey": "API-nyckel", + "UserNameNotFound": "Det finns ingen anvĂ€ndare med anvĂ€ndarnamnet {0}", + "SuccessfullyAddedToNewsletter": "Tack för att du prenumererar pĂ„ vĂ„rt nyhetsbrev!", + "MyProfile": "Min profil", + "EmailNotValid": "VĂ€nligen ange en giltig e-postadress.", + "JoinOurMarketingNewsletter": "AnmĂ€l dig till vĂ„rt marknadsföringsnyhetsbrev", + "WouldLikeToReceiveMarketingMaterials": "Jag skulle vilja fĂ„ marknadsföringsnyheter som produkterbjudanden och specialerbjudanden.", + "StartUsingYourLicenseNow": "Börja anvĂ€nda din licens nu!", + "WelcomePage": "VĂ€lkomstsida", + "UnsubscriptionExpireEmail": "Avregistrera dig frĂ„n e-postmeddelanden med pĂ„minnelser om licensens utgĂ„ngsdatum", + "UnsubscribeLicenseExpireEmailReminderMessage": "Denna e-postprenumeration innehĂ„ller endast pĂ„minnelser om utgĂ„ngsdatum för din licens.", + "UnsubscribeFromLicenseExpireEmails": "Om du inte vill fĂ„ e-postmeddelanden om utgĂ„ngsdatum för din licens kan du avsluta prenumerationen nĂ€r som helst.", + "Unsubscribe": "Avsluta prenumeration", + "NotOrganizationMember": "Du Ă€r inte medlem i nĂ„gon organisation.", + "UnsubscribeLicenseExpirationEmailSuccessTitle": "FramgĂ„ngsrikt avregistrerad", + "UnsubscribeLicenseExpirationEmailSuccessMessage": "Du kommer inte lĂ€ngre att fĂ„ e-postmeddelanden med pĂ„minnelser om licensens utgĂ„ngsdatum.", + "IndexPageHeroSection": "En komplettwebbutvecklingsplattformbyggd pĂ„ ramverk", + "AbpCommercialShortDescription": "ABP tillhandahĂ„ller förbyggda applikationsmoduler, verktyg för snabb applikationsutveckling, professionella UI-teman, premiumsupport och mycket mer.", + "LiveDemo": "Live Demo", + "LiveDemoLead": "{1} med ditt ABP-konto, {3} till abp.io eller fyll i formulĂ€ret nedan för att skapa en live demo nu", + "ThereIsAlreadyAnAccountWithTheGivenEmailAddress": "Det finns redan ett konto med den angivna e-postadressen: {0}
Du bör logga in med ditt konto för att fortsĂ€tta.", + "GetLicence": "Skaffa licens", + "Application": "TillĂ€mpning", + "StartupTemplates": "Mallar för nystartade företag", + "Startup": "Nystartad verksamhet", + "Templates": "Mallar", + "Developer": "Utvecklare", + "Tools": "Verktyg", + "Premium": "Premium", + "PremiumSupport": "Premium-support", + "PremiumForumSupport": "Premium Forum Support", + "UI": "UI", + "Themes": "Teman", + "JoinOurNewsletter": "AnmĂ€l dig till vĂ„rt nyhetsbrev", + "Send": "Skicka", + "WhatIsABPFramework": "VAD ÄR ABP-RAMVERKET?", + "OpenSourceBaseFramework": "Basramverk med öppen kĂ€llkod", + "ABPFrameworkExplanation": "

ABP kommersiell version Àr baserad pÄ ABP Framework, en öppen kÀllkod och community-driven webbapplikationsram för ASP.NET Core.

ABP Framework ger en utmÀrkt infrastruktur för att skriva underhÄllbar, utdragbar och testbar kod med bÀsta praxis.

Byggd pÄ och integrerad med populÀra verktyg som du redan kÀnner till. LÄg inlÀrningskurva, enkel anpassning, bekvÀm utveckling.

", + "Modular": "ModulÀr", + "MicroserviceCompatible": "Kompatibel med mikrotjÀnster", + "DomainDrivenDesignInfrastructure": "DomÀnstyrd design Infrastruktur", + "MultiTenancy": "Multi-Tenancy", + "DistributedMessaging": "Distribuerad meddelandehantering", + "DynamicProxying": "Dynamisk proxyservering", + "BackgroundJobs": "Bakgrundsjobb", + "AuditLogging": "Loggning av revision", + "BLOBStoring": "BLOB Storing", + "BundlingMinification": "Paketering och minimering", + "AdvancedLocalization": "Avancerad lokalisering", + "ManyMore": "MÄnga fler", + "ExploreTheABPFramework": "Utforska ABP-ramverket", + "WhyUseTheABPCommercial": "Varför anvÀnda ABP-plattformen?", + "WhyUseTheABPCommercialExplanation": "

Att bygga webbapplikationer i företagsklass kan vara komplext och tidskrÀvande.

ABP erbjuder den perfekta basinfrastrukturen som krÀvs för alla moderna ASP.NET Core-baserade lösningar i företagsklass. FrÄn design till driftsÀttning, hela utvecklingscykeln förstÀrks av ABP: s inbyggda funktioner och moduler.

", + "StartupTemplatesShortDescription": "Startup-mallar gör att du kan starta ditt projekt pÄ nÄgra sekunder.", + "UIFrameworksOptions": "Alternativ för ramverk för anvÀndargrÀnssnitt;", + "DatabaseProviderOptions": "Alternativ för databasleverantör;", + "PreBuiltApplicationModules": "Förbyggda applikationsmoduler", + "PreBuiltApplicationModulesShortDescription": "De vanligaste applikationskraven Àr redan utvecklade Ät dig som ÄteranvÀndbara moduler.", + "Account": "Konto", + "Blogging": "Bloggande", + "Identity": "Identitet", + "IdentityServer": "Identitetsserver", + "Saas": "Saas", + "LanguageManagement": "SprÄkhantering", + "TextTemplateManagement": "Hantering av textmallar", + "See All Modules": "SeAllaModuler", + "ABPSuite": "ABP-svit", + "AbpSuiteShortDescription": "ABP Suite Àr ett kompletterande verktyg till ABP-projekt.", + "AbpSuiteExplanation": "Det gör att du kan bygga webbsidor pÄ bara nÄgra minuter. Det Àr ett .NET Core Global-verktyg som kan installeras frÄn kommandoraden. Det kan skapa en ny ABP-lösning och generera CRUD-sidor frÄn databasen till frontend.", + "Details": "Detaljer", + "LeptonTheme": "Lepton tema", + "ProfessionalModernUIThemes": "Professionella, moderna UI-teman", + "LeptonThemeExplanation": "Lepton tillhandahÄller en rad Bootstrap-adminteman som fungerar som en solid grund för alla projekt som krÀver en adminpanel.", + "DefaultTheme": "Standardtema", + "MaterialTheme": "Materialtema", + "Default2Theme": "Standard 2 Tema", + "DarkTheme": "Mörkt tema", + "DarkBlueTheme": "MörkblÄtt tema", + "LightTheme": "Ljus tema", + "ProudToWorkWith": "Stolt över att arbeta med", + "OurConsumers": "Tusentals företag och utvecklare i över 70 lÀnder vÀrlden över förlitar sig pÄ ABP.", + "JoinOurConsumers": "Anslut dig till dem och bygg fantastiska produkter snabbt.", + "AdditionalServicesExplanation": "Behöver du ytterligare eller anpassade tjÀnster? Vi och vÄra partners kan tillhandahÄlla;", + "CustomProjectDevelopment": "Anpassad projektutveckling", + "CustomProjectDevelopmentExplanation": "Dedikerade utvecklare för dina anpassade projekt.", + "PortingExistingProjects": "Portning av befintliga projekt", + "PortingExistingProjectsExplanation": "Migrera dina Àldre projekt till ABP-plattformen.", + "LiveSupport": "Support i realtid", + "LiveSupportExplanation": "FjÀrrsupport i realtid nÀr du behöver det.", + "Training": "Utbildning", + "TrainingExplanation": "Dedikerad utbildning för dina utvecklare.", + "OnBoarding": "Onboarding", + "OnBoardingExplanation": "HjÀlp med att konfigurera dina utvecklings-, CI- och CD-miljöer.", + "PrioritizedTechnicalSupport": "Prioriterad teknisk support", + "PremiumSupportExplanation": "Förutom det stora samhÀllsstödet i ABP-ramverket svarar vÄrt supportteam pÄ tekniska frÄgor och problem frÄn de kommersiella anvÀndarna med hög prioritet.", + "SeeTheSupportOptions": "Kolla in supportalternativen", + "Contact": "Kontakt", + "TellUsWhatYouNeed": "BerÀtta för oss vad du behöver.", + "YourMessage": "Ditt meddelande", + "YourFullName": "Ditt fullstÀndiga namn", + "FirstNameField": "Förnamn", + "LastNameField": "Efternamn", + "EmailField": "E-postadress", + "YourEmailAddress": "Din e-postadress", + "ValidEmailAddressIsRequired": "En giltig e-postadress krÀvs.", + "HowMayWeHelpYou": "Hur kan vi hjÀlpa dig?", + "SendMessage": "Skicka meddelande", + "Success": "FramgÄng", + "WeWillReplyYou": "Vi har mottagit ditt meddelande och kommer att kontakta dig inom kort.", + "GoHome": "GÄ hem", + "CreateLiveDemo": "Skapa live-demo", + "CreateLiveDemoDescription": "NÀr du har skickat in formulÀret kommer du att fÄ ett e-postmeddelande med din demolÀnk.", + "RegisterToTheNewsletter": "AnmÀl dig till nyhetsbrevet för att fÄ information om ABP.IO, inklusive nya releaser etc.", + "EnterYourEmailOrLogin": "Ange din e-postadress för att skapa din demo eller Logga in med ditt befintliga konto.", + "ApplicationTemplate": "Mall för ansökan", + "ApplicationTemplateExplanation": "Application startup template anvÀnds för att skapa en ny webbapplikation.", + "EfCoreProvider": "Entity Framework (Stödjer SQL Server, MySQL, PostgreSQL, Oracle och andra)", + "AlreadyIncludedInTemplateModules": "Följande moduler Àr redan inkluderade och konfigurerade i den hÀr mallen:", + "ApplicationTemplateArchitecture": "Den hÀr applikationsmallen stöder ocksÄ nivÄindelad arkitektur dÀr anvÀndargrÀnssnittslagret, API-lagret och autentiseringstjÀnsten Àr fysiskt Ätskilda.", + "SeeTheGuideOrGoToTheLiveDemo": "Kolla in utvecklarguiden för teknisk information om den hÀr mallen eller gÄ till live-demonstrationen.", + "DeveloperGuide": "Guide för utvecklare", + "ModuleTemplate": "Mall för modul", + "ModuleTemplateExplanation1": "Vill du skapa en modul och ÄteranvÀnda den i olika applikationer? Den hÀr startmallen förbereder allt för att börja skapa en ÄteranvÀndbar applikationsmodul eller en mikrotjÀnst.", + "ModuleTemplateExplanation2": "

Du kan stödja enstaka eller flera anvÀndargrÀnssnittsramverk, enstaka eller flera databasleverantörer för en enda modul. Startmallen Àr konfigurerad för att köra och testa din modul i en minimal applikation utöver infrastrukturen för enhets- och integrationstest.

Se utvecklarguiden för teknisk information om den hÀr mallen.

", + "WithAllStyleOptions": "med alla stilalternativ", + "Demo": "Demo", + "SeeAllModules": "Se alla moduler", + "ABPCLIExplanation": "ABP CLI (Command Line Interface) Àr ett kommandoradsverktyg för att utföra vissa vanliga ÄtgÀrder för ABP-baserade lösningar.", + "ABPSuiteEasilyCURD": "ABP Suite Àr ett verktyg som gör att du enkelt kan skapa CRUD-sidor", + "WeAreHereToHelp": "Vi Àr hÀr för att hjÀlpa", + "BrowseOrAskQuestion": "Du kan blÀddra i vÄra hjÀlpÀmnen eller söka i vanliga frÄgor, eller sÄ kan du stÀlla en frÄga till oss genom att anvÀnda kontaktformulÀret.", + "SearchQuestionPlaceholder": "Sök i vanliga frÄgor och svar", + "WhatIsTheABPCommercial": "Vad Àr ABP?", + "WhatAreDifferencesThanAbpFramework": "Vilka Àr skillnaderna mellan ABP med öppen kÀllkod och den kommersiella versionen av ABP?", + "AbpCommercialMetaTitle": " {0} | ABP", + "AbpCommercialMetaDescription": "En omfattande webbutvecklingsplattform pÄ ABP Framework med förbyggda moduler, startmallar, verktyg för snabb utveckling, proffsiga UI-teman och premiumsupport.", + "ABPCommercialExplanation": "ABP Platform Àr en uppsÀttning premiummoduler, verktyg, teman och tjÀnster som Àr byggda pÄ toppen av open source ABP-ramverket. ABP utvecklas och stöds av samma team som ligger bakom ABP-ramverket.", + "WhatAreDifferencesThanABPFrameworkExplanation": "

ABP-ramverket Àr ett modulÀrt, tematiserbart, mikrotjÀnstkompatibelt ramverk för applikationsutveckling för ASP.NET Core. Det ger en komplett arkitektur och en stark infrastruktur sÄ att du kan fokusera pÄ din egen affÀrskod istÀllet för att upprepa dig sjÀlv för varje nytt projekt. Det Àr baserat pÄ bÀsta praxis för mjukvaruutveckling och populÀra verktyg som du redan kÀnner till.

ABP-ramverket Àr helt gratis, öppen kÀllkod och community-driven. Det ger ocksÄ ett gratis tema och nÄgra förbyggda moduler (t.ex. identitetshantering och hyresgÀsthantering).

<", + "VisitTheFrameworkVSCommercialDocument": "Besök följande lĂ€nk för mer information {1} ", + "ABPCommercialFollowingBenefits": "ABP kommersiell version lĂ€gger till följande fördelar ovanpĂ„ ABP-ramverket:", + "Professional": "Professionell", + "UIThemes": "Teman för anvĂ€ndargrĂ€nssnitt", + "EnterpriseModules": "Enterprise ready, funktionsrika, förbyggda applikationsmoduler (t.ex. hantering av identitetsserver, SaaS-hantering, sprĂ„khantering)", + "ToolingToSupport": "Verktyg för att stödja din utvecklingsproduktivitet (t.ex. ABP Suite)", + "PremiumSupportLink": "Premium Support", + "WhatDoIDownloadABPCommercial": "Vad laddar jag ner nĂ€r jag köper den kommersiella versionen av ABP?", + "CreateUnlimitedSolutions": "NĂ€r du har köpt en ABP Commercial-licens kan du skapa obegrĂ€nsade lösningar som beskrivs i dokumentet GĂ„ igĂ„ng.", + "ABPCommercialSolutionExplanation": "NĂ€r du skapar en ny applikation fĂ„r du en Visual Studio-lösning (en startmall) som baseras pĂ„ dina önskemĂ„l. Den nedladdade lösningen har kommersiella moduler och teman som redan Ă€r installerade och konfigurerade Ă„t dig. Du kan ta bort en förinstallerad modul eller lĂ€gga till en annan modul om du vill. Alla moduler och teman anvĂ€nder NuGet/NPM-paket som standard.", + "StartDevelopWithTutorials": "Den nedladdade lösningen Ă€r vĂ€l arkitekterad och dokumenterad. Du kan börja utveckla din egen företagskod baserad pĂ„ den genom att följa handledningarna.", + "TryTheCommercialDemo": "Du kan prova Live Demo för att se ett exempel pĂ„ en applikation som skapats med hjĂ€lp av ABP-startmallen.", + "HowManyProducts": "Hur mĂ„nga olika produkter/lösningar kan jag bygga med hjĂ€lp av ABP?", + "HowManyProductsExplanation": "Du kan skapa sĂ„ mĂ„nga projekt du vill under din aktiva licensperiod; det finns ingen grĂ€ns! Efter att din licens har löpt ut kan du inte skapa nya projekt, men du kan fortsĂ€tta att utveckla de projekt du har laddat ner och distribuera dem till ett obegrĂ€nsat antal servrar.", + "HowManyDevelopers": "Hur mĂ„nga utvecklare kan arbeta med ABP?", + "HowManyDevelopersExplanation": "ABP-licenser Ă€r per utvecklare. Olika licenstyper har olika grĂ€nser för utvecklare. Du kan dock lĂ€gga till fler utvecklare till vilken licenstyp som helst nĂ€r du behöver. Kolla in sidan Planer och priser för licenstyper, utvecklargrĂ€nser och ytterligare utvecklingskostnader.", + "ChangingLicenseType": "Kan jag uppgradera min licenstyp senare?", + "ChangingLicenseTypeExplanation": "Du kan uppgradera till en högre licens genom att betala mellanskillnaden inom din aktiva licensperiod. NĂ€r du uppgraderar till en högre licensplan fĂ„r du fördelarna med den nya planen, men licensuppgraderingen Ă€ndrar inte licensens utgĂ„ngsdatum. Dessutom kan du ocksĂ„ lĂ€gga till nya utvecklarplatser till din befintliga licens, kolla in \"Hur mĂ„nga utvecklare kan arbeta med ABP?\" VANLIGA FRÅGOR.", + "LicenseExtendUpgradeDiff": "Vad Ă€r skillnaden mellan licensförlĂ€ngning och uppgradering?", + "LicenseExtendUpgradeDiffExplanation": "FörlĂ€ngning: Genom att förlĂ€nga/förnya din licens kommer du att fortsĂ€tta att fĂ„ premiumsupport och fĂ„ större eller mindre uppdateringar för modulerna och teman. Dessutom kommer du att kunna fortsĂ€tta skapa nya projekt. Och du kommer fortfarande att kunna anvĂ€nda ABP Suite, vilket pĂ„skyndar din utveckling. NĂ€r du förlĂ€nger din licens lĂ€ggs 1 Ă„r till licensens utgĂ„ngsdatum.
Uppgradering: Genom att uppgradera din licens kommer du att befordras till en högre licensplan, vilket gör att du kan fÄ ytterligare fördelar. Kolla in jÀmförelsetabellen för licenser för att se skillnaderna mellan licensplanerna. NÀr du uppgraderar Àndras dÀremot inte licensens utgÄngsdatum! För att förlÀnga licensens slutdatum mÄste du förlÀnga din licens.", + "LicenseRenewalCost": "Vad Àr kostnaden för licensförnyelse efter 1 Är?", + "LicenseRenewalCostExplanation": "Priset för förnyelse (förlÀngning) av standard Team License Àr ${0}, standard Business License Àr ${1} och standard Enterprise License Àr ${2}. Om du redan Àr kund, logga in pÄ ditt konto för att granska den aktuella förnyelseprissÀttningen.", + "HowDoIRenewMyLicense": "Hur förnyar jag min licens?", + "HowDoIRenewMyLicenseExplanation": "Du kan förnya din licens genom att navigera till organisationshanteringssidan. För att dra nytta av vÄra rabatterade priser för tidig förnyelse, se till att du förnyar innan din licens löper ut. Oroa dig inte för att du inte vet nÀr din möjlighet till tidig förnyelse stÀngs; du kommer att fÄ 3 pÄminnelse-e-postmeddelanden innan din prenumeration löper ut. Vi skickar dem 30 dagar, 7 dagar och 1 dag före utgÄngen.", + "IsSourceCodeIncluded": "Omfattar min licens kÀllkoden för pro-modulerna och teman?", + "IsSourceCodeIncludedExplanation1": "Beror pÄ vilken licenstyp du har köpt:", + "IsSourceCodeIncludedExplanation2": "Team: Din lösning anvÀnder moduler och teman som NuGet- och NPM-paket. Den inkluderar inte deras kÀllkod. PÄ sÄ sÀtt kan du enkelt uppgradera dessa moduler och teman nÀr en ny version Àr tillgÀnglig. Du kan dock inte fÄ kÀllkoden för dessa moduler och teman.", + "IsSourceCodeIncludedExplanation3": "Business/Enterprise: Utöver Team-licensen kan du ladda ner kÀllkoden för alla moduler eller teman du behöver. Du kan till och med ta bort NuGet/NPM-paketreferenserna för en viss modul och lÀgga till dess kÀllkod direkt i din lösning för att Àndra den helt.", + "IsSourceCodeIncludedExplanation4": "

Att inkludera kÀllkoden för en modul i din lösning ger dig maximal frihet att anpassa den modulen. Det kommer dock inte att vara möjligt att automatiskt uppgradera modulen nÀr en ny version slÀpps.

Ingen av licenserna inkluderar kÀllkoden för ABP Suite och ABP Studio, vilket Àr externa verktyg som genererar kod Ät dig och hjÀlper din utveckling.

Kolla in sidan Planer och priser för andra skillnader mellan licenstyperna.

<", + "ChangingDevelopers": "Kan jag Àndra de registrerade utvecklarna för min organisation i framtiden?", + "ChangingDevelopersExplanation": "Förutom att lÀgga till nya utvecklare till din licens kan du ocksÄ Àndra befintliga utvecklare (du kan ta bort en utvecklare och lÀgga till en ny pÄ samma plats) utan nÄgon extra kostnad.", + "WhatHappensWhenLicenseEnds": "Vad hÀnder nÀr min licensperiod upphör?", + "WhatHappensWhenLicenseEndsExplanation1": "ABP-licensen Àr en perpetuell licens. NÀr din licens löper ut kan du fortsÀtta att utveckla ditt projekt. Och du Àr inte skyldig att förnya din licens. Din licens levereras med en ettÄrig uppdaterings- och supportplan direkt ur lÄdan. För att fortsÀtta fÄ nya funktioner, prestandaförbÀttringar, buggfixar, support och fortsÀtta anvÀnda ABP Suite mÄste du förnya din licens. NÀr din licens löper ut;", + "WhatHappensWhenLicenseEndsExplanation2": "Du kan inte skapa nya lösningar med hjÀlp av den kommersiella versionen av ABP, men du kan fortsÀtta att utveckla dina befintliga applikationer för alltid.", + "WhatHappensWhenLicenseEndsExplanation3": "Du kommer att kunna fÄ uppdateringar för modulerna och teman inom din MINOR-version (utom RC- eller Preview-versioner). Om du t.ex. anvÀnder v3.2.0 av en modul kan du fortfarande fÄ uppdateringar för v3.2.x (v3.2.1, v3.2.5... etc.) av den modulen. Men du kan inte fÄ uppdateringar för nÀsta större eller mindre version (som v3.3.0, v3.3.3, 4.x.x.. etc.). Till exempel, nÀr din licens löpte ut, den senaste versionen var v4.4.3, och senare publicerade den bÄde 4.4.4-versionen och 4.5.0-versionen, skulle du kunna komma Ät v4.4.X men du skulle inte komma Ät v4.5.X.", + "WhatHappensWhenLicenseEndsExplanation4": "Du kan inte installera nya moduler och teman som lÀggs till i ABP:s kommersiella plattform efter att din licens har upphört.", + "WhatHappensWhenLicenseEndsExplanation5": "Du kan inte anvÀnda ABP Suite.", + "WhatHappensWhenLicenseEndsExplanation6": "Du kan inte fÄ premium support lÀngre.", + "WhatHappensWhenLicenseEndsExplanation7": "Du kan förlÀnga (förnya) din licens om du vill fortsÀtta att fÄ dessa förmÄner. Om du förlÀnger din licens inom {3} dagar efter att din licens har löpt ut, kommer följande rabatter att tillÀmpas: Teamlicens {0}; Företagslicens {1}; Enterprise-licens {2}.", + "discountForYears": "{0}% rabatt för {1} Är", + "WhatHappensWhenLicenseEndsExplanation8": "De ABP-projekt som du genererar lagras inte pÄ vÄra servrar. DÀrför Àr det ditt ansvar att behÄlla kÀllkoden som du laddar ner. NÀr din licens löper ut finns det inget sÀtt att fÄ tag pÄ kÀllkoden för dina genererade ABP-projekt.", + "WhenShouldIRenewMyLicense": "NÀr ska jag förnya min licens?", + "WhenShouldIRenewMyLicenseExplanation": "Om du förnyar din licens inom {3} dagar efter att din licens har löpt ut, kommer följande rabatter att tillÀmpas: Teamlicens {0}; Företagslicens {1}; Enterprise-licens {2}. Men om du förnyar din licens efter {3} dagar efter licensens utgÄngsdatum, kommer förnyelsepriset att vara detsamma som licensens inköpspris och det kommer inte att finnas nÄgon rabatt pÄ din förnyelse.", + "TrialPlan": "Har du en testplan?", + "TrialPlanExplanation": "Ja, för att starta din kostnadsfria testversion, kontakta marketing@volosoft.com. Vi erbjuder ocksÄ en 30-dagars pengarna-tillbaka-garanti för Team-licensen, inga frÄgor stÀlls! Du kan begÀra full Äterbetalning inom de första 30 dagarna efter licensköpet. Vi ger 60% Äterbetalning inom 30 dagar för Business- och Enterprise-licenser. Detta beror pÄ att Business- och Enterprise-licenserna innehÄller den fullstÀndiga kÀllkoden för alla moduler och teman.", + "DoYouAcceptBankWireTransfer": "Accepterar ni banköverföringar?", + "DoYouAcceptBankWireTransferExplanation": "Ja, vi accepterar banköverföringar.
NÀr du har skickat licensavgiften via banköverföring, skicka ditt kvitto och önskad licenstyp till accounting@volosoft.com.
VĂ„r internationella bankkontoinformation:", + "HowToUpgrade": "Hur uppgraderar man befintliga applikationer nĂ€r en ny version finns tillgĂ€nglig?", + "HowToUpgradeExplanation1": "NĂ€r du skapar en ny applikation med hjĂ€lp av ABP anvĂ€nds alla moduler och teman som NuGet- och NPM-paket. PĂ„ sĂ„ sĂ€tt kan du enkelt uppgradera paketen nĂ€r en ny version finns tillgĂ€nglig.", + "HowToUpgradeExplanation2": "Förutom de vanliga NuGet/NPM-uppgraderingarna tillhandahĂ„ller ABP CLI ett uppdateringskommando som automatiskt hittar och uppgraderar alla ABP-relaterade paket i din lösning.", + "DatabaseSupport": "Vilka databassystem stöds?", + "DatabaseSupportExplanation": "ABP Framework i sig Ă€r databasagnostiskt och kan fungera med alla databasleverantörer genom sin natur. Kolla in Data Access-dokumentet för en lista över för nĂ€rvarande implementerade leverantörer.", + "UISupport": "Vilka UI-ramverk stöds?", + "Supported": "Stödd", + "UISupportExplanation": "ABP Framework Ă€r i sig sjĂ€lvt agnostiskt och kan fungera med alla anvĂ€ndargrĂ€nssnitt. Startmallar, modul-anvĂ€ndargrĂ€nssnitt och teman implementerades dock inte för alla anvĂ€ndargrĂ€nssnittsramverk. Kolla in GĂ„ igĂ„ng-dokumentet för den uppdaterade listan över anvĂ€ndargrĂ€nssnittsalternativ.", + "MicroserviceSupport": "Stödjer den microservice-arkitekturen?", + "MicroserviceSupportExplanation1": "Ett av de viktigaste mĂ„len med ABP-ramverket Ă€r att tillhandahĂ„lla en bekvĂ€m infrastruktur för att skapa mikroservicelösningar. Kolla in Microservice Architecture-dokumentet för att förstĂ„ hur det hjĂ€lper till att skapa mikroservicesystem.", + "MicroserviceSupportExplanation2": "Alla ABP-moduler Ă€r utformade för att stödja distributionsscenarier för mikrotjĂ€nster (med eget API och egen databas) genom att följa dokumentet Module Development Best Practices.", + "MicroserviceSupportExplanation3": "Vi tillhandahĂ„ller ett exempel pĂ„ Microservice Demo Solution som visar en implementering av en mikrotjĂ€nstarkitektur för att hjĂ€lpa dig att skapa din egen lösning.", + "MicroserviceSupportExplanation4": "SĂ„ det korta svaret Ă€r: \"Ja, det stöder mikroservicearkitektur\".", + "MicroserviceSupportExplanation5": "Ett mikrotjĂ€nstsystem Ă€r dock en lösning och varje lösning kommer att ha olika krav, nĂ€tverkstopologi, kommunikationsscenarier, autentiseringsmöjligheter, databasdelning/partitioneringsbeslut, runtime-konfigurationer, integrationer med tredjepartssystem och mycket mer.", + "MicroserviceSupportExplanation6": "ABP tillhandahĂ„ller infrastruktur för microservice-scenarier, microservice-kompatibla moduler, exempel och dokumentation som hjĂ€lper dig att bygga din egen lösning. Men förvĂ€nta dig inte att direkt ladda ner din drömlösning som Ă€r förbyggd Ă„t dig. Du mĂ„ste förstĂ„ den och sammanföra specifika delar baserat pĂ„ dina krav.", + "WhereCanIDownloadSourceCode": "Var kan jag ladda ner kĂ€llkoden?", + "WhereCanIDownloadSourceCodeExplanation": "Du kan ladda ner kĂ€llkoden för alla ABP-moduler, Angular-paket och teman via ABP Suite eller ABP CLI. Kolla in Hur man laddar ner kĂ€llkoden?", + "ComputerLimitation": "Hur mĂ„nga datorer kan en utvecklare logga in pĂ„ nĂ€r han utvecklar ABP?", + "ComputerLimitationExplanation": "Vi tillĂ„ter specifikt {0} datorer per individ/licensierad utvecklare. NĂ€r det finns ett behov för en utvecklare att utveckla ABP-baserade produkter pĂ„ en tredje maskin, ska ett e-postmeddelande skickas till license@abp.io dĂ€r situationen förklaras, och vi kommer sedan att göra lĂ€mplig tilldelning i vĂ„rt system.", + "RefundPolicy": "Har ni nĂ„gon Ă„terbetalningspolicy?", + "RefundPolicyExplanation": "Du kan begĂ€ra Ă„terbetalning inom 30 dagar efter ditt licensköp. Licenstyperna Business och Enterprise har alternativ för nedladdning av kĂ€llkod; dĂ€rför ger vi en Ă„terbetalning pĂ„ 60 % inom 30 dagar för Business- och Enterprise-licenser. Dessutom görs inga Ă„terbetalningar för förnyelser och andra licensköp.", + "HowCanIRefundVat": "Hur kan jag Ă„terbetala moms?", + "HowCanIRefundVatExplanation1": "Om du gjorde betalningen med 2Checkout kan du Ă„terbetala momsen via ditt 2Checkout-konto:", + "HowCanIRefundVatExplanation2": "Logga in pĂ„ ditt 2Checkout-konto", + "HowCanIRefundVatExplanation3": "Leta upp rĂ€tt order och tryck pĂ„ \"Återbetala försenad moms\" (ange ditt momsregistreringsnummer)", + "HowCanIGetMyInvoice": "Hur kan jag fĂ„ min faktura?", + "HowCanIGetMyInvoiceExplanation": "Det finns 2 betalningsgateways för att köpa en licens: Iyzico och 2Checkout. Om du köper din licens via 2Checkout-gatewayen skickar den PDF-fakturan till din e-postadress; kolla in 2Checkout-fakturering. Om du köper via Iyzico-gatewayen, med en anpassad inköpslĂ€nk eller via en banköverföring, kommer vi att förbereda och skicka din faktura. Du kan begĂ€ra eller ladda ner din faktura frĂ„n sidan för organisationshantering. Innan du kontaktar oss för fakturan, kontrollera din organisationshanteringssida!", + "Forum": "Forum", + "SupportExplanation": "ABP-licensen ger ett premiumforumstöd av ett team som bestĂ„r av ABP Framework-experter.", + "PrivateTicket": "Privat biljett", + "PrivateTicketExplanation": "Enterprise License inkluderar Ă€ven en privat support med e-post och Ă€rendehanteringssystem.", + "AbpSuiteExplanation1": "Med ABP Suite kan du skapa webbsidor pĂ„ bara nĂ„gra minuter. Det Ă€r ett globalt .NET Core-verktyg som kan installeras frĂ„n kommandoraden.", + "AbpSuiteExplanation2": "Den kan skapa en ny ABP-lösning och generera CRUD-sidor frĂ„n databasen till frontend. För teknisk översikt se dokumentet", + "FastEasy": "Snabbt och enkelt", + "AbpSuiteExplanation3": "Med ABP Suite kan du enkelt skapa CRUD-sidor. Du behöver bara definiera din entitet och dess egenskaper och lĂ„ta resten gĂ„ till ABP Suite Ă„t dig! ABP Suite genererar all nödvĂ€ndig kod för din CRUD-sida pĂ„ nĂ„gra sekunder. Den stöder Angular, MVC och Blazor anvĂ€ndargrĂ€nssnitt.", + "RichOptions": "Rika alternativ", + "AbpSuiteExplanation4": "ABP Suite stöder flera anvĂ€ndargrĂ€nssnittsalternativ som Razor Pages och Angular. Den stöder ocksĂ„ flera databaser som MongoDB och alla databaser som stöds av EntityFramework Core (MS SQL Server, Oracle, MySql, PostgreSQL och andra leverantörer...).", + "AbpSuiteExplanation5": "Det som Ă€r bra Ă€r att du inte behöver oroa dig för dessa alternativ. ABP Suite förstĂ„r din projekttyp och genererar koden för ditt projekt och placerar den genererade koden pĂ„ rĂ€tt plats i ditt projekt.", + "SourceCode": "KĂ€llkod", + "AbpSuiteExplanation6": "ABP Suite genererar kĂ€llkoden Ă„t dig! Den genererar inte magiska filer för att generera webbsidan. ABP Suite genererar kĂ€llkoden för Entity, Repository, Application Service, Code First Migration, JavaScript/TypeScript och CSHTML/HTML och Ă€ven nödvĂ€ndiga grĂ€nssnitt. ABP Suite genererar ocksĂ„ koden enligt Best Practices för programvaruutveckling, sĂ„ du behöver inte oroa dig för den genererade kodens kvalitet.", + "AbpSuiteExplanation7": "Eftersom du har kĂ€llkoden för byggstenarna i den genererade CRUD-sidan i rĂ€tt applikationslager kan du enkelt Ă€ndra kĂ€llkoden och lĂ€gga till din egen anpassade affĂ€rslogik i den genererade koden.", + "CrossPlatform": "Plattformsoberoende", + "AbpSuiteExplanation8": "ABP Suite Ă€r byggt med .NET Core och Ă€r plattformsoberoende. Den körs som en webbapplikation pĂ„ din lokala dator. Du kan köra den pĂ„ Windows, Mac och Linux", + "OtherFeatures": "Andra funktioner", + "OtherFeatures1": "Uppdaterar enkelt NuGet- och NPM-paket pĂ„ din lösning.", + "OtherFeatures2": "Återskapar redan genererade sidor frĂ„n början.", + "OtherFeatures3": "Skapar nya lösningar", + "ThanksForCreatingProject": "Ditt projekt har skapats framgĂ„ngsrikt!", + "HotToRunSolution": "Hur kör du din lösning?", + "HotToRunSolutionExplanation": "I dokumentet Kom igĂ„ng kan du lĂ€sa om hur du konfigurerar och kör din lösning.", + "GettingStarted": "Komma igĂ„ng", + "WebAppDevTutorial": "Handledning för utveckling av webbapplikationer", + "WebAppDevTutorialExplanation": "I handledningsdokumentet för utveckling av webbapplikationer finns ett exempel pĂ„ utveckling steg för steg.", + "Document": "Dokument", + "UsingABPSuiteToCURD": "AnvĂ€nda ABP Suite för generering av CRUD-sidor och verktyg", + "SeeABPSuiteDocument": "Kolla in ABP Suite-dokumentet för att lĂ€ra dig anvĂ€ndningen av ABP Suite.", + "AskQuestionsOnSupport": "Du kan stĂ€lla frĂ„gor pĂ„ ABP Support.", + "Documentation": "Dokumentation", + "SeeModulesDocument": "Se sidan med moduler för en lista över alla PRO-moduler.", + "Pricing": "PrissĂ€ttning", + "PricingExplanation": "VĂ€lj de egenskaper och funktioner som ditt företag behöver idag. Uppgradera enkelt nĂ€r ditt företag vĂ€xer.", + "Team": "Team", + "Business": "Företag", + "Enterprise": "Företag", + "Custom": "Anpassad", + "IncludedDeveloperLicenses": "Inkluderade utvecklarlicenser", + "CustomLicenceOrAdditionalServices": "Behöver du en anpassad licens eller ytterligare tjĂ€nster?", + "CustomOrVolumeLicense": "Anpassad licens eller volymlicens", + "LiveTrainingSupport": "Utbildning och support i realtid", + "AndMore": "och mer", + "AdditionalDeveloperLicense": "Ytterligare licens för utvecklare", + "ProjectCount": "ProjektrĂ€kning", + "AllProModules": "Alla proffsmoduler", + "AllProThemes": "Alla proffsteman", + "AllProStartupTemplates": "Alla proffsmallar för nystartade företag", + "SourceCodeOfAllModules": "KĂ€llkod för alla moduler", + "SourceCodeOfAllThemes": "KĂ€llkod för alla teman", + "PerpetualLicense": "Evig licens", + "UnlimitedServerDeployment": "ObegrĂ€nsad serverdistribution", + "YearUpgrade": "1 Ă„rs uppgradering", + "YearPremiumForumSupport": "1 Ă„rs premiumsupport för forum", + "ForumSupportIncidentCountYear": "Antal incidenter för forumstöd/Ă„r", + "PrivateTicketEmailSupport": "Privat support via biljett och e-post", + "BuyNow": "Köp nu", + "PayViaAmexCard": "Hur kan jag betala med mitt AMEX-kort?", + "PayViaAmexCardDescription": "Standardbetalningsgatewayen \"Iyzico\" kan neka vissa AMEX-kreditkort pĂ„ grund av sĂ€kerhetsĂ„tgĂ€rder. I detta fall kan du betala via den alternativa betalningsgatewayen \"2Checkout\".", + "ThankYou": "Tack sĂ„ mycket", + "InvalidReCaptchaErrorMessage": "Det uppstod ett fel vid verifiering av reCAPTCHA. VĂ€nligen försök igen.", + "CompanyName": "Företagets namn", + "YourCompanyName": "Ditt företagsnamn", + "FirstName": "Förnamn", + "LastName": "Efternamn", + "Optional": "Valfritt", + "YourFirstName": "Ditt förnamn", + "YourLastName": "Ditt efternamn", + "SpecialOffer": "Specialerbjudande", + "SpecialOfferMessage": "Skynda dig! Priserna gĂ€ller under en begrĂ€nsad tid.", + "DiscountRequest": "BegĂ€ran om rabatt", + "DiscountRequestDescribeCustomerQuestion": "Vilken av följande beskrivningar stĂ€mmer in pĂ„ dig?", + "DiscountRequestStudentEmailMessage": "E-postadressen mĂ„ste innehĂ„lla \"edu\".", + "DiscountRequestDeveloperCount": "Hur mĂ„nga utvecklare Ă€r ni?", + "DiscountRequestDeveloperCountExceedMessage": "Vi erbjuder inte rabatterade licenser för företag som har fler Ă€n {0} utvecklare.", + "DiscountRequestOrganizationName": "Företagets/organisationens/skolans namn", + "Website": "Webbplats", + "GithubUsername": "AnvĂ€ndarnamn för GitHub", + "PhoneNumber": "Telefonnummer", + "Country": "Land", + "DescribeABPCommercialUsage": "Beskriv det projekt som du planerar att utveckla baserat pĂ„ APB", + "DiscountRequestCertifyInformationMessage": "Jag intygar att alla uppgifter Ă€r sanningsenliga och korrekta.", + "DiscountRequestReceived": "Vi har mottagit din begĂ€ran om rabatt.", + "DiscountRequestStatusMessage": "Vi kommer att svara dig efter att ha kontrollerat den information du har lĂ€mnat.", + "MVCOrRazorPages": "MVC (Razor Pages)", + "Angular": "Angular", + "Blazor": "Blazor", + "New": "Nya", + "MongoDB": "MongoDB", + "EBookDDD": "E-bok DomĂ€nstyrd design", + "PracticalGuideForImplementingDDD": "Den hĂ€r boken Ă€r en praktisk guide för att implementera domĂ€ndriven design med ABP-ramverket.", + "IntroducingDDD": "Introduktion till domĂ€ndriven design", + "DDDLayersAndCleanArchitecture": "DDD-skikt och ren arkitektur", + "LayeringOfADotnetSolution": "Skiktning av en .NET-lösning", + "ImplementingDDDBuildingBlocks": "Implementering av DDD-byggstenar", + "DomainVsApplicationLogic": "DomĂ€nlogik vs applikationslogik", + "SamplesAndDiscussions": "Provtagningar och diskussioner", + "Free": "Gratis", + "Download": "Nedladdningar", + "DDDEBook": "DDD E-bok", + "ImplementingDDD": "Implementering av domĂ€ndriven design", + "DDDBookExplanation": "En praktisk guide för implementering av domĂ€ndriven design med ABP-ramverket.", + "Overview": "Översikt", + "DDDBookPracticalGuide": "Detta Ă€r en praktisk guide för implementering av domĂ€ndriven design (DDD). Implementeringsdetaljerna bygger pĂ„ ABP Framework-infrastrukturen, men kĂ€rnkoncepten, principerna och mönstren Ă€r tillĂ€mpliga pĂ„ alla typer av lösningar, Ă€ven om det inte Ă€r en .NET-lösning.", + "TableOfContents": "InnehĂ„llsförteckning", + "IntroductionToImplementingDDD": "Introduktion till implementering av domĂ€ndriven design", + "WhatIsDDD": "Vad Ă€r domĂ€ndriven design?", + "Implementation": "Implementering", + "TheBigPicture": "Den stora bilden", + "TheBuildingBlock": "Byggstenen", + "ExampleUseCase": "Exempel AnvĂ€ndningsfall", + "DomainAndApplicationLogic": "DomĂ€nlogik och applikationslogik", + "Author": "Författaren", + "PublishedOn": "Publicerad pĂ„", + "Page": "Sidan", + "FreeEBook": "Gratis e-bok", + "EBookSignInForDownload": "För att ladda ner e-boken logga in", + "SignIn": "Logga in", + "Or": "Eller", + "TellUsAboutYourself": "BerĂ€tta lite om dig sjĂ€lv", + "Surname": "Efternamn", + "DoYouAgreePrivacyPolicy": "Jag samtycker till Terms & Conditions och Privacy Policy.", + "VolosoftMarketingInformationMessage": "Jag vill ha information, tips och erbjudanden om Solutions for Businesses and Organizations och andra produkter och tjĂ€nster frĂ„n Volosoft.", + "VolosoftSharingInformationMessage": "Jag vill att Volosoft ska dela min information med utvalda partners sĂ„ att jag kan fĂ„ relevant information om deras produkter och tjĂ€nster.", + "WeWillSendYouADownloadLink": "LĂ€nken för nedladdning av e-boken har skickats till {0}. Kontrollera din inkorg, skrĂ€ppost och spamboxar!", + "InvalidFormInputs": "VĂ€nligen skriv in den giltiga information som anges pĂ„ formulĂ€ret.", + "DDDBookEmailBody": "Tack sĂ„ mycket.
För att ladda ner din bok, klicka hÀr.", + "StartFree": "Starta gratis", + "FreeTrial": "Gratis provperiod", + "AcceptsMarketingCommunications": " Ja, jag vill gÀrna fÄ ABP-relaterade marknadsföringsnyheter.", + "PurposeOfUsage": "Syfte med anvÀndningen", + "Choose": "- VÀlj -", + "CompanyOrganizationName": "Företagets/organisationens namn", + "CompanySize": "Företagets storlek", + "Next": "NÀsta", + "StartTrial": "Starta min kostnadsfria testperiod", + "ContactUsQuestions": "Kontakta oss om du har nÄgra frÄgor", + "TrialActivatedWarning": "En anvÀndare har endast rÀtt till 1 gratis provperiod. Du har redan anvÀnt din provperiod.", + "ActivationRequirement": "Du Àr bara ett steg frÄn att starta din provperiod.
Efter att ha kontrollerat din information aktiverar vi din licens. NÀr din licens Àr aktiverad skickar vi ett e-postmeddelande till {0}. Oroa dig inte, den hÀr processen kommer inte att ta lÄng tid!", + "SaveAndDownload": "Spara och ladda ner", + "CompanyNameValidationMessage": "Företagsnamnet Àr för lÄngt!", + "AddressValidationMessage": "Adressen Àr för lÄng!", + "TaxNoValidationMessage": "TAX/VAT Nej Àr för lÄngt!", + "NotesValidationMessage": "AnteckningsfÀltet Àr för lÄngt!", + "CheckYourBillingInfo": "Du kan bara skapa din faktura en gÄng! Kontrollera din faktureringsinformation innan du skapar din faktura.", + "StartYourFreeTrial": "Starta din kostnadsfria testperiod", + "TrialLicenseModelInvalidErrorMessage": "Ett av följande fÀlt Àr ogiltigt: Landsnamn, Företagsstorlek, Bransch eller Syfte med anvÀndning.", + "Trial": "RÀttegÄng", + "Purchased": "Köpte", + "PurchaseNow": "Köp nu", + "PurchaseTrialLicenseMessage": "Din licens utgÄngsdatum Àr {0}.
Om du vill fortsĂ€tta anvĂ€nda de projekt som du skapade under din kostnadsfria testperiod mĂ„ste du Ă€ndra licensnycklarna i dina appsettings.secrets.json-filer. HĂ€r Ă€r din licensnyckel:", + "TrialLicenseExpireMessage": "Du anvĂ€nder en testlicens och din testlicens upphör att gĂ€lla den {0}.", + "TryForFree": "Prova gratis", + "TrialLicenseExpiredInfo": "Din testlicensperiod har löpt ut!", + "DowngradeLicensePlan": "Kan jag nedgradera till en lĂ€gre licensplan i framtiden?", + "DowngradeLicensePlanExplanation": "Du kan inte nedgradera din befintliga licensplan. Men du kan köpa en ny lĂ€gre licensplan och fortsĂ€tta din utveckling pĂ„ den nya licensen. NĂ€r du har köpt en lĂ€gre licens behöver du bara logga in pĂ„ din nya licensplan via ABP CLI-kommandot: ` abp login -o `.", + "LicenseTransfer": "Kan en licens överföras frĂ„n en utvecklare till en annan?", + "LicenseTransferExplanation": "Ja, det gör jag! NĂ€r du köper en licens blir du licensinnehavare och fĂ„r dĂ€rmed tillgĂ„ng till sidan för organisationshantering. En organisation har rollerna Ă€gare och utvecklare. Ägare kan hantera utvecklarplatserna och tilldela utvecklare. Varje tilldelad utvecklare loggar in via ABP CLI-kommandot i systemet och har utvecklings- och supportbehörighet.", + "UserOwnerDescription": "Organisationens \"Ă€gare\" Ă€r administratör för detta konto. Han/hon hanterar organisationen genom att köpa licenser och tilldela utvecklare. En \"Ă€gare\" kan inte skriva kod i ABP-projekten, kan inte ladda ner ABP-exempelprojekten och kan inte stĂ€lla frĂ„gor pĂ„ supportwebbplatsen. Om du vill göra allt detta mĂ„ste du ocksĂ„ lĂ€gga till dig sjĂ€lv som utvecklare.", + "UserDeveloperDescription": "\"Utvecklarna\" kan skriva kod i ABP-projekten, ladda ner ABP:s exempelprojekt och stĂ€lla frĂ„gor pĂ„ supportwebbplatsen. Å andra sidan kan \"utvecklarna\" inte hantera den hĂ€r organisationen.", + "RemoveCurrentUserFromOrganizationWarningMessage": "Du tar bort dig sjĂ€lv frĂ„n din egen organisation. Du kommer inte lĂ€ngre att kunna hantera den hĂ€r organisationen, bekrĂ€ftar du det?", + "RenewExistingOrganizationOrCreateNewOneMessage": "Du kan förnya licensen för din organisation (er) genom att klicka pĂ„ nedanstĂ„ende \"FörlĂ€ng nu\"-knapp (ar) och dĂ€rmed kan du förlĂ€nga licensens utgĂ„ngsdatum med 1 Ă„r. Om du fortsĂ€tter till kassan kommer du att ha en ny organisation. Vill du fortsĂ€tta med en ny organisation?", + "PurchaseTrialOrganizationOrCreateNewOneMessage": "Du har en testlicens. För att köpa din testlicens klickar du pĂ„ knappen Köp nu. Om du fortsĂ€tter till kassan kommer du att ha en ny organisation. Vill du fortsĂ€tta med en ny organisation?", + "ExtendNow": "FörlĂ€nga / Förnya", + "CreateNewOrganization": "Skapa en ny organisation", + "RenewLicenseEarly": "Om jag förnyar min licens tidigt, kommer jag att fĂ„ hela Ă„ret?", + "RenewLicenseEarylExplanation": "NĂ€r du förnyar din licens före licensens utgĂ„ngsdatum kommer 1 Ă„r att lĂ€ggas till licensens utgĂ„ngsdatum. Om din licens t.ex. löper ut den {0}-06-06 och du förnyar den den {0}-01-01, kommer din nya licens att löpa ut den {1}-06-06.", + "OpenSourceWebApplication": "Webbapplikation med öppen kĂ€llkod", + "CompleteWebDevelopment": "En komplett webbutveckling", + "ABPFrameworkDescription": "ABP Framework Ă€r en komplett infrastruktur för att skapa moderna webbapplikationer genom att följa de bĂ€sta metoderna för mjukvaruutveckling och konventioner.", + "CommunityDescription": "Dela dina erfarenheter av ABP-ramverket!", + "GetStarted": "Kom igĂ„ng", + "Views": "utsikt", + "LatestPosts": "Senaste inlĂ€gg", + "PreBuiltApplication": "Förbyggd applikation", + "DatabaseProviders": "Databasleverantörer", + "UIFrameworks": "Ramverk för anvĂ€ndargrĂ€nssnitt", + "UsefulLinks": "AnvĂ€ndbara lĂ€nkar", + "Platform": "Plattform", + "CoolestCompaniesUseABPCommercial": "De coolaste företagen anvĂ€nder redan ABP.", + "UserInterface": "AnvĂ€ndargrĂ€nssnitt", + "APIGateway": "API-gateway", + "Microservice": "Mikroservice", + "Database": "Databas", + "Architecture": "Arkitektur", + "MicroserviceArchitectureExplanation": "Det hĂ€r Ă€r en komplett lösningsarkitektur som bestĂ„r av flera applikationer, API-gateways, mikrotjĂ€nster och databaser för att bygga en skalbar mikrotjĂ€nstlösning med den senaste tekniken.", + "BusinessLogic": "AffĂ€rslogik", + "DataAccessLayer": "DataĂ„tkomstskikt", + "Monolith": "Monolit", + "ModularArchitectureExplanation": "Denna startup-mall ger en skiktad, modulĂ€r och DDD-baserad lösningsarkitektur för att bygga en ren och underhĂ„llbar kodbas.", + "SeeDetails": "Se detaljer", + "SeeDocumentation": "Kolla in dokumentationen", + "Bs5Compatible": "Professionellt tema som Ă€r kompatibelt med Bootstrap 5, perfekt för din administratörswebbplats.", + "LeptonXTheme": "LeptonX tema", + "LeptonXDark": "LeptonX Mörk", + "LeptonXLight": "LeptonX Ljus", + "LeptonXSemiDark": "LeptonX Halvmörk", + "BuiltOnBs5Library": "Byggd pĂ„ Bootstrap 5-biblioteket", + "FullyCompatibleWithBs5": "100% kompatibel med Bootstrap 5 HTML-struktur och CSS-klasser", + "ResponsiveAndMobileCompatible": "Responsiv, mobilkompatibel, RTL-stöd", + "ProvidesStylesForDatatables": "TillhandahĂ„ller stilar för datatabeller", + "MultipleLayoutOptions": "Flera layoutalternativ", + "EasilyInstallAndUpgrade": "Enkel installation och uppgradering", + "SupportForum": "Forum för support", + "TrustedBy": "Betrodda av", + "OurPricing": "VĂ„r prissĂ€ttning", + "Plans": "Planer", + "NameSurname": "Namn Efternamn", + "Unspecified": "Ospecificerad", + "LicenceType": "Typ av licens", + "LicenseDiscountWarning": "DENNA RABATTSIDA ANVÄNDER STANDARD RABATTKOD OCH FÖR VOLOSOFT UTVECKLARE. INKÖPSLÄNKAR NEDAN FUNGERAR INTE.", + "DiscountedLicenseExplanation": "Dessa licenspriser Ă€r avsedda för smĂ„ nystartade företag, enskilda utvecklare, studenter, ideella organisationer och projekt!", + "General": "AllmĂ€nt", + "License": "Licens", + "Development": "Utveckling", + "Payment": "Betalning", + "WatchExplainerVideo": "LĂ„t oss trĂ€ffas! Titta pĂ„ förklarande video", + "LightDarkAndSemiDarkThemes": "Ljus, mörk och halvmörk", + "LeptonXThemeExplanation": "Lepton Theme kan Ă€ndra ditt tema enligt dina systeminstĂ€llningar.", + "PRO": "PRO", + "WelcomeToABPCommercial": "VĂ€lkommen till ABP Platform!", + "YourAccountDetails": "Dina kontouppgifter", + "OrganizationName": "Organisationens namn", + "AddDevelopers": "LĂ€gg till utvecklare", + "StartDevelopment": "Starta utveckling", + "CreateAndRunApplicationUsingStartupTemplate": "LĂ€r dig hur du skapar och kör en ny webbapplikation med hjĂ€lp av ABP:s startmallar.", + "CommunityDescription2": "community.abp.io Ă€r en plats dĂ€r mĂ€nniskor kan dela ABP-relaterade artiklar. Sök efter artiklar, handledningar, kodprover, fallstudier och trĂ€ffa mĂ€nniskor som Ă€r i samma spĂ„r som du.", + "UseABPSuiteExplanation": "AnvĂ€nd ABP Suite för att ladda ner kĂ€llkoden för modulerna och temana.", + "ManageModulesWithSuite": "Du kan ocksĂ„ hantera dina ABP-moduler med Suite.", + "LearnHowToInstallSuite": "LĂ€r dig hur du installerar och anvĂ€nder ABP Suite.", + "SeeMore": "Se mer", + "SeeLess": "Se mindre", + "LayeredSolutionStructure": "Struktur med flera lager av lösningar", + "LayeredSolutionStructureExplanation": "Lösningen Ă€r uppbyggd i lager baserat pĂ„ principer och mönster för domĂ€ndriven design för att isolera affĂ€rslogiken frĂ„n infrastruktur och integrationer och för att maximera underhĂ„ll och Ă„teranvĂ€ndning av koden. ABP Framework tillhandahĂ„ller redan abstraktioner, basklasser och guider för att verkligen implementera DDD för din applikation.", + "MultipleUIOptions": "Flera alternativ för anvĂ€ndargrĂ€nssnitt", + "MultipleUIOptionsExplanation": "Vi Ă€lskar olika sĂ€tt att skapa anvĂ€ndargrĂ€nssnitt. Den hĂ€r startup-lösningen ger tre olika alternativ för anvĂ€ndargrĂ€nssnitt för din affĂ€rsapplikation.", + "MultipleDatabaseOptions": "Flera databasalternativ", + "MultipleDatabaseOptionsExplanation": "Du har tvĂ„ alternativ för databasleverantörer (förutom att du kan anvĂ€nda bĂ„da i en och samma applikation). AnvĂ€nd Entity Framework Core för att arbeta med alla relationsdatabaser och anvĂ€nd eventuellt Dapper nĂ€r du behöver skriva lĂ„gnivĂ„frĂ„gor för bĂ€ttre prestanda. MongoDB Ă€r ett annat alternativ om du behöver anvĂ€nda en dokumentbaserad NoSQL-databas. Även om dessa leverantörer Ă€r vĂ€lintegrerade, abstraherade och förkonfigurerade kan du faktiskt interagera med alla databassystem som du kan anvĂ€nda med .NET.", + "ModularArchitectureExplanation2": "Modularitet Ă€r en första klassens medborgare i ABP.IO-plattformen. Alla applikationsfunktionaliteter Ă€r uppdelade i vĂ€lisolerade valfria moduler. Startlösningen levereras redan med de grundlĂ€ggande ABP-modulerna förinstallerade. Du kan ocksĂ„ skapa dina egna moduler för att bygga ett modulĂ€rt system för din egen applikation.", + "MultiTenancyForSaasBusiness": "Multi-Tenancy för ditt SaaS-företag", + "MultiTenancyForSaasBusinessExplanation": "ABP tillhandahĂ„ller ett komplett, end-to-end multi-tenancy-system för att skapa dina SaaS-system (Software-as-a-Service). Det gör det möjligt för hyresgĂ€sterna att dela eller ha sina egna databaser med on-the-fly databasskapande och migrationssystem.", + "MicroserviceStartupSolution": "Microservice Startup-lösning", + "MicroserviceArchitectureExplanation2": "Du kan skaffa det till ditt nĂ€sta microservice-system för att dra nytta av den förbyggda baslösningen och destillerade erfarenheten.", + "PreIntegratedTools": "Förintegrerad i populĂ€ra verktyg", + "PreIntegratedToolsExplanation": "Lösningen Ă€r redan integrerad i branschens standardverktyg och -tekniker, men du kan alltid Ă€ndra dem och integrera dem med dina favoritverktyg.", + "SingleSignOnAuthenticationServer": "Server för autentisering med enkel inloggning", + "SingleSignOnAuthenticationServerExplanation": "Lösningen har en autentiseringsserverapplikation som anvĂ€nds av de andra applikationerna som en server för enkel inloggning med API-Ă„tkomsthanteringsfunktioner. Den Ă€r baserad pĂ„ IdentityServer.", + "WebAppsWithGateways": "2 Webbapp med 2 API-gateways", + "WebAppsWithGatewaysExplanation": "Lösningen innehĂ„ller tvĂ„ webbapplikationer som var och en har en dedikerad API-gateway (BFF - Backend For Frontend-mönster).", + "BackOfficeApplication": "Back Office-applikation", + "BackOfficeApplicationExplanation": "Den faktiska webbapplikationen för ditt system, med flera alternativ för anvĂ€ndargrĂ€nssnitt. Du kan skapa alla typer av affĂ€rsapplikationer.", + "LandingWebsite": "Landningswebbplats", + "LandingWebsiteExplanation": "En generisk landningsplats/publik webbplats som kan anvĂ€ndas för flera Ă€ndamĂ„l, t.ex. för att presentera ditt företag, sĂ€lja dina produkter osv.", + "ABPFrameworkEBook": "Mastering ABP Framework e-bok", + "MasteringAbpFrameworkEBookDescription": "IngĂ„r i din ABP-licens", + "FullName": "Full Name", + "LicenseTypeNotCorrect": "Licenstypen Ă€r inte korrekt!", + "Trainings": "Utbildningar", + "ChooseTrainingPlaceholder": "VĂ€lj utbildning...", + "DoYouNeedTrainings": "Behöver du nĂ„gon av dessa utbildningar?", + "DoYouNeedTraining": "Behöver du {0} utbildning?", + "GetInTouchUs": "Ta kontakt med oss", + "ForMoreInformationClickHere": "För mer information, klicka hĂ€r.", + "ForMoreInformationClickHereByClass": "För mer information, klicka hĂ€r.", + "IsGetOnboardingTraining": "Vill du fĂ„ utbildning i onboarding och utveckling av webbapplikationer?", + "OnboardingWebApplicationDevelopmentTrainingMessage": "För att schemalĂ€gga din utbildningskalender, vĂ€nligen kontakta {0} efter att du har skapat organisationen", + "CustomPurchaseMessage": "För nĂ€sta steg, klicka pĂ„ {0} för att kontakta oss.", + "Note": "Notera", + "AdditionalNote": "Ytterligare anmĂ€rkning", + "OnboardingTrainingFaqTitle": "Har du en ABP onboarding-utbildning?", + "OnboardingTrainingFaqExplanation": "Ja, vi har ABP Training Services som hjĂ€lper dig att snabbt komma igĂ„ng med ditt ABP-projekt. Du kommer att lĂ€ra dig om ABP frĂ„n en medlem i ABP:s kĂ€rnteam och du kommer att fĂ„ de fĂ€rdigheter som krĂ€vs för att starta ditt ABP-projekt. I onboarding-utbildningen förklarar vi hur du stĂ€ller in din utvecklingsmiljö, installerar de nödvĂ€ndiga verktygen och skapar en fullt fungerande CRUD-sida. Utbildningen kommer att vara live och Zoom-applikationen kommer att anvĂ€ndas, men vi Ă€r öppna för att anvĂ€nda andra online-mötesplattformar. SprĂ„ket för utbildningen kommer att vara engelska. Du kan ocksĂ„ stĂ€lla dina frĂ„gor om ABP under sessionerna. En lĂ€mplig tid och ett lĂ€mpligt datum kommer att planeras för bĂ„da parter. För att fĂ„ mer information, kontakta oss pĂ„ info@abp.io.", + "AddBasket": "LĂ€gg till i korgen", + "SendTrainingRequest": "Skicka förfrĂ„gan om utbildning", + "OnlyEnglishVersionOfThisDocumentIsTheRecentAndValid": "* Den engelska versionen av detta dokument Ă€r den mest aktuella och den engelska versionen ska ha företrĂ€de i alla tvister.", + "Pricing_Page_Title": "Priser och planer", + "Pricing_Page_Description": "VĂ€lj de funktioner och den funktionalitet som ditt företag behöver idag. Köp en ABP-licens och skapa obegrĂ€nsat med projekt.", + "Pricing_Page_HurryUp": "Skynda dig!", + "Pricing_Page_BuyLicense": "Köp en licens till 2021 Ă„rs priser fram till den 16 januari!", + "Pricing_Page_ValidForExistingCustomers": "GĂ€ller Ă€ven för befintliga kunder och licensförnyelser.", + "Pricing_Page_Hint1": "I licenspriset ingĂ„r ett visst antal platser för utvecklare. Om du har fler utvecklare kan du alltid köpa ytterligare platser.", + "Pricing_Page_Hint2": "Du kan köpa fler utvecklarlicenser nu eller i framtiden. Licenserna Ă€r platsbaserade, vilket innebĂ€r att du kan överföra en plats frĂ„n en utvecklare till en annan.", + "Pricing_Page_Hint3": "Du kan utveckla ett obegrĂ€nsat antal olika produkter med din licens.", + "Pricing_Page_Hint4": "ABP Suite Ă€r ett verktyg som hjĂ€lper dig att utveckla och förbĂ€ttra din produktivitet. Det stöder generering av CRUD-sidor och skapande av nya projekt.", + "Pricing_Page_Hint5": "Du kan anvĂ€nda alla de förbyggda modulerna i dina applikationer.", + "Pricing_Page_Hint6": "Du kan anvĂ€nda alla de förbyggda temana i dina applikationer.", + "Pricing_Page_Hint7": "En startmall Ă€r en Visual Studio-lösning som hjĂ€lper dig att komma igĂ„ng med ditt projekt. Alla grundlĂ€ggande moduler lĂ€ggs till och förkonfigureras Ă„t dig.", + "Pricing_Page_Hint8": "Mastering ABP Framework e-bok förklarar hur man implementerar .NET-lösningar med bĂ€sta praxis. Den sĂ€ljs pĂ„ Amazon.com, och du kan ladda ner boken gratis med din licens.", + "Pricing_Page_Hint9": "Du kan ladda ner kĂ€llkoden för alla moduler. Du kanske vill lĂ€gga till kĂ€llkoden i din lösning för att göra radikala Ă€ndringar eller bara behĂ„lla den för dig sjĂ€lv av sĂ€kerhetsskĂ€l.", + "Pricing_Page_Hint10": "Licenserna Ă€r livstidsbaserade. Det innebĂ€r att du kan fortsĂ€tta att utveckla din applikation för alltid. TillgĂ„ng till den senaste versionen och support beviljas inom licensperioden (1 Ă„r om du inte förnyar den).", + "Pricing_Page_Hint11": "Inga begrĂ€nsningar för driftsĂ€ttning! Du kan distribuera till sĂ„ mĂ„nga servrar som du vill, inklusive molntjĂ€nster eller lokalt.", + "Pricing_Page_Hint12": "Du kan uppdatera moduler, teman och verktyg till den senaste versionen inom din aktiva licensperiod. NĂ€r din licens löper ut mĂ„ste du förnya den för att fortsĂ€tta att fĂ„ uppdateringar för buggfixar, nya funktioner och förbĂ€ttringar.", + "Pricing_Page_Hint13": "Du kan fĂ„ premiumsupport i ett Ă„r (du kan förnya din licens för att förlĂ€nga den).", + "Pricing_Page_Hint14": "Team- och Business-licenser har en grĂ€ns för antal incidenter/frĂ„gor. Om du köper ytterligare utvecklarlicenser ökar incidentgrĂ€nsen med {0} (för Team-licensen) eller {1} (för Business-licensen) per utvecklare.", + "Pricing_Page_Hint15": "Endast Enterprise License inkluderar privat support. Du kan skicka ett e-postmeddelande direkt till ABP-teamet eller stĂ€lla frĂ„gor pĂ„ support.abp.io med ett privat biljettalternativ. De privata Ă€rendena Ă€r inte synliga för allmĂ€nheten.", + "Pricing_Page_Hint16": "Du kan ladda ner kĂ€llkoden för alla ABP-teman. Du kanske vill lĂ€gga till kĂ€llkoden i din lösning för att göra radikala Ă€ndringar eller bara behĂ„lla den för dig sjĂ€lv av sĂ€kerhetsskĂ€l.", + "Pricing_Page_Testimonial_1": "ABP gjorde det möjligt för SC Ventures att leverera en bankklassad SaaS-plattform med silodatabas med flera hyresgĂ€ster pĂ„ 9 mĂ„nader för att stödja leverantörskedjans kundfordringar / leverantörsskulder för finansiering av fakturor med betydande vĂ€rde frĂ„n flera integrerade ankare. ABP:s modularitet gjorde det möjligt för teamet att leverera pĂ„ rekordtid, klara alla VAPT och distribuera den containeriserade mikrotjĂ€nststacken via fullstĂ€ndig CI/CD och pipelines till produktion.", + "Pricing_Page_Testimonial_2": "Vi ser vĂ€rdet av att anvĂ€nda ABP för att minska omkostnaderna för kundanpassade utvecklingsprojekt. Teamet kan förena kodmönstret i olika projektströmmar. Vi ser mer potential i ramverket för att vi ska kunna bygga nya funktioner snabbare Ă€n tidigare. Vi litar pĂ„ att vi stĂ€ndigt kommer att se vĂ€rdet av att utnyttja ABP.", + "Pricing_Page_Testimonial_3": "Vi Ă€lskar ABP. Vi behöver inte skriva allt frĂ„n grunden. Vi utgĂ„r frĂ„n out-of-the-box-funktioner och fokuserar bara pĂ„ det vi verkligen behöver skriva. Dessutom Ă€r ABP vĂ€larkitekterat och koden Ă€r av hög kvalitet med fĂ€rre buggar. Om vi hade varit tvungna att skriva allt vi behövde pĂ„ egen hand hade vi kanske fĂ„tt lĂ€gga ner flera Ă„r. Ytterligare en sak vi gillar Ă€r att den nya versionen, problemfixningen eller förbĂ€ttringen kommer ut vĂ€ldigt snart, varannan vecka. Vi vĂ€ntar inte för lĂ€nge.", + "Pricing_Page_Testimonial_4": "ABP Ă€r en fantastisk produkt som jag skulle rekommendera. Kommersiella produkter till marknaden för vĂ„ra kunder i en enda konfigurerbar plattform. Den starthjĂ€lp som ramverket och verktygen ger alla team Ă€r vĂ€rd varenda cent. ABP var det som passade bĂ€st för vĂ„ra behov.", + "Pricing_Page_Testimonial_5": "ABP Framework Ă€r inte bara ett ramverk, utan det Ă€r ocksĂ„ en guide för projektutveckling/hantering, eftersom det ger utbildning i DDD, GenericRepository, DI, Microservice och Modularity. Även om du inte kommer att anvĂ€nda sjĂ€lva ramverket kan du utveckla dig sjĂ€lv med docs.abp.io som Ă€r vĂ€l och professionellt förberedd (OpenIddict, Redis, Quartz etc.). Eftersom mĂ„nga saker Ă€r förbyggda förkortar det projektutvecklingstiden avsevĂ€rt (t.ex. inloggningssida, undantagshantering, datafiltrering, sĂ„dd, revisionsloggning, lokalisering, automatisk API-kontroller etc.) Som ett exempel frĂ„n vĂ„r applikation har jag anvĂ€nt Local Event Bus för lagerstyrning. SĂ„ jag kan hantera orderrörelser genom att skriva lagerhanterare. Det Ă€r underbart att inte förlora tid för CreationTime, CreatorId. De fylls i automatiskt.", + "Pricing_Page_Testimonial_6": "ABP Framework Ă€r ett bra ramverk men det tar tid att förstĂ„ de olika lager, klasser och bibliotek som det anvĂ€nder (sĂ€rskilt ABP). Jag spenderade mycket tid pĂ„ att lĂ€sa kodbasen, men ABP sparade oss tid nĂ€r vi skapade projektspecialitetsenheterna (AR) och förvaret kopplat till var och en av dem. Jag gillade ocksĂ„ att den metod som anvĂ€nds i ABP Ă€r mycket mogen; vi vet att den Ă€r baserad pĂ„ DDD och monolit.", + "Pricing_Page_Testimonial_7": "Som ett nystartat företag mĂ„ste vi iterera snabbt och spendera minimal tid pĂ„ standardfunktioner och icke-kĂ€rnfunktioner.\nVĂ„ra ingenjörer strĂ€cker sig frĂ„n mycket erfarna till juniora ingenjörer, och vi behövde en gemensam förstĂ„else och ett sĂ€tt att dela teknisk och domĂ€nkunskap, ABP gjorde det möjligt för oss att göra detta tack vare deras fantastiska guider och dokumentation.\nDet finns saker som vi inte har behövt oroa oss för eftersom de fungerar direkt med ABP.\nABP hjĂ€lpte oss att effektivisera snabb prototyping och utveckling, mindre Ă€n 4 veckor frĂ„n funktionsstart till produktion. Med alla premiumfunktioner som ingĂ„r i licensen har ABP gett oss \"Startup in a Box\" pĂ„ Software Engineering-sidan.", + "Pricing_Page_Testimonial_8": "Jag skulle rekommendera ABP till alla som vill utöka utbudet av produkter som Ă€r tillgĂ€ngliga för sina kunder. Det Ă€r fantastiskt nĂ€r man behöver anvĂ€nda en distribuerad företagsmiljö (Angular, WPF, Win&Linux). Förutom deras produkter Ă€lskar vi deras support, som gör vĂ„rt jobb snabbare och enklare. Vi vet redan att vi har hittat en bra partner för framtiden som kommer att stödja oss i att expandera vĂ„r verksamhet.", + "Pricing_Page_Testimonial_9": "Vi Ă€r ett företag med 2 anstĂ€llda som har varit i branschen i över 20 Ă„r.\nNĂ€r det gĂ€ller vĂ„r erfarenhet av ABP kontaktades vi av en kund som ville att vi skulle utveckla en ny personalapplikation i en modern miljö för att ersĂ€tta deras 25 Ă„r gamla Access-applikation. Vi bestĂ€mde oss för att gĂ„ över frĂ„n en desktoplösning till en webbaserad lösning.\n\nVid den tidpunkten hade vi mycket liten kunskap om webbapplikationer och .NET, men vi snubblade över ABP, och med hjĂ€lp av ABP Framework, teknisk dokumentation och ABP Suite kunde vi inte bara utveckla applikationen enligt kundens specifikationer utan ocksĂ„ framgĂ„ngsrikt arbeta i en .NET-miljö inom ett Ă„r.", + "AbpBookDownloadArea_ClaimYourEBook": "Gör ansprĂ„k pĂ„ din e-bok om ABP Framework", + "AddMemberModal_Warning_1": "Om det anvĂ€ndarnamn som du försöker lĂ€gga till inte finns i systemet, be din teammedlem att registrera sig pĂ„ {0} och dela anvĂ€ndarnamnet pĂ„ hans/hennes konto med dig.", + "MyOrganizations_Detail_WelcomeMessage": "VĂ€lkommen till din organisation, {0}", + "MyOrganizations_Detail_OrganizationManagement": "Organisation Förvaltning", + "OrganizationDisplayName": "Organisationens visningsnamn", + "MyOrganizations_Detail_EditDisplayName": "Redigera visningsnamn", + "MyOrganizations_Detail_UpgradeYourLicense": "Uppgradera din licens", + "MyOrganizations_Detail_LicenseStartAndExpiryDate": "Licensens startdatum - utgĂ„ngsdatum", + "MyOrganizations_Detail_OwnerRightInfo": "Du anvĂ€nder {0} av din {1} Ă€gares rĂ€ttigheter.", + "MyOrganizations_Detail_CopyApiKey": "Kopiera nyckeln", + "MyOrganizations_Detail_ApiKeyDescription": "API-nyckeln Ă€r token för PRO-paket som finns pĂ„ {1}.", + "MyOrganizations_Detail_YourPrivateNugetSource": "Din privata NuGet-kĂ€lla Ă€r {0}", + "MyOrganizations_Detail_PrivateNugetSourceWarning": "Detta lĂ€ggs automatiskt till som en feed till din NuGet.Config i din ABP-lösning. Dela inte din privata nyckel med obehöriga anvĂ€ndare!", + "MyOrganizations_Detail_DeveloperSeatInfo": "Du anvĂ€nder {0} av dina {1} platser för utvecklare.", + "NeedMoreSeatsForYourTeam": "Behöver du fler platser för ditt team?", + "MyOrganizations_Detail_PricePerYear": "{0} / per Ă„r", + "MyOrganizations_Detail_PurchaseDeveloperSeats": "Köpa platser för utvecklare", + "Invoices": "Fakturor", + "RequestInvoice": "BegĂ€r faktura", + "OrderNumber": "BestĂ€llningsnummer", + "Date": "Datum", + "Products": "Produkter", + "TotalPrice": "Totalt pris", + "ThereIsNoInvoice": "Det finns ingen faktura", + "MyOrganizations_Detail_PaymentProviderInfo": "Om du har köpt din licens via {0} gateway skickas PDF-fakturan till din e-postadress, se {0} fakturering.", + "MyOrganizations_Detail_PayUInfo": "Om du har köpt via Iyzico-gatewayen klickar du pĂ„ knappen \"BegĂ€r faktura\" och fyller i faktureringsinformationen.", + "MyOrganizations_Detail_ConclusionInfo": "Din fakturabegĂ€ran kommer att behandlas inom {0} arbetsdagar.", + "ExtendYourLicense": "FörlĂ€ng din {0} licens", + "Continue": "FortsĂ€tt", + "PurchaseLicense": "Köp {0} licens", + "DownloadInvoiceModal_DownloadInvoice": "Ladda ner faktura", + "DownloadInvoiceModal_SaveInformationOnlyOnce": "Du kan bara spara din faktureringsinformation en gĂ„ng.", + "InvoiceModal_EnterCompanyName": "Ange ditt juridiska företagsnamn...", + "InvoiceModal_EnterCompanyAddress": "Ange din juridiska företagsadress...", + "InvoiceModal_EnterTaxNumber": "Ange ditt TAX/VAT-nummer om det finns tillgĂ€ngligt...", + "RequestInvoiceModal_EnterNotes": "Ytterligare information för din faktura... Denna anteckning kommer att skrivas i anteckningsavsnittet pĂ„ fakturan.", + "PrePayment_PayWithIyzico": "Du kommer att betala med Iyzico", + "ContinueToCheckout": "FortsĂ€tt till kassan", + "PrePayment_IyzicoRedirectionInfo": "Du kommer att omdirigeras till Iyzico Payment Gateway för att slutföra ditt köp pĂ„ ett sĂ€kert sĂ€tt.", + "PrePayment_IyzicoAcceptVisaAndMasterCard": "Iyzico tar emot Visa och MasterCard.", + "Purchase": "Köp", + "AcceptTermsAndConditions": "Jag har lĂ€st, förstĂ„tt och accepterar integritetspolicy, villkor och EULA.", + "AcceptTermsAndConditionsWarningMessage": "VĂ€nligen acceptera integritetspolicyn och villkoren", + "SelectGatewayToContinue": "VĂ€nligen vĂ€lj en Gateway för att fortsĂ€tta!", + "GatewaySelection_SelectGateway": "VĂ€lj en betalningsportal", + "GatewaySelection_RedirectionMessage": "DĂ€refter kommer du att omdirigeras till den valda betalningsgatewayens webbplats för transaktionen.", + "PaymentSucceed_PaymentSuccessMessage": "Betalning framgĂ„ngsrik", + "PaymentSucceed_ThanksForPurchase": "Tack för ditt köp!", + "PaymentSucceed_CreateYourOrganization": "Skapa din organisation", + "PaymentSucceed_AddMeAsDeveloper": "Jag Ă€r ocksĂ„ utvecklare, lĂ€gg till mig som utvecklare i min organisation.", + "PaymentSucceed_CreateOrganization": "Skapa organisation", + "PaymentSucceed_OrganizationDescription": "En organisation bestĂ„r av utvecklare och Ă€gare. Utvecklarna Ă€r anvĂ€ndare som skriver kod pĂ„ ABP-projektet och som kommer att dra nytta av webbplatsen {1}. Ägarna Ă€r anvĂ€ndare som tilldelar utvecklarplatser och hanterar licensiering.", + "PaymentSucceed_ViewOrganization": "Klicka hĂ€r för att se organisationen", + "Purchase_TotalAnnualPrice": "TOTALT (Ă„rsavgift)", + "Purchase_TrainingPrice": "Pris för utbildning", + "Purchase_OnboardingTraining": "Live-utbildning i onboarding och utveckling av webbapplikationer", + "TotalDeveloperPrice": "Totalt pris för utvecklare", + "Purchase_PricePerDeveloper": "{0} per utvecklare", + "Purchase_IncludedDeveloperInfo": "{0} {1} ingĂ„r.", + "Purchase_LicenseExtraDeveloperPurchaseMessage": "I {0} licens ingĂ„r {1} utvecklare. Du kan lĂ€gga till ytterligare utvecklare.", + "StartupTemplates_Page_Title": "ABP Startup Mallar", + "StartupTemplates_Page_Description": "Med ABP kan du bygga lösningar med valfri komplexitetsnivĂ„. Det ger tvĂ„ huvudsakliga förbyggda startlösningar. Du kan vĂ€lja den som ligger nĂ€rmast dina krav och bygga din egen anpassade lösning ovanpĂ„ den.", + "MicroserviceStartupSolutionForDotnet": "Microservice Startup-lösning för .NET", + "MonolithSolutionForDotnet": "Monolitisk (modulĂ€r) lösning för .NET", + "TrainingDetailsHeaderInfo_TrainingHour": "{0} timmar", + "Trainings_Content": "Utbildningens innehĂ„ll", + "Trial_Page_StartYourFreeTrial": "Starta din gratis provperiod.", + "TrialLicenseFeatures": "Du kommer att kunna dra nytta av alla ABP:s kommersiella funktioner", + "TrialPeriodDays": "Du kommer att ha en {0} dagars teamlicens", + "TrialForumSupportIncident": "Du kommer att ha {0} forum support incidenter", + "Contact_Page_Title": "Kontakt med ABP:s utvecklingsteam", + "Contact_Page_Description": "Kontakta ABP:s utvecklingsteam om du behöver hjĂ€lp eller dela med dig av dina tankar och Ă„sikter! ABP Support Team Ă€r redo att hjĂ€lpa till.", + "Demo_Page_Title": "Skapa en demo", + "Demo_Page_Description": "Skapa en gratis demo för att se ett exempel pĂ„ en ansökan som skapats med hjĂ€lp av ABP:s startmallar. Upprepa inte dig sjĂ€lv för vanliga applikationskrav.", + "Discounted_Page_Title": "Rabatterad prissĂ€ttning", + "Discounted_Page_Description": "VĂ€lj de funktioner och den funktionalitet som ditt företag behöver redan idag. Köp en ABP-licens och skapa obegrĂ€nsat med projekt", + "Faq_Page_Title": "Vanliga frĂ„gor och svar (FAQ)", + "Faq_Page_Description": "Har du nĂ„gra frĂ„gor eller funderingar? Sök bland vanliga frĂ„gor eller stĂ€ll en frĂ„ga till oss via kontaktformulĂ€ret.", + "Faq_Page_SwiftCode": "SWIFT-kod", + "Faq_Page_BankName": "Bankens namn", + "Faq_Page_AccountName": "Kontots namn", + "Faq_Page_AccountNumber": "Kontonummer", + "Faq_Page_Currency": "Valuta", + "Faq_Page_VatNumber": "Momsregistreringsnummer", + "Faq_Page_OtherCurrenciesInfo": "För andra valutor, se alla konton", + "ProjectCreatedSuccess_Page_Title": "Ditt projekt skapat", + "ProjectCreatedSuccess_Page_Description": "Ditt ABP-projekt har skapats framgĂ„ngsrikt!", + "Suite_Page_Title": "ABP-svit", + "Suite_Page_Description": "ABP tillhandahĂ„ller verktyg för snabb applikationsutveckling för att öka utvecklarens produktivitet. Med ABP Suite kan du enkelt skapa CRUD-sidor.", + "Themes_Page_Title": "ABP Teman", + "Themes_Page_Description": "ABP tillhandahĂ„ller flera professionella, moderna UI-teman. Skapa en gratis demo för att fĂ„ en snabb bild av hur anvĂ€ndargrĂ€nssnittet ser ut.", + "Tools_Page_Title": "Verktyg för snabb applikationsutveckling", + "Tools_Page_Description": "ABP tillhandahĂ„ller verktyg för snabb applikationsutveckling för att öka utvecklarens produktivitet. Med ABP Suite kan du enkelt skapa CRUD-sidor.", + "DeveloperPrice": "Pris för utvecklare", + "AdditionalDeveloperPaymentInfoSection_AdditionalDevelopers": "{0} utvecklare", + "LicenseRemainingDays": "för {0} dagar", + "ExtendPaymentInfoSection_Description": "Genom att förlĂ€nga/förnya din licens kommer du att fortsĂ€tta att fĂ„ premium support. Du kommer ocksĂ„ att kunna fĂ„ större eller mindre uppdateringar för moduler och teman. Du kommer att kunna fortsĂ€tta skapa nya projekt. Och du kommer fortfarande att kunna anvĂ€nda ABP Suite som pĂ„skyndar din utveckling.", + "LicenseRenewalPrice": "Pris för förnyelse av licens", + "LicensePrice": "Licenspris", + "TrialLicensePaymentInfoSection_Description": "Köp licens: Genom att köpa en licens kommer du att fortsĂ€tta att fĂ„ premium support. Du kommer ocksĂ„ att kunna fĂ„ större eller mindre uppdateringar för moduler och teman. Du kommer att kunna fortsĂ€tta skapa nya projekt. Och du kommer fortfarande att kunna anvĂ€nda ABP Suite som pĂ„skyndar din utveckling.
Se jĂ€mförelsetabellen för licenser för att kontrollera skillnaderna mellan licenstyperna.", + "SelectTargetLicense": "VĂ€lj mĂ„llicens", + "UpgradePaymentInfoSection_ExtendMyLicenseForOneYear": "Ja, förlĂ€nga min licens utgĂ„ngsdatum med 1 Ă„r.", + "UpgradePaymentInfoSection_WantToExtendLicense": "Vill du förlĂ€nga din licens med ytterligare 1 Ă„r?", + "UpgradePaymentInfoSection_UpgradingWillNotExtendLicense": "Uppgradering kommer inte att förlĂ€nga licensens utgĂ„ngsdatum!", + "UpgradePaymentInfoSection_LicenseUpgradeDescription": "Genom att uppgradera din licens kommer du att bli befordrad till en högre licenstyp, vilket gör att du kan fĂ„ ytterligare fördelar. Se jĂ€mförelsetabellen för licenser för att kontrollera skillnaderna mellan licenstyperna.", + "Landing_Page_CustomerStories": "Customer Stories", + "Landing_Page_OurGreatCustomers": "VĂ„ra fantastiska kunder", + "Landing_Page_WebApplicationFramework": "Ramverk för webbapplikationer", + "Landing_Page_WebDevelopmentPlatform": "Plattform för webbutveckling", + "Landing_Page_CompleteWebDevelopmentPlatform": "Komplett plattform för webbutveckling", + "Landing_Page_TryFreeDemo": "Prova gratis demo", + "Landing_Page_StartingPointForWebApplications": "UtgĂ„ngspunkten för ASP.NET Core-baserade webbapplikationer! Den Ă€r baserad pĂ„ ABP-ramverket för bĂ€sta webbutveckling.", + "Landing_Page_AbpProvidesSoftwareInfrastructure": "ABP Framework tillhandahĂ„ller en mjukvaruinfrastruktur för att utveckla utmĂ€rkta webbapplikationer med bĂ€sta praxis.", + "Landing_Page_MicroserviceCompatibleArchitecture": "Kompatibel arkitektur för mikrotjĂ€nster", + "Landing_Page_PreBuiltApplicationModulesAndThemes": "Förbyggda applikationsmoduler och teman", + "Landing_Page_MultiTenantArchitecture": "Arkitektur för flera hyresgĂ€ster", + "Landing_Page_MultiTenancyDescription": "SaaS-applikationer pĂ„ ett enkelt sĂ€tt! Integrerad multi-tenancy frĂ„n databas till anvĂ€ndargrĂ€nssnitt.", + "Landing_Page_DDDIntroduction": "Designad och utvecklad utifrĂ„n DDD-mönster och principer. Ger en skiktad modell för din applikation.", + "Landing_Page_CrossCuttingConcernsInfo": "Komplett infrastruktur för auktorisering, validering, undantagshantering, cachelagring, revisionsloggning, transaktionshantering med mera.", + "Landing_Page_PreBuiltApplicationModules": "Förbyggda applikationsmoduler som omfattar de vanligaste kraven pĂ„ webbapplikationer.", + "Landing_Page_ChatModule": "Chatt", + "Landing_Page_DocsModule": "Dokument", + "Landing_Page_FileManagementModule": "Filhantering", + "Landing_Page_CustomerStory_1": "ABP gjorde det möjligt för SC Ventures att leverera en bankklassad SaaS-plattform med silodatabas med flera hyresgĂ€ster pĂ„ 9 mĂ„nader för att stödja leverantörskedjans kundfordringar / leverantörsskulder för finansiering av fakturor med betydande vĂ€rde frĂ„n flera integrerade ankare. ABP:s modularitet gjorde det möjligt för teamet att leverera pĂ„ rekordtid, klara alla VAPT och distribuera den containeriserade mikrotjĂ€nststacken via fullstĂ€ndig CI/CD och pipelines till produktion.", + "Landing_Page_CustomerStory_2": "Vi ser vĂ€rdet av att anvĂ€nda ABP för att minska omkostnaderna för anpassade utvecklingsprojekt. Teamet kan förenhetliga kodmönstret i olika projektflöden. Vi ser mer potential i ramverket för att vi ska kunna bygga nya funktioner snabbare Ă€n tidigare. Vi litar pĂ„ att vi stĂ€ndigt kommer att se vĂ€rdet av att utnyttja ABP.", + "Landing_Page_CustomerStory_3": "Vi Ă€lskar ABP. Vi behöver inte skriva allt frĂ„n grunden. Vi utgĂ„r frĂ„n out-of-the-box-funktioner och fokuserar bara pĂ„ det vi verkligen behöver skriva. Dessutom Ă€r ABP vĂ€larkitekterat och koden Ă€r av hög kvalitet med fĂ€rre buggar. Om vi hade varit tvungna att skriva allt vi behövde pĂ„ egen hand hade vi kanske fĂ„tt lĂ€gga ner flera Ă„r. Ytterligare en sak som vi gillar Ă€r att den nya versionen, problemfixningen eller förbĂ€ttringen kommer ut mycket snart\n varannan vecka. Vi vĂ€ntar inte för lĂ€nge.", + "Landing_Page_CustomerStory_4": "ABP Ă€r en fantastisk produkt som jag skulle rekommendera. Kommersiella produkter till marknaden för vĂ„ra kunder i en enda konfigurerbar plattform. Den starthjĂ€lp som ramverket och verktygen ger alla team Ă€r vĂ€rd varenda cent. ABP var det som passade bĂ€st för vĂ„ra behov.", + "Landing_Page_AdditionalServices": "Anpassad eller volymlicens, onboarding, liveutbildning och support, anpassad projektutveckling, portning av befintliga projekt och mycket mer...", + "Landing_Page_IncludedDeveloperLicenses": "Inkluderar {0} utvecklarlicenser", + "Landing_Page_SeeOnDemo": "Se pĂ„ Demo", + "Landing_Page_LeptonThemes": "LeptonTema", + "Landing_Page_AccountModuleDescription_1": "Denna modul implementerar autentiseringssystemet för en applikation;", + "Landing_Page_AccountModuleDescription_2": "TillhandahĂ„ller en inloggningssida med anvĂ€ndarnamn och lösenord", + "Landing_Page_AccountModuleDescription_3": "TillhandahĂ„ller en register-sida för att skapa ett nytt konto.", + "Landing_Page_AccountModuleDescription_4": "TillhandahĂ„ller en glömt lösenord-sida för att skicka en Ă„terstĂ€llningslĂ€nk för lösenord som ett e-postmeddelande.", + "Landing_Page_AccountModuleDescription_5": "Ger email confirmation-funktionalitet med UI.", + "Landing_Page_AccountModuleDescription_6": "Implementerar tvĂ„faktor-autentisering (SMS och e-post).", + "Landing_Page_AccountModuleDescription_7": "Implementerar anvĂ€ndarspĂ€rr (lĂ„ser kontot under en viss tid nĂ€r ett visst antal misslyckade inloggningar intrĂ€ffar pĂ„ grund av ogiltiga inloggningsuppgifter inom en viss tidsperiod).", + "Landing_Page_AccountModuleDescription_8": "Implementerar anvĂ€ndargrĂ€nssnitt och funktionalitet för autentiseringsservern Identity Server.", + "Landing_Page_AccountModuleDescription_9": "Gör det möjligt att vĂ€xla mellan hyresgĂ€ster i en miljö med flera hyresgĂ€ster.", + "Landing_Page_AccountModuleDescription_10": "Gör det möjligt att Ă€ndra UI-sprĂ„k i programmet.", + "Landing_Page_AuditLoggingModuleDescription_1": "Den hĂ€r modulen tillhandahĂ„ller grĂ€nssnittet för rapportering av granskningsloggar för granskningsinfrastrukturen. Gör det möjligt att söka, filtrera och visa poster i granskningsloggen och loggar över enhetsĂ€ndringar.", + "Landing_Page_AuditLoggingModuleDescription_2": "En post i granskningsloggen bestĂ„r av kritisk information om varje klientförfrĂ„gan:", + "Landing_Page_AuditLoggingModuleDescription_3": "URL, webblĂ€sare, IP-adress, klientnamn", + "Landing_Page_AuditLoggingModuleDescription_4": "AnvĂ€ndaren", + "Landing_Page_AuditLoggingModuleDescription_5": "HTTP-metod, HTTP-returstatuskod", + "Landing_Page_AuditLoggingModuleDescription_6": "FramgĂ„ng/misslyckande, detaljer om undantag om sĂ„dana finns", + "Landing_Page_AuditLoggingModuleDescription_7": "Tid för genomförande av begĂ€ran", + "Landing_Page_AuditLoggingModuleDescription_8": "Enheterna har skapats, tagits bort eller uppdaterats i denna begĂ€ran (med Ă€ndrade egenskaper).", + "Landing_Page_BloggingModuleDescription_1": "Denna modul lĂ€gger till en enkel blogg i din ABP-applikation;", + "Landing_Page_BloggingModuleDescription_2": "Gör det möjligt att skapa flera bloggar i en och samma applikation.", + "Landing_Page_BloggingModuleDescription_3": "Stöder Markdown-formatet.", + "Landing_Page_BloggingModuleDescription_4": "Gör det möjligt att skriva en kommentar till ett inlĂ€gg.", + "Landing_Page_BloggingModuleDescription_5": "Gör det möjligt att tilldela taggar till blogginlĂ€ggen.", + "Landing_Page_BloggingModuleDescription_6": "Se webbplatsen blog.abp.io som ett levande exempel pĂ„ bloggmodulen.", + "Landing_Page_ChatModuleDescription_1": "Denna modul anvĂ€nds för realtidsmeddelanden mellan anvĂ€ndare i applikationen.", + "Landing_Page_ChatModuleDescription_2": "Meddelanden i realtid pĂ„ chatt-sidan.", + "Landing_Page_ChatModuleDescription_3": "Sök efter anvĂ€ndare i applikationen för nya konversationer.", + "Landing_Page_ChatModuleDescription_4": "Kontaktlista för senaste konversationer.", + "Landing_Page_ChatModuleDescription_5": "Meddelanden om nya meddelanden nĂ€r anvĂ€ndaren tittar pĂ„ en annan sida.", + "Landing_Page_ChatModuleDescription_6": "Symbol för totalt antal olĂ€sta meddelanden pĂ„ menyikonen.", + "Landing_Page_ChatModuleDescription_7": "Antal olĂ€sta meddelanden för varje konversation.", + "Landing_Page_ChatModuleDescription_8": "Lata laddade konversationer.", + "Landing_Page_DocsModuleDescription_1": "Denna modul anvĂ€nds för att skapa webbplatser för teknisk dokumentation;", + "Landing_Page_DocsModuleDescription_2": "Inbyggd GitHub-integration: Skriv och hantera dokument direkt pĂ„ GitHub.", + "Landing_Page_DocsModuleDescription_3": "Stöd för Versioning direkt integrerat i GitHub-utgĂ„vor.", + "Landing_Page_DocsModuleDescription_4": "Stöd för flersprĂ„kighet (med fallback-stöd till standardsprĂ„ket).", + "Landing_Page_DocsModuleDescription_5": "Stöder formaten Markdown och HTML.", + "Landing_Page_DocsModuleDescription_6": "InnehĂ„ller en navigation och en outline.", + "Landing_Page_DocsModuleDescription_7": "Gör det möjligt att hosta flera projekt dokumentation i en enda applikation.", + "Landing_Page_DocsModuleDescription_8": "LĂ€nkar till filen pĂ„ GitHub, sĂ„ att vem som helst enkelt kan bidra genom att klicka pĂ„ Edit-lĂ€nken.", + "Landing_Page_DocsModuleDescription_9": "Förutom GitHub-kĂ€llan kan du helt enkelt anvĂ€nda en mapp som dokumentationskĂ€lla.", + "Landing_Page_FileManagementModuleDescription_1": "Ladda upp, ladda ner och organisera filer i en hierarkisk mappstruktur.", + "Landing_Page_FileManagementModuleDescription_2": "Den hĂ€r modulen anvĂ€nds för att ladda upp, ladda ner och organisera filer i en hierarkisk mappstruktur. Den Ă€r ocksĂ„ kompatibel med multi-tenancy och du kan bestĂ€mma den totala storleksgrĂ€nsen för dina hyresgĂ€ster.", + "Landing_Page_FileManagementModuleDescription_3": "Den hĂ€r modulen Ă€r baserad pĂ„ BLOB-lagring-systemet, sĂ„ den kan anvĂ€nda olika lagringsleverantörer för att lagra filinnehĂ„llet.", + "Landing_Page_IdentityModuleDescription_1": "Denna modul implementerar anvĂ€ndar- och rollsystemet i en applikation;", + "Landing_Page_IdentityModuleDescription_2": "Bygger pĂ„ Microsofts ASP.NET Core Identity-bibliotek.", + "Landing_Page_IdentityModuleDescription_3": "Hantera roller och anvĂ€ndare i systemet. En anvĂ€ndare kan ha flera roller.", + "Landing_Page_IdentityModuleDescription_4": "Ange behörigheter i roll- och anvĂ€ndarnivĂ„er.", + "Landing_Page_IdentityModuleDescription_5": "Aktivera/avaktivera tvĂ„faktorautentisering och lĂ„sning av anvĂ€ndare per anvĂ€ndare.", + "Landing_Page_IdentityModuleDescription_6": "Hantera grundlĂ€ggande anvĂ€ndarprofil och lösenord.", + "Landing_Page_IdentityModuleDescription_7": "Hantera ansprĂ„kstyper i systemet, koppla ansprĂ„k till roller och anvĂ€ndare.", + "Landing_Page_IdentityModuleDescription_8": "InstĂ€llningssida för att hantera lösenordskomplexitet, anvĂ€ndarinloggning, konto och spĂ€rr.", + "Landing_Page_IdentityModuleDescription_9": "Stöd för LDAP-autentisering.", + "Landing_Page_IdentityModuleDescription_10": "Ger verifiering av e-postadress och telefonnummer.", + "Landing_Page_IdentityModuleDescription_11": "Stödjer integrering av sociala inloggningar (Twitter, Facebook, GitHub etc.).", + "Landing_Page_IdentityModuleDescription_12": "Hantera organisationsenheter i systemet.", + "Landing_Page_PaymentModuleDescription_1": "Ger integration för olika betalningsgateways.", + "Landing_Page_PaymentModuleDescription_2": "Denna modul ger integration för betalningsgateways, sĂ„ att du enkelt kan fĂ„ betalning frĂ„n dina kunder.", + "Landing_Page_PaymentModuleDescription_3": "Denna modul stöder följande betalningsportaler", + "Welcome_Page_UseSameCredentialForCommercialWebsites": "AnvĂ€nd samma autentiseringsuppgifter för bĂ„de abp.io och abp.io/support.", + "WatchCrudPagesVideo": "Titta pĂ„ videon \"Skapa CRUD-sidor med ABP Suite\"!", + "WatchGeneratingFromDatabaseVideo": "Titta pĂ„ videon \"ABP Suite: Generera CRUD-sidor frĂ„n befintliga databastabeller\" Video!", + "WatchTakeCloserLookVideo": "Titta pĂ„ videon \"Ta en nĂ€rmare titt pĂ„ kodgenerering: ABP Suite\" Video!", + "ConfirmedEmailAddressRequiredToStartTrial": "Du mĂ„ste ha en bekrĂ€ftad e-postadress för att kunna starta en testlicens.", + "EmailVerificationMailNotSent": "E-postverifiering mail kunde inte skickas.", + "GetConfirmationEmail": "Klicka hĂ€r för att fĂ„ ett verifieringsmejl om du inte har fĂ„tt det tidigare.", + "WhichLicenseTypeYouAreInterestedIn": "Vilken licenstyp Ă€r du intresserad av?", + "DontTakeOurWordForIt": "Ta inte vĂ„rt ord för det...", + "ReadAbpCommercialUsersWantYouToKnow": "LĂ€s vad ABP:s anvĂ€ndare vill att du ska veta", + "Testimonial_ShortDescription_1": "ABP:s modularitet gjorde det möjligt för teamet att leverera i tid.", + "Testimonial_ShortDescription_2": "Bygg nya funktioner snabbare Ă€n tidigare.", + "Testimonial_ShortDescription_3": "Vi utgĂ„r frĂ„n out-of-the-box-funktioner och fokuserar bara pĂ„ det som vi verkligen behöver skriva.", + "Testimonial_ShortDescription_4": "ABP passade bĂ€st för vĂ„ra behov.", + "OnlineReviewersOnAbpCommercial": "Online recensioner om ABP", + "SeeWhatToldAboutAbpCommercial": "Se vad som har sagts om ABP och skriv dina tankar om du vill.", + "BlazoriseLicense": "MĂ„ste vi köpa en Blazorise-licens?", + "BlazoriseLicenseExplanation": "Vi har ett avtal mellan Volosoft och Megabit, med detta avtal Ă€r Blazorise-licensen buntad med ABP-produkter, dĂ€rför behöver vĂ„ra kunder inte köpa en extra Blazorise-licens.", + "ExtendPaymentInfoSection_DeveloperPrice": "{0}x Ytterligare utvecklare", + "ExtendPaymentInfoSection_DiscountRate": "Rabatt {0}%.", + "TotalNetPrice": "Totalt nettopris", + "EFCore": "Entity Framework Core", + "All": "Alla", + "Mvc": "MVC", + "DataBaseProvider": "Dataleverantör", + "UIFramework": "Ramverk för anvĂ€ndargrĂ€nssnitt", + "LeptonXThemeForDashboard": "LeptonX Theme för din Admin Dashboard av", + "AbpPlatform": "ABP-plattform", + "YouDeserveGoodUXUI": "Du förtjĂ€nar ett bra UI och ett bĂ€ttre UX. LeptonX Theme by ABP Ă€r hĂ€r för att tjĂ€na det.", + "ViewLiveDemo": "Visa demo för live-tema", + "GetLeptonX": "Skaffa LeptonX nu", + "SeeLeptonXDocumentation": "Se LeptonX dokumentation", + "SeeLeptonDocumentation": "Se Lepton Dokumentation", + "SimplifiedMenu": "Förenklad meny", + "SimplifiedMenuDescription": "Du kan enkelt hitta den sida du letar efter genom att filtrera i menyn", + "YourFavoritePages": "Dina favoritsidor inom rĂ€ckhĂ„ll", + "YourFavoritePagesDescription": "LĂ€gg enkelt till eller ta bort sidan frĂ„n favoriter genom att klicka pĂ„ stjĂ€rnikonen i det övre högra hörnet av sidan.", + "BreadCrumbs": "Breadcrumb för sömlös vĂ€xling", + "BreadCrumbsDescription": "Med Breadcrumb kan du vĂ€xla till sidorna pĂ„ samma nivĂ„ med ett klick, Ă€ven nĂ€r vĂ€nstermenyn Ă€r stĂ€ngd, och det fungerar pĂ„ surfplattor och mobiler!", + "YourMenu": "Din meny som du vill ha den", + "YourMenuDescription": "Anpassa de direktklickbara ikonerna och rullgardinsmenyerna i anvĂ€ndarmenyn som du vill. AnvĂ€ndarmenyn Ă€r helt anpassningsbar efter dina behov", + "RtlSupport": "RTL-stöd för ditt sprĂ„k", + "RtlSupportDescription": "LeptonX Theme stöder RTL för ditt sprĂ„k. SprĂ„kalternativen finns i instĂ€llningsmenyn sĂ„ att du kan Ă€ndra sprĂ„k.", + "YourColors": "Dina fĂ€rger i grĂ€nssnittet för din adminpanel", + "YourColorsDescription": "LeptonX Theme fungerar enligt dina systeminstĂ€llningar och har alternativ för dashboard light theme, dashboard dark theme och dashboard semi-dark theme.", + "ArrangeContentWidth": "Ordna enkelt bredden pĂ„ ditt innehĂ„ll", + "ArrangeContentWidthDescription": "Ändra enkelt bredden pĂ„ din innehĂ„llsyta.", + "LeptonXCompatibleWith": "LeptonX Theme Ă€r kompatibelt med", + "MobileResponsiveTemplate": "Mobil responsiv mall", + "MobileResponsiveTemplateDescription1": "FĂ„ tillgĂ„ng till LeptonX adminpanel frĂ„n vilken enhet du vill.", + "MobileResponsiveTemplateDescription2": "Den Ă€r utformad för att du enkelt ska kunna anvĂ€nda den i alla dina enheter. Den Ă€r responsiv pĂ„ mobila enheter och surfplattor.", + "TopMenuLayoutOption": "Alternativ för layout av toppmeny", + "TopMenuLayoutOptionDescription1": "Om du vill konfigurera din webbplats med samma adminpanel Ă€r det möjligt att göra det med LeptonX Theme!", + "TopMenuLayoutOptionDescription2": "Prova bara LeptonX toppmenylayout för att fĂ„ det att hĂ€nda!", + "EasilyCustomizable": "LĂ€tt att anpassa till ditt varumĂ€rkes fĂ€rger", + "EasilyCustomizableDescription1": "Du kan anpassa LeptonX-temat med bara nĂ„gra fĂ„ SCSS-variabler. Ingen Ă„sidosĂ€ttning, ingen extra CSS-belastning!", + "EasilyCustomizableDescription2": "Med LeptonX kan du ordna din adminpanel precis som du vill.", + "IndependentLayout": "Oberoende layout och innehĂ„llsyta", + "IndependentLayoutDescription1": "LeptonX:s layoutinfrastruktur utformades helt separat frĂ„n innehĂ„llet.", + "IndependentLayoutDescription2": "Detta innebĂ€r att du fritt kan utforma ditt projekt med en annan innehĂ„llsstruktur Ă€n Bootstrap om du vill.", + "MostUsedLibraries": "De mest anvĂ€nda biblioteken integrerade med LeptonX", + "MostUsedLibrariesDescription1": "LeptonX innehĂ„ller dina mest anvĂ€nda bibliotek. Det gör att du enkelt kan anvĂ€nda bibliotek som ApexCharts, DataTables, DropZone, FullCalender, JSTree, Select2 och Toastr.", + "MostUsedLibrariesDescription2": "LeptonX stöder ocksĂ„ MVC Angular och Blazor-specifika bibliotek.", + "CreateAndCustomize": "Skapa och anpassa de sidor du behöver pĂ„ nĂ„gra sekunder med LeptonX anpassade sidor", + "CreateAndCustomizeDescription": "Genom att anvĂ€nda LeptonX Theme fĂ„r du ocksĂ„ tillgĂ„ng till mĂ„nga fĂ€rdiga HTML-sidor. Dessa inkluderar mĂ„nga sidor som inloggningssida, blogg, FAQ, prenumerationslista, faktura, prissĂ€ttning och filhantering.", + "LeptonThemeForAdmin": "Lepton Theme för din adminpanel genom att", + "LeptonThemeForAdminDescription": "Lepton Theme Ă€r fortfarande tillgĂ€ngligt och kommer att underhĂ„llas. Om du vill byta till LeptonX Theme som Lepton Theme-anvĂ€ndare kan du se dokumentationen för att lĂ€ra dig hur du gör.", + "LeptonCompatibleWith": "Lepton Theme Ă€r kompatibelt med", + "BlackFridayDiscount": "Black Friday-rabatt", + "UpgradePaymentInfoSection_DeveloperPrice": "{0} för {1} ytterligare utvecklare", + "Upgrade": "Uppgradering", + "Renewal": "Förnyelse", + "UpgradePaymentInfoSection_LicensePrice": "{0} licens", + "UpgradePaymentInfoSection_LicenseRenewalPrice": "Förnyelse av licens", + "Total": "Totalt", + "SupportPolicyFaqTitle": "Vilken Ă€r er supportpolicy?", + "SupportPolicyFaqExplanation": "Vi stöder endast den aktiva och den tidigare huvudversionen. Vi garanterar inte en patchrelease för den tredje och Ă€ldre huvudversionen. Till exempel, om den aktiva versionen Ă€r 7.0.0, kommer vi att slĂ€ppa patchversioner för bĂ„de 6.x.x och 7.x.x. Dessutom ger vi support endast för ABP Framework och ABP-relaterade problem. Det betyder att inget stöd ges för tredjepartsapplikationer, molntjĂ€nster och andra perifera bibliotek som anvĂ€nds av ABP-produkter. Vi kommer att anvĂ€nda kommersiellt rimliga anstrĂ€ngningar för att ge vĂ„ra kunder teknisk support under \"Volosoft Bilisim A.S\" officiella öppettider. Å andra sidan förbinder vi oss inte till en svarstid enligt servicenivĂ„avtal (SLA), men vi kommer att försöka svara pĂ„ de tekniska frĂ„gorna sĂ„ snabbt som möjligt inom vĂ„ra officiella arbetstider. Om inte en sĂ€rskild överenskommelse görs med kunden tillhandahĂ„ller vi endast support pĂ„ https://support.abp.io. Vi har ocksĂ„ en privat e-postsupport som endast Ă€r tillgĂ€nglig för innehavare av Enterprise-licenser.", + "TotalDevelopers": "Totalt {0} utvecklare", + "CustomPurchaseExplanation": "SkrĂ€ddarsydd för dina specifika behov", + "WhereDidYouHearAboutUs": "Var har du hört talas om oss?", + "Twitter": "Twitter", + "Facebook": "Facebook", + "Youtube": "YouTube", + "Google": "Google", + "Github": "GitHub", + "Friend": " FrĂ„n en vĂ€n", + "Other": "Övriga", + "WhereDidYouHearAboutUs_explain": "Ange ...", + "DeletingMemberWarningMessage": "\"{0}\" kommer att tas bort frĂ„n listan över utvecklare. Om du vill kan du tilldela denna tomma plats till en annan utvecklare senare.", + "AdditionalInfo": "Om antalet platser för utvecklare överstiger dina krav kan du minska dem. Du kan skicka e-post till info@abp.io för att ta bort nĂ„gra av dina utvecklarplatser. Om du rensar bort oanvĂ€nda utvecklarplatser minskar kostnaden för licensförnyelse. Om du vill kan du Ă„terköpa ytterligare utvecklarplatser inom din aktiva licensperiod. Observera att eftersom det finns {0} utvecklare i det hĂ€r licenspaketet kan du inte minska detta antal.", + "LinkExpiredErrorMessage": "LĂ€nken du försöker komma Ă„t har gĂ„tt ut.", + "ExpirationDate": "UtgĂ„ngsdatum", + "SpringCampaignDiscount": "Rabatt pĂ„ vĂ„rkampanjen", + "WhyUseAbpIoPlatform": "Varför ska jag anvĂ€nda ABP.IO-plattformen i stĂ€llet för att skapa en ny lösning frĂ„n grunden?", + "WhyUseAbpIoPlatformFaqExplanation": "Se den sidan för en detaljerad förklaring av varför anvĂ€ndning av ABP.IO Platform har en betydande fördel jĂ€mfört med att göra allt sjĂ€lv.", + "EulaPageTitle": "Licensavtal för slutanvĂ€ndare (EULA)", + "PrivacyPolicyPageTitle": "Integritetspolicy - Cookiepolicy", + "TermsConditionsPageTitle": "Villkor och anvisningar", + "TrainingsPageTitle": "ABP:s utbildningspaket", + "ModulesPageTitle": "ABP Förbyggda applikationsmoduler", + "Volo.AbpIo.Commercial:040001": "API-Ă„tkomstnyckeln Ă€r felaktig.", + "GetLepton": "Skaffa Lepton nu", + "MyOrganizations_Detail_LicenseStartDate": "Startdatum", + "MyOrganizations_Detail_LicenseExpiryDate": "UtgĂ„ngsdatum", + "BlazoriseSupport": "Hur fĂ„r jag Blazorise-licensnyckeln och support frĂ„n Blazorise-teamet?", + "BlazoriseSupportExplanation": "Följ stegen nedan för att fĂ„ support frĂ„n Blazorise-teamet och fĂ„ din Blazorise-licensnyckel:", + "BlazoriseSupportExplanation1": "Registrera dig för ett nytt konto pĂ„ blazorise.com/support/register med samma e-postadress som ditt abp.io-konto. LĂ€mna posten \"Licensnyckel\" tom. Det mĂ„ste vara samma e-postadress som ditt e-postkonto pĂ„ abp.io.", + "BlazoriseSupportExplanation2": "Verifiera din e-postadress genom att kolla din e-postlĂ„da. Kontrollera din skrĂ€ppostlĂ„da om du inte ser ett e-postmeddelande i din inkorg!", + "BlazoriseSupportExplanation3": "Logga in pĂ„ Blazorise supportwebbplats pĂ„ blazorise.com/support/login.", + "BlazoriseSupportExplanation4": "Om du har en aktiv ABP betald licens kommer du ocksĂ„ att ha en Blazorise PRO-licens. Du kan fĂ„ din Blazorise-licensnyckel pĂ„ blazorise.com/support/user/manage/license.", + "BlazoriseSupportExplanation5": "Du kan stĂ€lla dina frĂ„gor pĂ„ supportwebbplatsen och generera en produkttoken för din applikation.", + "AbpLiveTrainingPackages": "ABP Live utbildningspaket", + "Releases": "UtgĂ„vor", + "ReleasesDescription": "Den hĂ€r sidan innehĂ„ller detaljerad information om varje release. Du kan se alla stĂ€ngda pull requests för en specifik release. För övergripande milstolpsutvecklingar kan du kolla in sidan med kortfattade releaseanteckningar.", + "ReleaseDate": "Utgivningsdatum", + "Labels": "Etiketter", + "PreRelease": "Förhandsrelease", + "AllTypes": "Alla typer", + "Enhancement": "FörbĂ€ttring", + "Bug": "Insekt", + "Feature": "Funktion", + "AllUIs": "Alla anvĂ€ndargrĂ€nssnitt", + "MVC": "MVC", + "BlazorServer": "Blazor Server", + "MAUI": "MAUI", + "HowItWorks_Page_Title": "Hur fungerar det?", + "HowItWorks_Page_Description": "ABP Framework utökar .NET-plattformen. SĂ„ allt du kan göra med en vanlig .NET-lösning Ă€r redan möjligt med ABP Framework. Det gör det enkelt att komma igĂ„ng med en lĂ„g inlĂ€rningskurva.", + "HowItWorks_Description1": "ABP Framework utökar .NET-plattformen. SĂ„ allt du kan göra med en vanlig .NET-lösning Ă€r redan möjligt med ABP Framework. Det gör det enkelt att komma igĂ„ng med en lĂ„g inlĂ€rningskurva.", + "HowItWorks_Description2": "NĂ€r du vĂ€l har börjat lĂ€ra dig och anvĂ€nda ABP Framework-funktionerna kommer det att bli mycket roligare Ă€n nĂ„gonsin att utveckla din programvara.", + "HowItWorks_Description3": "Den hĂ€r sidan förklarar i princip hur du anvĂ€nder ABP.IO Platform som .NET-utvecklare.", + "CreateANewSolution": "Skapa en ny .NET-lösning", + "CreateANewSolution_Description1": "Allt börjar med att skapa en ny ABP-integrerad .NET-lösning.", + "StartWithStartupTemplates": "Starta en av de förbyggda mallarna för startup-lösningar", + "SimpleMonolithApplicationTemplate": "Enkel mall för monolitisk applikation", + "LayeredApplicationTemplate": "Skiktad applikationsmall", + "MicroserviceSolutionTemplate": "Mall för mikroservicelösning", + "CreateEmptySolutionAndUseAbp": "Eller skapa en ny tom .NET-lösning och installera ABP NuGet & NPM paket sjĂ€lv.", + "CreatingSolutionWithMultipleOptions": "Det finns flera alternativ för anvĂ€ndargrĂ€nssnitt och databas nĂ€r du skapar en ny lösning.", + "UIFrameworkOptions": "Alternativ för anvĂ€ndargrĂ€nssnitt", + "DotnetSolutionWithoutDependency": "Nu har du en vanlig .NET-lösning i din lokala dator som inte Ă€r beroende av nĂ„gon molnplattform eller extern tjĂ€nst.", + "CheckTheDocumentForDetails": "Du kan kontrollera {1} dokumentet för detaljer.", + "UIAndDatabaseIndependent": "ABP kan fungera med alla anvĂ€ndargrĂ€nssnitt och alla databasleverantörer som stöds av .NET.\n Dessa anvĂ€ndargrĂ€nssnitt och databasleverantörer Ă€r dock förintegrerade och vĂ€ldokumenterade.", + "InstallAbpModules": "Installera ABP-moduler", + "DevelopYourSolution": "Utveckla din lösning", + "DeployAnywhere": "Distribuera var som helst", + "InstallAbpModule_Description1": "ABP Ă€r ett modulĂ€rt ramverk för applikationsutveckling. Mallarna för startup-lösningar levereras redan med de viktigaste modulerna installerade.\n Men det finns fler applikationsmoduler som du kanske vill anvĂ€nda i din lösning.", + "InstallAbpModule_Description2": "Varje modul bestĂ„r av ett fĂ„tal NuGet- och NPM-paket och har ett installationsdokument. ABP Suite gör det mesta av arbetet automatiskt, sedan konfigurerar eller finjusterar du modulen manuellt baserat pĂ„ dess dokumentation.", + "DevelopYourSolution_Description1": "ABP:s infrastruktur gör att du kan fokusera pĂ„ din egen affĂ€rskod genom att automatisera det repetitiva arbetet och tillhandahĂ„lla förbyggd infrastruktur och applikationsfunktioner.", + "DevelopYourSolution_Description2": "I följande kodblock kan du se hur ABP Framework sömlöst integreras i din kod och automatiserar de repetitiva uppgifterna Ă„t dig.", + "DevelopYourSolution_Description3": "Även i detta kortkodsblock gör ABP en hel del saker Ă„t dig.", + "DevelopYourSolution_Description4": "Den tillhandahĂ„ller basklasser för att tillĂ€mpa konventioner, som\n dependency injection. Generiska\n repository tjĂ€nster ger ett bekvĂ€mt sĂ€tt att\n sĂ€tt att interagera med databasen. Deklarativ\n auktorisering arbetar med ett finjusterat behörighetssystem.", + "DevelopYourSolution_Description5": "ABP automatiserar helt och hĂ„llet\n arbetsenhet (för databasanslutning och transaktionshantering),\n undantagshantering,\n validering\n och auditloggning. Det ger mĂ„nga fler byggstenar för att förenkla dina dagliga utvecklingsuppgifter och fokusera pĂ„ din egen kod medan du skapar produktionsklara\n applikationer.", + "DevelopYourSolution_Description6": "Du kan förestĂ€lla dig hur lĂ„ngt och komplicerat det kodblocket kan bli om du skulle göra allt manuellt.", + "SuiteCrudGenerationInFewSeconds": "Förutom att handkoda din lösning kan du skapa fullt fungerande avancerade CRUD-sidor pĂ„ nĂ„gra minuter med hjĂ€lp av ABP Suite-verktyget. Det genererar koden till din lösning, sĂ„ att du kan finjustera den utifrĂ„n dina anpassade krav.", + "DeployAnywhere_Description1": "I slutĂ€ndan har du en ren .NET-lösning. Du kan distribuera din lösning till din egen server, till en molnplattform, till Kubernetes eller var du vill. Du kan distribuera till sĂ„ mĂ„nga servrar som du vill. ABP Ă€r ett agnostiskt verktyg för driftsĂ€ttningsmiljöer.", + "ExpertiseAbpFramework": "Expertis ABP-ramverket", + "ExpertiseAbpFramework_Description1": "Vill du gĂ„ lĂ€ngre Ă€n till grunderna och fĂ„ expertis inom ABP.IO-plattformen?", + "FreeDownload": "Fri nedladdning", + "Read": "LĂ€s", + "HavingTrouble": "Har du problem?", + "HavingTrouble_Description1": "Har du problem med att utveckla din lösning? Vi finns hĂ€r för dig! AnvĂ€nd ABP:s supportplattform\n eller skicka ett e-postmeddelande för att fĂ„ hjĂ€lp direkt frĂ„n Core ABP Framework-teamets medlemmar.", + "WeAreHereToHelp_Description1": "Du kan blĂ€ddra bland vĂ„ra hjĂ€lpĂ€mnen eller söka i vanliga frĂ„gor,\n eller sĂ„ kan du stĂ€lla en frĂ„ga till oss genom att anvĂ€nda kontaktformulĂ€ret.", + "OtherModules": "Övriga moduler", + "OtherModules_Description1": "Konto, Audit Logging, Chatt, CMS Kit, Filhantering, FormulĂ€r, GDPR, Identitet, SprĂ„khantering, Betalning, Saas och mer ...", + "HowItWorks_DatabaseProviderOptions": "Alternativ för databasleverantör", + "SeeFAQ": "Se vanliga frĂ„gor", + "ReleaseLogs": "Release Loggar", + "ReleaseLogs_Tag": "{0} Loggar för frislĂ€ppande", + "ReleaseLogs_Pr": "Pull Request #{0} - {1}", + "NoLabels": "Inga etiketter", + "DoesTheSubscriptionRenewAutomatically": "Förnyas abonnemanget automatiskt?", + "DoesTheSubscriptionRenewAutomaticallyExplanation": "ABP.IO-plattformen har inte en faktureringsmodell för automatisk förnyelse. DĂ€rför kommer din prenumeration inte att förnyas automatiskt i slutet av din licensperiod. Om du vill fortsĂ€tta att ha fördelarna med ABP.IO-plattformen mĂ„ste du förnya den manuellt pĂ„ sidan för organisationshantering. Om du har flera organisationer klickar du pĂ„ knappen \"Hantera\" pĂ„ din organisation som löper ut och klickar sedan pĂ„ knappen \"FörlĂ€ng nu\" för att förnya din licens. Du kanske ocksĂ„ vill ta en titt pĂ„ avsnittet Vad hĂ€nder nĂ€r min licens gĂ„r ut?.", + "DoesTheSubscriptionRenewAutomaticallyExplanationAutoRenewal": "ABP tillĂ„ter dig att automatiskt förnya din licens. Detta Ă€r en valfri tjĂ€nst. Du kan vĂ€xla den hĂ€r funktionen nĂ€r du köper en ny licens eller senare aktivera den frĂ„n din organisationshanteringssida. VĂ€xling för automatisk förnyelse finns i avsnittet \"Betalningsmetod\" pĂ„ organisationshanteringssidan. Om du vill stĂ€nga av automatisk förnyelse, besök organisationshanteringssidan, gĂ„ till avsnittet \"Betalningsmetod\" och avmarkera kryssrutan \"Automatisk förnyelse\". NĂ€r du stĂ€nger av funktionen för automatisk förnyelse mĂ„ste du förnya din licens sjĂ€lv.", + "ExtraQuestionCreditsFaqTitle": "Kan jag köpa extra poĂ€ng för supportfrĂ„gor?", + "ExtraQuestionCreditsFaqExplanation": "Ja, det kan du göra. För att köpa extra frĂ„gepoĂ€ng, skicka ett e-postmeddelande till info@abp.io med din organisations namn. HĂ€r Ă€r prislistan för de extra frĂ„gekrediterna:
  • 50 frĂ„gor paket $999
  • 25 frĂ„gor paket $625
  • 15 frĂ„gor paket $450
", + "AlreadyBetaTester": "Du har redan gĂ„tt med i betatestarprogrammet.", + "AbpStudio": "ABP Studio", + "AbpStudio_Description": "ABP Studio Ă€r fortfarande under utveckling. Du kan fylla i formulĂ€ret nedan för att bli en av de första anvĂ€ndarna.", + "AbpStudio_Description1": "ABP Studio Ă€r en plattformsoberoende skrivbordsapplikation för ABP-utvecklare.", + "AbpStudio_Description2": "Det Ă€r vĂ€l integrerat i ABP-ramverket och syftar till att tillhandahĂ„lla en bekvĂ€m utvecklingsmiljö för dig genom att automatisera saker, ge insikter om din lösning, vilket gör det mycket enklare att utveckla, köra och distribuera dina lösningar.", + "AbpStudio_ComingSoon": "Om du vill testa ABP Studio före alla andra kan du bli BETA-testare", + "AbpStudio_PlannedPreviewDate": "Planerat utgivningsdatum för förhandsvisning: Q4 Ă„r 2023.", + "BetaRequest": "Beta förfrĂ„gan", + "CreateNewSolutions": "Skapa nya lösningar", + "CreateNewSolutions_Description1": "Du kan enkelt skapa allt frĂ„n enkla applikationer till modulĂ€ra monolit- eller mikroservicelösningar med mĂ„nga alternativ. Du fĂ„r en fullstĂ€ndig produktionsfĂ€rdig basprogramvarulösning för ditt företag.", + "ArchitectYourSolutions": "Arkitekt för dina lösningar", + "ArchitectYourSolutions_Description1": "Bygg enklare monolitiskt modulĂ€ra och mikrotjĂ€nstbaserade lösningsstrukturer genom att skapa moduler eller tjĂ€nster och upprĂ€tta relationer mellan dem. Du kan ocksĂ„ installera eller avinstallera förbyggda applikationsmoduler.", + "ExploreYourSolution": "Utforska din lösning", + "ExploreYourSolution_Description1": "ABP Studio visar en vy pĂ„ hög nivĂ„ av komponenterna i din lösning och de moduler som din lösning Ă€r beroende av. Du kan utforska entiteter, tjĂ€nster, HTTP API:er och mycket mer utan att behöva öppna din kodbas.", + "RunMultiApplicationOrMicroserviceSolutionsInABreeze": "Kör multiapplikations- eller microservice-lösningar pĂ„ ett kick", + "RunMultiApplicationOrMicroserviceSolutionsInABreeze_Description1": "Kör en, flera eller alla tjĂ€nster med ett enda klick. PĂ„ sĂ„ sĂ€tt Ă€r det mycket enkelt att stoppa en tjĂ€nst, köra den i Visual Studio för att testa eller debugga.", + "RunMultiApplicationOrMicroserviceSolutionsInABreeze_Description2": "Se en lista över tjĂ€nster, visa HTTP Request i realtid och antal undantag för varje tjĂ€nst.", + "RunMultiApplicationOrMicroserviceSolutionsInABreeze_Description3": "Se alla detaljer om alla HTTP-begĂ€randen som kommer till en tjĂ€nst.", + "RunMultiApplicationOrMicroserviceSolutionsInABreeze_Description4": "Utforska undantagsdetaljer i realtid i alla tjĂ€nster, filtrera och sök enkelt.", + "RunMultiApplicationOrMicroserviceSolutionsInABreeze_Description5": "Visa applikationsloggarna, filtrera efter loggnivĂ„ eller sök efter text...", + "RunMultiApplicationOrMicroserviceSolutionsInABreeze_Description6": "BlĂ€ddra genom anvĂ€ndargrĂ€nssnittet i din applikation utan att lĂ€mna solution runner.", + "IntegrateToYourKubernetesCluster": "Integrera till ditt Kubernetes-kluster", + "IntegrateToYourKubernetesCluster_Description1": "Koppla din lokala utvecklingsmiljö till ett lokalt eller avlĂ€gset Kubernetes-kluster, dĂ€r klustret redan kör din mikrotjĂ€nstlösning.", + "IntegrateToYourKubernetesCluster_Description2": "FĂ„ Ă„tkomst till alla tjĂ€nster i Kubernetes med deras tjĂ€nstenamn som DNS, precis som om de körs pĂ„ din lokala dator.", + "IntegrateToYourKubernetesCluster_Description3": "Interceptera vilken tjĂ€nst som helst i det klustret, sĂ„ att all trafik till den intercepterade tjĂ€nsten automatiskt omdirigeras till din tjĂ€nst som körs i din lokala maskin. NĂ€r din tjĂ€nst behöver anvĂ€nda nĂ„gon tjĂ€nst i Kubernetes omdirigeras trafiken tillbaka till klustret, precis som om din lokala tjĂ€nst körs inuti Kubernetes.", + "GetInformed": "Bli informerad", + "Studio_GetInformed_Description1": "LĂ€mna din kontaktinformation för att fĂ„ information och pröva först nĂ€r ABP Studio har lanserats.", + "Studio_GetInformed_Description2": "Planerat utgivningsdatum för förhandsvisning: Q3 Ă„r 2023.", + "ThankYou!": "Tack sĂ„ mycket!", + "SendBetaRequest": "Skicka Beta förfrĂ„gan", + "YouJoinedTheBetaTesterProgram": "Du har gĂ„tt med i betatestarprogrammet för ABP Studio.", + "PricingExplanation2": "30 dagars pengarna tillbaka-garanti - LĂ€s mer", + "MoneyBackGuaranteeText": "* 30-dagars pengarna-tillbaka-garanti pĂ„ alla licenser! 100% Ă„terbetalning pĂ„ Team-, 60% Ă„terbetalning pĂ„ Business- och Enterprise-licenser inom 30 dagar.", + "MobileApplicationStartupTemplates": "Mallar för uppstart av mobilapplikationer", + "MobileApplicationStartupTemplates_Description1": "Integrerade startmallar för mobilapplikationer för dina ABP-lösningar.", + "CreatePowerfulLineOfBusinessApplicationsUsingABPMobileStartupTemplates": "Skapa kraftfulla affĂ€rsapplikationer med hjĂ€lp av ABP Mobile Startup Templates", + "CreatePowerfulLineOfBusinessApplicationsUsingABPMobileStartupTemplates_Description1": "ABP tillhandahĂ„ller tvĂ„ startmallar för mobilapplikationer som implementerats med React Native och .NET MAUI. NĂ€r du skapar din nya ABP-baserade lösning kommer du ocksĂ„ att ha grundlĂ€ggande startapplikationer som Ă€r anslutna till dina backend-API:er.", + "CreatePowerfulLineOfBusinessApplicationsUsingABPMobileStartupTemplates_Description2": "Applikationen har en förbyggd autentiseringstokencykel, stöd för flera sprĂ„k, stöd för flera behörigheter, inloggning, glömt lösenord, profilhantering och en anvĂ€ndarhanteringssida. Du kan lĂ€gga till din egen affĂ€rslogik och anpassa den utifrĂ„n dina krav.", + "TwoFrameworkOptions": "TvĂ„ alternativ för ramverk", + "TwoFrameworkOptions_Description": "ABP tillhandahĂ„ller bĂ„de React Native och .NET MAUI mobila startup-mallar. PĂ„ sĂ„ sĂ€tt kan du vĂ€lja den som bĂ€st passar dina behov. BĂ„da apparna Ă„teranvĂ€nder kod i den högsta graden mellan iOS- och Android-plattformarna.", + "PreIntegratedToYourBackend": "Förintegrerad till din backend", + "PreIntegratedToYourBackend_Description": "ABP Mobile-applikationer Ă€r förintegrerade med dina backend-API:er. Den fĂ„r en giltig autentiseringstoken frĂ„n servern och gör autentiserade förfrĂ„gningar.", + "MultiLanguage": "FlersprĂ„kig", + "MultiLanguage_Description": "Det stöder redan mer Ă€n 10 sprĂ„k ur lĂ„dan. Du kan ocksĂ„ lĂ€gga till ytterligare sprĂ„k.", + "Arabic": "Arabiska", + "Czech": "Tjeckien", + "English": "Engelska", + "Hungarian": "Ungerska", + "Finnish": "Finska", + "French": "Franska", + "Hindi": "Hindi", + "Portuguese": "Portugisiska", + "Italian": "Italienska", + "Russian": "Ryska", + "Slovak": "Slovakien", + "Turkish": "Turkiska", + "EngageAndRetainYourCustomersWithABPMobileApps": "Engagera och behĂ„ll dina kunder med ABP:s mobilappar", + "EngageAndRetainYourCustomersWithABPMobileApps_Description1": "Dina kunder vill kunna hantera sina produkter och prenumerationer var som helst och nĂ€r som helst. Det krĂ€ver att organisationer skapar mobilappar som gör det möjligt för kunderna att uppfylla sina önskemĂ„l snabbt och smidigt.", + "EngageAndRetainYourCustomersWithABPMobileApps_Description2": "Med ABP Mobile apps kan du skapa högkvalitativa native mobilappar för Android och iOS... med en enda kodbas och utan att kompromissa med sĂ€kerhet, kvalitet eller skalbarhet.", + "OneCodeBaseMultipleDevices": "En kodbas Flera enheter", + "OneCodeBaseMultipleDevices_Description": "ABP:s mobilapplikationer Ă€r plattformsoberoende. De Ă€r redo att installeras och köras pĂ„ iOS- och Android-enheter, och de anpassar sig till olika formfaktorer med hjĂ€lp av en enda kodbas. Utvecklare behöver bara skapa anvĂ€ndargrĂ€nssnittet och front-end-koden en gĂ„ng, det finns inget behov av att anpassa koden för varje enhet du vill stödja.", + "ComesWithTheSourceCode": "Levereras med kĂ€llkoden", + "ComesWithTheSourceCode_Description": "Mobilapparna Ă€r försedda med kĂ€llkod. Anpassa enkelt UX/UI för dina appar för att uppfylla riktlinjerna för varumĂ€rkesprofilering.", + "Purchase_OneYearPrice": "1 Ă„r Pris", + "Purchase_DeveloperSeatCount": "Antal platser för utvecklare", + "Purchase_DevelopersAlreadyIncluded": "{0} utvecklare redan inkluderade", + "1Year": "1 Ă„r", + "{0}Years": "{0} Ă„r", + "1YearLicense": "1 Ă„rs licens", + "{0}YearsLicense": "{0} År Licens", + "1AdditionalDeveloper": "1 ytterligare utvecklare", + "{0}AdditionalDevelopers": "{0} Ytterligare utvecklare", + "Discount": "Rabatt ({0}%)", + "Summary": "Sammanfattning", + "TrainingPack": "Utbildningspaket", + "TrainingPackDiscount": "Rabatt pĂ„ utbildningspaket", + "Purchase_OnboardingTraining_Description": "Denna liveutbildning Ă€r giltig för en klass med 8 elever och denna rabatt Ă€r endast giltig nĂ€r den köps med den nya licensen. LĂ€s mer ", + "Purchase_Save": "{0}% Spara {1}", + "RemoveBasket": "Ta bort frĂ„n korgen", + "WhyABPIOPlatform?": "Varför ABP.IO Platform?", + "DocumentAim": "Detta dokument syftar till att besvara den stora frĂ„gan:", + "DocumentAim_Description": "\"Varför ska man anvĂ€nda ABP.IO-plattformen i stĂ€llet för att skapa en ny lösning frĂ„n grunden?\"", + "DocumentAim_Description2": "Dokumentet presenterar utmaningarna med att bygga en modern mjukvarulösning och förklarar hur ABP hanterar dessa utmaningar.", + "CreatingANewSolution": "Skapa en ny lösning", + "CreatingANewSolution_Description": "NĂ€r du ska starta en ny lösning finns det mĂ„nga frĂ„gor du mĂ„ste stĂ€lla dig sjĂ€lv, och du bör lĂ€gga ner mycket tid innan du börjar skriva din allra första affĂ€rskod.", + "CreatingAnEmptySolution": "Skapa en tom lösning", + "THEPROBLEM": "PROBLEMET", + "CreatingAnEmptySolution_THEPROBLEM_Description": "Även att skapa en nĂ€stan tom lösning Ă€r en utmaning;", + "CreatingAnEmptySolution_THEPROBLEM_Description2": "Hur organiserar du din kodbas mellan olika projekt?", + "CreatingAnEmptySolution_THEPROBLEM_Description3": "Vilka Ă€r lagren och hur samverkar de?", + "CreatingAnEmptySolution_THEPROBLEM_Description4": "Hur integrerar du med tredjepartsbibliotek?", + "CreatingAnEmptySolution_THEPROBLEM_Description5": "Hur stĂ€ller man in automatiserade tester?", + "ABPSOLUTION": "ABP-LÖSNING", + "CreatingAnEmptySolution_ABPSOLUTION_Description": "ABP tillhandahĂ„ller en vĂ€larkitekterad, skiktad och produktionsklar startup-lösning baserad pĂ„ Domain Driven Design-principerna. Lösningen innehĂ„ller ocksĂ„ en förkonfigurerad enhet och integration test -projekt för varje lager.", + "CommonLibraries": "Gemensamma bibliotek", + "CommonLibraries_THEPROBLEM_Description": "Vilka bibliotek bör du anvĂ€nda för att implementera gemensamma krav? Ekosystemet för programvaruutveckling Ă€r mycket dynamiskt, vilket gör det svĂ„rt att hĂ„lla jĂ€mna steg med de senaste verktygen, biblioteken, trenderna och metoderna.", + "CommonLibraries_ABPSOLUTION_Description": "ABP förintegrerar populĂ€ra, mogna och uppdaterade bibliotek i lösningen. Du behöver inte lĂ€gga tid pĂ„ att integrera dem eller fĂ„ dem att kommunicera med varandra. De fungerar som de ska direkt frĂ„n start.", + "UITheme&Layout": "UI Tema & Layout", + "UITheme&Layout_THEPROBLEM_Description": "NĂ€r man tar itu med anvĂ€ndargrĂ€nssnittet uppstĂ„r en rad olika utmaningar. Det handlar bland annat om att lĂ€gga grunden för ett responsivt, modernt och anpassningsbart UI-kit med ett konsekvent utseende och en mĂ€ngd funktioner som navigeringsmenyer, rubriker, verktygsfĂ€lt, sidfötter, widgetar med mera.", + "UITheme&Layout_THEPROBLEM_Description2": "Även om du vĂ€ljer ett fördesignat tema kan det ta flera dagars utveckling att integrera det sömlöst i ditt projekt. Ett ytterligare hinder ligger i att uppgradera sĂ„dana teman. Ofta blir temats HTML/CSS-struktur sammanflĂ€tad med din UI-kod, vilket gör framtida temaförĂ€ndringar eller uppgraderingar till komplicerade uppgifter. Denna sammanvĂ€vning av kod och design komplicerar flexibiliteten att göra justeringar lĂ€ngs linjen.", + "UITheme&Layout_ABPSOLUTION_Description": "ABP Framework erbjuder ett distinkt temasystem som frigör din UI-kod frĂ„n temabegrĂ€nsningar. Teman finns isolerade, paketerade som NuGet- eller NPM-paket, vilket gör installation eller uppgradering av teman till en frĂ„ga om minuter. Även om du behĂ„ller möjligheten att utveckla ditt eget tema eller integrera ett befintligt, presenterar ABP en samling polerade och moderna teman.", + "UITheme&Layout_ABPSOLUTION_Description2": "Dessutom finns det leverantörer av UI-komponenter som Telerik och DevExpress. Dessa leverantörer tillhandahĂ„ller dock frĂ€mst enskilda komponenter, vilket innebĂ€r att det Ă€r upp till dig att skapa ditt layoutsystem. NĂ€r du arbetar inom ABP-baserade projekt kan du sömlöst införliva dessa bibliotek, pĂ„ samma sĂ€tt som du skulle göra i alla andra projekt.", + "TestInfrastructure": "Testinfrastruktur", + "TestInfrastructure_THEPROBLEM_Description": "Att etablera en robust testmiljö Ă€r en tidskrĂ€vande uppgift. Det handlar om att skapa dedikerade testprojekt inom din lösning, noggrant vĂ€lja ut de verktyg som behövs, skapa mocks för tjĂ€nster och databaser, skapa viktiga basklasser och verktygstjĂ€nster för att minimera redundant kod i testerna och ta itu med olika relaterade uppgifter.", + "TestInfrastructure_ABPSOLUTION_Description": "ABP Startup Templates levereras fĂ€rdigutrustade med konfigurerade testprojekt, vilket effektiviserar processen för dig. Det innebĂ€r att du redan frĂ„n dag ett kan börja skriva din första enhets- eller integrationstestkod utan dröjsmĂ„l.", + "CodingStandards&Training": "Kodningsstandarder och utbildning", + "CodingStandards&Training_THEPROBLEM_Description": "NĂ€r du har konfigurerat lösningen för utveckling mĂ„ste du vanligtvis lĂ€ra utvecklarna hur systemet fungerar och hur man bygger det med hjĂ€lp av samma överenskomna metoder. Även om du ger dem utbildning kan det vara svĂ„rt att hĂ„lla dokumentationen uppdaterad. Med tiden kanske varje utvecklare skriver kod pĂ„ sitt eget sĂ€tt, vilket leder till att reglerna för att skriva kod skiljer sig frĂ„n varandra.", + "CodingStandards&Training_ABPSOLUTION_Description": "ABP-lösningen Ă€r redan snyggt organiserad och har tydliga förklaringar. Steg-för-steg-handledningar och guider visar exakt hur du ska arbeta med ett ABP-projekt.", + "KeepingYourSolutionUpToDate": "HĂ„ll din lösning uppdaterad", + "KeepingYourSolutionUpToDate_THEPROBLEM_Description": "NĂ€r du har pĂ„börjat din utveckling mĂ„ste du hĂ„lla reda pĂ„ de nya versionerna av de bibliotek du anvĂ€nder för uppgraderingar och korrigeringar.", + "KeepingYourSolutionUpToDate_ABPSOLUTION_Description": "Vi uppdaterar regelbundet alla paket till de senaste versionerna och testar dem före den stabila utgĂ„van. NĂ€r du uppdaterar ABP Framework uppgraderas alla dess beroenden till den senaste tekniken.", + "KeepingYourSolutionUpToDate_ABPSOLUTION_Description2": "Abp update CLI-kommando hittar och uppgraderar automatiskt alla ABP-beroende NuGet- och NPM-paket i en lösning. Med ABP Ă€r det enklare att hĂ„lla sig till de senaste versionerna.", + "DRY": "Upprepa inte dig sjĂ€lv!", + "DRY_Description": "Att skapa en baslösning tar lĂ„ng tid och krĂ€ver god erfarenhet av arkitektur. Men detta Ă€r bara början! NĂ€r du börjar utveckla kommer du sannolikt att behöva skriva massor av repetitiv kod; det skulle vara fantastiskt om allt detta kunde hanteras automatiskt.", + "DRY_Description2": "ABP automatiserar och förenklar upprepningskoden sĂ„ mycket som möjligt genom att följa principen om konvention framför konfiguration. Det begrĂ€nsar dig dock inte nĂ€r du behöver vĂ€xla till manuell vĂ€xel. Kontrollen ligger alltid i dina hĂ€nder.", + "Authentication": "Autentisering", + "Authentication_THEPROBLEM_Description": "Single Sign On, Active Directory / LDAP-integration, OpenIddict-integration, sociala inloggningar, tvĂ„faktorsautentisering, glömt / Ă„terstĂ€llt lösenord, e-postaktivering, ny anvĂ€ndarregistrering, kontroll av lösenordskomplexitet, lĂ„sning av konto vid misslyckade försök, visning av misslyckade inloggningsförsök ... etc. Vi vet att alla dessa generiska krav Ă€r bekanta för dig. Du Ă€r inte ensam!", + "Authentication_ABPSOLUTION_Description": "ABP Framework och den kommersiella versionen tillhandahĂ„ller alla dessa standardgrejer förimplementerade Ă„t dig som en Ă„teranvĂ€ndbar kontomodul. Du aktiverar och konfigurerar bara det du behöver.", + "CrossCuttingConcerns": "Övergripande frĂ„gor", + "CrossCuttingConcerns_THEPROBLEM_Description": "Cross-Cutting Concerns Ă€r den grundlĂ€ggande upprepningslogik som bör implementeras för varje anvĂ€ndningsfall. NĂ„gra exempel;", + "CrossCuttingConcerns_THEPROBLEM_Description2": "Starta transaktioner, genomföra vid framgĂ„ng och rulla tillbaka vid fel.", + "CrossCuttingConcerns_THEPROBLEM_Description3": "Hantera och rapportera undantag, returnera ett korrekt felsvar till klienterna och hantera felfall pĂ„ klientsidan.", + "CrossCuttingConcerns_THEPROBLEM_Description4": "Implementera auktorisering och validering, returnera korrekta svar och hantera dessa pĂ„ klientsidan.", + "CrossCuttingConcerns_ABPSOLUTION_Description": "ABP Framework automatiserar eller förenklar alla vanliga övergripande problem. Du skriver bara kod som Ă€r viktig för ditt företag, och ABP hanterar resten genom konventioner.", + "ArchitecturalInfrastructure": "Arkitektonisk infrastruktur", + "ArchitecturalInfrastructure_THEPROBLEM_Description": "Du behöver vanligtvis bygga infrastruktur för att implementera din arkitektur pĂ„ rĂ€tt sĂ€tt. Till exempel implementerar du i allmĂ€nhet Repository-mönstret. Du definierar nĂ„gra basklasser för att förenkla och standardisera skapandet av entiteter, tjĂ€nster, controllers och andra objekt.", + "ArchitecturalInfrastructure_ABPSOLUTION_Description": "ABP Framework tillhandahĂ„ller allt detta och mer dĂ€rtill direkt frĂ„n start. Det Ă€r moget och vĂ€ldokumenterat.", + "EnterpriseApplicationRequirements": "Krav pĂ„ företagsapplikationer", + "EnterpriseApplicationRequirements_THEPROBLEM_Description": "Det finns mĂ„nga krav som du upprepade gĂ„nger mĂ„ste implementera i varje affĂ€rsapplikation;", + "EnterpriseApplicationRequirements_THEPROBLEM_Description2": "Detaljerat behörighetssystem och hantering av behörigheter i anvĂ€ndargrĂ€nssnittet baserat pĂ„ roller och anvĂ€ndare.", + "EnterpriseApplicationRequirements_THEPROBLEM_Description3": "Skriva granskningsloggar och entitetshistorik för att spĂ„ra nĂ€r en anvĂ€ndare Ă€ndrar en databaspost.", + "EnterpriseApplicationRequirements_THEPROBLEM_Description4": "Gör dina enheter mjukt raderade, sĂ„ att de markeras som raderade istĂ€llet för att fysiskt raderas frĂ„n databasen och automatiskt filtrera bort raderade enheter i dina frĂ„gor.", + "EnterpriseApplicationRequirements_THEPROBLEM_Description5": "Skapa abstraktioner och omslag för att konsumera dina backend-API:er frĂ„n frontend-koden.", + "EnterpriseApplicationRequirements_THEPROBLEM_Description6": "UppstĂ€llning i kö och utförande av bakgrundsjobb.", + "EnterpriseApplicationRequirements_THEPROBLEM_Description7": "Hantering av flera tidszoner i ett globalt system.", + "EnterpriseApplicationRequirements_THEPROBLEM_Description8": "Delning av validering, lokalisering och auktoriseringslogik mellan server och klient.", + "EnterpriseApplicationRequirements_ABPSOLUTION_Description": "ABP tillhandahĂ„ller en infrastruktur för att enkelt implementera sĂ„dana krav. Återigen behöver du inte spendera din vĂ€rdefulla tid pĂ„ att implementera alla dessa om och om igen.", + "GeneratingInitialCode&Tooling": "Generering av initialkod och verktyg", + "GeneratingInitialCode&Tooling_THEPROBLEM_Description": "Du kommer att bygga mĂ„nga liknande sidor i en typisk webbapplikation. De flesta av dem kommer att utföra liknande CRUD-operationer. Det Ă€r mycket trĂ„kigt och Ă€ven felbenĂ€get att upprepade gĂ„nger skapa sĂ„dana sidor.", + "GeneratingInitialCode&Tooling_ABPSOLUTION_Description": "ABP Suite kan generera en full-stack CRUD-sida för dina enheter pĂ„ nĂ„gra sekunder. Den genererade koden Ă€r skiktad och ren. Alla standardkrav för validering och auktorisering Ă€r implementerade. Dessutom genereras enhetstestklasser. NĂ€r du vĂ€l har fĂ„tt en helt fungerande sida kan du Ă€ndra den enligt dina affĂ€rsbehov.", + "IntegratingTo3rdPartyLibrariesAndSystems": "Integrering med bibliotek och system frĂ„n tredje part", + "IntegratingTo3rdPartyLibrariesAndSystems_THEPROBLEM_Description": "De flesta bibliotek Ă€r utformade pĂ„ lĂ„g nivĂ„ och du mĂ„ste vanligtvis göra en del arbete för att integrera dem pĂ„ rĂ€tt sĂ€tt utan att upprepa samma integrations- och konfigurationskod överallt i din lösning. Anta till exempel att du mĂ„ste anvĂ€nda RabbitMQ för att implementera din distribuerade hĂ€ndelsebuss. Allt du vill göra Ă€r att skicka ett meddelande till en kö och hantera de inkommande meddelandena. Men du mĂ„ste förstĂ„ meddelandemönster, köer och utbytesdetaljer. För att skriva effektiv kod mĂ„ste du skapa en pool för att hantera anslutningar, klienter och kanaler. Du mĂ„ste ocksĂ„ hantera undantag, ACK-meddelanden, Ă„teranslutning till RabbitMQ vid misslyckanden och mer.", + "IntegratingTo3rdPartyLibrariesAndSystems_ABPSOLUTION_Description": "Till exempel abstraherar ABP:s RabbitMQ Distributed Event Bus-integration alla dessa detaljer. Du skickar och tar emot meddelanden utan krĂ„ngel. Behöver du skriva kod pĂ„ lĂ„g nivĂ„? Inga problem, det kan du alltid göra. ABP begrĂ€nsar dig inte nĂ€r du behöver anvĂ€nda lĂ„gnivĂ„funktioner i det bibliotek du anvĂ€nder.", + "WhyNotBuildYourOwnFramework?": "Varför inte bygga ditt eget ramverk?", + "WhyNotBuildYourOwnFramework_THEPROBLEM_Description": "All infrastruktur, Ă€ven pĂ„ det enklaste sĂ€ttet, tar mycket tid att bygga, underhĂ„lla och dokumentera. Den blir större med tiden och det blir svĂ„rt att underhĂ„lla den i din lösning. Att separera dessa i ett Ă„teranvĂ€ndbart projekt Ă€r utgĂ„ngspunkten för att bygga ditt eget interna ramverk.", + "WhyNotBuildYourOwnFramework_THEPROBLEM_Description2": "Att bygga, dokumentera, utbilda och underhĂ„lla ett internt ramverk Ă€r verkligen svĂ„rt. Om du inte har ett erfaret, dedikerat ramverksteam blir ditt interna ramverk snabbt en odokumenterad Ă€ldre kod som ingen lĂ€ngre kan förstĂ„ och underhĂ„lla. Å andra sidan utvecklas dessa ramverk i allmĂ€nhet av en eller tvĂ„ utvecklare i teamet. Och dessa medarbetare hĂ„ller pĂ„ att bli en kunskapssilo. Det Ă€r bra för dem men dĂ„ligt för företaget eftersom de Ă€r projektets enda punkt för misslyckande -SPOF-. NĂ€r de lĂ€mnar företaget gĂ„r projektet dramatiskt ner.", + "WhyNotBuildYourOwnFramework_ABPSOLUTION_Description": "ABP Framework Ă€r ett community-drivet, vĂ€ldokumenterat, moget och generiskt applikationsramverk. Ett team av mycket erfarna utvecklare arbetar hĂ„rt för att hĂ„lla det uppdaterat, lĂ€tt att förstĂ„ och bekvĂ€mt att anvĂ€nda. Att anvĂ€nda ett sĂ„ stabilt ramverk gör att du kan fokusera pĂ„ din egen affĂ€rskod och fĂ„ hjĂ€lp med ramverket frĂ„n experter nĂ€r du behöver det.", + "ArchitecturalInfrastructure_Description": "SaaS-applikationer, modulĂ€ra system eller mikroservicesystem Ă€r de mest anvĂ€nda modellerna för företagsprogramvara. Att bygga sĂ„dana system krĂ€ver inte bara en god förstĂ„else och erfarenhet utan ocksĂ„ en stark mjukvaruinfrastruktur. Annars kommer du att fĂ„ lĂ€gga ner mycket arbete pĂ„ att stödja dessa arkitektoniska detaljer i din kodbas.", + "Modularity": "Modularitet", + "Modularity_THEPROBLEM_Description": "Att bygga ett verkligt modulĂ€rt system Ă€r inte lĂ€tt! Alla aspekter av systemet (databas, entiteter, API:er, UI-sidor/komponenter) kan delas upp i moduler, och varje modul kan Ă„teranvĂ€ndas utan andra. Den vanliga ASP.NET Core ger inte en sĂ„dan modulĂ€r arkitektur. Om du behöver det bör du tĂ€nka pĂ„ det frĂ„n grunden.", + "Modularity_ABPSOLUTION_Description": "ABP Framework Ă€r skapat för att vara en modulĂ€r struktur för applikationsutveckling. Varje funktion i ramverket Ă€r utvecklad för att vara kompatibel med modularitet. Dokumentation och guider förklarar hur man utvecklar Ă„teranvĂ€ndbara moduler pĂ„ ett standardiserat sĂ€tt.", + "SaaSMultiTenancy": "SaaS / Multi-Tenancy", + "SaaSMultiTenancy_THEPROBLEM_Description": "Multi-Tenancy Ă€r ett vanligt sĂ€tt att implementera SaaS-system. Att implementera en konsekvent multi-tenant infrastruktur kan dock bli komplicerat.", + "SaaSMultiTenancy_ABPSOLUTION_Description": "ABP Framework tillhandahĂ„ller en komplett infrastruktur för flera hyresgĂ€ster och abstraherar komplexiteten frĂ„n din företagskod. Din applikationskod kommer att vara mestadels multi-tenancy medveten, medan ABP Framework automatiskt isolerar databasen, cache och andra detaljer om hyresgĂ€sterna frĂ„n varandra. Det stöder en enda databas, per hyresgĂ€stdatabas och hybridmetoder. Det konfigurerar biblioteken som Microsoft Identity och OpenIddict, som normalt inte Ă€r multi-tenancy-kompatibla, pĂ„ rĂ€tt sĂ€tt.", + "Microservices": "MikrotjĂ€nster", + "Microservices_THEPROBLEM_Description": "Att bygga ett mikrotjĂ€nstsystem krĂ€ver mĂ„nga infrastrukturdetaljer: Autentisering och auktorisering av applikationer och mikrotjĂ€nster samt implementering av asynkrona meddelanden och synkrona (Rest/GRPC) kommunikationsmönster mellan mikrotjĂ€nster Ă€r de mest grundlĂ€ggande frĂ„gorna.", + "Microservices_ABPSOLUTION_Description": "ABP-ramverket tillhandahĂ„ller tjĂ€nster, guider och exempel som hjĂ€lper dig att implementera din mikrotjĂ€nstlösning med hjĂ€lp av branschens standardverktyg.", + "Microservices_ABPSOLUTION_Description2": "ABP:s kommersiella version gĂ„r till och med ett steg lĂ€ngre och tillhandahĂ„ller en komplett startup-mall för att kickstarta din microservice-lösning.", + "PreBuiltModules": "Förbyggda moduler", + "PreBuiltModules_THEPROBLEM_Description": "Alla har vi liknande men lite olika affĂ€rskrav. Men vi mĂ„ste alla uppfinna hjulet pĂ„ nytt eftersom ingen annans kod kan fungera direkt i vĂ„r lösning. De Ă€r alla inbĂ€ddade delar av en större lösning.", + "PreBuiltModules_ABPSOLUTION_Description": "ABP modules tillhandahĂ„ller mĂ„nga Ă„teranvĂ€ndbara applikationsmoduler som betalning, chatt, filhantering, revisionsloggrapportering ... etc. Alla dessa moduler installeras enkelt i din lösning och fungerar direkt. Vi lĂ€gger stĂ€ndigt till fler moduler.", + "PreBuiltModules_ABPSOLUTION_Description2": "Alla moduler Ă€r utformade sĂ„ att de kan anpassas efter dina affĂ€rsbehov. Om du behöver fullstĂ€ndig kontroll kan du ladda ner den fullstĂ€ndiga kĂ€llkoden för alla moduler och anpassa dem helt utifrĂ„n dina specifika affĂ€rskrav.", + "ABPCommunity": "ABP Gemenskap", + "ABPCommunity_Description": "Slutligen, att vara en del av en stor gemenskap dĂ€r alla följer liknande kodningsstilar och principer och delar en gemensam infrastruktur ger kraft nĂ€r du har problem eller behöver hjĂ€lp med designbeslut. Eftersom vi skriver kod pĂ„ liknande sĂ€tt kan vi hjĂ€lpa varandra mycket bĂ€ttre. ABP Ă€r ett community-stöttat projekt med mer Ă€n 10K stjĂ€rnor pĂ„ GitHub.", + "ABPCommunity_Description2": "Det Ă€r lĂ€tt att dela kod eller till och med Ă„teranvĂ€ndbara bibliotek mellan ABP-utvecklare. En kodsnutt som fungerar för dig kommer ocksĂ„ att fungera för andra. Det finns mĂ„nga exempel och handledningar som du direkt kan implementera i din applikation.", + "ABPCommunity_Description3": "NĂ€r du anlitar en utvecklare som tidigare arbetat med ABP-arkitekturen kommer denne omedelbart att förstĂ„ din lösning och pĂ„börja utvecklingen pĂ„ mycket kort tid.", + "WhyAbpIo_Page_Title": "Varför ABP.IO Platform?", + "AbpStudio_Page_Title": "ABP Studio", + "CampaignInfo": "Köp en ny licens eller förnya din befintliga licens och fĂ„ ytterligare 2 mĂ„nader utan extra kostnad! Detta erbjudande gĂ€ller för alla licensplaner. Se till att du utnyttjar denna tidsbegrĂ€nsade kampanj för att utöka din tillgĂ„ng till premiumfunktioner och uppgraderingar.", + "HurryUpLastDay": "Skynda pĂ„! Sista dagen: {0}", + "CreatingCRUDPagesWithABPSuite": "Skapa CRUD-sidor med ABP Suite", + "Testimonials": "VittnesmĂ„l", + "MultipleYearDiscount": "Rabatt för flera Ă„r", + "CampaignDiscountText": "Black Friday-rabatt", + "CampaignDiscountName": "Svart fredag", + "CampaignName:BlackFriday": "Svart fredag", + "MultipleOrganizationInfo": "Se alla dina organisationer", + "AbpStudioBetaAccessInfoTitle": "ABP Studio Beta Access", + "AbpStudioBetaAccessInfoText": "Vi Ă€r glada över att kunna dela med oss av beta-versionen av ABP Studio! Den hĂ€r versionen markerar en viktig milstolpe i vĂ„r utvecklingsresa, och vi Ă€r angelĂ€gna om att samla in din feedback för att göra applikationen Ă€nnu bĂ€ttre.", + "YouAreNotAuthorizedToDownloadStudio": "Du Ă€r inte behörig att ladda ner ABP Studio.", + "OrganizationHasNoDefaultCreditCard": "Din organisation har inget standardkreditkort. LĂ€gg till ett kreditkort för din organisation.", + "YouAreNotAuthorizedToPayThisPaymentRequest": "Du Ă€r inte behörig att betala denna betalningsbegĂ€ran.", + "YouAreNotAuthorizedToCreateBillingInfoForThisPaymentRequest": "Du Ă€r inte behörig att skapa faktureringsinformation för denna betalningsbegĂ€ran.", + "OrganizationNotFound": "Organisationen hittades inte.", + "CannotDeleteDefaultCardBecauseAutoRenewalEnabled": "Du kan inte ta bort kortet just nu eftersom funktionen Auto-Renewal Ă€r aktiverad. För att ta bort kortet mĂ„ste du först avaktivera Auto-Renewal.", + "AreYouSureWantToDeleteThisCard": "Är du sĂ€ker pĂ„ att du vill ta bort det hĂ€r kortet?", + "AreYouSureWantToSetThisCardAsDefault": "Är du sĂ€ker pĂ„ att du vill anvĂ€nda det hĂ€r kortet som standard?", + "OrganizationBillingInfoIsNotSuitableForIyzicoPayment": "Din organisations faktureringsinformation Ă€r inte lĂ€mplig för iyzico-betalning.", + "AutomaticRenewal": "Automatisk förnyelse", + "AutomaticRenewal_Description": "Om du förnyar en licens innan den gĂ„r ut fĂ„r du en rabatt pĂ„ upp till 40 %. Med den automatiska förnyelseprocessen kan du förnya din licens utan att förlora denna rabatt, och din utveckling kommer aldrig att avbrytas. Automatisk förnyelse Ă€r endast tillgĂ€nglig för kreditkortsbetalning. Du kan inaktivera automatisk förnyelse nĂ€r som helst genom att gĂ„ till din organisationshanteringssida. ABP sparar inte din kreditkortsinformation, men vĂ„ra globala betalningsgateways sĂ€krar besparingar.", + "CardNotFoundMessage": "Vill du lĂ€gga till ett nytt kort?", + "CardNotFoundTitle": "Kortet hittades inte", + "AutoRenewalEnabled": "Automatisk förnyelse aktiverad", + "AutoRenewalDisabled": "Automatisk förnyelse Avaktiverad", + "PaymentRequestIdIsNotProvided": "BetalningsförfrĂ„gans ID anges inte.", + "PaymentFailedInfo": "TyvĂ€rr, betalningen misslyckades! Detta kan bero pĂ„ otillrĂ€ckliga medel, ogiltigt kreditkortsnummer eller ogiltig pinkod", + "UsedPayment": "Denna betalning har redan anvĂ€nts", + "ManageLicense": "Hantera licens", + "AbpPlatformLeptonXTheme": "LeptonX Theme för din administrativa instrumentpanel av ABP Platform", + "NoActiveLicence": "Du Ă€r inte berĂ€ttigad till denna Ă„tgĂ€rd! Du har ingen aktiv licens.", + "ABPStudioBetaTester": "För att kunna skicka in din begĂ€ran mĂ„ste du logga in", + "ABPStudioBetaAccess": "ABP Studio Beta Access", + "VisitABPStudio": "Besök ABP Studio", + "EditBillingInformation": "Redigera faktureringsinformation", + "Organization": "Organisation", + "E-Book": "E-bok", + "CreditCards": "Kreditkort", + "BillingInformation": "Faktureringsinformation", + "AddNewCreditCard": "LĂ€gg till nytt kreditkort", + "MyOrganizations_LearnMorePlan": "LĂ€s mer om planer pĂ„ prissĂ€ttningssidan", + "AutoLicenseRenewalIsNotEnabled": "Automatisk licensförnyelse Ă€r inte aktiverad.", + "SetAsDefaultPaymentMethod": "Ange som standardbetalningsmetod", + "{0}PerAdditionalDeveloper": "{0} per ytterligare utvecklare", + "CardAlias": "Alias för kort (valfritt)", + "AbpDoesNotSaveYourPaymentDetails_Description": "Betalningsuppgifterna kommer att sparas i {2} sĂ€kerhetsvalv och du kan ta bort lagrade uppgifter nĂ€r som helst. Aktivering av automatisk förnyelse sĂ€kerstĂ€ller att din ABP-prenumeration automatiskt förnyas innan den löper ut, förutsatt att du har ett giltigt kreditkort. Om du avaktiverar automatisk förnyelse mĂ„ste du förnya din prenumeration manuellt. Om du vill fortsĂ€tta din projektutveckling utan avbrott föreslĂ„r vi att du aktiverar alternativet Automatisk förnyelse.", + "AddBillingInformation": "LĂ€gg till faktureringsinformation", + "YouHaveNoCardsSaved": "Kortet Ă€r inte sparat Ă€nnu.", + "CreateCreditCardModal_BillingDetails_Description": "Du mĂ„ste spara dina faktureringsuppgifter för att kunna lĂ€gga till ditt kreditkort.", + "TaxNo": "Skatt Nej", + "CardNumber": "Kortnummer", + "NameOnCard": "Namn pĂ„ kortet", + "BillingDetails": "Faktureringsinformation", + "ThereIsNoDeveloper": "Ingen utvecklare tillagd.", + "CardDetails": "Debit-/Kreditkortsuppgifter", + "YearCantBeNull": "ÅrsfĂ€ltet fĂ„r inte vara tomt.", + "CardHolderName": "Namn pĂ„ kortet", + "ExpireDate": "UtgĂ„ngsdatum", + "DisplayName:ExpireDate": "UtgĂ„ngsdatum", + "DisplayName:CardHolderName": "Namn pĂ„ kortet", + "CreditCardNumberLengthWarning": "Ogiltigt kortnummer", + "ExpirationWarning": "Ogiltigt utgĂ„ngsdatum", + "CreateCreditCardModal_Description": "NĂ€r du sparar ditt betalkort/kreditkort kommer en tillfĂ€llig avgift pĂ„ 1 USD att godkĂ€nnas för verifiering och Ă„terbetalas omedelbart.", + "ReturnOfInvestmentTitle": "Avkastning pĂ„ investering", + "ReduceYourDevelopmentCostsDescription": "Minska dina utvecklingskostnader med mer Ă€n 50 % med ABP-ramverket. Men hur? FortsĂ€tt lĂ€sa...", + "SettingUpTheArchitectureTitle": "UppsĂ€ttning av arkitekturen", + "DoingEverythingFromScratch": "Att göra allt frĂ„n början", + "SettingUpTheArchitecture_Description1": "Organisera kodbas och lösningsstruktur", + "SettingUpTheArchitecture_Description2": "Identifiera, installera och konfigurera viktiga tredjepartsbibliotek", + "SettingUpTheArchitecture_Description3": "UpprĂ€tta infrastruktur för automatiserad integration och enhetstest", + "SettingUpTheArchitecture_Description4": "FaststĂ€lla och dokumentera kodstandarder, utbilda utvecklingsteamet", + "UsingTheABPFramework": "AnvĂ€nda ABP-ramverket", + "UseABPSettingUpTheArchitecture_Description": "AnvĂ€nd ABP:s mallar för startup-lösningar", + "ReduceCostsWithABP": "Minska kostnaderna med ABP genom att", + "ReduceCostsBy": "80 % till 100 %.", + "DesigningTheUserInterfaceTitle": "Utformning av anvĂ€ndargrĂ€nssnittet", + "DesigningTheUserInterface_Description1": "Skapa eller köp ett UI-tema", + "DesigningTheUserInterface_Description2": "Anpassa anvĂ€ndargrĂ€nssnittets tema till lösningen", + "DesigningTheUserInterface_Description3": "Bygga de viktigaste delarna av anvĂ€ndargrĂ€nssnittet (layout, meny, sidhuvud, sidfot med responsiv design)", + "DesigningTheUserInterface_Description4": "Se till att designen Ă€r konsekvent pĂ„ alla applikationssidor", + "UseABPDesigningTheUserInterface_Description": "AnvĂ€nd ABP:s LeptonX UI Theme", + "DevelopingApplicationFeaturesTitle": "Utveckling av applikationsfunktioner", + "DevelopingApplicationFeatures_Description1": "Utveckla din egen affĂ€rslogik", + "DevelopingApplicationFeatures_Description2": "Utveckla varje sida en efter en", + "DevelopingApplicationFeatures_Description3": "Utveckla gemensamma affĂ€rsmoduler sjĂ€lv", + "DevelopingApplicationFeatures_Description4": "Utveckla autentiseringssystemet (enkel inloggning, 2-faktor autentisering, sociala inloggningar, Ă„terstĂ€llning av lösenord, e-postaktivering etc...)", + "DevelopingApplicationFeatures_Description5": "TillĂ€mpa övergripande frĂ„gor i varje anvĂ€ndningsfall (DB-transaktioner, auktorisering, validering, undantagshantering etc.)", + "DevelopingApplicationFeatures_Description6": "Utveckla gemensamma basklasser och nyttotjĂ€nster", + "DevelopingApplicationFeatures_Description7": "Utveckla gemensamma icke-affĂ€rsmĂ€ssiga krav (revisionsloggning, soft-delete, bakgrundsjobb, behörighetssystem etc.)", + "UseABPDevelopingApplicationFeatures_Description1": "Utveckla din egen affĂ€rslogik", + "UseABPDevelopingApplicationFeatures_Description2": "AnvĂ€nd ABP Suite för att automatiskt generera CRUD-liknande sidor", + "UseABPDevelopingApplicationFeatures_Description3": "AnvĂ€nd direkt ABP:s förbyggda gemensamma applikationsmoduler och anpassa dem utifrĂ„n dina unika krav", + "ReduceCostsBy_2": "40-60 procent", + "WhyABPIoPlatform": "Varför ABP.IO Platform?", + "WhyShouldYouUsetheABPIOPlatform": "Varför ska du anvĂ€nda ABP.IO-plattformen istĂ€llet för att skapa en ny lösning frĂ„n grunden?", + "ExploreMore": "Utforska mer", + "DocumentIntroducesDescription": "Om du vill veta mer om varför du ska anvĂ€nda ABP.IO Platform istĂ€llet för att skapa en ny lösning frĂ„n grunden, lĂ€s följande dokument:", + "ReturnOfInvestmentPageAbout": "PĂ„ den hĂ€r sidan beskrivs de grundlĂ€ggande stegen i utvecklingen av en programvarulösning och hur ABP.IO Platform minskar dina utvecklingskostnader i varje steg.", + "LearnMore": "LĂ€r dig mer", + "ReturnOfInvestment": "Avkastning pĂ„ investeringar", + "ReturnOfInvestment_Description": "LĂ€r dig hur du kan minska dina utvecklingskostnader med mer Ă€n 50 %.", + "Previous": "FöregĂ„ende", + "PricingDiscount": "Spara", + "PricingTeamTitle": "Team", + "PricingBusinessTitle": "Företag", + "PricingEnterpriseTitle": "Företag", + "SpecialDiscount": "SĂ€rskild rabatt", + "YourOrganizationOverview": "Översikt över din organisation", + "TrainingDetailsHeaderInfo_TrainingHourSingular": "{0} timme", + "ContactPageError": "VĂ€nligen skicka ditt meddelande via e-post till info@abp.io
HĂ€r Ă€r vad du skrev :", + "GoBack": "GĂ„ tillbaka", + "HereWhatYouWrote": "HĂ€r Ă€r vad du skrev:", + "Sales": "FörsĂ€ljning", + "LicensingPricing": "Licensiering/prissĂ€ttning", + "TrialDemo": "Testversion / Demo", + "TrainingOnboarding": "Utbildning / Onboarding", + "Resellers": "ÅterförsĂ€ljare", + "Others": "Övriga", + "Characters": "KaraktĂ€rer", + "Topic": "Ämne", + "SendUsEmail": "Skicka e-post till oss", + "ErrorExceptionMessage": "Ett fel intrĂ€ffade under behandlingen av din begĂ€ran", + "WatchTakeCodeGeneration": "Titta pĂ„ videon \"Utforska potentialen med kodgenerering: ABP Suite\" Video!", + "StartupTemplatesUser": "AnvĂ€ndare", + "StartupSingleSignOn": "Enkel inloggning", + "Application{0}": "TillĂ€mpning {0}", + "PreBuiltApplicationModulesTitle": "FĂ€rdigbyggda applikationer Moduler.", + "RegisterDemo": "Registrera", + "TrainingDescription": "Vi erbjuder följande utbildningspaket för dig som vill skaffa dig kunskap om ABP.", + "PurchaseDevelopers": "Utvecklare", + "LinkExpiredMessage": "BetalningslĂ€nken har löpt ut! Kontakta oss pĂ„ sales@volosoft.com för att uppdatera lĂ€nken eller klicka hĂ€r för att navigera till kontaktsidan." + } +} \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/sv.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/sv.json new file mode 100644 index 0000000000..de8175fe77 --- /dev/null +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/sv.json @@ -0,0 +1,269 @@ +{ + "culture": "sv", + "texts": { + "Permission:CommunityPost": "Gemenskapens inlĂ€gg", + "Permission:Edit": "Redigera", + "Waiting": "VĂ€ntar pĂ„", + "Approved": "GodkĂ€nd", + "Rejected": "Avvisad", + "Wait": "VĂ€nta", + "Approve": "GodkĂ€nna", + "Reject": "Avvisa", + "ReadPost": "LĂ€s inlĂ€gget", + "Status": "Status", + "ContentSource": "KĂ€lla för innehĂ„ll", + "Details": "Detaljer", + "Title": "Titel", + "CreationTime": "Skapelsetid", + "Save": "Spara", + "SameUrlAlreadyExist": "Samma URL finns redan! Du mĂ„ste Ă€ndra webbadressen!", + "UrlIsNotValid": "Url Ă€r inte giltig.", + "UrlNotFound": "Url hittades inte.", + "UrlContentNotFound": "Url-innehĂ„llet hittades inte.", + "Summary": "Sammanfattning", + "MostRead": "Mest lĂ€st", + "Latest": "Senaste", + "ContributeAbpCommunity": "Bidra till ABP:s gemenskap", + "SubmitYourPost": "Skicka in ditt inlĂ€gg", + "ContributionGuide": "Bidragsguide", + "BugReport": "Bugg-rapport", + "SeeAllPosts": "Se alla inlĂ€gg", + "WelcomeToABP": "VĂ€lkommen till ABP", + "EmailNotValid": "VĂ€nligen ange en giltig e-postadress.", + "FeatureRequest": "BegĂ€ran om funktion", + "CreatePostTitleInfo": "Titel pĂ„ det inlĂ€gg som ska visas i inlĂ€ggslistan.", + "CreatePostSummaryInfo": "En kort sammanfattning av inlĂ€gget som ska visas i inlĂ€ggslistan. Maximal lĂ€ngd: {0}", + "CreatePostCoverInfo": "För att skapa ett effektivt inlĂ€gg, lĂ€gg till ett omslagsfoto. Ladda upp bilder i bildförhĂ„llandet 16:9 för bĂ€sta visning.
Maximal filstorlek Ă€r 1MB.", + "ThisExtensionIsNotAllowed": "Denna förlĂ€ngning Ă€r inte tillĂ„ten.", + "TheFileIsTooLarge": "Filen Ă€r för stor.", + "GoToThePost": "GĂ„ till inlĂ€gget", + "GoToTheVideo": "GĂ„ till videon", + "Contribute": "Bidra", + "OverallProgress": "Övergripande framsteg", + "Done": "Klar", + "Open": "Öppna", + "Closed": "StĂ€ngt", + "RecentQuestionFrom": "Senaste frĂ„gan frĂ„n {0}", + "Stackoverflow": "Stackoverflow", + "Votes": "röster", + "Answer": "Svar", + "Views": "utsikt", + "Answered": "Besvarad", + "WaitingForYourAnswer": "VĂ€ntar pĂ„ ditt svar", + "Asked": "aska", + "AllQuestions": "Alla frĂ„gor", + "NextVersion": "NĂ€sta version", + "MilestoneErrorMessage": "Det gick inte att fĂ„ aktuell milstolpsinformation frĂ„n Github.", + "QuestionItemErrorMessage": "Kunde inte fĂ„ de senaste frĂ„geuppgifterna frĂ„n Stackoverflow.", + "Oops": "Oops!", + "CreatePostSuccessMessage": "Ditt inlĂ€gg har skickats in med framgĂ„ng. Det kommer att publiceras efter granskning av webbplatsadministratören.", + "Browse": "BlĂ€ddra", + "CoverImage": "Omslagsbild", + "ShareYourExperiencesWithTheABPFramework": "Dela dina erfarenheter av ABP-ramverket!", + "Optional": "Valfritt", + "UpdateUserWebSiteInfo": "Exempel: https://johndoe.com", + "UpdateUserTwitterInfo": "Exempel: johndoe", + "UpdateUserGithubInfo": "Exempel: johndoe", + "UpdateUserLinkedinInfo": "Exempel: https://www.linkedin.com/...", + "UpdateUserCompanyInfo": "Exempel: Volosoft", + "UpdateUserJobTitleInfo": "Exempel: Programvaruutvecklare", + "UserName": "AnvĂ€ndarnamn", + "Company": "Företag", + "PersonalWebsite": "Personlig webbplats", + "RegistrationDate": "Registreringsdatum", + "Social": "Sociala", + "Biography": "Biografi", + "HasNoPublishedPostsYet": "har inga publicerade inlĂ€gg Ă€nnu", + "Author": "Författaren", + "LatestGithubAnnouncements": "Senaste Github-tillkĂ€nnagivanden", + "SeeAllAnnouncements": "Se alla tillkĂ€nnagivanden", + "LatestBlogPost": "Senaste blogginlĂ€gget", + "Edit": "Redigera", + "ProfileImageChange": "Ändra profilbilden", + "BlogItemErrorMessage": "Kunde inte fĂ„ den senaste informationen om blogginlĂ€gg frĂ„n ABP.", + "PlannedReleaseDate": "Planerat utgivningsdatum", + "CommunityPostRequestErrorMessage": "Det gick inte att fĂ„ den senaste postförfrĂ„gan frĂ„n Github.", + "PostRequestFromGithubIssue": "Det finns inga postförfrĂ„gningar nu.", + "LatestPosts": "Senaste inlĂ€gg", + "ArticleRequests": "BegĂ€r ett innehĂ„ll", + "ArticleRequestsDescription": "Vill du se ett specifikt innehĂ„ll hĂ€r? Du kan be communityn att skapa det!", + "LatestContentRequests": "Senaste förfrĂ„gningar om innehĂ„ll", + "AllPostRequests": "Se alla postförfrĂ„gningar", + "SubscribeToTheNewsletter": "Prenumerera pĂ„ nyhetsbrevet", + "NewsletterEmailDefinition": "FĂ„ information om vad som hĂ€nder i ABP, t.ex. nya utgĂ„vor, fria kĂ€llor, inlĂ€gg och mycket mer.", + "NoThanks": "Nej, tack.", + "MaybeLater": "Kanske senare", + "JoinOurPostNewsletter": "AnmĂ€l dig till vĂ„rt nyhetsbrev", + "Community": "Gemenskap", + "Marketing": "Marknadsföring", + "CommunityPrivacyPolicyConfirmation": "Jag godkĂ€nner de allmĂ€nna villkoren och Integritetspolicy.", + "PostRequestMessageTitle": "Öppna en frĂ„ga pĂ„ GitHub för att begĂ€ra ett inlĂ€gg / en handledning som du vill se pĂ„ den hĂ€r webbplatsen.", + "PostRequestMessageBody": "HĂ€r Ă€r en lista över de inlĂ€gg som efterfrĂ„gats av communityn. Vill du skriva ett efterfrĂ„gat inlĂ€gg? Klicka pĂ„ önskemĂ„let och delta i diskussionen.", + "Language": "SprĂ„k", + "CreatePostLanguageInfo": "SprĂ„ket för inlĂ€ggets innehĂ„ll.", + "VideoPost": "VideoinlĂ€gg", + "Post": "Post", + "Read": "LĂ€s", + "CreateGithubPostUrlInfo": "FullstĂ€ndig URL till Markdown-filen pĂ„ GitHub (exempel).", + "CreateVideoContentUrlInfo": "InlĂ€ggets ursprungliga URL pĂ„ Youtube.", + "CreateExternalPostUrlInfo": "InlĂ€ggets ursprungliga externa webbadress.", + "VideoContentForm": "Skicka in video pĂ„ YouTube", + "GithubPostForm": "Skicka inlĂ€gg pĂ„ GitHub", + "ExternalPostForm": "Skicka in ett externt innehĂ„ll", + "HowToPost": "Hur postar jag?", + "Posts": "InlĂ€gg", + "VideoUrl": "Video webbadress", + "GithubPostUrl": "Url för GitHub-post", + "ExternalPostUrl": "Url för externt inlĂ€gg", + "ThankYouForContribution": "Tack för att du bidrar till ABP Community. Vi tar gĂ€rna emot artiklar och videohandledning om ABP Framework, .NET, ASP.NET Core och allmĂ€nna Ă€mnen inom programvaruutveckling.", + "GithubPost": "GitHub-inlĂ€gg", + "GithubPostSubmitStepOne": "1. Skriv ett inlĂ€gg pĂ„ ett offentligt GitHub-arkiv med Markdown-formatet. exempel", + "GithubPostSubmitStepTwo": "2. Skicka in din URL till inlĂ€gget med hjĂ€lp av formulĂ€ret.", + "GithubPostSubmitStepThree": "3. Ditt inlĂ€gg kommer att Ă„terges pĂ„ denna webbplats.", + "YoutubeVideo": "Youtube-video", + "YoutubeVideoSubmitStepOne": "1. Publicera din video pĂ„ YouTube.", + "YoutubeVideoSubmitStepTwo": "2. Skicka in video-URL:en med hjĂ€lp av formulĂ€ret.", + "YoutubeVideoSubmitStepThree": "3. Besökare kommer att kunna titta pĂ„ ditt videoinnehĂ„ll direkt pĂ„ denna webbplats.", + "ExternalContent": "Externt innehĂ„ll", + "ExternalContentSubmitStepOne": "1. Skapa innehĂ„ll pĂ„ en publik plattform (Medium, din egen blogg eller var du vill).", + "ExternalContentSubmitStepTwo": "2. Skicka in URL:en för ditt innehĂ„ll med hjĂ€lp av formulĂ€ret.", + "ExternalContentSubmitStepThree": "3. Besökare omdirigeras till innehĂ„llet pĂ„ den ursprungliga webbplatsen.", + "ChooseYourContentType": "VĂ€lj det sĂ€tt som du vill lĂ€gga till ditt innehĂ„ll pĂ„.", + "PostContentViaGithub": "Jag vill lĂ€gga till mitt inlĂ€gg med GitHub i enlighet med markdown-reglerna.", + "PostContentViaYoutube": "Jag vill dela mina videor som finns pĂ„ Youtube hĂ€r.", + "PostContentViaExternalSource": "Jag vill lĂ€gga till det innehĂ„ll jag publicerade pĂ„ en annan plattform hĂ€r.", + "GitHubUserNameValidationMessage": "Ditt Github-anvĂ€ndarnamn kan inte innehĂ„lla blanksteg, kontrollera att ditt Github-anvĂ€ndarnamn Ă€r korrekt.", + "PersonalSiteUrlValidationMessage": "URL:en till din personliga webbplats fĂ„r inte innehĂ„lla blanksteg, kontrollera att URL:en till din personliga webbplats Ă€r korrekt.", + "TwitterUserNameValidationMessage": "Ditt Twitter-anvĂ€ndarnamn fĂ„r inte innehĂ„lla blanksteg, kontrollera att ditt Twitter-anvĂ€ndarnamn Ă€r korrekt.", + "LinkedinUrlValidationMessage": "Din LinkedIn-URL fĂ„r inte innehĂ„lla blanksteg, kontrollera att din LinkedIn-URL Ă€r korrekt.", + "NoPostsFound": "Inga inlĂ€gg hittades!", + "SearchInPosts": "Sök i inlĂ€gg...", + "MinimumSearchContent": "Du mĂ„ste ange minst 3 tecken!", + "Volo.AbpIo.Domain:060001": "KĂ€llans URL(\"{PostUrl}\") Ă€r inte Github URL", + "Volo.AbpIo.Domain:060002": "InlĂ€ggets innehĂ„ll Ă€r inte tillgĂ€ngligt frĂ„n GitHub(\"{PostUrl}\")-resursen.", + "Volo.AbpIo.Domain:060003": "Inget innehĂ„ll i inlĂ€gget hittades!", + "SeeMore": "Se mer", + "JoinTheABPCommunity": "GĂ„ med i ABP:s gemenskap", + "ABPCommunityTalks": "ABP:s samtal med allmĂ€nheten", + "LiveDemo": "Live Demo", + "GetLicense": "Skaffa licens", + "GetStarted": "Kom igĂ„ng", + "SourceCode": "KĂ€llkod", + "LeaveComment": "LĂ€mna kommentar", + "ShowMore": "Visa mer", + "NoPublishedPostsYet": "Inga publicerade inlĂ€gg Ă€nnu.", + "Name": "Namn", + "Surname": "Efternamn", + "WebSite": "Webbplats", + "FullURL": "Full URL", + "JobTitle": "Befattning", + "Prev": "Före", + "Previous": "FöregĂ„ende", + "Next": "NĂ€sta", + "Share": "Aktie", + "SortBy": "Sortera efter", + "NoPublishedEventsYet": "Inga publicerade hĂ€ndelser Ă€nnu.", + "SubscribeYoutubeChannel": "Prenumerera pĂ„ Youtube-kanalen", + "Enum:EventType:0": "Samtal", + "MemberNotPublishedPostYet": "Denna medlem har inte publicerat nĂ„gra inlĂ€gg Ă€nnu.", + "TimeAgo": "för {0} sedan", + "Discord_Page_JoinCommunityMessage": "GĂ„ med i ABP Discord Community", + "Discord_Page_Announce": "Vi Ă€r glada att kunna presentera ABP Community Discord Server!", + "Discord_Page_Description_1": "ABP Community har vuxit sedan dag ett. Vi ville ta det till nĂ€sta steg genom att skapa en officiell ABP Discord-server sĂ„ att ABP-communityn kan interagera med varandra med hjĂ€lp av underverk som snabbmeddelanden.", + "Discord_Page_Description_2": "ABP Community Discord Server Ă€r platsen dĂ€r du kan visa upp dina skapelser med ABP Framework, dela de tips som fungerade för dig, fĂ„ de senaste nyheterna och tillkĂ€nnagivandena om ABP Framework, bara chatta med medlemmar i samhĂ€llet för att utbyta idĂ©er och ha kul!", + "Discord_Page_Description_3": "Denna ABP Community Discord Server Ă€r den officiella med ABP Core Team nĂ€rvarande pĂ„ servern för att övervaka.", + "Discord_Page_JoinToServer": "GĂ„ med i ABP Discord Server", + "Events_Page_MetaTitle": "ABP:s evenemang för allmĂ€nheten", + "Events_Page_MetaDescription": "Live-showerna, som leds av ABP-teamet, Ă€r avslappnade sessioner fulla av community-innehĂ„ll, demonstrationer, frĂ„gor och svar och diskussioner om vad som hĂ€nder i ABP.", + "Events_Page_Title": "ABP Community Samtal", + "Members_Page_WritingFromUser": "LĂ€s skrivning frĂ„n {0} pĂ„ ABP Community.", + "Post_Create_Page_MetaTitle": "Ny post", + "Post_Create_Page_MetaDescription": "Skapa ditt inlĂ€gg för att dela med dig av dina erfarenheter om ABP-ramverket och bidra till ABP-communityn.", + "Post_Create_Page_CreateNewPost": "Skapa nytt inlĂ€gg", + "Post_Index_Page_MetaDescription": "ABP Communitys syfte Ă€r att skapa en bidragsmiljö för utvecklare som anvĂ€nder ABP-ramverket.", + "Layout_Title": "{0} | ABP Gemenskap", + "Layout_MetaDescription": "Ett nav för ABP Framework, .NET och programvaruutveckling. FĂ„ tillgĂ„ng till artiklar, handledning, nyheter och bidra till ABP-communityn.", + "Index_Page_CommunityIntroduction": "Detta Ă€r ett nav för ABP Framework, .NET och programvaruutveckling. Du kan lĂ€sa artiklarna, titta pĂ„ videohandledningarna, fĂ„ information om ABP:s utvecklingsframsteg och ABP-relaterade evenemang, hjĂ€lpa andra utvecklare och dela med dig av din expertis till ABP-communityn.", + "TagsInArticle": "Taggar i artikel", + "IConsentToMedium": "Jag samtycker till publicering av detta inlĂ€gg pĂ„ https://medium.com/volosoft.", + "SearchResultsFor": "Sökresultat för \"{0}\"", + "SeeMoreVideos": "Se fler videor", + "DiscordPageTitle": "ABP Discord Gemenskap", + "ViewVideo": "Visa video", + "AbpCommunityTitleContent": "ABP Community - ABP-ramverk med öppen kĂ€llkod", + "CommunitySlogan": "En unik community-plattform för ABP-Ă€lskare.", + "RaffleIsNotActive": "Lottdragningen Ă€r inte aktiv", + "YouAreAlreadyJoinedToThisRaffle": "Du Ă€r redan med i utlottningen!", + "InvalidSubscriptionCode": "Ogiltig prenumerationskod", + "Raffle:{0}": "Lottdragning: {0}", + "Join": "GĂ„ med", + "Leave": "LĂ€mna", + "LoginToJoin": "Logga in för att gĂ„ med", + "ToEnd:": "För att avsluta:", + "ToStart:": "Det Ă€r en början:", + "days": "dagar", + "hrs": "timmar", + "min": "min", + "sec": "sek", + "Winners": "Vinnare", + "To{0}LuckyWinners": "till {0} lyckliga vinnare", + "ActiveRaffles": "Aktiva Rafflar.", + "UpcomingRaffles": "Kommande Rafflar", + "CompletedRaffles": "FĂ€rdigstĂ€llda Rafflar", + "NoActiveRaffleTitle": "Ingen aktiv utlottning Ă€r tillgĂ€nglig för tillfĂ€llet.", + "NoActiveRaffleDescription": "Ingen aktiv utlottning Ă€r tillgĂ€nglig för tillfĂ€llet.", + "RaffleSubscriptionCodeInputMessage": "Denna utlottning krĂ€ver en registreringskod. VĂ€nligen ange registreringskoden nedan:", + "RaffleSubscriptionCodeInputErrorMessage": "Registreringskoden Ă€r felaktig. VĂ€nligen försök igen.", + "GoodJob!": "Bra jobbat!", + "RaffleJoinSuccessMessage": "Du Ă€r nu registrerad för utlottningen. Du kommer att informeras via e-post om du vinner priset!", + "RaffleLoginAndRegisterMessage": "Du mĂ„ste logga in för att delta i utlottningen! Om du inte har registrerat dig Ă€nnu kan du skapa ett konto gratis nu.", + "Ok": "Ok", + "SeeDetails": "Se detaljer", + "WaitingForTheDraw": "VĂ€nta pĂ„ dragningen!", + "AllAttendees": "Alla deltagare", + "SeeRaffleDetail": "Se Raffle detalj", + "SeeRaffle": "Se Raffle", + "ParticipationIsComplete": "Deltagandet Ă€r fullstĂ€ndigt.", + "ABPCoreDevelopmentTeam": "ABP Core utvecklingsteam", + "RegisterTheEvent": "Registrera evenemanget", + "GoToConferencePage": "GĂ„ till konferenssidan", + "BuyTicket": "Buy Ticket", + "SeeEvent": "Se evenemang", + "PreviousEvents": "Tidigare evenemang", + "OtherLiveEvents": "Andra live-evenemang", + "SponsoredConferences": "Sponsrade konferenser", + "SponsoredConferencesDescription": "Vi Ă€r stolta över att stödja .NET-communities och evenemang för programvaruutvecklare.", + "UpcomingEvents": "Kommande evenemang", + "UpcomingCommunityTalkEventDescription": "Live-showerna, som leds av ABP-teamet, Ă€r avslappnade sessioner fulla av community-innehĂ„ll, demonstrationer, frĂ„gor och svar och diskussioner om vad som hĂ€nder i ABP.", + "UpcomingConferenceEventDescription": "ABP .NET Conference Ă€r ett virtuellt evenemang för .NET-utvecklare dĂ€r de kan trĂ€ffas och lyssna pĂ„ föredrag om .NET-vĂ€rlden, vanliga metoder för programvaruutveckling och ABP Framework med öppen kĂ€llkod.", + "LastOneYear": "Senaste 1 Ă„ret", + "AllTimes": "Alla tider", + "TopContributors": "De största bidragsgivarna", + "{0}Posts": "{0} InlĂ€gg", + "LATESTPOSTS": "SENASTE INLÄGGNINGAR", + "NoContributorsFound": "Inga bidragsgivare hittades!", + "LatestPost": "Senaste inlĂ€gget", + "MEMBERSINCE{0}": "MEDLEM EFTERSOM {0}", + "CopyLink": "Kopiera lĂ€nk", + "ShareOnTwitter": "Dela pĂ„ Twitter", + "ShareOnLinkedIn": "Dela pĂ„ LinkedIn", + "MoreFrom{0}": "Mer frĂ„n {0}", + "SeeAllFrom{0}": "Se alla frĂ„n {0}", + "MostWatched": "Mest bevakade", + "Articles({0})": "Artiklar ({0})", + "Videos({0})": "Videor ({0})", + "LatestArticles": "Senaste artiklar", + "RaffleHeader": "Hej ABP Community Member!", + "RafflesInfo": "
Det hÀr Àr utlottningssidan som Àr avsedd att visa vÄr uppskattning för att du Àr en aktiv gemenskapsmedlem. Vi gör ABP Community Talks ,ABP .NET Conference, deltar eller sponsrar .NET-relaterade evenemang dÀr vi ger bort nÄgra gÄvor.

Du kan följa den hÀr sidan för att se kommande lotterier, delta i dem eller se tidigare lotterier som vi dragit inklusive vinnarna.

Tack för att du Ă€r en aktiv medlem! Vi ses i de kommande lotterierna.", + "RafflesInfoTitle": "ABP Community Rafflar.", + "ToLuckyWinner": "till 1 lycklig vinnare", + "MarkdownSupported": "Stöd för Markdown.", + "Preview": "Förhandsgranskning", + "VisitPage": "Besök sidan", + "VisitVideoCourseDescription": "Om du vill lĂ€ra dig grunderna i ABP-ramverket kan du kolla in videokurserna ABP Essentials.", + "EditProfile": "Redigera profil", + "ConfirmEmailForPost": "För att kunna göra inlĂ€gg mĂ„ste du bekrĂ€fta din e-post. GĂ„ till account.abp.io/Account/Manage och verifiera din e-postadress under fliken Personal Info.", + "DailyPostCreateLimitation": "Du har nĂ„tt den dagliga grĂ€nsen för skapande av inlĂ€gg. Du kan skapa ett nytt inlĂ€gg i {0}.", + "YourAccountDisabled": "Ditt anvĂ€ndarkonto Ă€r inaktiverat!" + } +} \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Docs/Localization/Resources/sv.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Docs/Localization/Resources/sv.json new file mode 100644 index 0000000000..d24ece38ce --- /dev/null +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Docs/Localization/Resources/sv.json @@ -0,0 +1,9 @@ +{ + "culture": "sv", + "texts": { + "Buy": "Köp", + "SeeBookDetails": "Se bokdetaljer", + "MasteringAbpFrameworkEBookDescription": "Den hĂ€r boken hjĂ€lper dig att fĂ„ en fullstĂ€ndig förstĂ„else för ramverket och moderna tekniker för utveckling av webbapplikationer.", + "Feedback": "Återkoppling" + } +} \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Support/Localization/Resources/sv.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Support/Localization/Resources/sv.json new file mode 100644 index 0000000000..e39cf79f0e --- /dev/null +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Support/Localization/Resources/sv.json @@ -0,0 +1,6 @@ +{ + "culture": "sv", + "texts": { + "FAQ": "VANLIGA FRÅGOR" + } +} \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en-GB.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en-GB.json index f0f5dbd496..f91152bf59 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en-GB.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en-GB.json @@ -153,6 +153,9 @@ "AndMore": "and more...", "Code": "Code", "Result": "Result", + "CommercialSupport": "Commercial Suport", + "GithubIssues": "GitHub Issues", + "TechnicalSupport": "Technical Support", "SeeTheDocumentForMoreInformation": "See the {0} document for more information", "IndexPageHeroSection": "open sourceWeb Application
Framework
for asp.net core", "UiFramework": "UI Framework", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json index a7fba41149..2eaa3d875d 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json @@ -110,6 +110,9 @@ "EmailSMSAbstractionsWithTemplatingSupport": "Email & SMS Abstractions with Templating Support", "Localization": "Localization", "SettingManagement": "Setting Management", + "CommercialSupport": "Commercial Suport", + "GithubIssues": "GitHub Issues", + "TechnicalSupport": "Technical Support", "ExtensionMethods": "Extension Methods", "ExtensionMethodsHelpers": "Extension Methods & Helpers", "AspectOrientedProgramming": "Aspect Oriented Programming", @@ -258,6 +261,8 @@ "Name": "Name", "Surname": "Surname", "CompanyName": "Company name", + "CompanyAddress" : "Company Address", + "TaxNumber" : "Tax Number", "Free": "Free", "DDDEBook": "DDD E-Book", "PracticalGuideForImplementingDDD": "This book is a practical guide for implementing the Domain Driven Design with the ABP Framework.", @@ -481,7 +486,7 @@ "GenderRequired": "The Gender field is required.", "LeaveUsReview": "Leave us review", "ABPVideoCoursesDescription": "Learn fundamental concepts and usage of ABP Framework in this video course series. Ideal for newbies!", - "ABPVideoCoursesPageDescription": "Learn the basics of the ABP Framework through video courses created by the ABP team. In this video series, you will learn the essential topics of the ABP Framework. The numbers on each video are written according to the learning flow.", + "ABPVideoCoursesPageDescription": "In this video series, you will learn the key topics of the ABP Framework through videos prepared by the ABP Team.", "DocumentationButtonTitle": "Documentation", "ABPVideoCoursesTitle": "Essentials Videos", "LovedDevelopers": "Loved by thousands of developers
around the world", @@ -539,7 +544,7 @@ "CommercialLicenses": "Commercial Licenses", "WhatIsDifferencePaidLicenses": "What is the difference between a personal license and other types of paid licenses?", "DifferencePaidLicenseExplanation1": "A non-personal paid license is the standard licensing option for enterprises and commercial entities. Licenses are purchased by the company and can be used by anyone within the organization.", - "DifferencePaidLicenseExplanation2": "Personal License; on the other hand, is a type of license for private individuals/freelancers/independent developers who purchase licenses with their own funds and solely for their own use. The Personal License has some limitations. In this plan, there can only be 1 developer working on the ABP project and no additional developers are allowed to be added later to the project. Downloading the source-code of PRO modules is not allowed in the personal license plan. Also, there is no microservice template and tier (layered) architecture in this plan. Personal License holders can only use the following modules: Account, Audit Log UI, GDPR, Identity, Language Management, LeptonX PRO, OpenIddict UI and SaaS. Personal License holders cannot use the following modules: Chat, CMS-Kit PRO, Forms, Identity Server User Interface, Lepton Theme, Text Template Management, File Management and Twilio SMS. You can access the full module list at abp.io/modules.", + "DifferencePaidLicenseExplanation2": "Personal License; on the other hand, is a type of license for private individuals/freelancers/independent developers who purchase licenses with their own funds and solely for their own use. The Personal License has some limitations. In this plan, there can only be 1 developer working on the ABP project and no additional developers are allowed to be added later to the project. Downloading the source-code of PRO modules is not allowed in the personal license plan. Also, there is no microservice template and tier (layered) architecture in this plan. Personal License holders can only use the following modules: Account, Audit Logging UI, GDPR, Identity, Language Management, LeptonX PRO, OpenIddict UI and SaaS. Personal License holders cannot use the following modules: Chat, CMS-Kit PRO, File Management, Forms, Payment, Text Template Management, and Twilio SMS. You can access the full module list at abp.io/modules.", "ReadyToStart": "Ready to start?", "TransformYourIdeasIntoRealityWithOurProfessionalNETDevelopmentServices": "Transform your ideas into reality with our professional .NET development services.", "ReadyToUpgrade": "Ready to upgrade?", @@ -574,6 +579,11 @@ "CreatePostTitleInfo": "Title of the post to be shown on the post list.", "CreatePostSummaryInfo": "A short summary of the post to be shown on the post list. Maximum length: {0}", "CreatePostCoverInfo": "For creating an effective post, add a cover photo. Upload 16:9 aspect ratio pictures for the best view.
Maximum file size: 1MB.", + "CreatePostCoverInfo_Title": "Add a cover image to your post.", + "CreatePostCoverInfo1": " Accepted file types : JPEG, JPG, PNG", + "CreatePostCoverInfo2": " Max file size : 1 MB", + "CreatePostCoverInfo3": " Image proportion : 16:9", + "CreatePostCoverInfo4": " Download a sample cover image ", "ThisExtensionIsNotAllowed": "This extension is not allowed.", "TheFileIsTooLarge": "The file is too large.", "GoToThePost": "Go to the Post", @@ -1458,6 +1468,7 @@ "MAUI": "MAUI", "HowItWorks_Page_Title": "How It Works?", "HowItWorks_Page_Description": "Understand how ABP Framework works with detailed documentation, including guides and best practices.", + "HowItWorks_Description_Title": "What’s possible with ASP.NET Core, easier with ABP!", "HowItWorks_Description1": "ABP extends the .NET platform. So, anything you can do with a plain .NET solution is already possible with ABP. That makes it easy to get started with a low learning curve.", "HowItWorks_Description2": "Once you start learning and using ABP features, developing your software will be much more enjoyable than ever.", "HowItWorks_Description3": "This page basically explains how you use the ABP Platform as a .NET developer.", @@ -1841,6 +1852,11 @@ "BackgroundWorkers": "Background Workers", "BackgroundWorkersExplanation": "Define operations to run in a separate, dedicated thread. Use the built-in background workers or integrate your own. Hangfire and Quartz integrations are already available.", "ConcurrencyCheck": "Concurrency Check", - "ConcurrencyCheckExplanation": "ABP provides an optimistic concurrency check mechanism to ensure data consistency in your application and prevents users access or change the same data in a database at the same time." + "ConcurrencyCheckExplanation": "ABP provides an optimistic concurrency check mechanism to ensure data consistency in your application and prevents users access or change the same data in a database at the same time.", + "NewsletterEmailFooterCreateTemplateMessage": "
Thank you for subscribing! We're thrilled to have you on board.
As a subscriber, you'll receive the latest updates on:
  • Promotional Offers:Benefit from exclusive discounts, seasonal campaigns, and special offers.
  • Events:Stay informed about our Community Talks, Webinars, and the ABP DOTNET Conferences.
  • Release Notes:Get the latest on ABP Platform releases and new products.
  • Newsletter:Enjoy our blog posts, community news, and more.

We look forward to keeping you informed and engaged.
", + "NewsletterDeleteSubscriptionDescription": "
This is a confirmation that you have unsubscribed from the following email categories:
  • Promotional Offers:Discounts, seasonal campaigns, etc.
  • Events:Community Talks, Webinars, ABP DOTNET Conference, etc.
  • Release Notes:ABP Platform releases, new products, etc.
  • Newsletter:Blog posts, community news, etc.

Please note that you will still receive important transactional emails related to your account.
", + "NewsletterEmailFooterTemplateDeleteSubscription": "If you change your mind, you're always welcome to resubscribe!", + "GenerateQuote" : "Generate Quote" , + "GeneratePriceQuote" : "Generate a Price Quote" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/sv.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/sv.json new file mode 100644 index 0000000000..a26f21b66b --- /dev/null +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/sv.json @@ -0,0 +1,1828 @@ +{ + "culture": "sv", + "texts": { + "GetStarted": "Kom igĂ„ng", + "Create": "Skapa", + "NewProject": "Nytt projekt", + "DirectDownload": "Direkt nedladdning", + "ProjectName": "Projektets namn", + "ProjectType": "Typ av projekt", + "DatabaseProvider": "Databasleverantör", + "DatabaseManagementSystem": "System för databashantering", + "NTier": "N-djur", + "IncludeUserInterface": "Inkludera anvĂ€ndargrĂ€nssnitt", + "CreateNow": "Skapa nu", + "TheStartupProject": "Uppstartsprojektet", + "Tutorial": "Handledning", + "UsingCLI": "AnvĂ€nda CLI", + "SeeDetails": "Se detaljer", + "AbpShortDescription": "ABP Framework Ă€r en komplett infrastruktur för att skapa mjukvarulösningar med moderna arkitekturer baserade pĂ„ ASP.NET Core-plattformen.", + "SourceCodeUpper": "KÄLLKOD", + "LatestReleaseLogs": "Senaste versionens loggar", + "Infrastructure": "Infrastruktur", + "Architecture": "Arkitektur", + "Modular": "ModulĂ€r", + "DontRepeatYourself": "Upprepa inte dig sjĂ€lv", + "DeveloperFocused": "Fokus pĂ„ utvecklare", + "FullStackApplicationInfrastructure": "Full stack applikationsinfrastruktur.", + "DomainDrivenDesign": "DomĂ€nstyrd design", + "DomainDrivenDesignExplanation": "Designad och utvecklad utifrĂ„n DDD-mönster och principer. Ger en skiktad modell för din applikation.", + "Authorization": "Auktorisering", + "AuthorizationExplanation": "Avancerad auktorisering med anvĂ€ndare, roll och finkornigt behörighetssystem. Byggt pĂ„ Microsoft Identity-biblioteket.", + "MultiTenancy": "Multi-tenancy", + "MultiTenancyExplanationShort": "SaaS-applikationer pĂ„ ett enkelt sĂ€tt! Integrerad multi-tenancy frĂ„n databas till anvĂ€ndargrĂ€nssnitt.", + "CrossCuttingConcerns": "TvĂ€rgĂ„ende angelĂ€genheter", + "CrossCuttingConcernsExplanationShort": "Komplett infrastruktur för auktorisering, validering, undantagshantering, cachelagring, revisionsloggning, transaktionshantering med mera.", + "BuiltInBundlingMinification": "Inbyggd paketering och minimering", + "BuiltInBundlingMinificationExplanation": "Du behöver inte anvĂ€nda externa verktyg för paketering och minifiering. ABP erbjuder ett enklare, mer dynamiskt, kraftfullt, modulĂ€rt och inbyggt sĂ€tt!", + "VirtualFileSystem": "Virtuellt filsystem", + "VirtualFileSystemExplanation": "BĂ€dda in vyer, skript, stilar, bilder ... i paket/libraries och Ă„teranvĂ€nd dem i olika applikationer.", + "Theming": "Tematisering", + "ThemingExplanationShort": "AnvĂ€nd och anpassa det bootstrap-baserade standardgrĂ€nssnittstemat eller skapa ditt eget.", + "BootstrapTagHelpersDynamicForms": "Bootstrap-tagghjĂ€lpmedel och dynamiska formulĂ€r", + "BootstrapTagHelpersDynamicFormsExplanation": "IstĂ€llet för att manuellt skriva de upprepade detaljerna i bootstrap-komponenter, anvĂ€nd ABP:s tagghjĂ€lpmedel för att förenkla dem och dra nytta av IntelliSense. Bygg snabbt anvĂ€ndargrĂ€nssnittsformulĂ€r baserat pĂ„ en C#-modell med hjĂ€lp av tagghjĂ€lpen för dynamiska formulĂ€r.", + "HTTPAPIsDynamicProxies": "HTTP API:er och dynamiska proxyservrar", + "HTTPAPIsDynamicProxiesExplanation": "Exponera automatiskt applikationstjĂ€nster som HTTP API:er i REST-stil och anvĂ€nd dem med dynamiska JavaScript- och C#-proxyer.", + "CompleteArchitectureInfo": "Modern arkitektur för att skapa underhĂ„llsfria programvarulösningar.", + "DomainDrivenDesignBasedLayeringModelExplanation": "HjĂ€lper till att implementera en DDD-baserad skiktad arkitektur och bygga en underhĂ„llbar kodbas.", + "DomainDrivenDesignBasedLayeringModelExplanationCont": "TillhandahĂ„ller startmallar, abstraktioner, basklasser, tjĂ€nster, dokumentation och guider som hjĂ€lper dig att utveckla din applikation baserat pĂ„ DDD-mönster och -principer.", + "MicroserviceCompatibleModelExplanation": "KĂ€rnramverket och de förbyggda modulerna Ă€r utformade med mikrotjĂ€nstarkitektur i Ă„tanke.", + "MicroserviceCompatibleModelExplanationCont": "TillhandahĂ„ller infrastruktur, integrationer, exempel och dokumentation för att göra det enklare att implementera mikrotjĂ€nstlösningar, samtidigt som det inte medför ytterligare komplexitet om du vill ha en monolitisk applikation.", + "ModularInfo": "ABP tillhandahĂ„ller ett modulsystem som gör att du kan utveckla Ă„teranvĂ€ndbara applikationsmoduler, knyta an till hĂ€ndelser i applikationens livscykel och uttrycka beroenden mellan centrala delar av ditt system.", + "PreBuiltModulesThemes": "Förbyggda moduler och teman", + "PreBuiltModulesThemesExplanation": "Moduler och teman med öppen kĂ€llkod och kommersiella moduler Ă€r redo att anvĂ€ndas i din affĂ€rsapplikation.", + "NuGetNPMPackages": "NuGet- och NPM-paket", + "NuGetNPMPackagesExplanation": "Distribueras som NuGet- och NPM-paket. LĂ€tt att installera och uppgradera.", + "ExtensibleReplaceable": "Utdragbar/utbytbar", + "ExtensibleReplaceableExplanation": "Alla tjĂ€nster och moduler Ă€r utformade med tanke pĂ„ utbyggbarhet. Du kan byta ut tjĂ€nster, sidor, stilar och komponenter.", + "CrossCuttingConcernsExplanation2": "HĂ„ll din kodbas mindre sĂ„ att du kan behĂ„lla fokus pĂ„ den kod som Ă€r specifik för ditt företag.", + "CrossCuttingConcernsExplanation3": "LĂ€gg inte tid pĂ„ att implementera gemensamma applikationskrav i flera projekt.", + "AuthenticationAuthorization": "Autentisering och auktorisering", + "ExceptionHandling": "Hantering av undantag", + "Validation": "Validering", + "DatabaseConnection": "Databasanslutning", + "TransactionManagement": "Transaktionshantering", + "AuditLogging": "Loggning av revision", + "Caching": "Caching", + "Multitenancy": "Multitenancy", + "DataFiltering": "Filtrering av data", + "ConventionOverConfiguration": "Konvention över konfiguration", + "ConventionOverConfigurationExplanation": "ABP implementerar vanliga applikationskonventioner som standard med minimal eller ingen konfiguration.", + "ConventionOverConfigurationExplanationList1": "Auto-registrering av kĂ€nda tjĂ€nster för beroendeinjektion.", + "ConventionOverConfigurationExplanationList2": "Exponerar applikationstjĂ€nster som HTTP API:er med hjĂ€lp av namnkonventioner.", + "ConventionOverConfigurationExplanationList3": "Skapar dynamiska HTTP-klientproxyer för C# och JavaScript.", + "ConventionOverConfigurationExplanationList4": "TillhandahĂ„ller standardförvar för dina enheter.", + "ConventionOverConfigurationExplanationList5": "Hanterar arbetsenhet per webbförfrĂ„gan eller applikationstjĂ€nstmetod.", + "ConventionOverConfigurationExplanationList6": "Publicerar skapa, uppdatera och ta bort hĂ€ndelser för dina enheter.", + "BaseClasses": "Basklasser", + "BaseClassesExplanation": "Förbyggda basklasser för vanliga applikationsmönster.", + "DeveloperFocusedExplanation": "ABP Ă€r till för utvecklare.", + "DeveloperFocusedExplanationCont": "Det syftar till att förenkla den dagliga programutvecklingen utan att hindra dig frĂ„n att skriva lĂ„gnivĂ„kod.", + "SeeAllFeatures": "Se alla funktioner", + "CLI_CommandLineInterface": "CLI (kommandoradsgrĂ€nssnitt)", + "CLI_CommandLineInterfaceExplanation": "InnehĂ„ller ett CLI som hjĂ€lper dig att automatisera skapandet av nya projekt och tillĂ€gg av nya moduler.", + "StartupTemplates": "Mallar för nystartade företag", + "StartupTemplatesExplanation": "ABP:s mall för applikationsstart ger en fullt konfigurerad lösning för att starta din utveckling.", + "BasedOnFamiliarTools": "Baserat pĂ„ vĂ€lkĂ€nda verktyg", + "BasedOnFamiliarToolsExplanation": "Byggd pĂ„ och integrerad med populĂ€ra verktyg som du redan kĂ€nner till. LĂ„g inlĂ€rningskurva, enkel anpassning, bekvĂ€m utveckling.", + "ORMIndependent": "ORM Oberoende", + "ORMIndependentExplanation": "KĂ€rnramverket Ă€r ORM/databasoberoende och kan fungera med alla datakĂ€llor. Entity Framework Core- och MongoDB-leverantörer finns redan tillgĂ€ngliga.", + "Features": "Utforska ABP-ramverkets funktioner", + "ABPCLI": "ABP CLI", + "Modularity": "Modularitet", + "BootstrapTagHelpers": "Bootstrap-taggarnas hjĂ€lpmedel", + "DynamicForms": "Dynamiska formulĂ€r", + "BundlingMinification": "Paketering och minimering", + "BackgroundJobs": "Bakgrundsjobb", + "BackgroundJobsExplanation": "Definiera enkla klasser för att utföra jobb i bakgrunden nĂ€r de stĂ„r i kö. AnvĂ€nd den inbyggda jobbhanteraren eller integrera din egen. Integrationer med Hangfire, RabbitMQ och Quartz Ă€r redan tillgĂ€ngliga.", + "DDDInfrastructure": "DDD Infrastruktur", + "DomainDrivenDesignInfrastructure": "DomĂ€nstyrd design Infrastruktur", + "AutoRESTAPIs": "Auto REST API:er", + "DynamicClientProxies": "Dynamiska klientproxyservrar", + "DistributedEventBus": "Distribuerad hĂ€ndelsebuss", + "DistributedEventBusWithRabbitMQIntegration": "Distribuerad hĂ€ndelsebuss med RabbitMQ-integration", + "TestInfrastructure": "Testinfrastruktur", + "AuditLoggingEntityHistories": "Audit Logging & Entity Histories", + "ObjectToObjectMapping": "Mappning av objekt till objekt", + "ObjectToObjectMappingExplanation": "Objekt-till-objekt-mappning abstraktion med AutoMapper-integration.", + "EmailSMSAbstractions": "E-post- och SMS-abstraktioner", + "EmailSMSAbstractionsWithTemplatingSupport": "E-post- och SMS-abstraktioner med stöd för templating", + "Localization": "Lokalisering", + "SettingManagement": "InstĂ€llning Management", + "ExtensionMethods": "Metoder för förlĂ€ngning", + "ExtensionMethodsHelpers": "Metoder och hjĂ€lpmedel för förlĂ€ngning", + "AspectOrientedProgramming": "Aspektorienterad programmering", + "DependencyInjection": "Injektion av beroenden", + "DependencyInjectionByConventions": "Dependency Injection enligt konventioner", + "ModularityExplanation": "ABP tillhandahĂ„ller en komplett infrastruktur för att bygga dina egna applikationsmoduler som kan innehĂ„lla enheter, tjĂ€nster, databasintegration, API:er, UI-komponenter och sĂ„ vidare.", + "MultiTenancyExplanation": "ABP stöder inte bara utveckling av applikationer med flera hyresgĂ€ster, utan gör ocksĂ„ din kod mestadels omedveten om flera hyresgĂ€ster.", + "MultiTenancyExplanation2": "Kan automatiskt bestĂ€mma den aktuella hyresgĂ€sten, isolera data frĂ„n olika hyresgĂ€ster frĂ„n varandra.", + "MultiTenancyExplanation3": "Stöd för en enda databas, databas per klient och hybridmetoder.", + "MultiTenancyExplanation4": "Du fokuserar pĂ„ din affĂ€rskod och lĂ„ter ramverket hantera multi-tenancy för din rĂ€kning.", + "BootstrapTagHelpersExplanation": "IstĂ€llet för att manuellt skriva de upprepande detaljerna i bootstrap-komponenterna, anvĂ€nd ABP:s tagghjĂ€lpmedel för att förenkla det och dra nytta av IntelliSense. Du kan anvĂ€nda Bootstrap direkt nĂ€r du behöver det.", + "DynamicFormsExplanation": "Dynamiska formulĂ€r- och inmatningstagghjĂ€lpmedel kan skapa ett komplett formulĂ€r frĂ„n en C#-klass som modell.", + "AuthenticationAuthorizationExplanation": "Rika autentiserings- och auktoriseringsalternativ integrerade med ASP.NET Core Identity & OpenIddict. TillhandahĂ„ller ett utbyggbart och detaljerat behörighetssystem.", + "CrossCuttingConcernsExplanation": "Upprepa inte dig sjĂ€lv för att implementera alla dessa vanliga saker om och om igen. Fokusera pĂ„ din affĂ€rskod och lĂ„t ABP automatisera dem genom konventioner.", + "DatabaseConnectionTransactionManagement": "Databasanslutning och transaktionshantering", + "CorrelationIdTracking": "SpĂ„rning av korrelation-Id", + "BundlingMinificationExplanation": "ABP erbjuder ett enkelt, dynamiskt, kraftfullt, modulĂ€rt och inbyggt system för paketering och minifiering.", + "VirtualFileSystemnExplanation": "Det virtuella filsystemet gör det möjligt att hantera filer som inte fysiskt finns i filsystemet (disken). Det anvĂ€nds frĂ€mst för att bĂ€dda in (js, css, image, cshtml...) filer i assemblies och anvĂ€nda dem som fysiska filer vid körning.", + "ThemingExplanation": "Theming-systemet gör det möjligt att utveckla dina applikationer och moduler tematiskt oberoende genom att definiera en uppsĂ€ttning gemensamma basbibliotek och layouter, baserade pĂ„ det senaste Bootstrap-ramverket.", + "DomainDrivenDesignInfrastructureExplanation": "En komplett infrastruktur för att bygga applikationer i flera lager baserat pĂ„ mönster och principer för domĂ€ndriven design;", + "Specification": "Specifikation", + "Repository": "Förvar", + "DomainService": "DomĂ€nservice", + "ValueObject": "VĂ€rdeobjekt", + "ApplicationService": "ApplikationstjĂ€nst", + "DataTransferObject": "Dataöverföringsobjekt", + "AggregateRootEntity": "Aggregerad rot, enhet", + "AutoRESTAPIsExplanation": "ABP kan automatiskt konfigurera dina applikationstjĂ€nster som API-controllers enligt konvention.", + "DynamicClientProxiesExplanation": "AnvĂ€nd enkelt dina API:er frĂ„n JavaScript- och C#-klienter.", + "DistributedEventBusWithRabbitMQIntegrationExplanation": "Publicera och konsumera enkelt distribuerade hĂ€ndelser med hjĂ€lp av den inbyggda Distributed Event Bus med RabbitMQ-integration.", + "TestInfrastructureExplanation": "Ramverket har utvecklats med enhets- och integrationstestning i Ă„tanke. Ger dig basklasser för att göra det enklare. Startmallar kommer förkonfigurerade för testning.", + "AuditLoggingEntityHistoriesExplanation": "Inbyggd revisionsloggning för affĂ€rskritiska applikationer. Granskningsloggning pĂ„ förfrĂ„gnings-, tjĂ€nste- och metodnivĂ„ samt entitetshistorik med detaljer pĂ„ egenskapsnivĂ„.", + "EmailSMSAbstractionsWithTemplatingSupportExplanation": "IEmailSender- och ISmsSender-abstraktionerna frikopplar din applikationslogik frĂ„n infrastrukturen. Avancerat e-postmallsystem gör det möjligt att skapa och lokalisera e-postmallar och enkelt anvĂ€nda dem nĂ€r det behövs.", + "LocalizationExplanation": "Lokaliseringssystemet gör det möjligt att skapa resurser i vanliga JSON-filer och anvĂ€nda dem för att lokalisera ditt anvĂ€ndargrĂ€nssnitt. Det stöder avancerade scenarier som arv, tillĂ€gg och JavaScript-integration samtidigt som det Ă€r helt kompatibelt med AspNet Core's lokaliseringssystem.", + "SettingManagementExplanation": "Definiera instĂ€llningar för din applikation och hĂ€mta vĂ€rdena i körtid baserat pĂ„ aktuell konfiguration, klient och anvĂ€ndare.", + "ExtensionMethodsHelpersExplanation": "Upprepa inte dig sjĂ€lv ens för triviala koddelar. Extensions & helpers för standardtyper gör din kod mycket renare och lĂ€ttare att skriva.", + "AspectOrientedProgrammingExplanation": "Ger en bekvĂ€m infrastruktur för att skapa dynamiska proxies och implementera aspektorienterad programmering. FĂ„nga upp valfri klass och kör din kod före och efter varje metodkörning.", + "DependencyInjectionByConventionsExplanation": "Du behöver inte registrera dina klasser för dependency injection manuellt. Registrerar automatiskt vanliga tjĂ€nstetyper enligt konvention. För andra typer av tjĂ€nster kan du anvĂ€nda grĂ€nssnitt och attribut för att göra det enklare och pĂ„ plats.", + "DataFilteringExplanation": "Definiera och anvĂ€nd datafilter som tillĂ€mpas automatiskt nĂ€r du söker efter enheter i databasen. Soft Delete & MultiTenant-filter tillhandahĂ„lls direkt nĂ€r du implementerar enkla grĂ€nssnitt.", + "PublishEvents": "Publicera evenemang", + "HandleEvents": "Hantera hĂ€ndelser", + "Code": "Kod", + "Result": "Resultat", + "SeeTheDocumentForMoreInformation": "Kolla in {0} dokumentet för mer information", + "UiFramework": "Ramverk för anvĂ€ndargrĂ€nssnitt", + "EmailAddress": "E-postadress", + "Mobile": "Mobil", + "ReactNative": "React Native", + "Strong": "Stark", + "Complete": "Komplett", + "BasedLayeringModel": "Baserad skiktningsmodell", + "Microservice": "Mikroservice", + "Compatible": "Kompatibel", + "MeeTTheABPCommunityInfo": "VĂ„rt uppdrag Ă€r att skapa en miljö dĂ€r utvecklare kan hjĂ€lpa varandra med inlĂ€gg, handledning, fallstudier etc. och trĂ€ffa likasinnade.", + "JoinTheABPCommunityInfo": "Engagera dig i en livlig gemenskap och bli en bidragsgivare till ABP-ramverket!", + "AllPosts": "Alla inlĂ€gg", + "SubmitYourPost": "Skicka in ditt inlĂ€gg", + "DynamicClientProxyDocument": "Kolla in dokumentationen för dynamisk klientproxy för JavaScript & C#.", + "EmailSMSAbstractionsDocument": "Mer information finns i dokumenten E-post och SMS-sĂ€ndning.", + "CreateProjectWizard": "Den hĂ€r guiden skapar ett nytt projekt frĂ„n startmallen som Ă€r korrekt konfigurerad för att starta upp ditt projekt.", + "TieredOption": "Skapar en skiktad lösning dĂ€r webb- och Http API-skikten Ă€r fysiskt Ă„tskilda. Om det inte Ă€r markerat skapas en skiktad lösning som Ă€r mindre komplex och lĂ€mplig för de flesta scenarier.", + "SeparateIdentityServerOption": "Separerar serversidan i tvĂ„ applikationer: Den första Ă€r för identitetsservern och den andra Ă€r för ditt HTTP-API pĂ„ serversidan.", + "SeparateAuthenticationServerOption": "Separerar serversidan i tvĂ„ applikationer: Den första Ă€r för autentiseringsservern och den andra Ă€r för ditt HTTP-API pĂ„ serversidan.", + "ProgressiveWebApplicationOption": "Anger projektet som Progressive Web Application", + "UseslatestPreVersion": "AnvĂ€nder den senaste pre-release-versionen", + "ReadTheDocumentation": "LĂ€s dokumentationen", + "Documentation": "Dokumentation", + "GettingStartedTutorial": "Handledning för att komma igĂ„ng", + "ApplicationDevelopmentTutorial": "Handledning för applikationsutveckling", + "TheStartupTemplate": "Startmall för nystartade företag", + "InstallABPCLIInfo": "ABP CLI Ă€r det snabbaste sĂ€ttet att starta en ny lösning med ABP-ramverket. Installera ABP CLI med hjĂ€lp av ett kommandoradsfönster:", + "DifferentLevelOfNamespaces": "Du kan anvĂ€nda olika nivĂ„er av namnrymder; t.ex. BookStore, Acme.BookStore eller Acme.Retail.BookStore.", + "ABPCLIExamplesInfo": "Kommandot new skapar en lagrad MVC-applikation med Entity Framework Core som databasleverantör. Det har dock ytterligare alternativ.", + "SeeCliDocumentForMoreInformation": "Kolla in ABP CLI-dokumentet för fler alternativ eller vĂ€lj fliken \"Direkt nedladdning\" ovan.", + "Optional": "Valfritt", + "LocalFrameworkRef": "BehĂ„ll den lokala projektreferensen för ramverkspaketen.", + "BlobStoring": "BLOB Storing", + "BlobStoringExplanation": "BLOB-lagringssystemet ger en abstraktion för att arbeta med BLOB. ABP tillhandahĂ„ller nĂ„gra förbyggda lagringsleverantörsintegrationer (Azure, AWS, File System, Database, etc.) som du enkelt kan anvĂ€nda i dina applikationer.", + "TextTemplating": "Templating av text", + "TextTemplatingExplanation": "Textmallar anvĂ€nds för att dynamiskt Ă„terge innehĂ„ll baserat pĂ„ en mall och en modell (ett dataobjekt). Du kan t.ex. anvĂ€nda det för att skapa dynamiskt e-postinnehĂ„ll med en förbyggd mall.", + "MultipleUIOptions": "Flera alternativ för anvĂ€ndargrĂ€nssnitt", + "MultipleDBOptions": "Flera databasleverantörer", + "MultipleDBOptionsExplanation": "Ramverket kan anvĂ€ndas med alla datakĂ€llor, men följande leverantörer Ă€r officiellt utvecklade och stöds:", + "SelectLanguage": "VĂ€lj sprĂ„k", + "LatestPostOnCommunity": "Senaste inlĂ€gget pĂ„ ABP Community", + "Register": "Registrera", + "IsDownloadable": "Är nedladdningsbar", + "DatabaseOptions": "Alternativ för databas", + "BackToPackagesPage": "Tillbaka till sidan Paket", + "HowToInstall": "SĂ„ hĂ€r installerar du", + "SeeOnNpm": "Se pĂ„ NPM", + "SeeOnNuget": "Detta Ă€r Nuget", + "MVCGulpCommandExplanation": "Om du anvĂ€nder MVC (Razor Pages) UI, kör kommandot \"gulp\" efter installationen av paketet.", + "UsingABPCLI": "AnvĂ€nda Abp CLI", + "WithoutABPCLI": "Utan ABP CLI", + "ABPCLIModuleDependency": "Abp Cli lĂ€gger automatiskt till modulberoende.", + "AddModuleDependency": "LĂ€gg sedan till modulberoende", + "Packages": "Paket", + "NugetPackages": "Nuget-paket", + "NPMPackages": "NPM-paket", + "SeeDocs": "Se dokument", + "None": "Ingen", + "Application": "TillĂ€mpning", + "ApplicationExplanation": "Skapar en heltĂ€ckande lösning baserad pĂ„ metoder för domĂ€ndriven design. Rekommenderas för lĂ„ngsiktiga projekt som behöver en underhĂ„llbar och utbyggbar kodbas.", + "ApplicationNoLayer": "Applikation (enstaka lager)", + "ApplicationNoLayerExplanation": "Skapar en webbapplikation i ett lager. Rekommenderas för att bygga en applikation med en enklare och mer lĂ€ttförstĂ„elig arkitektur.", + "Module": "Modul", + "ModuleExplanation": "Skapar en Ă„teranvĂ€ndbar, helt skiktad applikationsmodullösning. Du kan anvĂ€nda det hĂ€r alternativet för att skapa moduler för din modulĂ€ra applikation.", + "PackageName": "Paketets namn", + "LicenseURL": "URL för licens", + "License": "Licens", + "ProjectCreationSuccessMessage": "Ditt projekt har skapats framgĂ„ngsrikt", + "HowToRunSolution": "Hur kör jag din lösning?", + "GettingStartedMessage": "I dokumentet Kom igĂ„ng kan du lĂ€sa om hur du konfigurerar och kör din lösning.", + "WebAppDevTutorial": "Handledning för utveckling av webbapplikationer", + "WebAppDevTutorialMessage": "I handledningsdokumentet för utveckling av webbapplikationer finns ett exempel pĂ„ utveckling steg för steg.", + "CommunityPosts": "InlĂ€gg frĂ„n gemenskapen", + "CommunityPostMessage": "Kolla in ABP Community Platform för att lĂ€sa anvĂ€ndbara inlĂ€gg för ABP Framework.", + "InvestigateSolutionDetails": "Kolla in lösningsdetaljerna", + "StartupTemplateDocumentationMessage": "Ta en titt pĂ„ malldokumentet för applikationsstart för att lĂ€ra dig arkitekturen och strukturen för din lösning.", + "ClientSideDevelopment": "Utveckling pĂ„ klientsidan", + "ClientSideDevelopmentDocumentationMessage": "Kolla in {0}-dokumentet för att lĂ€ra dig de viktigaste punkterna för utvecklingen av anvĂ€ndargrĂ€nssnittet (klientsidan).", + "DatabaseProviderDocumentationMessage": "Kolla in dokumentet {0} för att lĂ€ra dig de viktigaste punkterna för utvecklingen av databaslagret.", + "ImplementingDDD": "Implementering av domĂ€ndriven design", + "DDDBookExplanation": "En praktisk guide för implementering av domĂ€ndriven design med ABP-ramverket.", + "Overview": "Översikt", + "TableOfContents": "InnehĂ„llsförteckning", + "IntroductionToImplementingDDD": "Introduktion till implementering av domĂ€ndriven design", + "WhatIsDDD": "Vad Ă€r domĂ€ndriven design?", + "Implementation": "Implementering", + "TheBigPicture": "Den stora bilden", + "TheBuildingBlock": "Byggstenen", + "ExampleUseCase": "Exempel AnvĂ€ndningsfall", + "DomainAndApplicationLogic": "DomĂ€nlogik och applikationslogik", + "Author": "Författaren", + "Pages": "Sidor", + "PublishedOn": "Publicerad pĂ„", + "FreeEBook": "Gratis e-bok", + "Download": "Nedladdningar", + "EBookSignInForDownload": "För att ladda ner e-boken logga in", + "SignIn": "Logga in", + "Or": "Eller", + "TellUsAboutYourself": "BerĂ€tta lite om dig sjĂ€lv", + "Name": "Namn", + "Surname": "Efternamn", + "CompanyName": "Företagets namn", + "Free": "Gratis", + "DDDEBook": "DDD e-bok", + "PracticalGuideForImplementingDDD": "Den hĂ€r boken Ă€r en praktisk guide för att implementera domĂ€ndriven design med ABP-ramverket.", + "IntroducingDDD": "Introduktion till domĂ€ndriven design", + "DDDLayersAndCleanArchitecture": "DDD-skikt och ren arkitektur", + "LayeringOfADotnetSolution": "Skiktning av en .NET-lösning", + "ImplementingDDDBuildingBlocks": "Implementering av DDD-byggstenar", + "DomainVsApplicationLogic": "DomĂ€nlogik vs applikationslogik", + "SamplesAndDiscussions": "Provtagningar och diskussioner", + "EmailNotValid": "VĂ€nligen ange en giltig e-postadress.", + "WeWillSendYouADownloadLink": "En lĂ€nk för att ladda ner e-boken har skickats till {0}. Kontrollera din inkorg, skrĂ€ppost eller spambox!", + "GoHome": "GĂ„ hem", + "InvalidFormInputs": "VĂ€nligen skriv in den giltiga information som anges pĂ„ formulĂ€ret.", + "DDDBookEmailBody": "Tack sĂ„ mycket.
För att ladda ner din bok, klicka hĂ€r.", + "SubscribeToNewsletter": "Prenumerera pĂ„ nyhetsbrevet för att fĂ„ information om vad som hĂ€nder i ABP Platform, t.ex. nya releaser, inlĂ€gg, erbjudanden och mycket mer.", + "FirstEdition": "Första upplagan", + "ThankYou": "Tack sĂ„ mycket!", + "CheckboxMandatory": "Du mĂ„ste kontrollera detta för att fortsĂ€tta!", + "UserInterface": "AnvĂ€ndargrĂ€nssnitt", + "APIGateway": "API-gateway", + "Database": "Databas", + "Saas": "Saas", + "OpenSourceWebApp": "Öppna kĂ€llan
webbapplikation", + "Framework": "Ramverk", + "AuditLoggingExplanation": "SpĂ„ra automatiskt alla operationer och dataförĂ€ndringar i ditt system.", + "AbpNewCommandExplanation": "Skapar nya lösningar med hjĂ€lp av ABP:s startmallar.", + "AbpAddModuleCommandExplanation": "Installerar förbyggda applikationsmoduler till din lösning", + "AbpUpdateCommandExplanation": "Uppdaterar automatiskt alla ABP-relaterade NuGet- och NPM-paket i din lösning.", + "ExploreAllCLICommands": "Utforska alla CLI-kommandon", + "ExploreDocumentationAndGuides": "Utforska den omfattande dokumentationen och guiderna.", + "Documentations": "Dokumentation", + "Views": "Utsikt", + "EnterYouEmailToGetNews": "Ange din e-postadress för att fĂ„ de senaste nyheterna om ABP-ramverket", + "Tiered": "Tiered", + "SeparateIdentityServer": "Separat identitetsserver", + "SeparateAuthenticationServer": "Separat autentiseringsserver", + "ProgressiveWebApplication": "Progressiv webbapplikation", + "Preview": "Förhandsgranskning", + "CreateANewSolution": "Skapa en ny .NET-lösning", + "FrameworkFeatures": "Funktioner för ramverk", + "Commercial": "Kommersiell", + "ThirdPartyTools": "Verktyg frĂ„n tredje part", + "Back": "Tillbaka", + "Community": "Gemenskap", + "SeeMore": "Se mer", + "DetailsOfTheEBook": "Detaljer om e-boken", + "JoinOurMarketingNewsletter": "AnmĂ€l dig till vĂ„rt marknadsföringsnyhetsbrev", + "FrameworkNewsletterConfirmationMessage": "Jag godkĂ€nner Villkor och bestĂ€mmelser och Privatlivspolicy.", + "GetYourFreeEBook": "HĂ€mta din gratis DDD e-bok ", + "EverythingYouNeedToKnow": "Allt du behöver veta.", + "PreOrderNow": "FörbestĂ€ll nu", + "UITheming": "Tematisering av anvĂ€ndargrĂ€nssnitt", + "UIThemingExplanation": "Skapa Ă„teranvĂ€ndbara UI-teman och layouter eller anvĂ€nd ett av de förbyggda UI-temana.", + "DataFilteringExplanation2": "Filtrera automatiskt vid förfrĂ„gningar frĂ„n databasen för att enkelt kunna implementera mönster som mjuk borttagning och multi-tenancy.", + "NeedHelp": "Behöver du hjĂ€lp?", + "GiveYourProjectAName": "Ge ditt projekt ett namn", + "SelectProjectType": "VĂ€lj projekttyp", + "SelectUIFramework": "VĂ€lj UI Framework", + "SelectDatabaseProvider": "VĂ€lj databasleverantör", + "SelectDatabaseManagementSystem": "VĂ€lj system för databashantering", + "InstallingTheABPCLI": "Installera ABP CLI", + "CreateYourProjectNow": "Skapa ditt projekt nu", + "OrderOn": "Order pĂ„ {0}", + "DownloadFreeDDDBook": "Ladda ner gratis DDD-bok", + "WhatIsABPFramework": "Vad Ă€r ABP-ramverket?", + "TenantDatabase": "HyresgĂ€st {0} Databas", + "SharedDatabase": "Delad databas", + "ConnectionResolver": "Återlösare för anslutning", + "TenantBasedDataFilter": "Filter för hyresgĂ€stbaserad data", + "ApplicationCode": "TillĂ€mpningskod", + "TenantResolution": "Lösning för hyresgĂ€ster", + "TenantUser": "HyresgĂ€st {0} AnvĂ€ndare", + "CardTitle": "Kortets titel", + "View": "Utsikt", + "Model": "Modell", + "Email": "E-post", + "Password": "Lösenord", + "Address": "Adress", + "Gender": "Kön", + "Male": "Man", + "Female": "Kvinna", + "Submit": "Skicka in", + "Unspecified": "Ospecificerad", + "StaticFileMiddleware": "Middleware för statiska filer", + "RazorViewEngine": "Razor View Motor", + "PhysicalFiles": "Fysiska filer (wwwroot)", + "EmbeddedFiles": "InbĂ€ddade filer (DLL)", + "DynamicFiles": "Dynamiska filer (minne)", + "BuildSolutionsWithAbp": "Skapa underhĂ„llbara .NET-lösningar genom att följa bĂ€sta praxis för programvaruutveckling med hjĂ€lp av ABP.", + "BuyOnAmazon": "Köp pĂ„ Amazon", + "BuyOnPackt": "Köp pĂ„ Packt", + "BuyOnDangDang": "Köp pĂ„ DangDang", + "BuyOnJD": "Köp pĂ„ JD", + "Discounted": "Rabatterad", + "MasteringAbpFramework_Book_KeyFeatures": "Viktiga funktioner", + "MasteringAbpFramework_Book_Key_Features_Description_1": "Bygga robusta, underhĂ„llbara, modulĂ€ra och skalbara programvarulösningar med hjĂ€lp av ABP Framework.", + "MasteringAbpFramework_Book_Key_Features_Description_2": "LĂ€r dig hur du implementerar SOLID-principer och domĂ€ndriven design i dina webbapplikationer.", + "MasteringAbpFramework_Book_Key_Features_Description_3": "UpptĂ€ck hur ABP Framework pĂ„skyndar din utvecklingscykel genom att automatisera repetitiva uppgifter.", + "MasteringAbpFramework_Book_Description": "Bokbeskrivning", + "MasteringAbpFramework_Book_Description_Details_1": "ABP Framework Ă€r en komplett infrastruktur för att skapa moderna webbapplikationer genom att följa\n bĂ€sta praxis och konventioner för mjukvaruutveckling. Med ABP:s ramverk och ekosystem pĂ„ hög nivĂ„ kan du\n implementera DRY-principen (Don't Repeat Yourself) och fokusera pĂ„ din affĂ€rskod.", + "MasteringAbpFramework_Book_Description_Details_2": "Den hĂ€r boken Ă€r skriven av skaparen av ABP Framework och hjĂ€lper dig att fĂ„ en fullstĂ€ndig förstĂ„else för ramverket\n ramverket och moderna tekniker för utveckling av webbapplikationer. Med steg-för-steg-förklaringar av viktiga\n begrepp och praktiska exempel kommer du att förstĂ„ kraven pĂ„ en modern webblösning och hur ABP\n Framework gör det enkelt att utveckla dina egna lösningar. Du kommer att upptĂ€cka de vanliga kraven pĂ„\n utveckling av webbapplikationer för företag och utforska den infrastruktur som tillhandahĂ„lls av ABP. Genom hela\n boken kommer du att lĂ€ra dig bĂ€sta praxis för mjukvaruutveckling för att bygga underhĂ„llbara och modulĂ€ra\n webblösningar.", + "MasteringAbpFramework_Book_Description_Details_3": "I slutet av den hĂ€r boken kommer du att kunna skapa en komplett webblösning som Ă€r lĂ€tt att utveckla, underhĂ„lla och testa,\n underhĂ„lla och testa.", + "MasteringAbpFramework_Book_WhatYouWillLearn": "Vad du kommer att lĂ€ra dig", + "MasteringAbpFramework_Book_What_You_Will_Learn_1": "Konfigurera utvecklingsmiljön och kom igĂ„ng med ABP Framework.", + "MasteringAbpFramework_Book_What_You_Will_Learn_2": "Arbeta med Entity Framework Core och MongoDB för att utveckla ditt dataĂ„tkomstlager.", + "MasteringAbpFramework_Book_What_You_Will_Learn_3": "FörstĂ„ övergripande problem och hur ABP automatiserar repetitiva uppgifter.", + "MasteringAbpFramework_Book_What_You_Will_Learn_4": "FĂ„ koll pĂ„ hur du implementerar domĂ€ndriven design med ABP Framework.", + "MasteringAbpFramework_Book_What_You_Will_Learn_5": "Bygg UI-sidor och komponenter med ASP.NET Core MVC (Razor Pages) och Blazor.", + "MasteringAbpFramework_Book_What_You_Will_Learn_6": "Arbeta med multi-tenancy för att skapa modulĂ€ra webbapplikationer.", + "MasteringAbpFramework_Book_What_You_Will_Learn_7": "FörstĂ„ modularitet och skapa Ă„teranvĂ€ndbara applikationsmoduler.", + "MasteringAbpFramework_Book_What_You_Will_Learn_8": "Skriva enhets-, integrations- och UI-tester med hjĂ€lp av ABP Framework.", + "MasteringAbpFramework_Book_WhoIsThisBookFor": "Vem Ă€r den hĂ€r boken för?", + "MasteringAbpFramework_Book_WhoIsThisBookFor_Description": "Den hĂ€r boken vĂ€nder sig till webbutvecklare som vill lĂ€ra sig programvaruarkitekturer och bĂ€sta praxis för att bygga\n underhĂ„llbara webbaserade lösningar med hjĂ€lp av Microsoft-teknik och ABP Framework. GrundlĂ€ggande kunskaper i C#\n och ASP.NET Core Ă€r nödvĂ€ndiga för att komma igĂ„ng med den hĂ€r boken.", + "ComputersAndTechnology": "Datorer & teknik", + "BuildingMicroserviceSolutions": "Bygga Microservice-lösningar", + "MicroserviceBookPracticalGuide": "Den hĂ€r boken Ă€r en referensguide för utveckling och hantering av mikrotjĂ€nstbaserade applikationer med hjĂ€lp av ABP Framework. Den refererar till .NET Microservice Sample Reference Application: eShopOnContainers och diskuterar den arkitektoniska utformningen och implementeringsmetoderna med hjĂ€lp av ABP-ramverket. I slutet av den hĂ€r boken kommer du att lĂ€ra dig hur ABP hanterar de vanligaste komplexiteterna för mikrotjĂ€nster, t.ex. auktorisering, distribuerade transaktioner, kommunikation mellan mikrotjĂ€nster, driftsĂ€ttning osv.", + "IntroducingTheSolution": "Vi presenterar lösningen eShopOnAbp", + "RunningTheSolution": "Kör lösningen", + "UnderstandingTheAuthenticationSystem": "FörstĂ„else för autentiseringssystemet", + "ExploringTheApplications": "Utforska applikationerna", + "UnderstandingTheAPIGateways": "FörstĂ„else för API-gateways", + "DevelopingTheMicroservices": "Utveckling av mikrotjĂ€nster", + "UnderstandingTheInfrastructure": "FörstĂ„else för infrastrukturen", + "DiggingInTheUseCases": "GrĂ€va i anvĂ€ndningsfallen", + "DeployingTheSolution": "Implementering av lösningen", + "ThisBookIsInDraftStageAndIsNotCompletedYet": "Denna bok Ă€r i utkaststadiet och Ă€r inte fĂ€rdigstĂ€lld Ă€nnu.", + "Authors": "Författarna", + "MicroserviceEBook": "Mikroservice e-bok", + "SelectUITheme": "VĂ€lj UI-tema", + "LeptonXLiteTheme": "LeptonX Lite tema", + "BasicTheme": "GrundlĂ€ggande tema", + "LeptonXLiteThemeInfo": " Ett modernt och snyggt Bootstrap UI-tema. Perfekt om du vill ha ett produktionsfĂ€rdigt UI-tema. Detta Ă€r det nyaste temat och Ă€r standard.", + "BasicThemeInfo": "Minimalistiskt UI-tema med vanliga Bootstrap-fĂ€rger och -stilar. Perfekt om du ska bygga ditt eget UI-tema.", + "SeeDocumentation": "Se dokumentation.", + "SeeFullScreen": "đŸ–Œïž Se skĂ€rmdump", + "BuildingMicroserviceSolutionsShortDescription": "Den hĂ€r boken Ă€r en referensguide för utveckling och hantering av mikrotjĂ€nstbaserade applikationer med hjĂ€lp av ABP-ramverket.", + "InstallAbpCliMessage": "Installera ABP CLI i en kommandoradsterminal om du inte har installerat det tidigare:", + "Terminal": "Terminal", + "Copy": "Kopia", + "RunTheFollowingCommand": "Kör följande kommando i en kommandoradsterminal:", + "ChangeSolutionOptionsBelow": "Du kan Ă€ndra lösningsalternativen nedan.", + "MultiLayerApplication": "Flera lager
AnvÀndningsomrÄde", + "MultiLayerApplicationExplanation1": "Skapar en heltÀckande lösning baserad pÄ metoder för domÀndriven design.", + "MultiLayerApplicationExplanation2": "Rekommenderas för lÄngsiktiga projekt som krÀver en underhÄllbar och utbyggbar kodbas.", + "SingleLayerApplication": "Enkelskikt
AnvÀndningsomrÄde", + "SingleLayerApplicationExplanation1": "Skapar en webbapplikation i ett lager. ", + "SingleLayerApplicationExplanation2": "Rekommenderas för att bygga en applikation med en enklare och mer lÀttförstÄelig arkitektur.", + "ApplicationModule": "Applikation
Modul", + "SeeTheScreenshot": "Se skĂ€rmdumpen", + "ApplicationModuleExplanation1": "Skapar en Ă„teranvĂ€ndbar, helt skiktad applikationsmodullösning.", + "ApplicationModuleExplanation2": "Du kan anvĂ€nda detta alternativ för att skapa moduler för din modulĂ€ra applikation.", + "Expert_": "Expert", + "Partner_": "Partnerskap", + "WebSite": "Webbplats", + "Expert_Year": "Kompetens År", + "CompanyInfo": "Företagsinformation", + "Date": "Datum", + "WhoWeAre_Partner": "Vilka vi Ă€r", + "WhoWeAre_Expert": "Om mig", + "CreateSolutionFolder": "Skapa lösningsmapp", + "CreateSolutionFolderOption": "Anger om projektet ska lĂ€ggas i en ny mapp i utdatamappen eller direkt i utdatamappen.", + "BooksPageTitle": "ABP Böcker", + "BooksPageDescription": "Utforska ABP-böcker för att fördjupa din förstĂ„else och behĂ€rskning av ABP-ramverket.", + "PackageDetailPage_NuGetPackageInstallationOptions": "Det finns tre sĂ€tt att installera {0} NuGet-paket till ditt projekt", + "PackageDetailPage_InstallingWithABPCLI": "1: Installera med ABP CLI", + "PackageDetailPage_InstallingWithABPCLIDescription1": "Om du inte har installerat ABP CLI, installera först genom att utföra följande kommando i en kommandoradsterminal", + "PackageDetailPage_InstallingWithABPCLIDescription2": "NĂ€r du har installerat ABP CLI öppnar du en kommandoradsterminal pĂ„ platsen för projektet (.csproj-filen) som du vill installera det och kör följande kommando", + "PackageDetailPage_InstallingWithABPCLIDescription3": "Den lĂ€gger till {0}-paketreferensen i ditt projekt och {1}-beroendet i din modulklass.", + "PackageDetailPage_ManualInstallation": "2: Installera med Dotnet CLI", + "PackageDetailPage_ManualInstallationDescription1": "LĂ€gg till {0} NuGet-paketreferens till ditt projekt med hjĂ€lp av din IDE eller genom att utföra följande kommando", + "PackageDetailPage_ManualInstallationDescription2": "LĂ€gg sedan till {0}-beroendet i din modulklass enligt följande exempel", + "PackageDetailPage_SeeDocumentation": "Se dokumentationen för att lĂ€ra dig hur du anvĂ€nder det hĂ€r paketet i dina program.", + "PackageDetailPage_InstallingUsingPMC": "3: Installera med Package Manager-konsolen", + "PackageDetailPage_InstallingUsingPMCDescription1": "Öppna Package Manager Console i Visual Studio (Verktyg -> Nuget Package Manager -> Package Manager Console) och kör följande kommando", + "UIOptions": "Alternativ för anvĂ€ndargrĂ€nssnitt", + "Testimonials": "VittnesmĂ„l", + "CoolestCompaniesUseABPFramework": "De coolaste företagen anvĂ€nder ABP-ramverket", + "Index_Page_Testimonial_1": "ABP Framework Ă€r inte bara ett verktyg utan en katalysator som har pĂ„skyndat min tillvĂ€xt som utvecklare. Det har gjort det möjligt för mig att bygga nya funktioner snabbare Ă€n nĂ„gonsin tidigare, som pĂ„minner om andra anvĂ€ndares erfarenheter. Det enhetliga kodningsmönstret har effektiviserat mina projekt, vilket ger mig mer tid att fokusera pĂ„ att skapa snarare Ă€n att felsöka.\nJag skulle sĂ€ga att ABP-ramverket har varit hörnstenen i min tidiga professionella resa. Det har underlĂ€ttat min övergĂ„ng frĂ„n en aspirerande utvecklare till en sjĂ€lvsĂ€ker yrkesman som Ă€r redo att göra avtryck i programvaruvĂ€rlden. Jag ser fram emot de spĂ€nnande projekt som vĂ€ntar mig, med vetskapen om att ABP kommer att finnas dĂ€r för att vĂ€gleda mig. Det Ă€r mer Ă€n bara en produkt; det Ă€r en partner i framgĂ„ng.", + "Index_Page_Testimonial_2": "ABP Framework Ă€r inte bara ett ramverk, det Ă€r ocksĂ„ en vĂ€gledning för projektutveckling / hantering, eftersom det ger DDD, GenericRepository, DI, Microservice, Modularity utbildningar. Även om du inte kommer att anvĂ€nda sjĂ€lva ramverket kan du utveckla dig sjĂ€lv med abp.io/docs som Ă€r vĂ€l och professionellt förberedda. (OpenIddict, Redis, Quartz etc.)\nEftersom mĂ„nga saker Ă€r förbyggda förkortar det projektutvecklingstiden avsevĂ€rt. (SĂ„som inloggningssida, undantagshantering, datafiltrering-sĂ„dd, revisionsloggning, lokalisering, automatisk api-kontroller etc.)\nSom ett exempel frĂ„n vĂ„r app har jag anvĂ€nt Local Event Bus för lagerstyrning. SĂ„ jag kan hantera orderrörelser genom att skriva lagerhanterare.\nDet Ă€r underbart att inte förlora tid för CreationTime, CreatorId. De fylls i automatiskt.", + "VideosLoginAndRegisterMessage": "För att kunna titta pĂ„ videor mĂ„ste du logga in.", + "Filter": "Filter", + "VideoCourses": "Viktiga videor", + "TestimonialText": "Ditt vittnesmĂ„l", + "Position": "Position", + "ExperienceYear": "Antal Ă„rs erfarenhet", + "FullName": "FullstĂ€ndigt namn", + "CompanySize": "Företagets storlek", + "TestimonialTitle": "LĂ„t oss höra ditt vittnesmĂ„l", + "TestimonialInfo": "Vad vĂ„ra kunder sĂ€ger Ă€r viktigt! BerĂ€tta om din erfarenhet av vĂ„ra produkter och tjĂ€nster. Vi rekommenderar att du skriver din testimonial pĂ„ engelska för att nĂ„ ut till en bredare publik.", + "Country": "Land", + "TestimonialTextPlaceholder": "Skriv en kort berĂ€ttelse om hur ABP hjĂ€lpte dig att bygga och leverera ditt projekt.", + "PositionPlaceholder": "Din position pĂ„ företaget", + "SelectExperienceYearPlaceholder": "Hur mĂ„nga Ă„r har du arbetat inom mjukvarubranschen", + "FullNamePlaceholder": "Ditt fullstĂ€ndiga namn", + "CompanyNamePlaceholder": "Ditt företagsnamn", + "SelectCompanySizePlaceholder": "Antal anstĂ€llda", + "ImagePlaceholder": "Din bild", + "SelectCountryPlaceholder": "Ditt land", + "YouAreNotAuthorizedToWriteTestimonial": "För att kunna skriva ett rekommendationsbrev mĂ„ste du vara inloggad.", + "UnAuthorizeTestimonialInfo": "Din Ă„sikt Ă€r viktig! Logga in för att dela den.", + "TheFileIsTooLargeForImage": "Din profilbild kan inte vara mer Ă€n {0} MB", + "ThisExtensionIsNotAllowedForImage": "Denna förlĂ€ngning Ă€r inte tillĂ„ten.", + "FileUploadError": "Fel vid filuppladdning", + "TestimonialSend": "Tack sĂ„ mycket! Vi har tagit emot ditt vittnesmĂ„l.
Vi kommer att granska och ta nĂ€sta steg snart.", + "Title": "Titel", + "TitlePlaceholder": "Programvaruutvecklare, CTO etc.", + "characters": "karaktĂ€rer", + "Testimonial_YourProfilePicture": "Din profilbild (endast {0})", + "BootstrapCardTitle": "Detta Ă€r ett exempel pĂ„ en kortkomponent som byggts av ABP bootstrap card tag helper.", + "GoSomewhere": "Åk nĂ„gonstans →.", + "ABPTestimonialTitle": "Nytt vittnesmĂ„l", + "ABPTestimonialDescription": "Skicka in din testimonial till ABP Community genom att dela med dig av dina erfarenheter och feedback om ramverket.", + "NotValidEmailAddress": "E-postfĂ€ltet Ă€r inte en giltig e-postadress.", + "EmailAddressMaxLength": "FĂ€ltet Email mĂ„ste vara en strĂ€ng med en maximal lĂ€ngd pĂ„ 255.", + "EmailAddressRequired": "FĂ€ltet E-post Ă€r obligatoriskt.", + "PasswordLength": "FĂ€ltet Password mĂ„ste vara en strĂ€ng med en maximal lĂ€ngd pĂ„ 32.", + "PasswordRequired": "FĂ€ltet Password (Lösenord) Ă€r obligatoriskt.", + "AddressLength": "FĂ€ltet Address mĂ„ste vara en strĂ€ng med en maximal lĂ€ngd pĂ„ 255.", + "GenderRequired": "FĂ€ltet Gender (kön) Ă€r obligatoriskt.", + "LeaveUsReview": "LĂ€mna oss en recension", + "ABPVideoCoursesDescription": "LĂ€r dig grundlĂ€ggande begrepp och anvĂ€ndning av ABP Framework i denna videokursserie. Perfekt för nybörjare!", + "ABPVideoCoursesPageDescription": "LĂ€r dig grunderna i ABP-ramverket genom videokurser som skapats av ABP-teamet. I den hĂ€r videoserien fĂ„r du lĂ€ra dig de viktigaste Ă€mnena i ABP-ramverket. Siffrorna i varje video Ă€r skrivna enligt inlĂ€rningsflödet.", + "DocumentationButtonTitle": "Dokumentation", + "ABPVideoCoursesTitle": "Viktiga videor", + "LovedDevelopers": "Älskad av tusentals utvecklare
runt om i vĂ€rlden", + "ABPIOPlatformPackages": "ABP-paket", + "AbpPackagesDescription": "Utöka din applikation med olika paket som finns i ABP och lĂ€gg till funktioner och egenskaper.", + "Cancel": "Avbryt", + "Continue": "FortsĂ€tt", + "WhatIsTheABPIOPlatform": "Vad Ă€r ABP-plattformen?", + "AbpIoPlatformExplanation1": "ABP Platform Ă€r en omfattande infrastruktur för applikationsutveckling baserad pĂ„ .NET- och ASP.NET Core-plattformarna. Den fyller gapet mellan den enkla ASP.NET Core-plattformen och de komplexa krav som stĂ€lls vid utveckling av programvara för moderna företag.", + "AbpIoPlatformExplanation2": "I kĂ€rnan tillhandahĂ„ller det ett open source och gratis ramverk som bestĂ„r av hundratals NuGet- och NPM-paket, som alla erbjuder olika funktioner. KĂ€rnramverket Ă€r modulĂ€rt, tematiserbart och kompatibelt med mikrotjĂ€nster, vilket ger en komplett arkitektur och en robust infrastruktur. Detta gör att du kan fokusera pĂ„ din affĂ€rskod snarare Ă€n att upprepa dig sjĂ€lv för varje nytt projekt. Det Ă€r baserat pĂ„ bĂ€sta praxis för programvaruutveckling och integrerar populĂ€ra verktyg som du redan kĂ€nner till. Ramverket Ă€r helt gratis, open source och community-drivet.", + "AbpIoPlatformExplanation3": "ABP Platform erbjuder gratis och betalda licensalternativ. Beroende pĂ„ din licenstyp fĂ„r du tillgĂ„ng till flera produktionsfĂ€rdiga startmallar, mĂ„nga förbyggda applikationsmoduler, UI-teman, CLI och GUI-verktyg, support och mycket mer.", + "WhatAreTheDifferencesBetweenFreeAndPaid": "Vilka Ă€r skillnaderna mellan de fria och kommersiella licenserna?", + "WhatAreTheDifferencesBetweenFreeAndPaidExplanation1": "ABP-licensen för fri (öppen kĂ€llkod) omfattar kĂ€rnramverket, grundlĂ€ggande startmallar, grundlĂ€ggande moduler, grundlĂ€ggande teman och community-utgĂ„van av ABP Studio.", + "WhatAreTheDifferencesBetweenFreeAndPaidExplanation2": "Kommersiella licenser erbjuder ytterligare funktioner, inklusive fler startmallar (t.ex. startmallen för mikrotjĂ€nster), professionella applikationsmoduler, ett fullfjĂ€drat UI-tema, professionella utgĂ„vor av ABP Studio, ABP Suite för kodgenerering, fler alternativ för mobila startapplikationer, premiumsupport och nĂ„gra andra fördelar.", + "WhatAreTheDifferencesBetweenFreeAndPaidExplanation3": "För mer information om skillnaderna mellan licenstyperna, se prissĂ€ttningssidan.", + "HowDoIUseTheABPIOPlatform": "Hur anvĂ€nder jag ABP-plattformen?", + "HowDoIUseTheABPIOPlatformExplanation": "ABP Framework utökar .NET-plattformen, vilket innebĂ€r att allt du kan göra med en vanlig .NET-lösning redan Ă€r möjligt med ABP Framework. Det gör det enkelt att komma igĂ„ng med en lĂ„g inlĂ€rningskurva. Se sidan Hur det fungerar för att lĂ€ra dig hur du anvĂ€nder ABP Platform i praktiken.", + "SupportPolicyFaqExplanation1": "Vi tillhandahĂ„ller tvĂ„ typer av support: Community-support för anvĂ€ndare med en icke-kommersiell licens och premium-support för kommersiella licensinnehavare. Community-support Ă€r tillgĂ€ngligt pĂ„ plattformar som GitHub och Stackoverflow, dĂ€r supporten Ă€r begrĂ€nsad. Å andra sidan tillhandahĂ„lls premiumsupport pĂ„ den officiella ABP Support-webbplatsen. HĂ€r besvaras dina frĂ„gor direkt av ABP:s kĂ€rnutvecklare, vilket garanterar support av högre kvalitet.", + "SupportPolicyFaqExplanation2": "Information om Premium-support: Vi ger endast support för den aktiva och den föregĂ„ende huvudversionen. Vi garanterar inte patchreleaser för den tredje och Ă€ldre huvudversionen. Till exempel, om den aktiva versionen Ă€r 7.0.0, kommer vi att slĂ€ppa patchversioner för bĂ„de 6.x.x och 7.x.x. Dessutom ger vi support endast för ABP Platform-relaterade problem. Detta innebĂ€r att inget stöd ges för tredjepartsapplikationer, molntjĂ€nster och andra perifera bibliotek som anvĂ€nds av ABP-produkter.", + "SupportPolicyFaqExplanation3": "Vi Ă„tar oss att anvĂ€nda kommersiellt rimliga anstrĂ€ngningar för att ge vĂ„ra kunder teknisk support under de officiella öppettiderna för \"Volosoft Bilisim A.S\". Vi förbinder oss dock inte till en SLA-svarstid (Service-Level Agreement), men vi kommer att försöka svara pĂ„ de tekniska frĂ„gorna sĂ„ snabbt som möjligt inom vĂ„ra officiella arbetstider. Om inte ett sĂ€rskilt avtal görs med kunden tillhandahĂ„lls support uteslutande pĂ„ {1}. Dessutom Ă€r privat e-postsupport endast tillgĂ€nglig för innehavare av Enterprise-licens.", + "HowManyProducts": "Hur mĂ„nga olika produkter/lösningar kan jag bygga?", + "HowManyDevelopers": "Hur mĂ„nga utvecklare kan arbeta med lösningar som anvĂ€nder ABP Platform?", + "HowManyDevelopersExplanation": "ABP.IO-licenser utfĂ€rdas per utvecklare. Olika licenstyper har varierande grĂ€nser för utvecklare. Du kan dock lĂ€gga till fler utvecklare till vilken licenstyp som helst nĂ€r du behöver. För information om licenstyper, utvecklargrĂ€nser och kostnader för ytterligare utvecklare, se prissĂ€ttningssidan.", + "ChangingLicenseTypeExplanation": "Du kan uppgradera till en högre licens genom att betala mellanskillnaden under din aktiva licensperiod. NĂ€r du uppgraderar till en högre licensplan fĂ„r du fördelarna med den nya planen, men licensuppgraderingen Ă€ndrar inte licensens utgĂ„ngsdatum. Dessutom kan du lĂ€gga till nya utvecklarplatser till din befintliga licens. För detaljer om hur mĂ„nga utvecklare som kan arbeta med lösningar som anvĂ€nder ABP Platform, se 'Hur mĂ„nga utvecklare kan arbeta med lösningar som anvĂ€nder ABP Platform?' frĂ„gan.", + "DowngradeLicensePlanExplanation": "Du kan inte nedgradera din befintliga licensplan. För ytterligare information, kontakta oss pĂ„ info@abp.io.", + "LicenseTransferExplanation": "Ja, det gör jag! NĂ€r du köper en licens blir du licensinnehavare, vilket ger dig tillgĂ„ng till sidan för organisationshantering. En organisation innehĂ„ller roller för Ă€gare och utvecklare. Ägare kan hantera utvecklarplatser och tilldela utvecklare. Varje tilldelad utvecklare loggar in i systemet med kommandot ABP CLI och har behörigheter för utveckling och support.", + "LicenseExtendUpgradeDiff": "Vad Ă€r skillnaden mellan licensförnyelse och uppgradering?", + "LicenseExtendUpgradeDiffExplanation1": "Förnyelse: Genom att förnya din licens kommer du att fortsĂ€tta att fĂ„ premiumsupport och uppdateringar, bĂ„de större och mindre, för moduler, verktyg och teman. Dessutom kommer du att kunna skapa nya projekt och anvĂ€nda ABP Suite och ABP Studio, vilket kan pĂ„skynda din utvecklingsprocess avsevĂ€rt. NĂ€r du förnyar din licens lĂ€ggs ett Ă„r till licensens utgĂ„ngsdatum.", + "LicenseExtendUpgradeDiffExplanation2": "Uppgradering: Genom att uppgradera din licens kommer du att befordras till en högre licensplan, vilket gör att du kan fĂ„ ytterligare fördelar. Kolla in prissĂ€ttningssidan för att se skillnaderna mellan licensplanerna. Å andra sidan Ă€ndras inte licensens utgĂ„ngsdatum nĂ€r du uppgraderar! Om du vill förlĂ€nga licensens slutdatum mĂ„ste du förnya din licens.", + "WhatHappensWhenLicenseEndsExplanation1": "ABP-licenser Ă€r eviga licenser. NĂ€r din licens löper ut kan du fortsĂ€tta att utveckla ditt projekt utan att behöva förnya den. Din licens levereras med en ettĂ„rig uppdaterings- och premiumsupportplan. För att fĂ„ nya funktioner, prestandaförbĂ€ttringar, buggfixar och fortsatt support, samt för att anvĂ€nda ABP Suite och ABP Studio, mĂ„ste du förnya din licens. NĂ€r din licens löper ut;", + "WhatHappensWhenLicenseEndsExplanation2": "Du kan inte skapa nya lösningar med hjĂ€lp av pro startup-mallarna, men du kan fortsĂ€tta att utveckla dina befintliga applikationer för alltid.", + "WhatHappensWhenLicenseEndsExplanation3": "Du kommer att fĂ„ uppdateringar för programmoduler och teman i din MINOR-version (exklusive RC- eller Preview-versioner). Om du t.ex. anvĂ€nder v3.2.0 av en modul kan du fortfarande fĂ„ uppdateringar för v3.2.x (v3.2.1, v3.2.5... etc.) av den modulen. Du kan dock inte fĂ„ uppdateringar för nĂ€sta större eller mindre version (t.ex. v3.3.0, v3.3.3, 4.x.x... etc.). Om t.ex. den senaste versionen var v4.4.3 nĂ€r din licens löpte ut och senare versioner 4.4.4 och 4.5.0 publicerades, skulle du ha tillgĂ„ng till v4.4.x men inte till v4.5.x.", + "WhatHappensWhenLicenseEndsExplanation4": "Du kan inte installera nya programmoduler och teman som lĂ€ggs till i din lösning efter att din licens har upphört att gĂ€lla.", + "WhatHappensWhenLicenseEndsExplanation5": "Du kan inte anvĂ€nda ABP Suite.", + "WhatHappensWhenLicenseEndsExplanation6": "Du kan inte anvĂ€nda ABP Studios proffsfunktioner (du kan anvĂ€nda ABP Studios Community Edition-funktioner)", + "WhatHappensWhenLicenseEndsExplanation7": "Du kommer inte lĂ€ngre att ha tillgĂ„ng till premiumsupport.", + "WhatHappensWhenLicenseEndsExplanation8": "Du kan förnya (förlĂ€nga) din licens för att fortsĂ€tta att fĂ„ dessa förmĂ„ner. Om du förnyar din licens inom {3} dagar efter att den har löpt ut kommer följande rabatter att tillĂ€mpas: Teamlicens {0}; Företagslicens {1}; Enterprise-licens {2}.", + "WhenShouldIRenewMyLicenseExplanation1": "Om du förnyar din licens inom 30 dagar efter att den har löpt ut kommer följande rabatter att tillĂ€mpas:", + "WhenShouldIRenewMyLicenseExplanation2": "{0} för Team Licenser;", + "WhenShouldIRenewMyLicenseExplanation3": "{0} för Business- och Enterprise-licenser;", + "WhenShouldIRenewMyLicenseExplanation4": "Om du förnyar din licens mer Ă€n {0} dagar efter utgĂ„ngsdatumet kommer dock förnyelsepriset att vara detsamma som det ursprungliga inköpspriset för licensen, utan att nĂ„gra rabatter tillĂ€mpas pĂ„ din förnyelse.", + "DoesTheSubscriptionRenewAutomaticallyExplanationAutoRenewal": "ABP Platform tillĂ„ter dig att automatiskt förnya din licens. Detta Ă€r en valfri gratis tjĂ€nst. Du kan vĂ€xla den hĂ€r funktionen nĂ€r du köper en ny licens eller senare aktivera den frĂ„n din organisationshanteringssida. Om du vill slĂ„ pĂ„ eller av den automatiska förnyelsen, besök organisationens hanteringssida, gĂ„ till avsnittet \"Betalningsmetod\" och antingen markera eller avmarkera kryssrutan \"Automatisk förnyelse\". NĂ€r du stĂ€nger av funktionen för automatisk förnyelse kommer det att vara ditt ansvar att förnya din licens manuellt.", + "TrialPlanExplanation": "Ja, för att starta din kostnadsfria testperiod, vĂ€nligen kontakta marketing@volosoft.com. Vi erbjuder ocksĂ„ en 30-dagars pengarna-tillbaka-garanti för Team-licensen, utan nĂ„gra frĂ„gor! Du kan begĂ€ra full Ă„terbetalning inom de första 30 dagarna efter att du köpt licensen. För Business- och Enterprise-licenser ger vi 60% Ă„terbetalning om det begĂ€rs inom 30 dagar efter köpet. Denna policy beror pĂ„ att den fullstĂ€ndiga kĂ€llkoden för alla moduler och teman ingĂ„r i Business- och Enterprise-licenserna.", + "BlazoriseLicenseExplanation": "Vi har ett avtal mellan Volosoft och Megabit, enligt vilket Blazorise-licensen buntas med ABP-plattformens kommersiella licenser. DĂ€rför behöver vĂ„ra betalda anvĂ€ndare inte köpa en ytterligare Blazorise-licens.", + "HowToUpgradeExplanation1": "NĂ€r du skapar en ny applikation med hjĂ€lp av ABP:s startmallar anvĂ€nds alla moduler och teman som NuGet- och NPM-paket. Den hĂ€r instĂ€llningen gör det enkelt att uppgradera till nyare versioner av paketen.", + "HowToUpgradeExplanation2": "Förutom de vanliga NuGet/NPM-uppgraderingarna tillhandahĂ„ller ABP CLI ett update-kommando som automatiskt hittar och uppgraderar alla ABP-relaterade paket i din lösning.", + "HowToUpgradeExplanation3": "Utöver automatiska paketuppgraderingar publicerar vi ocksĂ„ en migreringsguide om den nya versionen krĂ€ver nĂ„gra manuella steg för att uppgradera eller om den har nĂ„gra anteckningar som ska beaktas. FortsĂ€tt följa ABP-bloggen för nyheter om nya utgĂ„vor.", + "DatabaseSupportExplanation": "ABP Ă€r databasagnostisk och kan arbeta med alla databasleverantörer i sin natur. För en lista över för nĂ€rvarande implementerade leverantörer, vĂ€nligen kolla in Data Access-dokumentet.", + "MicroserviceSupportExplanation1": "Ja, det stöder mikrotjĂ€nstarkitekturer.", + "MicroserviceSupportExplanation2": "Ett av de viktigaste mĂ„len med ABP-plattformen Ă€r att tillhandahĂ„lla en bekvĂ€m infrastruktur för att skapa mikrotjĂ€nstlösningar. Alla officiella ABP-applikationsmoduler Ă€r utformade för att stödja mikroservice-distributionsscenarier (med eget API och databas) genom att följa dokumentet Module Development Best Practices.", + "MicroserviceSupportExplanation3": "ABP Platforms kommersiella licenser innehĂ„ller ocksĂ„ en microservice startup template som kan anvĂ€ndas för att direkt skapa en produktionsfĂ€rdig baslösning för ditt microservice-system.", + "MicroserviceSupportExplanation4": "För icke-betalande anvĂ€ndare tillhandahĂ„ller vi ocksĂ„ en exempel pĂ„ e-handelslösning som du kan kontrollera för att förstĂ„ hur du kan bygga din mikrotjĂ€nstlösning baserat pĂ„ ABP-ramverket.", + "MicroserviceSupportExplanation5": "Ett mikrotjĂ€nstsystem Ă€r dock en lösning och varje lösning kommer att ha olika krav, inklusive nĂ€tverkstopologi, kommunikationsscenarier, autentiseringsmöjligheter, beslut om databashardning/partitionering, körtidskonfigurationer, systemintegrationer frĂ„n tredje part och mĂ„nga fler aspekter. ABP-plattformen tillhandahĂ„ller infrastruktur för mikroservicescenarier, mikroservice-kompatibla moduler, exempel och dokumentation för att hjĂ€lpa till att bygga din egen lösning. FörvĂ€nta dig dock inte att direkt ladda ner din idealiska, anpassade lösning som Ă€r förbyggd Ă„t dig. Du mĂ„ste förstĂ„ den och sammanföra specifika delar baserat pĂ„ dina krav.", + "WhereCanIDownloadSourceCodeExplanation": "Du kan ladda ner kĂ€llkoden för alla ABP-moduler, Angular-paket och teman via ABP Suite, ABP Studio eller ABP CLI. Kolla in forumfrĂ„gan: Hur laddar man ner kĂ€llkoden?", + "CommercialLicenses": "Kommersiella licenser", + "WhatIsDifferencePaidLicenses": "Vad Ă€r skillnaden mellan en personlig licens och andra typer av betalda licenser?", + "DifferencePaidLicenseExplanation1": "En icke-personlig betald licens Ă€r standardlicensalternativet för företag och kommersiella enheter. Licenser köps av företaget och kan anvĂ€ndas av vem som helst inom organisationen.", + "DifferencePaidLicenseExplanation2": "Personal License Ă€r Ă„ andra sidan en typ av licens för privatpersoner/freelancers/oberoende utvecklare som köper licenser med egna medel och enbart för eget bruk. Den personliga licensen har vissa begrĂ€nsningar. I den hĂ€r planen kan det bara finnas 1 utvecklare som arbetar med ABP-projektet och inga ytterligare utvecklare fĂ„r lĂ€ggas till senare i projektet. Nedladdning av kĂ€llkoden för PRO-moduler Ă€r inte tillĂ„ten i den personliga licensplanen. Det finns inte heller nĂ„gon mikrotjĂ€nstmall och nivĂ„ (skiktad) arkitektur i denna plan. Personliga licensinnehavare kan endast anvĂ€nda följande moduler: Konto, Audit Log UI, GDPR, Identity, Language Management, LeptonX PRO, OpenIddict UI och SaaS. Personliga licensinnehavare kan inte anvĂ€nda följande moduler: Chatt, CMS-Kit PRO, FormulĂ€r, Identity Server User Interface, Lepton Theme, Text Template Management, File Management och Twilio SMS. Du kan komma Ă„t den fullstĂ€ndiga modullistan pĂ„ abp.io/modules.", + "ReadyToStart": "Är du redo att börja?", + "TransformYourIdeasIntoRealityWithOurProfessionalNETDevelopmentServices": "Förvandla dina idĂ©er till verklighet med vĂ„ra professionella .NET-utvecklingstjĂ€nster.", + "ReadyToUpgrade": "Är du redo att uppgradera?", + "SendServiceRequest": "Skicka en servicebegĂ€ran", + "Permission:CommunityPost": "Gemenskapens inlĂ€gg", + "Permission:Edit": "Redigera", + "Waiting": "VĂ€ntar pĂ„", + "Approved": "GodkĂ€nd", + "Rejected": "Avvisad", + "Wait": "VĂ€nta", + "Approve": "GodkĂ€nna", + "Reject": "Avvisa", + "ReadPost": "LĂ€s inlĂ€gget", + "Status": "Status", + "ContentSource": "KĂ€lla för innehĂ„ll", + "Details": "Detaljer", + "CreationTime": "Skapelsetid", + "Save": "Spara", + "SameUrlAlreadyExist": "Samma webbadress finns redan om du vill lĂ€gga till det hĂ€r inlĂ€gget, bör du Ă€ndra webbadressen!", + "UrlIsNotValid": "Url Ă€r inte giltig.", + "UrlNotFound": "Url hittades inte.", + "UrlContentNotFound": "Url-innehĂ„llet hittades inte.", + "Summary": "Sammanfattning", + "MostRead": "Mest lĂ€st", + "Latest": "Senaste", + "ContributeAbpCommunity": "Bidra till ABP:s gemenskap", + "ContributionGuide": "Bidragsguide", + "BugReport": "Bugg-rapport", + "SeeAllPosts": "Se alla inlĂ€gg", + "WelcomeToABP": "VĂ€lkommen till ABP", + "FeatureRequest": "BegĂ€ran om funktion", + "CreatePostTitleInfo": "Titel pĂ„ det inlĂ€gg som ska visas i inlĂ€ggslistan.", + "CreatePostSummaryInfo": "En kort sammanfattning av inlĂ€gget som ska visas i inlĂ€ggslistan. Maximal lĂ€ngd: {0}", + "CreatePostCoverInfo": "För att skapa ett effektivt inlĂ€gg, lĂ€gg till ett omslagsfoto. Ladda upp bilder med bildförhĂ„llandet 16:9 för bĂ€sta visning.
Maximal filstorlek: 1MB.", + "ThisExtensionIsNotAllowed": "Denna förlĂ€ngning Ă€r inte tillĂ„ten.", + "TheFileIsTooLarge": "Filen Ă€r för stor.", + "GoToThePost": "GĂ„ till inlĂ€gget", + "GoToTheVideo": "GĂ„ till videon", + "Contribute": "Bidra", + "OverallProgress": "Övergripande framsteg", + "Done": "Klar", + "Open": "Öppna", + "Closed": "StĂ€ngt", + "RecentQuestionFrom": "Senaste frĂ„gan frĂ„n {0}", + "Stackoverflow": "Stackoverflow", + "Votes": "röster", + "Answer": "Svar", + "views": "utsikt", + "Answered": "Besvarad", + "WaitingForYourAnswer": "VĂ€ntar pĂ„ ditt svar", + "Asked": "aska", + "AllQuestions": "Alla frĂ„gor", + "NextVersion": "NĂ€sta version", + "MilestoneErrorMessage": "Det gick inte att fĂ„ aktuell milstolpsinformation frĂ„n Github.", + "QuestionItemErrorMessage": "Kunde inte fĂ„ de senaste frĂ„geuppgifterna frĂ„n Stackoverflow.", + "Oops": "Oops!", + "CreatePostSuccessMessage": "InlĂ€gget har skickats in framgĂ„ngsrikt. Det kommer att publiceras efter en granskning frĂ„n webbplatsens administratör.", + "Browse": "BlĂ€ddra", + "CoverImage": "Omslagsbild", + "ShareYourExperiencesWithTheABPFramework": "Dela dina erfarenheter av ABP-ramverket!", + "UpdateUserWebSiteInfo": "Exempel: https://johndoe.com", + "UpdateUserTwitterInfo": "Exempel: johndoe", + "UpdateUserGithubInfo": "Exempel: johndoe", + "UpdateUserLinkedinInfo": "Exempel: https://www.linkedin.com/...", + "UpdateUserCompanyInfo": "Exempel: Volosoft", + "UpdateUserJobTitleInfo": "Exempel: Programvaruutvecklare", + "UserName": "AnvĂ€ndarnamn", + "Company": "Företag", + "PersonalWebsite": "Personlig webbplats", + "RegistrationDate": "Registreringsdatum", + "Social": "Sociala", + "Biography": "Biografi", + "HasNoPublishedPostsYet": "har inga publicerade inlĂ€gg Ă€nnu", + "LatestGithubAnnouncements": "Senaste Github-tillkĂ€nnagivanden", + "SeeAllAnnouncements": "Se alla tillkĂ€nnagivanden", + "LatestBlogPost": "Senaste blogginlĂ€gget", + "Edit": "Redigera", + "ProfileImageChange": "Ändra profilbilden", + "BlogItemErrorMessage": "Kunde inte fĂ„ den senaste informationen om blogginlĂ€gg frĂ„n ABP.", + "PlannedReleaseDate": "Planerat utgivningsdatum", + "CommunityPostRequestErrorMessage": "Det gick inte att fĂ„ den senaste postförfrĂ„gan frĂ„n Github.", + "PostRequestFromGithubIssue": "Det finns inga postförfrĂ„gningar nu.", + "LatestPosts": "Senaste inlĂ€gg", + "ArticleRequests": "BegĂ€r ett innehĂ„ll", + "ArticleRequestsDescription": "Vill du se ett specifikt innehĂ„ll hĂ€r? Du kan be communityn att skapa det!", + "LatestContentRequests": "Senaste förfrĂ„gningar om innehĂ„ll", + "AllPostRequests": "Se alla postförfrĂ„gningar", + "SubscribeToTheNewsletter": "Prenumerera pĂ„ nyhetsbrevet", + "NewsletterEmailDefinition": "FĂ„ information om vad som hĂ€nder i ABP, t.ex. nya utgĂ„vor, fria kĂ€llor, inlĂ€gg och mycket mer.", + "NoThanks": "Nej, tack.", + "MaybeLater": "Kanske senare", + "JoinOurPostNewsletter": "AnmĂ€l dig till vĂ„rt nyhetsbrev", + "Marketing": "Marknadsföring", + "CommunityPrivacyPolicyConfirmation": "Jag godkĂ€nner de allmĂ€nna villkoren och Integritetspolicy.", + "PostRequestMessageTitle": "Öppna en frĂ„ga pĂ„ GitHub för att begĂ€ra ett inlĂ€gg / en handledning som du vill se pĂ„ den hĂ€r webbplatsen.", + "PostRequestMessageBody": "HĂ€r Ă€r en lista över de inlĂ€gg som efterfrĂ„gats av communityn. Vill du skriva ett efterfrĂ„gat inlĂ€gg? Klicka pĂ„ önskemĂ„let och delta i diskussionen.", + "Language": "SprĂ„k", + "CreatePostLanguageInfo": "SprĂ„ket för inlĂ€ggets innehĂ„ll.", + "VideoPost": "VideoinlĂ€gg", + "Post": "Post", + "Read": "LĂ€s", + "CreateGithubPostUrlInfo": "FullstĂ€ndig URL till Markdown-filen pĂ„ GitHub (exempel).", + "CreateVideoContentUrlInfo": "InlĂ€ggets ursprungliga URL pĂ„ Youtube.", + "CreateExternalPostUrlInfo": "InlĂ€ggets ursprungliga externa webbadress.", + "VideoContentForm": "Skicka in video pĂ„ YouTube", + "GithubPostForm": "Skicka inlĂ€gg pĂ„ GitHub", + "ExternalPostForm": "Skicka in ett externt innehĂ„ll", + "HowToPost": "Hur postar jag?", + "Posts": "InlĂ€gg", + "VideoUrl": "Video webbadress", + "GithubPostUrl": "Url för GitHub-post", + "ExternalPostUrl": "Url för externt inlĂ€gg", + "ThankYouForContribution": "Tack för att du bidrar till ABP Community. Vi tar gĂ€rna emot artiklar och videohandledning om ABP Framework, .NET, ASP.NET Core och allmĂ€nna Ă€mnen inom programvaruutveckling.", + "GithubPost": "GitHub-inlĂ€gg", + "GithubPostSubmitStepOne": "1. Skriv ett inlĂ€gg pĂ„ ett offentligt GitHub-arkiv med Markdown-formatet. exempel", + "GithubPostSubmitStepTwo": "2. Skicka in din URL till inlĂ€gget med hjĂ€lp av formulĂ€ret.", + "GithubPostSubmitStepThree": "3. Ditt inlĂ€gg kommer att Ă„terges pĂ„ denna webbplats.", + "YoutubeVideo": "Youtube-video", + "YoutubeVideoSubmitStepOne": "1. Publicera din video pĂ„ YouTube.", + "YoutubeVideoSubmitStepTwo": "2. Skicka in video-URL:en med hjĂ€lp av formulĂ€ret.", + "YoutubeVideoSubmitStepThree": "3. Besökare kommer att kunna titta pĂ„ ditt videoinnehĂ„ll direkt pĂ„ denna webbplats.", + "ExternalContent": "Externt innehĂ„ll", + "ExternalContentSubmitStepOne": "1. Skapa ett innehĂ„ll pĂ„ en publik plattform (Medium, din egen blogg eller var du vill).", + "ExternalContentSubmitStepTwo": "2. Skicka in URL:en för ditt innehĂ„ll med hjĂ€lp av formulĂ€ret.", + "ExternalContentSubmitStepThree": "3. Besökare omdirigeras till innehĂ„llet pĂ„ den ursprungliga webbplatsen.", + "ChooseYourContentType": "VĂ€lj det sĂ€tt som du vill lĂ€gga till ditt innehĂ„ll pĂ„.", + "PostContentViaGithub": "Jag vill lĂ€gga till mitt inlĂ€gg med GitHub i enlighet med markdown-reglerna.", + "PostContentViaYoutube": "Jag vill dela mina videor som finns pĂ„ Youtube hĂ€r.", + "PostContentViaExternalSource": "Jag vill lĂ€gga till det innehĂ„ll jag publicerade pĂ„ en annan plattform hĂ€r.", + "GitHubUserNameValidationMessage": "Ditt Github-anvĂ€ndarnamn kan inte innehĂ„lla blanksteg, kontrollera att ditt Github-anvĂ€ndarnamn Ă€r korrekt.", + "PersonalSiteUrlValidationMessage": "URL:en till din personliga webbplats fĂ„r inte innehĂ„lla blanksteg, kontrollera att URL:en till din personliga webbplats Ă€r korrekt.", + "TwitterUserNameValidationMessage": "Ditt Twitter-anvĂ€ndarnamn fĂ„r inte innehĂ„lla blanksteg, kontrollera att ditt Twitter-anvĂ€ndarnamn Ă€r korrekt.", + "LinkedinUrlValidationMessage": "Din Linkedin-URL fĂ„r inte innehĂ„lla blanksteg, kontrollera att din Linkedin-URL Ă€r korrekt.", + "NoPostsFound": "Inga inlĂ€gg hittades!", + "SearchInPosts": "Sök i inlĂ€gg...", + "MinimumSearchContent": "Du mĂ„ste ange minst 3 tecken!", + "Volo.AbpIo.Domain:060001": "KĂ€llans URL(\"{PostUrl}\") Ă€r inte Github URL", + "Volo.AbpIo.Domain:060002": "InlĂ€ggets innehĂ„ll Ă€r inte tillgĂ€ngligt frĂ„n Github(\"{PostUrl}\")-resursen.", + "Volo.AbpIo.Domain:060003": "Inget innehĂ„ll i inlĂ€gget hittades!", + "JoinTheABPCommunity": "GĂ„ med i ABP:s gemenskap", + "ABPCommunityTalks": "ABP:s samtal med allmĂ€nheten", + "LiveDemo": "Live Demo", + "GetLicense": "Skaffa licens", + "SourceCode": "KĂ€llkod", + "LeaveComment": "LĂ€mna kommentar", + "ShowMore": "Visa mer", + "NoPublishedPostsYet": "Inga publicerade inlĂ€gg Ă€nnu.", + "FullURL": "Full URL", + "JobTitle": "Befattning", + "Prev": "Före", + "Previous": "FöregĂ„ende", + "Next": "NĂ€sta", + "Share": "Aktie", + "SortBy": "Sortera efter", + "NoPublishedEventsYet": "Inga publicerade hĂ€ndelser Ă€nnu.", + "SubscribeYoutubeChannel": "Prenumerera pĂ„ Youtube-kanalen", + "Enum:EventType:0": "Samtal", + "MemberNotPublishedPostYet": "Denna medlem har inte publicerat nĂ„gra inlĂ€gg Ă€nnu.", + "MemberNotPublishedArticlesYet": "Denna medlem har inte publicerat nĂ„gra artiklar Ă€nnu.", + "MemberNotPublishedVideosYet": "Denna medlem har inte publicerat nĂ„gra videor Ă€nnu.", + "TimeAgo": "för {0} sedan", + "Discord_Page_JoinCommunityMessage": "GĂ„ med i ABP Discord Community", + "Discord_Page_Announce": "Vi Ă€r glada att kunna presentera ABP Community Discord Server!", + "Discord_Page_Description_1": "ABP Community har vuxit sedan dag ett. Vi ville ta det till nĂ€sta steg genom att skapa en officiell ABP Discord-server sĂ„ att ABP-communityn kan interagera med varandra med hjĂ€lp av underverk som snabbmeddelanden.", + "Discord_Page_Description_2": "ABP Community Discord Server Ă€r platsen dĂ€r du kan visa upp dina skapelser med ABP Framework, dela de tips som fungerade för dig, fĂ„ de senaste nyheterna och tillkĂ€nnagivandena om ABP Framework, bara chatta med medlemmar i samhĂ€llet för att utbyta idĂ©er och ha kul!", + "Discord_Page_Description_3": "Denna ABP Community Discord Server Ă€r den officiella med ABP Core Team Ă€r nĂ€rvarande pĂ„ servern för att övervaka.", + "Discord_Page_JoinToServer": "GĂ„ med i ABP Discord Server", + "Events_Page_MetaTitle": "ABP:s evenemang för allmĂ€nheten", + "Events_Page_MetaDescription": "Live-showerna, som leds av ABP-teamet, Ă€r avslappnade sessioner fulla av community-innehĂ„ll, demonstrationer, frĂ„gor och svar och diskussioner om vad som hĂ€nder i ABP.", + "Events_Page_Title": "ABP Community Samtal", + "Members_Page_WritingFromUser": "LĂ€s skrivning frĂ„n {0} pĂ„ ABP Community.", + "Post_Create_Page_MetaTitle": "Ny tjĂ€nst i gemenskapen", + "Post_Create_Page_MetaDescription": "Skicka in dina egna inlĂ€gg till ABP:s communityplattform och bidra med dina insikter och erfarenheter.", + "Post_Create_Page_CreateNewPost": "Skapa nytt inlĂ€gg", + "Post_Index_Page_MetaDescription": "ABP Communitys syfte Ă€r att skapa en bidragsmiljö för utvecklare som anvĂ€nder ABP-ramverket.", + "Layout_Title": "{0} | ABP Gemenskap", + "Layout_MetaDescription": "Ett nav för ABP Framework, .NET och programvaruutveckling. FĂ„ tillgĂ„ng till artiklar, handledning, nyheter och bidra till ABP-communityn.", + "Index_Page_CommunityIntroduction": "Detta Ă€r ett nav för ABP Framework, .NET och programvaruutveckling. Du kan lĂ€sa artiklarna, titta pĂ„ videohandledningarna, fĂ„ information om ABP:s utvecklingsframsteg och ABP-relaterade evenemang, hjĂ€lpa andra utvecklare och dela med dig av din expertis till ABP-communityn.", + "TagsInArticle": "Taggar i artikel", + "IConsentToMedium": "Jag samtycker till publicering av detta inlĂ€gg pĂ„ https://medium.com/volosoft.", + "SearchResultsFor": "Sökresultat för \"{0}\"", + "SeeMoreVideos": "Se fler videor", + "DiscordPageTitle": "Discord", + "DiscordPageDescription": "GĂ„ med i ABP Community Discord för att chatta med andra medlemmar, diskutera idĂ©er och fĂ„ stöd om ABP.", + "ViewVideo": "Visa video", + "AbpCommunityTitleContent": "ABP Community - ABP-ramverk med öppen kĂ€llkod", + "CommunitySlogan": "En unik community-plattform för ABP-Ă€lskare.", + "RaffleIsNotActive": "Lottdragningen Ă€r inte aktiv", + "YouAreAlreadyJoinedToThisRaffle": "Du har redan gĂ„tt med i denna utlottning!", + "InvalidSubscriptionCode": "Ogiltig prenumerationskod", + "Raffle:{0}": "Lottdragning: {0}", + "Join": "GĂ„ med", + "Leave": "LĂ€mna", + "LoginToJoin": "Logga in för att gĂ„ med", + "ToEnd:": "För att avsluta:", + "ToStart:": "Det Ă€r en början:", + "days": "dagar", + "hrs": "timmar", + "min": "min", + "sec": "sek", + "Winners": "Vinnare", + "To{0}LuckyWinners": "till {0} lyckliga vinnare", + "ActiveRaffles": "Aktiva Rafflar.", + "UpcomingRaffles": "Kommande Rafflar", + "CompletedRaffles": "FĂ€rdigstĂ€llda Rafflar", + "NoActiveRaffleTitle": "Ingen aktiv utlottning Ă€r tillgĂ€nglig för tillfĂ€llet.", + "NoActiveRaffleDescription": "Ingen aktiv utlottning Ă€r tillgĂ€nglig för tillfĂ€llet.", + "RaffleSubscriptionCodeInputMessage": "Denna utlottning krĂ€ver en registreringskod. VĂ€nligen ange registreringskoden nedan:", + "RaffleSubscriptionCodeInputErrorMessage": "Registreringskoden Ă€r felaktig. VĂ€nligen försök igen.", + "GoodJob!": "Bra jobbat!", + "RaffleJoinSuccessMessage": "Du Ă€r nu registrerad för utlottningen. Du kommer att informeras via e-post om du vinner priset!", + "RaffleLoginAndRegisterMessage": "Du mĂ„ste logga in för att delta i utlottningen! Om du inte har registrerat dig Ă€nnu kan du skapa ett konto gratis nu.", + "Ok": "Ok", + "WaitingForTheDraw": "VĂ€nta pĂ„ dragningen!", + "AllAttendees": "Alla deltagare", + "SeeRaffleDetail": "Se Raffle detalj", + "SeeRaffle": "Se Raffle", + "ParticipationIsComplete": "Deltagandet Ă€r fullstĂ€ndigt.", + "ABPCoreDevelopmentTeam": "ABP Core utvecklingsteam", + "RegisterTheEvent": "Registrera evenemanget", + "GoToConferencePage": "GĂ„ till konferenssidan", + "BuyTicket": "Buy Ticket", + "SeeEvent": "Se evenemang", + "PreviousEvents": "Tidigare evenemang", + "OtherLiveEvents": "Andra live-evenemang", + "SponsoredConferences": "Sponsrade konferenser", + "SponsoredConferencesDescription": "Vi Ă€r stolta över att stödja .NET-communities och evenemang för programvaruutvecklare.", + "UpcomingEvents": "Kommande evenemang", + "UpcomingCommunityTalkEventDescription": "Live-showerna, som leds av ABP-teamet, Ă€r avslappnade sessioner fulla av community-innehĂ„ll, demonstrationer, frĂ„gor och svar och diskussioner om vad som hĂ€nder i ABP.", + "UpcomingConferenceEventDescription": "ABP .NET Conference Ă€r ett virtuellt evenemang för .NET-utvecklare dĂ€r de kan trĂ€ffas och lyssna pĂ„ föredrag om .NET-vĂ€rlden, vanliga metoder för programvaruutveckling och ABP Framework med öppen kĂ€llkod.", + "LastOneYear": "Senaste 1 Ă„ret", + "AllTimes": "Alla tider", + "TopContributors": "De största bidragsgivarna", + "{0}Posts": "{0} InlĂ€gg", + "LATESTPOSTS": "SENASTE INLÄGGNINGAR", + "NoContributorsFound": "Inga bidragsgivare hittades!", + "LatestPost": "Senaste inlĂ€gget", + "MEMBERSINCE{0}": "MEDLEM EFTERSOM {0}", + "CopyLink": "Kopiera lĂ€nk", + "ShareOnTwitter": "Dela pĂ„ Twitter", + "ShareOnLinkedIn": "Dela pĂ„ LinkedIn", + "MoreFrom{0}": "Mer frĂ„n {0}", + "SeeAllFrom{0}": "Se alla frĂ„n {0}", + "MostWatched": "Mest bevakade", + "Articles({0})": "Artiklar ({0})", + "Videos({0})": "Videor ({0})", + "LatestArticles": "Senaste artiklar", + "RaffleHeader": "Hej ABP Community Member!", + "RafflesInfo": "
Detta Àr utlottningssidan som Àr avsedd att visa vÄr uppskattning för att du Àr en aktiv gemenskapsmedlem. Vi gör ABP Community Talks ABP Dotnet Conference, deltar eller sponsrar .NET-relaterade evenemang dÀr vi ger bort nÄgra gÄvor.

Du kan följa den hÀr sidan för att se kommande lotterier, delta i dem eller se tidigare lotterier som vi dragit inklusive vinnarna.

Tack för att du Ă€r en aktiv medlem! Vi ses i de kommande lotterierna.", + "RafflesInfoTitle": "ABP Community Rafflar.", + "ToLuckyWinner": "till 1 lycklig vinnare", + "MarkdownSupported": "Stöd för Markdown.", + "VisitPage": "Besök sidan", + "VisitVideoCourseDescription": "Om du vill lĂ€ra dig grunderna i ABP-ramverket kan du kolla in videokurserna ABP Essentials.", + "EditProfile": "Redigera profil", + "ConfirmEmailForPost": "För att kunna göra inlĂ€gg mĂ„ste du bekrĂ€fta din e-post. GĂ„ till account.abp.io/Account/Manage och verifiera din e-postadress under fliken Personal Info.", + "DailyPostCreateLimitation": "Du har nĂ„tt den dagliga grĂ€nsen för skapande av inlĂ€gg. Du kan skapa ett nytt inlĂ€gg i {0}.", + "OrganizationManagement": "Organisation och ledning", + "OrganizationList": "Organisationslista", + "Volo.AbpIo.Commercial:010003": "Du Ă€r inte Ă€gare till den hĂ€r organisationen!", + "OrganizationNotFoundMessage": "Ingen organisation hittades!", + "DeveloperCount": "Tilldelade / totala utvecklare", + "QuestionCount": "Kvarvarande / totala frĂ„gor", + "Unlimited": "ObegrĂ€nsad", + "Owners": "Ägare", + "Owner": "Ägare", + "AddMember": "LĂ€gg till medlem", + "AddNewOwner": "LĂ€gg till ny Ă€gare", + "AddNewDeveloper": "LĂ€gg till ny utvecklare", + "Developers": "Utvecklare", + "LicenseType": "Typ av licens", + "Manage": "Hantera", + "SetDefault": "StĂ€ll in som standard", + "DefaultOrganization": "Standard", + "StartDate": "Startdatum", + "EndDate": "Slutdatum", + "Modules": "Moduler", + "LicenseExtendMessage": "Slutdatum för din licens förlĂ€ngs till {0}.", + "LicenseUpgradeMessage": "Din licens har uppgraderats till {0}.", + "LicenseExtendAdnUpgradeMessage": "Din licens har förlĂ€ngts till {0} och din licensplan har uppgraderats till {1}.", + "LicenseAddDeveloperMessage": "{0} utvecklare lĂ€ggs till i din licens", + "Volo.AbpIo.Commercial:010004": "Kan inte hitta den angivna anvĂ€ndaren! AnvĂ€ndaren mĂ„ste redan ha registrerats.", + "MyOrganizations": "Mina organisationer", + "ApiKey": "API-nyckel", + "UserNameNotFound": "Det finns ingen anvĂ€ndare med anvĂ€ndarnamnet {0}", + "SuccessfullyAddedToNewsletter": "Tack för att du prenumererar pĂ„ vĂ„rt nyhetsbrev!", + "MyProfile": "Min profil", + "WouldLikeToReceiveMarketingMaterials": "Jag skulle vilja fĂ„ marknadsföringsnyheter som produkterbjudanden och specialerbjudanden.", + "StartUsingYourLicenseNow": "Börja anvĂ€nda din licens nu!", + "WelcomePage": "VĂ€lkomstsida", + "UnsubscriptionExpireEmail": "Avregistrera dig frĂ„n e-postmeddelanden med pĂ„minnelser om licensens utgĂ„ngsdatum", + "UnsubscribeLicenseExpireEmailReminderMessage": "Denna e-postprenumeration innehĂ„ller endast pĂ„minnelser om utgĂ„ngsdatum för din licens.", + "UnsubscribeFromLicenseExpireEmails": "Om du inte vill fĂ„ e-postmeddelanden om utgĂ„ngsdatum för din licens kan du avsluta prenumerationen nĂ€r som helst.", + "Unsubscribe": "Avsluta prenumeration", + "NotOrganizationMember": "Du Ă€r inte medlem i nĂ„gon organisation.", + "UnsubscribeLicenseExpirationEmailSuccessTitle": "FramgĂ„ngsrikt avregistrerad", + "UnsubscribeLicenseExpirationEmailSuccessMessage": "Du kommer inte lĂ€ngre att fĂ„ e-postmeddelanden med pĂ„minnelser om licensens utgĂ„ngsdatum.", + "LiveDemoLead": "{1} med ditt ABP-konto, {3} till abp.io eller fyll i formulĂ€ret nedan för att skapa en live demo nu", + "ThereIsAlreadyAnAccountWithTheGivenEmailAddress": "Det finns redan ett konto med den angivna e-postadressen: {0}
Du bör logga in med ditt konto för att fortsÀtta.", + "GetLicence": "Skaffa licens", + "Startup": "Nystartad verksamhet", + "Templates": "Mallar", + "Developer": "Utvecklare", + "Tools": "Verktyg", + "Premium": "Premium", + "PremiumSupport": "Premium-support", + "PremiumForumSupport": "Premium Forum Support", + "UI": "UI", + "Themes": "Teman", + "JoinOurNewsletter": "AnmÀl dig till vÄrt nyhetsbrev", + "Send": "Skicka", + "OpenSourceBaseFramework": "Basramverk med öppen kÀllkod", + "MicroserviceCompatible": "Kompatibel med mikrotjÀnster", + "DistributedMessaging": "Distribuerad meddelandehantering", + "DynamicProxying": "Dynamisk proxyservering", + "BLOBStoring": "BLOB Storing", + "AdvancedLocalization": "Avancerad lokalisering", + "ManyMore": "MÄnga fler", + "ExploreTheABPFramework": "Utforska ABP-ramverket", + "StartupTemplatesShortDescription": "Startup-mallar gör att du kan starta ditt projekt pÄ nÄgra sekunder.", + "UIFrameworksOptions": "Alternativ för ramverk för anvÀndargrÀnssnitt;", + "DatabaseProviderOptions": "Alternativ för databasleverantör;", + "PreBuiltApplicationModules": "Förbyggda applikationsmoduler", + "PreBuiltApplicationModulesShortDescription": "De vanligaste applikationskraven Àr redan utvecklade Ät dig som ÄteranvÀndbara moduler.", + "Account": "Konto", + "Blogging": "Bloggande", + "Identity": "Identitet", + "IdentityServer": "Identitetsserver", + "LanguageManagement": "SprÄkhantering", + "TextTemplateManagement": "Hantering av textmallar", + "See All Modules": "SeAllaModuler", + "ABPSuite": "ABP-svit", + "AbpSuiteShortDescription": "ABP Suite Àr ett komplementÀrt verktyg till ABP Platform.", + "AbpSuiteExplanation": "Det gör att du kan bygga webbsidor pÄ bara nÄgra minuter. Det Àr ett .NET Core Global-verktyg som kan installeras frÄn kommandoraden. Det kan skapa en ny ABP-lösning och generera CRUD-sidor frÄn databasen till frontend.", + "LeptonTheme": "Lepton tema", + "ProfessionalModernUIThemes": "Professionella, moderna UI-teman", + "LeptonThemeExplanation": "Lepton tillhandahÄller en rad Bootstrap-adminteman som fungerar som en solid grund för alla projekt som krÀver en adminpanel.", + "DefaultTheme": "Standardtema", + "MaterialTheme": "Materialtema", + "Default2Theme": "Standard 2 Tema", + "DarkTheme": "Mörkt tema", + "DarkBlueTheme": "MörkblÄtt tema", + "LightTheme": "Ljus tema", + "ProudToWorkWith": "Stolt över att arbeta med", + "JoinOurConsumers": "Anslut dig till dem och bygg fantastiska produkter snabbt.", + "AdditionalServicesExplanation": "Behöver du ytterligare eller anpassade tjÀnster? Vi och vÄra partners kan tillhandahÄlla;", + "CustomProjectDevelopment": "Anpassad projektutveckling", + "CustomProjectDevelopmentExplanation": "Dedikerade utvecklare för dina anpassade projekt.", + "PortingExistingProjects": "Portning av befintliga projekt", + "PortingExistingProjectsExplanation": "Migrera dina Àldre projekt till ABP-plattformen.", + "LiveSupport": "Support i realtid", + "LiveSupportExplanation": "FjÀrrsupport i realtid nÀr du behöver det.", + "Training": "Utbildning", + "TrainingExplanation": "Dedikerad utbildning för dina utvecklare.", + "OnBoarding": "Onboarding", + "OnBoardingExplanation": "HjÀlp med att konfigurera dina utvecklings-, CI- och CD-miljöer.", + "PrioritizedTechnicalSupport": "Prioriterad teknisk support", + "PremiumSupportExplanation": "Förutom det stora samhÀllsstödet i ABP-ramverket svarar vÄrt supportteam pÄ tekniska frÄgor och problem frÄn de kommersiella anvÀndarna med hög prioritet.", + "SeeTheSupportOptions": "Kolla in supportalternativen", + "Contact": "Kontakt", + "TellUsWhatYouNeed": "BerÀtta för oss vad du behöver.", + "YourMessage": "Ditt meddelande", + "YourFullName": "Ditt fullstÀndiga namn", + "FirstNameField": "Förnamn", + "LastNameField": "Efternamn", + "EmailField": "E-postadress", + "YourEmailAddress": "Din e-postadress", + "ValidEmailAddressIsRequired": "En giltig e-postadress krÀvs.", + "HowMayWeHelpYou": "Hur kan vi hjÀlpa dig?", + "SendMessage": "Skicka meddelande", + "Success": "FramgÄng", + "WeWillReplyYou": "Vi har mottagit ditt meddelande och kommer att kontakta dig inom kort.", + "CreateLiveDemo": "Skapa live-demo", + "CreateLiveDemoDescription": "NÀr du har skickat in formulÀret kommer du att fÄ ett e-postmeddelande med din demolÀnk.", + "RegisterToTheNewsletter": "AnmÀl dig till nyhetsbrevet för att fÄ information om ABP.IO, inklusive nya releaser etc.", + "EnterYourEmailOrLogin": "Ange din e-postadress för att skapa din demo eller Logga in med ditt befintliga konto.", + "ApplicationTemplate": "Mall för ansökan", + "ApplicationTemplateExplanation": "Application startup template anvÀnds för att skapa en ny webbapplikation.", + "EfCoreProvider": "Entity Framework (Stödjer SQL Server, MySQL, PostgreSQL, Oracle och andra)", + "AlreadyIncludedInTemplateModules": "Följande moduler Àr redan inkluderade och konfigurerade i den hÀr mallen:", + "ApplicationTemplateArchitecture": "Den hÀr applikationsmallen stöder ocksÄ nivÄindelad arkitektur dÀr anvÀndargrÀnssnittslagret, API-lagret och autentiseringstjÀnsten Àr fysiskt Ätskilda.", + "SeeTheGuideOrGoToTheLiveDemo": "Kolla in utvecklarguiden för teknisk information om den hÀr mallen eller gÄ till live-demonstrationen.", + "DeveloperGuide": "Guide för utvecklare", + "ModuleTemplate": "Mall för modul", + "ModuleTemplateExplanation1": "Vill du skapa en modul och ÄteranvÀnda den i olika applikationer? Den hÀr startmallen förbereder allt för att börja skapa en ÄteranvÀndbar applikationsmodul eller en mikrotjÀnst.", + "ModuleTemplateExplanation2": "

Du kan stödja enstaka eller flera anvÀndargrÀnssnittsramverk, enstaka eller flera databasleverantörer för en enda modul. Startmallen Àr konfigurerad för att köra och testa din modul i en minimal applikation utöver infrastrukturen för enhets- och integrationstest.

Se utvecklarguiden för teknisk information om den hÀr mallen.

", + "WithAllStyleOptions": "med alla stilalternativ", + "Demo": "Demo", + "SeeAllModules": "Se alla moduler", + "ABPCLIExplanation": "ABP CLI Àr ett kommandoradsverktyg för att utföra vanliga utvecklingsuppgifter för ABP-baserade lösningar.", + "ABPSuiteEasilyCURD": "ABP Suite Àr ett verktyg som gör att du enkelt kan skapa CRUD-sidor", + "WeAreHereToHelp": "Vi Àr hÀr för att hjÀlpa", + "BrowseOrAskQuestion": "Du kan blÀddra i vÄra hjÀlpÀmnen eller söka i vanliga frÄgor, eller sÄ kan du stÀlla en frÄga till oss genom att anvÀnda kontaktformulÀret.", + "SearchQuestionPlaceholder": "Sök i vanliga frÄgor och svar", + "AbpCommercialMetaDescription": "En omfattande webbutvecklingsplattform pÄ ABP Framework med förbyggda moduler, startmallar, verktyg för snabb utveckling, proffsiga UI-teman och premiumsupport.", + "WhatAreDifferencesThanABPFrameworkExplanation": "

ABP-ramverket Àr ett modulÀrt, tematiserbart, mikrotjÀnstkompatibelt ramverk för applikationsutveckling för ASP.NET Core. Det ger en komplett arkitektur och en stark infrastruktur sÄ att du kan fokusera pÄ din egen affÀrskod istÀllet för att upprepa dig sjÀlv för varje nytt projekt. Det Àr baserat pÄ bÀsta praxis för mjukvaruutveckling och populÀra verktyg som du redan kÀnner till.

ABP-ramverket Àr helt gratis, öppen kÀllkod och community-driven. Det ger ocksÄ ett gratis tema och nÄgra förbyggda moduler (t.ex. identitetshantering och hyresgÀsthantering).

<", + "VisitTheFrameworkVSCommercialDocument": "Besök följande lÀnk för mer information {1} ", + "Professional": "Professionell", + "UIThemes": "Teman för anvÀndargrÀnssnitt", + "EnterpriseModules": "Enterprise ready, funktionsrika, förbyggda applikationsmoduler (t.ex. hantering av identitetsserver, SaaS-hantering, sprÄkhantering)", + "ToolingToSupport": "Verktyg för att stödja din utvecklingsproduktivitet (t.ex. ABP Suite)", + "PremiumSupportLink": "Premium Support", + "ABPCommercialSolutionExplanation": "NÀr du skapar en ny applikation fÄr du en Visual Studio-lösning (en startmall) som baseras pÄ dina önskemÄl. Den nedladdade lösningen har kommersiella moduler och teman som redan Àr installerade och konfigurerade Ät dig. Du kan ta bort en förinstallerad modul eller lÀgga till en annan modul om du vill. Alla moduler och teman anvÀnder NuGet/NPM-paket som standard.", + "StartDevelopWithTutorials": "Den nedladdade lösningen Àr vÀl arkitekterad och dokumenterad. Du kan börja utveckla din egen företagskod baserad pÄ den genom att följa handledningarna.", + "HowManyProductsExplanation": "Du kan skapa sÄ mÄnga projekt du vill under din aktiva licensperiod; det finns ingen grÀns! Efter att din licens har löpt ut kan du inte skapa nya projekt, men du kan fortsÀtta att utveckla de projekt du har laddat ner och distribuera dem till ett obegrÀnsat antal servrar.", + "ChangingLicenseType": "Kan jag uppgradera min licenstyp senare?", + "LicenseExtendUpgradeDiffExplanation": "FörlÀngning: Genom att förlÀnga/förnya din licens kommer du att fortsÀtta att fÄ premiumsupport och fÄ större eller mindre uppdateringar för modulerna och teman. Dessutom kommer du att kunna fortsÀtta skapa nya projekt. Och du kommer fortfarande att kunna anvÀnda ABP Suite, vilket pÄskyndar din utveckling. NÀr du förlÀnger din licens lÀggs 1 Är till licensens utgÄngsdatum.
Uppgradering: Genom att uppgradera din licens kommer du att befordras till en högre licensplan, vilket gör att du kan fÄ ytterligare fördelar. Kolla in jÀmförelsetabellen för licenser för att se skillnaderna mellan licensplanerna. NÀr du uppgraderar Àndras dÀremot inte licensens utgÄngsdatum! För att förlÀnga licensens slutdatum mÄste du förlÀnga din licens.", + "LicenseRenewalCost": "Vad Àr kostnaden för licensförnyelse efter 1 Är?", + "LicenseRenewalCostExplanation": "Priset för förnyelse (förlÀngning) av standard Team License Àr ${0}, standard Business License Àr ${1} och standard Enterprise License Àr ${2}. Om du redan Àr kund, logga in pÄ ditt konto för att granska den aktuella förnyelseprissÀttningen.", + "HowDoIRenewMyLicense": "Hur förnyar jag min licens?", + "HowDoIRenewMyLicenseExplanation": "Du kan förnya din licens genom att navigera till organisationshanteringssidan. För att dra nytta av vÄra rabatterade priser för tidig förnyelse, se till att du förnyar innan din licens löper ut. Oroa dig inte för att du inte vet nÀr din möjlighet till tidig förnyelse stÀngs; du kommer att fÄ 3 pÄminnelse-e-postmeddelanden innan din prenumeration löper ut. Vi skickar dem 30 dagar, 7 dagar och 1 dag före utgÄngen.", + "IsSourceCodeIncluded": "Omfattar min licens kÀllkoden för pro-modulerna och teman?", + "IsSourceCodeIncludedExplanation1": "Beror pÄ vilken licenstyp du har köpt:", + "IsSourceCodeIncludedExplanation2": "Team: Din lösning anvÀnder moduler och teman som NuGet- och NPM-paket. Den inkluderar inte deras kÀllkod. PÄ sÄ sÀtt kan du enkelt uppgradera dessa moduler och teman nÀr en ny version Àr tillgÀnglig. Du kan dock inte fÄ kÀllkoden för dessa moduler och teman.", + "IsSourceCodeIncludedExplanation3": "Business/Enterprise: Utöver Team-licensen kan du ladda ner kÀllkoden för alla moduler eller teman du behöver. Du kan till och med ta bort NuGet/NPM-paketreferenserna för en viss modul och lÀgga till dess kÀllkod direkt i din lösning för att Àndra den helt.", + "IsSourceCodeIncludedExplanation4": "

Att inkludera kÀllkoden för en modul i din lösning ger dig maximal frihet att anpassa den modulen. Det kommer dock inte att vara möjligt att automatiskt uppgradera modulen nÀr en ny version slÀpps.

Ingen av licenserna inkluderar kÀllkoden för ABP Suite och ABP Studio, vilket Àr externa verktyg som genererar kod Ät dig och hjÀlper din utveckling.

Kolla in sidan Planer och priser för andra skillnader mellan licenstyperna.

<", + "ChangingDevelopers": "Kan jag Àndra de registrerade utvecklarna för min organisation i framtiden?", + "ChangingDevelopersExplanation": "Förutom att lÀgga till nya utvecklare till din licens kan du ocksÄ Àndra befintliga utvecklare (du kan ta bort en utvecklare och lÀgga till en ny pÄ samma plats) utan nÄgon extra kostnad.", + "WhatHappensWhenLicenseEnds": "Vad hÀnder nÀr min licensperiod upphör?", + "discountForYears": "{0}% rabatt för {1} Är", + "WhenShouldIRenewMyLicense": "NÀr ska jag förnya min licens?", + "WhenShouldIRenewMyLicenseExplanation": "Om du förnyar din licens inom {3} dagar efter att din licens har löpt ut, kommer följande rabatter att tillÀmpas: Teamlicens {0}; Företagslicens {1}; Enterprise-licens {2}. Men om du förnyar din licens efter {3} dagar efter licensens utgÄngsdatum, kommer förnyelsepriset att vara detsamma som licensens inköpspris och det kommer inte att finnas nÄgon rabatt pÄ din förnyelse.", + "TrialPlan": "Har du en testplan?", + "DoYouAcceptBankWireTransfer": "Accepterar ni banköverföringar?", + "DoYouAcceptBankWireTransferExplanation": "Ja, vi accepterar banköverföringar.
NÀr du har skickat licensavgiften via banköverföring, skicka ditt kvitto och önskad licenstyp till accounting@volosoft.com.
VĂ„r internationella bankkontoinformation:", + "HowToUpgrade": "Hur uppgraderar man befintliga applikationer nĂ€r en ny version finns tillgĂ€nglig?", + "DatabaseSupport": "Vilka databassystem stöds?", + "UISupport": "Vilka UI-ramverk stöds?", + "Supported": "Stödd", + "UISupportExplanation": "ABP Framework Ă€r i sig sjĂ€lvt agnostiskt och kan fungera med alla anvĂ€ndargrĂ€nssnitt. Startmallar, modul-anvĂ€ndargrĂ€nssnitt och teman implementerades dock inte för alla anvĂ€ndargrĂ€nssnittsramverk. Kolla in GĂ„ igĂ„ng-dokumentet för den uppdaterade listan över anvĂ€ndargrĂ€nssnittsalternativ.", + "MicroserviceSupport": "Stödjer den microservice-arkitekturen?", + "WhereCanIDownloadSourceCode": "Var kan jag ladda ner kĂ€llkoden?", + "ComputerLimitation": "Hur mĂ„nga datorer kan en utvecklare logga in pĂ„ nĂ€r han utvecklar ABP?", + "ComputerLimitationExplanation": "Vi tillĂ„ter specifikt {0} datorer per individ/licensierad utvecklare. NĂ€r det finns ett behov för en utvecklare att utveckla ABP-baserade produkter pĂ„ en tredje maskin, ska ett e-postmeddelande skickas till license@abp.io dĂ€r situationen förklaras, och vi kommer sedan att göra lĂ€mplig tilldelning i vĂ„rt system.", + "RefundPolicy": "Har ni nĂ„gon Ă„terbetalningspolicy?", + "RefundPolicyExplanation": "Du kan begĂ€ra Ă„terbetalning inom 30 dagar efter ditt licensköp. Licenstyperna Business och Enterprise har alternativ för nedladdning av kĂ€llkod; dĂ€rför ger vi en Ă„terbetalning pĂ„ 60 % inom 30 dagar för Business- och Enterprise-licenser. Dessutom görs inga Ă„terbetalningar för förnyelser och andra licensköp.", + "HowCanIRefundVat": "Hur kan jag Ă„terbetala moms?", + "HowCanIRefundVatExplanation1": "Om du gjorde betalningen med 2Checkout kan du Ă„terbetala momsen via ditt 2Checkout-konto:", + "HowCanIRefundVatExplanation2": "Logga in pĂ„ ditt 2Checkout-konto", + "HowCanIRefundVatExplanation3": "Leta upp rĂ€tt order och tryck pĂ„ \"Återbetala försenad moms\" (ange ditt momsregistreringsnummer)", + "HowCanIGetMyInvoice": "Hur kan jag fĂ„ min faktura?", + "HowCanIGetMyInvoiceExplanation": "Det finns 2 betalningsgateways för att köpa en licens: Iyzico och 2Checkout. Om du köper din licens via 2Checkout-gatewayen skickar den PDF-fakturan till din e-postadress; kolla in 2Checkout-fakturering. Om du köper via Iyzico-gatewayen, med en anpassad inköpslĂ€nk eller via en banköverföring, kommer vi att förbereda och skicka din faktura. Du kan begĂ€ra eller ladda ner din faktura frĂ„n sidan för organisationshantering. Innan du kontaktar oss för fakturan, kontrollera din organisationshanteringssida!", + "Forum": "Forum", + "PrivateTicket": "Privat biljett", + "PrivateTicketExplanation": "Enterprise License inkluderar Ă€ven en privat support med e-post och Ă€rendehanteringssystem.", + "AbpSuiteExplanation1": "Med ABP Suite kan du skapa webbsidor pĂ„ bara nĂ„gra minuter. Det Ă€r ett globalt .NET Core-verktyg som kan installeras frĂ„n kommandoraden.", + "AbpSuiteExplanation2": "Den kan skapa en ny ABP-lösning och generera CRUD-sidor frĂ„n databasen till frontend. För teknisk översikt se dokumentet", + "FastEasy": "Snabbt och enkelt", + "AbpSuiteExplanation3": "Med ABP Suite kan du enkelt skapa CRUD-sidor. Du behöver bara definiera din entitet och dess egenskaper och lĂ„ta resten gĂ„ till ABP Suite Ă„t dig! ABP Suite genererar all nödvĂ€ndig kod för din CRUD-sida pĂ„ nĂ„gra sekunder. Den stöder Angular, MVC och Blazor anvĂ€ndargrĂ€nssnitt.", + "RichOptions": "Rika alternativ", + "AbpSuiteExplanation4": "ABP Suite stöder flera anvĂ€ndargrĂ€nssnittsalternativ som Razor Pages och Angular. Det stöder ocksĂ„ flera databaser som MongoDB och alla databaser som stöds av EntityFramework Core (MS SQL Server, Oracle, MySql, PostgreSQL och andra leverantörer...).", + "AbpSuiteExplanation5": "Det som Ă€r bra Ă€r att du inte behöver oroa dig för dessa alternativ. ABP Suite förstĂ„r din projekttyp och genererar koden för ditt projekt och placerar den genererade koden pĂ„ rĂ€tt plats i ditt projekt.", + "AbpSuiteExplanation6": "ABP Suite genererar kĂ€llkoden för Entity, Repository, Application Service, Code First Migration, JavaScript/TypeScript och CSHTML/HTML och Ă€ven nödvĂ€ndiga grĂ€nssnitt. ABP Suite genererar ocksĂ„ koden enligt Best Practices för programvaruutveckling, sĂ„ du behöver inte oroa dig för den genererade kodens kvalitet.", + "AbpSuiteExplanation7": "Eftersom du har kĂ€llkoden för byggstenarna i den genererade CRUD-sidan i rĂ€tt applikationslager kan du enkelt Ă€ndra kĂ€llkoden och lĂ€gga till din egen anpassade affĂ€rslogik i den genererade koden.", + "CrossPlatform": "Plattformsoberoende", + "AbpSuiteExplanation8": "ABP Suite Ă€r byggt med .NET Core och Ă€r plattformsoberoende. Den körs som en webbapplikation pĂ„ din lokala dator. Du kan köra den pĂ„ Windows, Mac och Linux", + "OtherFeatures": "Andra funktioner", + "OtherFeatures1": "Uppdaterar enkelt NuGet- och NPM-paket pĂ„ din lösning.", + "OtherFeatures2": "Återskapar redan genererade sidor frĂ„n början.", + "OtherFeatures3": "Skapar nya lösningar", + "ThanksForCreatingProject": "Ditt projekt har skapats framgĂ„ngsrikt!", + "HotToRunSolution": "Hur kör du din lösning?", + "HotToRunSolutionExplanation": "I dokumentet Kom igĂ„ng kan du lĂ€sa om hur du konfigurerar och kör din lösning.", + "GettingStarted": "Komma igĂ„ng", + "WebAppDevTutorialExplanation": "I handledningsdokumentet för utveckling av webbapplikationer finns ett exempel pĂ„ utveckling steg för steg.", + "Document": "Dokument", + "UsingABPSuiteToCURD": "AnvĂ€nda ABP Suite för generering av CRUD-sidor och verktyg", + "SeeABPSuiteDocument": "Kolla in ABP Suite-dokumentet för att lĂ€ra dig anvĂ€ndningen av ABP Suite.", + "SeeModulesDocument": "Se sidan med moduler för en lista över alla PRO-moduler.", + "Pricing": "PrissĂ€ttning", + "PricingExplanation": "VĂ€lj de egenskaper och funktioner som ditt företag behöver idag. Uppgradera enkelt nĂ€r ditt företag vĂ€xer.", + "Team": "Team", + "Business": "Företag", + "Enterprise": "Företag", + "Custom": "Anpassad", + "IncludedDeveloperLicenses": "Inkluderade utvecklarlicenser", + "CustomLicenceOrAdditionalServices": "Behöver du en anpassad licens eller ytterligare tjĂ€nster?", + "CustomOrVolumeLicense": "Anpassad licens eller volymlicens", + "LiveTrainingSupport": "Utbildning och support i realtid", + "AndMore": "och mer", + "AdditionalDeveloperLicense": "Ytterligare licens för utvecklare", + "ProjectCount": "ProjektrĂ€kning", + "AllProModules": "Alla proffsmoduler", + "AllProThemes": "Alla proffsteman", + "AllProStartupTemplates": "Alla proffsmallar för nystartade företag", + "SourceCodeOfAllModules": "KĂ€llkod för alla moduler", + "SourceCodeOfAllThemes": "KĂ€llkod för alla teman", + "PerpetualLicense": "Evig licens", + "UnlimitedServerDeployment": "ObegrĂ€nsad serverdistribution", + "YearUpgrade": "1 Ă„rs uppgradering", + "YearPremiumForumSupport": "1 Ă„rs premiumsupport för forum", + "ForumSupportIncidentCountYear": "Antal incidenter för forumstöd/Ă„r", + "PrivateTicketEmailSupport": "Privat support via biljett och e-post", + "BuyNow": "Köp nu", + "PayViaAmexCard": "Hur kan jag betala med mitt AMEX-kort?", + "PayViaAmexCardDescription": "Standardbetalningsgatewayen \"Iyzico\" kan neka vissa AMEX-kreditkort pĂ„ grund av sĂ€kerhetsĂ„tgĂ€rder. I detta fall kan du betala via den alternativa betalningsgatewayen \"2Checkout\".", + "InvalidReCaptchaErrorMessage": "Det uppstod ett fel vid verifiering av reCAPTCHA. VĂ€nligen försök igen.", + "YourCompanyName": "Ditt företagsnamn", + "FirstName": "Förnamn", + "LastName": "Efternamn", + "YourFirstName": "Ditt förnamn", + "YourLastName": "Ditt efternamn", + "SpecialOffer": "Specialerbjudande", + "SpecialOfferMessage": "Skynda dig! Priserna gĂ€ller under en begrĂ€nsad tid.", + "DiscountRequest": "BegĂ€ran om rabatt", + "DiscountRequestDescribeCustomerQuestion": "Vilken av följande beskrivningar stĂ€mmer in pĂ„ dig?", + "DiscountRequestStudentEmailMessage": "E-postadressen mĂ„ste innehĂ„lla \"edu\".", + "DiscountRequestDeveloperCount": "Hur mĂ„nga utvecklare Ă€r ni?", + "DiscountRequestDeveloperCountExceedMessage": "Vi erbjuder inte rabatterade licenser för företag som har fler Ă€n {0} utvecklare.", + "DiscountRequestOrganizationName": "Företagets/organisationens/skolans namn", + "Website": "Webbplats", + "GithubUsername": "AnvĂ€ndarnamn för GitHub", + "PhoneNumber": "Telefonnummer", + "DescribeABPCommercialUsage": "Beskriv det projekt som du planerar att utveckla baserat pĂ„ APB Commercial", + "DiscountRequestCertifyInformationMessage": "Jag intygar att alla uppgifter Ă€r sanningsenliga och korrekta.", + "DiscountRequestReceived": "Vi har mottagit din begĂ€ran om rabatt.", + "DiscountRequestStatusMessage": "Vi kommer att svara dig efter att ha kontrollerat den information du har lĂ€mnat.", + "MVCOrRazorPages": "MVC (Razor Pages)", + "Angular": "Angular", + "Blazor": "Blazor", + "New": "Nya", + "MongoDB": "MongoDB", + "EBookDDD": "E-bok DomĂ€nstyrd design", + "Page": "Sidan", + "DoYouAgreePrivacyPolicy": "Jag samtycker till Terms & Conditions och Privacy Policy.", + "VolosoftMarketingInformationMessage": "Jag vill ha information, tips och erbjudanden om Solutions for Businesses and Organizations och andra produkter och tjĂ€nster frĂ„n Volosoft.", + "VolosoftSharingInformationMessage": "Jag vill att Volosoft ska dela min information med utvalda partners sĂ„ att jag kan fĂ„ relevant information om deras produkter och tjĂ€nster.", + "StartFree": "Starta gratis", + "FreeTrial": "Gratis provperiod", + "AcceptsMarketingCommunications": " Ja, jag vill gĂ€rna fĂ„ ABP-relaterade marknadsföringsnyheter.", + "PurposeOfUsage": "Syfte med anvĂ€ndningen", + "Choose": "- VĂ€lj -", + "CompanyOrganizationName": "Företagets/organisationens namn", + "StartTrial": "Starta min kostnadsfria testperiod", + "ContactUsQuestions": "Kontakta oss om du har nĂ„gra frĂ„gor", + "TrialActivatedWarning": "En anvĂ€ndare har endast rĂ€tt till 1 gratis provperiod. Du har redan anvĂ€nt din provperiod.", + "ActivationRequirement": "Du Ă€r bara ett steg frĂ„n att starta din provperiod.
Efter att ha kontrollerat din information aktiverar vi din licens. NÀr din licens Àr aktiverad skickar vi ett e-postmeddelande till {0}. Oroa dig inte, den hÀr processen kommer inte att ta lÄng tid!", + "SaveAndDownload": "Spara och ladda ner", + "CompanyNameValidationMessage": "Företagsnamnet Àr för lÄngt!", + "AddressValidationMessage": "Adressen Àr för lÄng!", + "TaxNoValidationMessage": "TAX/VAT Nej Àr för lÄngt!", + "NotesValidationMessage": "AnteckningsfÀltet Àr för lÄngt!", + "CheckYourBillingInfo": "Du kan bara skapa din faktura en gÄng! Kontrollera din faktureringsinformation innan du skapar din faktura.", + "StartYourFreeTrial": "Starta din kostnadsfria testperiod", + "TrialLicenseModelInvalidErrorMessage": "Ett av följande fÀlt Àr ogiltigt: Landsnamn, Företagsstorlek, Bransch eller Syfte med anvÀndning.", + "Trial": "RÀttegÄng", + "Purchased": "Köpte", + "PurchaseNow": "Köp nu", + "PurchaseTrialLicenseMessage": "Din licens utgÄngsdatum Àr {0}.
Om du vill fortsĂ€tta anvĂ€nda de projekt som du skapade under din kostnadsfria testperiod mĂ„ste du Ă€ndra licensnycklarna i dina appsettings.secrets.json-filer. HĂ€r Ă€r din licensnyckel:", + "TrialLicenseExpireMessage": "Du anvĂ€nder en testlicens och din testlicens upphör att gĂ€lla den {0}.", + "TryForFree": "Prova gratis", + "TrialLicenseExpiredInfo": "Din testlicensperiod har löpt ut!", + "DowngradeLicensePlan": "Kan jag nedgradera till en lĂ€gre licensplan i framtiden?", + "LicenseTransfer": "Kan en licens överföras frĂ„n en utvecklare till en annan?", + "UserOwnerDescription": "Organisationens \"Ă€gare\" Ă€r administratör för detta konto. Han/hon hanterar organisationen genom att köpa licenser och tilldela utvecklare. En \"Ă€gare\" kan inte skriva kod i ABP-projekten, kan inte ladda ner ABP-exempelprojekten och kan inte stĂ€lla frĂ„gor pĂ„ supportwebbplatsen. Om du vill göra allt detta mĂ„ste du ocksĂ„ lĂ€gga till dig sjĂ€lv som utvecklare.", + "UserDeveloperDescription": "\"Utvecklarna\" kan skriva kod i ABP-projekten, ladda ner ABP:s exempelprojekt och stĂ€lla frĂ„gor pĂ„ supportwebbplatsen. Å andra sidan kan \"utvecklarna\" inte hantera den hĂ€r organisationen.", + "RemoveCurrentUserFromOrganizationWarningMessage": "Du tar bort dig sjĂ€lv frĂ„n din egen organisation. Du kommer inte lĂ€ngre att kunna hantera den hĂ€r organisationen, bekrĂ€ftar du det?", + "RenewExistingOrganizationOrCreateNewOneMessage": "Du kan förnya licensen för din organisation (er) genom att klicka pĂ„ nedanstĂ„ende \"FörlĂ€ng nu\"-knapp (ar) och dĂ€rmed kan du förlĂ€nga licensens utgĂ„ngsdatum med 1 Ă„r. Om du fortsĂ€tter till kassan kommer du att ha en ny organisation. Vill du fortsĂ€tta med en ny organisation?", + "PurchaseTrialOrganizationOrCreateNewOneMessage": "Du har en testlicens. För att köpa din testlicens klickar du pĂ„ knappen Köp nu. Om du fortsĂ€tter till kassan kommer du att ha en ny organisation. Vill du fortsĂ€tta med en ny organisation?", + "ExtendNow": "FörlĂ€nga / Förnya", + "CreateNewOrganization": "Skapa en ny organisation", + "RenewLicenseEarly": "Om jag förnyar min licens tidigt, kommer jag att fĂ„ hela Ă„ret?", + "RenewLicenseEarylExplanation": "NĂ€r du förnyar din licens före licensens utgĂ„ngsdatum kommer 1 Ă„r att lĂ€ggas till licensens utgĂ„ngsdatum. Om din licens t.ex. löper ut den {0}-06-06 och du förnyar den den {0}-01-01, kommer din nya licens att löpa ut den {1}-06-06.", + "OpenSourceWebApplication": "Webbapplikation med öppen kĂ€llkod", + "CompleteWebDevelopment": "En komplett webbutveckling", + "ABPFrameworkDescription": "ABP Framework Ă€r en komplett infrastruktur för att skapa moderna webbapplikationer genom att följa de bĂ€sta metoderna för mjukvaruutveckling och konventioner.", + "CommunityDescription": "Dela dina erfarenheter av ABP-ramverket!", + "PreBuiltApplication": "Förbyggd applikation", + "DatabaseProviders": "Databasleverantörer", + "UIFrameworks": "Ramverk för anvĂ€ndargrĂ€nssnitt", + "UsefulLinks": "AnvĂ€ndbara lĂ€nkar", + "Platform": "Plattform", + "MicroserviceArchitectureExplanation": "Det hĂ€r Ă€r en komplett lösningsarkitektur som bestĂ„r av flera applikationer, API-gateways, mikrotjĂ€nster och databaser för att bygga en skalbar mikrotjĂ€nstlösning med den senaste tekniken.", + "BusinessLogic": "AffĂ€rslogik", + "DataAccessLayer": "DataĂ„tkomstskikt", + "Monolith": "Monolit", + "ModularArchitectureExplanation": "Denna startup-mall ger en skiktad, modulĂ€r och DDD-baserad lösningsarkitektur för att bygga en ren och underhĂ„llbar kodbas.", + "Bs5Compatible": "Professionellt tema som Ă€r kompatibelt med Bootstrap 5, perfekt för din administratörswebbplats.", + "LeptonXTheme": "LeptonX tema", + "LeptonXDark": "LeptonX Mörk", + "LeptonXLight": "LeptonX Ljus", + "LeptonXSemiDark": "LeptonX Halvmörk", + "BuiltOnBs5Library": "Byggd pĂ„ Bootstrap 5-biblioteket", + "FullyCompatibleWithBs5": "100% kompatibel med Bootstrap 5 HTML-struktur och CSS-klasser", + "ResponsiveAndMobileCompatible": "Responsiv, mobilkompatibel, RTL-stöd", + "ProvidesStylesForDatatables": "TillhandahĂ„ller stilar för datatabeller", + "MultipleLayoutOptions": "Flera layoutalternativ", + "EasilyInstallAndUpgrade": "Enkel installation och uppgradering", + "SupportForum": "Forum för support", + "TrustedBy": "Betrodda av", + "OurPricing": "VĂ„r prissĂ€ttning", + "Plans": "Planer", + "NameSurname": "Namn Efternamn", + "LicenceType": "Typ av licens", + "LicenseDiscountWarning": "DENNA RABATTSIDA ANVÄNDER STANDARD RABATTKOD OCH FÖR VOLOSOFT UTVECKLARE. INKÖPSLÄNKAR NEDAN FUNGERAR INTE.", + "DiscountedLicenseExplanation": "Dessa licenspriser Ă€r avsedda för smĂ„ nystartade företag, enskilda utvecklare, studenter, ideella organisationer och projekt!", + "General": "AllmĂ€nt", + "Development": "Utveckling", + "Payment": "Betalning", + "WatchExplainerVideo": "LĂ„t oss trĂ€ffas! Titta pĂ„ förklarande video", + "LightDarkAndSemiDarkThemes": "Ljus, mörk och halvmörk", + "LeptonXThemeExplanation": "Lepton Theme kan Ă€ndra ditt tema enligt dina systeminstĂ€llningar.", + "PRO": "PRO", + "YourAccountDetails": "Dina kontouppgifter", + "OrganizationName": "Organisationens namn", + "AddDevelopers": "LĂ€gg till utvecklare", + "StartDevelopment": "Starta utveckling", + "CreateAndRunApplicationUsingStartupTemplate": "LĂ€r dig hur du skapar och kör en ny webbapplikation med hjĂ€lp av ABP:s startmall.", + "CommunityDescription2": "abp.io/community Ă€r en plats dĂ€r mĂ€nniskor kan dela ABP-relaterade artiklar. Sök efter artiklar, handledningar, kodprover, fallstudier och trĂ€ffa mĂ€nniskor som Ă€r i samma spĂ„r som du.", + "UseABPSuiteExplanation": "AnvĂ€nd ABP Suite för att ladda ner kĂ€llkoden för modulerna och temana.", + "ManageModulesWithSuite": "Du kan ocksĂ„ hantera dina ABP-moduler med Suite.", + "LearnHowToInstallSuite": "LĂ€r dig hur du installerar och anvĂ€nder ABP Suite.", + "SeeLess": "Se mindre", + "LayeredSolutionStructure": "Struktur med flera lager av lösningar", + "LayeredSolutionStructureExplanation": "Lösningen Ă€r uppbyggd i lager baserat pĂ„ principer och mönster för domĂ€ndriven design för att isolera affĂ€rslogiken frĂ„n infrastruktur och integrationer och för att maximera underhĂ„ll och Ă„teranvĂ€ndning av koden. ABP Framework tillhandahĂ„ller redan abstraktioner, basklasser och guider för att verkligen implementera DDD för din applikation.", + "MultipleUIOptionsExplanation": "Vi Ă€lskar olika sĂ€tt att skapa anvĂ€ndargrĂ€nssnittet. Den hĂ€r startup-lösningen ger tre olika alternativ för anvĂ€ndargrĂ€nssnitt för din affĂ€rsapplikation.", + "MultipleDatabaseOptions": "Flera databasalternativ", + "MultipleDatabaseOptionsExplanation": "Du har tvĂ„ alternativ för databasleverantörer (förutom att du kan anvĂ€nda bĂ„da i en och samma applikation). AnvĂ€nd Entity Framework Core för att arbeta med alla relationsdatabaser och anvĂ€nd eventuellt Dapper nĂ€r du behöver skriva lĂ„gnivĂ„frĂ„gor för bĂ€ttre prestanda. MongoDB Ă€r ett annat alternativ om du behöver anvĂ€nda en dokumentbaserad NoSQL-databas. Även om dessa leverantörer Ă€r vĂ€lintegrerade, abstraherade och förkonfigurerade kan du faktiskt interagera med alla databassystem som du kan anvĂ€nda med .NET.", + "ModularArchitectureExplanation2": "Modularitet Ă€r en förstklassig medborgare i ABP-plattformen. Alla applikationsfunktionaliteter Ă€r uppdelade i vĂ€lisolerade valfria moduler. Startlösningen levereras redan med de grundlĂ€ggande ABP-modulerna förinstallerade. Du kan ocksĂ„ skapa dina egna moduler för att bygga ett modulĂ€rt system för din egen applikation.", + "MultiTenancyForSaasBusiness": "Multi-tenancy för ditt SaaS-företag", + "MultiTenancyForSaasBusinessExplanation": "Lösningen har konfigurerats fullt ut för att stödja system med flera hyresgĂ€ster. Det gör det möjligt för hyresgĂ€sterna att dela eller ha sina egna databaser med on-the-fly databasskapande och migrationssystem.", + "MicroserviceStartupSolution": "Microservice Startup-lösning", + "MicroserviceArchitectureExplanation2": "Du kan skaffa det till ditt nĂ€sta microservice-system för att dra nytta av den förbyggda baslösningen och destillerade erfarenheten.", + "PreIntegratedTools": "Förintegrerad med populĂ€ra verktyg", + "PreIntegratedToolsExplanation": "Lösningen Ă€r redan integrerad i branschens standardverktyg och -tekniker, medan du alltid kan Ă€ndra dem och integrera dem med dina favoritverktyg.", + "SingleSignOnAuthenticationServer": "Server för autentisering med enkel inloggning", + "SingleSignOnAuthenticationServerExplanation": "Lösningen har en autentiseringsserverapplikation som anvĂ€nds av de andra applikationerna som en server för enkel inloggning med API-Ă„tkomsthanteringsfunktioner. Den Ă€r baserad pĂ„ implementeringen Openiddict.", + "WebAppsWithGateways": "2 webbappar med 2 API-gateways", + "WebAppsWithGatewaysExplanation": "Lösningen innehĂ„ller tvĂ„ webbapplikationer som var och en har en dedikerad API-gateway (BFF - Backend For Frontend-mönster).", + "BackOfficeApplication": "Back Office-applikation", + "BackOfficeApplicationExplanation": "Den faktiska webbapplikationen för ditt system, med flera alternativ för anvĂ€ndargrĂ€nssnitt. Du kan skapa alla typer av affĂ€rsapplikationer.", + "LandingWebsite": "Landningswebbplats", + "LandingWebsiteExplanation": "En generisk landningsplats/publik webbplats som kan anvĂ€ndas för flera Ă€ndamĂ„l, t.ex. för att presentera ditt företag, sĂ€lja dina produkter osv.", + "ABPFrameworkEBook": "Mastering ABP Framework e-bok", + "MasteringAbpFrameworkEBookDescription": "IngĂ„r i din kommersiella licens", + "LicenseTypeNotCorrect": "Licenstypen Ă€r inte korrekt!", + "Trainings": "Utbildningar", + "ChooseTrainingPlaceholder": "VĂ€lj utbildning...", + "DoYouNeedTrainings": "Behöver du nĂ„gon av dessa utbildningar?", + "DoYouNeedTraining": "Behöver du {0} utbildning?", + "GetInTouchUs": "Ta kontakt med oss", + "ForMoreInformationClickHere": "För mer information, klicka hĂ€r.", + "ForMoreInformationClickHereByClass": "För mer information, klicka hĂ€r.", + "IsGetOnboardingTraining": "Vill du fĂ„ utbildning i onboarding och utveckling av webbapplikationer?", + "OnboardingWebApplicationDevelopmentTrainingMessage": "För att schemalĂ€gga din utbildningskalender, vĂ€nligen kontakta {0} efter att du har skapat organisationen", + "CustomPurchaseMessage": "För nĂ€sta steg, klicka pĂ„ {0} för att kontakta oss.", + "Note": "Notera", + "AdditionalNote": "Ytterligare anmĂ€rkning", + "OnboardingTrainingFaqTitle": "Har du en ABP onboarding-utbildning?", + "OnboardingTrainingFaqExplanation": "Ja, vi har ABP Training Services som hjĂ€lper dig att snabbt komma igĂ„ng med ditt ABP-projekt. Du kommer att lĂ€ra dig om ABP frĂ„n en medlem i ABP:s kĂ€rnteam och du kommer att fĂ„ de fĂ€rdigheter som krĂ€vs för att starta ditt ABP-projekt. I onboarding-utbildningen förklarar vi hur du stĂ€ller in din utvecklingsmiljö, installerar de nödvĂ€ndiga verktygen och skapar en fullt fungerande CRUD-sida. Utbildningen kommer att vara live och Zoom-applikationen kommer att anvĂ€ndas, men vi Ă€r öppna för att anvĂ€nda andra online-mötesplattformar. SprĂ„ket för utbildningen kommer att vara engelska. Du kan ocksĂ„ stĂ€lla dina frĂ„gor om ABP under sessionerna. En lĂ€mplig tid och ett lĂ€mpligt datum kommer att planeras för bĂ„da parter. För ytterligare information besök utbildningssidan.", + "AddBasket": "LĂ€gg till i korgen", + "SendTrainingRequest": "Skicka förfrĂ„gan om utbildning", + "OnlyEnglishVersionOfThisDocumentIsTheRecentAndValid": "* Den engelska versionen av detta dokument Ă€r den mest aktuella och den engelska versionen ska ha företrĂ€de i alla tvister.", + "Pricing_Page_Title": "PrissĂ€ttning", + "Pricing_Page_Description": "Se de olika licensplanerna för ABP Platform, inklusive kostnadsfria nivĂ„er. Om standardplanerna inte passar, be om en offert. Glöm inte att vi har en 30-dagars pengarna-tillbaka-garanti!", + "Pricing_Page_HurryUp": "Skynda dig!", + "Pricing_Page_BuyLicense": "Köp en licens till 2021 Ă„rs priser fram till den 16 januari!", + "Pricing_Page_ValidForExistingCustomers": "GĂ€ller Ă€ven för befintliga kunder och licensförnyelser.", + "Pricing_Page_Hint1": "I licenspriset ingĂ„r ett visst antal platser för utvecklare. Om du har fler utvecklare kan du alltid köpa ytterligare platser.", + "Pricing_Page_Hint2": "Du kan köpa fler utvecklarlicenser nu eller i framtiden. Licenserna Ă€r platsbaserade, vilket innebĂ€r att du kan överföra en plats frĂ„n en utvecklare till en annan.", + "Pricing_Page_Hint3": "Du kan utveckla ett obegrĂ€nsat antal olika produkter med din licens.", + "Pricing_Page_Hint4": "ABP Suite Ă€r ett verktyg som hjĂ€lper dig att utveckla och förbĂ€ttra din produktivitet. Det stöder generering av CRUD-sidor och skapande av nya projekt.", + "Pricing_Page_Hint5": "Du kan anvĂ€nda alla de förbyggda modulerna i dina applikationer.", + "Pricing_Page_Hint6": "Du kan anvĂ€nda alla de förbyggda temana i dina applikationer.", + "Pricing_Page_Hint7": "En startmall Ă€r en Visual Studio-lösning som hjĂ€lper dig att komma igĂ„ng med ditt projekt. Alla grundlĂ€ggande moduler lĂ€ggs till och förkonfigureras Ă„t dig.", + "Pricing_Page_Hint8": "Mastering ABP Framework e-bok förklarar hur man implementerar .NET-lösningar med bĂ€sta praxis. Den sĂ€ljs pĂ„ Amazon.com, och du kan ladda ner boken gratis med din licens.", + "Pricing_Page_Hint9": "Du kan ladda ner kĂ€llkoden för alla moduler. Du kanske vill lĂ€gga till kĂ€llkoden i din lösning för att göra radikala Ă€ndringar eller bara behĂ„lla den för dig sjĂ€lv av sĂ€kerhetsskĂ€l.", + "Pricing_Page_Hint10": "Licenserna Ă€r livstidsbaserade. Det innebĂ€r att du kan fortsĂ€tta att utveckla din applikation för alltid. TillgĂ„ng till den senaste versionen och support beviljas inom licensperioden (1 Ă„r om du inte förnyar den).", + "Pricing_Page_Hint11": "Inga begrĂ€nsningar för driftsĂ€ttning! Du kan distribuera till sĂ„ mĂ„nga servrar som du vill, inklusive molntjĂ€nster eller lokalt.", + "Pricing_Page_Hint12": "Du kan uppdatera moduler, teman och verktyg till den senaste versionen inom din aktiva licensperiod. NĂ€r din licens löper ut mĂ„ste du förnya den för att fortsĂ€tta att fĂ„ uppdateringar för buggfixar, nya funktioner och förbĂ€ttringar.", + "Pricing_Page_Hint13": "Du kan fĂ„ premiumsupport i ett Ă„r (du kan förnya din licens för att förlĂ€nga den).", + "Pricing_Page_Hint14": "Team- och Business-licenser har en grĂ€ns för antal incidenter/frĂ„gor. Om du köper ytterligare utvecklarlicenser ökar incidentgrĂ€nsen med {0} (för Team-licensen) eller {1} (för Business-licensen) per utvecklare.", + "Pricing_Page_Hint15": "Endast Enterprise License inkluderar privat support. Du kan skicka ett e-postmeddelande direkt till ABP-teamet eller stĂ€lla frĂ„gor pĂ„ abp.io/support/questions med ett privat biljettalternativ. De privata Ă€rendena Ă€r inte synliga för allmĂ€nheten.", + "Pricing_Page_Hint16": "Du kan ladda ner kĂ€llkoden för alla ABP-teman. Du kanske vill lĂ€gga till kĂ€llkoden i din lösning för att göra radikala Ă€ndringar eller bara behĂ„lla den för dig sjĂ€lv av sĂ€kerhetsskĂ€l.", + "Pricing_Page_Testimonial_1": "ABP Commercial gjorde det möjligt för SC Ventures att leverera en bankklassad SaaS-plattform med silodatabas med flera hyresgĂ€ster pĂ„ 9 mĂ„nader för att stödja leverantörskedjans kundfordringar / leverantörsskulder för finansiering av fakturor med betydande vĂ€rde frĂ„n flera integrerade ankare. ABP:s modularitet gjorde det möjligt för teamet att leverera pĂ„ rekordtid, klara alla VAPT och driftsĂ€tta den containeriserade mikrotjĂ€nststacken via fullstĂ€ndig CI/CD och pipelines till produktion.", + "Pricing_Page_Testimonial_2": "Vi ser vĂ€rdet av att anvĂ€nda ABP Commercial för att minska omkostnaderna för kundanpassade utvecklingsprojekt. Teamet kan förena kodmönstret i olika projektströmmar. Vi ser mer potential i ramverket för att vi ska kunna bygga nya funktioner snabbare Ă€n tidigare. Vi litar pĂ„ att vi stĂ€ndigt kommer att se vĂ€rdet av att utnyttja ABP Commercial.", + "Pricing_Page_Testimonial_3": "Vi Ă€lskar ABP. Vi behöver inte skriva allt frĂ„n grunden. Vi utgĂ„r frĂ„n out-of-the-box-funktioner och fokuserar bara pĂ„ det vi verkligen behöver skriva. Dessutom Ă€r ABP vĂ€larkitekterat och koden Ă€r av hög kvalitet med fĂ€rre buggar. Om vi hade varit tvungna att skriva allt vi behövde pĂ„ egen hand hade vi kanske fĂ„tt lĂ€gga ner flera Ă„r. Ytterligare en sak vi gillar Ă€r att den nya versionen, problemfixningen eller förbĂ€ttringen kommer ut vĂ€ldigt snart, varannan vecka. Vi vĂ€ntar inte för lĂ€nge.", + "Pricing_Page_Testimonial_4": "ABP Commercial Ă€r en fantastisk produkt som jag skulle rekommendera. Kommersiella produkter till marknaden för vĂ„ra kunder i en enda konfigurerbar plattform. Den starthjĂ€lp som ramverket och verktygen ger alla team Ă€r vĂ€rd varenda krona. ABP Commercial var det som passade bĂ€st för vĂ„ra behov.", + "Pricing_Page_Testimonial_5": "ABP Framework Ă€r inte bara ett ramverk, utan ocksĂ„ en guide för projektutveckling/hantering, eftersom det ger utbildning i DDD, GenericRepository, DI, Microservice och Modularity. Även om du inte kommer att anvĂ€nda sjĂ€lva ramverket kan du utveckla dig sjĂ€lv med abp.io/docs som Ă€r vĂ€l och professionellt förberedda (OpenIddict, Redis, Quartz etc.). Eftersom mĂ„nga saker Ă€r förbyggda förkortar det projektutvecklingstiden avsevĂ€rt (t.ex. inloggningssida, undantagshantering, datafiltrering, seeding, revisionsloggning, lokalisering, automatisk API-kontroller etc.) Som ett exempel frĂ„n vĂ„r applikation har jag anvĂ€nt Local Event Bus för lagerstyrning. SĂ„ jag kan hantera orderrörelser genom att skriva lagerhanterare. Det Ă€r underbart att inte förlora tid för CreationTime, CreatorId. De fylls i automatiskt.", + "Pricing_Page_Testimonial_6": "ABP Framework Ă€r ett bra ramverk men det tar tid att förstĂ„ de olika lager, klasser och bibliotek som det anvĂ€nder (sĂ€rskilt ABP). Jag tillbringade mycket tid med att lĂ€sa kodbasen, men ABP Commercial sparade oss tid nĂ€r vi skapade projektspecialitetsenheterna (AR) och förvaret kopplat till var och en av dem. Jag gillade ocksĂ„ det tillvĂ€gagĂ„ngssĂ€tt som anvĂ€nds i ABP Ă€r mycket moget; vi vet Ă€r baserat pĂ„ DDD och monolit.", + "Pricing_Page_Testimonial_7": "Som ett nystartat företag mĂ„ste vi iterera snabbt och spendera minimal tid pĂ„ standardfunktioner och icke-kĂ€rnfunktioner.\nVĂ„ra ingenjörer strĂ€cker sig frĂ„n mycket erfarna till juniora ingenjörer, och vi behövde en gemensam förstĂ„else och ett sĂ€tt att dela teknisk och domĂ€nkunskap, ABP gjorde det möjligt för oss att göra detta tack vare deras fantastiska guider och dokumentation.\nDet finns saker som vi inte har behövt oroa oss för eftersom de fungerar direkt med ABP.\nABP hjĂ€lpte oss att effektivisera snabb prototyping och utveckling, mindre Ă€n 4 veckor frĂ„n funktionsstart till produktion. Med alla premiumfunktioner som ingĂ„r i licensen har ABP gett oss \"Startup in a Box\" pĂ„ Software Engineering-sidan.", + "Pricing_Page_Testimonial_8": "Jag skulle rekommendera ABP commercial till alla som vill utöka utbudet av produkter som Ă€r tillgĂ€ngliga för sina kunder. Det Ă€r fantastiskt nĂ€r man behöver anvĂ€nda en distribuerad företagsmiljö (Angular, WPF, Win&Linux). Förutom deras produkter Ă€lskar vi deras support, som gör vĂ„rt jobb snabbare och enklare. Vi vet redan att vi har hittat en bra partner för framtiden som kommer att stödja oss i att expandera vĂ„r verksamhet.", + "Pricing_Page_Testimonial_9": "Vi Ă€r ett företag med 2 anstĂ€llda som har varit verksamma i över 20 Ă„r.\nNĂ€r det gĂ€ller vĂ„r erfarenhet av ABP Commercial kontaktades vi av en kund som ville att vi skulle utveckla en ny personalapplikation i en modern miljö för att ersĂ€tta deras 25 Ă„r gamla Access-applikation. Vi bestĂ€mde oss för att gĂ„ över frĂ„n en desktoplösning till en webbaserad lösning.\n\nVid den tidpunkten hade vi mycket liten kunskap om webbapplikationer och .NET, men vi snubblade över ABP Commercial, och med hjĂ€lp av ABP Framework, teknisk dokumentation och ABP Suite kunde vi inte bara utveckla applikationen enligt kundens specifikationer utan ocksĂ„ framgĂ„ngsrikt arbeta i en .NET-miljö inom ett Ă„r.", + "AbpBookDownloadArea_ClaimYourEBook": "Gör ansprĂ„k pĂ„ din Mastering ABP Framework e-bok", + "AddMemberModal_Warning_1": "Om det anvĂ€ndarnamn som du försöker lĂ€gga till inte finns i systemet, be din teammedlem att registrera sig pĂ„ {0} och dela anvĂ€ndarnamnet pĂ„ hans/hennes konto med dig.", + "MyOrganizations_Detail_WelcomeMessage": "VĂ€lkommen till din organisation, {0}", + "MyOrganizations_Detail_OrganizationManagement": "Organisation Förvaltning", + "OrganizationDisplayName": "Organisationens visningsnamn", + "MyOrganizations_Detail_EditDisplayName": "Redigera visningsnamn", + "MyOrganizations_Detail_UpgradeYourLicense": "Uppgradera din licens", + "MyOrganizations_Detail_LicenseStartAndExpiryDate": "Licensens startdatum - utgĂ„ngsdatum", + "MyOrganizations_Detail_OwnerRightInfo": "Du anvĂ€nder {0} av din {1} Ă€gares rĂ€ttigheter.", + "MyOrganizations_Detail_CopyApiKey": "Kopiera nyckeln", + "MyOrganizations_Detail_ApiKeyDescription": "API-nyckeln Ă€r token för PRO-paket som finns pĂ„ {1}.", + "MyOrganizations_Detail_YourPrivateNugetSource": "Din privata NuGet-kĂ€lla Ă€r {0}", + "MyOrganizations_Detail_PrivateNugetSourceWarning": "Detta lĂ€ggs automatiskt till som en feed till din NuGet.Config i din ABP-lösning. Dela inte din privata nyckel med obehöriga anvĂ€ndare!", + "MyOrganizations_Detail_DeveloperSeatInfo": "Du anvĂ€nder {0} av dina {1} platser för utvecklare.", + "NeedMoreSeatsForYourTeam": "Behöver du fler platser för ditt team?", + "MyOrganizations_Detail_PricePerYear": "{0} / per Ă„r", + "MyOrganizations_Detail_PurchaseDeveloperSeats": "Köpa platser för utvecklare", + "Invoices": "Fakturor", + "RequestInvoice": "BegĂ€r faktura", + "OrderNumber": "BestĂ€llningsnummer", + "Products": "Produkter", + "TotalPrice": "Totalt pris", + "ThereIsNoInvoice": "Det finns ingen faktura", + "MyOrganizations_Detail_PaymentProviderInfo": "Om du har köpt din licens via {0} gateway skickas PDF-fakturan till din e-postadress, se {0} fakturering.", + "MyOrganizations_Detail_PayUInfo": "Om du har köpt via Iyzico-gatewayen klickar du pĂ„ knappen \"BegĂ€r faktura\" och fyller i faktureringsinformationen.", + "MyOrganizations_Detail_ConclusionInfo": "Din fakturabegĂ€ran kommer att behandlas inom {0} arbetsdagar.", + "ExtendYourLicense": "FörlĂ€ng din {0} licens", + "PurchaseLicense": "Köp {0} licens", + "DownloadInvoiceModal_DownloadInvoice": "Ladda ner faktura", + "DownloadInvoiceModal_SaveInformationOnlyOnce": "Du kan bara spara din faktureringsinformation en gĂ„ng.", + "InvoiceModal_EnterCompanyName": "Ange ditt juridiska företagsnamn...", + "InvoiceModal_EnterCompanyAddress": "Ange din juridiska företagsadress...", + "InvoiceModal_EnterTaxNumber": "Ange ditt TAX/VAT-nummer om det finns tillgĂ€ngligt...", + "RequestInvoiceModal_EnterNotes": "Ytterligare information för din faktura... Denna anteckning kommer att skrivas i anteckningsavsnittet pĂ„ fakturan.", + "PrePayment_PayWithIyzico": "Du kommer att betala med Iyzico", + "ContinueToCheckout": "FortsĂ€tt till kassan", + "PrePayment_IyzicoRedirectionInfo": "Du kommer att omdirigeras till Iyzico Payment Gateway för att slutföra ditt köp pĂ„ ett sĂ€kert sĂ€tt.", + "PrePayment_IyzicoAcceptVisaAndMasterCard": "Iyzico tar emot Visa och MasterCard.", + "Purchase": "Köp", + "AcceptTermsAndConditions": "Jag har lĂ€st, förstĂ„tt och accepterar integritetspolicy, villkor och EULA.", + "AcceptTermsAndConditionsWarningMessage": "VĂ€nligen acceptera integritetspolicyn och villkoren", + "SelectGatewayToContinue": "VĂ€nligen vĂ€lj en Gateway för att fortsĂ€tta!", + "GatewaySelection_SelectGateway": "VĂ€lj en betalningsportal", + "GatewaySelection_RedirectionMessage": "DĂ€refter kommer du att omdirigeras till den valda betalningsgatewayens webbplats för transaktionen.", + "PaymentSucceed_PaymentSuccessMessage": "Betalning framgĂ„ngsrik", + "PaymentSucceed_ThanksForPurchase": "Tack för ditt köp!", + "PaymentSucceed_CreateYourOrganization": "Skapa din organisation", + "PaymentSucceed_AddMeAsDeveloper": "Jag Ă€r ocksĂ„ utvecklare, lĂ€gg till mig som utvecklare i min organisation.", + "PaymentSucceed_CreateOrganization": "Skapa organisation", + "PaymentSucceed_OrganizationDescription": "En organisation bestĂ„r av utvecklare och Ă€gare. Utvecklarna Ă€r anvĂ€ndare som skriver kod i ABP-projektet och som kommer att dra nytta av webbplatsen {1}. Ägarna Ă€r anvĂ€ndare som tilldelar utvecklarplatser och hanterar licensiering.", + "PaymentSucceed_ViewOrganization": "Klicka hĂ€r för att se organisationen", + "Purchase_TotalAnnualPrice": "TOTALT (Ă„rsavgift)", + "Purchase_TrainingPrice": "Pris för utbildning", + "Purchase_OnboardingTraining": "Live-utbildning i onboarding och utveckling av webbapplikationer", + "TotalDeveloperPrice": "Totalt pris för utvecklare", + "Purchase_PricePerDeveloper": "{0} per utvecklare", + "Purchase_IncludedDeveloperInfo": "{0} {1} ingĂ„r.", + "Purchase_LicenseExtraDeveloperPurchaseMessage": "I {0} licens ingĂ„r {1} utvecklare. Du kan lĂ€gga till ytterligare utvecklare.", + "StartupTemplates_Page_Title": "ABP Startup Mallar", + "StartupTemplates_Page_Description": "Kickstarta ditt nya projekt med ABP:s appmallar! LĂ€mna alla infrastrukturaspekter till ABP och gör det du gör bĂ€st; fokusera pĂ„ ditt arbete...", + "MicroserviceStartupSolutionForDotnet": "Microservice Startup-lösning för .NET", + "MonolithSolutionForDotnet": "Monolitisk (modulĂ€r) lösning för .NET", + "TrainingDetailsHeaderInfo_TrainingHour": "{0} timmar", + "Trainings_Content": "Utbildningens innehĂ„ll", + "Trial_Page_StartYourFreeTrial": "Starta din gratis provperiod.", + "TrialLicenseFeatures": "Du kommer att kunna dra nytta av alla ABP:s kommersiella funktioner", + "TrialPeriodDays": "Du kommer att ha en {0} dagars teamlicens", + "TrialForumSupportIncident": "Du kommer att ha {0} forum support incidenter", + "Contact_Page_Title": "Kontakta oss", + "Contact_Page_Description": "Kontakta oss om du har frĂ„gor om licenser, tillĂ€ggstjĂ€nster, förfrĂ„gningar eller feedback om ABP. Vi Ă€r hĂ€r för att hjĂ€lpa dig!", + "Demo_Page_Title": "Skapa en demo", + "Demo_Page_Description": "Skapa en gratis demo för att se ett exempel pĂ„ en ansökan som skapats med hjĂ€lp av ABP-startmallen. Upprepa inte dig sjĂ€lv för vanliga applikationskrav.", + "Discounted_Page_Title": "Rabatterad prissĂ€ttning", + "Discounted_Page_Description": "VĂ€lj de funktioner och den funktionalitet som ditt företag behöver redan idag. Köp en kommersiell licens och skapa obegrĂ€nsat med projekt", + "Faq_Page_Title": "Vanliga frĂ„gor och svar", + "Faq_Page_Description": "Hitta svar pĂ„ vanliga frĂ„gor om ABP Framework i vĂ„r FAQ-sektion, som tĂ€cker olika Ă€mnen och frĂ„gor.", + "Faq_Page_SwiftCode": "SWIFT-kod", + "Faq_Page_BankName": "Bankens namn", + "Faq_Page_AccountName": "Kontots namn", + "Faq_Page_AccountNumber": "Kontonummer", + "Faq_Page_Currency": "Valuta", + "Faq_Page_VatNumber": "Momsregistreringsnummer", + "Faq_Page_OtherCurrenciesInfo": "För andra valutor, se alla konton", + "ProjectCreatedSuccess_Page_Title": "Ditt projekt skapat", + "ProjectCreatedSuccess_Page_Description": "Ditt ABP-projekt har skapats framgĂ„ngsrikt!", + "Suite_Page_Title": "ABP-svit", + "Suite_Page_Description": "Möt ABP Suite, ett verktyg för snabb applikationsutveckling som ökar produktiviteten och effektiviteten. Skapa CRUD-sidor pĂ„ nĂ„gra minuter!", + "Themes_Page_Title": "ABP Teman", + "Themes_Page_Description": "Utseendet Ă€r viktigt! Vi presenterar LeptonX Theme, ett modernt, anpassningsbart och flexibelt tema som skapar en unik anvĂ€ndarupplevelse.", + "Tools_Page_Title": "ABP Verktyg", + "Tools_Page_Description": "Utforska de verktygslĂ„dor som ABP tillhandahĂ„ller och som ökar utvecklingsproduktiviteten och effektiviserar din utveckling.", + "DeveloperPrice": "Pris för utvecklare", + "AdditionalDeveloperPaymentInfoSection_AdditionalDevelopers": "{0} utvecklare", + "LicenseRemainingDays": "i {0} dagar", + "ExtendPaymentInfoSection_Description": "Genom att förlĂ€nga/förnya din licens kommer du att fortsĂ€tta att fĂ„ premium support. Du kommer ocksĂ„ att kunna fĂ„ större eller mindre uppdateringar för moduler och teman. Du kommer att kunna fortsĂ€tta skapa nya projekt. Och du kommer fortfarande att kunna anvĂ€nda ABP Suite som pĂ„skyndar din utveckling.", + "LicenseRenewalPrice": "Pris för förnyelse av licens", + "LicensePrice": "Licenspris", + "TrialLicensePaymentInfoSection_Description": "Köp licens: Genom att köpa en licens kommer du att fortsĂ€tta att fĂ„ premium support. Du kommer ocksĂ„ att kunna fĂ„ större eller mindre uppdateringar för moduler och teman. Du kommer att kunna fortsĂ€tta skapa nya projekt. Och du kommer fortfarande att kunna anvĂ€nda ABP Suite som pĂ„skyndar din utveckling.
Se jĂ€mförelsetabellen för licenser för att kontrollera skillnaderna mellan licenstyperna.", + "SelectTargetLicense": "VĂ€lj mĂ„llicens", + "UpgradePaymentInfoSection_ExtendMyLicenseForOneYear": "Ja, förlĂ€nga min licens utgĂ„ngsdatum med 1 Ă„r.", + "UpgradePaymentInfoSection_WantToExtendLicense": "Vill du förlĂ€nga din licens med ytterligare 1 Ă„r?", + "UpgradePaymentInfoSection_UpgradingWillNotExtendLicense": "Uppgradering kommer inte att förlĂ€nga licensens utgĂ„ngsdatum!", + "UpgradePaymentInfoSection_LicenseUpgradeDescription": "Genom att uppgradera din licens kommer du att bli befordrad till en högre licenstyp, vilket gör att du kan fĂ„ ytterligare fördelar. Se jĂ€mförelsetabellen för licenser för att kontrollera skillnaderna mellan licenstyperna.", + "Welcome_Page_UseSameCredentialForCommercialWebsites": "AnvĂ€nd samma autentiseringsuppgifter för bĂ„de abp.io och abp.io/support/questions.", + "WatchCrudPagesVideo": "Titta pĂ„ videon \"Skapa CRUD-sidor med ABP Suite\"!", + "WatchGeneratingFromDatabaseVideo": "Titta pĂ„ videon \"ABP Suite: Generera CRUD-sidor frĂ„n befintliga databastabeller\" Video!", + "WatchTakeCloserLookVideo": "Titta pĂ„ videon \"Ta en nĂ€rmare titt pĂ„ kodgenerering: ABP Suite\" Video!", + "ConfirmedEmailAddressRequiredToStartTrial": "Du mĂ„ste ha en bekrĂ€ftad e-postadress för att kunna starta en testlicens.", + "EmailVerificationMailNotSent": "E-postverifiering mail kunde inte skickas.", + "GetConfirmationEmail": "Klicka hĂ€r för att fĂ„ ett verifieringsmejl om du inte har fĂ„tt det tidigare.", + "WhichLicenseTypeYouAreInterestedIn": "Vilken licenstyp Ă€r du intresserad av?", + "DontTakeOurWordForIt": "Ta inte vĂ„rt ord för det...", + "BlazoriseLicense": "MĂ„ste vi köpa en Blazorise-licens?", + "ExtendPaymentInfoSection_DeveloperPrice": "{0}x Ytterligare utvecklare", + "ExtendPaymentInfoSection_DiscountRate": "Rabatt {0}%.", + "TotalNetPrice": "Totalt nettopris", + "EFCore": "Entity Framework Core", + "All": "Alla", + "Mvc": "MVC", + "DataBaseProvider": "Dataleverantör", + "UIFramework": "Ramverk för anvĂ€ndargrĂ€nssnitt", + "LeptonXThemeForDashboard": "LeptonX Theme för din Admin Dashboard av", + "AbpPlatform": "ABP-plattform", + "YouDeserveGoodUXUI": "Du förtjĂ€nar ett bra UI och ett bĂ€ttre UX. LeptonX Theme by ABP Ă€r hĂ€r för att tjĂ€na det.", + "ViewLiveDemo": "Visa demo för live-tema", + "GetLeptonX": "Skaffa LeptonX nu", + "SeeLeptonXDocumentation": "Se LeptonX dokumentation", + "SeeLeptonDocumentation": "Se Lepton Dokumentation", + "SimplifiedMenu": "Förenklad meny", + "SimplifiedMenuDescription": "Du kan enkelt hitta den sida du letar efter genom att filtrera i menyn", + "YourFavoritePages": "Dina favoritsidor inom rĂ€ckhĂ„ll", + "YourFavoritePagesDescription": "LĂ€gg enkelt till eller ta bort sidan frĂ„n favoriter genom att klicka pĂ„ stjĂ€rnikonen i det övre högra hörnet av sidan.", + "BreadCrumbs": "Breadcrumb för sömlös vĂ€xling", + "BreadCrumbsDescription": "Med Breadcrumb kan du vĂ€xla till sidorna pĂ„ samma nivĂ„ med ett klick, Ă€ven nĂ€r vĂ€nstermenyn Ă€r stĂ€ngd, och det fungerar pĂ„ surfplattor och mobiler!", + "YourMenu": "Din meny som du vill ha den", + "YourMenuDescription": "Anpassa de direktklickbara ikonerna och rullgardinsmenyerna i anvĂ€ndarmenyn som du vill. AnvĂ€ndarmenyn Ă€r helt anpassningsbar efter dina behov", + "RtlSupport": "RTL-stöd för ditt sprĂ„k", + "RtlSupportDescription": "LeptonX Theme stöder RTL för ditt sprĂ„k. SprĂ„kalternativen finns i instĂ€llningsmenyn sĂ„ att du kan Ă€ndra sprĂ„k.", + "YourColors": "Dina fĂ€rger i grĂ€nssnittet för din adminpanel", + "YourColorsDescription": "LeptonX Theme fungerar enligt dina systeminstĂ€llningar och har alternativ för dashboard light theme, dashboard dark theme och dashboard semi-dark theme.", + "ArrangeContentWidth": "Ordna enkelt bredden pĂ„ ditt innehĂ„ll", + "ArrangeContentWidthDescription": "Ändra enkelt bredden pĂ„ din innehĂ„llsyta.", + "LeptonXCompatibleWith": "LeptonX Theme Ă€r kompatibelt med", + "MobileResponsiveTemplate": "Mobil responsiv mall", + "MobileResponsiveTemplateDescription1": "FĂ„ tillgĂ„ng till LeptonX adminpanel frĂ„n vilken enhet du vill.", + "MobileResponsiveTemplateDescription2": "Den Ă€r utformad för att du enkelt ska kunna anvĂ€nda den i alla dina enheter. Den Ă€r responsiv pĂ„ mobila enheter och surfplattor.", + "TopMenuLayoutOption": "Alternativ för layout av toppmeny", + "TopMenuLayoutOptionDescription1": "Om du vill konfigurera din webbplats med samma adminpanel Ă€r det möjligt att göra det med LeptonX Theme!", + "TopMenuLayoutOptionDescription2": "Prova bara LeptonX toppmenylayout för att fĂ„ det att hĂ€nda!", + "EasilyCustomizable": "LĂ€tt att anpassa till ditt varumĂ€rkes fĂ€rger", + "EasilyCustomizableDescription1": "Du kan anpassa LeptonX-temat med bara nĂ„gra fĂ„ SCSS-variabler. Ingen Ă„sidosĂ€ttning, ingen extra CSS-belastning!", + "EasilyCustomizableDescription2": "Med LeptonX kan du ordna din adminpanel precis som du vill.", + "IndependentLayout": "Oberoende layout och innehĂ„llsyta", + "IndependentLayoutDescription1": "LeptonX:s layoutinfrastruktur utformades helt separat frĂ„n innehĂ„llet.", + "IndependentLayoutDescription2": "Detta innebĂ€r att du fritt kan utforma ditt projekt med en annan innehĂ„llsstruktur Ă€n Bootstrap om du vill.", + "MostUsedLibraries": "De mest anvĂ€nda biblioteken integrerade med LeptonX", + "MostUsedLibrariesDescription1": "LeptonX innehĂ„ller dina mest anvĂ€nda bibliotek. Det gör att du enkelt kan anvĂ€nda bibliotek som ApexCharts, DataTables, DropZone, FullCalender, JSTree, Select2 och Toastr.", + "MostUsedLibrariesDescription2": "LeptonX stöder ocksĂ„ MVC Angular och Blazor-specifika bibliotek.", + "CreateAndCustomize": "Skapa och anpassa de sidor du behöver pĂ„ nĂ„gra sekunder med LeptonX anpassade sidor", + "CreateAndCustomizeDescription": "Genom att anvĂ€nda LeptonX Theme fĂ„r du ocksĂ„ tillgĂ„ng till mĂ„nga fĂ€rdiga HTML-sidor. Dessa inkluderar mĂ„nga sidor som inloggningssida, blogg, FAQ, prenumerationslista, faktura, prissĂ€ttning och filhantering.", + "LeptonThemeForAdmin": "Lepton Theme för din adminpanel genom att", + "LeptonThemeForAdminDescription": "Lepton Theme Ă€r fortfarande tillgĂ€ngligt och kommer att underhĂ„llas. Om du vill byta till LeptonX Theme som Lepton Theme-anvĂ€ndare kan du se dokumentationen för att lĂ€ra dig hur du gör.", + "LeptonCompatibleWith": "Lepton Theme Ă€r kompatibelt med", + "BlackFridayDiscount": "Black Friday-rabatt", + "UpgradePaymentInfoSection_DeveloperPrice": "{0} för {1} ytterligare utvecklare", + "Upgrade": "Uppgradering", + "Renewal": "Förnyelse", + "UpgradePaymentInfoSection_LicensePrice": "{0} licens", + "UpgradePaymentInfoSection_LicenseRenewalPrice": "Förnyelse av licens", + "Total": "Totalt", + "SupportPolicyFaqTitle": "Vilken Ă€r er supportpolicy?", + "TotalDevelopers": "Totalt {0} utvecklare", + "CustomPurchaseExplanation": "SkrĂ€ddarsydd för dina specifika behov", + "WhereDidYouHearAboutUs": "Var har du hört talas om oss?", + "Twitter": "Twitter", + "Facebook": "Facebook", + "Youtube": "YouTube", + "Google": "Google", + "Github": "GitHub", + "Friend": " FrĂ„n en vĂ€n", + "Other": "Övriga", + "WhereDidYouHearAboutUs_explain": "Ange ...", + "DeletingMemberWarningMessage": "\"{0}\" kommer att tas bort frĂ„n listan över utvecklare. Om du vill kan du tilldela denna tomma plats till en annan utvecklare senare.", + "AdditionalInfo": "Om antalet platser för utvecklare överstiger dina krav kan du minska dem. Du kan skicka e-post till info@abp.io för att ta bort nĂ„gra av dina utvecklarplatser. Om du rensar bort oanvĂ€nda utvecklarplatser minskar kostnaden för licensförnyelse. Om du vill kan du Ă„terköpa ytterligare utvecklarplatser inom din aktiva licensperiod. Observera att eftersom det finns {0} utvecklare i det hĂ€r licenspaketet kan du inte minska detta antal.", + "LinkExpiredErrorMessage": "LĂ€nken du försöker komma Ă„t har gĂ„tt ut.", + "ExpirationDate": "UtgĂ„ngsdatum", + "SpringCampaignDiscount": "Rabatt pĂ„ vĂ„rkampanjen", + "WhyUseAbpIoPlatform": "Varför ska jag anvĂ€nda ABP Platform istĂ€llet för att skapa en ny lösning frĂ„n grunden?", + "WhyUseAbpIoPlatformFaqExplanation": "Se den sidan för en detaljerad förklaring av varför anvĂ€ndning av ABP Platform har en betydande fördel jĂ€mfört med att göra allt sjĂ€lv.", + "EulaPageTitle": "Licensavtal för slutanvĂ€ndare (EULA)", + "PrivacyPolicyPageTitle": "Integritetspolicy - Cookiepolicy", + "TermsConditionsPageTitle": "Villkor och anvisningar", + "TrainingsPageTitle": "Utbildningspaket", + "ModulesPageTitle": "ABP-moduler", + "ModulesPageDescription": "Utöka och anpassa din applikation med ABP:s modulĂ€ra arkitektur, som ger flexibilitet och skalbarhet.", + "Volo.AbpIo.Commercial:040001": "API-Ă„tkomstnyckeln Ă€r felaktig.", + "GetLepton": "Skaffa Lepton nu", + "MyOrganizations_Detail_LicenseStartDate": "Startdatum", + "MyOrganizations_Detail_LicenseExpiryDate": "UtgĂ„ngsdatum", + "BlazoriseSupport": "Hur fĂ„r jag Blazorise-licensnyckeln och support frĂ„n Blazorise-teamet?", + "BlazoriseSupportExplanation": "Följ stegen nedan för att fĂ„ support frĂ„n Blazorise-teamet och fĂ„ din Blazorise-licensnyckel:", + "BlazoriseSupportExplanation1": "Registrera dig för ett nytt konto pĂ„ blazorise.com/support/register med samma e-postadress som ditt abp.io-konto. LĂ€mna posten \"Licensnyckel\" tom. Det mĂ„ste vara samma e-postadress som ditt e-postkonto pĂ„ abp.io.", + "BlazoriseSupportExplanation2": "Verifiera din e-postadress genom att kolla din e-postlĂ„da. Kontrollera din skrĂ€ppostlĂ„da om du inte ser ett e-postmeddelande i din inkorg!", + "BlazoriseSupportExplanation3": "Logga in pĂ„ Blazorise supportwebbplats pĂ„ blazorise.com/support/login.", + "BlazoriseSupportExplanation4": "Om du har en aktiv ABP Commercial License kommer du ocksĂ„ att ha en Blazorise PRO-licens. Du kan fĂ„ din Blazorise-licensnyckel pĂ„ blazorise.com/support/user/manage/license.", + "BlazoriseSupportExplanation5": "Du kan stĂ€lla dina frĂ„gor pĂ„ supportwebbplatsen och generera en produkttoken för din applikation.", + "AbpLiveTrainingPackages": "ABP Live utbildningspaket", + "Releases": "UtgĂ„vor", + "ReleasesDescription": "Den hĂ€r sidan innehĂ„ller detaljerad information om varje release. Du kan se alla stĂ€ngda pull requests för en specifik release. För övergripande milstolpsutvecklingar kan du kolla in sidan med kortfattade releaseanteckningar.", + "ReleaseDate": "Utgivningsdatum", + "Labels": "Etiketter", + "PreRelease": "Förhandsrelease", + "AllTypes": "Alla typer", + "Enhancement": "FörbĂ€ttring", + "Bug": "Insekt", + "Feature": "Funktion", + "AllUIs": "Alla anvĂ€ndargrĂ€nssnitt", + "MVC": "MVC", + "BlazorServer": "Blazor Server", + "MAUI": "MAUI", + "HowItWorks_Page_Title": "Hur fungerar det?", + "HowItWorks_Page_Description": "FörstĂ„ hur ABP Framework fungerar med detaljerad dokumentation, inklusive guider och bĂ€sta praxis.", + "HowItWorks_Description1": "ABP utökar .NET-plattformen. SĂ„ allt du kan göra med en vanlig .NET-lösning Ă€r redan möjligt med ABP. Det gör det enkelt att komma igĂ„ng med en lĂ„g inlĂ€rningskurva.", + "HowItWorks_Description2": "NĂ€r du vĂ€l har börjat lĂ€ra dig och anvĂ€nda ABP-funktionerna kommer det att bli mycket roligare Ă€n nĂ„gonsin att utveckla din programvara.", + "HowItWorks_Description3": "Den hĂ€r sidan förklarar i princip hur du anvĂ€nder ABP Platform som .NET-utvecklare.", + "CreateANewSolution_Description1": "Allt börjar med att skapa en ny ABP-integrerad .NET-lösning.", + "StartWithStartupTemplates": "Starta en av de förbyggda mallarna för startup-lösningar", + "SimpleMonolithApplicationTemplate": "Enkel mall för monolitisk applikation", + "LayeredApplicationTemplate": "ModulĂ€r monolitisk applikationsmall", + "MicroserviceSolutionTemplate": "Mall för mikroservicelösning", + "CreateEmptySolutionAndUseAbp": "Eller skapa en ny tom .NET-lösning och installera ABP NuGet & NPM packages sjĂ€lv.", + "CreatingSolutionWithMultipleOptions": "Det finns flera alternativ för anvĂ€ndargrĂ€nssnitt och databas nĂ€r du skapar en ny lösning.", + "UIFrameworkOptions": "Alternativ för anvĂ€ndargrĂ€nssnitt", + "DotnetSolutionWithoutDependency": "Nu har du en vanlig .NET-lösning i din lokala dator som inte Ă€r beroende av nĂ„gon molnplattform eller extern tjĂ€nst.", + "CheckTheDocumentForDetails": "Du kan kontrollera {1} dokumentet för detaljer.", + "UIAndDatabaseIndependent": "ABP kan fungera med alla anvĂ€ndargrĂ€nssnitt och alla databasleverantörer som stöds av .NET.\n Dessa anvĂ€ndargrĂ€nssnitt och databasleverantörer Ă€r dock förintegrerade och vĂ€ldokumenterade.", + "InstallAbpModules": "Installera ABP-moduler", + "DevelopYourSolution": "Utveckla din lösning", + "DeployAnywhere": "Distribuera var som helst", + "InstallAbpModule_Description1": "ABP Ă€r ett modulĂ€rt ramverk för applikationsutveckling. Mallarna för startup-lösningar levereras redan med de viktigaste modulerna installerade.\n Men det finns fler applikationsmoduler som du kanske vill anvĂ€nda i din lösning.", + "InstallAbpModule_Description2": "Varje modul bestĂ„r av ett fĂ„tal NuGet- och NPM-paket och har ett installationsdokument. ABP Studio gör det mesta av arbetet automatiskt, sedan konfigurerar eller finjusterar du modulen manuellt baserat pĂ„ dess dokumentation.", + "DevelopYourSolution_Description1": "ABP:s infrastruktur gör att du kan fokusera pĂ„ din egen affĂ€rskod genom att automatisera det repetitiva arbetet och tillhandahĂ„lla förbyggd infrastruktur och applikationsfunktioner.", + "DevelopYourSolution_Description2": "I följande kodblock kan du se hur ABP sömlöst integreras i din kod och automatiserar de repetitiva uppgifterna Ă„t dig.", + "DevelopYourSolution_Description3": "Även i detta kortkodsblock gör ABP en hel del saker Ă„t dig.", + "DevelopYourSolution_Description4": "Det ger basklasser för att tillĂ€mpa konventioner, som\n dependency injection. Generiska\n repository tjĂ€nster ger ett bekvĂ€mt sĂ€tt att\n sĂ€tt att interagera med databasen. Deklarativ\n auktorisering arbetar med ett finjusterat behörighetssystem.", + "DevelopYourSolution_Description5": "ABP automatiserar helt och hĂ„llet\n arbetsenhet (för databasanslutning och transaktionshantering),\n undantagshantering,\n validering\n och auditloggning. Det ger mĂ„nga fler byggstenar för att förenkla dina dagliga utvecklingsuppgifter och fokusera pĂ„ din egen kod medan du skapar produktionsklara\n applikationer.", + "DevelopYourSolution_Description6": "Du kan förestĂ€lla dig hur lĂ„ngt och komplicerat det kodblocket kan bli om du skulle göra allt manuellt.", + "SuiteCrudGenerationInFewSeconds": "Förutom att handkoda din lösning kan du skapa fullt fungerande avancerade CRUD-sidor pĂ„ nĂ„gra minuter med hjĂ€lp av ABP Suite-verktyget. Det genererar koden till din lösning, sĂ„ att du kan finjustera den utifrĂ„n dina anpassade krav.", + "DeployAnywhere_Description1": "I slutĂ€ndan har du en ren .NET-lösning. Du kan distribuera din lösning till din egen server, till en molnplattform, till Kubernetes eller var du vill. Du kan distribuera till sĂ„ mĂ„nga servrar som du vill. ABP Ă€r ett agnostiskt verktyg för driftsĂ€ttningsmiljöer.", + "ExpertiseAbpFramework": "Expertis ABP", + "ExpertiseAbpFramework_Description1": "Vill du gĂ„ lĂ€ngre Ă€n grunderna och fĂ„ expertis med ABP Platform?", + "FreeDownload": "Fri nedladdning", + "HavingTrouble": "Har du problem?", + "HavingTrouble_Description1": "Har du problem med att utveckla din lösning? Vi finns hĂ€r för dig! AnvĂ€nd ABP:s supportplattform\n eller skicka ett e-postmeddelande för att fĂ„ hjĂ€lp direkt frĂ„n Core ABP-teammedlemmarna.", + "WeAreHereToHelp_Description1": "Du kan blĂ€ddra bland vĂ„ra hjĂ€lpĂ€mnen eller söka i vanliga frĂ„gor,\n eller sĂ„ kan du stĂ€lla en frĂ„ga till oss genom att anvĂ€nda kontaktformulĂ€ret.", + "OtherModules": "Övriga moduler", + "OtherModules_Description1": "Konto, Audit Logging, Chatt, CMS Kit, Filhantering, FormulĂ€r, GDPR, SprĂ„khantering och mer...", + "HowItWorks_DatabaseProviderOptions": "Alternativ för databasleverantör", + "SeeFAQ": "Se vanliga frĂ„gor", + "ReleaseLogs": "Release Loggar", + "ReleaseLogs_Tag": "{0} Loggar för frislĂ€ppande", + "ReleaseLogs_Pr": "Pull Request #{0} - {1}", + "NoLabels": "Inga etiketter", + "DoesTheSubscriptionRenewAutomatically": "Förnyas abonnemanget automatiskt?", + "DoesTheSubscriptionRenewAutomaticallyExplanation": "ABP-plattformen har inte en faktureringsmodell för automatisk förnyelse. DĂ€rför kommer din prenumeration inte att förnyas automatiskt i slutet av din licensperiod. Om du vill fortsĂ€tta att ha fördelarna med ABP-plattformen mĂ„ste du förnya den manuellt pĂ„ sidan för organisationshantering. Om du har flera organisationer klickar du pĂ„ knappen \"Hantera\" pĂ„ din organisation som löper ut och klickar sedan pĂ„ knappen \"FörlĂ€ng nu\" för att förnya din licens. Du kanske ocksĂ„ vill ta en titt pĂ„ avsnittet Vad hĂ€nder nĂ€r min licens gĂ„r ut?.", + "ExtraQuestionCreditsFaqTitle": "Kan jag köpa extra poĂ€ng för supportfrĂ„gor?", + "ExtraQuestionCreditsFaqExplanation": "Ja, det kan du göra. För att köpa extra frĂ„gepoĂ€ng, skicka ett e-postmeddelande till info@abp.io med din organisations namn. HĂ€r Ă€r prislistan för de extra frĂ„gekrediterna:
  • 50 frĂ„gor paket $999
  • 25 frĂ„gor paket $625
  • 15 frĂ„gor paket $450
", + "AlreadyBetaTester": "Du har redan gĂ„tt med i betatestarprogrammet.", + "AbpStudio": "ABP Studio", + "AbpStudio_Description": "ABP Studio Ă€r fortfarande under utveckling. Du kan fylla i formulĂ€ret nedan för att bli en av de första anvĂ€ndarna.", + "AbpStudio_Description1": "ABP Studio Ă€r en plattformsoberoende skrivbordsapplikation för ABP-utvecklare.", + "AbpStudio_Description2": "Det Ă€r vĂ€l integrerat i ABP-ramverket och syftar till att tillhandahĂ„lla en bekvĂ€m utvecklingsmiljö för dig genom att automatisera saker, ge insikter om din lösning, vilket gör det mycket enklare att utveckla, köra och distribuera dina lösningar.", + "AbpStudio_ComingSoon": "Kommer snart Planerat datum för betaversion: Q4 av 2023.", + "AbpStudio_PlannedPreviewDate": "Planerat utgivningsdatum för förhandsvisning: Q4 Ă„r 2023.", + "BetaRequest": "Beta förfrĂ„gan", + "CreateNewSolutions": "Skapa nya lösningar", + "CreateNewSolutions_Description1": "Du kan enkelt skapa allt frĂ„n enkla applikationer till modulĂ€ra monolit- eller mikroservicelösningar med mĂ„nga alternativ. Du fĂ„r en fullstĂ€ndig produktionsfĂ€rdig basprogramvarulösning för ditt företag.", + "ArchitectYourSolutions": "Arkitekt för dina lösningar", + "ArchitectYourSolutions_Description1": "Bygg enklare monolitiskt modulĂ€ra och mikrotjĂ€nstbaserade lösningsstrukturer genom att skapa moduler eller tjĂ€nster och upprĂ€tta relationer mellan dem. Du kan ocksĂ„ installera eller avinstallera förbyggda applikationsmoduler.", + "ExploreYourSolution": "Utforska din lösning", + "ExploreYourSolution_Description1": "ABP Studio visar en vy pĂ„ hög nivĂ„ av komponenterna i din lösning och de moduler som din lösning Ă€r beroende av. Du kan utforska entiteter, tjĂ€nster, HTTP API:er och mycket mer utan att behöva öppna din kodbas.", + "RunMultiApplicationOrMicroserviceSolutionsInABreeze": "Kör multiapplikations- eller microservice-lösningar pĂ„ ett kick", + "RunMultiApplicationOrMicroserviceSolutionsInABreeze_Description1": "Kör en, flera eller alla tjĂ€nster med ett enda klick. PĂ„ sĂ„ sĂ€tt Ă€r det mycket enkelt att stoppa en tjĂ€nst, köra den i Visual Studio för att testa eller debugga.", + "RunMultiApplicationOrMicroserviceSolutionsInABreeze_Description2": "Se en lista över tjĂ€nster, visa HTTP-begĂ€ran i realtid och antal undantag för varje tjĂ€nst.", + "RunMultiApplicationOrMicroserviceSolutionsInABreeze_Description3": "Se alla detaljer om alla HTTP-begĂ€randen som kommer till en tjĂ€nst.", + "RunMultiApplicationOrMicroserviceSolutionsInABreeze_Description4": "Utforska undantagsdetaljer i realtid i alla tjĂ€nster, filtrera och sök enkelt.", + "RunMultiApplicationOrMicroserviceSolutionsInABreeze_Description5": "Visa applikationsloggar, filtrera efter loggnivĂ„ eller sök efter text.", + "RunMultiApplicationOrMicroserviceSolutionsInABreeze_Description6": "BlĂ€ddra genom anvĂ€ndargrĂ€nssnittet i din applikation utan att lĂ€mna solution runner.", + "IntegrateToYourKubernetesCluster": "Integrera med ditt Kubernetes-kluster", + "IntegrateToYourKubernetesCluster_Description1": "Koppla din lokala utvecklingsmiljö till ett lokalt eller avlĂ€gset Kubernetes-kluster, dĂ€r klustret redan kör din mikrotjĂ€nstlösning.", + "IntegrateToYourKubernetesCluster_Description2": "FĂ„ Ă„tkomst till alla tjĂ€nster i Kubernetes med deras tjĂ€nstenamn som DNS, precis som om de körs pĂ„ din lokala dator.", + "IntegrateToYourKubernetesCluster_Description3": "Interceptera vilken tjĂ€nst som helst i det klustret, sĂ„ att all trafik till den intercepterade tjĂ€nsten automatiskt omdirigeras till din tjĂ€nst som körs i din lokala maskin. NĂ€r din tjĂ€nst behöver anvĂ€nda nĂ„gon tjĂ€nst i Kubernetes omdirigeras trafiken tillbaka till klustret, precis som om din lokala tjĂ€nst körs inuti Kubernetes.", + "GetInformed": "Bli informerad", + "Studio_GetInformed_Description1": "LĂ€mna din kontaktinformation för att fĂ„ information och pröva först nĂ€r ABP Studio har lanserats.", + "Studio_GetInformed_Description2": "Planerat utgivningsdatum för förhandsvisning: Q3 Ă„r 2023.", + "ThankYou!": "Tack sĂ„ mycket!", + "SendBetaRequest": "Skicka Beta förfrĂ„gan", + "YouJoinedTheBetaTesterProgram": "Du har gĂ„tt med i betatestarprogrammet för ABP Studio.", + "PricingExplanation2": "30 dagars pengarna tillbaka-garanti - LĂ€s mer", + "MoneyBackGuaranteeText": "* 30-dagars pengarna-tillbaka-garanti pĂ„ alla licenser! 100% Ă„terbetalning pĂ„ Team-, 60% Ă„terbetalning pĂ„ Business- och Enterprise-licenser inom 30 dagar.", + "MobileApplicationStartupTemplates": "Mallar för uppstart av mobilapplikationer", + "MobileApplicationStartupTemplates_Description1": "Integrerade startmallar för mobilapplikationer för dina ABP-projekt.", + "CreatePowerfulLineOfBusinessApplicationsUsingABPMobileStartupTemplates": "Bygg kraftfulla applikationer för olika branscher med hjĂ€lp av ABP Mobile Startup Templates", + "CreatePowerfulLineOfBusinessApplicationsUsingABPMobileStartupTemplates_Description1": "ABP tillhandahĂ„ller tvĂ„ startmallar för mobilapplikationer som implementerats med React Native och .NET MAUI. NĂ€r du skapar din nya ABP-baserade lösning kommer du ocksĂ„ att ha grundlĂ€ggande startapplikationer som Ă€r anslutna till dina backend-API:er.", + "CreatePowerfulLineOfBusinessApplicationsUsingABPMobileStartupTemplates_Description2": "Applikationen har en förbyggd autentiseringstokencykel, stöd för flera sprĂ„k, stöd för flera behörigheter, inloggning, glömt lösenord, profilhantering och en anvĂ€ndarhanteringssida. Du kan lĂ€gga till din egen affĂ€rslogik och anpassa den utifrĂ„n dina krav.", + "TwoFrameworkOptions": "TvĂ„ alternativ för ramverk", + "TwoFrameworkOptions_Description": "ABP tillhandahĂ„ller bĂ„de React Native och .NET MAUI mobila startup-mallar. PĂ„ sĂ„ sĂ€tt kan du vĂ€lja den som bĂ€st passar dina behov. BĂ„da apparna Ă„teranvĂ€nder kod i den högsta graden mellan iOS- och Android-plattformarna.", + "PreIntegratedToYourBackend": "Förintegrerad till din backend", + "PreIntegratedToYourBackend_Description": "ABP Mobile-applikationer Ă€r förintegrerade med dina backend-API:er. Den fĂ„r en giltig autentiseringstoken frĂ„n servern och gör autentiserade förfrĂ„gningar.", + "MultiLanguage": "FlersprĂ„kig", + "MultiLanguage_Description": "Det stöder redan mer Ă€n 10 sprĂ„k ur lĂ„dan. Du kan ocksĂ„ lĂ€gga till ytterligare sprĂ„k.", + "Arabic": "Arabiska", + "Czech": "Tjeckien", + "English": "Engelska", + "Hungarian": "Ungerska", + "Finnish": "Finska", + "French": "Franska", + "Hindi": "Hindi", + "Portuguese": "Portugisiska", + "Italian": "Italienska", + "Russian": "Ryska", + "Slovak": "Slovakien", + "Turkish": "Turkiska", + "EngageAndRetainYourCustomersWithABPMobileApps": "Engagera och behĂ„ll dina kunder med ABP:s mobilappar", + "EngageAndRetainYourCustomersWithABPMobileApps_Description1": "Dina kunder vill kunna hantera sina produkter och prenumerationer var som helst och nĂ€r som helst. Det krĂ€ver att organisationer skapar mobilappar som gör det möjligt för kunderna att uppfylla sina önskemĂ„l snabbt och smidigt.", + "EngageAndRetainYourCustomersWithABPMobileApps_Description2": "Med ABP Mobile apps kan du skapa högkvalitativa native mobilappar för Android och iOS... med en enda kodbas och utan att kompromissa med sĂ€kerhet, kvalitet eller skalbarhet.", + "OneCodeBaseMultipleDevices": "En kodbas Flera enheter", + "OneCodeBaseMultipleDevices_Description": "ABP:s mobilapplikationer Ă€r plattformsoberoende. De Ă€r redo att installeras och köras pĂ„ iOS- och Android-enheter, och de anpassar sig till olika formfaktorer med hjĂ€lp av en enda kodbas. Utvecklare behöver bara skapa anvĂ€ndargrĂ€nssnittet och front-end-koden en gĂ„ng, det finns inget behov av att anpassa koden för varje enhet du vill stödja.", + "ComesWithTheSourceCode": "Levereras med kĂ€llkoden", + "ComesWithTheSourceCode_Description": "Mobilapparna Ă€r försedda med kĂ€llkod. Anpassa enkelt UX/UI för dina appar för att uppfylla riktlinjerna för varumĂ€rkesprofilering.", + "Purchase_OneYearPrice": "1 Ă„r Pris", + "Purchase_DeveloperSeatCount": "Antal platser för utvecklare", + "Purchase_DevelopersAlreadyIncluded": "{0} utvecklare redan inkluderade", + "1Year": "1 Ă„r", + "{0}Years": "{0} Ă„r", + "1YearLicense": "1 Ă„rs licens", + "{0}YearsLicense": "{0} År Licens", + "1AdditionalDeveloper": "1 ytterligare utvecklare", + "{0}AdditionalDevelopers": "{0} Ytterligare utvecklare", + "Discount": "Rabatt ({0}%)", + "TrainingPack": "Utbildningspaket", + "TrainingPackDiscount": "Rabatt pĂ„ utbildningspaket", + "Purchase_OnboardingTraining_Description": "Denna liveutbildning Ă€r giltig för en klass med 8 elever och denna rabatt Ă€r endast giltig nĂ€r den köps med den nya licensen. LĂ€s mer ", + "Purchase_Save": "{0}% Spara {1}", + "RemoveBasket": "Ta bort frĂ„n korgen", + "WhyABPIOPlatform?": "Varför ABP Platform?", + "DocumentAim": "Detta dokument syftar till att besvara den stora frĂ„gan:", + "DocumentAim_Description": "\"Varför ska du anvĂ€nda ABP Platform istĂ€llet för att skapa en ny lösning frĂ„n grunden?\"", + "DocumentAim_Description2": "Dokumentet presenterar utmaningarna med att bygga en modern mjukvarulösning och förklarar hur ABP hanterar dessa utmaningar.", + "CreatingANewSolution": "Skapa en ny lösning", + "CreatingANewSolution_Description": "NĂ€r du ska starta en ny lösning finns det mĂ„nga frĂ„gor du mĂ„ste stĂ€lla dig sjĂ€lv, och du bör lĂ€gga ner mycket tid innan du börjar skriva din allra första affĂ€rskod.", + "CreatingAnEmptySolution": "Skapa en tom lösning", + "THEPROBLEM": "PROBLEMET", + "CreatingAnEmptySolution_THEPROBLEM_Description": "Även att skapa en nĂ€stan tom lösning Ă€r en utmaning;", + "CreatingAnEmptySolution_THEPROBLEM_Description2": "Hur organiserar du din kodbas mellan olika projekt?", + "CreatingAnEmptySolution_THEPROBLEM_Description3": "Vilka Ă€r lagren och hur samverkar de?", + "CreatingAnEmptySolution_THEPROBLEM_Description4": "Hur integrerar ni med tredjepartsbibliotek?", + "CreatingAnEmptySolution_THEPROBLEM_Description5": "Hur stĂ€ller man in automatiserade tester?", + "ABPSOLUTION": "ABP-LÖSNING", + "CreatingAnEmptySolution_ABPSOLUTION_Description": "ABP tillhandahĂ„ller en vĂ€larkitekterad, skiktad och produktionsklar startup-lösning baserad pĂ„ Domain Driven Design-principerna. Lösningen innehĂ„ller ocksĂ„ en förkonfigurerad enhet och integration test -projekt för varje lager.", + "CommonLibraries": "Gemensamma bibliotek", + "CommonLibraries_THEPROBLEM_Description": "Vilka bibliotek bör du anvĂ€nda för att implementera gemensamma krav? Ekosystemet för programvaruutveckling Ă€r mycket dynamiskt, vilket gör det svĂ„rt att hĂ„lla jĂ€mna steg med de senaste verktygen, biblioteken, trenderna och metoderna.", + "CommonLibraries_ABPSOLUTION_Description": "ABP förintegrerar populĂ€ra, mogna och uppdaterade bibliotek i lösningen. Du behöver inte lĂ€gga tid pĂ„ att integrera dem eller fĂ„ dem att kommunicera med varandra. De fungerar som de ska direkt frĂ„n start.", + "UITheme&Layout": "UI Tema & Layout", + "UITheme&Layout_THEPROBLEM_Description": "NĂ€r man tar itu med anvĂ€ndargrĂ€nssnittet uppstĂ„r en rad olika utmaningar. Det handlar bland annat om att lĂ€gga grunden för ett responsivt, modernt och anpassningsbart UI-kit med ett konsekvent utseende och en mĂ€ngd funktioner som navigeringsmenyer, rubriker, verktygsfĂ€lt, sidfötter, widgetar med mera.", + "UITheme&Layout_THEPROBLEM_Description2": "Även om du vĂ€ljer ett fördesignat tema kan det ta flera dagars utveckling att integrera det sömlöst i ditt projekt. Ett ytterligare hinder ligger i att uppgradera sĂ„dana teman. Ofta blir temats HTML/CSS-struktur sammanflĂ€tad med din UI-kod, vilket gör framtida temaförĂ€ndringar eller uppgraderingar till komplicerade uppgifter. Denna sammanvĂ€vning av kod och design komplicerar flexibiliteten att göra justeringar lĂ€ngs linjen.", + "UITheme&Layout_ABPSOLUTION_Description": "ABP erbjuder ett distinkt temasystem som frigör din UI-kod frĂ„n temabegrĂ€nsningar. Teman existerar isolerat, paketerade som NuGet- eller NPM-paket, vilket gör installation eller uppgradering av teman till en frĂ„ga om minuter. Även om du behĂ„ller möjligheten att utveckla ditt eget tema eller integrera ett befintligt, presenterar ABP en samling polerade och moderna teman.", + "UITheme&Layout_ABPSOLUTION_Description2": "Dessutom finns det leverantörer av UI-komponenter som Telerik och DevExpress. Dessa leverantörer tillhandahĂ„ller dock frĂ€mst enskilda komponenter, vilket innebĂ€r att det Ă€r upp till dig att skapa ditt layoutsystem. NĂ€r du arbetar inom ABP-baserade projekt kan du sömlöst införliva dessa bibliotek, pĂ„ samma sĂ€tt som du skulle göra i alla andra projekt.", + "TestInfrastructure_THEPROBLEM_Description": "Att etablera en robust testmiljö Ă€r en tidskrĂ€vande uppgift. Det handlar om att skapa dedikerade testprojekt inom din lösning, noggrant vĂ€lja ut de verktyg som behövs, skapa mocks för tjĂ€nster och databaser, skapa viktiga basklasser och verktygstjĂ€nster för att minimera redundant kod i testerna och ta itu med olika relaterade uppgifter.", + "TestInfrastructure_ABPSOLUTION_Description": "ABP Startup Templates levereras fĂ€rdigutrustade med konfigurerade testprojekt, vilket effektiviserar processen för dig. Det innebĂ€r att du redan frĂ„n dag ett kan börja skriva din första enhets- eller integrationstestkod utan dröjsmĂ„l.", + "CodingStandards&Training": "Kodningsstandarder och utbildning", + "CodingStandards&Training_THEPROBLEM_Description": "NĂ€r du har konfigurerat lösningen för utveckling mĂ„ste du vanligtvis lĂ€ra utvecklarna hur systemet fungerar och hur man bygger det med hjĂ€lp av samma överenskomna metoder. Även om du ger dem utbildning kan det vara svĂ„rt att hĂ„lla dokumentationen uppdaterad. Med tiden kanske varje utvecklare skriver kod pĂ„ sitt eget sĂ€tt, vilket leder till att reglerna för att skriva kod skiljer sig frĂ„n varandra.", + "CodingStandards&Training_ABPSOLUTION_Description": "ABP-lösningen Ă€r redan snyggt organiserad och har tydliga förklaringar. Steg-för-steg-handledningar och guider visar exakt hur du ska arbeta med ett ABP-projekt.", + "KeepingYourSolutionUpToDate": "HĂ„ll din lösning uppdaterad", + "KeepingYourSolutionUpToDate_THEPROBLEM_Description": "NĂ€r du har pĂ„börjat din utveckling mĂ„ste du hĂ„lla reda pĂ„ de nya versionerna av de bibliotek du anvĂ€nder för uppgraderingar och korrigeringar.", + "KeepingYourSolutionUpToDate_ABPSOLUTION_Description": "Vi uppdaterar regelbundet alla paket till de senaste versionerna och testar dem före den stabila utgĂ„van. NĂ€r du uppdaterar ditt ABP-baserade projekt uppgraderas alla dess beroenden till den senaste tekniken.", + "KeepingYourSolutionUpToDate_ABPSOLUTION_Description2": "Abp update CLI-kommandot hittar och uppgraderar automatiskt alla ABP-beroende NuGet- och NPM-paket i en lösning. Med ABP Ă€r det enklare att hĂ„lla sig till de senaste versionerna.", + "DRY": "Upprepa inte dig sjĂ€lv!", + "DRY_Description": "Att skapa en baslösning tar lĂ„ng tid och krĂ€ver god erfarenhet av arkitektur. Men detta Ă€r bara början! NĂ€r du börjar utveckla kommer du sannolikt att behöva skriva massor av repetitiv kod; det skulle vara fantastiskt om allt detta kunde hanteras automatiskt.", + "DRY_Description2": "ABP automatiserar och förenklar upprepningskoden sĂ„ mycket som möjligt genom att följa principen om konvention framför konfiguration. Det begrĂ€nsar dig dock inte nĂ€r du behöver vĂ€xla till manuell vĂ€xel. Kontrollen ligger alltid i dina hĂ€nder.", + "Authentication": "Autentisering", + "Authentication_THEPROBLEM_Description": "Single Sign On, Active Directory / LDAP-integration, OpenIddict-integration, sociala inloggningar, tvĂ„faktorsautentisering, glömt / Ă„terstĂ€llt lösenord, e-postaktivering, ny anvĂ€ndarregistrering, kontroll av lösenordskomplexitet, lĂ„sning av konto vid misslyckade försök, visning av misslyckade inloggningsförsök ... etc. Vi vet att alla dessa generiska krav Ă€r bekanta för dig. Du Ă€r inte ensam!", + "Authentication_ABPSOLUTION_Description": "ABP tillhandahĂ„ller alla dessa standardgrejer förimplementerade för dig som en Ă„teranvĂ€ndbar kontomodul. Du aktiverar och konfigurerar bara det du behöver.", + "CrossCuttingConcerns_THEPROBLEM_Description": "Cross-Cutting Concerns Ă€r den grundlĂ€ggande upprepningslogik som bör implementeras för varje anvĂ€ndningsfall. NĂ„gra exempel;", + "CrossCuttingConcerns_THEPROBLEM_Description2": "Starta transaktioner, genomföra vid framgĂ„ng och rulla tillbaka vid fel.", + "CrossCuttingConcerns_THEPROBLEM_Description3": "Hantera och rapportera undantag, returnera ett korrekt felsvar till klienterna och hantera felfall pĂ„ klientsidan.", + "CrossCuttingConcerns_THEPROBLEM_Description4": "Implementera auktorisering och validering, returnera korrekta svar och hantera dessa pĂ„ klientsidan.", + "CrossCuttingConcerns_ABPSOLUTION_Description": "ABP automatiserar eller förenklar alla vanliga övergripande problem. Du skriver bara kod som Ă€r viktig för din verksamhet, och ABP hanterar resten genom konventioner.", + "ArchitecturalInfrastructure": "Arkitektonisk infrastruktur", + "ArchitecturalInfrastructure_THEPROBLEM_Description": "Du behöver vanligtvis bygga infrastruktur för att implementera din arkitektur pĂ„ rĂ€tt sĂ€tt. Till exempel implementerar du i allmĂ€nhet Repository-mönstret. Du definierar nĂ„gra basklasser för att förenkla och standardisera skapandet av entiteter, tjĂ€nster, controllers och andra objekt.", + "ArchitecturalInfrastructure_ABPSOLUTION_Description": "ABP tillhandahĂ„ller allt detta och mer dĂ€rtill direkt frĂ„n start. Det Ă€r moget och vĂ€ldokumenterat.", + "EnterpriseApplicationRequirements": "Krav pĂ„ företagsapplikationer", + "EnterpriseApplicationRequirements_THEPROBLEM_Description": "Det finns mĂ„nga krav som du upprepade gĂ„nger mĂ„ste implementera i varje affĂ€rsapplikation;", + "EnterpriseApplicationRequirements_THEPROBLEM_Description2": "Detaljerat behörighetssystem och hantering av behörigheter i anvĂ€ndargrĂ€nssnittet baserat pĂ„ roller och anvĂ€ndare.", + "EnterpriseApplicationRequirements_THEPROBLEM_Description3": "Skriva granskningsloggar och entitetshistorik för att spĂ„ra nĂ€r en anvĂ€ndare Ă€ndrar en databaspost.", + "EnterpriseApplicationRequirements_THEPROBLEM_Description4": "Gör dina enheter mjukt raderade, sĂ„ att de markeras som raderade istĂ€llet för att fysiskt raderas frĂ„n databasen och automatiskt filtrera bort raderade enheter i dina frĂ„gor.", + "EnterpriseApplicationRequirements_THEPROBLEM_Description5": "Skapa abstraktioner och omslag för att konsumera dina backend-API:er frĂ„n frontend-koden.", + "EnterpriseApplicationRequirements_THEPROBLEM_Description6": "UppstĂ€llning i kö och utförande av bakgrundsjobb.", + "EnterpriseApplicationRequirements_THEPROBLEM_Description7": "Hantering av flera tidszoner i ett globalt system.", + "EnterpriseApplicationRequirements_THEPROBLEM_Description8": "Delning av validering, lokalisering och auktoriseringslogik mellan server och klient.", + "EnterpriseApplicationRequirements_ABPSOLUTION_Description": "ABP tillhandahĂ„ller en infrastruktur för att enkelt implementera sĂ„dana krav. Återigen behöver du inte spendera din vĂ€rdefulla tid pĂ„ att implementera alla dessa om och om igen.", + "GeneratingInitialCode&Tooling": "Generering av initialkod och verktyg", + "GeneratingInitialCode&Tooling_THEPROBLEM_Description": "Du kommer att bygga mĂ„nga liknande sidor i en typisk webbapplikation. De flesta av dem kommer att utföra liknande CRUD-operationer. Det Ă€r mycket trĂ„kigt och Ă€ven felbenĂ€get att upprepade gĂ„nger skapa sĂ„dana sidor.", + "GeneratingInitialCode&Tooling_ABPSOLUTION_Description": "ABP Suite kan generera en full-stack CRUD-sida för dina enheter pĂ„ nĂ„gra sekunder. Den genererade koden Ă€r skiktad och ren. Alla standardkrav för validering och auktorisering Ă€r implementerade. Dessutom genereras enhetstestklasser. NĂ€r du vĂ€l har fĂ„tt en helt fungerande sida kan du Ă€ndra den enligt dina affĂ€rsbehov.", + "IntegratingTo3rdPartyLibrariesAndSystems": "Integrering med bibliotek och system frĂ„n tredje part", + "IntegratingTo3rdPartyLibrariesAndSystems_THEPROBLEM_Description": "De flesta bibliotek Ă€r utformade pĂ„ lĂ„g nivĂ„ och du mĂ„ste vanligtvis göra en del arbete för att integrera dem pĂ„ rĂ€tt sĂ€tt utan att upprepa samma integrations- och konfigurationskod överallt i din lösning. Anta till exempel att du mĂ„ste anvĂ€nda RabbitMQ för att implementera din distribuerade hĂ€ndelsebuss. Allt du vill göra Ă€r att skicka ett meddelande till en kö och hantera de inkommande meddelandena. Men du mĂ„ste förstĂ„ meddelandemönster, köer och utbytesdetaljer. För att skriva effektiv kod mĂ„ste du skapa en pool för att hantera anslutningar, klienter och kanaler. Du mĂ„ste ocksĂ„ hantera undantag, ACK-meddelanden, Ă„teranslutning till RabbitMQ vid misslyckanden och mer.", + "IntegratingTo3rdPartyLibrariesAndSystems_ABPSOLUTION_Description": "Till exempel abstraherar ABP:s RabbitMQ Distributed Event Bus-integration alla dessa detaljer. Du skickar och tar emot meddelanden utan krĂ„ngel. Behöver du skriva kod pĂ„ lĂ„g nivĂ„? Inga problem, det kan du alltid göra. ABP begrĂ€nsar dig inte nĂ€r du behöver anvĂ€nda lĂ„gnivĂ„funktioner i det bibliotek du anvĂ€nder.", + "WhyNotBuildYourOwnFramework?": "Varför inte bygga ditt eget ramverk?", + "WhyNotBuildYourOwnFramework_THEPROBLEM_Description": "All infrastruktur, Ă€ven pĂ„ det enklaste sĂ€ttet, tar mycket tid att bygga, underhĂ„lla och dokumentera. Den blir större med tiden och det blir svĂ„rt att underhĂ„lla den i din lösning. Att separera dessa i ett Ă„teranvĂ€ndbart projekt Ă€r utgĂ„ngspunkten för att bygga ditt eget interna ramverk.", + "WhyNotBuildYourOwnFramework_THEPROBLEM_Description2": "Att bygga, dokumentera, utbilda och underhĂ„lla ett internt ramverk Ă€r verkligen svĂ„rt. Om du inte har ett erfaret, dedikerat ramverksteam blir ditt interna ramverk snabbt en odokumenterad Ă€ldre kod som ingen lĂ€ngre kan förstĂ„ och underhĂ„lla. Å andra sidan utvecklas dessa ramverk i allmĂ€nhet av en eller tvĂ„ utvecklare i teamet. Och dessa medarbetare hĂ„ller pĂ„ att bli en kunskapssilo. Det Ă€r bra för dem men dĂ„ligt för företaget eftersom de Ă€r projektets enda punkt för misslyckande -SPOF-. NĂ€r de lĂ€mnar företaget gĂ„r projektet dramatiskt ner.", + "WhyNotBuildYourOwnFramework_ABPSOLUTION_Description": "ABP Ă€r ett community-drivet, vĂ€ldokumenterat, moget och generiskt applikationsramverk. Ett team av mycket erfarna utvecklare arbetar hĂ„rt för att hĂ„lla det uppdaterat, lĂ€tt att förstĂ„ och bekvĂ€mt att anvĂ€nda. Att anvĂ€nda ett sĂ„ stabilt ramverk gör att du kan fokusera pĂ„ din egen affĂ€rskod och fĂ„ hjĂ€lp med ramverket frĂ„n experter nĂ€r du behöver det.", + "ArchitecturalInfrastructure_Description": "SaaS-applikationer, modulĂ€ra system eller mikroservicesystem Ă€r de mest anvĂ€nda modellerna för företagsprogramvara. Att bygga sĂ„dana system krĂ€ver inte bara en god förstĂ„else och erfarenhet utan ocksĂ„ en stark mjukvaruinfrastruktur. Annars kommer du att fĂ„ lĂ€gga ner mycket arbete pĂ„ att stödja dessa arkitektoniska detaljer i din kodbas.", + "Modularity_THEPROBLEM_Description": "Att bygga ett verkligt modulĂ€rt system Ă€r inte lĂ€tt! Alla aspekter av systemet (databas, entiteter, API:er, UI-sidor/komponenter) kan delas upp i moduler, och varje modul kan Ă„teranvĂ€ndas utan andra. Den vanliga ASP.NET Core ger inte en sĂ„dan modulĂ€r arkitektur. Om du behöver det bör du tĂ€nka pĂ„ det frĂ„n grunden.", + "Modularity_ABPSOLUTION_Description": "ABP Ă€r skapat för att vara en modulĂ€r struktur för applikationsutveckling. Varje funktion i ramverket Ă€r utvecklad för att vara kompatibel med modularitet. Dokumentation och guider förklarar hur man utvecklar Ă„teranvĂ€ndbara moduler pĂ„ ett standardiserat sĂ€tt.", + "SaaSMultiTenancy": "SaaS / Multi-tenancy", + "SaaSMultiTenancy_THEPROBLEM_Description": "Multi-tenancy Ă€r ett vanligt sĂ€tt att implementera SaaS-system. Att implementera en konsekvent multi-tenant infrastruktur kan dock bli komplicerat.", + "SaaSMultiTenancy_ABPSOLUTION_Description": "ABP tillhandahĂ„ller en komplett infrastruktur för flera hyresgĂ€ster och abstraherar komplexiteten frĂ„n din företagskod. Din applikationskod kommer att vara mestadels multi-tenancy medveten, medan ABP automatiskt isolerar databasen, cache och andra detaljer om hyresgĂ€sterna frĂ„n varandra. Den stöder en enda databas, per hyresgĂ€stdatabas och hybridmetoder. Den konfigurerar korrekt bibliotek som Microsoft Identity och OpenIddict, som normalt inte Ă€r kompatibla med multi-tenancy.", + "Microservices": "MikrotjĂ€nster", + "Microservices_THEPROBLEM_Description": "Att bygga ett mikrotjĂ€nstsystem krĂ€ver mĂ„nga infrastrukturdetaljer: Autentisering och auktorisering av applikationer och mikrotjĂ€nster samt implementering av asynkrona meddelanden och synkrona (Rest/GRPC) kommunikationsmönster mellan mikrotjĂ€nster Ă€r de mest grundlĂ€ggande frĂ„gorna.", + "Microservices_ABPSOLUTION_Description": "ABP tillhandahĂ„ller tjĂ€nster, guider och exempel som hjĂ€lper dig att implementera din microservice-lösning med hjĂ€lp av branschens standardverktyg.", + "Microservices_ABPSOLUTION_Description2": "ABP:s kommersiella licenser gĂ„r till och med ett steg lĂ€ngre och tillhandahĂ„ller en komplett startmall för att kickstarta din mikroservicelösning.", + "PreBuiltModules": "Förbyggda moduler", + "PreBuiltModules_THEPROBLEM_Description": "Alla har vi liknande men lite olika affĂ€rskrav. Men vi mĂ„ste alla uppfinna hjulet pĂ„ nytt eftersom ingen annans kod kan fungera direkt i vĂ„r lösning. De Ă€r alla inbĂ€ddade delar av en större lösning.", + "PreBuiltModules_ABPSOLUTION_Description": "ABP modules tillhandahĂ„ller mĂ„nga Ă„teranvĂ€ndbara applikationsmoduler som betalning, chatt, filhantering, revisionsloggrapportering ... etc. Alla dessa moduler installeras enkelt i din lösning och fungerar direkt. Vi lĂ€gger stĂ€ndigt till fler moduler.", + "PreBuiltModules_ABPSOLUTION_Description2": "Alla moduler Ă€r utformade sĂ„ att de kan anpassas efter dina affĂ€rsbehov. Om du behöver fullstĂ€ndig kontroll kan du ladda ner den fullstĂ€ndiga kĂ€llkoden för alla moduler och anpassa dem helt utifrĂ„n dina specifika affĂ€rskrav.", + "ABPCommunity": "ABP Gemenskap", + "ABPCommunity_Description": "Slutligen, att vara en del av en stor gemenskap dĂ€r alla följer liknande kodningsstilar och principer och delar en gemensam infrastruktur ger kraft nĂ€r du har problem eller behöver hjĂ€lp med designbeslut. Eftersom vi skriver kod pĂ„ liknande sĂ€tt kan vi hjĂ€lpa varandra mycket bĂ€ttre. ABP Ă€r ett community-stöttat projekt med mer Ă€n 10K stjĂ€rnor pĂ„ GitHub.", + "ABPCommunity_Description2": "Det Ă€r lĂ€tt att dela kod eller till och med Ă„teranvĂ€ndbara bibliotek mellan ABP-utvecklare. En kodsnutt som fungerar för dig kommer ocksĂ„ att fungera för andra. Det finns mĂ„nga exempel och handledningar som du direkt kan implementera i din applikation.", + "ABPCommunity_Description3": "NĂ€r du anlitar en utvecklare som tidigare arbetat med ABP-arkitekturen kommer denne omedelbart att förstĂ„ din lösning och pĂ„börja utvecklingen pĂ„ mycket kort tid.", + "WhyAbpIo_Page_Title": "Varför ABP Platform?", + "AbpStudio_Page_Title": "ABP Studio", + "AbpStudio_Page_Description": "Utforska ABP Studio, en integrerad utvecklingsmiljö för ABP Platform, som förbĂ€ttrar din utvecklingsprocess.", + "CampaignInfo": "Köp en ny licens eller förnya din befintliga licens och fĂ„ ytterligare 2 mĂ„nader utan extra kostnad! Detta erbjudande gĂ€ller för alla licensplaner. Se till att du utnyttjar denna tidsbegrĂ€nsade kampanj för att utöka din tillgĂ„ng till premiumfunktioner och uppgraderingar.", + "HurryUpLastDay": "Skynda pĂ„! Sista dagen: {0}", + "CreatingCRUDPagesWithABPSuite": "Skapa CRUD-sidor med ABP Suite", + "MultipleYearDiscount": "Rabatt för flera Ă„r", + "CampaignDiscountText": "Rabatt pĂ„ ny plattform", + "CampaignDiscountName": "Ny plattform", + "CampaignName:BlackFriday": "Svart fredag", + "MultipleOrganizationInfo": "Se alla dina organisationer", + "AbpStudioBetaAccessInfoTitle": "ABP Studio Beta Access", + "AbpStudioBetaAccessInfoText": "Vi Ă€r glada över att kunna dela med oss av beta-versionen av ABP Studio! Den hĂ€r versionen markerar en viktig milstolpe i vĂ„r utvecklingsresa, och vi Ă€r angelĂ€gna om att samla in din feedback för att göra applikationen Ă€nnu bĂ€ttre.", + "YouAreNotAuthorizedToDownloadStudio": "Du Ă€r inte behörig att ladda ner ABP Studio.", + "OrganizationHasNoDefaultCreditCard": "Din organisation har inget standardkreditkort. LĂ€gg till ett kreditkort för din organisation.", + "YouAreNotAuthorizedToPayThisPaymentRequest": "Du Ă€r inte behörig att betala denna betalningsbegĂ€ran.", + "YouAreNotAuthorizedToCreateBillingInfoForThisPaymentRequest": "Du Ă€r inte behörig att skapa faktureringsinformation för denna betalningsbegĂ€ran.", + "OrganizationNotFound": "Organisationen hittades inte.", + "CannotDeleteDefaultCardBecauseAutoRenewalEnabled": "Du kan inte ta bort kortet just nu eftersom funktionen Auto-Renewal Ă€r aktiverad. För att ta bort kortet mĂ„ste du först avaktivera Auto-Renewal.", + "AreYouSureWantToDeleteThisCard": "Är du sĂ€ker pĂ„ att du vill ta bort det hĂ€r kortet?", + "AreYouSureWantToSetThisCardAsDefault": "Är du sĂ€ker pĂ„ att du vill anvĂ€nda det hĂ€r kortet som standard?", + "OrganizationBillingInfoIsNotSuitableForIyzicoPayment": "Din organisations faktureringsinformation Ă€r inte lĂ€mplig för iyzico-betalning.", + "AutomaticRenewal": "Automatisk förnyelse", + "AutomaticRenewal_Description": "Om du förnyar en licens innan den gĂ„r ut fĂ„r du en rabatt pĂ„ upp till 40 %. Med den automatiska förnyelseprocessen kan du förnya din licens utan att förlora denna rabatt, och din utveckling kommer aldrig att avbrytas. Automatisk förnyelse Ă€r endast tillgĂ€nglig för kreditkortsbetalning. Du kan inaktivera automatisk förnyelse nĂ€r som helst genom att gĂ„ till din organisationshanteringssida. ABP sparar inte din kreditkortsinformation, men vĂ„ra globala betalningsgateways sĂ€krar besparingar.", + "CardNotFoundMessage": "Vill du lĂ€gga till ett nytt kort?", + "CardNotFoundTitle": "Kortet hittades inte", + "AutoRenewalEnabled": "Automatisk förnyelse aktiverad", + "AutoRenewalDisabled": "Automatisk förnyelse Avaktiverad", + "PaymentRequestIdIsNotProvided": "BetalningsförfrĂ„gans ID anges inte.", + "PaymentFailedInfo": "TyvĂ€rr, betalningen misslyckades! Detta kan bero pĂ„ otillrĂ€ckliga medel, ogiltigt kreditkortsnummer eller ogiltig pinkod", + "UsedPayment": "Denna betalning har redan anvĂ€nts", + "ManageLicense": "Hantera licens", + "AbpPlatformLeptonXTheme": "LeptonX Theme för din administrativa instrumentpanel av ABP Platform", + "NoActiveLicence": "Du Ă€r inte berĂ€ttigad till denna Ă„tgĂ€rd! Du har ingen aktiv licens.", + "ABPStudioBetaTester": "För att kunna skicka in din begĂ€ran mĂ„ste du logga in", + "ABPStudioBetaAccess": "ABP Studio Beta Access", + "VisitABPStudio": "Besök ABP Studio", + "EditBillingInformation": "Redigera faktureringsinformation", + "Organization": "Organisation", + "E-Book": "E-bok", + "CreditCards": "Kreditkort", + "BillingInformation": "Faktureringsinformation", + "AddNewCreditCard": "LĂ€gg till nytt kreditkort", + "MyOrganizations_LearnMorePlan": "LĂ€s mer om planer pĂ„ prissĂ€ttningssidan", + "AutoLicenseRenewalIsNotEnabled": "Automatisk licensförnyelse Ă€r inte aktiverad.", + "SetAsDefaultPaymentMethod": "Ange som standardbetalningsmetod", + "{0}PerAdditionalDeveloper": "${0} per ytterligare utvecklare", + "CardAlias": "Alias för kort (valfritt)", + "AbpDoesNotSaveYourPaymentDetails_Description": "Betalningsuppgifterna kommer att sparas i {2} sĂ€kerhetsvalv och du kan ta bort lagrade uppgifter nĂ€r som helst. Aktivering av automatisk förnyelse sĂ€kerstĂ€ller att din ABP-prenumeration automatiskt förnyas innan den löper ut, förutsatt att du har ett giltigt kreditkort. Om du avaktiverar automatisk förnyelse mĂ„ste du förnya din prenumeration manuellt. Om du vill fortsĂ€tta din projektutveckling utan avbrott föreslĂ„r vi att du aktiverar alternativet Automatisk förnyelse.", + "AddBillingInformation": "LĂ€gg till faktureringsinformation", + "YouHaveNoCardsSaved": "Kortet Ă€r inte sparat Ă€nnu.", + "CreateCreditCardModal_BillingDetails_Description": "Du mĂ„ste spara dina faktureringsuppgifter för att kunna lĂ€gga till ditt kreditkort.", + "TaxNo": "Skatt Nej", + "CardNumber": "Kortnummer", + "NameOnCard": "Namn pĂ„ kortet", + "BillingDetails": "Faktureringsinformation", + "ThereIsNoDeveloper": "Ingen utvecklare tillagd.", + "CardDetails": "Debit-/Kreditkortsuppgifter", + "YearCantBeNull": "ÅrsfĂ€ltet fĂ„r inte vara tomt.", + "CardHolderName": "Namn pĂ„ kortet", + "ExpireDate": "UtgĂ„ngsdatum", + "DisplayName:ExpireDate": "UtgĂ„ngsdatum", + "DisplayName:CardHolderName": "Namn pĂ„ kortet", + "CreditCardNumberLengthWarning": "Ogiltigt kortnummer", + "ExpirationWarning": "Ogiltigt utgĂ„ngsdatum", + "CreateCreditCardModal_Description": "NĂ€r du sparar ditt betalkort/kreditkort kommer en tillfĂ€llig avgift pĂ„ 1 USD att godkĂ€nnas för verifiering och Ă„terbetalas omedelbart.", + "ReturnOnInvestmentTitle": "Avkastning pĂ„ investeringar.", + "ReduceYourDevelopmentCostsDescription": "Minska dina utvecklingskostnader med mer Ă€n 50 % med ABP Platform.", + "SettingUpTheArchitectureTitle": "UppsĂ€ttning av arkitekturen", + "DoingEverythingFromScratch": "Att göra allt frĂ„n början", + "SettingUpTheArchitecture_Description1": "Organisera kodbas och lösningsstruktur", + "SettingUpTheArchitecture_Description2": "Identifiera, installera och konfigurera viktiga tredjepartsbibliotek", + "SettingUpTheArchitecture_Description3": "UpprĂ€tta infrastruktur för automatiserad integration och enhetstest", + "SettingUpTheArchitecture_Description4": "FaststĂ€lla och dokumentera kodstandarder, utbilda utvecklingsteamet", + "UsingTheABPFramework": "AnvĂ€nda ABP-plattformen", + "UseABPSettingUpTheArchitecture_Description": "AnvĂ€nd ABP:s mallar för startup-lösningar", + "ReduceCostsWithABP": "Minska kostnaderna med ABP genom att", + "ReduceCostsBy": "80 % till 100 %.", + "DesigningTheUserInterfaceTitle": "Utformning av anvĂ€ndargrĂ€nssnittet", + "DesigningTheUserInterface_Description1": "Skapa eller köp ett UI-tema", + "DesigningTheUserInterface_Description2": "Anpassa anvĂ€ndargrĂ€nssnittets tema till lösningen", + "DesigningTheUserInterface_Description3": "Bygga de viktigaste delarna av anvĂ€ndargrĂ€nssnittet (layout, meny, sidhuvud, sidfot med responsiv design)", + "DesigningTheUserInterface_Description4": "Se till att designen Ă€r konsekvent pĂ„ alla applikationssidor", + "UseABPDesigningTheUserInterface_Description": "AnvĂ€nd ABP:s LeptonX UI Theme", + "DevelopingApplicationFeaturesTitle": "Utveckling av applikationsfunktioner", + "DevelopingApplicationFeatures_Description1": "Utveckla din egen affĂ€rslogik", + "DevelopingApplicationFeatures_Description2": "Utveckla varje sida en efter en", + "DevelopingApplicationFeatures_Description3": "Utveckla gemensamma affĂ€rsmoduler sjĂ€lv", + "DevelopingApplicationFeatures_Description4": "Utveckla autentiseringssystemet (enkel inloggning, 2-faktor autentisering, sociala inloggningar, Ă„terstĂ€llning av lösenord, e-postaktivering etc...)", + "DevelopingApplicationFeatures_Description5": "TillĂ€mpa övergripande frĂ„gor i varje anvĂ€ndningsfall (DB-transaktioner, auktorisering, validering, undantagshantering etc.)", + "DevelopingApplicationFeatures_Description6": "Utveckla gemensamma basklasser och nyttotjĂ€nster", + "DevelopingApplicationFeatures_Description7": "Utveckla gemensamma icke-affĂ€rsmĂ€ssiga krav (revisionsloggning, soft-delete, bakgrundsjobb, behörighetssystem etc.)", + "UseABPDevelopingApplicationFeatures_Description1": "Utveckla din egen affĂ€rslogik", + "UseABPDevelopingApplicationFeatures_Description2": "AnvĂ€nd ABP Suite för att automatiskt generera CRUD-liknande sidor", + "UseABPDevelopingApplicationFeatures_Description3": "AnvĂ€nd direkt ABP:s förbyggda gemensamma applikationsmoduler och anpassa dem utifrĂ„n dina unika krav", + "ReduceCostsBy_2": "40-60 procent", + "WhyABPIoPlatform": "Varför ABP Platform?", + "WhyShouldYouUsetheABPIOPlatform": "Varför ska du anvĂ€nda ABP Platform istĂ€llet för att skapa en ny lösning frĂ„n grunden?", + "ExploreMore": "Utforska mer", + "DocumentIntroducesDescription": "Om du vill veta mer om varför du ska anvĂ€nda ABP Platform istĂ€llet för att skapa en ny lösning frĂ„n grunden kan du lĂ€sa följande dokument.", + "ReturnOnInvestmentPageAbout": "PĂ„ den hĂ€r sidan beskrivs de grundlĂ€ggande stegen i utvecklingen av en programvarulösning och hur ABP Platform minskar utvecklingskostnaderna i varje steg.", + "LearnMore": "LĂ€r dig mer", + "ReturnOfInvestment": "Avkastning pĂ„ investeringar", + "ReturnOnInvestment_Description": "LĂ€r dig hur du kan minska dina utvecklingskostnader med mer Ă€n 50 %.", + "PricingDiscount": "Spara", + "PricingTeamTitle": "Team", + "PricingBusinessTitle": "Företag", + "PricingEnterpriseTitle": "Företag", + "SpecialDiscount": "SĂ€rskild rabatt", + "YourOrganizationOverview": "Översikt över din organisation", + "TrainingDetailsHeaderInfo_TrainingHourSingular": "{0} timme", + "ContactPageError": "VĂ€nligen skicka ditt meddelande via e-post till info@abp.io
HĂ€r Ă€r vad du skrev :", + "GoBack": "GĂ„ tillbaka", + "HereWhatYouWrote": "HĂ€r Ă€r vad du skrev:", + "Sales": "FörsĂ€ljning", + "LicensingPricing": "Licensiering/prissĂ€ttning", + "TrialDemo": "Testversion / Demo", + "TrainingOnboarding": "Utbildning / Onboarding", + "Resellers": "ÅterförsĂ€ljare", + "Others": "Övriga", + "Characters": "KaraktĂ€rer", + "Topic": "Ämne", + "SendUsEmail": "Skicka e-post till oss", + "ErrorExceptionMessage": "Ett fel intrĂ€ffade under behandlingen av din begĂ€ran", + "WatchTakeCodeGeneration": "Titta pĂ„ videon \"Utforska potentialen med kodgenerering: ABP Suite\" Video!", + "StartupTemplatesUser": "AnvĂ€ndare", + "StartupSingleSignOn": "Enkel inloggning", + "Application{0}": "TillĂ€mpning {0}", + "PreBuiltApplicationModulesTitle": "FĂ€rdigbyggda applikationer Moduler.", + "RegisterDemo": "Registrera", + "TrainingDescription": "AnmĂ€l dig till ABP:s utbildningar för att förbĂ€ttra dina fĂ€rdigheter och kunskaper och hĂ„lla dig uppdaterad med den senaste utvecklingen.", + "PurchaseDevelopers": "Utvecklare", + "LinkExpiredMessage": "BetalningslĂ€nken har löpt ut! Kontakta oss pĂ„ sales@volosoft.com för att uppdatera lĂ€nken eller klicka hĂ€r för att navigera till kontaktsidan.", + "YourAccountDisabled": "Ditt anvĂ€ndarkonto Ă€r inaktiverat!", + "WhyChooseAbpTitle": "Varför vĂ€lja ABP? | ABP.IO", + "WhyChooseAbpDescription": "UpptĂ€ck fördelarna med ABP Commercial: modulĂ€r arkitektur, moduler redo för mikrotjĂ€nster, produktivitetsverktyg och robusta funktioner för moderna webbappar för affĂ€rsomrĂ„den.", + "AbpIo_Modern_Title": "ABP.IO - Modern ASP.NET Core plattform för webbapplikationer", + "AbpIo_Modern_Description": "ABP Platform tillhandahĂ„ller ett ramverk med öppen kĂ€llkod ovanpĂ„ ASP.NET Core med Angular-, Blazor- och MVC-grĂ€nssnittsalternativ för att skapa skalbara webbappar för företag.", + "My_Organizations_Page_Title": "Mina organisationer", + "My_Organizations_Page_Description": "Se dina ABP Platform-organisationer för att hantera dina utvecklare, licensförnyelser och uppgraderingar.", + "Members_Page_Title": "{0} - Medlem i gemenskapen | ABP.IO", + "Members_Page_Description": "{0} Ă€r medlem i ABP-communityn. Kolla in bidragen och dra nytta av denna erfarenhet.", + "Framework_Page_Title": "ABP-ramverk", + "Framework_Page_Description": "ABP Framework Ă€r det mest okomplicerade sĂ€ttet att kickstarta ditt projekt! LĂ€r dig mer om ABP Framework's robusta funktioner.", + "CLI_Page_Title": "ABP CLI", + "CLI_Page_Description": "AnvĂ€nd det globala verktyget ABP CLI dotnet för att skapa ett nytt ABP-projekt, uppdatera det, hantera paket och fĂ„ tillgĂ„ng till kĂ€llkoden för ABP-moduler.", + "Mobile_Page_Title": "ABP:s mobila klient", + "Mobile_Page_Description": "Utveckla kraftfulla mobila applikationer med ABP:s funktioner för mobil utveckling, vilket sĂ€kerstĂ€ller kompatibilitet mellan plattformar.", + "ReleasesPageTitle": "ABP Kommersiella meddelanden", + "ReleasesPageDescription": "HĂ„ll dig uppdaterad med de senaste funktionerna och uppdateringarna i ABP Commercial Releases, sĂ„ att dina applikationer Ă€r toppmoderna.", + "GetStartedPageTitle": "Kom snabbt igĂ„ng med ABP Framework med hjĂ€lp av vĂ„r omfattande guide som Ă€r utformad för nya anvĂ€ndare.", + "Community_Page_Title": "ABP Gemenskap", + "Community_Page_Description": "Anslut och samarbeta med andra utvecklare i ABP Community, dela kunskap och resurser.", + "Services_Page_Title": "Ytterligare tjĂ€nster", + "Services_Page_Description": "FĂ„ professionell utveckling och supporttjĂ€nster frĂ„n ABP-teamet eller dess lösningspartners, vilket sĂ€kerstĂ€ller att ditt projekt blir framgĂ„ngsrikt.", + "Contributors_Page_Title": "Bidragsgivare till ABP", + "Contributors_Page_Description": "Möt bidragsgivarna i ABP Community och lĂ€r dig mer om deras roller och bidrag till ramverket.", + "PackagesDetailTitle": "{0} - Paketdetaljer | ABP Framework", + "PackagesDetailDescription": "FĂ„ detaljerad information om paketet {0}, inklusive funktioner och anvĂ€ndning.", + "Raffle_Page_Title": "Utlottning - {0}", + "Raffle_Page_Description": "Delta i ABP:s utlottningar och ha chansen att vinna spĂ€nnande priser genom att engagera dig i ABP:s community.", + "Docs_Page_Title": "ABP-dokumentation", + "Docs_Page_Description": "FĂ„ tillgĂ„ng till omfattande guider och API-referenser i ABP Documentation, vilket underlĂ€ttar utveckling och felsökning.", + "Videos_Page_Title": "{0} - VideoinlĂ€gg | ABP.IO", + "AskQuestionsOnSupport": "Du kan stĂ€lla frĂ„gor pĂ„ ABP Support.", + "MicroserviceApplicationExplanation1": "Skapar en distribuerad lösning.", + "MicroserviceApplicationExplanation2": "Rekommenderas för stora team för att skapa komplexa och skalbara system.", + "CancellationSupport": "Stöd för avbokning", + "CancellationSupportExplanation": "ABP möjliggör en elegant avslutning av asynkrona operationer i applikationer, vilket sĂ€kerstĂ€ller korrekt resursrensning och en responsiv anvĂ€ndarupplevelse.", + "DistributedLocking": "Distribuerad lĂ„sning", + "DistributedLockingExplanation": "ABP:s distribuerade lĂ„ssystem sĂ€kerstĂ€ller att resurser nĂ„s pĂ„ ett ömsesidigt exklusivt sĂ€tt över olika noder i en distribuerad miljö, vilket förhindrar samtidiga konflikter och sĂ€kerstĂ€ller datakonsistens.", + "EncryptionDecryptionServices": "TjĂ€nster för kryptering och dekryptering", + "EncryptionDecryptionServicesExplanation": "ABP tillhandahĂ„ller strĂ€ngkrypteringsfunktion som gör det möjligt att Encrypt och Decrypt strĂ€ngar.", + "BackgroundWorkers": "Bakgrund Arbetstagare", + "BackgroundWorkersExplanation": "Definiera operationer som ska köras i en separat, dedikerad trĂ„d. AnvĂ€nd de inbyggda bakgrundsarbetarna eller integrera dina egna. Hangfire och Quartz integrationer Ă€r redan tillgĂ€ngliga.", + "ConcurrencyCheck": "Kontroll av samtidighet", + "ConcurrencyCheckExplanation": "ABP tillhandahĂ„ller en optimistisk mekanism för samtidighetskontroll för att sĂ€kerstĂ€lla datakonsistens i din applikation och förhindrar att anvĂ€ndare kommer Ă„t eller Ă€ndrar samma data i en databas samtidigt." + } +} \ No newline at end of file diff --git a/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/abp-studio-helm-charts.png b/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/abp-studio-helm-charts.png index 6f078b2fd5..edc9118d9c 100644 Binary files a/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/abp-studio-helm-charts.png and b/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/abp-studio-helm-charts.png differ diff --git a/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/abp-studio-license-comparison-table.png b/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/abp-studio-license-comparison-table.png index 3c8a155eb7..f0ca19268e 100644 Binary files a/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/abp-studio-license-comparison-table.png and b/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/abp-studio-license-comparison-table.png differ diff --git a/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/abp-studio-solution-runner-overall.png b/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/abp-studio-solution-runner-overall.png index 96902b24a6..02a2ba1076 100644 Binary files a/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/abp-studio-solution-runner-overall.png and b/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/abp-studio-solution-runner-overall.png differ diff --git a/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/abp-studio-solution-runner-start-apps.png b/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/abp-studio-solution-runner-start-apps.png index c08fe0f69d..87dbb07a41 100644 Binary files a/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/abp-studio-solution-runner-start-apps.png and b/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/abp-studio-solution-runner-start-apps.png differ diff --git a/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/abp-suite-in-abp-studio.png b/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/abp-suite-in-abp-studio.png index a88dff06cd..572cf40956 100644 Binary files a/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/abp-suite-in-abp-studio.png and b/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/abp-suite-in-abp-studio.png differ diff --git a/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/abp-suite-open-in-abp-studio.png b/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/abp-suite-open-in-abp-studio.png index cedd33aa6f..e09cfb2ddd 100644 Binary files a/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/abp-suite-open-in-abp-studio.png and b/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/abp-suite-open-in-abp-studio.png differ diff --git a/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/suite-generated-entity.png b/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/suite-generated-entity.png index d50c0813d0..2f3342d573 100644 Binary files a/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/suite-generated-entity.png and b/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/suite-generated-entity.png differ diff --git a/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/cms-kit-faq.png b/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/cms-kit-faq.png new file mode 100644 index 0000000000..be73de4d8f Binary files /dev/null and b/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/cms-kit-faq.png differ diff --git a/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/cmskit-module-comments-settings.png b/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/cmskit-module-comments-settings.png new file mode 100644 index 0000000000..c0b1a4fe48 Binary files /dev/null and b/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/cmskit-module-comments-settings.png differ diff --git a/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/cmskit-module-markedItems.png b/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/cmskit-module-markedItems.png new file mode 100644 index 0000000000..52eb61f285 Binary files /dev/null and b/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/cmskit-module-markedItems.png differ diff --git a/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/cover-image.png b/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/cover-image.png new file mode 100644 index 0000000000..875be518af Binary files /dev/null and b/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/cover-image.png differ diff --git a/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/docs-google-search.png b/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/docs-google-search.png new file mode 100644 index 0000000000..9398fa1070 Binary files /dev/null and b/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/docs-google-search.png differ diff --git a/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/faq-section-public-web.png b/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/faq-section-public-web.png new file mode 100644 index 0000000000..2f45635782 Binary files /dev/null and b/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/faq-section-public-web.png differ diff --git a/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/google-search-results.png b/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/google-search-results.png new file mode 100644 index 0000000000..082c567f8c Binary files /dev/null and b/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/google-search-results.png differ diff --git a/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/new-abp-cli-cover-image.png b/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/new-abp-cli-cover-image.png new file mode 100644 index 0000000000..d92621f403 Binary files /dev/null and b/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/new-abp-cli-cover-image.png differ diff --git a/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/new-platform-cover-image.png b/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/new-platform-cover-image.png new file mode 100644 index 0000000000..95265fea29 Binary files /dev/null and b/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/new-platform-cover-image.png differ diff --git a/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/post.md b/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/post.md new file mode 100644 index 0000000000..2d8a767568 --- /dev/null +++ b/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/post.md @@ -0,0 +1,177 @@ +# ABP Platform 8.3 RC Has Been Released + +![](cover-image.png) + +Today, we are happy to release [ABP](https://abp.io) version **8.3 RC** (Release Candidate). This blog post introduces the new features and important changes in this new version. + +Try this version and provide feedback for a more stable version of ABP v8.3! Thanks to you in advance. + +## Get Started with the 8.3 RC + +You can check the [Get Started page](https://abp.io/get-started) to see how to get started with ABP. You can either download [ABP Studio](https://abp.io/get-started#abp-studio-tab) (**recommended**, if you prefer a user-friendly GUI application - desktop application) or use the [ABP CLI](https://abp.io/docs/latest/cli). + +By default, ABP Studio uses stable versions to create solutions. Therefore, if you want to create a solution with a preview version, first you need to create a solution and then switch your solution to the preview version from the ABP Studio UI: + +![](studio-switch-to-preview.png) + +## Migration Guide + +There are a few breaking changes in this version that may affect your application. Please read the migration guide carefully, if you are upgrading from v8.2 or earlier: [ABP Version 8.3 Migration Guide](https://abp.io/docs/8.3/release-info/migration-guides/abp-8-3) + +## What's New with ABP v8.3? + +In this section, I will introduce some major features released in this version. +Here is a brief list of titles explained in the next sections: + +* CMS Kit: Marked Items/Favorites +* CMS Kit: Approvement System for Comments +* Docs: Added Google Translation Support & Introducing the Single Project Mode +* Using DBFunction for Global Query Filters +* CMS Kit (PRO): FAQ +* Package Updates (NuGet & NPM) + +### CMS Kit: Marked Items/Favorites + +CMS Kit provides a marking system to mark any kind of resource, like a blog post or a product, as a favorite, starred, flagged, or bookmarked. + +![](cmskit-module-markedItems.png) + +This system is especially useful if you need to highlight some resources and differentiate them from other items. To use the marking system, you need to define an entity type with the icon name, by configuring the `CmsKitMarkedItemOptions`: + +```csharp +Configure(options => +{ + options.EntityTypes.Add( + new MarkedItemEntityTypeDefinition( + entityType: "product", + icon: StandardMarkedItems.Favorite + ) + ); +}); +``` + +You can select any of the standard marked item icons (as used in the example above) or easily customize the icons shown in the toggling components. + +> Read the [CMS Kit: Marked Item System](https://abp.io/docs/8.3/modules/cms-kit/marked-items) documentation to learn more. + +### CMS Kit: Approvement System for Comments + +CMS Kit Module has been provided a [Commenting System](https://abp.io/docs/8.3/modules/cms-kit/comments) for a while. This system allows you to add the comment feature to any kind of resource, like blog posts, or products. However, this system wasn't providing an approvement system, that allows system administrations to review the comments before publishing them in their application. + +In this version, we have introduced the [Approvement System](https://abp.io/docs/8.3/modules/cms-kit/comments#settings), which allows you to _require approval for comments to be published_. It's disabled by default, but you can make it enabled by simply checking the related setting on the settings page: + +![](cmskit-module-comments-settings.png) + +When you enable it, whenever a user submits a comment, it can be directly seen on the back-office application (in the _cms/comments_ page), and you can determine if the comment should be approved or rejected. If you approve the comment, then it will be shown in the comment section for the related resource. + +> Read the [CMS Kit: Comments](https://abp.io/docs/8.3/modules/cms-kit/comments) documentation to learn more. + +### Docs: Added Google Translation Support & Introducing the Single Project Mode + +In this version, we made some improvements in the [Docs Module](https://abp.io/docs/8.3/modules/docs), added Google Translation support for better findings in the documentation, and introduced a single project mode to align our needs in the documentation system with [the unification of the ABP Platform](https://abp.io/blog/new-abp-platform-is-live). + +The single project mode allows you to use a single name as a project name in your application. If you are not considering supporting multiple projects with their multiple docs and instead if you have a single project and want to have documentation for it, it's especially useful for you. You just need to configure the `DocsUiOptions`, set the single project mode as **enabled** and also define a constant project name: + +```csharp +Configure(options => +{ + options.SingleProjectMode.Enable = true; + options.SingleProjectMode.ProjectName = "abp"; +}); +``` + +In addition to this feature, we also introduced Google Translation support for the documentation system and even integrated it into our [abp.io/docs](https://abp.io/docs/) website: + +![](docs-google-search.png) + +![](google-search-results.png) + +Thanks to this system, you can either translate your documentation into your own language by Google Translation System or search specific keywords to easily find the related topic in the documentation. + +### Using DBFunction for Global Query Filters + +In this version, ABP has started using [User-defined function mapping](https://learn.microsoft.com/en-us/ef/core/querying/user-defined-function-mapping) for global filters to gain performance improvements and let EF Core generate more precise SQL commands under the hook. + +> See the documentation for more info: [Using User-defined function mapping for global filters](https://abp.io/docs/8.3/framework/infrastructure/data-filtering#using-user-defined-function-mapping-for-global-filters) + +### CMS Kit: FAQ + +CMS Kit provides a [FAQ System](https://abp.io/docs/8.3/modules/cms-kit-pro/faq) to allow users to create, edit, and delete FAQs. Here is an example screenshot from the FAQ page on the admin side: + +![](cms-kit-faq.png) + +You can list, create, update, and delete sections and their questions on the admin side of your solution. Then, by using the `FaqViewComponent` in your public-web application, you can display FAQs, section by section: + +![](faq-section-public-web.png) + +> Read the [CMS Kit: FAQ System](https://abp.io/docs/8.3/modules/cms-kit-pro/faq) documentation to learn more. + +### Package Updates + +In this version, we also updated some of the core NuGet and NPM package versions. All of the removed or deprecated methods have already been updated at the framework level. However, if you used any methods from these packages, you should be aware of the change and update it in your code accordingly. + +You can see the following list of the package version changes: + +* [Updated Markdig.Signed from v0.33.0 to v0.37.0](https://github.com/abpframework/abp/pull/20195) - [NuGet](https://www.nuget.org/packages/Markdig.Signed) +* [Updated Hangfire from v1.8.6 to v1.8.12](https://github.com/abpframework/abp/pull/20009) - [NuGet](https://www.nuget.org/packages/Hangfire.AspNetCore) +* [Updated SixLabors.ImageSharp from v3.0.2 to v3.1.4](https://github.com/abpframework/abp/pull/19643) - [NuGet](https://www.nuget.org/packages/SixLabors.ImageSharp) +* [Updated Blazorise from v1.5.0 to v1.5.2](https://github.com/abpframework/abp/pull/19841) - [NuGet](https://www.nuget.org/packages/Blazorise) +* [Updated datatables.net from v1.11.4 to v2.0.2](https://github.com/abpframework/abp/pull/19340) - [NPM](https://www.npmjs.com/package/datatables.net) + +## Community News + +### The New ABP Platform Is Live! + +![](new-platform-cover-image.png) + +We're thrilled to announce that the **new ABP.IO Platform** is now live! Our team has been hard at unifying and enhancing the entire platform to deliver a seamless, user-friendly experience. We consolidated all our services under a single domain: [abp.io](https://abp.io/); added a new mega menu that makes finding what you need much easier and faster, and also improved the UX of our application and combined both ABP (open-source) and ABP Commercial (paid) documents into a single comprehensive resource. + +> Read the blog post to learn more about this unification 👉 [The new ABP Platform is live!](https://abp.io/blog/new-abp-platform-is-live) + +### Announcing ABP Studio (Beta) General Availability + +We're really excited to announce that the **ABP Studio (beta)** is generally available to everyone. It is now downloadable on the [get started page](https://abp.io/get-started) of the [new ABP Platform website](https://abp.io/blog/new-abp-platform-is-live). + +![](studio-beta-cover-image.png) + +> Read the blog post to learn more about the ABP Studio (Beta) 👉 [Announcing ABP Studio (beta) General Availability](https://abp.io/blog/announcing-abp-studio-general-availability) + +### Introducing the New ABP CLI + +As described above, we recently [unified the ABP platform in a single domain (abp.io)](https://abp.io/blog/new-abp-platform-is-live) and made some changes in our templating system to simplify your development. Also, we released more stable **ABP Studio** versions, which can dramatically improve and speed up your development time. + +Besides all of these changes, we have also introduced a [new ABP CLI](https://abp.io/docs/latest/cli/index) to bring you a more streamlined and efficient experience, which also extends the current commands. + +![](new-abp-cli-cover-image.png) + +The new ABP CLI extends the old ABP CLI, adds more features that are used by ABP Studio behind the scenes, and is also fully compatible with the new templating system. We created a blog post, which you can read at [https://abp.io/blog/introducing-the-new-abp-cli](https://abp.io/blog/introducing-the-new-abp-cli) to highlight the reason behind this change and insights into the new ABP CLI, you can check it out if you want to learn more. + +### New ABP Community Articles + +There are exciting articles contributed by the ABP community as always. I will highlight some of them here: + +* [Ahmed Tarek](https://twitter.com/AhmedTarekHasa1) has created **three** new community articles: + * [đŸ§Ș Unit Testing Best Practices In .NET C# đŸ€·â€â™‚ïž](https://abp.io/community/articles/-unit-testing-best-practices-in-.net-c--mnx65npu) + * [Memory Management In .NET](https://abp.io/community/articles/memory-management-in-.net-rqwbtzvl) + * [đŸ§” How String In .NET C# Works đŸ€·â€â™‚ïž](https://abp.io/community/articles/-how-string-in-.net-c-works--vj6d2pnm) + +* [Anto Subash](https://twitter.com/antosubash) has created **two** new community videos: + * [ABP React Template V2](https://abp.io/community/videos/abp-react-template-v2-ilc4cyqr) + * [Migrating Tye to Aspire - .NET Microservice with ABP](https://abp.io/community/videos/migrating-tye-to-aspire-.net-microservice-with-abp-ga1t4ckr) + +* [HeadChannel Team](https://headchannel.co.uk/) has created **two** new community articles: + * [Managing Baseline Creation in Applications Based on ABP Framework](https://abp.io/community/articles/managing-baseline-creation-in-applications-based-on-abp-framework-yiacte5c) + * [How to Test The System Using PostgreSQL and TestContainers](https://abp.io/community/articles/how-to-test-the-system-using-postgresql-and-testcontainers-8yh8t0j8) + +* [Create a Generic HTTP Service to Consume a Web API](https://abp.io/community/articles/create-a-generic-http-service-to-consume-a-web-api-yidme2kq) by [Bart Van Hoey](https://github.com/bartvanhoey) +* [Use User-Defined Function Mapping for Global Filter](https://abp.io/community/articles/use-userdefined-function-mapping-for-global-filter-pht26l07) by [Liming Ma](https://github.com/maliming) +* [How to use .NET Aspire with ABP framework](https://abp.io/community/articles/how-to-use-.net-aspire-with-abp-framework-h29km4kk) by [Berkan ƞaßmaz](https://twitter.com/berkansasmazz) +* [Exciting New Feature in ABP.IO CMS Kit: Marked Item System](https://abp.io/community/articles/exciting-new-feature-in-abp.io-cms-kit-marked-item-system.-2hvpq0me) by [Suhaib Mousa](https://abp.io/community/members/suhaibmousa032@gmail.com) + +Thanks to the ABP Community for all the content they have published. You can also [post your ABP-related (text or video) content](https://abp.io/community/posts/submit) to the ABP Community. + +## Conclusion + +This version comes with some new features and a lot of enhancements to the existing features. You can see the [Road Map](https://abp.io/docs/8.3/release-info/road-map) documentation to learn about the release schedule and planned features for the next releases. Please try ABP v8.3 RC and provide feedback to help us release a more stable version. + +Thanks for being a part of this community! \ No newline at end of file diff --git a/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/studio-beta-cover-image.png b/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/studio-beta-cover-image.png new file mode 100644 index 0000000000..cc468d4bf3 Binary files /dev/null and b/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/studio-beta-cover-image.png differ diff --git a/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/studio-switch-to-preview.png b/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/studio-switch-to-preview.png new file mode 100644 index 0000000000..32f6d01edb Binary files /dev/null and b/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/studio-switch-to-preview.png differ diff --git a/docs/en/Blog-Posts/2024-08-01-switching-between-organization-units/0.png b/docs/en/Blog-Posts/2024-08-01-switching-between-organization-units/0.png new file mode 100644 index 0000000000..ccfe417544 Binary files /dev/null and b/docs/en/Blog-Posts/2024-08-01-switching-between-organization-units/0.png differ diff --git a/docs/en/Blog-Posts/2024-08-01-switching-between-organization-units/1.png b/docs/en/Blog-Posts/2024-08-01-switching-between-organization-units/1.png new file mode 100644 index 0000000000..e6bb3f64b6 Binary files /dev/null and b/docs/en/Blog-Posts/2024-08-01-switching-between-organization-units/1.png differ diff --git a/docs/en/Blog-Posts/2024-08-01-switching-between-organization-units/2.png b/docs/en/Blog-Posts/2024-08-01-switching-between-organization-units/2.png new file mode 100644 index 0000000000..1bb1b0e9dd Binary files /dev/null and b/docs/en/Blog-Posts/2024-08-01-switching-between-organization-units/2.png differ diff --git a/docs/en/Blog-Posts/2024-08-01-switching-between-organization-units/3.png b/docs/en/Blog-Posts/2024-08-01-switching-between-organization-units/3.png new file mode 100644 index 0000000000..5dd64da53e Binary files /dev/null and b/docs/en/Blog-Posts/2024-08-01-switching-between-organization-units/3.png differ diff --git a/docs/en/Blog-Posts/2024-08-01-switching-between-organization-units/POST.md b/docs/en/Blog-Posts/2024-08-01-switching-between-organization-units/POST.md new file mode 100644 index 0000000000..3a29539a51 --- /dev/null +++ b/docs/en/Blog-Posts/2024-08-01-switching-between-organization-units/POST.md @@ -0,0 +1,490 @@ +# Switching Between Organization Units + +In most companies, a user belongs to more than one organization. Also, in some applications, we need to filter the data shown depending on the logged-in user's organization. For such scenarios, allowing users to select one of the organizations they belong to is a good practice. + +![0](0.png) + +## Creating a Data Filter with Organization Units + +### IHasOrganization + +First, we need to create a data filter that filters data based on the organization unit. + +The `IHasOrganization` interface is used to define the organization unit property in the entity classes, and used to filter the data based on the organization unit. + +```csharp +public interface IHasOrganization +{ + public Guid? OrganizationId { get; set; } +} +``` + +```csharp +public class Book : AggregateRoot, IHasOrganization +{ + public string Name { get; set; } + + public string Isbn { get; set; } + + public Guid? OrganizationId { get; set; } +} +``` + +### Entity Framework Core DbContext Implementation + +We will override the `ShouldFilterEntity` and `CreateFilterExpression` methods in the `BookStoreDbContext` class to configure the data filter for the entity that implements the `IHasOrganization` interface. + +```csharp +public class BookStoreDbContext : AbpDbContext +{ + // Your others DbSet properties... + + public DbSet Books { get; set; } + + protected override void OnModelCreating(ModelBuilder builder) + { + base.OnModelCreating(builder); + + // Your configure code... + + builder.Entity(b => + { + b.ToTable(BookStoreConsts.DbTablePrefix + "Book", BookStoreConsts.DbSchema); + b.ConfigureByConvention(); + }); + } + + public CurrentOrganizationIdProvider CurrentOrganizationIdProvider => LazyServiceProvider.LazyGetRequiredService(); + + protected override bool ShouldFilterEntity(IMutableEntityType entityType) + { + if (typeof(IHasOrganization).IsAssignableFrom(typeof(TEntity))) + { + return true; + } + + return base.ShouldFilterEntity(entityType); + } + + protected override Expression> CreateFilterExpression(ModelBuilder modelBuilder) + { + var expression = base.CreateFilterExpression(modelBuilder); + + if (typeof(IHasOrganization).IsAssignableFrom(typeof(TEntity))) + { + Expression> hasOrganizationIdFilter = e => EF.Property(e, "OrganizationId") == CurrentOrganizationIdProvider.CurrentOrganizationId; + expression = expression == null ? hasOrganizationIdFilter : QueryFilterExpressionHelper.CombineExpressions(expression, hasOrganizationIdFilter); + } + + return expression; + } +} +``` + +### The CurrentOrganizationIdProvider + +This class is used to get the current `organization id`, We will use the `AsyncLocal` class to store the current `organization id`, The `Change` method is used to change the current `organization id`. This service is registered as a singleton service. + +```csharp +public class CurrentOrganizationIdProvider : ISingletonDependency +{ + private readonly AsyncLocal _currentOrganizationId = new AsyncLocal(); + + public Guid? CurrentOrganizationId => _currentOrganizationId.Value; + + public virtual IDisposable Change(Guid? organizationId) + { + var parent = CurrentOrganizationId; + _currentOrganizationId.Value = organizationId; + return new DisposeAction(() => + { + _currentOrganizationId.Value = parent; + }); + } +} +``` + +## Domain Service Implementation + +We will store the current `organization id` in the cache for the logged-in user. at the same time, we want to store it per browser. So we also add the different browser info for every logged-in user. + +In the `BrowserInfoClaimsPrincipalContributor` class, We add a random `BrowserInfo` claim to the logged-in user. And we will use `user id` and `browser info `as a cache key. + +```csharp +public static class CurrentUserExtensions +{ + public static Guid? GetBrowserInfo(this ICurrentUser currentUser) + { + var claimValue = currentUser.FindClaimValue("BrowserInfo"); + if (claimValue != null && Guid.TryParse(claimValue, out var result)) + { + return result; + } + return null; + } +} + +public class BrowserInfoClaimsPrincipalContributor : IAbpClaimsPrincipalContributor, ITransientDependency +{ + public Task ContributeAsync(AbpClaimsPrincipalContributorContext context) + { + var identity = context.ClaimsPrincipal.Identities.FirstOrDefault(); + identity?.AddClaim(new Claim("BrowserInfo", Guid.NewGuid().ToString())); + return Task.CompletedTask; + } +} +``` + +## Application Service Implementation + +The `CurrentOrganizationAppService` to get/change the current organization for the logged-in user. `BookAppService` to get the books based on the current `organization id`. + +```csharp +[Authorize] +public class CurrentOrganizationAppService : BookStoreAppService, ICurrentOrganizationAppService +{ + private readonly IdentityUserManager _identityUserManager; + private readonly IDistributedCache _cache; + + public CurrentOrganizationAppService(IdentityUserManager identityUserManager, IDistributedCache cache) + { + _identityUserManager = identityUserManager; + _cache = cache; + } + + public virtual async Task> GetOrganizationListAsync() + { + var user = await _identityUserManager.FindByIdAsync(CurrentUser.GetId().ToString()); + var organizationUnits = await _identityUserManager.GetOrganizationUnitsAsync(user); + return organizationUnits.Select(ou => new OrganizationDto + { + Id = ou.Id, + DisplayName = ou.DisplayName + }).ToList(); + } + + public virtual async Task GetCurrentOrganizationIdAsync() + { + var cacheKey = CurrentUser.Id.ToString() + ":" + CurrentUser.GetBrowserInfo(); + return (await _cache.GetAsync(cacheKey))?.OrganizationId; + } + + public virtual async Task ChangeAsync(Guid? organizationId) + { + var cacheKey = CurrentUser.Id.ToString() + ":" + CurrentUser.GetBrowserInfo(); + await _cache.SetAsync(cacheKey, new CurrentOrganizationIdCacheItem + { + OrganizationId = organizationId + }); + } +} +``` + +```csharp +[Authorize] +public class BookAppService : BookStoreAppService, IBookAppService +{ + private readonly IBasicRepository _bookRepository; + + public BookAppService(IBasicRepository bookRepository) + { + _bookRepository = bookRepository; + } + + public virtual async Task> GetListAsync() + { + var books = await _bookRepository.GetListAsync(); + return books.Select(book => new BookDto + { + Id = book.Id, + Name = book.Name, + Isbn = book.Isbn, + OrganizationId = book.OrganizationId + }).ToList(); + } +} +``` + +## Seed Sample Data + +Let's seed some sample data for the `Book` and `Organization` entities. + +We added two organization units, `USA Branch` and `Turkey Branch`, and some books to each organization unit. Also, we added the `admin` user to both organization units. + +```csharp +public class BooksDataSeedContributor : IDataSeedContributor, ITransientDependency +{ + public Guid UsaBranchId = Guid.Parse("00000000-0000-0000-0000-000000000001"); + public Guid TurkeyBranchId = Guid.Parse("00000000-0000-0000-0000-000000000002"); + + private readonly IBasicRepository _bookRepository; + private readonly OrganizationUnitManager _organizationUnitManager; + private readonly IOrganizationUnitRepository _organizationUnitRepository; + private readonly IdentityUserManager _identityUserManager; + private readonly IUnitOfWorkManager _unitOfWorkManager; + + public BooksDataSeedContributor( + IBasicRepository bookRepository, + OrganizationUnitManager organizationUnitManager, + IOrganizationUnitRepository organizationUnitRepository, + IdentityUserManager identityUserManager, + IUnitOfWorkManager unitOfWorkManager) + { + _bookRepository = bookRepository; + _organizationUnitManager = organizationUnitManager; + _organizationUnitRepository = organizationUnitRepository; + _identityUserManager = identityUserManager; + _unitOfWorkManager = unitOfWorkManager; + } + + public virtual async Task SeedAsync(DataSeedContext context) + { + using (var uow = _unitOfWorkManager.Begin()) + { + var usa = await _organizationUnitRepository.FindAsync(UsaBranchId); + if (usa == null) + { + await _organizationUnitManager.CreateAsync(new OrganizationUnit(UsaBranchId, "USA Branch")); + } + + var turkey = await _organizationUnitRepository.FindAsync(TurkeyBranchId); + if (turkey == null) + { + await _organizationUnitManager.CreateAsync(new OrganizationUnit(TurkeyBranchId, "Turkey Branch")); + } + + await uow.SaveChangesAsync(); + + var admin = await _identityUserManager.FindByNameAsync("admin"); + Check.NotNull(admin, "admin"); + + await _identityUserManager.AddToOrganizationUnitAsync(admin.Id, UsaBranchId); + await _identityUserManager.AddToOrganizationUnitAsync(admin.Id, TurkeyBranchId); + + if (await _bookRepository.GetCountAsync() <= 0) + { + await _bookRepository.InsertAsync(new Book + { + Name = "1984", + Isbn = "978-0451524935", + OrganizationId = UsaBranchId + }); + + await _bookRepository.InsertAsync(new Book + { + Name = "Animal Farm", + Isbn = "978-0451526342", + OrganizationId = UsaBranchId + }); + + await _bookRepository.InsertAsync(new Book + { + Name = "Brave New World", + Isbn = "978-0060850524", + OrganizationId = UsaBranchId + }); + + await _bookRepository.InsertAsync(new Book + { + Name = "Fahrenheit 451", + Isbn = "978-1451673319", + OrganizationId = TurkeyBranchId + }); + + await _bookRepository.InsertAsync(new Book + { + Name = "The Catcher in the Rye", + Isbn = "978-0316769488", + OrganizationId = TurkeyBranchId + }); + + await _bookRepository.InsertAsync(new Book + { + Name = "To Kill a Mockingbird", + Isbn = "978-0061120084", + OrganizationId = TurkeyBranchId + }); + } + + await uow.CompleteAsync(); + } + } +} +``` + +## Web Page Implementation + +We will add a dropdown list to the top right corner of the page to allow users to select the organization they belong to. When the dropdown list changes, we will call the application service api to change the current `organization id`. + +```csharp +public class OrganizationUnitComponent : AbpViewComponent +{ + public async Task InvokeAsync() + { + var currentOrganizationAppService = LazyServiceProvider.GetRequiredService(); + var organizationDtos = await currentOrganizationAppService.GetOrganizationListAsync(); + var currentOrganizationId = await currentOrganizationAppService.GetCurrentOrganizationIdAsync(); + return View("/Components/OrganizationUnits/Default.cshtml", new OrganizationUnitComponentModel + { + CurrentOrganizationId = currentOrganizationId, + OrganizationDtos = organizationDtos + }); + } +} + +public class OrganizationUnitComponentModel +{ + public Guid? CurrentOrganizationId { get; set; } + + public List OrganizationDtos { get; set; } +} +``` + +```html +@using Microsoft.AspNetCore.Mvc.TagHelpers +@using Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers +@model BookStore.Web.Components.OrganizationUnits.OrganizationUnitComponentModel + +
+ + + + +
+ + +``` + +Add the `OrganizationUnitComponent` to the toolbar. + +```csharp +public class BookStoreToolbarContributor : IToolbarContributor +{ + public virtual Task ConfigureToolbarAsync(IToolbarConfigurationContext context) + { + // ... + + if (context.Toolbar.Name == StandardToolbars.Main) + { + context.Toolbar.Items.Add(new ToolbarItem(typeof(OrganizationUnitComponent)).RequireAuthenticated()); + } + + return Task.CompletedTask; + } +} +``` + +In addition, we also need to add a middleware after `UseAuthorization` to change the current `organization id`. + +```csharp +app.UseAuthorization(); +app.Use(async (httpContext, next) => +{ + var currentUser = httpContext.RequestServices.GetRequiredService(); + var cacheKey = currentUser.Id.ToString() + ":" + currentUser.GetBrowserInfo(); + var cache = httpContext.RequestServices.GetRequiredService>(); + var cacheItem = await cache.GetAsync(cacheKey); + if (cacheItem != null) + { + var currentOrganizationIdProvider = httpContext.RequestServices.GetRequiredService(); + currentOrganizationIdProvider.Change(cacheItem.OrganizationId); + } + await next(httpContext); +}); +// ... +``` + +The `Index` page will show the books based on the current `organization id`. + +```cshtml +public class IndexModel : BookStorePageModel +{ + public List Books { get; set; } = new List(); + public string? OrganizationName { get; set; } + + protected readonly IBookAppService BookAppService; + protected readonly ICurrentOrganizationAppService CurrentOrganizationAppService; + protected readonly IOrganizationUnitRepository OrganizationUnitRepository; + + public IndexModel( + IBookAppService bookAppService, + ICurrentOrganizationAppService currentOrganizationAppService, + IOrganizationUnitRepository organizationUnitRepository) + { + BookAppService = bookAppService; + CurrentOrganizationAppService = currentOrganizationAppService; + OrganizationUnitRepository = organizationUnitRepository; + } + + public async Task OnGetAsync() + { + if (CurrentUser.IsAuthenticated) + { + var currentOrganizationId = await CurrentOrganizationAppService.GetCurrentOrganizationIdAsync(); + if (currentOrganizationId.HasValue) + { + OrganizationName = (await OrganizationUnitRepository.GetAsync(currentOrganizationId.Value)).DisplayName; + } + + Books = await BookAppService.GetListAsync(); + } + } +} +``` + +```html +@page +@model BookStore.Web.Pages.IndexModel +@using Microsoft.AspNetCore.Mvc.Localization +@using BookStore.Localization +@inject IHtmlLocalizer L + +@if (!Model.OrganizationName.IsNullOrEmpty()) +{ +
The books belonging to @Model.OrganizationName organization
+} + +
    + @foreach(var book in Model.Books) + { +
  • Book Name: @book.Name, ISBN: @book.Isbn
  • + } +
+``` + +### Final UI + +The final UI will look like this: + +The index page will show empty if the current organization id is not set. +After selecting the organization unit, the index page will show the books based on the selected organization unit. + +![1](1.png) + +![2](2.png) + +![3](3.png) + +## Summary + +In this blog post. We showd simple implementation of switching between organization units. You can extend this implementation to meet your requirements. + +After [ABP 8.3](https://github.com/abpframework/abp/pull/20065) we introduced [User-defined function mapping](https://learn.microsoft.com/en-us/ef/core/querying/user-defined-function-mapping) feature for global filters which will gain performance improvements. + +## References + +- [Data Filtering](https://abp.io/docs/latest/framework/infrastructure/data-filtering) +- [Claims Principal Factory](https://abp.io/docs/latest/framework/fundamentals/authorization#claims-principal-factory) diff --git a/docs/en/Blog-Posts/2024-08-01-switching-between-organization-units/cover.jpg b/docs/en/Blog-Posts/2024-08-01-switching-between-organization-units/cover.jpg new file mode 100644 index 0000000000..3503744fbc Binary files /dev/null and b/docs/en/Blog-Posts/2024-08-01-switching-between-organization-units/cover.jpg differ diff --git a/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/POST.md b/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/POST.md new file mode 100644 index 0000000000..69da89f2c0 --- /dev/null +++ b/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/POST.md @@ -0,0 +1,78 @@ +# New ABP Documentation System: Everything You Need In One Place 📣 + +We have combined the ABP (open-source) and ABP Commercial (paid) documents into a single, comprehensive resource. This unification brings you a better experience in the documentation system, helps you find what you're looking for more easily, allows you to read the documents that are related to each other one after the other, and also provides Google Search and Google Translation support for the documents. + +![](blog-cover.png) + +Let's see what's new with the unified documentation system in detail: + +## All Documentation In One Place 📃 + +We decided to combine the ABP (open-source) and ABP Commercial (paid) documents into a single place, along with [the new ABP Platform Unification](https://abp.io/blog/new-abp-platform-is-live). + +The new documentation address is [abp.io/docs](https://abp.io/docs) and seen like below: + +![](abp-docs.png) + +This unified documentation brings you a better search capability with Google Search support, allows you to not need to switch between documentation websites to read both framework and commercial features, look what you are looking for more easily from the unified menu structure, following new features and their documentation in a more stable and easier way. + +## Accessing Documents with Older VersionsđŸ—ƒïž + +From v8.2, with the new documentation system, since we merged all documents into a single place, you don't need to select if you want to show a framework or commercial document. However, if you want to access an old document, for example, if you are using an older version of ABP or don't want to create the solutions from ABP Studio and instead prefer ABP CLI (in the getting started and startup template docs, ABP Studio is shown for project creation and other features, for instance), you can change the version from the version select-box (prior to v8.2), and select which document type (framework or commercial) you want to read and then find/choose the document that you want: + +![](old-docs.png) + +You can access any old-version document as you would before, by specifying the version. But we suggest you update your solution to v8.2+ and start using ABP Studio! By doing that, you can get more benefits from the new features, and edge-cutting features of ABP Studio and easily manage your application from development to production! + +## Documentation Updates 🚀 + +With the [announcement of ABP Studio (beta) General Availability](https://abp.io/blog/announcing-abp-studio-general-availability), we made some improvements in our documents. Starting from v8.2, since ABP Studio is the suggested way to create and manage your applications, we updated the [Get started](https://abp.io/docs/latest/get-started) documentation and some other documents along with, and explained project creation via ABP Studio. If you prefer [creating a new solution with the ABP CLI](https://abp.io/docs/latest/cli), you can use the new ABP CLI as you did the old one before. + +Besides that, we revised all of our documents, updated most of them according to the [new ABP Platform unification](https://abp.io/blog/new-abp-platform-is-live). For example, we merged our migration guide documents into single documents for each version and categorized the related topics you need to do when updating your solutions under the **open-source** and **pro** sections, so either you are an open-source template user or a license owner, you can easily jump to the related section and read them easily and accordingly: + +![](in-this-document.png) + +Since we combined ABP (framework) and ABP Commercial documents, we added information notes in each document that indicate if the related feature is in your license plan or not. An example screenshot from ABP Suite documentation can be seen as follow: + +![](suite-license-note.png) + +Also, for the application modules, we added **(PRO)** postfixes in the navigation menu for you to easily understand if the module is for license owners or open-source users. Thanks to that you can easily distinguish the related application modules and read the related module documentation to understand it: + +![](pro-modules.png) + + +## New Navigation Tree 📚 + +With the documentation unification, we re-structured the navigation tree of the documents: + +![](navigation-menu.png) + +The new navigation tree allows you to find any document you want in a more desired way, in the related sub-menu. For example, if you want to learn more about *modularity*, you can find under the **Framework > Architecture > Modularity** menu items, or if you want to learn more about the ABP Studio, you can find the all related docs under the root **Tools** menu. + +## Google Translate & Search Capabilities 🔎 + +In ABP v8.3, we made some improvements in the [Docs Module](https://abp.io/docs/8.3/modules/docs), added Google Search support for better findings in the documentation, and introduced Google Translation for the documentation system. After implementing these features, we integrated them into our documentation system and removed the languages select box from the menu: + +![](google-translate-and-search.png) + +From now on, we will provide documents in English only. The reason behind that is, that with the new Google Translate support, you can directly translate any documentation to the desired language (of course, must be one of the supported languages). Thanks to the Google Translate feature, you can read the official documentation in your own language, and we as the core team, don't need to synchronize the documentation between different languages, it was really hard to keep them up to date, and now they all will be available all the time in the all supported languages. + +![](google-search-result.png) + +Also, thanks to Google Search, now you can search specific keywords to easily find the related topic in the documentation. For example, if you search the **Validation** keyword, Google will list all related documents according to their importance and relevancy: + +## Feedbacks 📝 + +Besides all changes, we also added a **feedback section** at the end of each document. You can share your thoughts, suggestions, or criticism for specific documentation. We would like to hear more from you about our documentation quality and get suggestions from each one of you to improve our documents and platform, so it will be much appreciated if you share your feedback for any documentation you want, please don't hesitate! + +![](docs-feedbacks.png) + +You can either directly scroll down to the bottom directly for a certain document, or click the **Feedback** action button to navigate to the feedbacks section, and provide feedback: + +![](docs-feedback-section.png) + +## Conclusion 🎯 + +To see the new ABP documentation system, please visit the [abp.io/docs](https://abp.io/docs/latest/) website. Check out the new navigation tree, read the documents you want, provide feedback to help us improve our documents, and more... + +We look forward to your feedback and continued support as we grow together! Thanks in advance 🙏 diff --git a/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/abp-docs.png b/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/abp-docs.png new file mode 100644 index 0000000000..7dbf8f7912 Binary files /dev/null and b/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/abp-docs.png differ diff --git a/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/blog-cover.png b/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/blog-cover.png new file mode 100644 index 0000000000..4aa3bd0222 Binary files /dev/null and b/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/blog-cover.png differ diff --git a/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/docs-feedback-section.png b/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/docs-feedback-section.png new file mode 100644 index 0000000000..68dddcad64 Binary files /dev/null and b/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/docs-feedback-section.png differ diff --git a/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/docs-feedbacks.png b/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/docs-feedbacks.png new file mode 100644 index 0000000000..6584dfc015 Binary files /dev/null and b/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/docs-feedbacks.png differ diff --git a/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/google-search-result.png b/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/google-search-result.png new file mode 100644 index 0000000000..082c567f8c Binary files /dev/null and b/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/google-search-result.png differ diff --git a/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/google-translate-and-search.png b/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/google-translate-and-search.png new file mode 100644 index 0000000000..9398fa1070 Binary files /dev/null and b/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/google-translate-and-search.png differ diff --git a/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/in-this-document.png b/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/in-this-document.png new file mode 100644 index 0000000000..46c8de76da Binary files /dev/null and b/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/in-this-document.png differ diff --git a/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/navigation-menu.png b/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/navigation-menu.png new file mode 100644 index 0000000000..7b4fdbba8e Binary files /dev/null and b/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/navigation-menu.png differ diff --git a/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/old-docs.png b/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/old-docs.png new file mode 100644 index 0000000000..269159c651 Binary files /dev/null and b/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/old-docs.png differ diff --git a/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/pro-modules.png b/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/pro-modules.png new file mode 100644 index 0000000000..8556ff38af Binary files /dev/null and b/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/pro-modules.png differ diff --git a/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/suite-license-note.png b/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/suite-license-note.png new file mode 100644 index 0000000000..3459635322 Binary files /dev/null and b/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/suite-license-note.png differ diff --git a/docs/en/Blog-Posts/2024-09-06 v8_3_Release_Stable/POST.md b/docs/en/Blog-Posts/2024-09-06 v8_3_Release_Stable/POST.md new file mode 100644 index 0000000000..e69fbb86ea --- /dev/null +++ b/docs/en/Blog-Posts/2024-09-06 v8_3_Release_Stable/POST.md @@ -0,0 +1,77 @@ +# ABP.IO Platform 8.3 Final Has Been Released! + +![](cover-image.png) + +[ABP](https://abp.io/) 8.3 stable version has been released today. + +## What's New With Version 8.3? + +All the new features were explained in detail in the [8.3 RC Announcement Post](https://blog.abp.io/abp/announcing-abp-8-3-release-candidate), so there is no need to review them again. You can check it out for more details. + +## Getting Started with 8.3 + +### Creating New Solutions + +You can check the [Get Started page](https://abp.io/get-started) to see how to get started with ABP. You can either download [ABP Studio](https://abp.io/get-started#abp-studio-tab) (**recommended**, if you prefer a user-friendly GUI application - desktop application) or use the [ABP CLI](https://abp.io/docs/latest/cli) to create new solutions. + +By default, ABP Studio uses stable versions to create solutions. Therefore, it will be creating the solution with the latest stable version, which is v8.3 for now, so you don't need to specify the version. + +### How to Upgrade an Existing Solution + +You can upgrade your existing solutions with either ABP Studio or ABP CLI. In the following sections, both approaches are explained: + +### Upgrading via ABP Studio + +If you are already using the ABP Studio, you can upgrade it to the latest version to align it with ABP v8.3. ABP Studio periodically checks for updates in the background, and when a new version of ABP Studio is available, you will be notified through a modal. Then, you can update it by confirming the opened modal. See [the documentation](https://abp.io/docs/latest/studio/installation#upgrading) for more info. + +After upgrading the ABP Studio, then you can open your solution in the application, and simply click the **Switch to stable** action button to instantly upgrade your solution: + +![](switch-to-stable.png) + +### Upgrading via ABP CLI + +Alternatively, you can upgrade your existing solution via ABP CLI. First, you need to install the ABP CLI or upgrade it to the latest version. + +If you haven't installed it yet, you can run the following command: + +```bash +dotnet tool install -g Volo.Abp.Studio.Cli +``` + +Or to update the existing CLI, you can run the following command: + +```bash +dotnet tool update -g Volo.Abp.Studio.Cli +``` + +After installing/updating the ABP CLI, you can use the [`update` command](https://abp.io/docs/latest/CLI#update) to update all the ABP related NuGet and NPM packages in your solution as follows: + +```bash +abp update +``` + +> You can run this command in the root folder of your solution. + +## Migration Guides + +There are a few breaking changes in this version that may affect your application. Please read the migration guide carefully, if you are upgrading from v8.2 or earlier: [ABP Version 8.3 Migration Guide](https://abp.io/docs/8.3/release-info/migration-guides/abp-8-3) + +## Community News + +### New ABP Community Posts + +As always, exciting articles have been contributed by the ABP community. I will highlight some of them here: + +* [Alper Ebicoglu](https://twitter.com/alperebicoglu) has created **three** new community articles: + * [Do You Really Need Multi-tenancy?](https://abp.io/community/articles/do-you-really-need-multitenancy-hpwn44r3) + * [What is Angular Schematics?](https://abp.io/community/articles/what-is-angular-schematics-2z4jusf5) + * [Understanding Angular AOT vs JIT Compilations](https://abp.io/community/articles/understanding-angular-aot-vs-jit-compilations-0r0a0a3f) +* [Dynamic Widget Communication](https://abp.io/community/articles/dynamic-widget-communication-uvun7q23) by [Suhaib Mousa](https://suhaibmousa.com/) +* [Introducing the Google Cloud Storage BLOB Provider](https://abp.io/community/articles/introducing-the-google-cloud-storage-blob-provider-yrt6azc0) by [Engincan Veske](https://twitter.com/EngincanVeske) +* [Switching Between Organization Units](https://abp.io/community/articles/switching-between-organization-units-i5tokpzt) by [Liming Ma](https://github.com/maliming) + +Thanks to the ABP Community for all the content they have published. You can also [post your ABP-related (text or video) content](https://abp.io/community/posts/submit) to the ABP Community. + +## About the Next Version + +The next feature version will be 9.0. You can follow the [release planning here](https://github.com/abpframework/abp/milestones). Please [submit an issue](https://github.com/abpframework/abp/issues/new) if you have any problems with this version. \ No newline at end of file diff --git a/docs/en/Blog-Posts/2024-09-06 v8_3_Release_Stable/cover-image.png b/docs/en/Blog-Posts/2024-09-06 v8_3_Release_Stable/cover-image.png new file mode 100644 index 0000000000..875be518af Binary files /dev/null and b/docs/en/Blog-Posts/2024-09-06 v8_3_Release_Stable/cover-image.png differ diff --git a/docs/en/Blog-Posts/2024-09-06 v8_3_Release_Stable/switch-to-stable.png b/docs/en/Blog-Posts/2024-09-06 v8_3_Release_Stable/switch-to-stable.png new file mode 100644 index 0000000000..30883ebf92 Binary files /dev/null and b/docs/en/Blog-Posts/2024-09-06 v8_3_Release_Stable/switch-to-stable.png differ diff --git a/docs/en/Community-Articles/2024-08-28-Understanding-AOT-vs-JIT/POST.md b/docs/en/Community-Articles/2024-08-28-Understanding-AOT-vs-JIT/POST.md new file mode 100644 index 0000000000..c28a80af5e --- /dev/null +++ b/docs/en/Community-Articles/2024-08-28-Understanding-AOT-vs-JIT/POST.md @@ -0,0 +1,64 @@ + + +![book](images/book.jpg) + +Ahead-of-Time (AOT) compilation and Just-in-Time (JIT) compilation are two different methods for compiling Angular applications. Here's a breakdown of the differences between them: + +### **Ahead-of-Time (AOT) Compilation** + +**What is AOT?** + +- AOT compilation refers to the process of compiling your Angular application during the build phase, before the application is served to the browser. +- The Angular compiler converts your TypeScript and HTML templates into efficient JavaScript code ahead of time. + +**Advantages:** + +1. **Faster Rendering:** Since the compilation is done beforehand, the browser receives precompiled code, leading to faster rendering and better performance when the app loads. +2. **Smaller Bundle Size:** AOT eliminates the need for the Angular compiler in the client-side bundle, which reduces the overall bundle size. +3. **Improved Security:** AOT compilation checks your templates and bindings during the build process, catching errors early and reducing the risk of injection attacks. +4. **Early Error Detection:** Errors related to templates and bindings are caught during the build time rather than at runtime, leading to more robust and error-free applications. + +**When to Use:** + +- AOT is typically used in production builds because it provides better performance, smaller bundles, and more secure applications. + +**How to Use:** + +- AOT is the default when you run `ng build --prod` in an Angular project. + +### **Just-in-Time (JIT) Compilation** + +**What is JIT?** + +- JIT compilation occurs in the browser at runtime. The Angular compiler translates the TypeScript and HTML templates into JavaScript code just before the application runs in the browser. +- The application is compiled on the fly as the user interacts with it. + +**Advantages:** + +1. **Faster Build Time:** Since there’s no pre-compilation step, the build process is faster during development. +2. **More Flexible Development:** JIT allows for rapid iteration during development, as changes can be quickly reflected without needing to rebuild the entire application. +3. **Dynamic Components:** JIT allows for more flexibility in scenarios where components need to be dynamically created or compiled at runtime. + +**When to Use:** + +- JIT is typically used in development environments because it allows for quicker build times and easier debugging. + +**How to Use:** + +- JIT is the default compilation method when you run `ng serve` for development builds in Angular. + +### **Comparison Summary:** + +| Feature | AOT (Ahead-of-Time) | JIT (Just-in-Time) | +| ---------------------- | ----------------------------- | ---------------------------------- | +| **Compilation Timing** | At build time | At runtime | +| **Performance** | Faster application startup | Slower application startup | +| **Bundle Size** | Smaller (no Angular compiler) | Larger (includes Angular compiler) | +| **Error Detection** | Catches template errors early | Errors caught at runtime | +| **Use Case** | Production | Development | +| **Dynamic Components** | Less flexible | More flexible | + +### **Best Practices:** + +- **Use AOT** for production builds to ensure faster load times, smaller bundle sizes, and more secure applications. +- **Use JIT** during development to take advantage of quicker builds and easier debugging. \ No newline at end of file diff --git a/docs/en/Community-Articles/2024-08-28-Understanding-AOT-vs-JIT/images/book.jpg b/docs/en/Community-Articles/2024-08-28-Understanding-AOT-vs-JIT/images/book.jpg new file mode 100644 index 0000000000..a34fd1ff87 Binary files /dev/null and b/docs/en/Community-Articles/2024-08-28-Understanding-AOT-vs-JIT/images/book.jpg differ diff --git a/docs/en/Community-Articles/2024-08-28-Understanding-AOT-vs-JIT/images/cover.png b/docs/en/Community-Articles/2024-08-28-Understanding-AOT-vs-JIT/images/cover.png new file mode 100644 index 0000000000..418eb5ff22 Binary files /dev/null and b/docs/en/Community-Articles/2024-08-28-Understanding-AOT-vs-JIT/images/cover.png differ diff --git a/docs/en/Community-Articles/2024-08-29-What-is-Angular-Schematics/Post.md b/docs/en/Community-Articles/2024-08-29-What-is-Angular-Schematics/Post.md new file mode 100644 index 0000000000..c13c5ab345 --- /dev/null +++ b/docs/en/Community-Articles/2024-08-29-What-is-Angular-Schematics/Post.md @@ -0,0 +1,85 @@ +# What is Angular Schematics? + +![Cover Image](cover.png) + +**Angular Schematics** is a powerful tool which is part of the Angular CLI that allows developers to automate various development tasks by **generating and modifying code**. Schematics provides a way to create **templates and boilerplate code** for Angular applications or libraries, enabling consistency and reducing the amount of repetitive work. + +### Key Concepts of Angular Schematics: + +1. **Code Generation:** + - Schematics can generate boilerplate code for various Angular artifacts, such as components, services, modules, pipes... For example, when you run a command like `ng generate component my-component`, Angular uses a schematic to create the component files and update the necessary modules. + +2. **Code Modification:** + - Schematics can also modify existing code in your project. This includes tasks like updating configuration files, adding new routes, or modifying Angular modules. They can be very useful when upgrading projects to a new version of Angular or adding new features that require changes to the existing codebase. + +3. **Custom Schematics:** + - Developers can create their own custom schematics to automate repetitive tasks specific to their projects. For example, if your team frequently needs to set up a certain type of service or configure specific libraries, you can create a schematic that automates these steps. In [ABP Suite](https://abp.io/suite), we use the custom schematics templates to generate CRUD pages for Angular UI. + +4. **Collection of Schematics:** + - Schematics are often grouped into collections. The Angular CLI itself is a collection of schematics. You can create your own collection or use third-party schematic collections created by the Angular community. + +5. **Integration with Angular CLI:** + - Schematics is integrated with the Angular CLI. The `ng generate` and `ng add` commands are examples of how schematics are used in everyday Angular development. When you use these commands, the Angular CLI runs the corresponding schematic to perform the desired operation. + +6. **Upgrade Tasks:** + - Schematics can be used to automate the process of upgrading Angular applications. For example, the Angular Update command (`ng update`) uses schematics to automatically apply necessary changes to your project when upgrading to a new version of Angular. + +### Common Use Cases: + +- **Generating Components, Services, Modules.:** Easily create Angular building blocks with commands like `ng generate component`, `ng generate service`, or `ng generate module`. + +- **Adding Libraries:** Automatically set up and configure third-party libraries with `ng add`. For example, `ng add @angular/material` uses a schematic to install and configure Angular Material in your project. + +- **Automating Project Upgrades:** Simplify the process of upgrading Angular versions by running `ng update`, which uses schematics to make necessary code changes. + +- **Custom Project Scaffolding:** Create custom schematics to enforce your team's development standards and best practices by automating the creation of specific project structures. + +### How to Create a Custom Schematic: + +Creating a custom schematic involves several steps: +1. **Install the Schematics CLI:** + ```bash + npm install -g @angular-devkit/schematics-cli + ``` + +2. **Create a New Schematic Project:** + ```bash + schematics blank --name=my-schematic + cd my-schematic + ``` + +3. **Define Your Schematic:** Modify the files in the schematic project to define what your schematic will generate or modify. + +4. **Test Your Schematic:** You can run your schematic locally using the `schematics` command. + +5. **Publish Your Schematic (Optional):** Once your schematic is ready, you can publish it to npm or include it in your Angular projects. + +#### Example: +If you want to create a custom component with specific settings or styles, you can create a schematic to automate this. Every time a developer on your team needs to create this type of component, they can run the schematic, ensuring consistency across the project. + + + +### Helpful Links + +Here are the direct links for the Angular Schematics resources: + +- [Angular Official Documentation: Schematics Overview — angular.io](https://angular.io/guide/schematics) + +- [Creating Custom Schematics — angular.io](https://angular.io/guide/schematics-for-libraries) + +- [CLI Schematic Command — angular.io](https://angular.io/cli/schematic) + +- [Devkit Schematics— github.com](https://github.com/angular/angular-cli/tree/main/packages/angular_devkit/schematics) + +- [Schematics Examples — github.com](https://github.com/angular/angular-cli/tree/main/packages/schematics/angular) + +- [Debugging Angular Schematics — dev.to](https://dev.to/nikolasleblanc/debugging-angular-schematics-1ne0) + +- [Using Schematics with Nx — nx.dev](https://nx.dev/guides/using-angular-schematics) + +- [Schematics API — angular.io](https://angular.io/api/schematics) + + + +### Conclusion: +Angular Schematics is a powerful tool for automating repetitive tasks, generating consistent code, and managing project upgrades. By leveraging schematics, Angular developers can save time, reduce errors, and enforce best practices across their projects. \ No newline at end of file diff --git a/docs/en/Community-Articles/2024-08-29-What-is-Angular-Schematics/cover.png b/docs/en/Community-Articles/2024-08-29-What-is-Angular-Schematics/cover.png new file mode 100644 index 0000000000..3e155996e8 Binary files /dev/null and b/docs/en/Community-Articles/2024-08-29-What-is-Angular-Schematics/cover.png differ diff --git a/docs/en/Community-Articles/2024-09-01-Do-You-Need-MultiTenancy/Post.md b/docs/en/Community-Articles/2024-09-01-Do-You-Need-MultiTenancy/Post.md new file mode 100644 index 0000000000..b80917f4c4 --- /dev/null +++ b/docs/en/Community-Articles/2024-09-01-Do-You-Need-MultiTenancy/Post.md @@ -0,0 +1,123 @@ +# Do You Really Need Multi-tenancy? + +This article discusses whether you need a multi-tenancy architecture for your next project. Answer my critical questions to decide if multi-tenancy suits your application or not! + +![Cover image](cover.png) + +## What’s Multi-tenancy? + +It’s an architectural approach to building SaaS solutions. In this model, the hardware and software resources are shared between tenants, and application data is virtually or physically isolated between tenants. Here, **the main goal is minimizing costs and maximizing customer count**. + +**An ideal multi-tenant application should be;** + +- A multi-tenancy system should be designed to **work seamlessly** and make your application code **multi-tenancy aware** as much as possible. +- When a customer wants to separate their database, it **should also be deployable to on-premise**. + + +![Tenancy Schema](tenancy-schema.png) + + +--- + + + +## Multi-tenant Development is Hard - Reconsider! + +**Developing a multi-tenant application is harder** compared to non-multi-tenant applications. You add `TenandId` to all your shared entities. And each time you make a query, you need to filter by `TenantId`. There is an increased risk of security breaches if one tenant's data is compromised. Multi-tenancy can limit the extent of customization available to each tenant since they all operate on the same core infrastructure. Also, in a microservice environment, things get two times more complicated. So you should carefully consider if you need multi-tenancy or not. Sometimes, I got questions like; + +![Questions](questions.png) + +**No! These are not multi-tenant applications.** It just needs a simple filtering by your different branches/faculties/departments/holding sub-companies/ groups or whatever hierarchy is
 +**You are confusing "grouping" with "resource sharing".** + +--- + + + +## Do I Really Need Multi-tenancy? + +Ask yourself the following questions if you cannot decide whether your app needs multi-tenancy or not; + +1. Can a user be shared among other tenants? +2. Any tenant needs to see other tenant's data? +3. Does your application break when you physically move one of the tenants? +4. Do your customers need higher security and better GDPR enforcement? +5. Do you need cumulative queries over your tenants? + + + +Let's answer these questions; + + + +##### **1. Can a user be shared among other tenants?** + +If you need to *share a user among other tenants, or in other words, users can be members of different tenants,* then **your application is definitely not multi-tenant**! Multi-tenancy means a tenant’s data is always isolated, even if it’s logically separated. **You cannot share a user among your tenants.** The reason is simple: In the future, if you move a tenant to on-premise, then your application will break! + +![user-multiple-membership](user-multiple-membership.png) + +##### **2. Does any tenant need to see other tenants' data?** + +If your answer is **YES**, **then** **your application is not multi-tenant**. In multi-tenant apps, the tenant's data cannot be shared in any circumstances among the other tenants. Business decision-makers sometimes want to share some entities with other tenants. If there's this requirement, you shouldn't start a multi-tenant architecture. You can simply group these tenants manually. Again, reply to this question; **In the future, if I move a tenant physically to another environment, will my app still work properly?** In this case, it will not! + +![Shared entity](shared-entity.png) + +Let's say your app is *Amazon.com* and you have a product entity *iPhone* that you want to share with other sellers. This requirement violates the multi-tenant rule. While your *Amazon.com* is still SaaS, it shouldn't be multi-tenant. + +On the other hand, if you serve several online shopping websites dedicated to different brands. Let's say Nike and Adidas want to have their own e-commerce websites. And your ***Amazon.com* provides these companies with their own subdomains: *nike.amazon.com* and *adidas.amazon.com***. In this architecture, these companies will have their own user, roles, settings. Also these companies will have their own branding like custom login screen, custom logo, different theme layouts, menu items, language options, payment gateways etc... Hence, **this is %100 multi-tenant.** + + + +##### **3. Does your application break when you physically move one of the tenants?** + +If your answer is **YES**, you should **stop making it multi-tenant**. It is **not a multi-tenant app**! This means your tenants are tightly coupled with the application's infrastructure or database, and this requirement prevents you from making it multi-tenant because it disrupts the entire system when you take out a tenant. + +![Coupled Tenants](coupled-tenants.png) + + +##### **4. Do your customers need higher security and better GDPR enforcement?** + +If your answer is **YES**, you **should not make it multi-tenancy.** When a **hacker** gets into your server, he can **steal all your client data**. Also, if you have a security hole, **a tenant can gain access** to other tenants' data. Especially your tenants' data is being shared in the same database... On the other hand, some customers, for example, government agencies or banks, may be required to locate the database in their own geo-location and make it unreachable from the main application. In this case, you should go with a single-tenant architecture. Another difficulty is that some tenants may have **different data retention policies**, so you must implement different strategies for each tenant. In this case, you should also consider making it a single-tenant. + +![Security GDPR Data Retention](security-gdpr-db-retention.png) + +##### **5. Do you need cumulative queries over your tenants?** + +This question is not a clear decision parameter for multi-tenancy. But it can be a supportive parameter for your decision. Actually, this is a common feature in multi-tenant systems where aggregated reporting or analytics across tenants is required. In a virtually isolated multi-tenant environment, you can easily do this by just disabling the multi-tenancy filter. However, when some of your tenants have separate databases or application instances, it becomes harder to get aggregate reports. + +Do you need cumulative queries over your tenants? If your answer is YES, then you should keep all your tenants' data in a shared database to easily query them. But if you still need to physically move some of the tenants, then you have the following strategies: + +* First, all your databases need to be on the same network so that you can gather data from different databases. +* Second, in some cases, according to the GDPR requirements or government agency regulations, you must locate the database in their geo-location. And you cannot connect to these databases. In this case, you can create a Web API in your application that gives you a report for this specific tenant. Later, you'll gather the reports from all your tenants like this and merge them. +* Third; When the tenant databases are in different geo-location (inaccessible), then each tenant can send their report to your central server. So you can generate cumulative reports. + + + +## Conclusion + +- It's important to decide on the first day whether your application needs to be multi-tenant. To decide this, consider these topics; + + - **Do my tenants really have a relationship with each other?** No, they have nothing to do in common; **OK, go with multi-tenancy**. + - **My tenants don't have a relationship** with each other, and the only thing they have in common is sharing my application. **OK, go with multi-tenancy**. + - **When a tenant leaves the system (by removing their data), the other tenants also stop working** This means that the tenants are coupled. **Do not do multi-tenancy!** + + + +--- + + + +![Logo](https://abp.io/assets/platform/img/logos/logo-abp-dark.svg) + +We’ve been working for a long time on multi-tenancy, microservices, modular development topics, and developing tools and frameworks for repetitive development tasks. Check out the amazing open-source [ABP Framework](https://github.com/abpframework/abp), which provides all the alternative solutions to implement a multi-tenant architecture. The multi-tenancy logic is seamlessly done at the core level, and you can simply focus on your business code. Keep it simple, nice and neat with ABP. + + +```bash +ABP.IO: The Modern Way of Developing Web Apps for .NET Developers! +``` + + + +Alper Ebicoglu / [x.com/alperebicoglu](https://x.com/alperebicoglu) + +— ABP Team diff --git a/docs/en/Community-Articles/2024-09-01-Do-You-Need-MultiTenancy/coupled-tenants.png b/docs/en/Community-Articles/2024-09-01-Do-You-Need-MultiTenancy/coupled-tenants.png new file mode 100644 index 0000000000..5dbe089084 Binary files /dev/null and b/docs/en/Community-Articles/2024-09-01-Do-You-Need-MultiTenancy/coupled-tenants.png differ diff --git a/docs/en/Community-Articles/2024-09-01-Do-You-Need-MultiTenancy/cover.png b/docs/en/Community-Articles/2024-09-01-Do-You-Need-MultiTenancy/cover.png new file mode 100644 index 0000000000..0946615495 Binary files /dev/null and b/docs/en/Community-Articles/2024-09-01-Do-You-Need-MultiTenancy/cover.png differ diff --git a/docs/en/Community-Articles/2024-09-01-Do-You-Need-MultiTenancy/questions.png b/docs/en/Community-Articles/2024-09-01-Do-You-Need-MultiTenancy/questions.png new file mode 100644 index 0000000000..d75731dbef Binary files /dev/null and b/docs/en/Community-Articles/2024-09-01-Do-You-Need-MultiTenancy/questions.png differ diff --git a/docs/en/Community-Articles/2024-09-01-Do-You-Need-MultiTenancy/security-gdpr-db-retention.png b/docs/en/Community-Articles/2024-09-01-Do-You-Need-MultiTenancy/security-gdpr-db-retention.png new file mode 100644 index 0000000000..ae38dae0e2 Binary files /dev/null and b/docs/en/Community-Articles/2024-09-01-Do-You-Need-MultiTenancy/security-gdpr-db-retention.png differ diff --git a/docs/en/Community-Articles/2024-09-01-Do-You-Need-MultiTenancy/shared-entity.png b/docs/en/Community-Articles/2024-09-01-Do-You-Need-MultiTenancy/shared-entity.png new file mode 100644 index 0000000000..bb9b5d979d Binary files /dev/null and b/docs/en/Community-Articles/2024-09-01-Do-You-Need-MultiTenancy/shared-entity.png differ diff --git a/docs/en/Community-Articles/2024-09-01-Do-You-Need-MultiTenancy/tenancy-schema.png b/docs/en/Community-Articles/2024-09-01-Do-You-Need-MultiTenancy/tenancy-schema.png new file mode 100644 index 0000000000..952aca7266 Binary files /dev/null and b/docs/en/Community-Articles/2024-09-01-Do-You-Need-MultiTenancy/tenancy-schema.png differ diff --git a/docs/en/Community-Articles/2024-09-01-Do-You-Need-MultiTenancy/user-multiple-membership.png b/docs/en/Community-Articles/2024-09-01-Do-You-Need-MultiTenancy/user-multiple-membership.png new file mode 100644 index 0000000000..9cd6bcfb48 Binary files /dev/null and b/docs/en/Community-Articles/2024-09-01-Do-You-Need-MultiTenancy/user-multiple-membership.png differ diff --git a/docs/en/ambient-context-pattern.md b/docs/en/ambient-context-pattern.md index 09f57c6cd7..411db43789 100644 --- a/docs/en/ambient-context-pattern.md +++ b/docs/en/ambient-context-pattern.md @@ -1,3 +1,3 @@ -## Ambient Context Pattern +# Ambient Context Pattern This document is planned to be written later. \ No newline at end of file diff --git a/docs/en/aspect-oriented-programming.md b/docs/en/aspect-oriented-programming.md index 64f0fdb256..c578f1e89c 100644 --- a/docs/en/aspect-oriented-programming.md +++ b/docs/en/aspect-oriented-programming.md @@ -1,3 +1,3 @@ -## Dynamic Proxying / Interceptors +# Dynamic Proxying / Interceptors This document is planned to be written later. \ No newline at end of file diff --git a/docs/en/cli/index.md b/docs/en/cli/index.md index 7b4dbd9502..ba3e6aabf8 100644 --- a/docs/en/cli/index.md +++ b/docs/en/cli/index.md @@ -3,6 +3,8 @@ ABP CLI (Command Line Interface) is a command line tool to perform some common operations for ABP based solutions or ABP Studio features. > 🛈 With **v8.2+**, the old/legacy ABP CLI has been replaced with a new CLI system to align with the new templating system and [ABP Studio](../studio/index.md). The new ABP CLI commands are explained in this documentation. However, if you want to learn more about the differences between the old and new CLIs, want to learn the reason for the change, or need guidance to use the old ABP CLI, please refer to the [Old vs New CLI](differences-between-old-and-new-cli.md) documentation. +> +> You may need to remove the Old CLI before installing the New CLI, by running the following command: `dotnet tool uninstall -g Volo.Abp.Cli` ## Installation @@ -67,6 +69,7 @@ Here, is the list of all available commands before explaining their details: * **`install-libs`**: Install NPM Packages for MVC / Razor Pages and Blazor Server UI types. * **`clear-download-cache`**: Clears the templates download cache. * **`check-extensions`**: Checks the latest version of the ABP CLI extensions. +* **`install-old-cli`**: Installs old ABP CLI. ### help @@ -102,6 +105,8 @@ abp cli update abp cli update --preview abp cli update --version 1.0.0 abp cli remove +abp cli check-version +abp cli clear-cache ```` ### new @@ -130,22 +135,22 @@ For more samples, go to [ABP CLI Create Solution Samples](new-command-samples.md * `--template` or `-t`: Specifies the template name. Default template name is `app`, which generates a application solution. Available templates: * **`empty`**: Empty solution template. * **`app`**: Application template. Additional options: - * `--ui` or `-u`: Specifies the UI framework. Default framework is `mvc`. Available frameworks: + * `--ui-framework` or `-u`: Specifies the UI framework. Default framework is `mvc`. Available frameworks: * `mvc`: ASP.NET Core MVC. There are some additional options for this template: * `--tiered`: Creates a tiered solution where Web and Http API layers are physically separated. If not specified, it creates a layered solution which is less complex and suitable for most scenarios. (*Available for* ***Team*** *or higher licenses*) * `angular`: Angular UI. There are some additional options for this template: * `--tiered`: The Auth Server project comes as a separate project and runs at a different endpoint. It separates the Auth Server from the API Host application. If not specified, you will have a single endpoint in the server side. (*Available for* ***Team*** *or higher licenses*) - * `--pwa`: Specifies the project as Progressive Web Application. + * `--progressive-web-app` or `-pwa`: Specifies the project as Progressive Web Application. * `blazor`: Blazor UI. There are some additional options for this template: * `--tiered`The Auth Server project comes as a separate project and runs at a different endpoint. It separates the Auth Server from the API Host application. If not specified, you will have a single endpoint in the server side. (*Available for* ***Team*** *or higher licenses*) - * `--pwa`: Specifies the project as Progressive Web Application. + * `--progressive-web-app` or `-pwa`: Specifies the project as Progressive Web Application. * `blazor-server`: Blazor Server UI. There are some additional options for this template: * `--tiered`: The Auth Server and the API Host project comes as separate projects and run at different endpoints. It has 3 startup projects: *HttpApi.Host*, *AuthServer* and *Blazor* and and each runs on different endpoints. If not specified, you will have a single endpoint for your web project. (*Available for* ***Team*** *or higher licenses*) * `maui-blazor`: Blazor Maui UI (*Available for* ***Team*** *or higher licenses*). There are some additional options for this template: * `--tiered`: The Auth Server and the API Host project comes as separate projects and run at different endpoints. It has 3 startup projects: *HttpApi.Host*, *AuthServer* and *Blazor* and and each runs on different endpoints. If not specified, you will have a single endpoint for your web project. * `no-ui`: Without UI. No front-end layer will be created. There are some additional options for this template: * `--tiered`: The Auth Server project comes as a separate project and runs at a different endpoint. It separates the Auth Server from the API Host application. If not specified, you will have a single endpoint in the server side. (*Available for* ***Team*** *or higher licenses*) - * `--mobile` or `-m`: Specifies the mobile application framework. Default value is `react-native`. Available frameworks: + * `--mobile` or `-m`: Specifies the mobile application framework. Default value is `none`. Available frameworks: * `none`: Without any mobile application. * `react-native`: React Native. * `maui`: MAUI. This mobile option is only available for ABP. (*Available for* ***Team*** *or higher licenses*) @@ -153,15 +158,19 @@ For more samples, go to [ABP CLI Create Solution Samples](new-command-samples.md * `ef`: Entity Framework Core. * `mongodb`: MongoDB. * `--connection-string` or `-cs`: Overwrites the default connection strings in all `appsettings.json` files. The default connection string is `Server=localhost;Database=MyProjectName;Trusted_Connection=True` for EF Core and it is configured to use the SQL Server. If you want to use the EF Core, but need to change the DBMS, you can change it as [described here](../framework/data/entity-framework-core/other-dbms.md) (after creating the solution). + * `--skip-migrations` or `-sm`: Skips the creating initial database migration step. + * `--skip-migrator` or `-smr`: Skips the run database migrator step. * `--public-website`: Public Website is a front-facing website for describing your project, listing your products and doing SEO for marketing purposes. Users can login and register on your website with this website. This option is only included in PRO templates. + * `--without-cms-kit`: When you add a public website to your solution, it automatically includes the [CmsKit](./../modules/cms-kit-pro/index.md) module. If you don't want to include *CmsKit*, you can use this parameter. * `--separate-tenant-schema`: Creates a different DbContext for tenant schema. If not specified, the tenant schema is shared with the host schema. This option is only included in PRO templates. + * `--sample-crud-page` or `-scp`: It adds the [BookStore](./../tutorials/book-store/index.md) sample to your solution. * `--theme` or `-th`: Specifes the theme. Default theme is `leptonx`. Available themes: * `leptonx`: LeptonX Theme. (*Available for* ***Team*** *or higher licenses*) * `leptonx-lite`: LeptonX-Lite Theme. * `basic`: Basic Theme. * `--use-open-source-template`or `-uost`: Uses the open-source template. (*Available for* ***Team*** *or higher licenses*) * **`app-nolayers`**: Single-layer application template. Additional options: - * `--ui` or `-u`: Specifies the UI framework. Default framework is `mvc`. Available frameworks: + * `--ui-framework` or `-u`: Specifies the UI framework. Default framework is `mvc`. Available frameworks: * `mvc`: ASP.NET Core MVC. There are some additional options for this template: * `angular`: Angular UI. There are some additional options for this template: * `blazor`: Blazor UI. There are some additional options for this template: @@ -171,20 +180,23 @@ For more samples, go to [ABP CLI Create Solution Samples](new-command-samples.md * `ef`: Entity Framework Core. * `mongodb`: MongoDB. * `--connection-string` or `-cs`: Overwrites the default connection strings in all `appsettings.json` files. The default connection string is `Server=localhost;Database=MyProjectName;Trusted_Connection=True` for EF Core and it is configured to use the SQL Server. If you want to use the EF Core, but need to change the DBMS, you can change it as [described here](../framework/data/entity-framework-core/other-dbms.md) (after creating the solution). + * `--skip-migrations` or `-sm`: Skips the creating initial database migration step. + * `--skip-migrator` or `-smr`: Skips the run database migrator step. + * `--sample-crud-page` or `-scp`: It adds the [BookStore](./../tutorials/book-store/index.md) sample to your solution. * `--theme`: Specifes the theme. Default theme is `leptonx`. Available themes: * `leptonx`: LeptonX Theme. (*Available for* ***Team*** *or higher licenses*) * `leptonx-lite`: LeptonX-Lite Theme. * `basic`: Basic Theme. * `--use-open-source-template`or `-uost`: Uses the open-source template. (*Available for* ***Team*** *or higher licenses*) * **`microservice`**: Microservice solution template (*Available for* ***Business*** *or higher licenses*). Additional options: - * `--ui` or `-u`: Specifies the UI framework. Default framework is `mvc`. Available frameworks: + * `--ui-framework` or `-u`: Specifies the UI framework. Default framework is `mvc`. Available frameworks: * `mvc`: ASP.NET Core MVC. There are some additional options for this template: * `angular`: Angular UI. There are some additional options for this template: * `blazor`: Blazor UI. There are some additional options for this template: * `blazor-server`: Blazor Server UI. There are some additional options for this template: * `maui-blazor`: Blazor Maui UI. There are some additional options for this template: * `no-ui`: Without UI. No front-end layer will be created. There are some additional options for this template: - * `--mobile` or `-m`: Specifies the mobile application framework. Default value is `react-native`. Available frameworks: + * `--mobile` or `-m`: Specifies the mobile application framework. Default value is `none`. Available frameworks: * `none`: Without any mobile application. * `react-native`: React Native. * `maui`: MAUI. @@ -208,6 +220,7 @@ For more samples, go to [ABP CLI Create Solution Samples](new-command-samples.md * `--dont-run-install-libs`: Skip installing client side packages. * `--dont-run-bundling`: Skip bundling for Blazor packages. * `--no-kubernetes-configuration` or `-nkc`: Skips the Kubernetes configuration files. +* `--no-social-logins` or `-nsl`: Skipts the social login configuration. * *Module Options*: You can skip some modules if you don't want to add them to your solution (*Available for* ***Team*** *or higher licenses*). Available commands: * `-no-saas`: Skips the Saas module. * `-no-gdpr`: Skips the GDPR module. @@ -779,6 +792,7 @@ abp switch-to-local --paths "D:\Github\abp|D:\Github\my-repo" ### upgrade Upgrades the ABP modules to pro modules, such as upgrading [Identity](../modules/identity.md) to [Identity Pro](../modules/identity-pro.md). You can use this for [Single Layer Web Application](../solution-templates/single-layer-web-application/index.md) and [Layered Web Application](../solution-templates/layered-web-application/index.md) templates. +This command is specially designed for users who already started their development before having a license. Therefore this command requires license. Usage: @@ -790,12 +804,19 @@ Examples: ````bash abp upgrade -t app +abp upgrade -t app --language-management --gdpr --audit-logging-ui --text-template-management --openiddict-pro +abp upgrade -t app-nolayers --audit-logging-ui abp upgrade -t app-nolayers -p D:\MyProjects\MyProject ```` #### Options * `--path` or `-p`: Specifies the module path. The module should be in that directory. If not specified, the default is the current directory. +* `--gdpr`: Installs GDPR module too. +* `--language-management`: Installs Language Management module too. +* `--audit-logging-ui`: Installs Audit Logging Pro (UI) module too. +* `--text-template-management`: Installs Text Template Management module too. +* `--openiddict-pro`: Installs OpenIddict Pro (UI) module too. ### translate @@ -903,6 +924,7 @@ abp bundle [options] * ```--project-type``` or ```-t```: Specifies the project type. Default type is `webassembly`. Available types: * `webassembly` * `maui-blazor` +* `--version` or `-v`: Specifies the ABP Framework version that the project is using. This is helpful for those who use central package management. `bundle` command reads the `appsettings.json` file inside the Blazor and MAUI Blazor project for bundling options. For more details about managing style and script references in Blazor or MAUI Blazor apps, see [Managing Global Scripts & Styles](../framework/ui/blazor/global-scripts-styles.md) @@ -932,6 +954,20 @@ Usage: abp check-extensions ```` +### install-old-cli + +This command installs the old ABP CLI with a specific version if it's specified. Otherwise, it installs the old ABP CLI with the latest stable version. Then, [you can directly use the old ABP CLI by simply passing the `--old` parameter at the end of the command or using the `abp-old` as the executing command](./differences-between-old-and-new-cli.md#using-the-old-abp-cli). + +Usage: + +```bash +abp install-old-cli [options] +``` + +#### Options + +* ```--version``` or ```-v```: Specifies the version for ABP CLI to be installed. + ## See Also * [Examples for the new command](./new-command-samples.md) diff --git a/docs/en/cli/new-command-samples.md b/docs/en/cli/new-command-samples.md index 0e6796a8ca..06099a3e29 100644 --- a/docs/en/cli/new-command-samples.md +++ b/docs/en/cli/new-command-samples.md @@ -36,6 +36,12 @@ The following commands are for creating Angular UI projects: abp new Acme.BookStore -t app -u angular -m none --separate-auth-server --database-provider mongodb -csf ``` +* **No DB migration!**, the DB migration will not be generated + + ```bash + abp new Acme.BookStore -u angular --skip-migrations --skip-migrator + ``` + ## MVC The following commands are for creating MVC UI projects: @@ -72,7 +78,12 @@ The following commands are for creating MVC UI projects: _Note that Public Website is only included in PRO templates._ +* **No initial configuration!**, the DB migration will not be generated, client-side scripts will not be installed and bundling will not run + ```bash + abp new Acme.BookStore -u mvc --skip-migrations --skip-migrator --dont-run-install-libs --dont-run-bundling + ``` + ## Blazor WebAssembly The following commands are for creating Blazor WASM projects: @@ -94,6 +105,12 @@ The following commands are for creating Blazor WASM projects: ```bash abp new Acme.BookStore -u blazor --database-provider mongodb --mobile none -csf ``` + +* **Client-side libraries are not loaded automatically!**, the libs folder will not be installed from ([NPM](https://www.npmjs.com/)) + + ```bash + abp new Acme.BookStore -u blazor --dont-run-install-libs + ``` ## Blazor Server @@ -116,6 +133,12 @@ The following commands are for creating Blazor projects: ```bash abp new Acme.BookStore -u blazor --database-provider mongodb --mobile none -csf ``` + +* **Skip bundling for the packages**, + + ```bash + abp new Acme.BookStore -u blazor --dont-run-bundling + ``` ## No UI diff --git a/docs/en/docs-nav.json b/docs/en/docs-nav.json index 28adea175d..b3d2b55678 100644 --- a/docs/en/docs-nav.json +++ b/docs/en/docs-nav.json @@ -2,8 +2,11 @@ "items": [ { "text": "Get started", - "path": "get-started", "items": [ + { + "text": "Overview", + "path": "get-started" + }, { "text": "Single-layer solution", "path": "get-started/single-layer-web-application.md" @@ -42,10 +45,17 @@ { "text": "Tutorials", "items": [ + { + "text": "Overview", + "path": "tutorials" + }, { "text": "TODO application", - "path": "tutorials/todo", "items": [ + { + "text": "Overview", + "path": "tutorials/todo" + }, { "text": "Single-layer solution", "path": "tutorials/todo/single-layer" @@ -58,8 +68,11 @@ }, { "text": "Book Store application", - "path": "tutorials/book-store/index.md", "items": [ + { + "text": "Overview", + "path": "tutorials/book-store" + }, { "text": "1: Creating the server side", "path": "tutorials/book-store/part-01.md" @@ -111,10 +124,17 @@ { "text": "Tools", "items": [ + { + "text": "Overview", + "path": "tools.md" + }, { "text": "ABP CLI", - "path": "cli", "items": [ + { + "text": "Overview", + "path": "cli" + }, { "text": "Examples for the new command", "path": "cli/new-command-samples.md" @@ -123,19 +143,22 @@ }, { "text": "ABP Studio", - "path": "studio", "items": [ { - "text": "Installation", - "path": "studio/installation.md" + "text": "Overview", + "path": "studio" }, { - "text": "Overview", - "path": "studio/overview.md" + "text": "Installation", + "path": "studio/installation.md" }, { "text": "Fundamentals", "items": [ + { + "text": "Overview", + "path": "studio/overview.md" + }, { "text": "Solution Explorer", "path": "studio/solution-explorer.md" @@ -161,6 +184,14 @@ { "text": "Concepts", "path": "studio/concepts.md" + }, + { + "text": "Version Compatibility", + "path": "studio/version-compatibility.md" + }, + { + "text": "Release Notes", + "path": "studio/release-notes.md" } ] }, @@ -168,7 +199,7 @@ "text": "ABP Suite", "items": [ { - "text": "Overall", + "text": "Overview", "path": "suite" }, { @@ -189,8 +220,11 @@ }, { "text": "Generating CRUD Page", - "path": "suite/generating-crud-page.md", "items": [ + { + "text": "Overview", + "path": "suite/generating-crud-page.md" + }, { "text": "Creating Many-To-Many Relationship", "path": "suite/creating-many-to-many-relationship.md" @@ -239,14 +273,21 @@ { "text": "Fundamentals", "items": [ + { + "text": "Overview", + "path": "framework/fundamentals" + }, { "text": "Application Startup", "path": "framework/fundamentals/application-startup.md" }, { "text": "Authorization", - "path": "framework/fundamentals/authorization.md", "items": [ + { + "text": "Overview", + "path": "framework/fundamentals/authorization.md" + }, { "text": "Dynamic Claims", "path": "framework/fundamentals/dynamic-claims.md" @@ -255,8 +296,11 @@ }, { "text": "Caching", - "path": "framework/fundamentals/caching.md", "items": [ + { + "text": "Overview", + "path": "framework/fundamentals/caching.md" + }, { "text": "Redis Cache", "path": "framework/fundamentals/redis-cache.md" @@ -273,8 +317,11 @@ }, { "text": "Dependency Injection", - "path": "framework/fundamentals/dependency-injection.md", "items": [ + { + "text": "Overview", + "path": "framework/fundamentals/dependency-injection.md" + }, { "text": "AutoFac Integration", "path": "framework/fundamentals/autofac-integration.md" @@ -303,8 +350,11 @@ }, { "text": "Validation", - "path": "framework/fundamentals/validation.md", "items": [ + { + "text": "Overview", + "path": "framework/fundamentals/validation.md" + }, { "text": "FluentValidation Integration", "path": "framework/fundamentals/fluent-validation.md" @@ -316,14 +366,21 @@ { "text": "Infrastructure", "items": [ + { + "text": "Overview", + "path": "framework/infrastructure" + }, { "text": "Audit Logging", "path": "framework/infrastructure/audit-logging.md" }, { "text": "Background Jobs", - "path": "framework/infrastructure/background-jobs", "items": [ + { + "text": "Overview", + "path": "framework/infrastructure/background-jobs" + }, { "text": "Hangfire Integration", "path": "framework/infrastructure/background-jobs/hangfire.md" @@ -340,8 +397,11 @@ }, { "text": "Background Workers", - "path": "framework/infrastructure/background-workers", "items": [ + { + "text": "Overview", + "path": "framework/infrastructure/background-workers" + }, { "text": "Quartz Integration", "path": "framework/infrastructure/background-workers/quartz.md" @@ -356,7 +416,7 @@ "text": "BLOB Storing", "items": [ { - "text": "BLOB Storing System", + "text": "Overview", "path": "framework/infrastructure/blob-storing" }, { @@ -386,6 +446,10 @@ "text": "AWS Provider", "path": "framework/infrastructure/blob-storing/aws.md" }, + { + "text": "Google Cloud Storage Provider", + "path": "framework/infrastructure/blob-storing/google.md" + }, { "text": "Create a Custom Provider", "path": "framework/infrastructure/blob-storing/custom-provider.md" @@ -426,7 +490,7 @@ "text": "Email Sending", "items": [ { - "text": "Email Sending System", + "text": "Overview", "path": "framework/infrastructure/emailing.md" }, { @@ -443,7 +507,7 @@ "text": "Event Bus", "items": [ { - "text": "Overall", + "text": "Overview", "path": "framework/infrastructure/event-bus" }, { @@ -452,8 +516,11 @@ }, { "text": "Distributed Event Bus", - "path": "framework/infrastructure/event-bus/distributed", "items": [ + { + "text": "Overview", + "path": "framework/infrastructure/event-bus/distributed" + }, { "text": "Azure Service Bus Integration", "path": "framework/infrastructure/event-bus/distributed/azure.md" @@ -516,8 +583,11 @@ }, { "text": "Text Templating", - "path": "framework/infrastructure/text-templating", "items": [ + { + "text": "Overview", + "path": "framework/infrastructure/text-templating" + }, { "text": "Razor Integration", "path": "framework/infrastructure/text-templating/razor.md" @@ -540,13 +610,16 @@ }, { "text": "Architecture", - "path": "framework/architecture", "items": [ + { + "text": "Overview", + "path": "framework/architecture" + }, { "text": "Best Practices", "items": [ { - "text": "Overall", + "text": "Overview", "path": "framework/architecture/best-practices" }, { @@ -556,6 +629,10 @@ { "text": "Domain Layer", "items": [ + { + "text": "Overview", + "path": "framework/architecture/best-practices/domain-layer-overview.md" + }, { "text": "Entities", "path": "framework/architecture/best-practices/entities.md" @@ -573,6 +650,10 @@ { "text": "Application Layer", "items": [ + { + "text": "Overview", + "path": "framework/architecture/best-practices/application-layer-overview.md" + }, { "text": "Application Services", "path": "framework/architecture/best-practices/application-services.md" @@ -586,6 +667,10 @@ { "text": "Data Access", "items": [ + { + "text": "Overview", + "path": "framework/architecture/best-practices/data-access-overview.md" + }, { "text": "Entity Framework Core Integration", "path": "framework/architecture/best-practices/entity-framework-core-integration.md" @@ -602,7 +687,7 @@ "text": "Modularity", "items": [ { - "text": "Basics", + "text": "Overview", "path": "framework/architecture/modularity/basics.md" }, { @@ -613,7 +698,7 @@ "text": "Customizing/Extending Modules", "items": [ { - "text": "Overall", + "text": "Overview", "path": "framework/architecture/modularity/extending/customizing-application-modules-guide.md" }, { @@ -636,12 +721,16 @@ "text": "Domain Driven Design", "items": [ { - "text": "Overall", + "text": "Overview", "path": "framework/architecture/domain-driven-design" }, { "text": "Domain Layer", "items": [ + { + "text": "Overview", + "path": "framework/architecture/domain-driven-design/domain-layer.md" + }, { "text": "Entities & Aggregate Roots", "path": "framework/architecture/domain-driven-design/entities.md" @@ -667,6 +756,10 @@ { "text": "Application Layer", "items": [ + { + "text": "Overview", + "path": "framework/architecture/domain-driven-design/application-layer.md" + }, { "text": "Application Services", "path": "framework/architecture/domain-driven-design/application-services.md" @@ -700,9 +793,17 @@ { "text": "API Development", "items": [ + { + "text": "Overview", + "path": "framework/api-development" + }, { "text": "ABP Endpoints", "items": [ + { + "text": "Overview", + "path": "framework/api-development/standard-apis" + }, { "text": "Application Configuration", "path": "framework/api-development/standard-apis/configuration.md" @@ -742,12 +843,16 @@ { "text": "User Interface", "items": [ + { + "text": "Overview", + "path": "framework/ui" + }, { "text": "MVC / Razor Pages", "items": [ { - "text": "Overall", - "path": "framework/ui/mvc-razor-pages/overall.md" + "text": "Overview", + "path": "framework/ui/mvc-razor-pages/overall" }, { "text": "Navigation / Menus", @@ -791,8 +896,11 @@ }, { "text": "Tag Helpers", - "path": "framework/ui/mvc-razor-pages/tag-helpers", "items": [ + { + "text": "Overview", + "path": "framework/ui/mvc-razor-pages/tag-helpers" + }, { "text": "Form Elements", "path": "framework/ui/mvc-razor-pages/tag-helpers/form-elements.md" @@ -829,8 +937,11 @@ }, { "text": "Theming", - "path": "framework/ui/mvc-razor-pages/theming.md", "items": [ + { + "text": "Overview", + "path": "framework/ui/mvc-razor-pages/theming.md" + }, { "text": "The Basic Theme", "path": "framework/ui/mvc-razor-pages/basic-theme.md" @@ -845,7 +956,7 @@ "text": "JavaScript API", "items": [ { - "text": "Overall", + "text": "Overview", "path": "framework/ui/mvc-razor-pages/javascript-api" }, { @@ -906,7 +1017,7 @@ "text": "Customize/Extend the UI", "items": [ { - "text": "Overall", + "text": "Overview", "path": "framework/ui/mvc-razor-pages/customization-user-interface.md" }, { @@ -938,7 +1049,7 @@ "text": "Blazor", "items": [ { - "text": "Overall", + "text": "Overview", "path": "framework/ui/blazor/overall.md" }, { @@ -957,7 +1068,7 @@ "text": "Theming", "items": [ { - "text": "Overall", + "text": "Overview", "path": "framework/ui/blazor/theming.md" }, { @@ -1269,7 +1380,7 @@ "text": "Theming", "items": [ { - "text": "Overall", + "text": "Overview", "path": "framework/ui/angular/theming.md" }, { @@ -1302,7 +1413,7 @@ "text": "Extensions", "items": [ { - "text": "Overall", + "text": "Overview", "path": "framework/ui/angular/extensions-overall.md" }, { @@ -1352,7 +1463,7 @@ "text": "React Native", "items": [ { - "text": "Overall", + "text": "Overview", "path": "framework/ui/react-native" } ] @@ -1361,7 +1472,7 @@ "text": "MAUI", "items": [ { - "text": "Overall", + "text": "Overview", "path": "framework/ui/maui" } ] @@ -1390,13 +1501,16 @@ "text": "Data Access", "items": [ { - "text": "Overall", + "text": "Overview", "path": "framework/data" }, { "text": "Entity Framework Core", - "path": "framework/data/entity-framework-core", "items": [ + { + "text": "Overview", + "path": "framework/data/entity-framework-core" + }, { "text": "Database Migrations", "path": "framework/data/entity-framework-core/migrations.md" @@ -1464,7 +1578,7 @@ "text": "Solution Templates", "items": [ { - "text": "Overall", + "text": "Overview", "path": "solution-templates" }, { @@ -1489,7 +1603,7 @@ "text": "Application Modules", "items": [ { - "text": "Overall", + "text": "Overview", "path": "modules" }, { @@ -1554,8 +1668,11 @@ }, { "text": "IdentityServer", - "path": "modules/identity-server.md", "items": [ + { + "text": "Overview", + "path": "modules/identity-server.md" + }, { "text": "IdentityServer Migration Guide", "path": "release-info/migration-guides/identityserver4-step-by-step.md" @@ -1572,8 +1689,11 @@ }, { "text": "OpenIddict", - "path": "modules/openiddict.md", "items": [ + { + "text": "Overview", + "path": "modules/openiddict.md" + }, { "text": "OpenIddict Migration Guide", "path": "release-info/migration-guides/openiddict-step-by-step.md" @@ -1630,13 +1750,17 @@ { "text": "UI Themes", "items": [ + { + "text": "Overview", + "path": "ui-themes" + }, { "text": "The Basic Theme", "path": "framework/ui/mvc-razor-pages/basic-theme.md" }, { "text": "LeptonX Theme", - "path": "ui-themes/lepton-x/index.md" + "path": "ui-themes/lepton-x" } ] }, @@ -1644,7 +1768,7 @@ "text": "Testing", "items": [ { - "text": "Overall", + "text": "Overview", "path": "testing/overall.md" }, { @@ -1663,8 +1787,11 @@ }, { "text": "Deployment", - "path": "deployment", "items": [ + { + "text": "Overview", + "path": "deployment" + }, { "text": "Configuring SSL certificate(HTTPS)", "path": "deployment/ssl.md" @@ -1695,7 +1822,7 @@ "text": "Samples", "items": [ { - "text": "All Samples", + "text": "Overview", "path": "samples" }, { @@ -1715,6 +1842,10 @@ { "text": "Books", "items": [ + { + "text": "Overview", + "path": "https://abp.io/books" + }, { "text": "Mastering ABP Framework", "path": "https://abp.io/books/mastering-abp-framework" @@ -1728,6 +1859,10 @@ { "text": "Release Information", "items": [ + { + "text": "Overview", + "path": "release-info" + }, { "text": "Release Notes", "path": "release-info/release-notes.md" @@ -1800,4 +1935,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/docs/en/dynamic-proxying-interceptors.md b/docs/en/dynamic-proxying-interceptors.md index 34c9c69b67..722eadc249 100644 --- a/docs/en/dynamic-proxying-interceptors.md +++ b/docs/en/dynamic-proxying-interceptors.md @@ -1,4 +1,4 @@ -## Dynamic Proxying / Interceptors +# Dynamic Proxying / Interceptors This document is planned to be written later. diff --git a/docs/en/framework/api-development/index.md b/docs/en/framework/api-development/index.md new file mode 100644 index 0000000000..2f55487b1c --- /dev/null +++ b/docs/en/framework/api-development/index.md @@ -0,0 +1,11 @@ +## API Development + +The following documents explain the concepts, infrastructure and integrations to build HTTP APIs with ABP: + +* [ABP Endpoints](./standard-apis) +* [API Versioning](./versioning.md) +* [Auto API Controllers](./auto-controllers.md) +* [Dynamic C# API Clients](./dynamic-csharp-clients.md) +* [Integration Services](./integration-services.md) +* [Static C# API Clients](./static-csharp-clients.md) +* [Swagger Integration](./swagger.md) diff --git a/docs/en/framework/api-development/standard-apis/index.md b/docs/en/framework/api-development/standard-apis/index.md new file mode 100644 index 0000000000..3dd4a284f5 --- /dev/null +++ b/docs/en/framework/api-development/standard-apis/index.md @@ -0,0 +1,6 @@ +## Standard HTTP API Endpoints + +ABP provides some pre-built and standard endpoints that contains useful information about the application or service, such as localization entries and settings. Here, is the list of the pre-built endpoints: + +* [Application Configuration](./configuration.md) +* [Application Localization](./localization.md) \ No newline at end of file diff --git a/docs/en/framework/architecture/best-practices/application-layer-overview.md b/docs/en/framework/architecture/best-practices/application-layer-overview.md new file mode 100644 index 0000000000..10afeeb9ca --- /dev/null +++ b/docs/en/framework/architecture/best-practices/application-layer-overview.md @@ -0,0 +1,6 @@ +## Best Practices: Application Layer + +The following documents suggest some best-practices that you can use while implementing the application layer of your solution by following the Domain Driven Design principles: + +* [Application Services](./application-services.md) +* [Data Transfer Objects](./data-transfer-objects.md) \ No newline at end of file diff --git a/docs/en/framework/architecture/best-practices/application-services.md b/docs/en/framework/architecture/best-practices/application-services.md index e3fd00f782..d3ad44ca54 100644 --- a/docs/en/framework/architecture/best-practices/application-services.md +++ b/docs/en/framework/architecture/best-practices/application-services.md @@ -1,4 +1,4 @@ -## Application Services Best Practices & Conventions +# Application Services Best Practices & Conventions * **Do** create an application service for each **aggregate root**. diff --git a/docs/en/framework/architecture/best-practices/data-access-overview.md b/docs/en/framework/architecture/best-practices/data-access-overview.md new file mode 100644 index 0000000000..1369a21e32 --- /dev/null +++ b/docs/en/framework/architecture/best-practices/data-access-overview.md @@ -0,0 +1,6 @@ +## Best Practices: Data Access + +The following documents suggest some best-practices that you can use while implementing the database integration layer of your solution by following Domain Driven Design principles: + +* [Entity Framework Core](./entity-framework-core-integration.md) +* [MongoDB](./mongodb-integration.md) \ No newline at end of file diff --git a/docs/en/framework/architecture/best-practices/data-transfer-objects.md b/docs/en/framework/architecture/best-practices/data-transfer-objects.md index cd3a34513a..e4caa6ed66 100644 --- a/docs/en/framework/architecture/best-practices/data-transfer-objects.md +++ b/docs/en/framework/architecture/best-practices/data-transfer-objects.md @@ -1,4 +1,4 @@ -## Data Transfer Objects Best Practices & Conventions +# Data Transfer Objects Best Practices & Conventions * **Do** define DTOs in the **application contracts** package. * **Do** inherit from the pre-built **base DTO classes** where possible and necessary (like `EntityDto`, `CreationAuditedEntityDto`, `AuditedEntityDto`, `FullAuditedEntityDto` and so on). diff --git a/docs/en/framework/architecture/best-practices/domain-layer-overview.md b/docs/en/framework/architecture/best-practices/domain-layer-overview.md new file mode 100644 index 0000000000..b20ae1b208 --- /dev/null +++ b/docs/en/framework/architecture/best-practices/domain-layer-overview.md @@ -0,0 +1,7 @@ +## Best Practices: Domain Layer + +The following documents suggest some best-practices that you can use while implementing the domain layer of your solution by following the Domain Driven Design principles: + +* [Entities](./entities.md) +* [Repositories](./repositories.md) +* [Domain Services](./domain-services.md) \ No newline at end of file diff --git a/docs/en/framework/architecture/best-practices/domain-services.md b/docs/en/framework/architecture/best-practices/domain-services.md index b1081d7ebc..565a67a715 100644 --- a/docs/en/framework/architecture/best-practices/domain-services.md +++ b/docs/en/framework/architecture/best-practices/domain-services.md @@ -1,4 +1,4 @@ -## Domain Services Best Practices & Conventions +# Domain Services Best Practices & Conventions ### Domain Service diff --git a/docs/en/framework/architecture/best-practices/entities.md b/docs/en/framework/architecture/best-practices/entities.md index b16234d52b..319f1648ff 100644 --- a/docs/en/framework/architecture/best-practices/entities.md +++ b/docs/en/framework/architecture/best-practices/entities.md @@ -1,4 +1,4 @@ -## Entity Best Practices & Conventions +# Entity Best Practices & Conventions ### Entities diff --git a/docs/en/framework/architecture/best-practices/entity-framework-core-integration.md b/docs/en/framework/architecture/best-practices/entity-framework-core-integration.md index efa622445c..9a2081e4e5 100644 --- a/docs/en/framework/architecture/best-practices/entity-framework-core-integration.md +++ b/docs/en/framework/architecture/best-practices/entity-framework-core-integration.md @@ -1,4 +1,4 @@ -## Entity Framework Core Integration Best Practices +# Entity Framework Core Integration Best Practices > See [Entity Framework Core Integration document](../../data/entity-framework-core) for the basics of the EF Core integration. diff --git a/docs/en/framework/architecture/best-practices/index.md b/docs/en/framework/architecture/best-practices/index.md index 85e00a0b51..49b1e5ec0f 100644 --- a/docs/en/framework/architecture/best-practices/index.md +++ b/docs/en/framework/architecture/best-practices/index.md @@ -1,4 +1,4 @@ -## Module Development Best Practices & Conventions +# Module Development Best Practices & Conventions ### Introduction diff --git a/docs/en/framework/architecture/best-practices/module-architecture.md b/docs/en/framework/architecture/best-practices/module-architecture.md index 0b9a4a282f..d050094656 100644 --- a/docs/en/framework/architecture/best-practices/module-architecture.md +++ b/docs/en/framework/architecture/best-practices/module-architecture.md @@ -1,4 +1,4 @@ -## Module Architecture Best Practices & Conventions +# Module Architecture Best Practices & Conventions ### Solution Structure @@ -11,7 +11,7 @@ The following diagram shows the packages of a well-layered module and dependencies of those packages between them: -![module-layers-and-packages](../../../images/module-layers-and-packages.jpg) +![module-layers-and-packages](../../../images/module-layers-and-packages.png) The ultimate goal is to allow an application to use the module in a flexible manner. Example applications: diff --git a/docs/en/framework/architecture/best-practices/mongodb-integration.md b/docs/en/framework/architecture/best-practices/mongodb-integration.md index 16a6a7d58f..36b037c967 100644 --- a/docs/en/framework/architecture/best-practices/mongodb-integration.md +++ b/docs/en/framework/architecture/best-practices/mongodb-integration.md @@ -1,4 +1,4 @@ -## MongoDB Integration +# MongoDB Integration * Do define a separated `MongoDbContext` interface and class for each module. diff --git a/docs/en/framework/architecture/best-practices/repositories.md b/docs/en/framework/architecture/best-practices/repositories.md index 32da1ecee9..5e491ecb80 100644 --- a/docs/en/framework/architecture/best-practices/repositories.md +++ b/docs/en/framework/architecture/best-practices/repositories.md @@ -1,4 +1,4 @@ -## Repository Best Practices & Conventions +# Repository Best Practices & Conventions ### Repository Interfaces diff --git a/docs/en/framework/architecture/domain-driven-design/application-layer.md b/docs/en/framework/architecture/domain-driven-design/application-layer.md new file mode 100644 index 0000000000..03b83fb038 --- /dev/null +++ b/docs/en/framework/architecture/domain-driven-design/application-layer.md @@ -0,0 +1,7 @@ +## Domain Driven Design: Application Layer + +Application Layer mediates between the Presentation and Domain Layers. Orchestrates business objects to perform specific application tasks and implements use cases as the application logic. Here, is the list of the building blocks of the Application Layer: + +* [Application Services](./application-services.md) +* [Data Transfer Objects](./data-transfer-objects.md) +* [Unit of Work](./unit-of-work.md) \ No newline at end of file diff --git a/docs/en/framework/architecture/domain-driven-design/domain-layer.md b/docs/en/framework/architecture/domain-driven-design/domain-layer.md new file mode 100644 index 0000000000..9ce7519810 --- /dev/null +++ b/docs/en/framework/architecture/domain-driven-design/domain-layer.md @@ -0,0 +1,9 @@ +## Domain Driven Design: Domain Layer + +Domain Layer contains business objects and the core (domain) business rules of the application and it's the heart of the application. Here, is the list of building blocks of the Domain Layer: + +* [Entities & Aggregate Roots](./entities.md) +* [Value Objects](./value-objects.md) +* [Repositories](./repositories.md) +* [Domain Services](./domain-services.md) +* [Specifications](./specifications.md) \ No newline at end of file diff --git a/docs/en/framework/fundamentals/application-startup.md b/docs/en/framework/fundamentals/application-startup.md index 920e1f78cc..e985048714 100644 --- a/docs/en/framework/fundamentals/application-startup.md +++ b/docs/en/framework/fundamentals/application-startup.md @@ -1,4 +1,4 @@ -## ABP Application Startup +# ABP Application Startup You typically use the [ABP CLI](../../cli)'s `abp new` command to [get started](../../get-started/layered-web-application.md) with one of the pre-built [startup solution templates](../../solution-templates). When you do that, you generally don't need to know the details of how the ABP is integrated with your application or how it is configured and initialized. The startup template also comes with the fundamental ABP packages and [application modules](../../modules) are pre-installed and configured for you. diff --git a/docs/en/framework/fundamentals/index.md b/docs/en/framework/fundamentals/index.md new file mode 100644 index 0000000000..7ce2c59f7b --- /dev/null +++ b/docs/en/framework/fundamentals/index.md @@ -0,0 +1,16 @@ +## ABP Fundamentals: Overview + +The following documents explains the fundamental building blocks to create ABP solutions: + +* [Application Startup](./application-startup.md) +* [Authorization](./authorization.md) +* [Caching](./caching.md) +* [Configuration](./configuration.md) +* [Connection Strings](./connection-strings.md) +* [Dependency Injection](./dependency-injection.md) +* [Exception Handling](./exception-handling.md) +* [Localization](./localization.md) +* [Logging](./logging.md) +* [Object Extensions](./object-extensions.md) +* [Options](./options.md) +* [Validation](./validation.md) \ No newline at end of file diff --git a/docs/en/framework/infrastructure/background-jobs/hangfire.md b/docs/en/framework/infrastructure/background-jobs/hangfire.md index 8d5a76509b..396c7498b5 100644 --- a/docs/en/framework/infrastructure/background-jobs/hangfire.md +++ b/docs/en/framework/infrastructure/background-jobs/hangfire.md @@ -154,3 +154,72 @@ app.UseAbpHangfireDashboard("/hangfire", options => **Important**: `UseAbpHangfireDashboard` should be called after the authentication and authorization middlewares in your `Startup` class (probably at the last line). Otherwise, authorization will always fail! + +#### Dashboard Authorization In API Projects + +If you use the hangfire dashboard in an API project that uses non-cookie authentication (like JWT Bearers), The `/hangfire` page can't authenticate the user. + +In this case, you can add a cookies authorization scheme to authenticate the user. The best way to do this is to use the `Cookie` and `OpenIdConnect` authentication schemes. This requires creating a new OAuth2 client and adding the `ClientId`, and `ClientSecret` properties to the `AuthServer` section in the `appsettings.json` file. + +The final code should look like below: + +```csharp +private void ConfigureAuthentication(ServiceConfigurationContext context, IConfiguration configuration) +{ + context.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) + .AddAbpJwtBearer(options => + { + options.Authority = configuration["AuthServer:Authority"]; + options.RequireHttpsMetadata = configuration.GetValue("AuthServer:RequireHttpsMetadata"); + options.Audience = "MyProjectName"; + }); + + context.Services.AddAuthentication() + .AddCookie("Cookies") + .AddOpenIdConnect("oidc", options => + { + options.Authority = configuration["AuthServer:Authority"]; + options.RequireHttpsMetadata = configuration.GetValue("AuthServer:RequireHttpsMetadata"); + options.ResponseType = OpenIdConnectResponseType.CodeIdToken; + + options.ClientId = configuration["AuthServer:ClientId"]; + options.ClientSecret = configuration["AuthServer:ClientSecret"]; + + options.UsePkce = true; + options.SaveTokens = true; + options.GetClaimsFromUserInfoEndpoint = true; + + options.Scope.Add("roles"); + options.Scope.Add("email"); + options.Scope.Add("phone"); + options.Scope.Add("MyProjectName"); + }); +} +``` + +```csharp +app.Use(async (httpContext, next) => +{ + if (httpContext.Request.Path.StartsWithSegments("/hangfire")) + { + var result = await httpContext.AuthenticateAsync("Cookies"); + if (result.Succeeded) + { + httpContext.User = result.Principal; + await next(httpContext); + return; + } + + await httpContext.ChallengeAsync("oidc"); + } + else + { + await next(httpContext); + } +}); + +app.UseAbpHangfireDashboard("/hangfire", options => +{ + options.AsyncAuthorization = new[] {new AbpHangfireAuthorizationFilter()}; +}); +``` diff --git a/docs/en/framework/infrastructure/blob-storing/google.md b/docs/en/framework/infrastructure/blob-storing/google.md new file mode 100644 index 0000000000..a90152b4f0 --- /dev/null +++ b/docs/en/framework/infrastructure/blob-storing/google.md @@ -0,0 +1,70 @@ +# BLOB Storing Google Provider + +BLOB Storing Google Provider can store BLOBs in [Google Cloud Storage](https://cloud.google.com/storage). + +> Read the [BLOB Storing document](../blob-storing) to understand how to use the BLOB storing system. This document only covers how to configure containers to use a Google Cloud Storage as the storage provider. + +## Installation + +Use the ABP CLI to add [Volo.Abp.BlobStoring.Google](https://www.nuget.org/packages/Volo.Abp.BlobStoring.Google) NuGet package to your project: + +* Install the [ABP CLI](../../../cli) if you haven't installed before. +* Open a command line (terminal) in the directory of the `.csproj` file you want to add the `Volo.Abp.BlobStoring.Google` package. +* Run `abp add-package Volo.Abp.BlobStoring.Google` command. + +If you want to do it manually, install the [Volo.Abp.BlobStoring.Google](https://www.nuget.org/packages/Volo.Abp.BlobStoring.Google) NuGet package to your project and add `[DependsOn(typeof(AbpBlobStoringGoogleModule))]` to the [ABP module](../../architecture/modularity/basics.md) class inside your project. + +## Configuration + +Configuration is done in the `ConfigureServices` method of your [module](../../architecture/modularity/basics.md) class, as explained in the [BLOB Storing document](../blob-storing). + +**Example: Configure to use the Google storage provider by default** + +````csharp +Configure(options => +{ + options.Containers.ConfigureDefault(container => + { + container.UseGoogle(google => + { + google.ClientEmail = "your coogle client email"; + google.ProjectId = "your coogle project id"; + google.PrivateKey = "your coogle private key"; + google.Scopes = "your coogle scopes"; + google.ContainerName = "your coogle container name"; + google.CreateContainerIfNotExists = true; + //google.UseApplicationDefaultCredentials = true; // If you want to use application default credentials + }); + }); +}); +```` + +> See the [BLOB Storing document](../blob-storing) to learn how to configure this provider for a specific container. + +### Options + +* **ClientEmail** (string): The client email of the Google service account. You can create a service account and get the client email. Please refer to Google documentation: https://cloud.google.com/iam/docs/service-account-overview +* **ProjectId** (string): The project ID of the Google service account. +* **PrivateKey** (string): The private key of the Google service account. You can create a service account and get the private key. Please refer to Google documentation: https://cloud.google.com/iam/docs/keys-create-delete +* **Scopes** (string): The scopes of the Google service account. +* **UseApplicationDefaultCredentials** (bool): If `true`, it uses the application default credentials(ADC). Default value is `false`. Please refer to Google documentation: https://cloud.google.com/docs/authentication/provide-credentials-adc +* **ContainerName** (string): You can specify the container name in Google. If this is not specified, it uses the name of the BLOB container defined with the `BlobContainerName` attribute (see the [BLOB storing document](../blob-storing)). Please note that Google has some **rules for naming containers**. A container name must be a valid DNS name, conforming to the [following naming rules](https://docs.microsoft.com/en-us/rest/api/storageservices/naming-and-referencing-containers--blobs--and-metadata#container-names): + * Container names must start or end with a letter or number, and can contain only letters, numbers, and the dash (-) character. + * Every dash (-) character must be immediately preceded and followed by a letter or number; consecutive dashes are not permitted in container names. + * All letters in a container name must be **lowercase**. + * Container names must be from **3** through **63** characters long. +* **CreateContainerIfNotExists** (bool): Default value is `false`, If a container does not exist in Google, `GoogleBlobProvider` will try to create it. + + +## Google Blob Name Calculator + +Google Blob Provider organizes BLOB name and implements some conventions. The full name of a BLOB is determined by the following rules by default: + +* Appends `host` string if [current tenant](../../architecture/multi-tenancy) is `null` (or multi-tenancy is disabled for the container - see the [BLOB Storing document](../blob-storing) to learn how to disable multi-tenancy for a container). +* Appends `tenants/` string if current tenant is not `null`. +* Appends the BLOB name. + +## Other Services + +* `GoogleBlobProvider` is the main service that implements the Google BLOB storage provider, if you want to override/replace it via [dependency injection](../../fundamentals/dependency-injection.md) (don't replace `IBlobProvider` interface, but replace `GoogleBlobProvider` class). +* `IGoogleBlobNameCalculator` is used to calculate the full BLOB name (that is explained above). It is implemented by the `DefaultGoogleBlobNameCalculator` by default. diff --git a/docs/en/framework/infrastructure/blob-storing/index.md b/docs/en/framework/infrastructure/blob-storing/index.md index 61a05c65c0..f95a90e410 100644 --- a/docs/en/framework/infrastructure/blob-storing/index.md +++ b/docs/en/framework/infrastructure/blob-storing/index.md @@ -22,6 +22,7 @@ The ABP has already the following storage provider implementations: * [Aliyun](./aliyun.md): Stores BLOBs on the [Aliyun Storage Service](https://help.aliyun.com/product/31815.html). * [Minio](./minio.md): Stores BLOBs on the [MinIO Object storage](https://min.io/). * [Aws](./aws.md): Stores BLOBs on the [Amazon Simple Storage Service](https://aws.amazon.com/s3/). +* [Google](./google.md): Stores BLOBs on the [Google Cloud Storage](https://cloud.google.com/storage). More providers will be implemented by the time. You can [request](https://github.com/abpframework/abp/issues/new) it for your favorite provider or [create it yourself](./custom-provider.md) and [contribute](../../../contribution) to the ABP. diff --git a/docs/en/framework/infrastructure/concurrency-check.md b/docs/en/framework/infrastructure/concurrency-check.md index 03e5aafc90..731750f306 100644 --- a/docs/en/framework/infrastructure/concurrency-check.md +++ b/docs/en/framework/infrastructure/concurrency-check.md @@ -1,4 +1,4 @@ -## Concurrency Check +# Concurrency Check ### Introduction diff --git a/docs/en/framework/infrastructure/data-filtering.md b/docs/en/framework/infrastructure/data-filtering.md index 584099b681..38844f2079 100644 --- a/docs/en/framework/infrastructure/data-filtering.md +++ b/docs/en/framework/infrastructure/data-filtering.md @@ -320,6 +320,81 @@ public override string GetCompiledQueryCacheKey() } ```` +##### Make User-defined function mapping compatible with [DevExtreme.AspNet.Data's](https://github.com/DevExpress/DevExtreme.AspNet.Data) `IAsyncAdapter` + +If you are using [DevExtreme.AspNet.Data](https://github.com/DevExpress/DevExtreme.AspNet.Data) and `User-defined function mapping`, You need to create a custom adapter to compatible with `IAsyncAdapter`. + +````csharp +var adapter = new AbpDevExtremeAsyncAdapter(); +CustomAsyncAdapters.RegisterAdapter(typeof(AbpEntityQueryProvider), adapter); +```` + +````csharp +using System; +using System.Collections.Generic; +using System.Linq; +using System.Linq.Expressions; +using System.Reflection; +using System.Threading; +using System.Threading.Tasks; +using DevExtreme.AspNet.Data.Async; + +namespace Abp.EntityFrameworkCore; + +public class AbpDevExtremeAsyncAdapter : IAsyncAdapter +{ + private readonly MethodInfo _countAsyncMethod; + private readonly MethodInfo _toListAsyncMethod; + + public AbpDevExtremeAsyncAdapter() + { + var extensionsType = Type.GetType("Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions, Microsoft.EntityFrameworkCore"); + _countAsyncMethod = FindQueryExtensionMethod(extensionsType, "CountAsync"); + _toListAsyncMethod = FindQueryExtensionMethod(extensionsType, "ToListAsync"); + } + + public Task CountAsync(IQueryProvider provider, Expression expr, CancellationToken cancellationToken) + { + return InvokeCountAsync(_countAsyncMethod, provider, expr, cancellationToken); + } + + public Task> ToEnumerableAsync(IQueryProvider provider, Expression expr, CancellationToken cancellationToken) + { + return InvokeToListAsync(_toListAsyncMethod, provider, expr, cancellationToken); + } + + static MethodInfo FindQueryExtensionMethod(Type extensionsType, string name) + { + return extensionsType.GetMethods().First(m => + { + if (!m.IsGenericMethod || m.Name != name) + { + return false; + } + var parameters = m.GetParameters(); + return parameters.Length == 2 && parameters[1].ParameterType == typeof(CancellationToken); + }); + } + + static Task InvokeCountAsync(MethodInfo method, IQueryProvider provider, Expression expr, CancellationToken cancellationToken) + { + var countArgument = ((MethodCallExpression)expr).Arguments[0]; + var query = provider.CreateQuery(countArgument); + return (Task)InvokeQueryExtensionMethod(method, query.ElementType, query, cancellationToken); + } + + static async Task> InvokeToListAsync(MethodInfo method, IQueryProvider provider, Expression expr, CancellationToken cancellationToken) + { + return await (Task>)InvokeQueryExtensionMethod(method, typeof(T), provider.CreateQuery(expr), cancellationToken); + } + + static object InvokeQueryExtensionMethod(MethodInfo method, Type elementType, IQueryable query, CancellationToken cancellationToken) + { + return method.MakeGenericMethod(elementType).Invoke(null, new object[] { query, cancellationToken }); + } +} +```` + ### MongoDB ABP abstracts the `IMongoDbRepositoryFilterer` interface to implement data filtering for the [MongoDB Integration](../data/mongodb), it works only if you use the repositories properly. Otherwise, you should manually filter the data. diff --git a/docs/en/framework/infrastructure/index.md b/docs/en/framework/infrastructure/index.md new file mode 100644 index 0000000000..f9524216c3 --- /dev/null +++ b/docs/en/framework/infrastructure/index.md @@ -0,0 +1,31 @@ +## ABP Infrastructure + +ABP provides a complete infrastructure for creating real world software solutions with modern architectures based on the .NET platform. Each of the following documents explains an infrastructure feature: + +* [Audit Logging](./audit-logging.md) +* [Background Jobs](./background-jobs/index.md) +* [Background Workers](./background-workers/index.md) +* [BLOB Storing](./blob-storing/index.md) +* [Cancellation Token Provider](./cancellation-token-provider.md) +* [CSRF/XSRF & Anti Forgery](./csrf-anti-forgery.md) +* [Concurrency Check](./concurrency-check.md) +* [Current User](./current-user.md) +* [Data Filtering](./data-filtering.md) +* [Data Seeding](./data-seeding.md) +* [Distributing Locking](./distributed-locking.md) +* [Email Sending](./emailing.md) +* [Entity Cache](./entity-cache.md) +* [Event Bus](./event-bus/index.md) +* [Features](./features.md) +* [Global Features](./global-features.md) +* [GUID Generation](./guid-generation.md) +* [Image Manipulation](./image-manipulation.md) +* [JSON](./json.md) +* [Object to Object Mapping](./object-to-object-mapping.md) +* [Settings](./settings.md) +* [Simple State Checker](./simple-state-checker.md) +* [SMS Sending](./sms-sending.md) +* [String Encryption](./string-encryption.md) +* [Text Templating](./text-templating/index.md) +* [Timing](./timing.md) +* [Virtual File System](./virtual-file-system.md) \ No newline at end of file diff --git a/docs/en/framework/ui/angular/authorization.md b/docs/en/framework/ui/angular/authorization.md index 04bc9ab991..dcf6e0c67d 100644 --- a/docs/en/framework/ui/angular/authorization.md +++ b/docs/en/framework/ui/angular/authorization.md @@ -1,4 +1,4 @@ -## Authorization in Angular UI +# Authorization in Angular UI OAuth is preconfigured in Angular application templates. So, when you start a project using the CLI (or Suite, for that matter), authorization already works. ABP Angular UI packages are using [angular-oauth2-oidc library](https://github.com/manfredsteyer/angular-oauth2-oidc#logging-in) for managing OAuth in the Angular client. You can find **OAuth configuration** in the _environment.ts_ files. diff --git a/docs/en/framework/ui/angular/breadcrumb.md b/docs/en/framework/ui/angular/breadcrumb.md index 77351b8236..1a26975c96 100644 --- a/docs/en/framework/ui/angular/breadcrumb.md +++ b/docs/en/framework/ui/angular/breadcrumb.md @@ -1,4 +1,4 @@ -## Breadcrumb Component +# Breadcrumb Component ABP provides a component that listens to the angular router's `NavigationEnd` event and creates inputs for `BreadcrumbItemsComponent`. This component is used in diff --git a/docs/en/framework/ui/angular/extensions-overall.md b/docs/en/framework/ui/angular/extensions-overall.md index bba922461b..4776198001 100644 --- a/docs/en/framework/ui/angular/extensions-overall.md +++ b/docs/en/framework/ui/angular/extensions-overall.md @@ -1,4 +1,4 @@ -## Angular UI Extensions +# Angular UI Extensions Angular UI extensions system allows you to add a new action to the actions menu, a new column to the data table, a new action to the toolbar of a page, and add a new field to the create and/or edit forms. diff --git a/docs/en/framework/ui/angular/how-replaceable-components-work-with-extensions.md b/docs/en/framework/ui/angular/how-replaceable-components-work-with-extensions.md index 39c1f00cfe..11a7f6dfb8 100644 --- a/docs/en/framework/ui/angular/how-replaceable-components-work-with-extensions.md +++ b/docs/en/framework/ui/angular/how-replaceable-components-work-with-extensions.md @@ -18,7 +18,8 @@ Open the generated `src/app/my-roles/my-roles.component.ts` file and replace its ```js import { ListService, PagedAndSortedResultRequestDto, PagedResultDto } from '@abp/ng.core'; -import { eIdentityComponents, IdentityRoleDto, IdentityRoleService, RolesComponent } from '@abp/ng.identity'; +import { eIdentityComponents, RolesComponent } from '@abp/ng.identity'; +import { IdentityRoleDto, IdentityRoleService } from '@abp/ng.identity/proxy'; import { ePermissionManagementComponents } from '@abp/ng.permission-management'; import { Confirmation, ConfirmationService } from '@abp/ng.theme.shared'; import { @@ -232,7 +233,7 @@ We have added the `abp-page-toolbar`, `abp-extensible-table`, and `abp-extensibl You should import the required modules for the `MyRolesComponent` to `MyRolesModule`. Open the `src/my-roles/my-roles.module.ts` file and replace the content with the following: ```js -import { UiExtensionsModule } from '@abp/ng.theme.shared/extensions'; +import { ExtensibleModule } from '@abp/ng.components/extensible'; import { NgModule } from '@angular/core'; import { SharedModule } from '../shared/shared.module'; import { MyRolesComponent } from './my-roles.component'; @@ -240,13 +241,13 @@ import { PermissionManagementModule } from '@abp/ng.permission-management'; @NgModule({ declarations: [MyRolesComponent], - imports: [SharedModule, UiExtensionsModule, PermissionManagementModule], + imports: [SharedModule, ExtensibleModule, PermissionManagementModule], exports: [MyRolesComponent], }) export class MyRolesModule {} ``` -- `UiExtensionsModule` imported to be able to use the extension components in your component. +- `ExtensionsModule` imported to be able to use the extension components in your component. - `PermissionManagementModule` imported to be able to use the `abp-permission-*management` in your component. As the last step, it is needs to be replaced the `RolesComponent` with the `MyRolesComponent`. Open the `app.component.ts` and modify its content as shown below: diff --git a/docs/en/framework/ui/angular/quick-start.md b/docs/en/framework/ui/angular/quick-start.md index 2a8986f965..df2d6331b9 100644 --- a/docs/en/framework/ui/angular/quick-start.md +++ b/docs/en/framework/ui/angular/quick-start.md @@ -4,8 +4,8 @@ Please follow the steps below to prepare your development environment for Angular. -1. **Install Node.js:** Please visit [Node.js downloads page](https://nodejs.org/en/download/) and download proper Node.js v16 or v18 installer for your OS. An alternative is to install [NVM](https://github.com/nvm-sh/nvm) and use it to have multiple versions of Node.js in your operating system. -2. **[Optional] Install Yarn:** You may install Yarn v1 (not v2) following the instructions on [the installation page](https://classic.yarnpkg.com/en/docs/install). Yarn v1 delivers an arguably better developer experience compared to npm v6 and below. You may skip this step and work with npm, which is built-in in Node.js, instead. +1. **Install Node.js:** Please visit [Node.js downloads page](https://nodejs.org/en/download/) and download proper Node.js `v18.19+` installer for your OS. An alternative is to install [NVM](https://github.com/nvm-sh/nvm) and use it to have multiple versions of Node.js in your operating system. +2. **[Optional] Install Yarn:** You may install Yarn v1.22+ (not v2) following the instructions on [the installation page](https://classic.yarnpkg.com/en/docs/install). Yarn v1 delivers an arguably better developer experience compared to npm v10 and below. You may skip this step and work with npm, which is built-in in Node.js, instead. 3. **[Optional] Install VS Code:** [VS Code](https://code.visualstudio.com/) is a free, open-source IDE which works seamlessly with TypeScript. Although you can use any IDE including Visual Studio or Rider, VS Code will most likely deliver the best developer experience when it comes to Angular projects. ABP project templates even contain plugin recommendations for VS Code users, which VS Code will ask you to install when you open the Angular project folder. Here is a list of recommended extensions: - [Angular Language Service](https://marketplace.visualstudio.com/items?itemName=angular.ng-template) - [Prettier - Code formatter](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode) diff --git a/docs/en/framework/ui/angular/service-proxies.md b/docs/en/framework/ui/angular/service-proxies.md index 99e6e781c2..695e3027c4 100644 --- a/docs/en/framework/ui/angular/service-proxies.md +++ b/docs/en/framework/ui/angular/service-proxies.md @@ -1,4 +1,4 @@ -## Service Proxies +# Service Proxies Calling a REST endpoint from Angular applications is common. We usually create **services** matching server-side controllers and **interfaces** matching [DTOs](../../architecture/domain-driven-design/data-transfer-objects.md) to interact with the server. This often results in manually transforming C# code into TypeScript equivalents and that is unfortunate, if not intolerable. diff --git a/docs/en/framework/ui/angular/theming.md b/docs/en/framework/ui/angular/theming.md index 58323bb661..1940fc331b 100644 --- a/docs/en/framework/ui/angular/theming.md +++ b/docs/en/framework/ui/angular/theming.md @@ -20,7 +20,7 @@ Currently, three themes are **officially provided**: * The [Basic Theme](basic-theme.md) is the minimalist theme with the plain Bootstrap style. It is **open source and free**. * The [Lepton Theme](https://abp.io/themes) is a **commercial** theme developed by the core ABP team and is a part of the [ABP](https://abp.io/) license. -* The [LeptonX Theme](https://x.leptontheme.com/) is a theme that has both [commercial](https://docs.abp.io/en/commercial/latest/themes/lepton-x/angular) and [lite](../../../ui-themes/lepton-x-lite/angular.md) choices. +* The [LeptonX Theme](https://x.leptontheme.com/) is a theme that has both [commercial](../../../ui-themes/lepton-x/angular.md) and [lite](../../../ui-themes/lepton-x-lite/angular.md) choices. ## Overall diff --git a/docs/en/framework/ui/index.md b/docs/en/framework/ui/index.md new file mode 100644 index 0000000000..760a2616b0 --- /dev/null +++ b/docs/en/framework/ui/index.md @@ -0,0 +1,9 @@ +## ABP UI Options + +ABP provides several options for building the user interface (UI) in your applications. Here are some of the officially supported UI options you can use with ABP: + +* [MVC / Razor Pages](./mvc-razor-pages/overall.md) +* [Blazor](./blazor/overall.md) +* [Angular](./angular/quick-start.md) +* [React Native](./react-native/index.md) +* [MAUI](./maui/index.md) \ No newline at end of file diff --git a/docs/en/framework/ui/maui/index.md b/docs/en/framework/ui/maui/index.md index 2c940b8b90..69f9518e92 100644 --- a/docs/en/framework/ui/maui/index.md +++ b/docs/en/framework/ui/maui/index.md @@ -64,19 +64,19 @@ The MAUI template consists of four pages: ### Homepage -![Maui Home Page](./images/maui-home-page.png) +![Maui Home Page](../../../images/maui-home-page.png) ### Users Page -![Maui Users Page](./images/maui-users-page.png) +![Maui Users Page](../../../images/maui-users-page.png) ### Tenants Page -![Maui Tenants Page](./images/maui-tenants-page.png) +![Maui Tenants Page](../../../images/maui-tenants-page.png) ### Settings Page -![Maui Settings Page](./images/maui-settings-page.png) +![Maui Settings Page](../../../images/maui-settings-page.png) ## Run the Mobile Application @@ -100,4 +100,4 @@ There is no custom step for publishing your app. You can follow the official doc - [Windows](https://learn.microsoft.com/en-us/dotnet/maui/windows/deployment/overview?view=net-maui-8.0) ABP template uses **Secure Storage** to store access & refresh tokens. So, make sure you have completed the following section for each platform to use it in production: -- [Secure Storage - Get Started](https://learn.microsoft.com/en-us/dotnet/maui/platform-integration/storage/secure-storage?view=net-maui-8.0&tabs=android#get-started) \ No newline at end of file +- [Secure Storage - Get Started](https://learn.microsoft.com/en-us/dotnet/maui/platform-integration/storage/secure-storage?view=net-maui-8.0&tabs=android#get-started) diff --git a/docs/en/framework/ui/mvc-razor-pages/client-side-package-management.md b/docs/en/framework/ui/mvc-razor-pages/client-side-package-management.md index 2e7515884a..bb984a001f 100644 --- a/docs/en/framework/ui/mvc-razor-pages/client-side-package-management.md +++ b/docs/en/framework/ui/mvc-razor-pages/client-side-package-management.md @@ -1,5 +1,5 @@ -## ASP.NET Core MVC Client Side Package Management +# ASP.NET Core MVC Client Side Package Management ABP can work with any type of client side package management systems. You can even decide to use no package management system and manage your dependencies manually. diff --git a/docs/en/framework/ui/mvc-razor-pages/overall.md b/docs/en/framework/ui/mvc-razor-pages/overall.md index b6e85bfd15..657fb42df7 100644 --- a/docs/en/framework/ui/mvc-razor-pages/overall.md +++ b/docs/en/framework/ui/mvc-razor-pages/overall.md @@ -36,7 +36,7 @@ Currently, three themes are **officially provided**: * The [Basic Theme](Basic-Theme.md) is the minimalist theme with the plain Bootstrap style. It is **open source and free**. * The [Lepton Theme](https://abp.io/themes) is a **commercial** theme developed by the core ABP team and is a part of the [ABP](https://abp.io/) license. -* The [LeptonX Theme](https://x.leptontheme.com/) is a theme that has both [commercial](https://docs.abp.io/en/commercial/latest/themes/lepton-x/mvc) and [lite](../../../ui-themes/lepton-x-lite/asp-net-core.md) choices. +* The [LeptonX Theme](https://x.leptontheme.com/) is a theme that has both [commercial](../../../ui-themes/lepton-x/mvc.md) and [lite](../../../ui-themes/lepton-x-lite/asp-net-core.md) choices. There are also some community-driven themes for the ABP (you can search on the web). diff --git a/docs/en/framework/ui/mvc-razor-pages/security-headers.md b/docs/en/framework/ui/mvc-razor-pages/security-headers.md index 56cde05005..a54697aca4 100644 --- a/docs/en/framework/ui/mvc-razor-pages/security-headers.md +++ b/docs/en/framework/ui/mvc-razor-pages/security-headers.md @@ -38,7 +38,7 @@ Security Headers middleware is an ASP.NET Core request pipeline [middleware](htt app.UseAbpSecurityHeaders(); ``` -> You can add this middleware after `app.UseRouting()` in your module class's `OnApplicationInitialization` method to register it to the request pipeline. This middleware is already configured in the [ABP Commercial Startup Templates](https://docs.abp.io/en/commercial/latest/startup-templates/index), so you don't need to manually add it if you are using one of these startup templates. +> You can add this middleware after `app.UseRouting()` in your module class's `OnApplicationInitialization` method to register it to the request pipeline. This middleware is already configured in the [ABP Commercial Startup Templates](../../../solution-templates/index.md), so you don't need to manually add it if you are using one of these startup templates. After that, you have registered the `UseAbpSecurityHeaders` middleware into the request pipeline, the defined security headers will be shown in the response headers as in the figure below: diff --git a/docs/en/framework/ui/mvc-razor-pages/theming.md b/docs/en/framework/ui/mvc-razor-pages/theming.md index 9cddf1ba96..895032f1d7 100644 --- a/docs/en/framework/ui/mvc-razor-pages/theming.md +++ b/docs/en/framework/ui/mvc-razor-pages/theming.md @@ -21,7 +21,7 @@ Currently, four themes are **officially provided**: * The [Basic Theme](basic-theme.md) is the minimalist theme with the plain Bootstrap style. It is **open source and free**. * The [LeptonX Lite Theme](../../../ui-themes/lepton-x-lite/asp-net-core.md) is modern and stylish Bootstrap UI theme. It is ideal if you want to have a production ready UI theme. It is also **open source and free**. * The [Lepton Theme](https://abp.io/themes) is a **commercial** theme developed by the core ABP team and is a part of the [ABP](https://abp.io/) license. -* The [LeptonX Theme](https://docs.abp.io/en/commercial/latest/themes/lepton-x/index) is also a **commercial** theme developed by the core ABP theme and is a part of the [ABP](https://abp.io/) license. This is the default theme after ABP v6.0.0. +* The [LeptonX Theme](../../../ui-themes/lepton-x/index.md) is also a **commercial** theme developed by the core ABP theme and is a part of the [ABP](https://abp.io/) license. This is the default theme after ABP v6.0.0. There are also some community-driven themes for the ABP (you can search on the web). diff --git a/docs/en/get-started/images/abp-studio-created-new-solution.png b/docs/en/get-started/images/abp-studio-created-new-solution.png index 4a7d4f0b01..c089c276f6 100644 Binary files a/docs/en/get-started/images/abp-studio-created-new-solution.png and b/docs/en/get-started/images/abp-studio-created-new-solution.png differ diff --git a/docs/en/get-started/images/abp-studio-new-solution-dialog-additional-options-microservice.png b/docs/en/get-started/images/abp-studio-new-solution-dialog-additional-options-microservice.png index 87bd86755c..9f9df8991f 100644 Binary files a/docs/en/get-started/images/abp-studio-new-solution-dialog-additional-options-microservice.png and b/docs/en/get-started/images/abp-studio-new-solution-dialog-additional-options-microservice.png differ diff --git a/docs/en/get-started/images/abp-studio-new-solution-dialog-additional-options.png b/docs/en/get-started/images/abp-studio-new-solution-dialog-additional-options.png new file mode 100644 index 0000000000..4a2d3c2dd2 Binary files /dev/null and b/docs/en/get-started/images/abp-studio-new-solution-dialog-additional-options.png differ diff --git a/docs/en/get-started/images/abp-studio-new-solution-dialog-database-configurations-efcore.png b/docs/en/get-started/images/abp-studio-new-solution-dialog-database-configurations-efcore.png index e71cbb7036..e9a5bcee19 100644 Binary files a/docs/en/get-started/images/abp-studio-new-solution-dialog-database-configurations-efcore.png and b/docs/en/get-started/images/abp-studio-new-solution-dialog-database-configurations-efcore.png differ diff --git a/docs/en/get-started/images/abp-studio-new-solution-dialog-database-configurations-mongo.png b/docs/en/get-started/images/abp-studio-new-solution-dialog-database-configurations-mongo.png index f0b0ed136b..4b00156e3f 100644 Binary files a/docs/en/get-started/images/abp-studio-new-solution-dialog-database-configurations-mongo.png and b/docs/en/get-started/images/abp-studio-new-solution-dialog-database-configurations-mongo.png differ diff --git a/docs/en/get-started/images/abp-studio-new-solution-dialog-database-provider-efcore.png b/docs/en/get-started/images/abp-studio-new-solution-dialog-database-provider-efcore.png index 6f8e937b09..138d1904f5 100644 Binary files a/docs/en/get-started/images/abp-studio-new-solution-dialog-database-provider-efcore.png and b/docs/en/get-started/images/abp-studio-new-solution-dialog-database-provider-efcore.png differ diff --git a/docs/en/get-started/images/abp-studio-new-solution-dialog-database-provider-mongo.png b/docs/en/get-started/images/abp-studio-new-solution-dialog-database-provider-mongo.png index a1175b81bf..1e3f54a9d8 100644 Binary files a/docs/en/get-started/images/abp-studio-new-solution-dialog-database-provider-mongo.png and b/docs/en/get-started/images/abp-studio-new-solution-dialog-database-provider-mongo.png differ diff --git a/docs/en/get-started/images/abp-studio-new-solution-dialog-mobile-framework-microservice.png b/docs/en/get-started/images/abp-studio-new-solution-dialog-mobile-framework-microservice.png index b7ccfb2976..7e43e784f3 100644 Binary files a/docs/en/get-started/images/abp-studio-new-solution-dialog-mobile-framework-microservice.png and b/docs/en/get-started/images/abp-studio-new-solution-dialog-mobile-framework-microservice.png differ diff --git a/docs/en/get-started/images/abp-studio-new-solution-dialog-mobile-framework.png b/docs/en/get-started/images/abp-studio-new-solution-dialog-mobile-framework.png index 20b89c059d..f773d887d8 100644 Binary files a/docs/en/get-started/images/abp-studio-new-solution-dialog-mobile-framework.png and b/docs/en/get-started/images/abp-studio-new-solution-dialog-mobile-framework.png differ diff --git a/docs/en/get-started/images/abp-studio-new-solution-dialog-optional-modules.png b/docs/en/get-started/images/abp-studio-new-solution-dialog-optional-modules.png new file mode 100644 index 0000000000..992760e3fc Binary files /dev/null and b/docs/en/get-started/images/abp-studio-new-solution-dialog-optional-modules.png differ diff --git a/docs/en/get-started/images/abp-studio-new-solution-dialog-public-website.png b/docs/en/get-started/images/abp-studio-new-solution-dialog-public-website.png new file mode 100644 index 0000000000..e10d4a965c Binary files /dev/null and b/docs/en/get-started/images/abp-studio-new-solution-dialog-public-website.png differ diff --git a/docs/en/get-started/images/abp-studio-new-solution-dialog-solution-properties.png b/docs/en/get-started/images/abp-studio-new-solution-dialog-solution-properties.png index 93b3154e7c..7412b4b6e1 100644 Binary files a/docs/en/get-started/images/abp-studio-new-solution-dialog-solution-properties.png and b/docs/en/get-started/images/abp-studio-new-solution-dialog-solution-properties.png differ diff --git a/docs/en/get-started/images/abp-studio-new-solution-dialog-solution-structure.png b/docs/en/get-started/images/abp-studio-new-solution-dialog-solution-structure.png index 3cdd22f555..310488c1bc 100644 Binary files a/docs/en/get-started/images/abp-studio-new-solution-dialog-solution-structure.png and b/docs/en/get-started/images/abp-studio-new-solution-dialog-solution-structure.png differ diff --git a/docs/en/get-started/images/abp-studio-new-solution-dialog-ui-framework.png b/docs/en/get-started/images/abp-studio-new-solution-dialog-ui-framework.png index 228c711a1a..d373a55344 100644 Binary files a/docs/en/get-started/images/abp-studio-new-solution-dialog-ui-framework.png and b/docs/en/get-started/images/abp-studio-new-solution-dialog-ui-framework.png differ diff --git a/docs/en/get-started/images/abp-studio-new-solution-dialog-ui-theme.png b/docs/en/get-started/images/abp-studio-new-solution-dialog-ui-theme.png index d17d1d766d..8594f02d58 100644 Binary files a/docs/en/get-started/images/abp-studio-new-solution-dialog-ui-theme.png and b/docs/en/get-started/images/abp-studio-new-solution-dialog-ui-theme.png differ diff --git a/docs/en/get-started/images/abp-studio-quick-start-application-solution-runner.png b/docs/en/get-started/images/abp-studio-quick-start-application-solution-runner.png index 2e4a9aa583..f5ca4c97e7 100644 Binary files a/docs/en/get-started/images/abp-studio-quick-start-application-solution-runner.png and b/docs/en/get-started/images/abp-studio-quick-start-application-solution-runner.png differ diff --git a/docs/en/get-started/images/abp-studio-quick-start-browse-command.png b/docs/en/get-started/images/abp-studio-quick-start-browse-command.png index 186ff2d55d..c97b3c9700 100644 Binary files a/docs/en/get-started/images/abp-studio-quick-start-browse-command.png and b/docs/en/get-started/images/abp-studio-quick-start-browse-command.png differ diff --git a/docs/en/get-started/images/abp-studio-quick-start-browse.png b/docs/en/get-started/images/abp-studio-quick-start-browse.png index d63c20c8ac..47b4bf29cf 100644 Binary files a/docs/en/get-started/images/abp-studio-quick-start-browse.png and b/docs/en/get-started/images/abp-studio-quick-start-browse.png differ diff --git a/docs/en/get-started/images/abp-studio-quick-start-example-applications-in-solution-runner.png b/docs/en/get-started/images/abp-studio-quick-start-example-applications-in-solution-runner.png index 46adf8bfc0..44cef603fb 100644 Binary files a/docs/en/get-started/images/abp-studio-quick-start-example-applications-in-solution-runner.png and b/docs/en/get-started/images/abp-studio-quick-start-example-applications-in-solution-runner.png differ diff --git a/docs/en/get-started/images/solution-runner-public-website.png b/docs/en/get-started/images/solution-runner-public-website.png index a00368ee79..b1e76a4ce6 100644 Binary files a/docs/en/get-started/images/solution-runner-public-website.png and b/docs/en/get-started/images/solution-runner-public-website.png differ diff --git a/docs/en/get-started/layered-web-application.md b/docs/en/get-started/layered-web-application.md index 76afeb6dab..0b051b9681 100644 --- a/docs/en/get-started/layered-web-application.md +++ b/docs/en/get-started/layered-web-application.md @@ -11,6 +11,34 @@ In this quick start guide, you will learn how to create and run a layered (and potentially modular) web application using [ABP Studio](../studio/index.md). +## Setup your development environment + +First things first! Let's setup your development environment before creating the first project. + +### Pre-requirements + +The following tools should be installed on your development machine: + +* [Visual Studio 2022](https://visualstudio.microsoft.com/vs/) (v17.3+) for Windows / [Visual Studio for Mac](https://visualstudio.microsoft.com/vs/mac/). [1](#f-editor) +* [.NET 8.0+](https://dotnet.microsoft.com/en-us/download/dotnet) +{{ if UI != "Blazor" }} +* [Node v18.19+](https://nodejs.org/) +* [Yarn v1.22+ (not v2)](https://classic.yarnpkg.com/en/docs/install) [2](#f-yarn) or npm v10+ (already installed with Node) +{{ end }} +{{ if Tiered == "Yes" }} +* [Redis](https://redis.io/) (as the [distributed cache](../framework/fundamentals/caching.md)). +{{ else }} +* [Redis](https://redis.io/) (as the [distributed cache](../framework/fundamentals/caching.md)) is required if you select the Public website option. +{{ end }} + +1 _You can use another editor instead of Visual Studio as long as it supports .NET Core and ASP.NET Core._ [↩](#a-editor) + +{{ if UI != "Blazor" }} + +2 _Yarn v2 works differently and is not supported._ [↩](#a-yarn) + +{{ end }} + ## Creating a New Solution > 🛈 This document uses [ABP Studio](../studio/index.md) to create new ABP solutions. **ABP Studio** is in the beta version now. If you have any issues, you can use the [ABP CLI](../cli/index.md) to create new solutions. You can also use the [getting started page](https://abp.io/get-started) to easily build ABP CLI commands for new project creations. @@ -49,17 +77,25 @@ LeptonX is the suggested UI theme that is proper for production usage. Select on Here, you see all the mobile applications available in that startup solution template. These mobile applications are well-integrated into your solution and can use the same backend with your web application. They are simple (do not have pre-built features as much as the web application) but a very good starting point to build your mobile application. -Pick the one best for you, or select the *None* if you don't want a mobile application in your solution, then click Next to navigate to the *Additional UI options* screen: +Pick the one best for you, or select the *None* if you don't want a mobile application in your solution, then click Next to navigate to the *Public website* screen: -![abp-studio-new-solution-dialog-additional-ui-options](images/abp-studio-new-solution-dialog-additional-ui-options.png) +![abp-studio-new-solution-dialog-public-website](images/abp-studio-new-solution-dialog-public-website.png) That startup solution template also provides an option to create a second web application inside the solution. The second application is called the Public website, an ASP.NET Core MVC / Razor Page application. It can be used to create a public landing/promotion for your product. It is well integrated into the solution (can share the same services, entities, database, and the same authentication logic, for example). If you want, you can also include the [CMS Kit module](../modules/cms-kit) to your solution to add dynamic content features to your web application. -So, either select the *Public website* or skip it and click the Next button for the *Solution Structure* selection: +So, either select the *Public website* or skip it and click the Next button for the *Optional Modules* selection: + +![abp-studio-new-solution-dialog-optional-modules.png](images/abp-studio-new-solution-dialog-optional-modules.png) + +Each item in that list is a pre-built application module. You can click the blue icon near to the module name to get more information about the module. You can leave the list as is (so, it installs the most common and used modules for you) or customize based on your preference. + +Installing a module after creating the solution may require manual steps. So, it is better to decide the modules in the beginning. You can create an example solutions before your real solution to explore the solution and modules. + +Once you select the desired modules, click the *Next* button for the *Solution Structure* screen: ![abp-studio-new-solution-dialog-solution-structure](images/abp-studio-new-solution-dialog-solution-structure.png) -The *Tiered* option is used to physically separate the web application (the UI part) from the backend HTTP APIs. It creates a separate host application that only serves the HTTP (REST) APIs. The web application then performs remote HTTP calls to that application for every operation. If the *Tiered* option is not selected, then the web and HTTP APIs are hosted in a single application, and the calls from the UI layer to the API layer are performed in-process. +It creates a separate host application that only serves the HTTP (REST) APIs. The web application then performs remote HTTP calls to that application for every operation. If the *Tiered* option is not selected, then the web and HTTP APIs are hosted in a single application, and the calls from the UI layer to the API layer are performed in-process. The tiered architecture allows you to host the web (UI) application in a server that can not access to your database server. However, it brings a slight loss of performance (because of the HTTP calls between UI and HTTP API applications) and makes your architecture, development, and deployment more complex. If you don't understand the tiered structure, just skip it. @@ -79,9 +115,13 @@ On that screen, you can decide on your database provider by selecting one of the ![abp-studio-new-solution-dialog-database-configurations](images/abp-studio-new-solution-dialog-database-configurations-mongo.png) {{ end }} -Here, you can select the database management systems (DBMS){{ if DB == "EF" }} and the connection string{{ end }}. Now, we are ready to allow ABP Studio to create our solution. Just click the *Create* button and let the ABP Studio do the rest for you. +Here, you can select the database management systems (DBMS){{ if DB == "EF" }} and the connection string{{ end }}. Click *Next* button to see the *Additional Options*. + +![abp-studio-new-solution-dialog-additional-options](images/abp-studio-new-solution-dialog-additional-options.png) + +If you uncheck the *Kubernetes Configuration* option, the solution will not include the Kubernetes configuration files, such as Helm charts and other Kubernetes-related files. You can also specify *Social Logins*; if you uncheck this option, the solution will not be configured for social login. -After clicking the Create button, the dialog is closed and your solution is loaded into ABP Studio: +Now, we are ready to allow ABP Studio to create our solution. Just click the *Create* button and let the ABP Studio do the rest for you. After clicking the Create button, the dialog is closed and your solution is loaded into ABP Studio: ![abp-studio-created-new-solution](images/abp-studio-created-new-solution.png) @@ -101,7 +141,7 @@ Open the [Solution Runner](../studio/running-applications.md) section on the lef Once you click the *Play* icon on the left side, the section is open in the same place as the Solution Explorer section. ABP Studio also opens the *Application Monitor* view on the main content area. *Application Monitor* shows useful insights for your applications (e.g. *HTTP Request*, *Events* and *Exceptions*) in real-time. You can use it to see the happenings in your applications, so you can easily track errors and many helpful details. -In the Solution Runner section (on the left side) you can see all the runnable applications in the current solution. For the MVC with public website example, we have three applications: +In the Solution Runner section (on the left side) you can see all the runnable applications in the current solution. For the MVC with public website and MAUI mobile example, we have four applications: ![abp-studio-quick-start-example-applications-in-solution-runner](images/abp-studio-quick-start-example-applications-in-solution-runner.png) @@ -202,4 +242,4 @@ Before starting the mobile application, ensure that you configure it for [react- > For example in non-tiered MVC with public website application: -![solution-runner-public-website](images/solution-runner-public-website.png) +![solution-runner-public-website](images/solution-runner-public-website.png) \ No newline at end of file diff --git a/docs/en/get-started/microservice.md b/docs/en/get-started/microservice.md index 9a90be00da..47f1091b14 100644 --- a/docs/en/get-started/microservice.md +++ b/docs/en/get-started/microservice.md @@ -71,7 +71,7 @@ Click the Next button to see *Additional Options* selection: ![abp-studio-new-solution-dialog-additional-options](images/abp-studio-new-solution-dialog-additional-options-microservice.png) -If you unchecked the *Kubernetes Configuration* option, the solution will not include the Kubernetes configuration files which include the Helm charts and other Kubernetes related files. +If you unchecked the *Kubernetes Configuration* option, the solution will not include the Kubernetes configuration files which include the Helm charts and other Kubernetes related files. You can also specify *Social Logins*; if you uncheck this option, the solution will not be configured for social login. Now, we are ready to allow ABP Studio to create our solution. Just click the *Create* button and let the ABP Studio do the rest for you. After clicking the Create button, the dialog is closed and your solution is loaded into ABP Studio: @@ -125,6 +125,8 @@ In the *Solution Runner* section (on the left side) you can see all the runnable > All the leaf items in the *Solution Runner* is called as an *Application* as they are executable applications. +> For a faster start process, first start the *Docker-Dependencies*, then you can start all applications. + As shown in the figure above, the executable applications are grouped into folders like `apps`, `gateways`, `infrastructure`, and `services`. You can start/stop them all, a group (folder) of them, or one by one. Before running the applications, it is good to be sure that all applications are built. To do that, right-click the root item in the *Solution Runner* and select *Build* -> *Build All* action. diff --git a/docs/en/get-started/single-layer-web-application.md b/docs/en/get-started/single-layer-web-application.md index ff9868eff9..319fb19c9a 100644 --- a/docs/en/get-started/single-layer-web-application.md +++ b/docs/en/get-started/single-layer-web-application.md @@ -10,6 +10,34 @@ In this quick start guide, you will learn how to create and run a single layer web application using [ABP Studio](../studio/index.md). +## Setup your development environment + +First things first! Let's setup your development environment before creating the first project. + +### Pre-requirements + +The following tools should be installed on your development machine: + +* [Visual Studio 2022](https://visualstudio.microsoft.com/vs/) (v17.3+) for Windows / [Visual Studio for Mac](https://visualstudio.microsoft.com/vs/mac/). [1](#f-editor) +* [.NET 8.0+](https://dotnet.microsoft.com/en-us/download/dotnet) +{{ if UI != "Blazor" }} +* [Node v18.19+](https://nodejs.org/) +* [Yarn v1.22+ (not v2)](https://classic.yarnpkg.com/en/docs/install) [2](#f-yarn) or npm v10+ (already installed with Node) +{{ end }} +{{ if Tiered == "Yes" }} +* [Redis](https://redis.io/) (as the [distributed cache](../framework/fundamentals/caching.md)). +{{ else }} +* [Redis](https://redis.io/) (as the [distributed cache](../framework/fundamentals/caching.md)) is required if you select the Public website option. +{{ end }} + +1 _You can use another editor instead of Visual Studio as long as it supports .NET Core and ASP.NET Core._ [↩](#a-editor) + +{{ if UI != "Blazor" }} + +2 _Yarn v2 works differently and is not supported._ [↩](#a-yarn) + +{{ end }} + ## Creating a New Solution > 🛈 This document uses [ABP Studio](../studio/index.md) to create new ABP solutions. **ABP Studio** is in the beta version now. If you have any issues, you can use the [ABP CLI](../cli/index.md) to create new solutions. You can also use the [getting started page](https://abp.io/get-started) to easily build ABP CLI commands for new project creations. diff --git a/docs/en/guides/migrating-from-open-source.md b/docs/en/guides/migrating-from-open-source.md index 82ea2ba65c..5340e4212a 100644 --- a/docs/en/guides/migrating-from-open-source.md +++ b/docs/en/guides/migrating-from-open-source.md @@ -1,483 +1,57 @@ # Migrating from Open Source Templates -````json -//[doc-params] -{ - "DB": ["EF", "Mongo"] -} -```` +ABP Studio provides a way for users, who already started the development before purchasing a license, to auto-upgrade their solutions with Pro modules. You can use this functionality through ABP Studio UI or ABP Studio CLI: -This guide provides you a step-by-step guidance to migrating your existing application (that uses the ABP) to ABP. Since ABP uses the main structure of the ABP and is built on top of that, this process is pretty straightforward, you can apply the steps mentioned in each step and easily migrate your project to ABP. +* A new button labeled `Upgrade to Pro` will be visible if you have a license but the current solution is created with open-source (free) license. -> After following this documentation, you should be able to migrate your project to ABP. However, if you have any problems or cannot migrate your project, we are providing paid consultancy, which you can find details at [https://abp.io/additional-services](https://abp.io/additional-services). On this page, you can find related pieces of information about our trainings, custom project development, and porting existing projects services, and you can fill-out the contact form, so we can reach out to you. +![upgrade-to-pro](../images/studio-upgrade-to-pro.png) -## ABP Migration Steps +* Alternatively, you can use the following ABP Studio CLI command to achieve the same functionality: -In this guide, we assume that you have a middle-complex ABP based solution and want to migrate to ABP. Throughout this documentation, `Acme.BookStore` application will be used as a reference solution (example application that is described in ABP's tutorial documents){{if DB == "EF"}}, which you can find at [https://github.com/abpframework/abp-samples/tree/master/BookStore-Mvc-EfCore](https://github.com/abpframework/abp-samples/tree/master/BookStore-Mvc-EfCore){{end}} but all of these steps are applicable for your own applications, only some of them can be changed according to your project choose and structure. However, the migration flow is the same. + ```bash + abp upgrade [-t ] [options] + + Examples: + + abp upgrade -t app + abp upgrade -t app --language-management --gdpr --audit-logging-ui --text-template-management --openiddict-pro + abp upgrade -t app-nolayers --audit-logging-ui + abp upgrade -t app-nolayers -p D:\MyProjects\MyProject + ``` -There are 4 main steps to migrating from ABP to ABP, and each one of them is explained in the following sections, step-by-step and project-based: +## Changes in the solution -### 1. License Transition +### Module changes -The first step is to obtain the necessary license for ABP to be able to get the benefit of the pro modules and unlock the additional features. To do that, you should first get your `ApiKey` from the [organization's detail page](https://abp.io/my-organizations). +This command will remove the following modules from your solution: -You can update the **NuGet.Config** file in the root directory of your solution and add the *packageSource* as follows (don't forget to replace `` placeholder): +- Volo.Abp.Account +- Volo.Abp.Identity +- Volo.Abp.TenantManagement +- Volo.Abp.LeptonXLiteTheme -```diff - - - - -+ - - -``` +And install the following modules to your solution: -After that, you can obtain an `AbpLicenseCode` by creating a startup template and copying the code from the `appsettings.secrets.json` file. Then, you can open the `appsettings.secrets.json` files under the `*.DbMigrator` and `*.Domain` projects and add your `AbpLicenseCode`: +- Volo.Abp.Account.Pro +- Volo.Abp.Identity.Pro +- Volo.Abp.LeptonXTheme +- Volo.Saas +- Volo.Abp.OpenIddict.Pro (*Optional*) +- Volo.Abp.AuditLogging.Pro (*Optional*) +- Volo.Abp.LanguageManagement (*Optional*) +- Volo.Abp.TextTemplateManagement (*Optional*) +- Volo.Abp.Gdpr (*Optional*) -```json -{ - //... - - "AbpLicenseCode": "" -} +### Other changes -``` +The command will also do the following changes in your solution: -> `ApiKey` is needed to be able to use ABP's NuGet packages and `AbpLicenseCode` is needed for license checks per module. +- It will add `nuget.abp.io` NuGet source to `NuGet.config` file. +- It will create or update `appsettings.secrets.json` files to place the license key needed for Pro module usage. +- It will update the database. (And it will create a new migration if the solution uses EntityFramework Core) +- It will run `install-libs` command at the end. -### 2. Installing the ABP Modules +## Things to pay attention before using -After, you have added the `ApiKey` and `AbpLicenseCode` to the relevant places, now you can add [ABP's modules](../modules) to your solution. ABP provides plenty of modules that extend the ABP modules, such as the `Account Pro` module over the `Account` module or the `Identity Pro` module over the `Identity` module. - -To replace these modules and also add the additional modules provided by ABP, you can use the `abp add-module` command (and then remove the free modules as described in the next section). This command finds all packages of the specified module, finds the related projects in the solution, and adds each package to the corresponding project in the solution. Therefore, by using this command, you don't need to manually add the package references to the `*.csproj` files and add related `[DependsOn(typeof(<>))]` statements to the module classes, instead, this command does this on behalf of you. - -You can run the following commands one after another in your solution directory and add all the related modules into your solution as you would have started with [one of the startup templates of ABP](../solution-templates): - -1. `abp add-module Volo.Identity.Pro --skip-db-migrations` → [Identity Module](../modules/identity.md) -2. `abp add-module Volo.OpenIddict.Pro --skip-db-migrations` → [OpenIddict Module](../modules/openiddict.md) -3. `abp add-module Volo.Saas --skip-db-migrations` → [SaaS Module](../modules/saas.md) -4. `abp add-module Volo.AuditLogging.Ui --skip-db-migrations` → [Audit Logging UI Module](../modules/audit-logging.md) -5. `abp add-module Volo.Account.Pro --skip-db-migrations` → [Account Module](../modules/account.md) -6. `abp add-module Volo.TextTemplateManagement --skip-db-migrations` → [Text Template Management Module](../modules/text-template-management.md) -7. `abp add-module Volo.LanguageManagement --skip-db-migrations` → [Language Management Module](../modules/language-management.md) -8. `abp add-module Volo.Gdpr --skip-db-migrations` → [GDPR Module](../modules/gdpr.md) -9. `abp add-module Volo.Abp.BlobStoring.Database --skip-db-migrations` → [Blob Storing - Database Provider](../framework/infrastructure/blob-storing/database.md) - -> These 9 modules are pre-installed on the [startup templates of ABP](../solution-templates). Therefore, you can install all of them if you want to align your project with the startup templates, but it's totally optional, so you can skip running the command above for a module that you don't want to add to your solution. - -After running the commands above, all of the related commercial packages and their dependencies will be added to your solution. In addition to these module packages, you can add `Volo.Abp.Commercial.SuiteTemplates` package into your domain application to be able to use ABP Suite later on. By doing that you will be able to add your solution from [ABP Suite UI](../suite) and generate CRUD pages for your applications whenever you want. - -So, open your `*Domain.csproj` file and add the line below (don't forget to replace the `` placeholder): - -```xml - -``` - -Then, for the final step, you need to add the related `DependsOn` statement to the `*DomainModule.cs` file as follows: - -```cs -using Volo.Abp.Commercial.SuiteTemplates; - -// ... - -[DependsOn(typeof(VoloAbpCommercialSuiteTemplatesModule))] -public class BookStoreDomainModule : AbpModule -{ - //omited for code abbreviation... -} -``` - -### 3. Removing the ABP Module References & Updating Configurations - -After the license transition and installing the ABP Modules, now you can remove the unnecessary free modules. For example, now you don't need the `Identity` module in your solution, because you have added the `Identity PRO` module in the previous section and it already has dependency on the free module and extends it. - -You should remove various dependencies and references in different projects in your solution. All of the required changes are listed below in different sections, please apply the following steps to remove the unnecessary ABP Modules: - -#### 3.1 - Domain.Shared Project - -Remove the unnecessary references from the `*Domain.Shared.csproj`: - -```diff -- -- -- -``` - -Remove the unnecessary namespaces, and **DependsOn** statements from `*DomainSharedModule.cs`: - -```diff -- using Volo.Abp.TenantManagement; - -- typeof(AbpIdentityDomainSharedModule), -- typeof(AbpOpenIddictDomainSharedModule), -- typeof(AbpTenantManagementDomainSharedModule) -``` - -#### 3.2 - Domain Project - -Remove the unnecessary references from the `*Domain.csproj`: - -```diff -- -- -- -``` - -Remove the unnecessary namespaces, and **DependsOn** statements from `*DomainModule.cs`: - -```diff -- using Volo.Abp.TenantManagement; - -- typeof(AbpIdentityDomainModule), -- typeof(AbpOpenIddictDomainModule), -- typeof(AbpTenantManagementDomainModule), -``` - -After removing the unnecessary references, we should update the namespaces in the `BookStoreDbMigrationService` class under the **Data** folder: - -```diff -- using Volo.Abp.TenantManagement; -+ using Volo.Saas.Tenants; -``` - -{{ if DB == "EF" }} - -#### 3.3 - EntityFrameworkCore Project - -Remove the unnecessary references from the `*EntityFrameworkCore.csproj`: - -```diff -- -- -- -``` - -Remove the unnecessary namespaces from `*EntityFrameworkCoreModule.cs`: - -```diff -- using Volo.Abp.TenantManagement.EntityFrameworkCore; - -- typeof(AbpIdentityEntityFrameworkCoreModule), -- typeof(AbpOpenIddictEntityFrameworkCoreModule), -- typeof(AbpTenantManagementEntityFrameworkCoreModule) -``` - -Then, update the`*DbContext.cs` and make the related configurations: - -```diff -- using Volo.Abp.TenantManagement; -- using Volo.Abp.TenantManagement.EntityFrameworkCore; -+ using Volo.Saas.Editions; -+ using Volo.Saas.EntityFrameworkCore; -+ using Volo.Saas.Tenants; -+ using Volo.Abp.LanguageManagement.EntityFrameworkCore; - -[ReplaceDbContext(typeof(IIdentityDbContext))] -- [ReplaceDbContext(typeof(ITenantManagementDbContext))] -+ [ReplaceDbContext(typeof(ISaasDbContext))] -[ConnectionStringName("Default")] -public class BookStoreDbContext : - AbpDbContext, - IIdentityDbContext, -- ITenantManagementDbContext -+ ISaasDbContext -{ - //... - -- // Tenant Management -- public DbSet Tenants { get; set; } -- public DbSet TenantConnectionStrings { get; set; } - -+ // SaaS -+ public DbSet Tenants { get; set; } -+ public DbSet Editions { get; set; } -+ public DbSet TenantConnectionStrings { get; set; } - - //... - - protected override void OnModelCreating(ModelBuilder builder) - { - base.OnModelCreating(builder); - - //... - -- builder.ConfigureIdentity(); -+ builder.ConfigureIdentityPro(); -- builder.ConfigureOpenIddict(); -+ builder.ConfigureOpenIddictPro(); -- builder.ConfigureTenantManagement(); -+ builder.ConfigureSaas(); - -+ builder.ConfigureLanguageManagement(); - - } -} -``` - -{{ else }} - -#### 3.3 - MongoDB Project - -Remove the unnecessary references from the `*MongoDb.csproj`: - -```diff -- -- -- -``` - -Remove the unnecessary namespaces from `*MongoDbModule.cs`: - -```diff -- using Volo.Abp.TenantManagement.MongoDb; - -- typeof(AbpIdentityMongoDbModule), -- typeof(AbpOpenIddictMongoDbModule), -- typeof(AbpTenantManagementMongoDbModule) -``` - -{{ end }} - -#### 3.4 - Application.Contracts Project - -Remove the unnecessary references from the `*Application.Contracts.csproj`: - -```diff -- -- -- -``` - -Remove the unnecessary namespaces, and **DependsOn** statements from `*ApplicationContractsModule.cs`: - -```diff -- using Volo.Abp.TenantManagement; - -- typeof(AbpAccountApplicationContractsModule), -- typeof(AbpTenantManagementApplicationContractsModule), -``` - -#### 3.5 - Application Project - -Remove the unnecessary references from the `*Application.csproj`: - -```diff -- -- -- -``` - -Remove the unnecessary namespaces, and **DependsOn** statements from `*ApplicationModule.cs`: - -```diff -- using Volo.Abp.TenantManagement; - -- typeof(AbpAccountApplicationModule), -- typeof(AbpTenantManagementApplicationModule), -``` - -#### 3.6 - HttpApi Project - -Remove the unnecessary references from the `*HttpApi.csproj`: - -```diff -- -- -- -``` - -Remove the unnecessary namespaces, and **DependsOn** statements from `*HttpApiModule.cs`: - -```diff -- using Volo.Abp.TenantManagement; - -- typeof(AbpAccountHttpApiModule), -- typeof(AbpTenantManagementHttpApiModule), -``` - -#### 3.7 - HttpApi.Client Project - -Remove the unnecessary references from the `*HttpApi.Client.csproj`: - -```diff -- -- -- -``` - -Remove the unnecessary namespaces, and **DependsOn** statements from `*HttpApiClientModule.cs`: - -```diff -- using Volo.Abp.TenantManagement; - -- typeof(AbpAccountHttpApiClientModule), -- typeof(AbpTenantManagementHttpApiClientModule), -``` - -#### 3.8 - Web Project - -Remove the unnecessary references from the `*Web.csproj`: - -```diff -- -+ - -- -- - -- -+ - -``` - -> Notice, that you have also changed the LeptonXLite theme reference with the [LeptonX Theme](../ui-themes/lepton-x), which is a commercial theme provided by ABP and has superior features to the LeptonX Lite theme. - -Update namespaces for the `*WebModule.cs`: - -```diff -- using Volo.Abp.AspNetCore.Mvc.UI.Theme.LeptonXLite; -- using Volo.Abp.AspNetCore.Mvc.UI.Theme.LeptonXLite.Bundling; -+ using Volo.Abp.AspNetCore.Mvc.UI.Theme.LeptonX; -+ using Volo.Abp.AspNetCore.Mvc.UI.Theme.LeptonX.Bundling; - -- using Volo.Abp.TenantManagement.Web; -+ using Volo.Abp.Gdpr.Web.Extensions; -+ using Volo.Abp.LeptonX.Shared; -+ using Volo.Abp.PermissionManagement; -``` - -Then, we can update the configurations and add missing middlewares to the request pipeline in the same file, as follows: - -```diff -- typeof(AbpAccountWebOpenIddictModule), -+ typeof(AbpAccountPublicWebOpenIddictModule), -- typeof(AbpTenantManagementWebModule), -- typeof(AbpAspNetCoreMvcUiLeptonXLiteThemeModule), -+ typeof(AbpAspNetCoreMvcUiLeptonXThemeModule), - - public override void ConfigureServices(ServiceConfigurationContext context) - { - //other configurations... - -+ context.Services.AddAbpCookieConsent(options => -+ { -+ options.IsEnabled = true; -+ options.CookiePolicyUrl = "/CookiePolicy"; -+ options.PrivacyPolicyUrl = "/PrivacyPolicy"; -+ }); - -+ Configure(options => -+ { -+ options.DefaultStyle = LeptonXStyleNames.System; -+ }); - -+ Configure(options => -+ { -+ options.ApplicationLayout = LeptonXMvcLayouts.SideMenu; -+ }); - -+ Configure(options => -+ { -+ options.IsDynamicPermissionStoreEnabled = true; -+ }); - } - - //... - - Configure(options => - { - options.StyleBundles.Configure( -- LeptonXLiteThemeBundles.Styles.Global, -+ LeptonXThemeBundles.Styles.Global, - bundle => - { - bundle.AddFiles("/global-styles.css"); - } - ); - }); - - public override void OnApplicationInitialization(ApplicationInitializationContext context) - { - var app = context.GetApplicationBuilder(); - var env = context.GetEnvironment(); - - //... - -+ app.UseAbpCookieConsent(); - app.UseCorrelationId(); -+ app.UseAbpSecurityHeaders(); - app.UseStaticFiles(); - - //... - } -``` - -> **Note:** In the startup templates of ABP, besides these configurations, there are some additional configurations, such as [configuring impersonation](../modules/account/impersonation.md), [configuring external providers](https://docs.abp.io/en/abp/latest/Modules/Account#configure-the-provider), and configuring health checks. These configurations are optional, and for the sake of simplicity, in this documentation, we did not mention them. You can apply the related configurations by checking the related documentation and from the default startup templates. - -Update the namespaces in the `BookStoreMenuContributor` file as follows: - -```diff -- using Volo.Abp.TenantManagement.Web.Navigation; -+ using Volo.Abp.TextTemplateManagement.Web.Navigation; -+ using Volo.Abp.AuditLogging.Web.Navigation; -+ using Volo.Abp.LanguageManagement.Navigation; -+ using Volo.Abp.OpenIddict.Pro.Web.Menus; -``` - -Then, we can update the `ConfigureMainMenuAsync` method in this file to specify the order of the menu items: - -```csharp -private Task ConfigureMainMenuAsync(MenuConfigurationContext context) -{ - //other configurations for menu items... - - //Administration - var administration = context.Menu.GetAdministration(); - administration.Order = 5; - - //Administration->Identity - administration.SetSubItemOrder(IdentityMenuNames.GroupName, 1); - - //Administration->OpenIddict - administration.SetSubItemOrder(OpenIddictProMenus.GroupName, 2); - - //Administration->Language Management - administration.SetSubItemOrder(LanguageManagementMenuNames.GroupName, 3); - - //Administration->Text Template Management - administration.SetSubItemOrder(TextTemplateManagementMainMenuNames.GroupName, 4); - - //Administration->Audit Logs - administration.SetSubItemOrder(AbpAuditLoggingMainMenuNames.GroupName, 5); - - //Administration->Settings - administration.SetSubItemOrder(SettingManagementMenuNames.GroupName, 6); - - return Task.CompletedTask; -} -``` - -Replace LeptonX Lite npm package with LeptonX package in `package.json` file: -```diff -- "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~3.0.3", -+ "@volo/abp.aspnetcore.mvc.ui.theme.leptonx": "~3.0.3", -``` - -### 4. Creating Migrations & Running Application - -That's it, you have applied the all related steps to migrate your application from ABP to ABP. Now, you can create a new migration, apply it to your database, and run your application! - -To create a new migration, open a terminal in your {{ if DB == "EF" }}`*.EntityFrameworkCore`{{else}}`*.MongoDb`{{end}} project directory, and run the following command: - -```bash -dotnet ef migrations add Migrated_To_ABP_Commercial -``` - -Then, to apply the database into your database and seed the initial data, you can run the `*.DbMigrator` project. After it's completed, you can run the `*.Web` project to see your application as working. - -> **Note:** If you have an existing database, then creating a new migration and applying it to the database may not happen correctly. At that point, if it's possible you can drop the existing database and create a new one, or you can have a backup of your existing db, and after applying the new migration, you can synchronize the database with the backup. - -## Consultancy - -If you find the migration process challenging or prefer professional assistance, we offer a [paid consultancy service](https://abp.io/additional-services). Our experienced consultants can help ensure a smooth transition to ABP, addressing any specific needs or challenges your project may encounter. For detailed guidance and support, feel free to [reach out](https://abp.io/contact). +- The command covers the most common scenarios, but there is still a possibility that it can mess up something in your solution. Therefore, we strongly recommend a version control system (like [Git](https://git-scm.com)) to track what is changed in your solution and revert if needed. +- The command will not remove your custom codes that may be related with the removed modules listed above. So there may be build errors if you referenced one of those modules. You can clear them manually. diff --git a/docs/en/images/abp-book.png b/docs/en/images/abp-book.png index 7fd6c34c90..28a933349c 100644 Binary files a/docs/en/images/abp-book.png and b/docs/en/images/abp-book.png differ diff --git a/docs/en/images/angular-template-structure-diagram.png b/docs/en/images/angular-template-structure-diagram.png index 0715a8e2df..dd7a4e5cc7 100644 Binary files a/docs/en/images/angular-template-structure-diagram.png and b/docs/en/images/angular-template-structure-diagram.png differ diff --git a/docs/en/images/auditlog-object-diagram.png b/docs/en/images/auditlog-object-diagram.png index f89c110147..cfca7cd46b 100644 Binary files a/docs/en/images/auditlog-object-diagram.png and b/docs/en/images/auditlog-object-diagram.png differ diff --git a/docs/en/images/deployment-clustered.png b/docs/en/images/deployment-clustered.png index f640d55957..2697b9e7a1 100644 Binary files a/docs/en/images/deployment-clustered.png and b/docs/en/images/deployment-clustered.png differ diff --git a/docs/en/images/deployment-single-instance.png b/docs/en/images/deployment-single-instance.png index 50b904baf8..4224ce53ac 100644 Binary files a/docs/en/images/deployment-single-instance.png and b/docs/en/images/deployment-single-instance.png differ diff --git a/docs/en/images/docs-referencing.png b/docs/en/images/docs-referencing.png new file mode 100644 index 0000000000..2bc3f5da3c Binary files /dev/null and b/docs/en/images/docs-referencing.png differ diff --git a/docs/en/images/generic-repositories.png b/docs/en/images/generic-repositories.png index 676ddb7976..6287afc56c 100644 Binary files a/docs/en/images/generic-repositories.png and b/docs/en/images/generic-repositories.png differ diff --git a/docs/en/images/implementing-domain-driven-design-book.png b/docs/en/images/implementing-domain-driven-design-book.png index 6568b46f66..15de3f814d 100644 Binary files a/docs/en/images/implementing-domain-driven-design-book.png and b/docs/en/images/implementing-domain-driven-design-book.png differ diff --git a/docs/en/images/integration-services.png b/docs/en/images/integration-services.png index 31e95a96d9..edd3a0b517 100644 Binary files a/docs/en/images/integration-services.png and b/docs/en/images/integration-services.png differ diff --git a/docs/en/images/issuemanagement-module-solution.png b/docs/en/images/issuemanagement-module-solution.png index 3e01ff1b92..b224045596 100644 Binary files a/docs/en/images/issuemanagement-module-solution.png and b/docs/en/images/issuemanagement-module-solution.png differ diff --git a/docs/en/images/layered-project-dependencies-blazor-server.png b/docs/en/images/layered-project-dependencies-blazor-server.png index 8b47243226..747c5e4f0a 100644 Binary files a/docs/en/images/layered-project-dependencies-blazor-server.png and b/docs/en/images/layered-project-dependencies-blazor-server.png differ diff --git a/docs/en/images/layered-project-dependencies-blazor-wasm.png b/docs/en/images/layered-project-dependencies-blazor-wasm.png index fc9bb227c5..54678b3c3e 100644 Binary files a/docs/en/images/layered-project-dependencies-blazor-wasm.png and b/docs/en/images/layered-project-dependencies-blazor-wasm.png differ diff --git a/docs/en/images/layered-project-dependencies-module.png b/docs/en/images/layered-project-dependencies-module.png index c036cadea6..68dc214ee9 100644 Binary files a/docs/en/images/layered-project-dependencies-module.png and b/docs/en/images/layered-project-dependencies-module.png differ diff --git a/docs/en/images/layered-project-dependencies.png b/docs/en/images/layered-project-dependencies.png index 6729c78a75..1d5c4f1195 100644 Binary files a/docs/en/images/layered-project-dependencies.png and b/docs/en/images/layered-project-dependencies.png differ diff --git a/docs/en/images/module-layers-and-packages.jpg b/docs/en/images/module-layers-and-packages.jpg deleted file mode 100644 index f71a91eb8d..0000000000 Binary files a/docs/en/images/module-layers-and-packages.jpg and /dev/null differ diff --git a/docs/en/images/module-layers-and-packages.png b/docs/en/images/module-layers-and-packages.png new file mode 100644 index 0000000000..0a7a95fc75 Binary files /dev/null and b/docs/en/images/module-layers-and-packages.png differ diff --git a/docs/en/images/multiple-database-usage.png b/docs/en/images/multiple-database-usage.png index aa5d7595a7..24655fb746 100644 Binary files a/docs/en/images/multiple-database-usage.png and b/docs/en/images/multiple-database-usage.png differ diff --git a/docs/en/images/payment-module-flow.png b/docs/en/images/payment-module-flow.png index befda82b20..a24e530d70 100644 Binary files a/docs/en/images/payment-module-flow.png and b/docs/en/images/payment-module-flow.png differ diff --git a/docs/en/images/payment-module-subscription-flow.png b/docs/en/images/payment-module-subscription-flow.png index af345e51ba..080559e5af 100644 Binary files a/docs/en/images/payment-module-subscription-flow.png and b/docs/en/images/payment-module-subscription-flow.png differ diff --git a/docs/en/images/react-native-navigation-structure.png b/docs/en/images/react-native-navigation-structure.png index 816b556600..0b499257fc 100644 Binary files a/docs/en/images/react-native-navigation-structure.png and b/docs/en/images/react-native-navigation-structure.png differ diff --git a/docs/en/images/single-database-usage.png b/docs/en/images/single-database-usage.png index 4015cd1d75..286c816a50 100644 Binary files a/docs/en/images/single-database-usage.png and b/docs/en/images/single-database-usage.png differ diff --git a/docs/en/images/studio-upgrade-to-pro.png b/docs/en/images/studio-upgrade-to-pro.png new file mode 100644 index 0000000000..118e8b41b1 Binary files /dev/null and b/docs/en/images/studio-upgrade-to-pro.png differ diff --git a/docs/en/images/tiered-solution-applications-authserver.png b/docs/en/images/tiered-solution-applications-authserver.png index c46cdc2314..1b79af73d0 100644 Binary files a/docs/en/images/tiered-solution-applications-authserver.png and b/docs/en/images/tiered-solution-applications-authserver.png differ diff --git a/docs/en/images/tiered-solution-applications.png b/docs/en/images/tiered-solution-applications.png index bad5284819..77eb23752e 100644 Binary files a/docs/en/images/tiered-solution-applications.png and b/docs/en/images/tiered-solution-applications.png differ diff --git a/docs/en/images/tiered-solution-servers.png b/docs/en/images/tiered-solution-servers.png index 8585a350bd..77233195d3 100644 Binary files a/docs/en/images/tiered-solution-servers.png and b/docs/en/images/tiered-solution-servers.png differ diff --git a/docs/en/modules/account/authority-delegation.md b/docs/en/modules/account/authority-delegation.md index 9a973d65e0..fafe297677 100644 --- a/docs/en/modules/account/authority-delegation.md +++ b/docs/en/modules/account/authority-delegation.md @@ -77,6 +77,8 @@ You can click the `Delegate New User` button to delegate a new user: * You can specify a time range to ensure the delegation is only available within the time range. * You can make multiple delegates to the same user and set different delegate time ranges. +> You have to enter the full username to query and delegate a user. + > The delegation has three states: `Expired`, `Active`, and `Future`. These states are set automatically by checking the specified time interval. ### My delegated users @@ -87,4 +89,4 @@ You can see a list of users who delegated you to login on their behalf of them, You can click the `Login` button to log in to the application as a delegated user and go back to your account by clicking the `Back to my account` icon: -![account-pro-module-delegated-impersonate](../../images/account-pro-module-delegated-impersonate.jpg) \ No newline at end of file +![account-pro-module-delegated-impersonate](../../images/account-pro-module-delegated-impersonate.jpg) diff --git a/docs/en/modules/audit-logging-pro.md b/docs/en/modules/audit-logging-pro.md index 1719bf51a5..ef609e5422 100644 --- a/docs/en/modules/audit-logging-pro.md +++ b/docs/en/modules/audit-logging-pro.md @@ -115,7 +115,7 @@ To see `AbpAuditingOptions` properties, please see its [documentation](../framew ### ExpiredAuditLogDeleterOptions -`ExpiredAuditLogDeleterOptions` can be configured in the UI layer, within the `ConfigureServices` method of your [module](https://docs.abp.io/en/abp/latest/Module-Development-Basics). Example: +`ExpiredAuditLogDeleterOptions` can be configured in the UI layer, within the `ConfigureServices` method of your [module](../framework/architecture/modularity/basics.md). Example: ```csharp Configure(options => @@ -241,7 +241,7 @@ You can modify the look and behavior of the module pages by passing the followin #### Services / Models -Audit Logging module services and models are generated via `generate-proxy` command of the [ABP CLI](https://docs.abp.io/en/abp/latest/CLI). If you need the module's proxies, you can run the following command in the Angular project directory: +Audit Logging module services and models are generated via `generate-proxy` command of the [ABP CLI](../cli/index.md). If you need the module's proxies, you can run the following command in the Angular project directory: ```bash abp generate-proxy --module auditLogging diff --git a/docs/en/modules/cms-kit-pro/index.md b/docs/en/modules/cms-kit-pro/index.md index 14bce30381..af3559ec7e 100644 --- a/docs/en/modules/cms-kit-pro/index.md +++ b/docs/en/modules/cms-kit-pro/index.md @@ -17,6 +17,7 @@ The following features are provided by the open-source CMS Kit module: - [**Menu**](../cms-kit/menus.md) system to manage public menus dynamically. - [**Global resources**](../cms-kit/global-resources.md) system to add global styles and scripts dynamically. - [**Dynamic widget**](../cms-kit/dynamic-widget.md) system to create dynamic widgets for page and blog posts. +- [**Marked Item**](../cms-kit/marked-items.md) system to flag favorites or important items with icons or emojis. The following features are provided by the CMS Kit Pro version: diff --git a/docs/en/modules/database-tables.md b/docs/en/modules/database-tables.md index 0fce394470..ad8c66d684 100644 --- a/docs/en/modules/database-tables.md +++ b/docs/en/modules/database-tables.md @@ -248,7 +248,7 @@ This table stores the values of the features for different providers. You can us ### FmDirectoryDescriptors -This table is utilized by the [File Management system](file-management.md) to manage directories by using the [BlobStoring](https://docs.abp.io/en/abp/latest/Blob-Storing) module. +This table is utilized by the [File Management system](file-management.md) to manage directories by using the [BlobStoring](../framework/infrastructure/blob-storing/index.md) module. #### Foreign Keys diff --git a/docs/en/modules/docs.md b/docs/en/modules/docs.md index 6aaf1f2f0a..6ab4f566c0 100644 --- a/docs/en/modules/docs.md +++ b/docs/en/modules/docs.md @@ -666,9 +666,61 @@ See the following examples: ``` ``` ---- +## Referencing Next & Previous Documents +The **Docs Module** supports referencing previous and next documents. It's useful if you have a series of documents that are strictly related to each other and need to be followed one after the other. +To reference the previous and next documents from a document, you should specify the documentation titles and their paths as follows: + +``` + + ````json + //[doc-nav] + { + "Previous": { + "Name": "Overall", + "Path": "testing/overall" + }, + "Next": { + "Name": "Integration tests", + "Path": "testing/integration-tests" + } + } + ```` + +``` + +After you specify the next & previous documents, they will appear at the end of the current documentation like in the following figure: + +![](../images/docs-referencing.png) + +## Single Project Mode + +The **single project mode** allows you to use a single name as a project name in your application. If you are not considering supporting multiple projects with their multiple docs and instead if you have a single project and want to have documentation only for it, it's especially useful for you. + +You just need to configure the `DocsUiOptions`, set the single project mode as **enabled** and also define a constant project name: + +```csharp +Configure(options => +{ + options.RoutePrefix = "docs"; + options.SingleProjectMode.Enable = true; + options.SingleProjectMode.ProjectName = "abp"; +}); +``` + +## Multi Language Mode + +The **multi language mode** allows you to show a combobox that lists and shows all documentation languages and configures the related languages in routes. + +It's enabled by default and supports multiple languages, but if you are considering only supporting a single language, and don't want to show the language combobox in the sidebar of your docs system, you can configure the `DocsUiOptions` and set the multi language mode support as **false** to disable it: + +```csharp +Configure(options => +{ + options.MultiLanguageMode = false; +}); +``` ## See Also diff --git a/docs/en/modules/identity.md b/docs/en/modules/identity.md index b9c19fe198..46c6a671c1 100644 --- a/docs/en/modules/identity.md +++ b/docs/en/modules/identity.md @@ -252,7 +252,7 @@ Following custom repositories are defined for this module: ##### Claim type manager -`IdenityClaimTypeManager` is used to perform some operations for the `IdentityClaimType` aggregate root. +`IdentityClaimTypeManager` is used to perform some operations for the `IdentityClaimType` aggregate root. ##### Organization unit manager diff --git a/docs/en/modules/identity/session-management.md b/docs/en/modules/identity/session-management.md index c68f034c18..e911146081 100644 --- a/docs/en/modules/identity/session-management.md +++ b/docs/en/modules/identity/session-management.md @@ -53,4 +53,5 @@ This feature depends on the [Dynamic Claims](https://docs.abp.io/en/abp/latest/D * The module will remove the session when logging out. * The `IdentitySessionCleanupBackgroundWorker` will remove the inactive sessions. * Once a new session has been created, we will remove the other sessions based on the `PreventConcurrentLogin` setting. -* The `IdentitySessionManager` is used to manage/maintain the sessions. Please use this class instead of directly using the repository. \ No newline at end of file +* The `IdentitySessionManager` is used to manage/maintain the sessions. Please use this class instead of directly using the repository. +* The `UpdateSessionAfterCacheHit(10 times by default)` property of `IdentitySessionCheckerOptions` is used to configure the `IdentitySessionChecker` that will update session in the database when cache hits reach this value. This is to reduce the database update frequency and improve performance. diff --git a/docs/en/modules/payment.md b/docs/en/modules/payment.md index c868f7b02a..b3fb6de84b 100644 --- a/docs/en/modules/payment.md +++ b/docs/en/modules/payment.md @@ -15,7 +15,7 @@ Payment module is not installed in [the startup templates](../solution-templates ### Using ABP CLI -ABP CLI allows adding a module to a solution using ```add-module``` command. You can check its [documentation](https://docs.abp.io/en/abp/latest/CLI#add-module) for more information. So, payment module can be added using the command below; +ABP CLI allows adding a module to a solution using ```add-module``` command. You can check its [documentation](../cli#add-module) for more information. So, payment module can be added using the command below; ```bash abp add-module Volo.Payment diff --git a/docs/en/modules/text-template-management.md b/docs/en/modules/text-template-management.md index 46b3784f5d..9b2235314f 100644 --- a/docs/en/modules/text-template-management.md +++ b/docs/en/modules/text-template-management.md @@ -2,7 +2,7 @@ > You must have an ABP Team or a higher license to use this module. -This module is used to store and edit template contents for [the text templating system](https://docs.abp.io/en/abp/latest/Text-Templating) of the ABP. So, you may need to understand it to better understand the purpose of this module. +This module is used to store and edit template contents for [the text templating system](../framework/infrastructure/text-templating/index.md) of the ABP. So, you may need to understand it to better understand the purpose of this module. There are different use cases of the text templating system. For example, [the Account Module](account.md) is using it to define templates for sending emails when it needs to send emails to users (like sending "password reset link" email). This module provides UI to easily edit these email templates. diff --git a/docs/en/release-info/index.md b/docs/en/release-info/index.md new file mode 100644 index 0000000000..eb6a4ef602 --- /dev/null +++ b/docs/en/release-info/index.md @@ -0,0 +1,9 @@ +## Release Information + +* [Release Notes](./release-notes.md) +* [Migration Guides](./migration-guides/index.md) +* [Road Map](./road-map.md) +* [Upgrading](./upgrading.md) +* [Preview Releases](./previews.md) +* [Nightly Releases](./nightly-builds.md) +* [Official Packages](https://abp.io/packages) \ No newline at end of file diff --git a/docs/en/release-info/migration-guides/abp-8-2.md b/docs/en/release-info/migration-guides/abp-8-2.md new file mode 100644 index 0000000000..cd904f052e --- /dev/null +++ b/docs/en/release-info/migration-guides/abp-8-2.md @@ -0,0 +1,63 @@ +# ABP Version 8.2 Migration Guide + +This document is a guide for upgrading ABP v8.x solutions to ABP v8.2. There are some changes in this version that may affect your applications, please read it carefully and apply the necessary changes to your application. + +## Updated target frameworks to net8.0 for template projects + +`TargetFrameworks` of the following template projects are upgraded to **net8.0**: + +* `*.Application.Contracts` +* `*.Domain.Shared` +* `*.Domain` +* `*.MongoDB` +* `*.HttpApi.Client` +* `*.Host.Shared` (for module template) + +Before this version, all of the projects above were targeting multiple frameworks (**netstandard2.0**, **netstandard2.1** and **net8.0**), with this version, we started to only target **net8.0** for these template projects. Note that, all other shared libraries still target multiple frameworks. + +> This change should not affect your pre-existing solutions and you don't need to make any changes in your application. See the PR for more info: https://github.com/abpframework/abp/pull/19565 +## Upgraded AutoMapper to 13.0.1 + +In this version, **AutoMapper** library version upgraded to 13.0.1. See [the release notes of AutoMapper v13.0.1](https://github.com/AutoMapper/AutoMapper/releases/tag/v13.0.1) for more information. + +## Added default padding to `.tab-content` class for Basic Theme + +In this version, default padding (padding-top: 1.5rem and padding-bottom: 1.5rem) has been added to the tab-content for the Basic Theme. See [#19475](https://github.com/abpframework/abp/pull/19475) for more information. + +## Moved members page directory for Blogging Module + +With this version on, ABP Framework allows you to use single blog mode, without needing to define a blog and a prefix. With this change, the following namespace changes were done: +* `Volo.Blogging.Pages.Blog` -> `Volo.Blogging.Pages.Blogs` +* `Volo.Blogging.Pages.Members` -> `Volo.Blogging.Pages.Blogs.Members` (members folder) + +> If you haven't overridden the pages above, then you don't need to make any additional changes. See [#19418](https://github.com/abpframework/abp/pull/19418) for more information. +## Removed `FlagIcon` property from the `ILanguageInfo` + +The `FlagIcon` property has been removed from the `ILanguageInfo` interface since we removed the flag icon library in the earlier versions from all of our themes and none of them using it now. + +If the flag icon has been specified while defining the localization languages, then it should be removed: + +```diff + Configure(options => + { +- options.Languages.Add(new LanguageInfo("hi", "hi", "Hindi", "in")); ++ options.Languages.Add(new LanguageInfo("hi", "hi", "Hindi")); + //... + } +``` + +## Blazor Full-Stack Web UI + +In this version, ABP Framework provides a new UI option called **Blazor Full-Stack WebApp**. We have already created an introduction/migration guide for you to check it: [Migrating to Blazor Web App](abp-8-2-blazor-web-app.md) + +> Please read the documentation carefully if you are considering migrating your existing **Blazor** project to **Blazor WebApp**. + +## Angular UI + +In this version, the Angular UI has been updated to use the Angular version 17.3.0 and Nx version to 19.0.0. See the PR for more information: [#19915](https://github.com/abpframework/abp/pull/19915/) + +## Session Management Infrastructure + +The **Session Management** feature allows you to prevent concurrent login and manage user sessions. + +In this version, a new entity called `IdentitySession` has been added to the framework and you should create a new migration and apply it to your database. \ No newline at end of file diff --git a/docs/en/release-info/migration-guides/abp-8-3.md b/docs/en/release-info/migration-guides/abp-8-3.md index bc726e68d8..50a7f274a4 100644 --- a/docs/en/release-info/migration-guides/abp-8-3.md +++ b/docs/en/release-info/migration-guides/abp-8-3.md @@ -49,6 +49,10 @@ However, notice this package is used by the `@abp/aspnetcore.mvc.ui.theme.shared See the PR for more info: https://github.com/abpframework/abp/pull/19340 +### Angular UI + +We wish to formally inform you that ABP version 8.3 has been upgraded to incorporate Angular version 18. Consequently, we recommend migrating your application to [Angular v18](https://angular.dev/update-guide) to ensure compatibility. + ## PRO > Please check the **Open-Source (Framework)** section before reading this section. The listed topics might affect your application and you might need to take care of them. diff --git a/docs/en/release-info/migration-guides/index.md b/docs/en/release-info/migration-guides/index.md index 7ff07eda10..804b17b376 100644 --- a/docs/en/release-info/migration-guides/index.md +++ b/docs/en/release-info/migration-guides/index.md @@ -3,6 +3,7 @@ The following documents explain how to migrate your existing ABP applications. We write migration documents only if you need to take an action while upgrading your solution. Otherwise, you can easily upgrade your solution using the [abp update command](../upgrading.md). - [8.x to 8.3](abp-8-3.md) +- [8.1 to 8.2](abp-8-2.md) - [8.0 to 8.1](abp-8-1.md) - [7.x to 8.0](abp-8-0.md) - [7.3 to 7.4](abp-7-4.md) diff --git a/docs/en/release-info/migration-guides/openiddict-step-by-step.md b/docs/en/release-info/migration-guides/openiddict-step-by-step.md index e174f0dfb5..04866180ad 100644 --- a/docs/en/release-info/migration-guides/openiddict-step-by-step.md +++ b/docs/en/release-info/migration-guides/openiddict-step-by-step.md @@ -9,8 +9,8 @@ On the other hand, Identity Server ends support for the open-source Identity Ser ## Commercial Template -If you are using a commercial template, please check [Migrating from IdentityServer to OpenIddict for the Commercial Templates](https://docs.abp.io/en/commercial/6.0/migration-guides/openIddict-step-by-step) guide. -If you are using the microservice template, please check [Migrating the Microservice Template from IdentityServer to OpenIddict](https://docs.abp.io/en/commercial/6.0/migration-guides/openIddict-microservice) guide. +If you are using a commercial template, please check [Migrating from IdentityServer to OpenIddict for the Commercial Templates](https://abp.io/docs/commercial/6.0/migration-guides/openIddict-step-by-step) guide. +If you are using the microservice template, please check [Migrating the Microservice Template from IdentityServer to OpenIddict](https://abp.io/docs/commercial/6.0/migration-guides/openIddict-microservice) guide. ## OpenIddict Migration Steps @@ -258,7 +258,7 @@ for creating the host builder. ## Source code of samples and module * [Open source tiered & separate auth server application migrate Identity Server to OpenIddict](https://github.com/abpframework/abp-samples/tree/master/Ids2OpenId) -* [OpenIddict module document](https://docs.abp.io/en/abp/6.0/Modules/OpenIddict) +* [OpenIddict module document](../../modules/openiddict.md) * [OpenIddict module source code](https://github.com/abpframework/abp/tree/rel-6.0/modules/openiddict) ## See Also diff --git a/docs/en/release-info/release-notes.md b/docs/en/release-info/release-notes.md index 8d9491e2bb..a94ed9d0b8 100644 --- a/docs/en/release-info/release-notes.md +++ b/docs/en/release-info/release-notes.md @@ -4,11 +4,20 @@ This document contains **brief release notes** for each release. Release notes o > If you want to read detailed release posts for each version, please see the [official ABP blog](https://abp.io/blog). -## 8.2 (2024-05-25) +## 8.3.0-rc.1 (2024-07-31) -> This version is currently in preview. The final release date is planned for July, 2024. +> This version is currently in preview. The final release date is planned for August, 2024. -See the detailed **[blog post / announcement](https://abp.io/blog/announcing-abp-8-2-release-candidate)** for the v8.2 release. +See the detailed **[blog post / announcement](https://abp.io/blog/announcing-abp-8-3-release-candidate)** for the v8.3 release. + +* CMS Kit: Marked Items & Approvement System for Commenting Feature +* Enhancements on the Docs Module (Google Translation support & new single project mode) +* Using DbFunction for generating more precise SQL commands for Global Query Filters +* CMS Kit (Pro): FAQ System + +## 8.2 (2024-06-26) + +See the detailed **[blog post / announcement](https://abp.io/blog/announcing-abp-8-2-stable-release)** for the v8.2 release. * Blazor Full-Stack Web App UI. * Introducing the `IBlockUiService` for Blazor UI (disables/blocks the page or a part of the page). @@ -295,7 +304,7 @@ See the detailed **[blog post / announcement](https://abp.io/blog/ABP-Framework- * Performance improvements (pre-compiling razor pages). * New **Organization Unit** Management UI for the [Identity Module](https://abp.io/modules/Volo.Identity.Pro) to create hierarchical organization units and manage their members and roles. * Created **Angular UI** for the [Chat Module](https://abp.io/modules/Volo.Chat). -* Implemented **Angular UI** for the [Easy CRM](https://docs.abp.io/en/commercial/latest/samples/easy-crm) application. +* Implemented **Angular UI** for the [Easy CRM](../samples/easy-crm.md) application. * [ABP Suite](https://abp.io/tools/suite) code generation support for **module development**. * New [leptontheme.com](http://leptontheme.com/) web site to show the **[Lepton Theme](https://abp.io/themes) components**. diff --git a/docs/en/release-info/road-map.md b/docs/en/release-info/road-map.md index 7bba375001..82da0a0b8e 100644 --- a/docs/en/release-info/road-map.md +++ b/docs/en/release-info/road-map.md @@ -4,56 +4,119 @@ This document provides a road map, release schedule, and planned features for th ## Next Versions -### v8.2 - -The next version will be 8.2 and planned to release the stable 8.2 version in June 2024. We will be mostly working on the following topics: - -* ABP Studio Community Edition -* Blazor Full-Stack UI ([#18289](https://github.com/abpframework/abp/issues/18289)) -* Angular Universal ([#15782](https://github.com/abpframework/abp/issues/15782)) -* Upgrading React Native template to the latest major release 0.72.7 ([#18191](https://github.com/abpframework/abp/issues/18191)) -* Deployment Documents Improvements ([#15034](https://github.com/abpframework/abp/issues/15034)) -* Improvements on the existing features and provide more guides. - -See the [8.2 milestone](https://github.com/abpframework/abp/milestone/95) for all the issues we've planned to work on. +### v9.0 + +The next version will be 9.0 and planned to release the stable 9.0 version in November 2024. We will be mostly working on the following topics: + +* Framework + * Upgrading to .NET 9.0 + * Google Cloud Storage BLOB Provider + * Better handling localization resources in a microservice scenario + * SSR support for the Angular UI + * Upgrading 3rd-party dependencies + +* ABP Suite + * Multiple navigation properties to the same target entity + * Define navigation properties without target string property dependency + * Improvements one-to-many scenarios + * Access to default code generation templates for customized templates + +* ABP Studio + * Blazor WebApp UI option for the new startup templates + * Execution order (dependency management) for Solution Runner + * Automate more details on new service creation for a microservice solution + * Support multiple concurrent Kubernetes deployment/integration scenarios + * Show the README file when you create a new solution or open an existing solution + * Improve ABP Suite code-generation possibilities for microservice solutions + * Improve the module installation experience + * Auto-install 3rd-party dependencies + * Better handle long log files + * Allow to directly create new solutions with ABP's RC (Release Candidate) versions + * Support Intel processors for Mac computers, support ARM chipset for Windows and support Linux OS + * Improve client proxy generation experience + +* Application modules + * Account module: Support mixed social/local login scenarios + * UI/UX improvements on existing application modules + +* New tutorials + * Modular monolith development + * Microservice development ## Backlog Items -The *Next Versions* section above shows the main focus of the planned versions. However, in each release, we add new features to the core framework and the [application modules](../modules). - -Here is a list of major items in the backlog we are considering working on in the next versions. +The *Next Versions* section above shows the main focus of the planned versions. However, in each release, we add new features to the ABP platform. ### Framework -* [#86](https://github.com/abpframework/abp/issues/86) / GrapQL Integration +The ABP framework is [open source](https://github.com/abpframework/abp) and free for everyone. You can see its [public backlog](https://github.com/abpframework/abp/milestone/2). Here, are some of the important features you can expect from next versions: + * [#236](https://github.com/abpframework/abp/issues/236) / Resource based authorization system -* [#2882](https://github.com/abpframework/abp/issues/2882) / Providing a gRPC integration infrastructure (while it is [already possible](https://github.com/abpframework/abp-samples/tree/master/GrpcDemo) to create or consume gRPC endpoints for your application, we plan to create endpoints for the [standard application modules](../modules)) +* [#2882](https://github.com/abpframework/abp/issues/2882) / Providing a gRPC integration infrastructure (while it is [already possible](https://github.com/abpframework/abp-samples/tree/master/GrpcDemo) to create or consume gRPC endpoints for your application, we plan to create endpoints for the [standard application modules](../modules/index.md)) * [#57](https://github.com/abpframework/abp/issues/57) / Built-in CQRS infrastructure +* [#58](https://github.com/abpframework/abp/issues/58) / Content localization system (multilingual entities) * [#4223](https://github.com/abpframework/abp/issues/4223) / WebHook system * [#162](https://github.com/abpframework/abp/issues/162) / Azure ElasticDB Integration for multitenancy * [#2296](https://github.com/abpframework/abp/issues/2296) / Feature toggling infrastructure -* [#16342](https://github.com/abpframework/abp/issues/16342) / CMS Kit: Meta information for SEO -* [#16260](https://github.com/abpframework/abp/issues/16260) / GCP Blob Storage Provider * [#15932](https://github.com/abpframework/abp/issues/15932) / Introduce ABP Diagnostics Module -* [#16756](https://github.com/abpframework/abp/issues/16756) / Blob Storing - Provider configuration UI * [#16744](https://github.com/abpframework/abp/issues/16744) / State Management API - -### Modules / Themes - -* New styles, components and features for the LeptonX theme. -* Payment module: Invoice system. -* Dynamic dashboard system. -* User guiding module. -* gRPC integration and implementation for all the pre-built modules. -* Chat Module: Deleting messages & conversations - -### Tooling - -* Suite: File, DateOnly and TimeOnly types -* Suite: Export child/detail entity records -* CMS Kit features, including FAQ, spam protection, social media feeds, multi-language support, and so on. - -You can always check the milestone planning and the prioritized backlog issues on [the GitHub repository](https://github.com/abpframework/abp/milestones) for a detailed road map. The backlog items are subject to change. We are adding new items and changing priorities based on the community feedbacks and goals of the project. +* [#17815](https://github.com/abpframework/abp/issues/17815) / Operation Rate Limiting + +### Application Modules / UI Themes + +ABP Platform provides many (free and commercial) [pre-built application modules](../modules/index.md) and modern [UI themes](../ui-themes/index.md). In every release, many enhancements and bugfixes are already done on the existing modules. In addition, here some of the planned features for next versions: + +* LeptonX theme: New layouts, styles and components +* CMS Kit module: Meta information for SEO, media gallery, RSS feed, content versioning, social media streams +* Identity module: Idle session warning +* Payment module: Invoice system +* New module: User notification +* New module: Dynamic dashboard +* New module: User guiding +* New module: Keycloak integration + +### ABP Studio + +[ABP Studio](../studio/index.md) is a cross-platform desktop application for ABP and .NET developers to simplify and automate daily tasks of developers. It has a community (free) edition as well as commercial editions. It is released and versioned independently from the ABP platform and frequently released. + +Here, are some of the important planned features for next ABP Studio versions: + +* Theme builder for the LeptonX theme +* Analyze user solutions to explore entities, domain services, application services, pages and other fundamental objects. +* Add status bar to the built-in browser to easily see errors +* Swagger authentication support for the built-in browser +* Show related requests/events (traces) together in the solution runner panel +* Integrate common tool dashboards into ABP Studio (such a Garana, Redis, RabbitMQ, Kibana, etc) +* Built-in command terminal +* Automate all steps of new service creation for microservice solutions +* Container application type support for Solution Runner (to individually control docker dependencies) +* More options while creating new solutions +* Downloading samples in ABP studio +* Built-in ABP documentation experience +* Auto-execute terminal commands in markdown files +* Compare changed on the startup templates when a new ABP version is published +* Remove unused projects while downloading source code of an existing module +* Testing/hosting applications for module templates +* Easily explore all module and package dependencies of a large solution +* Built-in deployment options +* Rapid application development features +* ABP support integration + +### ABP Suite + +[ABP Suite](../suite/index.md) is a GUI application that is mainly used to generate CRUD style pages in your application. You define your entity and it can generate all the code from the database layer to the UI layer. The generated code is clean and a perfect starting point to implement your custom requirements on top of it. + +Here, are some of the important planned features for next ABP Suite versions: + +* Handle image properties for entities +* Allow to define extra properties for DTOs those are not a part of the entity +* Allow to create pages instead of modals for CRUD page generation +* View-only (detail view) modal/page for an entity +* Export child/detail entity records as a part of export operation for a main (master) entity +* Allow to accept attachments (files) for an entity +* Allow to add custom entity actions for an entity +* Allow to inherit from an existing entity class +* Custom form layouts on CRUD page generation ## Feature Requests diff --git a/docs/en/samples/index.md b/docs/en/samples/index.md index 5adf0ac6a8..619eb81484 100644 --- a/docs/en/samples/index.md +++ b/docs/en/samples/index.md @@ -27,13 +27,13 @@ A simple CRUD application to show basic principles of developing an application The following samples uses only the open source (free) modules. * **Book Store: Razor Pages UI & Entity Framework Core** - * [Tutorial](https://docs.abp.io/en/abp/latest/Tutorials/Part-1?UI=MVC&DB=EF) + * [Tutorial](../tutorials/book-store/part-01.md?UI=MVC&DB=EF) * [Source code](https://github.com/abpframework/abp-samples/tree/master/BookStore-Mvc-EfCore) * **Book Store: Blazor UI & Entity Framework Core** - * [Tutorial](https://docs.abp.io/en/abp/latest/Tutorials/Part-1?UI=Blazor&DB=EF) + * [Tutorial](../tutorials/book-store/part-01.md?UI=Blazor&DB=EF) * [Source code](https://github.com/abpframework/abp-samples/tree/master/BookStore-Blazor-EfCore) * **Book Store: Angular UI & MongoDB** - * [Tutorial](https://docs.abp.io/en/abp/latest/Tutorials/Part-1?UI=NG&DB=Mongo) + * [Tutorial](../tutorials/book-store/part-01.md?UI=NG&DB=Mongo) * [Source code](https://github.com/abpframework/abp-samples/tree/master/BookStore-Angular-MongoDb) * **Book Store: Modular application (Razor Pages UI & EF Core)** * [Source code](https://github.com/abpframework/abp-samples/tree/master/BookStore-Modular) @@ -43,13 +43,13 @@ The following samples uses only the open source (free) modules. The following samples uses the pro modules. - **Book Store: Razor Pages (MVC) UI & Entity Framework Core** - - [Tutorial](https://docs.abp.io/en/commercial/latest/tutorials/book-store/part-1?UI=MVC&DB=EF) + - [Tutorial](../tutorials/book-store/part-01.md?UI=MVC&DB=EF) - [Download the source code](https://abp.io/Account/Login?returnUrl=/api/download/samples/bookstore-mvc-ef) - **Book Store: Blazor UI & Entity Framework Core** - - [Tutorial](https://docs.abp.io/en/commercial/latest/tutorials/book-store/part-1?UI=Blazor&DB=EF) + - [Tutorial](../tutorials/book-store/part-01.md?UI=Blazor&DB=EF) - [Download the source code](https://abp.io/Account/Login?returnUrl=/api/download/samples/bookstore-blazor-efcore) - **Book Store: Angular UI & MongoDB** - - [Tutorial](https://docs.abp.io/en/commercial/latest/tutorials/book-store/part-1?UI=NG&DB=Mongo) + - [Tutorial](../tutorials/book-store/part-01.md?UI=NG&DB=Mongo) - [Download the source code](https://abp.io/Account/Login?returnUrl=/api/download/samples/bookstore-angular-mongodb) ## Other Samples diff --git a/docs/en/solution-templates/application-module/index.md b/docs/en/solution-templates/application-module/index.md index f8e2d7adb6..60f53a7018 100644 --- a/docs/en/solution-templates/application-module/index.md +++ b/docs/en/solution-templates/application-module/index.md @@ -15,17 +15,25 @@ dotnet tool install -g Volo.Abp.Studio.Cli Then use the `abp new` command in an empty folder to create a new solution: ```bash -abp new Acme.IssueManagement -t module +abp new-module Acme.BookStore ``` - `Acme.IssueManagement` is the solution name, like *YourCompany.YourProduct*. You can use single level, two-levels or three-levels naming. -### Without User Interface +### Specifying the User Interface -The template comes with MVC, Blazor & Angular user interfaces by default. You can use `--no-ui` option to not include any of these UI layers. +The template comes without a user interface by default. You can use the `mvc`, `blazor`, `blazor-server`, or `angular` options to include any of these UI layers. You can also combine them. For example, you can use `mvc,angular` to include both MVC and Angular UI. To create a module without a user interface, don't specify any value. ````bash -abp new Acme.IssueManagement -t module --no-ui +abp new-module Acme.IssueManagement -u mvc,angular +```` + +#### Specifying the Database Provider + +The template comes with the *EntityFrameworkCore* database provider by default. You can use the `ef` or `mongodb` options to include either of these providers. You can also combine them. For example, you can use `ef,mongodb` to include both EntityFrameworkCore and MongoDB. + +````bash +abp new-module Acme.IssueManagement -d ef,mongodb ```` ## Solution Structure @@ -34,11 +42,10 @@ Based on the options you've specified, you will get a slightly different solutio ![issuemanagement-module-solution](../../images/issuemanagement-module-solution.png) -Projects are organized as `src`, `test` and `host` folders: +Projects are organized as `src` and`test` folders: * `src` folder contains the actual module which is layered based on [DDD](../../framework/architecture/domain-driven-design) principles. * `test` folder contains unit & integration tests. -* `host` folder contains applications with different configurations to demonstrate how to host the module in an application. These are not a part of the module, but useful on development. The diagram below shows the layers & project dependencies of the module: @@ -105,8 +112,6 @@ The solution has multiple test projects, one for each layer: - `.MongoDB.Tests` is used to test MongoDB configuration and custom repositories. - `.TestBase` is a base (shared) project for all tests. -In addition, `.HttpApi.Client.ConsoleTestApp` is a console application (not an automated test project) which demonstrate the usage of HTTP APIs from a Dotnet application. - Test projects are prepared for integration testing; - It is fully integrated to ABP and all services in your application. @@ -117,49 +122,9 @@ You can still create unit tests for your classes which will be harder to write ( > Domain & Application tests are using EF Core. If you remove EF Core integration or you want to use MongoDB for testing these layers, you should manually change project references & module dependencies. -### Host Projects - -The solution has a few host applications to run your module. Host applications are used to run your module in a fully configured application. It is useful on development. Host applications includes some other modules in addition to the module being developed: - -Host applications support two types of scenarios. - -#### Single (Unified) Application Scenario - -If your module has a UI, then `.Web.Unified` application is used to host the UI and API on a single point. It has its own `appsettings.json` file (that includes the database connection string) and EF Core database migrations. - -For the `.Web.Unified` application, there is a single database, named `YourProjectName_Unified` (like *IssueManagement_Unified* for this sample). - -> If you've selected the `--no-ui` option, this project will not be in your solution. - -##### How to Run? - -Set `host/YourProjectName.Web.Unified` as the startup project, run `Update-Database` command for the EF Core from Package Manager Console and run your application. Default username is `admin` and password is `1q2w3E*`. - -#### Separated Deployment & Databases Scenario - -In this scenario, there are three applications; - -* `.AuthServer` application is an authentication server used by other applications. It has its own `appsettings.json` that contains database connection and other configurations. -* `.HttpApi.Host` hosts the HTTP API of the module. It has its own `appsettings.json` that contains database connections and other configurations. -* `.Web.Host` host the UI of the module. This project contains an `appsettings.json` file, but it does not have a connection string because it never connects to the database. Instead, it mainly contains endpoint of the remote API server and the authentication server. - -The diagram below shows the relation of the applications: - -![tiered-solution-applications](../../images/tiered-solution-applications.png) - -`.Web.Host` project uses OpenId Connect Authentication to get identity and access tokens for the current user from the `.AuthServer`. Then uses the access token to call the `.HttpApi.Host`. HTTP API server uses bearer token authentication to obtain claims from the access token to authorize the current user. - -##### Pre-requirements - -* [Redis](https://redis.io/): The applications use Redis as as distributed cache. So, you need to have Redis installed & running. - -##### How to Run? - -You should run the application with the given order: +### Host Project -- First, run the `.AuthServer` since other applications depends on it. -- Then run the `.HttpApi.Host` since it is used by the `.Web.Host` application. -- Finally, you can run the `.Web.Host` project and login to the application using `admin` as the username and `1q2w3E*` as the password. +The solution doesn't have a host application to run your module. However, you can create a [single-layer](../../get-started/single-layer-web-application.md) or [layered](../../get-started/layered-web-application.md) application and [import](../../studio/solution-explorer.md#imports) the created module into the host application. ## UI @@ -172,7 +137,7 @@ The solution will have a folder called `angular` in it. This is where the Angula * _angular/projects/issue-management_ folder contains the Angular module project. * _angular/projects/dev-app_ folder contains a development application that runs your module. -The server-side is similar to the solution described above. `*.HttpApi.Host` project serves the API and the `Angular` demo application consumes it. You will not need to run the `.Web.Host` project though. +The server-side is similar to the solution described above. After you create a *Host* application, the API and the `Angular` demo application consume it. #### How to Run the Angular Development App @@ -195,9 +160,10 @@ The module you will develop depends on two of these ABP packages: _@abp/ng.core_ Once all dependencies are installed, follow the steps below to serve your development app: -1. Make sure `.AuthServer` and `*.HttpApi.Host` projects are up and running. -2. Open your terminal at the root folder, i.e. `angular`. -3. Run `yarn start` or `npm start`. +1. Make sure *Host* application project is up and running. +2. Change the `environment.ts` file in the `angular/projects/dev-app/src/environments` folder to match your *Host* application URL. +3. Open your terminal at the root folder, i.e. `angular`. +4. Run `yarn start` or `npm start`. ![ABP Angular module dev-app project](../../images/angular-module-dev-app-project.png) diff --git a/docs/en/solution-templates/microservice/adding-new-api-gateways.md b/docs/en/solution-templates/microservice/adding-new-api-gateways.md index a026f6e884..415452a3bd 100644 --- a/docs/en/solution-templates/microservice/adding-new-api-gateways.md +++ b/docs/en/solution-templates/microservice/adding-new-api-gateways.md @@ -155,12 +155,6 @@ We should configure the AuthServer for **CORS** and **RedirectAllowedUrls**. } ``` -### Add the New Gateway to the Solution Runner - -We should add the new gateway to the solution runner [profile](../../studio/running-applications.md#profile) for running applications in the ABP Studio. You can follow the steps explained in the [Solution Runner](../../studio/running-applications.md#c-application) document to add the new gateway to the solution runner profile. Afterwards, you can start the new gateway by selecting it in the solution runner. - -![public-gateway-solution-runner](images/public-gateway-solution-runner.png) - ## Creating Helm Chart for the New Gateway If you want to deploy the new gateway to Kubernetes, you should create a Helm chart for the new application. diff --git a/docs/en/solution-templates/microservice/adding-new-applications.md b/docs/en/solution-templates/microservice/adding-new-applications.md index 7e3a53cbae..352b18f763 100644 --- a/docs/en/solution-templates/microservice/adding-new-applications.md +++ b/docs/en/solution-templates/microservice/adding-new-applications.md @@ -120,12 +120,6 @@ Add the new application URL to the `appsettings.json` file in the `Identity` ser } ``` -### Add the New Application to the Solution Runner - -We should add the new application to the solution runner [profile](../../studio/running-applications.md#profile) for running applications in the ABP Studio. You can follow the steps explained in the [Solution Runner](../../studio/running-applications.md#c-application) document to add the new application to the solution runner profile. Afterwards, you can start the new application by selecting it in the solution runner. - -![web-public-solution-runner](images/web-public-solution-runner.png) - ## Docker Configuration for Prometheus If you want to monitor the new application with Prometheus when you debug the solution, you should add the new application to the `prometheus.yml` file in the `etc/docker/prometheus` folder. You can copy the configurations from the existing applications and modify them according to the new application. Below is an example of the `prometheus.yml` file for the `WebPublic` application. diff --git a/docs/en/solution-templates/microservice/adding-new-microservices.md b/docs/en/solution-templates/microservice/adding-new-microservices.md index 2ff864cd0d..4a82ee6a55 100644 --- a/docs/en/solution-templates/microservice/adding-new-microservices.md +++ b/docs/en/solution-templates/microservice/adding-new-microservices.md @@ -16,6 +16,8 @@ This document explains how to add new microservices to the microservice solution Additionally, there is a folder named `_templates` in the root directory. This folder contains templates you can use to create new microservices, API gateways, and applications. These templates can be customized according to your needs. +![folder-structure](images/folder-structure.png) + ## Adding a New Microservice To add a new microservice to the solution, you can use the `service_nolayers` template. This template creates a new ASP.NET Core application with the necessary configurations and dependencies. Follow the steps below to add a new microservice: @@ -39,14 +41,12 @@ The new microservice is created and added to the solution. You can see the new m ### Configuring the appsettings.json The new microservice is created with the necessary configurations and dependencies. We should configure several sections by modifying the `appsettings.json` file: - * Set the `Administration` & `AbpBlobStoring` connection strings. - * Set the correct `StringEncryption` key. * Set the `CorsOrigins` to allow the web gateway to access the microservice. * Set the `AuthServer` configurations to enable the microservice to authenticate and authorize users. You can copy the configurations from the existing microservices and modify them according to the new microservice. Below is an example of the `appsettings.json` file for the `ProductService` microservice. -```json +```diff { "ConnectionStrings": { "Administration": "Server=localhost,1434; User Id=sa; Password=myPassw@rd; Database=Bookstore_Administration; TrustServerCertificate=true", @@ -54,15 +54,18 @@ You can copy the configurations from the existing microservices and modify them "ProductService": "Server=localhost,1434; User Id=sa; Password=myPassw@rd; Database=Bookstore_ProductService; TrustServerCertificate=true" }, "App": { - "CorsOrigins": "http://localhost:44333", +- "CorsOrigins": "http://localhost:webgateway_port", ++ "CorsOrigins": "http://localhost:44333", "EnablePII": false }, "Swagger": { "IsEnabled": true }, "AuthServer": { - "Authority": "http://localhost:44387", - "MetaAddress": "http://localhost:44387", +- "Authority": "http://localhost:authserver_port", +- "MetaAddress": "http://localhost:authserver_port", ++ "Authority": "http://localhost:44387", ++ "MetaAddress": "http://localhost:44387", "RequireHttpsMetadata": "false", "SwaggerClientId": "SwaggerTestUI", "Audience": "ProductService" @@ -93,24 +96,24 @@ You can copy the configurations from the existing microservices and modify them "Url": "http://localhost:9200" }, "StringEncryption": { - "DefaultPassPhrase": "PDAWjbshpwlOwNB6" + "DefaultPassPhrase": "PDAWjbshpwlOwNB6" } } ``` ### Configuring the OpenId Options -We should configure the OpenId options by modifying the `OpenIddictDataSeeder` in the `Identity` service. Below is an example of the `OpenIddictDataSeeder` options for the `ProductService` microservice. +We should configure the OpenId options by modifying the `OpenIddictDataSeeder` in the `Identity` service. Below is an example of the `OpenIddictDataSeeder` options for the `Product` microservice. Create API scopes and add the required API scope for Swagger clients in the `CreateApiScopesAsync` and `CreateSwaggerClientsAsync` methods in the `OpenIddictDataSeeder` class. -```csharp +```diff private async Task CreateApiScopesAsync() { await CreateScopesAsync("AuthServer"); await CreateScopesAsync("IdentityService"); await CreateScopesAsync("AdministrationService"); - await CreateScopesAsync("ProductService"); // new service ++ await CreateScopesAsync("ProductService"); } private async Task CreateSwaggerClientsAsync() @@ -120,21 +123,21 @@ private async Task CreateSwaggerClientsAsync() "AuthServer", "IdentityService", "AdministrationService", - "ProductService" // new service ++ "ProductService" }); } ``` Add the redirect URL for the new service in the `CreateSwaggerClientAsync` method. -```csharp +```diff private async Task CreateSwaggerClientAsync(string clientId, string[] scopes) { ... ... ... var administrationServiceRootUrl = _configuration["OpenIddict:Resources:AdministrationService:RootUrl"]!.TrimEnd('/'); - var productServiceServiceRootUrl = _configuration["OpenIddict:Resources:ProductService:RootUrl"]!.TrimEnd('/'); // new service ++ var productServiceRootUrl = _configuration["OpenIddict:Resources:ProductService:RootUrl"]!.TrimEnd('/'); await CreateOrUpdateApplicationAsync( name: clientId, @@ -152,15 +155,15 @@ private async Task CreateSwaggerClientAsync(string clientId, string[] scopes) $"{authServerRootUrl}/swagger/oauth2-redirect.html", $"{identityServiceRootUrl}/swagger/oauth2-redirect.html", $"{administrationServiceRootUrl}/swagger/oauth2-redirect.html", - $"{productServiceServiceRootUrl}/swagger/oauth2-redirect.html", // new service ++ $"{productServiceRootUrl}/swagger/oauth2-redirect.html" } ); } ``` -Add the allowed scope for the web (front-end) application(s) in the `CreateClientsAsync` method. You might have different clients for different UI applications such as web, Angular, React, etc. Ensure you add the new service to the allowed scopes of these clients. +Add the allowed scope for the web (front-end) application(s) in the `CreateClientsAsync` method. You might have different clients for different UI applications such as web, Angular, React, etc. Ensure you add the new microservice to the allowed scopes of these clients. -```csharp +```diff private async Task CreateClientsAsync() { var commonScopes = new List @@ -192,7 +195,7 @@ private async Task CreateClientsAsync() "SaasService", "AuditLoggingService", "AdministrationService", - "ProductService" // new service ++ "ProductService" }).ToList(), redirectUris: new List { $"{webClientRootUrl}signin-oidc" }, postLogoutRedirectUris: new List() { $"{webClientRootUrl}signout-callback-oidc" }, @@ -202,110 +205,130 @@ private async Task CreateClientsAsync() } ``` -Add the new service URL to the `appsettings.json` file in the `Identity` service. +Add the new service URL to the `appsettings.json` file in the `Identity` microservice. In this example we're gonna edit the *Acme.Bookstore.IdentityService* project `appsettings.json` file. -```json +```diff "OpenIddict": { "Applications": { ... }, "Resources": { ... - "ProductService": { - "RootUrl": "http://localhost:44350" - } ++ "ProductService": { ++ "RootUrl": "http://localhost:44350" ++ } } } ``` ### Configuring the AuthServer -We should configure the AuthServer for **CORS** and **RedirectAllowedUrls**. +We should configure the *AuthServer* application `appsettings.json` file for the **CorsOrigins** and **RedirectAllowedUrls** sections. -```json +```diff +... "App": { "SelfUrl": "http://localhost:***", - "CorsOrigins": "...... ,http://localhost:44350", +- "CorsOrigins": "http://localhost:44358,..", ++ "CorsOrigins": "http://localhost:44358,..,http://localhost:44350", "EnablePII": false, - "RedirectAllowedUrls": "...... ,http://localhost:44350" -} +- "RedirectAllowedUrls": "http://localhost:44358,..", ++ "RedirectAllowedUrls": "http://localhost:44358,..,http://localhost:44350" +}, +... ``` ### Configuring the API Gateway -We should configure the API Gateway to allow the web gateway to access the new microservice. First, we should add the **ProductService** sections to the `appsettings.json` file in the `WebGateway` project. +We should configure the API Gateway to access the new microservice. First, add the **Product** sections to the `appsettings.json` file in the `WebGateway` project. In this example we're gonna edit the *Acme.Bookstore.WebGateway* project `appsettings.json` file. -```json +```diff "ReverseProxy": { "Routes": { ... - "ProductService": { - "ClusterId": "ProductService", - "Match": { - "Path": "/api/productservice/{**catch-all}" - } - }, - "ProductServiceSwagger": { - "ClusterId": "ProductService", - "Match": { - "Path": "/swagger-json/ProductService/swagger/v1/swagger.json" - }, - "Transforms": [ - { "PathRemovePrefix": "/swagger-json/ProductService" } - ] - } ++ "Product": { ++ "ClusterId": "Product", ++ "Match": { ++ "Path": "/api/product/{**catch-all}" ++ } ++ }, ++ "ProductSwagger": { ++ "ClusterId": "Product", ++ "Match": { ++ "Path": "/swagger-json/Product/swagger/v1/swagger.json" ++ }, ++ "Transforms": [ ++ { "PathRemovePrefix": "/swagger-json/Product" } ++ ] ++ } }, "Clusters": { ... - "ProductService": { - "Destinations": { - "ProductService": { - "Address": "http://localhost:44350/" - } - } - } ++ "Product": { ++ "Destinations": { ++ "Product": { ++ "Address": "http://localhost:44350/" ++ } ++ } ++ } } } ``` -Afterwards, open the `ProjectNameWebGatewayModule` class in the `WebGateway` and add the `ProductService` to the `ConfigureSwaggerUI` method. +Afterwards, open the `ProjectNameWebGatewayModule` class in the `WebGateway` project and add the `ProductService` to the `ConfigureSwaggerUI` method. In this example we're gonna edit the `BookstoreWebGatewayModule` file. -```csharp -options.OAuthScopes( - "AdministrationService", - "AuthServer", - "IdentityService", - "ProductService" // new service -); +```diff +private static void ConfigureSwaggerUI( + IProxyConfig proxyConfig, + SwaggerUIOptions options, + IConfiguration configuration) +{ + foreach (var cluster in proxyConfig.Clusters) + { + options.SwaggerEndpoint($"/swagger-json/{cluster.ClusterId}/swagger/v1/swagger.json", $"{cluster.ClusterId} API"); + } + + options.OAuthClientId(configuration["AuthServer:SwaggerClientId"]); + options.OAuthScopes( + "AdministrationService", + "AuthServer", + ..., ++ "ProductService" + ); +} ``` ### Configuring the UI Services -We should configure the UI application(s) to allow the new microservice to access through the web gateway. To do this, we should add the new service scope to the `ConfigureAuthentication` method in the `ProjectName...Module` class in the `Web` or `Blazor` application. +We should configure the UI application(s) to allow the new microservice to access through the web gateway. To do this, we should add the new microservice scope to the `ConfigureAuthentication` method in the `ProjectName...Module` class in the `Web` or `Blazor` application. In this example we're gonna edit the `BookstoreWebModule` file. -```csharp -context.Services.AddAuthentication(options => -{ - options.DefaultScheme = "Cookies"; - options.DefaultChallengeScheme = "oidc"; -}) -.AddCookie("Cookies", options => +```diff +private void ConfigureAuthentication(ServiceConfigurationContext context, IConfiguration configuration) { - options.ExpireTimeSpan = TimeSpan.FromDays(365); -}) -.AddAbpOpenIdConnect("oidc", options => -{ - ... - options.Scope.Add("AuthServer"); - options.Scope.Add("IdentityService"); - options.Scope.Add("AdministrationService"); - options.Scope.Add("ProductService"); // new servie -}); + context.Services.AddAuthentication(options => + { + options.DefaultScheme = "Cookies"; + options.DefaultChallengeScheme = "oidc"; + }) + .AddCookie("Cookies", options => + { + options.ExpireTimeSpan = TimeSpan.FromDays(365); + }) + .AddAbpOpenIdConnect("oidc", options => + { + ... + options.Scope.Add("AuthServer"); + options.Scope.Add("IdentityService"); + options.Scope.Add("AdministrationService"); ++ options.Scope.Add("ProductService"); + }); + ... +} ``` Similarly, if you have an Angular application, you should add the new service scope to the `oAuthConfig` in `environment.ts`: -```typescript +```diff const baseUrl = 'http://localhost:4200'; const oAuthConfig = { @@ -313,69 +336,83 @@ const oAuthConfig = { redirectUri: baseUrl, clientId: 'Angular', responseType: 'code', - scope: 'openid profile email roles AuthServer IdentityService AdministrationService ProductService', // new service +- scope: 'openid profile email roles AuthServer IdentityService AdministrationService', ++ scope: 'openid profile email roles AuthServer IdentityService AdministrationService ProductService', requireHttps: false }; ``` -### Add the New Microservice to the Solution Runner - -We should add the new microservice to the solution runner [profile](../../studio/running-applications.md#profile) for running applications in the ABP Studio. You can follow the steps explained in the [Solution Runner](../../studio/running-applications.md#c-application) document to add the new microservice to the solution runner profile. Afterwards, you can start the new microservice by selecting it in the solution runner. - -![product-service-solution-runner](images/product-service-solution-runner.png) - ## Docker Configuration for Prometheus -If you want to monitor the new microservice with Prometheus when you debug the solution, you should add the new microservice to the `prometheus.yml` file in the `etc/docker/prometheus` folder. You can copy the configurations from the existing microservices and modify them according to the new microservice. Below is an example of the `prometheus.yml` file for the `ProductService` microservice. +If you want to monitor the new microservice with Prometheus when you debug the solution, you should add the new microservice to the `prometheus.yml` file in the `etc/docker/prometheus` folder. You can copy the configurations from the existing microservices and modify them according to the new microservice. Below is an example of the `prometheus.yml` file for the `Product` microservice. -```yml - - job_name: 'product' +```diff + - job_name: 'authserver' scheme: http metrics_path: 'metrics' static_configs: - - targets: ['host.docker.internal:44350'] + - targets: ['host.docker.internal:44398'] + ... ++ - job_name: 'product' ++ scheme: http ++ metrics_path: 'metrics' ++ static_configs: ++ - targets: ['host.docker.internal:44350'] ``` ## Creating Helm Chart for the New Microservice If you want to deploy the new microservice to Kubernetes, you should create a Helm chart for the new microservice. -First, we need to add the new microservice to the `build-all-images.ps1` script in the `etc/helm` folder. You can copy the configurations from the existing microservices and modify them according to the new microservice. Below is an example of the `build-all-images.ps1` script for the `ProductService` microservice. +First, we need to add the new microservice to the `build-all-images.ps1` script in the `etc/helm` folder. You can copy the configurations from the existing microservices and modify them according to the new microservice. Below is an example of the `build-all-images.ps1` script for the `Product` microservice. -```powershell -./build-image.ps1 -ProjectPath "../../services/product/Acme.Bookstore.ProductService/Acme.Bookstore.ProductService.csproj" -ImageName bookstore/productservice +```diff +... + ./build-image.ps1 -ProjectPath "../../apps/auth-server/Acme.Bookstore.AuthServer/Acme.Bookstore.AuthServer.csproj" -ImageName bookstore/authserver ++ ./build-image.ps1 -ProjectPath "../../services/product/Acme.Bookstore.ProductService/Acme.Bookstore.ProductService.csproj" -ImageName bookstore/product ``` -Then, we need to add the connection string to the `values.projectname-local.yaml` file in the `etc/helm/projectname` folder. Below is an example of the `values.bookstore-local.yaml` file for the `ProductService` microservice. +Then, we need to add the connection string to the `values.projectname-local.yaml` file in the `etc/helm/projectname` folder. Below is an example of the `values.bookstore-local.yaml` file for the `Product` microservice. -```yaml +```diff global: ... connectionStrings: ... - productService: "Server=[RELEASE_NAME]-sqlserver,1433; Database=Bookstore_ProductService; User Id=sa; Password=myPassw@rd; TrustServerCertificate=True" ++ product: "Server=[RELEASE_NAME]-sqlserver,1433; Database=Bookstore_ProductService; User Id=sa; Password=myPassw@rd; TrustServerCertificate=True" ``` -Afterwards, we need to create a new Helm chart for the new microservice. You can copy the configurations from the existing microservices and modify them according to the new microservice. Below is an example of the `productservice` Helm chart for the `ProductService` microservice. +Afterwards, we need to create a new Helm chart for the new microservice. You can copy the configurations from the existing microservices and modify them according to the new microservice. Below is an example of the `product` Helm chart for the `Product` microservice. + +Product microservice `values.yaml` file. {%{ ```yaml -# values.yaml image: - repository: "bookstore/productservice" + repository: "bookstore/product" tag: "latest" pullPolicy: IfNotPresent swagger: isEnabled: "true" +``` +}%} + +Product microservice `Chart.yaml` file. -# Chart.yaml +{%{ +```yaml apiVersion: v2 -name: productservice +name: product version: 1.0.0 appVersion: "1.0" description: Bookstore Product Service +``` +}%} -# product.yaml +Product microservice `product.yaml` file. + +{%{ +```yaml apiVersion: apps/v1 kind: Deployment metadata: @@ -404,10 +441,15 @@ spec: - name: "ConnectionStrings__AbpBlobStoring" value: "{{ .Values.global.connectionStrings.blobStoring | replace "[RELEASE_NAME]" .Release.Name }}" - name: "ConnectionStrings__ProductService" - value: "{{ .Values.global.connectionStrings.productService | replace "[RELEASE_NAME]" .Release.Name }}" + value: "{{ .Values.global.connectionStrings.product | replace "[RELEASE_NAME]" .Release.Name }}" ... +``` +}%} + +Product microservice `product-service.yaml` file. -# product-service.yaml +{%{ +```yaml apiVersion: v1 kind: Service metadata: @@ -427,32 +469,113 @@ After creating the Helm chart, you can *Refresh Sub Charts* in the ABP Studio. ![kubernetes-refresh-sub-charts](images/kubernetes-refresh-sub-charts.png) -Then, update *Metadata* information right-click the *microservicename* [sub-chart](../../studio/kubernetes.md#subchart), select *Properties* it open *Chart Properties* window. You can edit in the *Metadata* tab. +Then, update *Metadata* information right-click the *microservicename* [sub-chart](../../studio/kubernetes.md#subchart), select *Properties* it open *Chart Properties* window. You should add the following keys in the *Metadata* tab. ![microservice-chart-properties](images/microservice-chart-properties-metadata.png) +- `projectPath`: The path to the microservice host application project. In the bookstore example, this value is `../../services/product/Acme.Bookstore.ProductService/Acme.Bookstore.ProductService.csproj`. +- `imageName`: When we build the Docker image, it uses this value as the Docker image name. We're going to use it in the Helm chart values. +- `projectType`: You can add a Helm chart for Angular and .NET projects, which is why we should explicitly specify the project type. + Add the *Kubernetes Services* in the *Chart Properties* -> *Kubernetes Services* tab. ![microservice-chart-properties-kubernetes-services](images/microservice-chart-properties-kubernetes-services.png) +> This value should be the same as the [solution runner application](./../../studio/running-applications.md#properties) *Kubernetes service* value. It's necessary for browsing because when we connect to the Kubernetes cluster, we should browse the Kubernetes services instead of using the Launch URL. + Last but not least, we need to configure the helm chart environments for identity, auth-server, and gateway applications. +Below is an example of the *Identity* microservice `identity.yaml` file. + {%{ -```yaml -# identity.yaml -# Add this line to the "env:" section -- name: "OpenIddict__Resources__ProductService__RootUrl" - value: "http://{{ .Release.Name }}-productservice" - -# authserver.yaml -# Concat the following lines for "App__CorsOrigins" section -- name: "App__CorsOrigins" - value: "...,http://{{ .Release.Name }}-administration,http://{{ .Release.Name }}-productservice" - -# webapigateway.yaml -# Add this line to the "env:" section -- name: "ReverseProxy__Clusters__ProductService__Destinations__ProductService__Address" - value: "http://{{ .Release.Name }}-productservice" +```diff +apiVersion: apps/v1 +kind: Deployment +metadata: + name: "{{ .Release.Name }}-{{ .Chart.Name }}" +spec: + selector: + matchLabels: + app: "{{ .Release.Name }}-{{ .Chart.Name }}" + template: + metadata: + labels: + app: "{{ .Release.Name }}-{{ .Chart.Name }}" + spec: + containers: + - image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" + imagePullPolicy: "{{ .Values.image.pullPolicy }}" + name: "{{ .Release.Name }}-{{ .Chart.Name }}" + ports: + - name: "http" + containerPort: 80 + env: + ... ++ - name: "OpenIddict__Resources__ProductService__RootUrl" ++ value: "http://{{ .Release.Name }}-product" +``` +}%} + +Below is an example of the *AuthServer* application `authserver.yaml` file. + +{%{ +```diff +apiVersion: apps/v1 +kind: Deployment +metadata: + name: "{{ .Release.Name }}-{{ .Chart.Name }}" +spec: + selector: + matchLabels: + app: "{{ .Release.Name }}-{{ .Chart.Name }}" + template: + metadata: + labels: + app: "{{ .Release.Name }}-{{ .Chart.Name }}" + spec: + containers: + - image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" + imagePullPolicy: "{{ .Values.image.pullPolicy }}" + name: "{{ .Release.Name }}-{{ .Chart.Name }}" + ports: + - name: "http" + containerPort: 80 + env: + ... + - name: "App__CorsOrigins" +- value: "...,http://{{ .Release.Name }}-administration" ++ value: "...,http://{{ .Release.Name }}-administration,http://{{ .Release.Name }}-product" +``` +}%} + +Below is an example of the *WebApiGateway* application `webapigateway.yaml` file. + +{%{ +```diff +apiVersion: apps/v1 +kind: Deployment +metadata: + name: "{{ .Release.Name }}-{{ .Chart.Name }}" +spec: + selector: + matchLabels: + app: "{{ .Release.Name }}-{{ .Chart.Name }}" + template: + metadata: + labels: + app: "{{ .Release.Name }}-{{ .Chart.Name }}" + spec: + containers: + - image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" + imagePullPolicy: "{{ .Values.image.pullPolicy }}" + name: "{{ .Release.Name }}-{{ .Chart.Name }}" + ports: + - name: "http" + containerPort: 80 + env: + ... ++ - name: "ReverseProxy__Clusters__Product__Destinations__Product__Address" ++ value: "http://{{ .Release.Name }}-product" ``` }%} @@ -465,11 +588,11 @@ You can customize the microservice template if needed. Add new configurations, d After adding the new microservice to the solution, you can develop the UI for the new microservice. For .NET applications, you can add the microservice *Contracts* package to the UI application(s) to access the services provided by the new microservice. Afterwards, you can use the [generate-proxy](../../cli/index.md#generate-proxy) command to generate the proxy classes for the new microservice. ```bash -abp generate-proxy -t csharp -url http://localhost:44333/ -m productService --without-contracts +abp generate-proxy -t csharp -url http://localhost:44333/ -m product --without-contracts ``` Next, start creating *Pages* and *Components* for the new microservice in the UI application(s). Similarly, if you have an Angular application, you can use the [generate-proxy](../../cli/index.md#generate-proxy) command to generate the proxy classes for the new microservice and start developing the UI. ```bash -abp generate-proxy -t ng -url http://localhost:44333/ -m productService +abp generate-proxy -t ng -url http://localhost:44333/ -m product ``` \ No newline at end of file diff --git a/docs/en/solution-templates/microservice/images/folder-structure.png b/docs/en/solution-templates/microservice/images/folder-structure.png new file mode 100644 index 0000000000..926bfaa3d5 Binary files /dev/null and b/docs/en/solution-templates/microservice/images/folder-structure.png differ diff --git a/docs/en/studio/concepts.md b/docs/en/studio/concepts.md index 5f23150cf1..995519e191 100644 --- a/docs/en/studio/concepts.md +++ b/docs/en/studio/concepts.md @@ -5,7 +5,7 @@ { "Next": { "Name": "Overview", - "Path": "studio/overview.md" + "Path": "studio/overview" } } ```` @@ -46,4 +46,4 @@ Some ABP Studio terms may seem conflict with .NET and Visual Studio. To make the | Module | Solution | | Package | Project | -In essence, ABP Studio uses the solution term to cover all the .NET solutions and other components of your product. ABP Studio is used to build and manage the relations of these multiple .NET solutions and provides a high-level view of the whole system. \ No newline at end of file +In essence, ABP Studio uses the solution term to cover all the .NET solutions and other components of your product. ABP Studio is used to build and manage the relations of these multiple .NET solutions and provides a high-level view of the whole system. diff --git a/docs/en/studio/images/abp-studio-switch-to-preview.png b/docs/en/studio/images/abp-studio-switch-to-preview.png new file mode 100644 index 0000000000..32f6d01edb Binary files /dev/null and b/docs/en/studio/images/abp-studio-switch-to-preview.png differ diff --git a/docs/en/studio/installation.md b/docs/en/studio/installation.md index 11f390f9f3..4dc158e464 100644 --- a/docs/en/studio/installation.md +++ b/docs/en/studio/installation.md @@ -8,7 +8,7 @@ Before you begin the installation process for ABP Studio, ensure that your system meets the following pre-requirements: ### Node -Make sure [Node.js](https://nodejs.org/en) is installed on your system. If you have not installed Node.js, you can download the `v16` or `v18` version from the official [Node.js website](https://nodejs.org/en/download/prebuilt-installer). +Make sure [Node.js](https://nodejs.org/en) is installed on your system. If you have not installed Node.js, you can download the `v18.19+` version from the official [Node.js website](https://nodejs.org/en/download/prebuilt-installer). ### WireGuard (Optional) ABP Studio needs [WireGuard](https://www.wireguard.com/) for Kubernetes operations. You can find the installation instructions for your specific operating system below: diff --git a/docs/en/studio/monitoring-applications.md b/docs/en/studio/monitoring-applications.md index b7a67e2f63..645df15418 100644 --- a/docs/en/studio/monitoring-applications.md +++ b/docs/en/studio/monitoring-applications.md @@ -5,7 +5,7 @@ { "Next": { "Name": "Working with Kubernetes", - "Path": "studio/kubernetes.md" + "Path": "studio/kubernetes" } } ```` diff --git a/docs/en/studio/overview.md b/docs/en/studio/overview.md index 15f6615883..ecfdda52bc 100644 --- a/docs/en/studio/overview.md +++ b/docs/en/studio/overview.md @@ -35,13 +35,14 @@ The top menu is the main menu bar in ABP Studio. It offers access to various fun ### ABP Suite -[ABP Suite](https://abp.io/tools/suite) is a complementary tool to the ABP Platform, designed to enable the rapid construction of web pages in just a few minutes. With the ABP Suite button in the Top Menu, you can access the Suite from the browser embedded in ABP Studio. +[ABP Suite](https://abp.io/suite) is a complementary tool to the ABP Platform, designed to enable the rapid construction of web pages in just a few minutes. With the ABP Suite button in the Top Menu, you can access the Suite from the browser embedded in ABP Studio. ### Tools Menu - **Options** - - **Theme:** Allows to change UI theme. -- **Extensions:** Opens the extension management window. + - **Theme:** Allows to change UI theme. +- **Global secrets**: Allows to add global secrets. +- **Global metadata**: Allows to add global metadata. ### Help Menu @@ -50,6 +51,7 @@ The top menu is the main menu bar in ABP Studio. It offers access to various fun - **Community:** Opens the official [ABP Community](https://abp.io/community) website in your browser. - **Support:** Opens the official [Support](https://abp.io/support/questions) website in your browser. - **My Support Questions:** Opens the page on the official Support website in your browser showing the tickets you have opened. +- **Check for updates:** Checks for new version of ABP Studio. - **About:** Opens the about window of ABP Studio where you can get more information about it. ## Welcome Screen diff --git a/docs/en/studio/release-notes.md b/docs/en/studio/release-notes.md new file mode 100644 index 0000000000..211786cacb --- /dev/null +++ b/docs/en/studio/release-notes.md @@ -0,0 +1,105 @@ +# ABP Studio Release Notes + +This document contains **brief release notes** for each ABP Studio release. Release notes only include **major features** and **visible enhancements**. Therefore, they don't include all the development done in the related version. + +## 0.8.1 (2024-09-12) + +* Fixed MySQL connection problem for nolayers template +* Ignored failed solution runner profiles while loading +* Added required ModalBuilder extensions for the imported/installed modules for EF Core + +## 0.8.0 (2024-09-11) + +* Added `Blazor WebApp UI` to **app-nolayers** and **microservice** templates +* Fixed version problem for bundle command +* Fixed optional module integrations +* Added **LeptonX Theme** to module-list +* Fixed bug related to Kubernetes user-specified connection + +## 0.7.9 (2024-08-29) + +* Opened Readme.md file after module creation or opening a solution +* Refactor & made enhancements to microservice template +* Fixed some bugs that occur while creating a new module +* Synchronized new templates with the old templates +* Angular: Fixed logo problem in templates + +## 0.7.8 (2024-08-23) + +* Revised the new solution creation wizard and improved for UX +* Fixed bugs on the Blazor WebApp template +* Reduced logs count per application + +## 0.7.7 (2024-08-14) + +* Updated LeptonX logos in new templates +* ABP Suite: Opened modules with .sln path instead of directory (fixes some problems in Suite integration) +* Enhancements on Solution Runner + +## 0.7.6 (2024-08-12) + +* Removed redundant helm repo installation +* Made enhancements to the Welcome Page area +* Microservice Template: Enabled `DynamicPermissionStore` in AuthServer +* Added Blazor WebApp option for Application template +* Added **Solution Creation Info** action for identifying the solution + +## 0.7.5 (2024-08-06) + +* Fixed ABP Suite integration for macOS +* Fixed build errors after upgrading to ABP 8.2.1 +* ABP Suite: Detected version inconsistencies and notified users to fix them automatically + +## 0.7.4 (2024-07-31) + +* Allowed creating open-source templates for active license owners +* Fixed basic theme problems in angular templates +* Handled docker related errors in solution runner +* Fixed versions of Chat Module packages + +## 0.7.3 (2024-07-27) + +* Added administrator mode indicator on the application title +* Made enhancements for aligning application title on macOS + +## 0.7.2 (2024-07-26) + +* Added `Blazor.Client` packages for alignment with new hosting logic +* Updated Microsoft packages to v8.0.4 +* Revised application upgrade process +* Fixed profile photo problem in tiered projects +* Removed **LinkedAccounts** and **AuthorityDelegation** menu from templates + +## 0.7.1 (2024-07-24) + +* Fixed restart problem after installing extensions on macOS +* Provided a model for sharing the same Kubernetes cluster between developers +* Fixed the **Text Template Management** Module build problem in the app template +* Fixed login problem for the community edition +* Fixed all reported bugs & made enhancements + +## 0.7.0 (2024-07-17) + +* Added an option for building & starting C# applications directly +* Disabled redis on migrator when the solution is tiered +* Allowed Generating Static Proxies on ABP Studio UI + +## 0.6.9 (2024-06-27) + +* Allowed to open ABP Studio by clicking on a `*.abpsln` file +* Fixed solution runner multiple instance problem +* Allowed to install an NPM package to a package + +## 0.6.8 (2024-06-13) + +* Added free to pro upgrade option +* Fixed microservice template helm chart bugs +* Made enhancements to the new CLI + +## 0.6.7 (2024-05-31) + +* Added free option to app templates +* Made social login optional for the app template +* Added open-source (free) templates +* Started showing angular projects on the browser tab +* Introduced the Community Edition \ No newline at end of file diff --git a/docs/en/studio/solution-explorer.md b/docs/en/studio/solution-explorer.md index 3575659c88..76e3543269 100644 --- a/docs/en/studio/solution-explorer.md +++ b/docs/en/studio/solution-explorer.md @@ -117,6 +117,7 @@ A [module](./concepts.md#module) is a sub-solution that can contains zero, one o - `JetBrains Rider`: Opens the module in JetBrains Rider. This option is only available if you have JetBrains Rider installed. - `Terminal`: Opens the terminal in the module directory. - `Explorer`: Opens the file explorer in the module directory. +- `Upgrade to Pro`: This will be visible only when you purchased a license but still using the modules came with open-source (free) license. For more details, check out [Migrating from Open Source Templates](../guides/migrating-from-open-source.md) document. This is not shown in the screenshot above. ### Adding a New Empty Module @@ -156,7 +157,7 @@ ABP modules have their own file extension `.abpmdl`, and they are located in the ### Difference Between ABP Module Template and ABP Studio Module Approach -In ABP, creating a module solution using the [CLI](https://docs.abp.io/en/commercial/latest/startup-templates/module/creating-a-new-solution) results in a solution with numerous projects, some of which may not be necessary for a specific use case. The ABP Studio module approach differs from the ABP module template, offering greater flexibility. With ABP Studio, we can create a module containing only the required projects; for example, an empty module with only the `Domain` and `Application` projects. In this approach, the term [Package](./concepts.md#package) is used for module projects. +In ABP, creating a module solution using the [CLI](../cli/index.md) results in a solution with numerous projects, some of which may not be necessary for a specific use case. The ABP Studio module approach differs from the ABP module template, offering greater flexibility. With ABP Studio, we can create a module containing only the required projects; for example, an empty module with only the `Domain` and `Application` projects. In this approach, the term [Package](./concepts.md#package) is used for module projects. Furthermore, it's important to mention that we can create not just DDD-principled modules. The [Modularity](../framework/architecture/modularity/basics.md) document clarifies the difference between *Framework* and *Application* modules. Basically, every C# project refers to the `Volo.Abp.Core` package and defines the *Module* class as an ABP Class Library. We have the option to develop an infrastructure module using only the *ABP Class Library* packages and provide a module reference to other modules. diff --git a/docs/en/studio/version-compatibility.md b/docs/en/studio/version-compatibility.md new file mode 100644 index 0000000000..bd19eb563d --- /dev/null +++ b/docs/en/studio/version-compatibility.md @@ -0,0 +1,17 @@ +# ABP Studio and ABP Solution Templates Version Compatibility + +This document provides an overview of the compatibility between various versions of ABP Studio and [ABP Solution Templates](../solution-templates/index.md). Use this reference to ensure that you are using the correct versions of ABP Studio and ABP for your projects. + +| **ABP Studio Version** | **ABP Version** | +|------------------------|---------------------------| +| 0.8.1 | 8.3.0 | +| 0.8.0 | 8.2.3 | +| 0.7.8 - 0.7.9 | 8.2.2 | +| 0.7.4 to 0.7.7 | 8.2.1 | +| 0.7.0 to 0.7.3 | 8.2.0 | +| 0.6.8 - 0.6.9 | 8.1.3 | +| 0.6.7 | 8.1.1 | + +By default, ABP Studio uses stable versions to create solutions. Therefore, if you want to create a solution with a preview version, first you need to create a solution and then switch your solution to the preview version from the ABP Studio UI: + +![](images/abp-studio-switch-to-preview.png) \ No newline at end of file diff --git a/docs/en/suite/generating-crud-page.md b/docs/en/suite/generating-crud-page.md index a4a2fcfd6e..8d98bb7df9 100644 --- a/docs/en/suite/generating-crud-page.md +++ b/docs/en/suite/generating-crud-page.md @@ -93,7 +93,7 @@ To create a new entity, make sure the *-New entity-* is selected in the **Entity * **Customizable code**: Specifies hook-points to allow adding custom code blocks. Then, the code blocks that were written by you will not be overridden in the next entity generation and will be respected. -* **Multi-tenant**: For your multi-tenant application, you can set an entity as multi-tenant which means the data will be isolated between the tenants. To make an entity multi-tenant, ABP Suite adds the `IMultiTenant` interface to the entity. Further information see [Multi-Tenancy](https://docs.abp.io/{{Document_Language_Code}}/abp/{{Document_Version}}/Multi-Tenancy) +* **Multi-tenant**: For your multi-tenant application, you can set an entity as multi-tenant which means the data will be isolated between the tenants. To make an entity multi-tenant, ABP Suite adds the `IMultiTenant` interface to the entity. Further information see [Multi-Tenancy](../framework/architecture/multi-tenancy/index.md) * If you created your application with *Separated tenant schema* support, then when you enable the multi-tenancy for the entity, database configurations (DbSet definitions and model configurations) will be defined in both `MyProjectNameDbContext` and `MyProjectNameTenantDbContext` (can be used for tenant-specific configurations) classes. Otherwise, the database configurations will only be defined in the `MyProjectNameDbContext` class for the host. diff --git a/docs/en/tools.md b/docs/en/tools.md new file mode 100644 index 0000000000..356db9f639 --- /dev/null +++ b/docs/en/tools.md @@ -0,0 +1,7 @@ +## Tools + +ABP provides a comprehensive set of tools designed to enhance the development experience and improve productivity: + +* [ABP CLI](./cli/index.md): Command line tool to perform some common operations for ABP based solutions. +* [ABP Suite](./suite/index.md): A complementary tool that allows you to build web pages in a matter of minutes. +* [ABP Studio](./studio/index.md): A cross-platform desktop application for ABP and .NET developers. Aims to provide a comfortable development environment for you by automating things, providing insights about your solution, making develop, run, browse, monitor, trace and deploy your solutions much easier. \ No newline at end of file diff --git a/docs/en/tutorials/book-store/images/blazor-add-books-component-client.png b/docs/en/tutorials/book-store/images/blazor-add-books-component-client.png new file mode 100644 index 0000000000..be509ab06c Binary files /dev/null and b/docs/en/tutorials/book-store/images/blazor-add-books-component-client.png differ diff --git a/docs/en/tutorials/book-store/index.md b/docs/en/tutorials/book-store/index.md index f3f24c8a3c..c3161d2331 100644 --- a/docs/en/tutorials/book-store/index.md +++ b/docs/en/tutorials/book-store/index.md @@ -35,3 +35,21 @@ This tutorial is organized as the following parts: - [Part 8: Authors: Application Layer](part-08.md) - [Part 9: Authors: User Interface](part-09.md) - [Part 10: Book to Author Relation](part-10.md) + +### Download the Source Code + +This tutorial has multiple versions based on your **UI** and **Database** preferences. We've prepared a few combinations of the source code to be downloaded: + +* [MVC (Razor Pages) UI with EF Core](https://github.com/abpframework/abp-samples/tree/master/BookStore-Mvc-EfCore) +* [Blazor UI with EF Core](https://github.com/abpframework/abp-samples/tree/master/BookStore-Blazor-EfCore) +* [Angular UI with MongoDB](https://github.com/abpframework/abp-samples/tree/master/BookStore-Angular-MongoDb) + +> If you encounter the "filename too long" or "unzip" error on Windows, please see [this guide](../../kb/windows-path-too-long-fix.md). + +{{if UI == "MVC" && DB == "EF"}} + +### Video Tutorial + +This part is also recorded as a video tutorial and **published on YouTube**. + +{{end}} diff --git a/docs/en/tutorials/book-store/part-01.md b/docs/en/tutorials/book-store/part-01.md index 327233c42b..8f1d5df346 100644 --- a/docs/en/tutorials/book-store/part-01.md +++ b/docs/en/tutorials/book-store/part-01.md @@ -16,46 +16,6 @@ } ```` -## About This Tutorial - -In this tutorial series, you will build an ABP based web application named `Acme.BookStore`. This application is used to manage a list of books and their authors. It is developed using the following technologies: - -* **{{DB_Value}}** as the database provider. -* **{{UI_Value}}** as the UI Framework. - -This tutorial is organized as the following parts: - -- **Part 1: Creating the server side (this part)** -- [Part 2: The book list page](part-02.md) -- [Part 3: Creating, updating and deleting books](part-03.md) -- [Part 4: Integration tests](part-04.md) -- [Part 5: Authorization](part-05.md) -- [Part 6: Authors: Domain layer](part-06.md) -- [Part 7: Authors: Database Integration](part-07.md) -- [Part 8: Authors: Application Layer](part-08.md) -- [Part 9: Authors: User Interface](part-09.md) -- [Part 10: Book to Author Relation](part-10.md) - -### Download the Source Code - -This tutorial has multiple versions based on your **UI** and **Database** preferences. We've prepared a few combinations of the source code to be downloaded: - -* [MVC (Razor Pages) UI with EF Core](https://github.com/abpframework/abp-samples/tree/master/BookStore-Mvc-EfCore) -* [Blazor UI with EF Core](https://github.com/abpframework/abp-samples/tree/master/BookStore-Blazor-EfCore) -* [Angular UI with MongoDB](https://github.com/abpframework/abp-samples/tree/master/BookStore-Angular-MongoDb) - -> If you encounter the "filename too long" or "unzip" error on Windows, please see [this guide](../../kb/windows-path-too-long-fix.md). - -> After downloading the source code, you might need to run some commands before running the application. See the _After Creating the Solution_ section below for more information. - -{{if UI == "MVC" && DB == "EF"}} - -### Video Tutorial - -This part is also recorded as a video tutorial and **published on YouTube**. - -{{end}} - ## Creating the Solution Before starting the development, create a new solution named `Acme.BookStore` and run it by following the [getting started tutorial](../../get-started/layered-web-application.md). @@ -480,7 +440,7 @@ ABP can [**automagically**](../../framework/api-development/auto-controllers.md) ### Swagger UI -The startup template is configured to run the [Swagger UI](https://swagger.io/tools/swagger-ui/) using the [Swashbuckle.AspNetCore](https://github.com/domaindrivendev/Swashbuckle.AspNetCore) library. Run the application ({{if UI=="MVC"}}`Acme.BookStore.Web`{{else}}`Acme.BookStore.HttpApi.Host`{{end}}) by pressing `CTRL+F5` and navigate to `https://localhost:/swagger/` on your browser. Replace `` with your own port number. +The startup template is configured to run the [Swagger UI](https://swagger.io/tools/swagger-ui/) using the [Swashbuckle.AspNetCore](https://github.com/domaindrivendev/Swashbuckle.AspNetCore) library. Run the application ({{if UI=="MVC"}}`Acme.BookStore.Web`{{else if UI=="BlazorServer"}}`Acme.BookStore.Blazor`{{else}}`Acme.BookStore.HttpApi.Host`{{end}}) by pressing `CTRL+F5` and navigate to `https://localhost:/swagger/` on your browser. Replace `` with your own port number. You will see some built-in service endpoints as well as the `Book` service and its REST-style endpoints: diff --git a/docs/en/tutorials/book-store/part-02.md b/docs/en/tutorials/book-store/part-02.md index 6ac190710b..df5a5ac598 100644 --- a/docs/en/tutorials/book-store/part-02.md +++ b/docs/en/tutorials/book-store/part-02.md @@ -20,44 +20,6 @@ } ```` -## About This Tutorial - -In this tutorial series, you will build an ABP based web application named `Acme.BookStore`. This application is used to manage a list of books and their authors. It is developed using the following technologies: - -* **{{DB_Value}}** as the ORM provider. -* **{{UI_Value}}** as the UI Framework. - -This tutorial is organized as the following parts: - -- [Part 1: Creating the server side](part-01.md) -- **Part 2: The book list page (this part)** -- [Part 3: Creating, updating and deleting books](part-03.md) -- [Part 4: Integration tests](part-04.md) -- [Part 5: Authorization](part-05.md) -- [Part 6: Authors: Domain layer](part-06.md) -- [Part 7: Authors: Database Integration](part-07.md) -- [Part 8: Authors: Application Layer](part-08.md) -- [Part 9: Authors: User Interface](part-09.md) -- [Part 10: Book to Author Relation](part-10.md) - -### Download the Source Code - -This tutorial has multiple versions based on your **UI** and **Database** preferences. We've prepared a few combinations of the source code to be downloaded: - -* [MVC (Razor Pages) UI with EF Core](https://github.com/abpframework/abp-samples/tree/master/BookStore-Mvc-EfCore) -* [Blazor UI with EF Core](https://github.com/abpframework/abp-samples/tree/master/BookStore-Blazor-EfCore) -* [Angular UI with MongoDB](https://github.com/abpframework/abp-samples/tree/master/BookStore-Angular-MongoDb) - -> If you encounter the "filename too long" or "unzip" error on Windows, please see [this guide](../../kb/windows-path-too-long-fix.md). - -{{if UI == "MVC" && DB == "EF"}} - -### Video Tutorial - -This part is also recorded as a video tutorial and **published on YouTube**. - -{{end}} - {{if UI == "MVC"}} ## Dynamic JavaScript Proxies @@ -556,9 +518,13 @@ Now you can see the final result on your browser: ## Create a Books Page -It's time to create something visible and usable! Right click on the `Pages` folder under the `Acme.BookStore.Blazor.Client` project and add a new **razor component**, named `Books.razor`: +It's time to create something visible and usable! Right click on the `Pages` folder under the {{ if UI == "Blazor"}}`Acme.BookStore.Blazor.Client`{{ else }}`Acme.BookStore.Blazor`{{ end }} project and add a new **razor component**, named `Books.razor`: +{{ if UI == "Blazor"}} +![blazor-add-books-component](images/blazor-add-books-component-client.png) +{{ else }} ![blazor-add-books-component](images/blazor-add-books-component.png) +{{ end }} Replace the contents of this component as shown below: @@ -574,7 +540,7 @@ Replace the contents of this component as shown below: ### Add the Books Page to the Main Menu -Open the `BookStoreMenuContributor` class in the `Blazor.Client` project add the following code to the end of the `ConfigureMainMenuAsync` method: +Open the `BookStoreMenuContributor` class in the {{ if UI == "Blazor"}}`Acme.BookStore.Blazor.Client`{{ else }}`Acme.BookStore.Blazor`{{ end }} project add the following code to the end of the `ConfigureMainMenuAsync` method: ````csharp context.Menu.AddItem( diff --git a/docs/en/tutorials/book-store/part-03.md b/docs/en/tutorials/book-store/part-03.md index 7665cf4354..a770d62f29 100644 --- a/docs/en/tutorials/book-store/part-03.md +++ b/docs/en/tutorials/book-store/part-03.md @@ -21,44 +21,6 @@ } ```` -## About This Tutorial - -In this tutorial series, you will build an ABP based web application named `Acme.BookStore`. This application is used to manage a list of books and their authors. It is developed using the following technologies: - -* **{{DB_Value}}** as the ORM provider. -* **{{UI_Value}}** as the UI Framework. - -This tutorial is organized as the following parts: - -- [Part 1: Creating the server side](part-01.md) -- [Part 2: The book list page](part-02.md) -- **Part 3: Creating, updating and deleting books (this part)** -- [Part 4: Integration tests](part-04.md) -- [Part 5: Authorization](part-05.md) -- [Part 6: Authors: Domain layer](part-06.md) -- [Part 7: Authors: Database Integration](part-07.md) -- [Part 8: Authors: Application Layer](part-08.md) -- [Part 9: Authors: User Interface](part-09.md) -- [Part 10: Book to Author Relation](part-10.md) - -### Download the Source Code - -This tutorial has multiple versions based on your **UI** and **Database** preferences. We've prepared a few combinations of the source code to be downloaded: - -* [MVC (Razor Pages) UI with EF Core](https://github.com/abpframework/abp-samples/tree/master/BookStore-Mvc-EfCore) -* [Blazor UI with EF Core](https://github.com/abpframework/abp-samples/tree/master/BookStore-Blazor-EfCore) -* [Angular UI with MongoDB](https://github.com/abpframework/abp-samples/tree/master/BookStore-Angular-MongoDb) - -> If you encounter the "filename too long" or "unzip" error on Windows, please see [this guide](../../kb/windows-path-too-long-fix.md). - -{{if UI == "MVC" && DB == "EF"}} - -### Video Tutorial - -This part is also recorded as a video tutorial and **published on YouTube**. - -{{end}} - {{if UI == "MVC"}} ## Creating a New Book diff --git a/docs/en/tutorials/book-store/part-04.md b/docs/en/tutorials/book-store/part-04.md index 0dc79dc75b..b529748efb 100644 --- a/docs/en/tutorials/book-store/part-04.md +++ b/docs/en/tutorials/book-store/part-04.md @@ -21,44 +21,6 @@ } ```` -## About This Tutorial - -In this tutorial series, you will build an ABP based web application named `Acme.BookStore`. This application is used to manage a list of books and their authors. It is developed using the following technologies: - -* **{{DB_Value}}** as the ORM provider. -* **{{UI_Value}}** as the UI Framework. - -This tutorial is organized as the following parts; - -- [Part 1: Creating the server side](part-01.md) -- [Part 2: The book list page](part-02.md) -- [Part 3: Creating, updating and deleting books](part-03.md) -- **Part 4: Integration tests (this part)** -- [Part 5: Authorization](part-05.md) -- [Part 6: Authors: Domain layer](part-06.md) -- [Part 7: Authors: Database Integration](part-07.md) -- [Part 8: Authors: Application Layer](part-08.md) -- [Part 9: Authors: User Interface](part-09.md) -- [Part 10: Book to Author Relation](part-10.md) - -### Download the Source Code - -This tutorial has multiple versions based on your **UI** and **Database** preferences. We've prepared a few combinations of the source code to be downloaded: - -* [MVC (Razor Pages) UI with EF Core](https://github.com/abpframework/abp-samples/tree/master/BookStore-Mvc-EfCore) -* [Blazor UI with EF Core](https://github.com/abpframework/abp-samples/tree/master/BookStore-Blazor-EfCore) -* [Angular UI with MongoDB](https://github.com/abpframework/abp-samples/tree/master/BookStore-Angular-MongoDb) - -> If you encounter the "filename too long" or "unzip" error on Windows, please see [this guide](../../kb/windows-path-too-long-fix.md). - -{{if UI == "MVC" && DB == "EF"}} - -### Video Tutorial - -This part is also recorded as a video tutorial and **published on YouTube**. - -{{end}} - ## Test Projects in the Solution This part covers the **server side** tests. There are several test projects in the solution: diff --git a/docs/en/tutorials/book-store/part-05.md b/docs/en/tutorials/book-store/part-05.md index d657997950..947eec65f0 100644 --- a/docs/en/tutorials/book-store/part-05.md +++ b/docs/en/tutorials/book-store/part-05.md @@ -21,44 +21,6 @@ } ```` -## About This Tutorial - -In this tutorial series, you will build an ABP based web application named `Acme.BookStore`. This application is used to manage a list of books and their authors. It is developed using the following technologies: - -* **{{DB_Value}}** as the ORM provider. -* **{{UI_Value}}** as the UI Framework. - -This tutorial is organized as the following parts; - -- [Part 1: Creating the server side](part-01.md) -- [Part 2: The book list page](part-02.md) -- [Part 3: Creating, updating and deleting books](part-03.md) -- [Part 4: Integration tests](part-04.md) -- **Part 5: Authorization (this part)** -- [Part 6: Authors: Domain layer](part-06.md) -- [Part 7: Authors: Database Integration](part-07.md) -- [Part 8: Authors: Application Layer](part-08.md) -- [Part 9: Authors: User Interface](part-09.md) -- [Part 10: Book to Author Relation](part-10.md) - -### Download the Source Code - -This tutorial has multiple versions based on your **UI** and **Database** preferences. We've prepared a few combinations of the source code to be downloaded: - -* [MVC (Razor Pages) UI with EF Core](https://github.com/abpframework/abp-samples/tree/master/BookStore-Mvc-EfCore) -* [Blazor UI with EF Core](https://github.com/abpframework/abp-samples/tree/master/BookStore-Blazor-EfCore) -* [Angular UI with MongoDB](https://github.com/abpframework/abp-samples/tree/master/BookStore-Angular-MongoDb) - -> If you encounter the "filename too long" or "unzip" error on Windows, please see [this guide](../../kb/windows-path-too-long-fix.md). - -{{if UI == "MVC" && DB == "EF"}} - -### Video Tutorial - -This part is also recorded as a video tutorial and **published on YouTube**. - -{{end}} - ## Permissions ABP provides an [authorization system](../../framework/fundamentals/authorization.md) based on the ASP.NET Core's [authorization infrastructure](https://docs.microsoft.com/en-us/aspnet/core/security/authorization/introduction). One major feature added on top of the standard authorization infrastructure is the **permission system** which allows to define permissions and enable/disable per role, user or client. @@ -67,7 +29,7 @@ ABP provides an [authorization system](../../framework/fundamentals/authorizatio A permission must have a unique name (a `string`). The best way is to define it as a `const`, so we can reuse the permission name. -Open the `BookStorePermissions` class inside the `Acme.BookStore.Application.Contracts` project (in the `Permissions` folder) and change the content as shown below: +Open the `BookStorePermissions` class inside the `Acme.BookStore.Application.Contracts` project (in the `Permissions` folder) and add new permission names: ````csharp namespace Acme.BookStore.Permissions; @@ -75,7 +37,11 @@ namespace Acme.BookStore.Permissions; public static class BookStorePermissions { public const string GroupName = "BookStore"; + + // other permissions... + // other permissions... + // *** ADDED a NEW NESTED CLASS *** public static class Books { public const string Default = GroupName + ".Books"; diff --git a/docs/en/tutorials/book-store/part-06.md b/docs/en/tutorials/book-store/part-06.md index d24ba5ea20..a19248ec64 100644 --- a/docs/en/tutorials/book-store/part-06.md +++ b/docs/en/tutorials/book-store/part-06.md @@ -21,36 +21,6 @@ } ```` -## About This Tutorial - -In this tutorial series, you will build an ABP based web application named `Acme.BookStore`. This application is used to manage a list of books and their authors. It is developed using the following technologies: - -* **{{DB_Value}}** as the ORM provider. -* **{{UI_Value}}** as the UI Framework. - -This tutorial is organized as the following parts; - -- [Part 1: Creating the server side](part-01.md) -- [Part 2: The book list page](part-02.md) -- [Part 3: Creating, updating and deleting books](part-03.md) -- [Part 4: Integration tests](part-04.md) -- [Part 5: Authorization](part-05.md) -- **Part 6: Authors: Domain layer (this part)** -- [Part 7: Authors: Database Integration](part-07.md) -- [Part 8: Authors: Application Layer](part-08.md) -- [Part 9: Authors: User Interface](part-09.md) -- [Part 10: Book to Author Relation](part-10.md) - -### Download the Source Code - -This tutorial has multiple versions based on your **UI** and **Database** preferences. We've prepared a few combinations of the source code to be downloaded: - -* [MVC (Razor Pages) UI with EF Core](https://github.com/abpframework/abp-samples/tree/master/BookStore-Mvc-EfCore) -* [Blazor UI with EF Core](https://github.com/abpframework/abp-samples/tree/master/BookStore-Blazor-EfCore) -* [Angular UI with MongoDB](https://github.com/abpframework/abp-samples/tree/master/BookStore-Angular-MongoDb) - -> If you encounter the "filename too long" or "unzip" error on Windows, please see [this guide](../../kb/windows-path-too-long-fix.md). - ## Introduction In the previous parts, we've used the ABP infrastructure to easily build some services; diff --git a/docs/en/tutorials/book-store/part-07.md b/docs/en/tutorials/book-store/part-07.md index a3c7e2903c..70d73da97b 100644 --- a/docs/en/tutorials/book-store/part-07.md +++ b/docs/en/tutorials/book-store/part-07.md @@ -21,36 +21,6 @@ } ```` -## About This Tutorial - -In this tutorial series, you will build an ABP based web application named `Acme.BookStore`. This application is used to manage a list of books and their authors. It is developed using the following technologies: - -* **{{DB_Value}}** as the ORM provider. -* **{{UI_Value}}** as the UI Framework. - -This tutorial is organized as the following parts; - -- [Part 1: Creating the server side](part-01.md) -- [Part 2: The book list page](part-02.md) -- [Part 3: Creating, updating and deleting books](part-03.md) -- [Part 4: Integration tests](part-04.md) -- [Part 5: Authorization](part-05.md) -- [Part 6: Authors: Domain layer](part-06.md) -- **Part 7: Authors: Database Integration (this part)** -- [Part 8: Authors: Application Layer](part-08.md) -- [Part 9: Authors: User Interface](part-09.md) -- [Part 10: Book to Author Relation](part-10.md) - -### Download the Source Code - -This tutorial has multiple versions based on your **UI** and **Database** preferences. We've prepared a few combinations of the source code to be downloaded: - -* [MVC (Razor Pages) UI with EF Core](https://github.com/abpframework/abp-samples/tree/master/BookStore-Mvc-EfCore) -* [Blazor UI with EF Core](https://github.com/abpframework/abp-samples/tree/master/BookStore-Blazor-EfCore) -* [Angular UI with MongoDB](https://github.com/abpframework/abp-samples/tree/master/BookStore-Angular-MongoDb) - -> If you encounter the "filename too long" or "unzip" error on Windows, please see [this guide](../../kb/windows-path-too-long-fix.md). - ## Introduction This part explains how to configure the database integration for the `Author` entity introduced in the previous part. diff --git a/docs/en/tutorials/book-store/part-08.md b/docs/en/tutorials/book-store/part-08.md index 3054cf3f5d..61412ba770 100644 --- a/docs/en/tutorials/book-store/part-08.md +++ b/docs/en/tutorials/book-store/part-08.md @@ -21,36 +21,6 @@ } ```` -## About This Tutorial - -In this tutorial series, you will build an ABP based web application named `Acme.BookStore`. This application is used to manage a list of books and their authors. It is developed using the following technologies: - -* **{{DB_Value}}** as the ORM provider. -* **{{UI_Value}}** as the UI Framework. - -This tutorial is organized as the following parts; - -- [Part 1: Creating the server side](part-01.md) -- [Part 2: The book list page](part-02.md) -- [Part 3: Creating, updating and deleting books](part-03.md) -- [Part 4: Integration tests](part-04.md) -- [Part 5: Authorization](part-05.md) -- [Part 6: Authors: Domain layer](part-06.md) -- [Part 7: Authors: Database Integration](part-07.md) -- **Part 8: Author: Application Layer (this part)** -- [Part 9: Authors: User Interface](part-09.md) -- [Part 10: Book to Author Relation](part-10.md) - -### Download the Source Code - -This tutorial has multiple versions based on your **UI** and **Database** preferences. We've prepared a few combinations of the source code to be downloaded: - -* [MVC (Razor Pages) UI with EF Core](https://github.com/abpframework/abp-samples/tree/master/BookStore-Mvc-EfCore) -* [Blazor UI with EF Core](https://github.com/abpframework/abp-samples/tree/master/BookStore-Blazor-EfCore) -* [Angular UI with MongoDB](https://github.com/abpframework/abp-samples/tree/master/BookStore-Angular-MongoDb) - -> If you encounter the "filename too long" or "unzip" error on Windows, please see [this guide](../../kb/windows-path-too-long-fix.md). - ## Introduction This part explains to create an application layer for the `Author` entity created before. @@ -333,7 +303,7 @@ public async Task DeleteAsync(Guid id) You can't compile the code since it is expecting some constants declared in the `BookStorePermissions` class. -Open the `BookStorePermissions` class inside the `Acme.BookStore.Application.Contracts` project (in the `Permissions` folder) and change the content as shown below: +Open the `BookStorePermissions` class inside the `Acme.BookStore.Application.Contracts` project (in the `Permissions` folder) and add new permission names: ````csharp namespace Acme.BookStore.Permissions; @@ -342,13 +312,8 @@ public static class BookStorePermissions { public const string GroupName = "BookStore"; - public static class Books - { - public const string Default = GroupName + ".Books"; - public const string Create = Default + ".Create"; - public const string Edit = Default + ".Edit"; - public const string Delete = Default + ".Delete"; - } + // other permissions... + // other permissions... // *** ADDED a NEW NESTED CLASS *** public static class Authors diff --git a/docs/en/tutorials/book-store/part-09.md b/docs/en/tutorials/book-store/part-09.md index a162f24b5a..e8e0bd328f 100644 --- a/docs/en/tutorials/book-store/part-09.md +++ b/docs/en/tutorials/book-store/part-09.md @@ -21,36 +21,6 @@ } ```` -## About This Tutorial - -In this tutorial series, you will build an ABP based web application named `Acme.BookStore`. This application is used to manage a list of books and their authors. It is developed using the following technologies: - -* **{{DB_Value}}** as the ORM provider. -* **{{UI_Value}}** as the UI Framework. - -This tutorial is organized as the following parts; - -- [Part 1: Creating the server side](part-01.md) -- [Part 2: The book list page](part-02.md) -- [Part 3: Creating, updating and deleting books](part-03.md) -- [Part 4: Integration tests](part-04.md) -- [Part 5: Authorization](part-05.md) -- [Part 6: Authors: Domain layer](part-06.md) -- [Part 7: Authors: Database Integration](part-07.md) -- [Part 8: Authors: Application Layer](part-08.md) -- **Part 9: Authors: User Interface (this part)** -- [Part 10: Book to Author Relation](Part-10.md) - -### Download the Source Code - -This tutorial has multiple versions based on your **UI** and **Database** preferences. We've prepared a few combinations of the source code to be downloaded: - -* [MVC (Razor Pages) UI with EF Core](https://github.com/abpframework/abp-samples/tree/master/BookStore-Mvc-EfCore) -* [Blazor UI with EF Core](https://github.com/abpframework/abp-samples/tree/master/BookStore-Blazor-EfCore) -* [Angular UI with MongoDB](https://github.com/abpframework/abp-samples/tree/master/BookStore-Angular-MongoDb) - -> If you encounter the "filename too long" or "unzip" error on Windows, please see [this guide](../../kb/windows-path-too-long-fix.md). - ## Introduction This part explains how to create a CRUD page for the `Author` entity introduced in the previous parts. @@ -1236,7 +1206,7 @@ Open the `BookStoreMenuContributor.cs` in the `Acme.BookStore.Blazor.Client` pro ````csharp if (await context.IsGrantedAsync(BookStorePermissions.Authors.Default)) { - bookStoreMenu.AddItem(new ApplicationMenuItem( + context.Menu.AddItem(new ApplicationMenuItem( "BooksStore.Authors", l["Menu:Authors"], url: "/authors" diff --git a/docs/en/tutorials/book-store/part-10.md b/docs/en/tutorials/book-store/part-10.md index b5b710146e..5a6acb752b 100644 --- a/docs/en/tutorials/book-store/part-10.md +++ b/docs/en/tutorials/book-store/part-10.md @@ -17,36 +17,6 @@ } ```` -## About This Tutorial - -In this tutorial series, you will build an ABP based web application named `Acme.BookStore`. This application is used to manage a list of books and their authors. It is developed using the following technologies: - -* **{{DB_Value}}** as the ORM provider. -* **{{UI_Value}}** as the UI Framework. - -This tutorial is organized as the following parts; - -- [Part 1: Creating the server side](part-01.md) -- [Part 2: The book list page](part-02.md) -- [Part 3: Creating, updating and deleting books](part-03.md) -- [Part 4: Integration tests](part-04.md) -- [Part 5: Authorization](part-05.md) -- [Part 6: Authors: Domain layer](part-06.md) -- [Part 7: Authors: Database Integration](part-07.md) -- [Part 8: Authors: Application Layer](part-08.md) -- [Part 9: Authors: User Interface](part-09.md) -- **Part 10: Book to Author Relation (this part)** - -### Download the Source Code - -This tutorial has multiple versions based on your **UI** and **Database** preferences. We've prepared a few combinations of the source code to be downloaded: - -* [MVC (Razor Pages) UI with EF Core](https://github.com/abpframework/abp-samples/tree/master/BookStore-Mvc-EfCore) -* [Blazor UI with EF Core](https://github.com/abpframework/abp-samples/tree/master/BookStore-Blazor-EfCore) -* [Angular UI with MongoDB](https://github.com/abpframework/abp-samples/tree/master/BookStore-Angular-MongoDb) - -> If you encounter the "filename too long" or "unzip" error on Windows, please see [this guide](../../kb/windows-path-too-long-fix.md). - ## Introduction We have created `Book` and `Author` functionalities for the book store application. However, currently there is no relation between these entities. diff --git a/docs/en/tutorials/index.md b/docs/en/tutorials/index.md new file mode 100644 index 0000000000..aac3abfaed --- /dev/null +++ b/docs/en/tutorials/index.md @@ -0,0 +1,6 @@ +## ABP Tutorials + +The following guides explains how to build ABP based applications: + +* [TODO Application](todo/index.md): This is a single-part, quick-start tutorial to build a simple application with ABP. Start with this tutorial if you want to quickly understand how ABP works. +* [Book Store Application](book-store/overview.md): This is a multi-part, complete tutorial to build a bookstore application with ABP. Start with this tutorial if you want to create a layered solution with ABP and apply DDD best practices. \ No newline at end of file diff --git a/docs/en/tutorials/todo/layered/index.md b/docs/en/tutorials/todo/layered/index.md index db25c826f1..b58d95a034 100644 --- a/docs/en/tutorials/todo/layered/index.md +++ b/docs/en/tutorials/todo/layered/index.md @@ -3,7 +3,7 @@ ````json //[doc-params] { - "UI": ["MVC", "Blazor", "BlazorServer", "NG"], + "UI": ["MVC", "Blazor", "BlazorServer", "BlazorWebApp" ,"NG"], "DB": ["EF", "Mongo"] } ```` @@ -53,7 +53,7 @@ This documentation has a video tutorial on **YouTube**!! You can watch it here: ## Pre-Requirements * An IDE (e.g. [Visual Studio](https://visualstudio.microsoft.com/vs/)) that supports [.NET 8.0+](https://dotnet.microsoft.com/download/dotnet) development. -* [Node v16.x](https://nodejs.org/) +* [Node v18.19+](https://nodejs.org/) {{if DB=="Mongo"}} @@ -148,6 +148,10 @@ Ensure the `TodoApp.HttpApi.Host` project is the startup project, then run the a You can explore and test your HTTP API with this UI. Now, we can set the `TodoApp.Blazor` as the startup project and run it to open the actual Blazor application UI: +{{else if UI=="BlazorWebApp" }} + +It is good to run the application before starting the development. Ensure the `TodoApp.Blazor` project is the startup project, then run the application (Ctrl+F5 in Visual Studio) to see the initial UI: + {{else if UI=="NG"}} It is good to run the application before starting the development. The solution has two main applications: @@ -252,7 +256,7 @@ You can apply changes to the database using the following command, in the same c dotnet ef database update ``` -> If you are using Visual Studio, you may want to use the `Add-Migration Added_TodoItem` and `Update-Database` commands in the *Package Manager Console (PMC)*. In this case, ensure that {{if UI=="MVC"}}`TodoApp.Web`{{else if UI=="BlazorServer"}}`TodoApp.Blazor`{{else if UI=="Blazor" || UI=="NG"}}`TodoApp.HttpApi.Host`{{end}} is the startup project and `TodoApp.EntityFrameworkCore` is the *Default Project* in PMC. +> If you are using Visual Studio, you may want to use the `Add-Migration Added_TodoItem` and `Update-Database` commands in the *Package Manager Console (PMC)*. In this case, ensure that {{if UI=="MVC"}}`TodoApp.Web`{{else if UI=="BlazorServer" || UI=="Blazor" || UI=="BlazorWebApp"}}`TodoApp.Blazor`{{else if UI=="Blazor" || UI=="NG"}}`TodoApp.HttpApi.Host`{{end}} is the startup project and `TodoApp.EntityFrameworkCore` is the *Default Project* in PMC. {{else if DB=="Mongo"}} @@ -581,11 +585,11 @@ If you open the [Swagger UI](https://swagger.io/tools/swagger-ui/) by entering t ![todo-api](../images/todo-api.png) -{{else if UI=="Blazor" || UI=="BlazorServer"}} +{{else if UI=="Blazor" || UI=="BlazorServer" || UI=="BlazorWebApp"}} ### Index.razor.cs -Open the `Index.razor.cs` file in the `Pages` folder of the *TodoApp.Blazor* project and replace the content with the following code block: +Open the `Index.razor.cs` file in the `Pages` folder of the {{if UI=="BlazorWebApp"}} *TodoApp.Blazor.Client* {{else}}*TodoApp.Blazor*{{end}} project and replace the content with the following code block: ```csharp using Microsoft.AspNetCore.Components; @@ -634,7 +638,7 @@ See the *Dynamic C# Proxies & Auto API Controllers* section below to learn how w ### Index.razor -Open the `Index.razor` file in the `Pages` folder of the *TodoApp.Blazor* project and replace the content with the following code block: +Open the `Index.razor` file in the `Pages` folder of the {{if UI=="BlazorWebApp"}} *TodoApp.Blazor.Client* {{else}} *TodoApp.Blazor* {{end}} project and replace the content with the following code block: ```xml @page "/" @@ -676,7 +680,7 @@ Open the `Index.razor` file in the `Pages` folder of the *TodoApp.Blazor* projec ### Index.razor.css -As the final touch, open the `Index.razor.css` file in the `Pages` folder of the *TodoApp.Blazor* project and replace it with the following content: +As the final touch, open the `Index.razor.css` file in the `Pages` folder of the {{if UI=="BlazorWebApp"}}*TodoApp.Blazor.Client*{{else}}*TodoApp.Blazor*{{end}} project and replace it with the following content: ```css #TodoList{ diff --git a/docs/en/tutorials/todo/single-layer/index.md b/docs/en/tutorials/todo/single-layer/index.md index 9afbbd8833..3b4f755c70 100644 --- a/docs/en/tutorials/todo/single-layer/index.md +++ b/docs/en/tutorials/todo/single-layer/index.md @@ -49,7 +49,7 @@ This documentation has a video tutorial on **YouTube**!! You can watch it here: ## Pre-Requirements * An IDE (e.g. [Visual Studio](https://visualstudio.microsoft.com/vs/)) that supports [.NET 8.0+](https://dotnet.microsoft.com/download/dotnet) development. -* [Node v16.x](https://nodejs.org/) +* [Node v18.19+](https://nodejs.org/) {{if DB=="Mongo"}} diff --git a/docs/en/ui-themes/lepton-x/angular-customization.md b/docs/en/ui-themes/lepton-x/angular-customization.md index 5c570478c2..71ee3761f2 100644 --- a/docs/en/ui-themes/lepton-x/angular-customization.md +++ b/docs/en/ui-themes/lepton-x/angular-customization.md @@ -1,4 +1,4 @@ -## Customization +# Customization ### Layouts diff --git a/docs/en/ui-themes/lepton-x/angular/how-to-add-a-new-variation-to-lepton-x-for-angular.md b/docs/en/ui-themes/lepton-x/angular/how-to-add-a-new-variation-to-lepton-x-for-angular.md index 01ea39c5ec..afea2fd228 100644 --- a/docs/en/ui-themes/lepton-x/angular/how-to-add-a-new-variation-to-lepton-x-for-angular.md +++ b/docs/en/ui-themes/lepton-x/angular/how-to-add-a-new-variation-to-lepton-x-for-angular.md @@ -1,4 +1,4 @@ -## How to Add a New Appearance to LeptonX for Angular +# How to Add a New Appearance to LeptonX for Angular LeptonX has four appearances: light, dim, dark, and system. You can add a new appearance to LeptonX for Angular. In this document, we will show you how to add a new appearance to LeptonX for Angular. ### Step 1: Creating the New Theme Definition diff --git a/docs/en/ui-themes/lepton-x/angular/how-to-change-default-theme-option.md b/docs/en/ui-themes/lepton-x/angular/how-to-change-default-theme-option.md index 961cbc461e..4b58c4b106 100644 --- a/docs/en/ui-themes/lepton-x/angular/how-to-change-default-theme-option.md +++ b/docs/en/ui-themes/lepton-x/angular/how-to-change-default-theme-option.md @@ -1,4 +1,4 @@ -## Configuring the Default Theme for LeptonX +# Configuring the Default Theme for LeptonX The LeptonX theme offers multiple appearances to suit your application's visual style. You can easily configure the default theme for your application using the ThemeLeptonXModule provided by LeptonX. ### Configuration Code diff --git a/docs/en/ui-themes/lepton-x/comparison-obsolete.md b/docs/en/ui-themes/lepton-x/comparison-obsolete.md index 2870be0a8e..e14dcfc368 100644 --- a/docs/en/ui-themes/lepton-x/comparison-obsolete.md +++ b/docs/en/ui-themes/lepton-x/comparison-obsolete.md @@ -1,4 +1,4 @@ -## Feature Set +# Feature Set ### Frontend Choices diff --git a/docs/en/ui-themes/lepton-x/index.md b/docs/en/ui-themes/lepton-x/index.md index 5fc1ee4fb1..3bfc769409 100644 --- a/docs/en/ui-themes/lepton-x/index.md +++ b/docs/en/ui-themes/lepton-x/index.md @@ -85,13 +85,13 @@ LeptonX Module doesn't define any permissions. You can use the following CLI command to download the source-code: ```bash -abp get-source Volo.Abp.LeptonXTheme.Pro +abp get-source Volo.Abp.LeptonXTheme ``` If you want to download the source code of the preview version, you can use the following command: ```bash -abp get-source Volo.Abp.LeptonXTheme.Pro --preview +abp get-source Volo.Abp.LeptonXTheme --preview ``` > You can download the source code of a certain version by using the `--version` parameter. See the [ABP CLI documentation](../../cli/index#get-source) for other possible options. diff --git a/docs/en/ui-themes/lepton-x/mvc.md b/docs/en/ui-themes/lepton-x/mvc.md index 5e7aab2b7f..4627ccb727 100644 --- a/docs/en/ui-themes/lepton-x/mvc.md +++ b/docs/en/ui-themes/lepton-x/mvc.md @@ -152,7 +152,7 @@ Commonly used components in all layouts. ![Breadcrumb](images/leptonx-breadcrumb.png) -Breadcrumbs can be customized by using the `IPageLayout` service. See [PageLayout - Breadcrumb](https://docs.abp.io/en/abp/7.2/UI%2FAspNetCore%2FPage-Header#breadcrumb) for more information. +Breadcrumbs can be customized by using the `IPageLayout` service. See [PageLayout - Breadcrumb](../../framework/ui/mvc-razor-pages/page-header.md#breadcrumb) for more information. If you need to replace the component, you can follow the steps below. @@ -166,7 +166,7 @@ If you need to replace the component, you can follow the steps below. ![Content title](images/leptonx-content-title.png) -Page Titles can be customized by using the `IPageLayout` service. See [PageLayout - Page Title](https://docs.abp.io/en/abp/7.2/UI%2FAspNetCore%2FPage-Header#page-title) for more information. +Page Titles can be customized by using the `IPageLayout` service. See [PageLayout - Page Title](../../framework/ui/mvc-razor-pages/page-header.md#page-title) for more information. If you need to replace the component, you can follow the steps below. diff --git a/framework/Volo.Abp.sln b/framework/Volo.Abp.sln index 3373a239de..19fbf05df8 100644 --- a/framework/Volo.Abp.sln +++ b/framework/Volo.Abp.sln @@ -467,6 +467,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.RemoteServices.Tes EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.AspNetCore.Abstractions", "src\Volo.Abp.AspNetCore.Abstractions\Volo.Abp.AspNetCore.Abstractions.csproj", "{E1051CD0-9262-4869-832D-B951723F4DDE}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.BlobStoring.Google", "src\Volo.Abp.BlobStoring.Google\Volo.Abp.BlobStoring.Google.csproj", "{DEEB5200-BBF9-464D-9B7E-8FC035A27E94}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.BlobStoring.Google.Tests", "test\Volo.Abp.BlobStoring.Google.Tests\Volo.Abp.BlobStoring.Google.Tests.csproj", "{40FB8907-9CF7-44D0-8B5F-538AC6DAF8B9}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -1393,6 +1397,14 @@ Global {E1051CD0-9262-4869-832D-B951723F4DDE}.Debug|Any CPU.Build.0 = Debug|Any CPU {E1051CD0-9262-4869-832D-B951723F4DDE}.Release|Any CPU.ActiveCfg = Release|Any CPU {E1051CD0-9262-4869-832D-B951723F4DDE}.Release|Any CPU.Build.0 = Release|Any CPU + {DEEB5200-BBF9-464D-9B7E-8FC035A27E94}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DEEB5200-BBF9-464D-9B7E-8FC035A27E94}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DEEB5200-BBF9-464D-9B7E-8FC035A27E94}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DEEB5200-BBF9-464D-9B7E-8FC035A27E94}.Release|Any CPU.Build.0 = Release|Any CPU + {40FB8907-9CF7-44D0-8B5F-538AC6DAF8B9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {40FB8907-9CF7-44D0-8B5F-538AC6DAF8B9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {40FB8907-9CF7-44D0-8B5F-538AC6DAF8B9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {40FB8907-9CF7-44D0-8B5F-538AC6DAF8B9}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -1628,6 +1640,8 @@ Global {DFAF8763-D1D6-4EB4-B459-20E31007FE2F} = {447C8A77-E5F0-4538-8687-7383196D04EA} {DACD4485-61BE-4DE5-ACAE-4FFABC122500} = {447C8A77-E5F0-4538-8687-7383196D04EA} {E1051CD0-9262-4869-832D-B951723F4DDE} = {5DF0E140-0513-4D0D-BE2E-3D4D85CD70E6} + {DEEB5200-BBF9-464D-9B7E-8FC035A27E94} = {5DF0E140-0513-4D0D-BE2E-3D4D85CD70E6} + {40FB8907-9CF7-44D0-8B5F-538AC6DAF8B9} = {447C8A77-E5F0-4538-8687-7383196D04EA} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {BB97ECF4-9A84-433F-A80B-2A3285BDD1D5} diff --git a/framework/src/Volo.Abp.AspNetCore.Authentication.OpenIdConnect/Microsoft/Extensions/DependencyInjection/AbpOpenIdConnectExtensions.cs b/framework/src/Volo.Abp.AspNetCore.Authentication.OpenIdConnect/Microsoft/Extensions/DependencyInjection/AbpOpenIdConnectExtensions.cs index d07cca857f..01e0dd7ae9 100644 --- a/framework/src/Volo.Abp.AspNetCore.Authentication.OpenIdConnect/Microsoft/Extensions/DependencyInjection/AbpOpenIdConnectExtensions.cs +++ b/framework/src/Volo.Abp.AspNetCore.Authentication.OpenIdConnect/Microsoft/Extensions/DependencyInjection/AbpOpenIdConnectExtensions.cs @@ -3,11 +3,15 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Authentication; using Microsoft.AspNetCore.Authentication.OAuth.Claims; using Microsoft.AspNetCore.Authentication.OpenIdConnect; +using Microsoft.AspNetCore.Localization; +using Microsoft.AspNetCore.RequestLocalization; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; using Microsoft.IdentityModel.Protocols.OpenIdConnect; +using Volo.Abp; using Volo.Abp.AspNetCore.Authentication.OpenIdConnect; using Volo.Abp.AspNetCore.MultiTenancy; +using Volo.Abp.Localization; using Volo.Abp.Security.Claims; namespace Microsoft.Extensions.DependencyInjection; @@ -52,6 +56,7 @@ public static class AbpOpenIdConnectExtensions options.Events.OnTokenValidated = async (context) => { + var logger = context.HttpContext.RequestServices.GetRequiredService>(); var client = context.HttpContext.RequestServices.GetRequiredService(); try { @@ -59,8 +64,28 @@ public static class AbpOpenIdConnectExtensions } catch (Exception ex) { - var logger = context.HttpContext.RequestServices.GetService>(); - logger?.LogException(ex); + logger.LogException(ex); + } + + var culture = context.ProtocolMessage.GetParameter("culture"); + var uiCulture = context.ProtocolMessage.GetParameter("ui-culture"); + if (CultureHelper.IsValidCultureCode(culture) && CultureHelper.IsValidCultureCode(uiCulture)) + { + context.Response.OnStarting(() => + { + logger.LogInformation($"Setting culture and ui-culture to the response. culture: {culture}, ui-culture: {uiCulture}"); + + AbpRequestCultureCookieHelper.SetCultureCookie( + context.HttpContext, + new RequestCulture(culture, uiCulture) + ); + + return Task.CompletedTask; + }); + } + else + { + logger.LogWarning($"Invalid culture or ui-culture parameter in the OpenIdConnect response. culture: {culture}, ui-culture: {uiCulture}"); } }; diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/AbpAspNetCoreMvcUiBundlingModule.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/AbpAspNetCoreMvcUiBundlingModule.cs index bdd4cb2a27..f0f7f94439 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/AbpAspNetCoreMvcUiBundlingModule.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/AbpAspNetCoreMvcUiBundlingModule.cs @@ -1,4 +1,6 @@ -ï»żusing Volo.Abp.AspNetCore.Mvc.UI.Bootstrap; +ï»żusing Volo.Abp.AspNetCore.Mvc.Libs; +using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap; +using Volo.Abp.Data; using Volo.Abp.Minify; using Volo.Abp.Modularity; @@ -11,5 +13,14 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling; )] public class AbpAspNetCoreMvcUiBundlingModule : AbpModule { - + public override void ConfigureServices(ServiceConfigurationContext context) + { + if (!context.Services.IsDataMigrationEnvironment()) + { + Configure(options => + { + options.CheckLibs = true; + }); + } + } } diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/ScriptTagHelper.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/ScriptTagHelper.cs index 452b726c96..69b4aac627 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/ScriptTagHelper.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/ScriptTagHelper.cs @@ -10,6 +10,9 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers; public class ScriptTagHelper : AbpTagHelper { protected AbpBundlingOptions Options { get; } + + [HtmlAttributeName("deferred")] + public bool? Deferred { get; set; } public ScriptTagHelper(IOptions options) { @@ -17,6 +20,16 @@ public class ScriptTagHelper : AbpTagHelper } public override void Process(TagHelperContext context, TagHelperOutput output) { + if(Deferred == true) + { + output.Attributes.Add("defer", ""); + return; + } + else if (Deferred == false) + { + return; + } + if (Options.DeferScriptsByDefault) { output.Attributes.Add("defer", ""); diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/sv.json b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/sv.json new file mode 100644 index 0000000000..66737dc8e1 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/sv.json @@ -0,0 +1,13 @@ +{ + "culture": "sv", + "texts": { + "GivenTenantIsNotExist": "Given hyresgĂ€st existerar inte: {0}", + "GivenTenantIsNotAvailable": "Angiven hyresgĂ€st Ă€r inte tillgĂ€nglig: {0}", + "Tenant": "HyresgĂ€st", + "Switch": "VĂ€xla", + "Name": "Namn", + "SwitchTenantHint": "LĂ€mna namnfĂ€ltet tomt för att vĂ€xla till vĂ€rdsidan.", + "SwitchTenant": "Byta hyresgĂ€st", + "NotSelected": "Ej vald" + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/bootstrap/dom-event-handlers.js b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/bootstrap/dom-event-handlers.js index c9f7e09c07..3199900536 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/bootstrap/dom-event-handlers.js +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/bootstrap/dom-event-handlers.js @@ -210,7 +210,7 @@ abp.dom.initializers.initializeForms(args.$el.findWithSelf('form'), true); abp.dom.initializers.initializeScript(args.$el); abp.dom.initializers.initializeAutocompleteSelects(args.$el.findWithSelf('.auto-complete-select')); - abp.dom.initializers.initializeAbpCspStyles($("link[abp-csp-style]")); + abp.dom.initializers.initializeAbpCspStyles(args.$el.findWithSelf("link[abp-csp-style]")); }); abp.dom.onNodeRemoved(function (args) { diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/date-range-picker/date-range-picker-extensions.js b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/date-range-picker/date-range-picker-extensions.js index 44615e5acd..01fe50dec3 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/date-range-picker/date-range-picker-extensions.js +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/date-range-picker/date-range-picker-extensions.js @@ -613,7 +613,7 @@ }); $input.on('show.daterangepicker', function (ev, picker) { - const today = moment(); + const today = moment().startOf('day'); if(isEmptyDate(startDate, options)){ picker.setStartDate(today); }else{ 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 7b68fca32d..379523b659 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 @@ -32,6 +32,7 @@ using Volo.Abp.AspNetCore.Mvc.DataAnnotations; using Volo.Abp.AspNetCore.Mvc.DependencyInjection; using Volo.Abp.AspNetCore.Mvc.Infrastructure; using Volo.Abp.AspNetCore.Mvc.Json; +using Volo.Abp.AspNetCore.Mvc.Libs; using Volo.Abp.AspNetCore.Mvc.Localization; using Volo.Abp.AspNetCore.VirtualFileSystem; using Volo.Abp.DependencyInjection; @@ -231,6 +232,7 @@ public class AbpAspNetCoreMvcModule : AbpModule public override void OnApplicationInitialization(ApplicationInitializationContext context) { AddApplicationParts(context); + CheckLibs(context); } private static void AddApplicationParts(ApplicationInitializationContext context) @@ -277,4 +279,9 @@ public class AbpAspNetCoreMvcModule : AbpModule partManager.ApplicationParts.AddIfNotContains(moduleAssembly); } } + + private static void CheckLibs(ApplicationInitializationContext context) + { + context.ServiceProvider.GetRequiredService().CheckLibs(context); + } } diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/AbpExceptionFilter.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/AbpExceptionFilter.cs index d2abae0902..3b60e74d78 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/AbpExceptionFilter.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/AbpExceptionFilter.cs @@ -75,10 +75,18 @@ public class AbpExceptionFilter : IAsyncExceptionFilter, IAbpFilter, ITransientD } else { - context.HttpContext.Response.Headers.Add(AbpHttpConsts.AbpErrorFormat, "true"); - context.HttpContext.Response.StatusCode = (int)context - .GetRequiredService() - .GetStatusCode(context.HttpContext, context.Exception); + if (!context.HttpContext.Response.HasStarted) + { + context.HttpContext.Response.Headers.Add(AbpHttpConsts.AbpErrorFormat, "true"); + context.HttpContext.Response.StatusCode = (int)context + .GetRequiredService() + .GetStatusCode(context.HttpContext, context.Exception); + } + else + { + var logger = context.GetService>(NullLogger.Instance)!; + logger.LogWarning("HTTP response has already started, cannot set headers and status code!"); + } context.Result = new ObjectResult(new RemoteServiceErrorResponse(remoteServiceErrorInfo)); } diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/AbpExceptionPageFilter.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/AbpExceptionPageFilter.cs index f404f52e5d..56814718b6 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/AbpExceptionPageFilter.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/AbpExceptionPageFilter.cs @@ -103,10 +103,17 @@ public class AbpExceptionPageFilter : IAsyncPageFilter, IAbpFilter, ITransientDe } else { - context.HttpContext.Response.Headers.Add(AbpHttpConsts.AbpErrorFormat, "true"); - context.HttpContext.Response.StatusCode = (int)context - .GetRequiredService() - .GetStatusCode(context.HttpContext, context.Exception!); + if (!context.HttpContext.Response.HasStarted) + { + context.HttpContext.Response.Headers.Add(AbpHttpConsts.AbpErrorFormat, "true"); + context.HttpContext.Response.StatusCode = (int)context + .GetRequiredService() + .GetStatusCode(context.HttpContext, context.Exception!); + } + else + { + logger.LogWarning("HTTP response has already started, cannot set headers and status code!"); + } context.Result = new ObjectResult(new RemoteServiceErrorResponse(remoteServiceErrorInfo)); } diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Libs/AbpMvcLibsOptions.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Libs/AbpMvcLibsOptions.cs new file mode 100644 index 0000000000..d166528a05 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Libs/AbpMvcLibsOptions.cs @@ -0,0 +1,6 @@ +namespace Volo.Abp.AspNetCore.Mvc.Libs; + +public class AbpMvcLibsOptions +{ + public bool CheckLibs { get; set; } +} diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Libs/AbpMvcLibsService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Libs/AbpMvcLibsService.cs new file mode 100644 index 0000000000..b59cbefa45 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Libs/AbpMvcLibsService.cs @@ -0,0 +1,100 @@ +using System; +using System.Linq; +using System.Net; +using System.Text; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.Http; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Options; +using Microsoft.Extensions.FileProviders; +using Volo.Abp.DependencyInjection; + +namespace Volo.Abp.AspNetCore.Mvc.Libs; + +public class AbpMvcLibsService : IAbpMvcLibsService, ITransientDependency +{ + private Task? _checkLibsTask; + + public virtual void CheckLibs(ApplicationInitializationContext context) + { + var options = context.ServiceProvider.GetRequiredService>().Value; + if (options.CheckLibs) + { + var app = context.GetApplicationBuilderOrNull(); + if (app == null) + { + var logger = context.ServiceProvider.GetRequiredService>(); + logger.LogWarning($"The {nameof(IApplicationBuilder)} is not available. The 'CheckLibs' feature is disabled!"); + return; + } + + app.Use(async (httpContext, next) => + { + if (!await CheckLibsAsyncOnceAsync(httpContext)) + { + httpContext.Response.StatusCode = (int)HttpStatusCode.InternalServerError; + httpContext.Response.ContentType = "text/html"; + await httpContext.Response.WriteAsync( + "" + + " " + + " Error - The Libs folder is missing!" + + " " + + " " + + "

⚠️ The Libs folder under the wwwroot/libs directory is empty!

" + + "

The Libs folder contains mandatory NPM Packages for running the project.

" + + "

Make sure you run the abp install-libs CLI tool command.

" + + "

For more information, check out the ABP CLI documentation

" + + " " + + "", + Encoding.UTF8 + ); + return; + } + + await next(httpContext); + }); + } + } + + protected virtual Task CheckLibsAsyncOnceAsync(HttpContext httpContext) + { + if (_checkLibsTask == null) + { + _checkLibsTask = CheckLibsAsync(httpContext); + } + + return _checkLibsTask; + } + + protected virtual Task CheckLibsAsync(HttpContext httpContext) + { + var logger = httpContext.RequestServices.GetRequiredService>(); + try + { + var webHostEnvironment = httpContext.RequestServices.GetRequiredService(); + if (webHostEnvironment.WebRootPath.IsNullOrWhiteSpace()) + { + logger.LogWarning("The 'WebRootPath' is not set! The 'CheckLibs' feature is disabled!"); + return Task.FromResult(true); + } + + var fileProvider = new PhysicalFileProvider(webHostEnvironment.WebRootPath); + var libsFolder = fileProvider.GetDirectoryContents("/libs"); + if (!libsFolder.Exists || !libsFolder.Any()) + { + logger.LogError("The 'wwwroot/libs' folder does not exist or empty!"); + return Task.FromResult(false); + } + } + catch (Exception e) + { + // In case of any exception, log it and return true to prevent crashing the application. + logger.LogError(e, "An error occurred while checking the libs folder!"); + } + + return Task.FromResult(true); + } +} diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Libs/IAbpMvcLibsService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Libs/IAbpMvcLibsService.cs new file mode 100644 index 0000000000..98a88184e8 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Libs/IAbpMvcLibsService.cs @@ -0,0 +1,6 @@ +namespace Volo.Abp.AspNetCore.Mvc.Libs; + +public interface IAbpMvcLibsService +{ + void CheckLibs(ApplicationInitializationContext context); +} diff --git a/framework/src/Volo.Abp.AspNetCore/Volo/Abp/ApplicationInitializationContextExtensions.cs b/framework/src/Volo.Abp.AspNetCore/Volo/Abp/ApplicationInitializationContextExtensions.cs index 045b293489..1f6e3c17bf 100644 --- a/framework/src/Volo.Abp.AspNetCore/Volo/Abp/ApplicationInitializationContextExtensions.cs +++ b/framework/src/Volo.Abp.AspNetCore/Volo/Abp/ApplicationInitializationContextExtensions.cs @@ -12,7 +12,14 @@ public static class ApplicationInitializationContextExtensions { public static IApplicationBuilder GetApplicationBuilder(this ApplicationInitializationContext context) { - return context.ServiceProvider.GetRequiredService>().Value!; + var applicationBuilder = context.ServiceProvider.GetRequiredService>().Value; + Check.NotNull(applicationBuilder, nameof(applicationBuilder)); + return applicationBuilder; + } + + public static IApplicationBuilder? GetApplicationBuilderOrNull(this ApplicationInitializationContext context) + { + return context.ServiceProvider.GetRequiredService>().Value; } public static IWebHostEnvironment GetEnvironment(this ApplicationInitializationContext context) diff --git a/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Security/Claims/AbpDynamicClaimsMiddleware.cs b/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Security/Claims/AbpDynamicClaimsMiddleware.cs index d2c328f2ae..b2bbb78e7b 100644 --- a/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Security/Claims/AbpDynamicClaimsMiddleware.cs +++ b/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Security/Claims/AbpDynamicClaimsMiddleware.cs @@ -2,6 +2,7 @@ using System; using System.Threading.Tasks; using Microsoft.AspNetCore.Authentication; using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Http.Features.Authentication; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; using Volo.Abp.AspNetCore.Middleware; @@ -18,9 +19,21 @@ public class AbpDynamicClaimsMiddleware : AbpMiddlewareBase, ITransientDependenc { if (context.RequestServices.GetRequiredService>().Value.IsDynamicClaimsEnabled) { - var authenticationType = context.User.Identity.AuthenticationType; - var abpClaimsPrincipalFactory = context.RequestServices.GetRequiredService(); - context.User = await abpClaimsPrincipalFactory.CreateDynamicAsync(context.User); + var authenticateResultFeature = context.Features.Get(); + var authenticationType = authenticateResultFeature?.AuthenticateResult?.Ticket?.AuthenticationScheme ?? context.User.Identity.AuthenticationType; + + if (authenticateResultFeature != null && !authenticationType.IsNullOrWhiteSpace()) + { + var abpClaimsPrincipalFactory = context.RequestServices.GetRequiredService(); + var user = await abpClaimsPrincipalFactory.CreateDynamicAsync(context.User); + + authenticateResultFeature.AuthenticateResult = AuthenticateResult.Success(new AuthenticationTicket(user, authenticationType)); + var httpAuthenticationFeature = context.Features.Get(); + if (httpAuthenticationFeature != null) + { + httpAuthenticationFeature.User = authenticateResultFeature.AuthenticateResult.Principal; + } + } if (context.User.Identity?.IsAuthenticated == false) { diff --git a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Localization/sv.json b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Localization/sv.json new file mode 100644 index 0000000000..eabdca7cd1 --- /dev/null +++ b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Localization/sv.json @@ -0,0 +1,10 @@ +{ + "culture": "sv", + "texts": { + "Volo.Authorization:010001": "Auktorisering misslyckades! Angiven policy har inte beviljats.", + "Volo.Authorization:010002": "Auktorisering misslyckades! Angiven policy har inte beviljat: {Policynamn}", + "Volo.Authorization:010003": "Auktorisering misslyckades! Given policy har inte beviljats för given resurs: {Resursnamn}", + "Volo.Authorization:010004": "Auktorisering misslyckades! Givet krav har inte beviljats för given resurs: {Resursnamn}", + "Volo.Authorization:010005": "Auktorisering misslyckades! Givet krav har inte beviljats för given resurs: {Resursnamn}" + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.BlobStoring.Google/Volo.Abp.BlobStoring.Google.csproj b/framework/src/Volo.Abp.BlobStoring.Google/Volo.Abp.BlobStoring.Google.csproj new file mode 100644 index 0000000000..073c8c1891 --- /dev/null +++ b/framework/src/Volo.Abp.BlobStoring.Google/Volo.Abp.BlobStoring.Google.csproj @@ -0,0 +1,24 @@ +ï»ż + + + + + + netstandard2.0;netstandard2.1;net8.0 + enable + Nullable + Volo.Abp.BlobStoring.Google + Volo.Abp.BlobStoring.Google + $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; + false + false + false + + + + + + + + + diff --git a/framework/src/Volo.Abp.BlobStoring.Google/Volo/Abp/BlobStoring/Google/AbpBlobStoringGoogleModule.cs b/framework/src/Volo.Abp.BlobStoring.Google/Volo/Abp/BlobStoring/Google/AbpBlobStoringGoogleModule.cs new file mode 100644 index 0000000000..f5243fda15 --- /dev/null +++ b/framework/src/Volo.Abp.BlobStoring.Google/Volo/Abp/BlobStoring/Google/AbpBlobStoringGoogleModule.cs @@ -0,0 +1,9 @@ +using Volo.Abp.Modularity; + +namespace Volo.Abp.BlobStoring.Google; + +[DependsOn(typeof(AbpBlobStoringModule))] +public class AbpBlobStoringGoogleModule : AbpModule +{ + +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.BlobStoring.Google/Volo/Abp/BlobStoring/Google/DefaultGoogleBlobNameCalculator.cs b/framework/src/Volo.Abp.BlobStoring.Google/Volo/Abp/BlobStoring/Google/DefaultGoogleBlobNameCalculator.cs new file mode 100644 index 0000000000..fec52b44d1 --- /dev/null +++ b/framework/src/Volo.Abp.BlobStoring.Google/Volo/Abp/BlobStoring/Google/DefaultGoogleBlobNameCalculator.cs @@ -0,0 +1,21 @@ +using Volo.Abp.DependencyInjection; +using Volo.Abp.MultiTenancy; + +namespace Volo.Abp.BlobStoring.Google; + +public class DefaultGoogleBlobNameCalculator : IGoogleBlobNameCalculator, ITransientDependency +{ + protected ICurrentTenant CurrentTenant { get; } + + public DefaultGoogleBlobNameCalculator(ICurrentTenant currentTenant) + { + CurrentTenant = currentTenant; + } + + public virtual string Calculate(BlobProviderArgs args) + { + return CurrentTenant.Id == null + ? $"host/{args.BlobName}" + : $"tenants/{CurrentTenant.Id.Value.ToString("D")}/{args.BlobName}"; + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.BlobStoring.Google/Volo/Abp/BlobStoring/Google/GoogleBlobContainerConfigurationExtensions.cs b/framework/src/Volo.Abp.BlobStoring.Google/Volo/Abp/BlobStoring/Google/GoogleBlobContainerConfigurationExtensions.cs new file mode 100644 index 0000000000..3c0efd4c86 --- /dev/null +++ b/framework/src/Volo.Abp.BlobStoring.Google/Volo/Abp/BlobStoring/Google/GoogleBlobContainerConfigurationExtensions.cs @@ -0,0 +1,24 @@ +using System; + +namespace Volo.Abp.BlobStoring.Google; + +public static class GoogleBlobContainerConfigurationExtensions +{ + public static GoogleBlobProviderConfiguration GetGoogleConfiguration( + this BlobContainerConfiguration containerConfiguration) + { + return new GoogleBlobProviderConfiguration(containerConfiguration); + } + + public static BlobContainerConfiguration UseGoogle( + this BlobContainerConfiguration containerConfiguration, + Action googleConfigureAction) + { + containerConfiguration.ProviderType = typeof(GoogleBlobProvider); + containerConfiguration.NamingNormalizers.TryAdd(); + + googleConfigureAction(new GoogleBlobProviderConfiguration(containerConfiguration)); + + return containerConfiguration; + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.BlobStoring.Google/Volo/Abp/BlobStoring/Google/GoogleBlobNamingNormalizer.cs b/framework/src/Volo.Abp.BlobStoring.Google/Volo/Abp/BlobStoring/Google/GoogleBlobNamingNormalizer.cs new file mode 100644 index 0000000000..8dc840d805 --- /dev/null +++ b/framework/src/Volo.Abp.BlobStoring.Google/Volo/Abp/BlobStoring/Google/GoogleBlobNamingNormalizer.cs @@ -0,0 +1,120 @@ +using System.Globalization; +using System.Text.RegularExpressions; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Localization; + +namespace Volo.Abp.BlobStoring.Google; + +public class GoogleBlobNamingNormalizer : IBlobNamingNormalizer, ITransientDependency +{ + /// + /// https://cloud.google.com/storage/docs/buckets#naming + /// + public string NormalizeContainerName(string containerName) + { + using (CultureHelper.Use(CultureInfo.InvariantCulture)) + { + // All letters in a Bucket name must be lowercase. + containerName = containerName.ToLower(); + + // Bucket names must contain 3-63 characters. Names containing dots can contain up to 222 characters, but each dot-separated component can be no longer than 63 characters. + if(containerName.Contains(".")) + { + if (containerName.Length > 222) + { + containerName = containerName.Substring(0, 222); + } + + var parts = containerName.Split('.'); + for (var i = 0; i < parts.Length; i++) + { + if (parts[i].Length > 63) + { + parts[i] = parts[i].Substring(0, 63); + } + } + + containerName = string.Join(".", parts); + } + else if (containerName.Length > 63) + { + containerName = containerName.Substring(0, 63); + } + + //Bucket names can only contain lowercase letters, numeric characters, dashes (-), underscores (_), and dots (.). Spaces are not allowed. Names containing dots require verification. + containerName = Regex.Replace(containerName, "[^a-z0-9-_.]", string.Empty); + + //Be a syntactically valid DNS name (for example, bucket..example.com is not valid because it contains two dots in a row). + containerName = Regex.Replace(containerName, "[.]{2,}", "."); + + //Bucket names cannot be represented as an IP address in dotted-decimal notation (for example, 192.168.5.4). + containerName = Regex.Replace(containerName, "^(?:(?:^|\\.)(?:2(?:5[0-5]|[0-4]\\d)|1?\\d?\\d)){4}$", string.Empty); + + //Bucket names cannot begin with the "goog" prefix. + containerName = Regex.Replace(containerName, "^goog", string.Empty); + + //Bucket names cannot contain "google" or close misspellings, such as "g00gle". + containerName = Regex.Replace(containerName, "google", string.Empty); + + //Bucket names must start and end with a number or letter. + containerName = RemoveInvalidStartEndCharacters(containerName); + + // Bucket names must be from 3 through 63 characters long. Names containing dots can contain up to 222 characters. + if (containerName.Length < 3) + { + var length = containerName.Length; + for (var i = 0; i < 3 - length; i++) + { + containerName += "0"; + } + } + + return containerName; + } + } + + protected virtual string RemoveInvalidStartEndCharacters(string containerName) + { + if (string.IsNullOrWhiteSpace(containerName)) + { + return containerName; + } + + if (!char.IsLetterOrDigit(containerName[0])) + { + containerName = containerName.Substring(1); + return RemoveInvalidStartEndCharacters(containerName); + } + + if (!char.IsLetterOrDigit(containerName[containerName.Length - 1])) + { + containerName = containerName.Substring(0, containerName.Length - 1); + return RemoveInvalidStartEndCharacters(containerName); + } + + return containerName; + } + + /// + /// https://cloud.google.com/storage/docs/objects#naming + /// + public string NormalizeBlobName(string blobName) + { + //Object names can contain any sequence of valid Unicode characters, of length 1-1024 bytes when UTF-8 encoded + if (blobName.Length > 1024) + { + blobName = blobName.Substring(0, 1024); + } + + //Object names cannot contain Carriage Return or Line Feed characters. + blobName = Regex.Replace(blobName, "[\r\n]", string.Empty); + + //Object names cannot start with .well-known/acme-challenge/. + blobName = Regex.Replace(blobName, "^\\.well-known/acme-challenge/", string.Empty); + + //Objects cannot be named . or ... + blobName = Regex.Replace(blobName, "^\\.\\.?$", string.Empty); + + return blobName; + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.BlobStoring.Google/Volo/Abp/BlobStoring/Google/GoogleBlobProvider.cs b/framework/src/Volo.Abp.BlobStoring.Google/Volo/Abp/BlobStoring/Google/GoogleBlobProvider.cs new file mode 100644 index 0000000000..cd5dc21d7f --- /dev/null +++ b/framework/src/Volo.Abp.BlobStoring.Google/Volo/Abp/BlobStoring/Google/GoogleBlobProvider.cs @@ -0,0 +1,161 @@ +using System; +using System.IO; +using System.Net; +using System.Threading.Tasks; +using Google; +using Google.Apis.Auth.OAuth2; +using Google.Cloud.Storage.V1; +using Volo.Abp.DependencyInjection; + +namespace Volo.Abp.BlobStoring.Google; + +public class GoogleBlobProvider : BlobProviderBase, ITransientDependency +{ + protected IGoogleBlobNameCalculator GoogleBlobNameCalculator { get; } + protected IBlobNormalizeNamingService BlobNormalizeNamingService { get; } + + public GoogleBlobProvider(IGoogleBlobNameCalculator googleBlobNameCalculator, IBlobNormalizeNamingService blobNormalizeNamingService) + { + GoogleBlobNameCalculator = googleBlobNameCalculator; + BlobNormalizeNamingService = blobNormalizeNamingService; + } + + public async override Task SaveAsync(BlobProviderSaveArgs args) + { + var configuration = args.Configuration.GetGoogleConfiguration(); + var storageClient = await GetStorageClientClientAsync(args); + var blobName = GoogleBlobNameCalculator.Calculate(args); + var containerName = GetContainerName(args); + + if (await BlobExistsAsync(args, blobName) && !args.OverrideExisting) + { + throw new BlobAlreadyExistsException($"Saving BLOB '{args.BlobName}' does already exists in the container '{GetContainerName(args)}'! Set {nameof(args.OverrideExisting)} if it should be overwritten."); + } + + if (configuration.CreateContainerIfNotExists) + { + await CreateContainerIfNotExists(args); + } + + await storageClient.UploadObjectAsync(containerName, blobName, contentType: "application/octet-stream", args.BlobStream); + } + + public async override Task DeleteAsync(BlobProviderDeleteArgs args) + { + var storageClient = await GetStorageClientClientAsync(args); + var blobName = GoogleBlobNameCalculator.Calculate(args); + var containerName = GetContainerName(args); + + try + { + await storageClient.DeleteObjectAsync(containerName, blobName); + } + catch (GoogleApiException e) when (e.HttpStatusCode == HttpStatusCode.NotFound) + { + return true; + } + + return true; + } + + public async override Task ExistsAsync(BlobProviderExistsArgs args) + { + var blobName = GoogleBlobNameCalculator.Calculate(args); + return await BlobExistsAsync(args, blobName); + } + + public async override Task GetOrNullAsync(BlobProviderGetArgs args) + { + var storageClient = await GetStorageClientClientAsync(args); + var blobName = GoogleBlobNameCalculator.Calculate(args); + var containerName = GetContainerName(args); + + if(!await BlobExistsAsync(args, blobName)) + { + return null; + } + + var stream = new MemoryStream(); + + await storageClient.DownloadObjectAsync(containerName, blobName, stream); + + stream.Seek(0, SeekOrigin.Begin); + + return stream; + } + + protected virtual string GetContainerName(BlobProviderArgs args) + { + var configuration = args.Configuration.GetGoogleConfiguration(); + return configuration.ContainerName.IsNullOrWhiteSpace() + ? args.ContainerName + : BlobNormalizeNamingService.NormalizeContainerName(args.Configuration, configuration.ContainerName!); + } + + protected virtual async Task BlobExistsAsync(BlobProviderArgs args, string blobName) + { + var storageClient = await GetStorageClientClientAsync(args); + if(!await ContainerExistsAsync(args, storageClient)) + { + return false; + } + + try + { + await storageClient.GetObjectAsync(GetContainerName(args), blobName); + } + catch (GoogleApiException e) when (e.HttpStatusCode == HttpStatusCode.NotFound) + { + return false; + } + + return true; + } + + protected virtual async Task CreateContainerIfNotExists(BlobProviderArgs args) + { + var storageClient = await GetStorageClientClientAsync(args); + var configuration = args.Configuration.GetGoogleConfiguration(); + if(await ContainerExistsAsync(args, storageClient)) + { + return; + } + + await storageClient.CreateBucketAsync(configuration.ProjectId, GetContainerName(args)); + } + + protected virtual async Task ContainerExistsAsync(BlobProviderArgs args, StorageClient client) + { + try + { + await client.GetBucketAsync(GetContainerName(args)); + } + catch (GoogleApiException e) when (e.HttpStatusCode == HttpStatusCode.NotFound) + { + return false; + } + + return true; + } + + protected virtual async Task GetStorageClientClientAsync(BlobProviderArgs args) + { + var configuration = args.Configuration.GetGoogleConfiguration(); + if (configuration.UseApplicationDefaultCredentials) + { + return await StorageClient.CreateAsync(); + } + + var googleCredential = GoogleCredential.FromServiceAccountCredential( + new ServiceAccountCredential( + new ServiceAccountCredential.Initializer(configuration.ClientEmail) + { + ProjectId = configuration.ProjectId, + Scopes = configuration.Scopes + } + .FromPrivateKey(configuration.PrivateKey) + )); + + return await StorageClient.CreateAsync(googleCredential); + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.BlobStoring.Google/Volo/Abp/BlobStoring/Google/GoogleBlobProviderConfiguration.cs b/framework/src/Volo.Abp.BlobStoring.Google/Volo/Abp/BlobStoring/Google/GoogleBlobProviderConfiguration.cs new file mode 100644 index 0000000000..39db24f700 --- /dev/null +++ b/framework/src/Volo.Abp.BlobStoring.Google/Volo/Abp/BlobStoring/Google/GoogleBlobProviderConfiguration.cs @@ -0,0 +1,79 @@ +using System.Collections.Generic; + +namespace Volo.Abp.BlobStoring.Google; + +public class GoogleBlobProviderConfiguration +{ + private readonly BlobContainerConfiguration _containerConfiguration; + + public GoogleBlobProviderConfiguration(BlobContainerConfiguration containerConfiguration) + { + _containerConfiguration = containerConfiguration; + } + + /// + /// Unique identifier for your project. + /// For more info see: https://cloud.google.com/resource-manager/docs/creating-managing-projects + /// + public string? ProjectId { + get => _containerConfiguration.GetConfigurationOrDefault(GoogleBlobProviderConfigurationNames.ProjectId); + set => _containerConfiguration.SetConfiguration(GoogleBlobProviderConfigurationNames.ProjectId, value); + } + + /// + /// Email address that generated by the Google Cloud. + /// + public string? ClientEmail { + get => _containerConfiguration.GetConfigurationOrDefault(GoogleBlobProviderConfigurationNames.ClientEmail); + set => _containerConfiguration.SetConfiguration(GoogleBlobProviderConfigurationNames.ClientEmail, value); + } + + /// + /// Private key that generated by Google Cloud. + /// Starts with '-----BEGIN PRIVATE KEY-----' + /// and ends with '-----END PRIVATE KEY-----' + /// + public string? PrivateKey { + get => _containerConfiguration.GetConfigurationOrDefault(GoogleBlobProviderConfigurationNames.PrivateKey); + set => _containerConfiguration.SetConfiguration(GoogleBlobProviderConfigurationNames.PrivateKey, value); + } + + /// + /// Available OAuth 2.0 scopes. + /// + public List? Scopes { + get => _containerConfiguration.GetConfigurationOrDefault(GoogleBlobProviderConfigurationNames.Scopes, new List()); + set => _containerConfiguration.SetConfiguration(GoogleBlobProviderConfigurationNames.Scopes, value); + } + + /// + /// Use the application default credentials. https://cloud.google.com/docs/authentication/provide-credentials-adc + /// Default value: false. + /// + public bool UseApplicationDefaultCredentials { + get => _containerConfiguration.GetConfigurationOrDefault(GoogleBlobProviderConfigurationNames.UseApplicationDefaultCredentials, false); + set => _containerConfiguration.SetConfiguration(GoogleBlobProviderConfigurationNames.UseApplicationDefaultCredentials, value); + } + + /// + /// The name can only contain lowercase letters, numeric characters, dashes (-), underscores (_), and dots (.). Spaces are not allowed. Names containing dots require verification. + /// Must start and end with a number or letter. + /// Must contain 3-63 characters. Names containing dots can contain up to 222 characters, but each dot-separated component can be no longer than 63 characters. + /// Cannot be represented as an IP address in dotted-decimal notation (for example, 192.168.5.4). + /// Cannot begin with the "goog" prefix. + /// Cannot contain "google" or close misspellings, such as "g00gle". + /// If this parameter is not specified, the ContainerName of the will be used. + /// + public string? ContainerName { + get => _containerConfiguration.GetConfigurationOrDefault(GoogleBlobProviderConfigurationNames.ContainerName); + set => _containerConfiguration.SetConfiguration(GoogleBlobProviderConfigurationNames.ContainerName, value); + } + + /// + /// Default value: false. + /// + public bool CreateContainerIfNotExists { + get => _containerConfiguration.GetConfigurationOrDefault(GoogleBlobProviderConfigurationNames.CreateContainerIfNotExists, false); + set => _containerConfiguration.SetConfiguration(GoogleBlobProviderConfigurationNames.CreateContainerIfNotExists, value); + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.BlobStoring.Google/Volo/Abp/BlobStoring/Google/GoogleBlobProviderConfigurationNames.cs b/framework/src/Volo.Abp.BlobStoring.Google/Volo/Abp/BlobStoring/Google/GoogleBlobProviderConfigurationNames.cs new file mode 100644 index 0000000000..c682c693c8 --- /dev/null +++ b/framework/src/Volo.Abp.BlobStoring.Google/Volo/Abp/BlobStoring/Google/GoogleBlobProviderConfigurationNames.cs @@ -0,0 +1,12 @@ +namespace Volo.Abp.BlobStoring.Google; + +public static class GoogleBlobProviderConfigurationNames +{ + public const string ProjectId = "Google.ProjectId"; + public const string ClientEmail = "Google.ClientEmail"; + public const string PrivateKey = "Google.PrivateKey"; + public const string Scopes = "Google.Scopes"; + public const string UseApplicationDefaultCredentials = "Google.ApplicationDefaultCredentials"; + public const string ContainerName = "Google.ContainerName"; + public const string CreateContainerIfNotExists = "Google.CreateContainerIfNotExists"; +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.BlobStoring.Google/Volo/Abp/BlobStoring/Google/IGoogleBlobNameCalculator.cs b/framework/src/Volo.Abp.BlobStoring.Google/Volo/Abp/BlobStoring/Google/IGoogleBlobNameCalculator.cs new file mode 100644 index 0000000000..8099c6fa8c --- /dev/null +++ b/framework/src/Volo.Abp.BlobStoring.Google/Volo/Abp/BlobStoring/Google/IGoogleBlobNameCalculator.cs @@ -0,0 +1,6 @@ +namespace Volo.Abp.BlobStoring.Google; + +public interface IGoogleBlobNameCalculator +{ + string Calculate(BlobProviderArgs args); +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Http/UrlHelpers.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Http/UrlHelpers.cs new file mode 100644 index 0000000000..30e5e81be2 --- /dev/null +++ b/framework/src/Volo.Abp.Core/Volo/Abp/Http/UrlHelpers.cs @@ -0,0 +1,28 @@ +using System; + +namespace Volo.Abp.Http; + +public static class UrlHelpers +{ + private const string WildcardSubdomain = "*."; + + public static bool IsSubdomainOf(string subdomain, string domain) + { + if (Uri.TryCreate(subdomain, UriKind.Absolute, out var subdomainUri) && + Uri.TryCreate(domain.Replace(WildcardSubdomain, string.Empty), UriKind.Absolute, out var domainUri)) + { + return domainUri == subdomainUri || IsSubdomainOf(subdomainUri, domainUri); + } + + return false; + } + + public static bool IsSubdomainOf(Uri subdomain, Uri domain) + { + return subdomain.IsAbsoluteUri + && domain.IsAbsoluteUri + && subdomain.Scheme == domain.Scheme + && subdomain.Port == domain.Port + && subdomain.Host.EndsWith($".{domain.Host}", StringComparison.Ordinal); + } +} diff --git a/framework/src/Volo.Abp.Ddd.Application.Contracts/Volo/Abp/Application/Localization/Resources/AbpDdd/sv.json b/framework/src/Volo.Abp.Ddd.Application.Contracts/Volo/Abp/Application/Localization/Resources/AbpDdd/sv.json new file mode 100644 index 0000000000..f77f85e6c9 --- /dev/null +++ b/framework/src/Volo.Abp.Ddd.Application.Contracts/Volo/Abp/Application/Localization/Resources/AbpDdd/sv.json @@ -0,0 +1,6 @@ +{ + "culture": "sv", + "texts": { + "MaxResultCountExceededExceptionMessage": "{0} kan inte vara mer Ă€n {1}! Öka {2}.{3} pĂ„ serversidan för att tillĂ„ta fler resultat." + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Localization/sv.json b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Localization/sv.json new file mode 100644 index 0000000000..f63a0177f1 --- /dev/null +++ b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Localization/sv.json @@ -0,0 +1,25 @@ +{ + "culture": "sv", + "texts": { + "DisplayName:Abp.Mailing.DefaultFromAddress": "Standard frĂ„n adress", + "DisplayName:Abp.Mailing.DefaultFromDisplayName": "Standard frĂ„n visningsnamn", + "DisplayName:Abp.Mailing.Smtp.Host": "VĂ€rd", + "DisplayName:Abp.Mailing.Smtp.Port": "Port", + "DisplayName:Abp.Mailing.Smtp.UserName": "AnvĂ€ndarens namn", + "DisplayName:Abp.Mailing.Smtp.Password": "Lösenord", + "DisplayName:Abp.Mailing.Smtp.Domain": "DomĂ€n", + "DisplayName:Abp.Mailing.Smtp.EnableSsl": "Aktivera SSL", + "DisplayName:Abp.Mailing.Smtp.UseDefaultCredentials": "AnvĂ€nda standardautentiseringsuppgifter", + "Description:Abp.Mailing.DefaultFromAddress": "Standardadressen frĂ„n", + "Description:Abp.Mailing.DefaultFromDisplayName": "Standard frĂ„n visningsnamn", + "Description:Abp.Mailing.Smtp.Host": "Namnet pĂ„ eller IP-adressen till den vĂ€rd som anvĂ€nds för SMTP-transaktioner.", + "Description:Abp.Mailing.Smtp.Port": "Den port som anvĂ€nds för SMTP-transaktioner.", + "Description:Abp.Mailing.Smtp.UserName": "AnvĂ€ndarnamn som Ă€r kopplat till autentiseringsuppgifterna.", + "Description:Abp.Mailing.Smtp.Password": "Lösenordet för det anvĂ€ndarnamn som Ă€r kopplat till autentiseringsuppgifterna.", + "Description:Abp.Mailing.Smtp.Domain": "DomĂ€n- eller datornamnet som verifierar autentiseringsuppgifterna.", + "Description:Abp.Mailing.Smtp.EnableSsl": "Om SmtpClient anvĂ€nder SSL (Secure Sockets Layer) för att kryptera anslutningen.", + "Description:Abp.Mailing.Smtp.UseDefaultCredentials": "Om DefaultCredentials skickas med förfrĂ„gningar.", + "TextTemplate:StandardEmailTemplates.Layout": "Standardmall för e-postlayout", + "TextTemplate:StandardEmailTemplates.Message": "Enkel meddelandemall för e-post" + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs index b46402e989..c471d89acf 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs @@ -282,7 +282,7 @@ public abstract class AbpDbContext : DbContext, IAbpEfCoreDbContext, finally { ChangeTracker.AutoDetectChangesEnabled = true; - AbpEfCoreNavigationHelper.Clear(); + AbpEfCoreNavigationHelper.RemoveChangedEntityEntries(); } } @@ -614,7 +614,19 @@ public abstract class AbpDbContext : DbContext, IAbpEfCoreDbContext, return; } + ExtraPropertyDictionary? originalExtraProperties = null; + if (entry.Entity is IHasExtraProperties) + { + originalExtraProperties = entry.OriginalValues.GetValue(nameof(IHasExtraProperties.ExtraProperties)); + } + entry.Reload(); + + if (entry.Entity is IHasExtraProperties) + { + ObjectHelper.TrySetProperty(entry.Entity.As(), x => x.ExtraProperties, () => originalExtraProperties); + } + ObjectHelper.TrySetProperty(entry.Entity.As(), x => x.IsDeleted, () => true); SetDeletionAuditProperties(entry); } diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ChangeTrackers/AbpEfCoreNavigationHelper.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ChangeTrackers/AbpEfCoreNavigationHelper.cs index 5a5cbe3a94..d56660be57 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ChangeTrackers/AbpEfCoreNavigationHelper.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ChangeTrackers/AbpEfCoreNavigationHelper.cs @@ -199,7 +199,12 @@ public class AbpEfCoreNavigationHelper : ITransientDependency return null; } - public void Clear() + public virtual void RemoveChangedEntityEntries() + { + EntityEntries.RemoveAll(x => x.Value.IsModified); + } + + public virtual void Clear() { EntityEntries.Clear(); } diff --git a/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/sv.json b/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/sv.json new file mode 100644 index 0000000000..614fec5984 --- /dev/null +++ b/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/sv.json @@ -0,0 +1,29 @@ +{ + "culture": "sv", + "texts": { + "InternalServerErrorMessage": "Ett internt fel uppstod under din förfrĂ„gan!", + "ValidationErrorMessage": "Din begĂ€ran Ă€r inte giltig!", + "ValidationNarrativeErrorMessageTitle": "Följande fel upptĂ€cktes under valideringen.", + "DefaultErrorMessage": "Ett fel har intrĂ€ffat!", + "DefaultErrorMessageDetail": "Felinformationen skickades inte av servern.", + "DefaultErrorMessage401": "Du Ă€r inte autentiserad!", + "DefaultErrorMessage401Detail": "Du mĂ„ste logga in för att utföra den hĂ€r Ă„tgĂ€rden.", + "DefaultErrorMessage403": "Du Ă€r inte behörig!", + "DefaultErrorMessage403Detail": "Du fĂ„r inte utföra den hĂ€r operationen!", + "DefaultErrorMessage404": "Resurs hittades inte!", + "DefaultErrorMessage404Detail": "Den begĂ€rda resursen kunde inte hittas pĂ„ servern!", + "EntityNotFoundErrorMessage": "Det finns ingen entitet {0} med id = {1}!", + "AbpDbConcurrencyErrorMessage": "De uppgifter du har skickat har redan Ă€ndrats av en annan anvĂ€ndare. Kassera dina Ă€ndringar och försök igen.", + "Error": "Fel", + "UnhandledException": "Obehandlat undantag!", + "401Message": "Obehörig", + "403Message": "Förbjudet", + "404Message": "Sidan hittades inte", + "500Message": "Internt serverfel", + "403MessageDetail": "Du Ă€r inte behörig att utföra denna operation!", + "404MessageDetail": "TyvĂ€rr, det finns inget pĂ„ den hĂ€r adressen.", + "Unauthorized": "Obehörig", + "invalid_token": "Ogiltig token", + "SessionExpired": "Din session har löpt ut. VĂ€nligen logga in igen för att fortsĂ€tta i applikationen." + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Features/Volo/Abp/Features/Localization/sv.json b/framework/src/Volo.Abp.Features/Volo/Abp/Features/Localization/sv.json new file mode 100644 index 0000000000..1a9265526b --- /dev/null +++ b/framework/src/Volo.Abp.Features/Volo/Abp/Features/Localization/sv.json @@ -0,0 +1,8 @@ +{ + "culture": "sv", + "texts": { + "Volo.Feature:010001": "Funktionen Ă€r inte aktiverad: {Funktionsnamn}", + "Volo.Feature:010002": "Obligatoriska funktioner Ă€r inte aktiverade. Alla dessa funktioner mĂ„ste vara aktiverade: {Funktionsnamn}", + "Volo.Feature:010003": "NödvĂ€ndiga funktioner Ă€r inte aktiverade. Åtminstone en av dessa funktioner mĂ„ste vara aktiverad: {Funktionsnamn}" + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.GlobalFeatures/Volo/Abp/GlobalFeatures/Localization/sv.json b/framework/src/Volo.Abp.GlobalFeatures/Volo/Abp/GlobalFeatures/Localization/sv.json new file mode 100644 index 0000000000..1a40be4b57 --- /dev/null +++ b/framework/src/Volo.Abp.GlobalFeatures/Volo/Abp/GlobalFeatures/Localization/sv.json @@ -0,0 +1,6 @@ +{ + "culture": "sv", + "texts": { + "Volo.GlobalFeature:010001": "TjĂ€nsten '{ServiceName}' mĂ„ste aktivera funktionen '{GlobalFeatureName}'." + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Ldap.Abstractions/Volo/Abp/Ldap/Localization/sv.json b/framework/src/Volo.Abp.Ldap.Abstractions/Volo/Abp/Ldap/Localization/sv.json new file mode 100644 index 0000000000..975d036490 --- /dev/null +++ b/framework/src/Volo.Abp.Ldap.Abstractions/Volo/Abp/Ldap/Localization/sv.json @@ -0,0 +1,19 @@ +{ + "culture": "sv", + "texts": { + "DisplayName:Abp.Ldap.Ldaps": "LDAP över SSL", + "Description:Abp.Ldap.Ldaps": "LDAP över SSL", + "DisplayName:Abp.Ldap.ServerHost": "ServervĂ€rd", + "Description:Abp.Ldap.ServerHost": "ServervĂ€rd", + "DisplayName:Abp.Ldap.ServerPort": "Serverport", + "Description:Abp.Ldap.ServerPort": "Serverport", + "DisplayName:Abp.Ldap.BaseDc": "Komponent för basdomĂ€n", + "Description:Abp.Ldap.BaseDc": "Komponent för basdomĂ€n", + "DisplayName:Abp.Ldap.Domain": "DomĂ€n", + "Description:Abp.Ldap.Domain": "DomĂ€n", + "DisplayName:Abp.Ldap.UserName": "AnvĂ€ndarnamn", + "Description:Abp.Ldap.UserName": "AnvĂ€ndarnamn", + "DisplayName:Abp.Ldap.Password": "Lösenord", + "Description:Abp.Ldap.Password": "Lösenord" + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Resources/AbpLocalization/sv.json b/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Resources/AbpLocalization/sv.json new file mode 100644 index 0000000000..684d38ee86 --- /dev/null +++ b/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Resources/AbpLocalization/sv.json @@ -0,0 +1,7 @@ +{ + "culture": "sv", + "texts": { + "DisplayName:Abp.Localization.DefaultLanguage": "StandardsprĂ„k", + "Description:Abp.Localization.DefaultLanguage": "StandardsprĂ„ket för programmet." + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/Localization/sv.json b/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/Localization/sv.json new file mode 100644 index 0000000000..e7f2743f71 --- /dev/null +++ b/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/Localization/sv.json @@ -0,0 +1,9 @@ +{ + "culture": "sv", + "texts": { + "TenantNotFoundMessage": "HyresgĂ€st inte hittad!", + "TenantNotFoundDetails": "Det finns ingen hyresgĂ€st med hyresgĂ€st-ID eller namn: {0}", + "TenantNotActiveMessage": "HyresgĂ€sten Ă€r inte aktiv!", + "TenantNotActiveDetails": "HyresgĂ€sten Ă€r inte aktiv med hyresgĂ€st-ID eller namn: {0}" + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/VirtualFiles/LocalizedTemplateContentReaderFactory.cs b/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/VirtualFiles/LocalizedTemplateContentReaderFactory.cs index e0ca815003..001717eb11 100644 --- a/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/VirtualFiles/LocalizedTemplateContentReaderFactory.cs +++ b/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/VirtualFiles/LocalizedTemplateContentReaderFactory.cs @@ -13,16 +13,23 @@ public class LocalizedTemplateContentReaderFactory : ILocalizedTemplateContentRe protected IVirtualFileProvider VirtualFileProvider { get; } protected ConcurrentDictionary ReaderCache { get; } protected SemaphoreSlim SyncObj; + protected IAbpHostEnvironment AbpHostEnvironment { get; } - public LocalizedTemplateContentReaderFactory(IVirtualFileProvider virtualFileProvider) + public LocalizedTemplateContentReaderFactory(IVirtualFileProvider virtualFileProvider, IAbpHostEnvironment abpHostEnvironment) { VirtualFileProvider = virtualFileProvider; + AbpHostEnvironment = abpHostEnvironment; ReaderCache = new ConcurrentDictionary(); SyncObj = new SemaphoreSlim(1, 1); } public virtual async Task CreateAsync(TemplateDefinition templateDefinition) { + if (AbpHostEnvironment.IsDevelopment()) + { + return await CreateInternalAsync(templateDefinition); + } + if (ReaderCache.TryGetValue(templateDefinition.Name, out var reader)) { return reader; diff --git a/framework/src/Volo.Abp.Timing/Volo/Abp/Timing/Localization/sv.json b/framework/src/Volo.Abp.Timing/Volo/Abp/Timing/Localization/sv.json new file mode 100644 index 0000000000..c98fdf4ed5 --- /dev/null +++ b/framework/src/Volo.Abp.Timing/Volo/Abp/Timing/Localization/sv.json @@ -0,0 +1,7 @@ +{ + "culture": "sv", + "texts": { + "DisplayName:Abp.Timing.Timezone": "Tidszon", + "Description:Abp.Timing.Timezone": "Tidszon för tillĂ€mpning" + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/Localization/Resource/sv.json b/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/Localization/Resource/sv.json new file mode 100644 index 0000000000..c63b74a9c7 --- /dev/null +++ b/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/Localization/Resource/sv.json @@ -0,0 +1,6 @@ +{ + "culture": "sv", + "texts": { + "Menu:Administration": "Administration" + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/Urls/AppUrlProvider.cs b/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/Urls/AppUrlProvider.cs index e7b113c8b5..2991e84331 100644 --- a/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/Urls/AppUrlProvider.cs +++ b/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/Urls/AppUrlProvider.cs @@ -7,6 +7,7 @@ using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging.Abstractions; using Microsoft.Extensions.Options; using Volo.Abp.DependencyInjection; +using Volo.Abp.Http; using Volo.Abp.MultiTenancy; namespace Volo.Abp.UI.Navigation.Urls; @@ -43,7 +44,8 @@ public class AppUrlProvider : IAppUrlProvider, ITransientDependency { redirectAllowedUrls.Add((await NormalizeUrlAsync(redirectAllowedUrl))!); } - var allow = redirectAllowedUrls.Any(x => url.StartsWith(x, StringComparison.CurrentCultureIgnoreCase)); + var allow = redirectAllowedUrls.Any(x => url.StartsWith(x, StringComparison.CurrentCultureIgnoreCase) || + UrlHelpers.IsSubdomainOf(url, x)); if (!allow) { Logger.LogError($"Invalid RedirectUrl: {url}, Use {nameof(AppUrlProvider)} to configure it!"); diff --git a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/sv.json b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/sv.json new file mode 100644 index 0000000000..40aaa0073f --- /dev/null +++ b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/sv.json @@ -0,0 +1,64 @@ +{ + "culture": "sv", + "texts": { + "Languages": "SprĂ„k", + "AreYouSure": "Är du sĂ€ker?", + "Cancel": "Avbryt", + "Clear": "Klart", + "Yes": "Ja", + "No": "Nej", + "Ok": "Ok", + "Close": "NĂ€ra", + "Save": "Spara", + "SavingWithThreeDot": "Sparar...", + "Actions": "ÅtgĂ€rder", + "Delete": "Radera", + "CreatedSuccessfully": "Skapades framgĂ„ngsrikt", + "SavedSuccessfully": "Sparades framgĂ„ngsrikt", + "DeletedSuccessfully": "Raderad framgĂ„ngsrikt", + "Edit": "Redigera", + "Refresh": "Uppdatera", + "Language": "SprĂ„k", + "LoadMore": "Ladda mer", + "ProcessingWithThreeDot": "Bearbetning...", + "LoadingWithThreeDot": "Laddar...", + "Welcome": "VĂ€lkommen", + "Login": "Logga in", + "Register": "Registrera", + "Logout": "Logga ut", + "Submit": "Skicka in", + "Back": "Tillbaka", + "PagerSearch": "Sök", + "PagerNext": "NĂ€sta", + "PagerPrevious": "FöregĂ„ende", + "PagerFirst": "Första", + "PagerLast": "Sista", + "PagerInfo": "Visar _START_ till _Slut_ av _TOTAL_ poster", + "PagerInfo{0}{1}{2}": "Visar {0} till {1} av {2} poster", + "PagerInfoEmpty": "Visar 0 till 0 av 0 poster", + "PagerInfoFiltered": "(filtrerat frĂ„n _MAX_ totala poster)", + "NoDataAvailableInDatatable": "Inga uppgifter tillgĂ€ngliga", + "Total": "totalt", + "Selected": "utvalda", + "PagerShowMenuEntries": "Visa _MENY_-poster", + "DatatableActionDropdownDefaultText": "ÅtgĂ€rder", + "ChangePassword": "Ändra lösenord", + "PersonalInfo": "Min profil", + "AreYouSureYouWantToCancelEditingWarningMessage": "Du har förĂ€ndringar som inte Ă€r frĂ€lsta.", + "GoHomePage": "GĂ„ till startsidan", + "GoBack": "GĂ„ tillbaka", + "Search": "Sök", + "ItemWillBeDeletedMessageWithFormat": "{0} kommer att raderas!", + "ItemWillBeDeletedMessage": "Denna artikel kommer att raderas!", + "ManageYourAccount": "Hantera ditt konto", + "OthersGroup": "Övriga", + "Today": "Idag", + "Apply": "TillĂ€mpa", + "InternetConnectionInfo": "ÅtgĂ€rden kunde inte utföras. Din internetanslutning Ă€r inte tillgĂ€nglig för tillfĂ€llet.", + "CopiedToTheClipboard": "Kopieras till urklipp", + "AddNew": "LĂ€gg till ny", + "ProfilePicture": "Profilbild", + "Theme": "Tema", + "NotAssigned": "Ej tilldelad" + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/es.json b/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/es.json index 9ecba92ca0..77937eab9f 100644 --- a/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/es.json +++ b/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/es.json @@ -8,7 +8,7 @@ "The {0} field only accepts files with the following extensions: {1}": "El campo {0} sĂłlo acepta ficheros con la siguientes extensiones: {1}", "The field {0} must be a string or array type with a maximum length of '{1}'.": "El campo {0} debe ser de tipo cadena o lista con una longitud mĂĄxima de '{1}'.", "The field {0} must be a string or array type with a minimum length of '{1}'.": "El campo {0} debe ser de tipo cadena o lista con una longitud mĂĄxima de '{1}'.", - "The {0} field is not a valid phone number.": "El campo no tiene un nĂșmero de telĂ©fono valido.", + "The {0} field is not a valid phone number.": "El campo {0} no tiene un nĂșmero de telĂ©fono valido.", "The field {0} must be between {1} and {2}.": "El campo {0} debe estar entre {1} y {2}.", "The field {0} must match the regular expression '{1}'.": "El campo {0} no coincide con el formato solicitado.", "The {0} field is required.": "El campo {0} es requerido.", @@ -23,17 +23,17 @@ "ThisFieldIsNotValid.": "Este campo no es valido.", "ThisFieldIsNotAValidEmailAddress.": "Este campo no es una direcciĂłn de e-mail valida.", "ThisFieldOnlyAcceptsFilesWithTheFollowingExtensions:{0}": "Este campo sĂłlo acepta ficheros con las siguientes extensiones: {0}", - "ThisFieldMustBeAStringOrArrayTypeWithAMaximumLengthOf{0}": "Este campo debe ser una cadena o lista con una longitud mĂĄxima de {1}.", - "ThisFieldMustBeAStringOrArrayTypeWithAMinimumLengthOf{0}": "Este campo debe ser una cadena o lista con una longitud mĂ­nima de {1}.", + "ThisFieldMustBeAStringOrArrayTypeWithAMaximumLengthOf{0}": "Este campo debe ser una cadena o lista con una longitud mĂĄxima de {0}.", + "ThisFieldMustBeAStringOrArrayTypeWithAMinimumLengthOf{0}": "Este campo debe ser una cadena o lista con una longitud mĂ­nima de {0}.", "ThisFieldIsNotAValidPhoneNumber.": "Este campo no es un nĂșmero de telĂ©fono valido.", "ThisFieldMustBeBetween{0}And{1}": "Este campo debe estar entre {0} y {1}.", "ThisFieldMustBeGreaterThanOrEqual{0}": "Este campo debe ser mayor o igual a {0}.", "ThisFieldMustBeLessOrEqual{0}": "Este campo debe ser menor o igual a {0}.", "ThisFieldMustMatchTheRegularExpression{0}": "Este campo debe coincidir con la expresiĂłn regular '{0}'.", "ThisFieldIsRequired.": "Este campo es requerido", - "ThisFieldMustBeAStringWithAMaximumLengthOf{0}": "Este campo debe ser una cadena con una longitud mĂĄxima de {1}.", - "ThisFieldMustBeAStringWithAMinimumLengthOf{1}AndAMaximumLengthOf{0}": "Este campo debe ser una cadena con una longitud mĂ­nima de {2} y mĂĄxima de {1}.", - "ThisFieldIsNotAValidFullyQualifiedHttpHttpsOrFtpUrl": "El campo {0} no es una URL (http, https o ftp) valida.", - "ThisFieldIsInvalid.": "Este en un campo no valido." + "ThisFieldMustBeAStringWithAMaximumLengthOf{0}": "Este campo debe ser una cadena con una longitud mĂĄxima de {0}.", + "ThisFieldMustBeAStringWithAMinimumLengthOf{1}AndAMaximumLengthOf{0}": "Este campo debe ser una cadena con una longitud mĂ­nima de {1} y mĂĄxima de {0}.", + "ThisFieldIsNotAValidFullyQualifiedHttpHttpsOrFtpUrl": "El campo no es una URL (http, https o ftp) valida.", + "ThisFieldIsInvalid.": "Este campo no es vĂĄlido." } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/sv.json b/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/sv.json new file mode 100644 index 0000000000..c751837429 --- /dev/null +++ b/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/sv.json @@ -0,0 +1,39 @@ +{ + "culture": "sv", + "texts": { + "'{0}' and '{1}' do not match.": "'{0}' och '{1}' matchar inte varandra.", + "The {0} field is not a valid credit card number.": "FĂ€ltet {0} Ă€r inte ett giltigt kreditkortsnummer.", + "{0} is not valid.": "{0} Ă€r inte giltig.", + "The {0} field is not a valid e-mail address.": "FĂ€ltet {0} Ă€r inte en giltig e-postadress.", + "The {0} field only accepts files with the following extensions: {1}": "FĂ€ltet {0} accepterar endast filer med följande tillĂ€gg: {1}", + "The field {0} must be a string or array type with a maximum length of '{1}'.": "FĂ€ltet {0} mĂ„ste vara en strĂ€ng eller en matris med en maximal lĂ€ngd av '{1}'.", + "The field {0} must be a string or array type with a minimum length of '{1}'.": "FĂ€ltet {0} mĂ„ste vara en strĂ€ng eller en matris med en minsta lĂ€ngd av '{1}'.", + "The {0} field is not a valid phone number.": "FĂ€ltet {0} Ă€r inte ett giltigt telefonnummer.", + "The field {0} must be between {1} and {2}.": "FĂ€ltet {0} mĂ„ste ligga mellan {1} och {2}.", + "The field {0} must match the regular expression '{1}'.": "FĂ€ltet {0} överensstĂ€mmer inte med det begĂ€rda formatet.", + "The {0} field is required.": "FĂ€ltet {0} Ă€r obligatoriskt.", + "The field {0} must be a string with a maximum length of {1}.": "FĂ€ltet {0} mĂ„ste vara en strĂ€ng med en maximal lĂ€ngd av {1}.", + "The field {0} must be a string with a minimum length of {2} and a maximum length of {1}.": "FĂ€ltet {0} mĂ„ste vara en strĂ€ng med en minsta lĂ€ngd av {2} och en största lĂ€ngd av {1}.", + "The {0} field is not a valid fully-qualified http, https, or ftp URL.": "FĂ€ltet {0} Ă€r inte en giltig fullstĂ€ndigt kvalificerad http-, https- eller ftp-URL.", + "The field {0} is invalid.": "FĂ€ltet {0} Ă€r ogiltigt.", + "The value '{0}' is invalid.": "VĂ€rdet '{0}' Ă€r ogiltigt.", + "The field {0} must be a number.": "FĂ€ltet {0} mĂ„ste vara ett tal.", + "The field must be a number.": "FĂ€ltet mĂ„ste vara ett nummer.", + "ThisFieldIsNotAValidCreditCardNumber.": "Detta fĂ€lt Ă€r inte ett giltigt kreditkortsnummer.", + "ThisFieldIsNotValid.": "Detta fĂ€lt Ă€r inte giltigt.", + "ThisFieldIsNotAValidEmailAddress.": "Detta fĂ€lt Ă€r inte en giltig e-postadress.", + "ThisFieldOnlyAcceptsFilesWithTheFollowingExtensions:{0}": "Detta fĂ€lt accepterar endast filer med följande tillĂ€gg: {0}", + "ThisFieldMustBeAStringOrArrayTypeWithAMaximumLengthOf{0}": "Detta fĂ€lt mĂ„ste vara en strĂ€ng eller en matris med en maximal lĂ€ngd pĂ„ '{0}'.", + "ThisFieldMustBeAStringOrArrayTypeWithAMinimumLengthOf{0}": "Detta fĂ€lt mĂ„ste vara en strĂ€ng eller en matris med en minsta lĂ€ngd av \"{0}\".", + "ThisFieldIsNotAValidPhoneNumber.": "Det hĂ€r fĂ€ltet Ă€r inte ett giltigt telefonnummer.", + "ThisFieldMustBeBetween{0}And{1}": "Detta fĂ€lt mĂ„ste vara mellan {0} och {1}.", + "ThisFieldMustBeGreaterThanOrEqual{0}": "Detta fĂ€lt mĂ„ste vara större Ă€n eller lika med {0}.", + "ThisFieldMustBeLessOrEqual{0}": "Detta fĂ€lt mĂ„ste vara mindre Ă€n eller lika med {0}.", + "ThisFieldMustMatchTheRegularExpression{0}": "Detta fĂ€lt mĂ„ste matcha det reguljĂ€ra uttrycket \"{0}\".", + "ThisFieldIsRequired.": "Detta fĂ€lt Ă€r obligatoriskt.", + "ThisFieldMustBeAStringWithAMaximumLengthOf{0}": "Detta fĂ€lt mĂ„ste vara en strĂ€ng med en maximal lĂ€ngd av {0}.", + "ThisFieldMustBeAStringWithAMinimumLengthOf{1}AndAMaximumLengthOf{0}": "Detta fĂ€lt mĂ„ste vara en strĂ€ng med en minsta lĂ€ngd av {1} och en största lĂ€ngd av {0}.", + "ThisFieldIsNotAValidFullyQualifiedHttpHttpsOrFtpUrl": "Det hĂ€r fĂ€ltet Ă€r inte en giltig fullstĂ€ndigt kvalificerad http-, https- eller ftp-URL.", + "ThisFieldIsInvalid.": "Detta fĂ€lt Ă€r ogiltigt." + } +} \ No newline at end of file diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcTestModule.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcTestModule.cs index 027403d226..0e13746d66 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcTestModule.cs +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcTestModule.cs @@ -8,6 +8,7 @@ using Microsoft.AspNetCore.Mvc.RazorPages; using Microsoft.Extensions.DependencyInjection; using Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations; using Volo.Abp.AspNetCore.Mvc.GlobalFeatures; +using Volo.Abp.AspNetCore.Mvc.Libs; using Volo.Abp.AspNetCore.Mvc.Localization; using Volo.Abp.AspNetCore.Mvc.Localization.Resource; using Volo.Abp.AspNetCore.Security.Claims; @@ -140,6 +141,11 @@ public class AbpAspNetCoreMvcTestModule : AbpModule }); context.Services.TransformAbpClaims(); + + Configure(options => + { + options.CheckLibs = false; + }); } public override void OnApplicationInitialization(ApplicationInitializationContext context) diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Localization/Resource/sv.json b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Localization/Resource/sv.json new file mode 100644 index 0000000000..8110f67e01 --- /dev/null +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Localization/Resource/sv.json @@ -0,0 +1,10 @@ +{ + "culture": "sv", + "texts": { + "DisplayName:PersonModel:BirthDate1": "Födelsedatum1", + "DisplayName:BirthDate2": "Födelsedatum2", + "PersonModel:BirthDate3": "Födelsedatum3", + "BirthDate": "Födelsedatum", + "Value1": "VĂ€rde ett" + } +} \ No newline at end of file diff --git a/framework/test/Volo.Abp.BlobStoring.Google.Tests/Volo.Abp.BlobStoring.Google.Tests.csproj b/framework/test/Volo.Abp.BlobStoring.Google.Tests/Volo.Abp.BlobStoring.Google.Tests.csproj new file mode 100644 index 0000000000..a36e26fade --- /dev/null +++ b/framework/test/Volo.Abp.BlobStoring.Google.Tests/Volo.Abp.BlobStoring.Google.Tests.csproj @@ -0,0 +1,19 @@ +ï»ż + + + + + net8.0 + + 9f0d2c00-80c1-435b-bfab-2c39c8249091 + + + + + + + + + + + diff --git a/framework/test/Volo.Abp.BlobStoring.Google.Tests/Volo/Abp/BlobStoring/Google/AbpBlobStoringGoogleTestBase.cs b/framework/test/Volo.Abp.BlobStoring.Google.Tests/Volo/Abp/BlobStoring/Google/AbpBlobStoringGoogleTestBase.cs new file mode 100644 index 0000000000..709590f6ed --- /dev/null +++ b/framework/test/Volo.Abp.BlobStoring.Google.Tests/Volo/Abp/BlobStoring/Google/AbpBlobStoringGoogleTestBase.cs @@ -0,0 +1,19 @@ +using Volo.Abp.Testing; + +namespace Volo.Abp.BlobStoring.Google; + +public class AbpBlobStoringGoogleTestCommonBase : AbpIntegratedTest +{ + protected override void SetAbpApplicationCreationOptions(AbpApplicationCreationOptions options) + { + options.UseAutofac(); + } +} + +public class AbpBlobStoringGoogleTestBase : AbpIntegratedTest +{ + protected override void SetAbpApplicationCreationOptions(AbpApplicationCreationOptions options) + { + options.UseAutofac(); + } +} diff --git a/framework/test/Volo.Abp.BlobStoring.Google.Tests/Volo/Abp/BlobStoring/Google/AbpBlobStoringGoogleTestModule.cs b/framework/test/Volo.Abp.BlobStoring.Google.Tests/Volo/Abp/BlobStoring/Google/AbpBlobStoringGoogleTestModule.cs new file mode 100644 index 0000000000..36a100a191 --- /dev/null +++ b/framework/test/Volo.Abp.BlobStoring.Google.Tests/Volo/Abp/BlobStoring/Google/AbpBlobStoringGoogleTestModule.cs @@ -0,0 +1,90 @@ +using System; +using System.Threading.Tasks; +using Google.Apis.Auth.OAuth2; +using Google.Cloud.Storage.V1; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.Modularity; + +namespace Volo.Abp.BlobStoring.Google; + + +/// +/// This module will not try to connect to Google Cloud Storage. +/// +[DependsOn( + typeof(AbpBlobStoringGoogleModule), + typeof(AbpBlobStoringTestModule) +)] +public class AbpBlobStoringGoogleTestCommonModule : AbpModule +{ + +} + +[DependsOn( + typeof(AbpBlobStoringGoogleTestCommonModule) +)] +public class AbpBlobStoringGoogleTestModule : AbpModule +{ + private const string UserSecretsId = "9f0d2c00-80c1-435b-bfab-2c39c8249091"; + + private string _clientEmail; + private string _projectId; + private string _privateKey; + + private readonly string _randomContainerName = "abp-test-container-" + Guid.NewGuid().ToString("N"); + + public override void ConfigureServices(ServiceConfigurationContext context) + { + context.Services.ReplaceConfiguration(ConfigurationHelper.BuildConfiguration(builderAction: builder => + { + builder.AddUserSecrets(UserSecretsId); + })); + + var configuration = context.Services.GetConfiguration(); + _clientEmail = configuration["Google:ClientEmail"]; + _projectId = configuration["Google:ProjectId"]; + _privateKey = configuration["Google:PrivateKey"]; + + Configure(options => + { + options.Containers.ConfigureAll((containerName, containerConfiguration) => + { + containerConfiguration.UseGoogle(google => + { + google.ClientEmail = _clientEmail; + google.ProjectId = _projectId; + google.PrivateKey = _privateKey; + google.ContainerName = _randomContainerName; + google.CreateContainerIfNotExists = true; + }); + }); + }); + } + + public override void OnApplicationShutdown(ApplicationShutdownContext context) + { + var googleCredential = GoogleCredential.FromServiceAccountCredential( + new ServiceAccountCredential( + new ServiceAccountCredential.Initializer(_clientEmail) + { + ProjectId = _projectId + } + .FromPrivateKey(_privateKey) + )); + + var client = StorageClient.Create(googleCredential); + + try + { + client.DeleteBucket(_randomContainerName, new DeleteBucketOptions + { + DeleteObjects = true + }); + } + catch (Exception e) + { + // ignored + } + } +} \ No newline at end of file diff --git a/framework/test/Volo.Abp.BlobStoring.Google.Tests/Volo/Abp/BlobStoring/Google/DefaultGoogleBlobNamingNormalizerProvider_Tests.cs b/framework/test/Volo.Abp.BlobStoring.Google.Tests/Volo/Abp/BlobStoring/Google/DefaultGoogleBlobNamingNormalizerProvider_Tests.cs new file mode 100644 index 0000000000..cfe43f8bcf --- /dev/null +++ b/framework/test/Volo.Abp.BlobStoring.Google.Tests/Volo/Abp/BlobStoring/Google/DefaultGoogleBlobNamingNormalizerProvider_Tests.cs @@ -0,0 +1,94 @@ +using Shouldly; +using Xunit; + +namespace Volo.Abp.BlobStoring.Google; + +public class DefaultGoogleBlobNamingNormalizerProvider_Tests: AbpBlobStoringGoogleTestCommonBase +{ + private readonly IBlobNamingNormalizer _blobNamingNormalizer; + + public DefaultGoogleBlobNamingNormalizerProvider_Tests() + { + _blobNamingNormalizer = GetRequiredService(); + } + + [Fact] + public void NormalizeContainerName_Lowercase() + { + var filename = "ThisIsMyContainerName"; + filename = _blobNamingNormalizer.NormalizeContainerName(filename); + filename.ShouldBe("thisismycontainername"); + } + + [Fact] + public void NormalizeContainerName_Only_Letters_Numbers_Dash_Dots_Underscores() + { + var filename = ",./this-i,/s-my-c,/ont,/ai+*/=!@#$n^&*er.name+/"; + filename = _blobNamingNormalizer.NormalizeContainerName(filename); + filename.ShouldBe("this-is-my-container.name"); + } + + [Fact] + public void NormalizeContainerName_Only_Start_With_Letters_Or_Numbers() + { + var filename = "-this.--is-.-.-my--_container---name-"; + filename = _blobNamingNormalizer.NormalizeContainerName(filename); + filename.ShouldBe("this.--is-.-.-my--_container---name"); + + filename = ".this.--is-.-.-my--container---name0._"; + filename = _blobNamingNormalizer.NormalizeContainerName(filename); + filename.ShouldBe("this.--is-.-.-my--container---name0"); + } + + [Fact] + public void NormalizeContainerName_Min_Length() + { + var filename = "a"; + filename = _blobNamingNormalizer.NormalizeContainerName(filename); + filename.Length.ShouldBeGreaterThanOrEqualTo(3); + } + + [Fact] + public void NormalizeContainerName_Max_Length() + { + var filename = "abpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabp"; + filename = _blobNamingNormalizer.NormalizeContainerName(filename); + filename.Length.ShouldBeLessThanOrEqualTo(63); + } + + [Fact] + public void NormalizeContainerName_Must_Not_Be_Ip_Address() + { + var filename = "192.168.5.4"; + filename = _blobNamingNormalizer.NormalizeContainerName(filename); + filename.ShouldBe("000"); + + filename = "a.192.168.5.4"; + filename = _blobNamingNormalizer.NormalizeContainerName(filename); + filename.ShouldBe("a.192.168.5.4"); + } + + [Fact] + public void NormalizeContainerName_Dots() + { + var filename = ".this..is.my.container....name."; + filename = _blobNamingNormalizer.NormalizeContainerName(filename); + filename.ShouldBe("this.is.my.container.name"); + } + + [Fact] + public void NormalizeContainerName_DNS() + { + var filename = "bucket...example..com"; + filename = _blobNamingNormalizer.NormalizeContainerName(filename); + filename.ShouldBe("bucket.example.com"); + } + + [Fact] + public void NormalizeContainerName_Max_Length_Dash() + { + var filename = "-this-is-my-container-name-abpabpabpabpabpabpabpabp-a-b-p-a--b-p-"; + filename = _blobNamingNormalizer.NormalizeContainerName(filename); + filename.ShouldBe("this-is-my-container-name-abpabpabpabpabpabpabpabp-a-b-p-a--b"); + } +} diff --git a/framework/test/Volo.Abp.BlobStoring.Google.Tests/Volo/Abp/BlobStoring/Google/GoogleBlobContainer_Tests.cs b/framework/test/Volo.Abp.BlobStoring.Google.Tests/Volo/Abp/BlobStoring/Google/GoogleBlobContainer_Tests.cs new file mode 100644 index 0000000000..6a4405f7cd --- /dev/null +++ b/framework/test/Volo.Abp.BlobStoring.Google.Tests/Volo/Abp/BlobStoring/Google/GoogleBlobContainer_Tests.cs @@ -0,0 +1,13 @@ +ï»żusing Xunit; + +namespace Volo.Abp.BlobStoring.Google; + +/* +//Please set the correct connection string in secrets.json and continue the test. +public class GoogleBlobContainer_Tests : BlobContainer_Tests +{ + public GoogleBlobContainer_Tests() + { + } +} +*/ diff --git a/framework/test/Volo.Abp.BlobStoring.Google.Tests/Volo/Abp/BlobStoring/Google/GoogleBlobNameCalculator_Tests.cs b/framework/test/Volo.Abp.BlobStoring.Google.Tests/Volo/Abp/BlobStoring/Google/GoogleBlobNameCalculator_Tests.cs new file mode 100644 index 0000000000..781900ad81 --- /dev/null +++ b/framework/test/Volo.Abp.BlobStoring.Google.Tests/Volo/Abp/BlobStoring/Google/GoogleBlobNameCalculator_Tests.cs @@ -0,0 +1,56 @@ +using System; +using Shouldly; +using Volo.Abp.MultiTenancy; +using Xunit; + +namespace Volo.Abp.BlobStoring.Google; + +public class GoogleBlobNameCalculator_Tests : AbpBlobStoringGoogleTestCommonBase +{ + private readonly IGoogleBlobNameCalculator _calculator; + private readonly ICurrentTenant _currentTenant; + + private const string GoogleContainerName = "/"; + private const string GoogleSeparator = "/"; + + public GoogleBlobNameCalculator_Tests() + { + _calculator = GetRequiredService(); + _currentTenant = GetRequiredService(); + } + + [Fact] + public void Default_Settings() + { + _calculator.Calculate( + GetArgs("my-container", "my-blob") + ).ShouldBe($"host{GoogleSeparator}my-blob"); + } + + [Fact] + public void Default_Settings_With_TenantId() + { + var tenantId = Guid.NewGuid(); + + using (_currentTenant.Change(tenantId)) + { + _calculator.Calculate( + GetArgs("my-container", "my-blob") + ).ShouldBe($"tenants{GoogleSeparator}{tenantId:D}{GoogleSeparator}my-blob"); + } + } + + private static BlobProviderArgs GetArgs( + string containerName, + string blobName) + { + return new BlobProviderGetArgs( + containerName, + new BlobContainerConfiguration().UseGoogle(x => + { + x.ContainerName = containerName; + }), + blobName + ); + } +} \ No newline at end of file diff --git a/framework/test/Volo.Abp.Core.Tests/Volo/Abp/Http/UrlHelpers_Tests.cs b/framework/test/Volo.Abp.Core.Tests/Volo/Abp/Http/UrlHelpers_Tests.cs new file mode 100644 index 0000000000..51251f84d4 --- /dev/null +++ b/framework/test/Volo.Abp.Core.Tests/Volo/Abp/Http/UrlHelpers_Tests.cs @@ -0,0 +1,43 @@ +using Shouldly; +using Xunit; + +namespace Volo.Abp.Http; + +public class UrlHelpers_Tests +{ + [Theory] + [InlineData(null)] + [InlineData("null")] + [InlineData("http://")] + [InlineData("http://*")] + [InlineData("http://.domain")] + [InlineData("http://.domain/hello")] + public void IsSubdomainOf_ReturnsFalseIfDomainIsMalformedUri(string domain) + { + var actual = UrlHelpers.IsSubdomainOf("http://*.domain", domain); + actual.ShouldBeFalse(); + } + + [Theory] + [InlineData("http://sub.domain", "http://domain")] + [InlineData("http://sub.domain", "http://*.domain")] + [InlineData("http://sub.sub.domain", "http://*.domain")] + [InlineData("http://sub.sub.domain", "http://*.sub.domain")] + [InlineData("http://sub.domain:4567", "http://*.domain:4567")] + public void IsSubdomainOf_ReturnsTrue_WhenASubdomain(string subdomain, string domain) + { + var actual = UrlHelpers.IsSubdomainOf(subdomain, domain); + actual.ShouldBeTrue(); + } + + [Theory] + [InlineData("http://sub.domain:1234", "http://*.domain:5678")] + [InlineData("http://sub.domain", "http://domain.*")] + [InlineData("http://sub.domain.hacker", "http://*.domain")] + [InlineData("https://sub.domain", "http://*.domain")] + public void IsSubdomainOf_ReturnsFalse_WhenNotASubdomain(string subdomain, string domain) + { + var actual = UrlHelpers.IsSubdomainOf(subdomain, domain); + actual.ShouldBeFalse(); + } +} diff --git a/framework/test/Volo.Abp.Emailing.Tests/Volo/Abp/Emailing/Localization/sv.json b/framework/test/Volo.Abp.Emailing.Tests/Volo/Abp/Emailing/Localization/sv.json new file mode 100644 index 0000000000..810af19db5 --- /dev/null +++ b/framework/test/Volo.Abp.Emailing.Tests/Volo/Abp/Emailing/Localization/sv.json @@ -0,0 +1,6 @@ +{ + "culture": "sv", + "texts": { + "hello": "Hej" + } +} \ No newline at end of file diff --git a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Domain/ExtraProperties_Tests.cs b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Domain/ExtraProperties_Tests.cs index 42b6ca2a67..59eaa367fa 100644 --- a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Domain/ExtraProperties_Tests.cs +++ b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Domain/ExtraProperties_Tests.cs @@ -1,6 +1,7 @@ ï»żusing System; using System.Linq; using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; using Shouldly; using Volo.Abp.Data; using Volo.Abp.Domain.Repositories; @@ -59,6 +60,27 @@ public class ExtraProperties_Tests : ExtraProperties_Tests("PhoneCode").ShouldBe("42"); + + await CityRepository.DeleteAsync(london); + + london = await CityRepository.FindByNameAsync("London"); + london.ShouldBeNull(); + + using (var uow = ServiceProvider.GetRequiredService().Disable()) + { + london = await CityRepository.FindByNameAsync("London"); + london.IsDeleted.ShouldBeTrue(); + london.HasProperty("PhoneCode").ShouldBeTrue(); + london.GetProperty("PhoneCode").ShouldBe("42"); + } + } + public enum Color { Red = 0, diff --git a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/DomainEvents/DomainEvents_Tests.cs b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/DomainEvents/DomainEvents_Tests.cs index 776e7d4766..f1b072c0ee 100644 --- a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/DomainEvents/DomainEvents_Tests.cs +++ b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/DomainEvents/DomainEvents_Tests.cs @@ -27,7 +27,7 @@ public class AbpEfCoreDomainEvents_Tests : EntityFrameworkCoreTestBase protected readonly IRepository AppEntityWithNavigationsRepository; protected readonly ILocalEventBus LocalEventBus; protected readonly IRepository PersonRepository; - protected bool _loadEntityWithDetails = false; + protected bool _loadEntityWithoutDetails = false; public AbpEfCoreDomainEvents_Tests() { @@ -42,7 +42,7 @@ public class AbpEfCoreDomainEvents_Tests : EntityFrameworkCoreTestBase { options.Entity(opt => { - if (_loadEntityWithDetails) + if (_loadEntityWithoutDetails) { opt.DefaultWithDetailsFunc = q => q; } @@ -55,7 +55,7 @@ public class AbpEfCoreDomainEvents_Tests : EntityFrameworkCoreTestBase [Fact] public async Task Should_Trigger_Domain_Events_For_Aggregate_Root_When_Navigation_Changes_Tests() { - _loadEntityWithDetails = false; + _loadEntityWithoutDetails = false; var entityId = Guid.NewGuid(); @@ -77,6 +77,8 @@ public class AbpEfCoreDomainEvents_Tests : EntityFrameworkCoreTestBase await PersonRepository.InsertAsync(new Person(Guid.NewGuid(), Guid.NewGuid().ToString(), new Random().Next(1, 100))); }); + var unitOfWorkManager = ServiceProvider.GetRequiredService(); + // Test with simple property await WithUnitOfWorkAsync(async () => { @@ -92,6 +94,7 @@ public class AbpEfCoreDomainEvents_Tests : EntityFrameworkCoreTestBase await WithUnitOfWorkAsync(async () => { var entity = await AppEntityWithNavigationsRepository.GetAsync(entityId); + await unitOfWorkManager.Current.SaveChangesAsync(); entity.AppEntityWithValueObjectAddress = new AppEntityWithValueObjectAddress("Turkey"); await AppEntityWithNavigationsRepository.UpdateAsync(entity); }); @@ -102,6 +105,7 @@ public class AbpEfCoreDomainEvents_Tests : EntityFrameworkCoreTestBase await WithUnitOfWorkAsync(async () => { var entity = await AppEntityWithNavigationsRepository.GetAsync(entityId); + await unitOfWorkManager.Current.SaveChangesAsync(); entity.AppEntityWithValueObjectAddress.Country = "USA"; await AppEntityWithNavigationsRepository.UpdateAsync(entity); }); @@ -117,6 +121,7 @@ public class AbpEfCoreDomainEvents_Tests : EntityFrameworkCoreTestBase await WithUnitOfWorkAsync(async () => { var entity = await AppEntityWithNavigationsRepository.GetAsync(entityId); + await unitOfWorkManager.Current.SaveChangesAsync(); entity.AppEntityWithValueObjectAddress = null; await AppEntityWithNavigationsRepository.UpdateAsync(entity); }); @@ -128,6 +133,7 @@ public class AbpEfCoreDomainEvents_Tests : EntityFrameworkCoreTestBase await WithUnitOfWorkAsync(async () => { var entity = await AppEntityWithNavigationsRepository.GetAsync(entityId); + await unitOfWorkManager.Current.SaveChangesAsync(); entity.OneToOne = new AppEntityWithNavigationChildOneToOne { ChildName = "ChildName", @@ -157,6 +163,7 @@ public class AbpEfCoreDomainEvents_Tests : EntityFrameworkCoreTestBase await WithUnitOfWorkAsync(async () => { var entity = await AppEntityWithNavigationsRepository.GetAsync(entityId); + await unitOfWorkManager.Current.SaveChangesAsync(); entity.OneToOne.ChildName = "ChildName2"; await AppEntityWithNavigationsRepository.UpdateAsync(entity); }); @@ -171,6 +178,7 @@ public class AbpEfCoreDomainEvents_Tests : EntityFrameworkCoreTestBase await WithUnitOfWorkAsync(async () => { var entity = await AppEntityWithNavigationsRepository.GetAsync(entityId); + await unitOfWorkManager.Current.SaveChangesAsync(); entity.OneToOne.OneToOne.ChildName = "OneToOne-ChildName2"; await AppEntityWithNavigationsRepository.UpdateAsync(entity); }); @@ -188,6 +196,7 @@ public class AbpEfCoreDomainEvents_Tests : EntityFrameworkCoreTestBase await WithUnitOfWorkAsync(async () => { var entity = await AppEntityWithNavigationsRepository.GetAsync(entityId); + await unitOfWorkManager.Current.SaveChangesAsync(); entity.OneToOne = null; await AppEntityWithNavigationsRepository.UpdateAsync(entity); }); @@ -199,6 +208,7 @@ public class AbpEfCoreDomainEvents_Tests : EntityFrameworkCoreTestBase await WithUnitOfWorkAsync(async () => { var entity = await AppEntityWithNavigationsRepository.GetAsync(entityId); + await unitOfWorkManager.Current.SaveChangesAsync(); entity.OneToMany = new List() { new AppEntityWithNavigationChildOneToMany @@ -235,6 +245,7 @@ public class AbpEfCoreDomainEvents_Tests : EntityFrameworkCoreTestBase await WithUnitOfWorkAsync(async () => { var entity = await AppEntityWithNavigationsRepository.GetAsync(entityId); + await unitOfWorkManager.Current.SaveChangesAsync(); entity.OneToMany[0].ChildName = "ChildName2"; await AppEntityWithNavigationsRepository.UpdateAsync(entity); }); @@ -249,6 +260,7 @@ public class AbpEfCoreDomainEvents_Tests : EntityFrameworkCoreTestBase await WithUnitOfWorkAsync(async () => { var entity = await AppEntityWithNavigationsRepository.GetAsync(entityId); + await unitOfWorkManager.Current.SaveChangesAsync(); entity.OneToMany[0].OneToMany[0].ChildName = "OneToMany-ChildName2"; await AppEntityWithNavigationsRepository.UpdateAsync(entity); }); @@ -266,6 +278,7 @@ public class AbpEfCoreDomainEvents_Tests : EntityFrameworkCoreTestBase await WithUnitOfWorkAsync(async () => { var entity = await AppEntityWithNavigationsRepository.GetAsync(entityId); + await unitOfWorkManager.Current.SaveChangesAsync(); entity.OneToMany.Clear(); await AppEntityWithNavigationsRepository.UpdateAsync(entity); }); @@ -277,6 +290,7 @@ public class AbpEfCoreDomainEvents_Tests : EntityFrameworkCoreTestBase await WithUnitOfWorkAsync(async () => { var entity = await AppEntityWithNavigationsRepository.GetAsync(entityId); + await unitOfWorkManager.Current.SaveChangesAsync(); entity.ManyToMany = new List() { new AppEntityWithNavigationChildManyToMany @@ -293,6 +307,7 @@ public class AbpEfCoreDomainEvents_Tests : EntityFrameworkCoreTestBase await WithUnitOfWorkAsync(async () => { var entity = await AppEntityWithNavigationsRepository.GetAsync(entityId); + await unitOfWorkManager.Current.SaveChangesAsync(); entity.ManyToMany[0].ChildName = "ChildName2"; await AppEntityWithNavigationsRepository.UpdateAsync(entity); }); @@ -303,6 +318,7 @@ public class AbpEfCoreDomainEvents_Tests : EntityFrameworkCoreTestBase await WithUnitOfWorkAsync(async () => { var entity = await AppEntityWithNavigationsRepository.GetAsync(entityId); + await unitOfWorkManager.Current.SaveChangesAsync(); entity.ManyToMany.Clear(); await AppEntityWithNavigationsRepository.UpdateAsync(entity); }); @@ -313,7 +329,7 @@ public class AbpEfCoreDomainEvents_Tests : EntityFrameworkCoreTestBase [Fact] public async Task Should_Trigger_Domain_Events_For_Aggregate_Root_When_EnsureCollectionLoaded_Navigation_Changes_Tests() { - _loadEntityWithDetails = true; + _loadEntityWithoutDetails = true; var entityId = Guid.NewGuid(); diff --git a/framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/Localization/sv.json b/framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/Localization/sv.json new file mode 100644 index 0000000000..62ea61f867 --- /dev/null +++ b/framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/Localization/sv.json @@ -0,0 +1,6 @@ +{ + "culture": "sv", + "texts": { + "Volo.Abp.Http.DynamicProxying:10001": "Företagsundantag med data: {0}" + } +} \ No newline at end of file diff --git a/framework/test/Volo.Abp.Imaging.Abstractions.Tests/Volo/Abp/Imaging/Files/abp.webp b/framework/test/Volo.Abp.Imaging.Abstractions.Tests/Volo/Abp/Imaging/Files/abp.webp index c31bc80a82..70b613b8f2 100644 Binary files a/framework/test/Volo.Abp.Imaging.Abstractions.Tests/Volo/Abp/Imaging/Files/abp.webp and b/framework/test/Volo.Abp.Imaging.Abstractions.Tests/Volo/Abp/Imaging/Files/abp.webp differ diff --git a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/CountryNames/sv.json b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/CountryNames/sv.json new file mode 100644 index 0000000000..8ac7c07f27 --- /dev/null +++ b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/CountryNames/sv.json @@ -0,0 +1,7 @@ +{ + "culture": "sv", + "texts": { + "USA": "Amerikas Förenta Stater", + "Brazil": "Brasilien" + } +} \ No newline at end of file diff --git a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/Validation/sv.json b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/Validation/sv.json new file mode 100644 index 0000000000..ee8b643b3f --- /dev/null +++ b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/Validation/sv.json @@ -0,0 +1,12 @@ +{ + "culture": "sv", + "texts": { + "ThisFieldIsRequired": "Detta fĂ€lt Ă€r obligatoriskt", + "MaxLenghtErrorMessage": "Detta fĂ€lt kan innehĂ„lla högst '{0}' tecken", + "Enum:BookType.Undefined": "Odefinierad frĂ„n ValidationResource", + "Enum:BookType.0": "Odefinierad med vĂ€rdet 0 frĂ„n ValidationResource", + "BookType.Adventure": "Äventyr frĂ„n ValidationResource", + "BookType.1": "Äventyr med vĂ€rde 1 frĂ„n ValidationResource", + "Biography": "Biografi frĂ„n ValidationResource" + } +} \ No newline at end of file diff --git a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Source/sv.json b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Source/sv.json new file mode 100644 index 0000000000..ddf4fc67e9 --- /dev/null +++ b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Source/sv.json @@ -0,0 +1,16 @@ +{ + "culture": "sv", + "texts": { + "Hello {0}.": "Hej {0}.", + "Car": "Bil", + "CarPlural": "Bilar", + "MaxLenghtErrorMessage": "LĂ€ngden pĂ„ detta fĂ€lt kan vara högst '{0}' tecken", + "Universe": "Universum", + "FortyTwo": "FyrtiotvĂ„", + "Enum:BookType.Undefined": "Odefinierad", + "Enum:BookType.0": "Odefinierad med vĂ€rde 0", + "BookType.Adventure": "Äventyr", + "BookType.1": "Äventyr med vĂ€rde 1", + "Biography": "Biografi" + } +} \ No newline at end of file diff --git a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/SourceExt/sv.json b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/SourceExt/sv.json new file mode 100644 index 0000000000..b5bceee203 --- /dev/null +++ b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/SourceExt/sv.json @@ -0,0 +1,6 @@ +{ + "culture": "sv", + "texts": { + "SeeYou": "Se dig sjĂ€lv" + } +} \ No newline at end of file diff --git a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Domain/City.cs b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Domain/City.cs index 15ca147d91..50c3d32458 100644 --- a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Domain/City.cs +++ b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Domain/City.cs @@ -5,12 +5,14 @@ using Volo.Abp.Domain.Entities; namespace Volo.Abp.TestApp.Domain; -public class City : AggregateRoot +public class City : AggregateRoot, ISoftDelete { public string Name { get; set; } public ICollection Districts { get; set; } + public bool IsDeleted { get; set; } + private City() { diff --git a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/ConcurrencyStamp_Tests.cs b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/ConcurrencyStamp_Tests.cs index 2f9f8c1257..2906431ff1 100644 --- a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/ConcurrencyStamp_Tests.cs +++ b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/ConcurrencyStamp_Tests.cs @@ -1,5 +1,6 @@ ï»żusing System.Threading.Tasks; using Volo.Abp.Data; +using Volo.Abp.Domain.Repositories; using Volo.Abp.Modularity; using Volo.Abp.TestApp.Domain; using Xunit; @@ -49,7 +50,7 @@ public abstract class ConcurrencyStamp_Tests : TestAppTestBase(async () => { - await CityRepository.DeleteAsync(london1); + await CityRepository.HardDeleteAsync(london1); }); } } diff --git a/framework/test/Volo.Abp.TextTemplating.Razor.Tests/Volo/Abp/TextTemplating/Razor/RazorLocalizedTemplateContentReaderFactory_Tests.cs b/framework/test/Volo.Abp.TextTemplating.Razor.Tests/Volo/Abp/TextTemplating/Razor/RazorLocalizedTemplateContentReaderFactory_Tests.cs index 97a3b7426e..1e50d5a86c 100644 --- a/framework/test/Volo.Abp.TextTemplating.Razor.Tests/Volo/Abp/TextTemplating/Razor/RazorLocalizedTemplateContentReaderFactory_Tests.cs +++ b/framework/test/Volo.Abp.TextTemplating.Razor.Tests/Volo/Abp/TextTemplating/Razor/RazorLocalizedTemplateContentReaderFactory_Tests.cs @@ -12,7 +12,8 @@ public class RazorLocalizedTemplateContentReaderFactory_Tests : LocalizedTemplat LocalizedTemplateContentReaderFactory = new LocalizedTemplateContentReaderFactory( new PhysicalFileVirtualFileProvider( new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), - "Volo", "Abp", "TextTemplating", "Razor")))); + "Volo", "Abp", "TextTemplating", "Razor"))), + GetRequiredService()); WelcomeEmailEnglishContent = "@inherits Volo.Abp.TextTemplating.Razor.RazorTemplatePageBase" + Environment.NewLine + diff --git a/framework/test/Volo.Abp.TextTemplating.Scriban.Tests/Volo/Abp/TextTemplating/Scriban/ScribanLocalizedTemplateContentReaderFactory_Tests.cs b/framework/test/Volo.Abp.TextTemplating.Scriban.Tests/Volo/Abp/TextTemplating/Scriban/ScribanLocalizedTemplateContentReaderFactory_Tests.cs index 35fecd093d..bbf0f99c56 100644 --- a/framework/test/Volo.Abp.TextTemplating.Scriban.Tests/Volo/Abp/TextTemplating/Scriban/ScribanLocalizedTemplateContentReaderFactory_Tests.cs +++ b/framework/test/Volo.Abp.TextTemplating.Scriban.Tests/Volo/Abp/TextTemplating/Scriban/ScribanLocalizedTemplateContentReaderFactory_Tests.cs @@ -11,7 +11,8 @@ public class ScribanLocalizedTemplateContentReaderFactory_Tests : LocalizedTempl LocalizedTemplateContentReaderFactory = new LocalizedTemplateContentReaderFactory( new PhysicalFileVirtualFileProvider( new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), - "Volo", "Abp", "TextTemplating", "Scriban")))); + "Volo", "Abp", "TextTemplating", "Scriban"))), + GetRequiredService()); WelcomeEmailEnglishContent = "Welcome {{model.name}} to the abp.io!"; WelcomeEmailTurkishContent = "Merhaba {{model.name}}, abp.io'ya hoßgeldiniz!"; diff --git a/framework/test/Volo.Abp.TextTemplating.Tests/Volo/Abp/TextTemplating/Localization/sv.json b/framework/test/Volo.Abp.TextTemplating.Tests/Volo/Abp/TextTemplating/Localization/sv.json new file mode 100644 index 0000000000..c398b9a593 --- /dev/null +++ b/framework/test/Volo.Abp.TextTemplating.Tests/Volo/Abp/TextTemplating/Localization/sv.json @@ -0,0 +1,7 @@ +{ + "culture": "sv", + "texts": { + "HelloText": "Hej", + "HowAreYou": "Hur Ă€r det med dig?" + } +} \ No newline at end of file diff --git a/framework/test/Volo.Abp.UI.Navigation.Tests/Volo/Abp/Ui/Navigation/AppUrlProvider_Tests.cs b/framework/test/Volo.Abp.UI.Navigation.Tests/Volo/Abp/Ui/Navigation/AppUrlProvider_Tests.cs index 5b448aa683..eb3698d23b 100644 --- a/framework/test/Volo.Abp.UI.Navigation.Tests/Volo/Abp/Ui/Navigation/AppUrlProvider_Tests.cs +++ b/framework/test/Volo.Abp.UI.Navigation.Tests/Volo/Abp/Ui/Navigation/AppUrlProvider_Tests.cs @@ -40,7 +40,8 @@ public class AppUrlProvider_Tests : AbpIntegratedTest "https://wwww.volosoft.com", "https://wwww.aspnetzero.com", "https://{{tenantName}}.abp.io", - "https://{{tenantId}}.abp.io" + "https://{{tenantId}}.abp.io", + "https://*.demo.myabp.io" }); options.Applications["BLAZOR"].RootUrl = "https://{{tenantId}}.abp.io"; @@ -101,12 +102,16 @@ public class AppUrlProvider_Tests : AbpIntegratedTest [Fact] public async Task IsRedirectAllowedUrlAsync() { - (await _appUrlProvider.IsRedirectAllowedUrlAsync("https://community.abp.io")).ShouldBeFalse(); (await _appUrlProvider.IsRedirectAllowedUrlAsync("https://wwww.volosoft.com")).ShouldBeTrue(); + (await _appUrlProvider.IsRedirectAllowedUrlAsync("https://wwww.demo.myabp.io")).ShouldBeTrue(); + (await _appUrlProvider.IsRedirectAllowedUrlAsync("https://demo.myabp.io")).ShouldBeTrue(); + (await _appUrlProvider.IsRedirectAllowedUrlAsync("https://api.demo.myabp.io")).ShouldBeTrue(); + (await _appUrlProvider.IsRedirectAllowedUrlAsync("https://test.api.demo.myabp.io")).ShouldBeTrue(); + (await _appUrlProvider.IsRedirectAllowedUrlAsync("https://volosoft.com/demo.myabp.io")).ShouldBeFalse(); + (await _appUrlProvider.IsRedirectAllowedUrlAsync("https://wwww.myabp.io")).ShouldBeFalse(); using (_currentTenant.Change(null)) { - (await _appUrlProvider.IsRedirectAllowedUrlAsync("https://www.abp.io")).ShouldBeFalse(); (await _appUrlProvider.IsRedirectAllowedUrlAsync("https://abp.io")).ShouldBeTrue(); } diff --git a/latest-versions.json b/latest-versions.json index 4649df25e4..f505ff8abd 100644 --- a/latest-versions.json +++ b/latest-versions.json @@ -1,6 +1,6 @@ [ { - "version": "8.2.1", + "version": "8.3.0", "releaseDate": "", "type": "stable", "message": "" diff --git a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo.Abp.Account.Application.Contracts.abppkg.analyze.json b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo.Abp.Account.Application.Contracts.abppkg.analyze.json index 9b8257a2f0..da04b6d001 100644 --- a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo.Abp.Account.Application.Contracts.abppkg.analyze.json +++ b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo.Abp.Account.Application.Contracts.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Abp.Account.Application.Contracts", - "hash": "392da50100d94bd18adbc7c41cd9efce", + "hash": "", "contents": [ { "namespace": "Volo.Abp.Account", diff --git a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/sv.json b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/sv.json new file mode 100644 index 0000000000..d06472ed7b --- /dev/null +++ b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/sv.json @@ -0,0 +1,73 @@ +{ + "culture": "sv", + "texts": { + "Menu:Account": "Konto", + "UserName": "AnvĂ€ndarnamn", + "EmailAddress": "E-postadress", + "UserNameOrEmailAddress": "AnvĂ€ndarnamn eller e-postadress", + "Password": "Lösenord", + "RememberMe": "Kom ihĂ„g mig", + "UseAnotherServiceToLogin": "AnvĂ€nd en annan tjĂ€nst för att logga in", + "UserLockedOutMessage": "AnvĂ€ndarkontot har lĂ„sts pĂ„ grund av ogiltiga inloggningsförsök. VĂ€nligen vĂ€nta ett tag och försök igen.", + "InvalidUserNameOrPassword": "Ogiltigt anvĂ€ndarnamn eller lösenord!", + "LoginIsNotAllowed": "Du kan inte logga in! Ditt konto Ă€r inaktivt eller sĂ„ behöver du bekrĂ€fta din e-postadress eller ditt telefonnummer.", + "SelfRegistrationDisabledMessage": "SjĂ€lvregistrering Ă€r inaktiverat för denna applikation. VĂ€nligen kontakta applikationsadministratören för att registrera en ny anvĂ€ndare.", + "LocalLoginDisabledMessage": "Lokal inloggning Ă€r inaktiverad för denna applikation.", + "Login": "Logga in", + "Cancel": "Avbryt", + "Register": "Registrera", + "AreYouANewUser": "Är du en ny anvĂ€ndare?", + "AlreadyRegistered": "Är du redan registrerad?", + "InvalidLoginRequest": "Ogiltig inloggningsbegĂ€ran", + "ThereAreNoLoginSchemesConfiguredForThisClient": "Det finns inga inloggningsscheman konfigurerade för den hĂ€r klienten.", + "LogInUsingYourProviderAccount": "Logga in med ditt {0}-konto", + "DisplayName:CurrentPassword": "Aktuellt lösenord", + "DisplayName:NewPassword": "Nytt lösenord", + "DisplayName:NewPasswordConfirm": "BekrĂ€fta nytt lösenord", + "PasswordChangedMessage": "Ditt lösenord har Ă€ndrats framgĂ„ngsrikt.", + "DisplayName:UserName": "AnvĂ€ndarnamn", + "DisplayName:Email": "E-post", + "DisplayName:Name": "Namn", + "DisplayName:Surname": "Efternamn", + "DisplayName:Password": "Lösenord", + "DisplayName:EmailAddress": "E-postadress", + "DisplayName:PhoneNumber": "Telefonnummer", + "PersonalSettings": "Personliga instĂ€llningar", + "PersonalSettingsSaved": "Personliga instĂ€llningar sparade", + "PersonalSettingsChangedConfirmationModalTitle": "Personuppgifter Ă€ndrade", + "PersonalSettingsChangedConfirmationModalDescription": "Ändringarna kommer att Ă„terspeglas efter att du loggat in igen. Vill du logga ut nu?", + "PasswordChanged": "Lösenord Ă€ndrat", + "NewPasswordConfirmFailed": "VĂ€nligen bekrĂ€fta det nya lösenordet.", + "NewPasswordSameAsOld": "Det nya lösenordet mĂ„ste vara ett annat Ă€n det gamla.", + "Manage": "Hantera", + "MyAccount": "Mitt konto", + "DisplayName:Abp.Account.IsSelfRegistrationEnabled": "Är sjĂ€lvregistrering möjlig?", + "Description:Abp.Account.IsSelfRegistrationEnabled": "Om en anvĂ€ndare kan registrera kontot sjĂ€lv.", + "DisplayName:Abp.Account.EnableLocalLogin": "Autentisera med ett lokalt konto", + "Description:Abp.Account.EnableLocalLogin": "Anger om servern tillĂ„ter anvĂ€ndare att autentisera sig med ett lokalt konto.", + "LoggedOutTitle": "Utregistrerad", + "LoggedOutText": "Du har blivit utloggad och kommer att omdirigeras inom kort.", + "ReturnToText": "Klicka hĂ€r för att komma tillbaka till ansökan", + "OrLoginWith": "Eller logga in med:", + "ForgotPassword": "Har du glömt lösenordet?", + "SendPasswordResetLink_Information": "En lĂ€nk för att Ă„terstĂ€lla lösenordet kommer att skickas till din e-post för att Ă„terstĂ€lla ditt lösenord. Om du inte fĂ„r ett e-postmeddelande inom nĂ„gra minuter, försök igen.", + "PasswordResetMailSentMessage": "E-postmeddelande om Ă„terstĂ€llning av konto skickas till din e-postadress. Om du inte ser det hĂ€r e-postmeddelandet i din inkorg inom 15 minuter, leta efter det i din skrĂ€ppostmapp. Om du hittar det dĂ€r, markera det som -Not Junk-.", + "ResetPassword": "ÅterstĂ€ll lösenord", + "ConfirmPassword": "BekrĂ€fta lösenordet", + "ResetPassword_Information": "Ange ditt nya lösenord.", + "YourPasswordIsSuccessfullyReset": "Ditt lösenord har Ă„terstĂ€llts.", + "GoToTheApplication": "GĂ„ till applikationen", + "BackToLogin": "Tillbaka till inloggning", + "ProfileTab:Password": "Ändra lösenord", + "ProfileTab:PersonalInfo": "Personlig information", + "ReturnToApplication": "ÅtergĂ„ till ansökan", + "Volo.Account:InvalidEmailAddress": "Kan inte hitta den angivna e-postadressen: {0}", + "PasswordReset": "ÅterstĂ€llning av lösenord", + "PasswordResetInfoInEmail": "Vi har fĂ„tt en begĂ€ran om Ă„terstĂ€llning av konto! Om du initierade denna begĂ€ran, klicka pĂ„ följande lĂ€nk för att Ă„terstĂ€lla ditt lösenord.", + "ResetMyPassword": "ÅterstĂ€ll mitt lösenord", + "AccessDenied": "Åtkomst nekad!", + "AccessDeniedMessage": "Du har inte tillgĂ„ng till denna resurs.", + "OrRegisterWith": "Eller registrera dig med", + "RegisterUsingYourProviderAccount": "Registrera dig med ditt {0} konto" + } +} \ No newline at end of file diff --git a/modules/account/src/Volo.Abp.Account.Application/Volo.Abp.Account.Application.abppkg.analyze.json b/modules/account/src/Volo.Abp.Account.Application/Volo.Abp.Account.Application.abppkg.analyze.json index dbd55b0f21..d02c89e745 100644 --- a/modules/account/src/Volo.Abp.Account.Application/Volo.Abp.Account.Application.abppkg.analyze.json +++ b/modules/account/src/Volo.Abp.Account.Application/Volo.Abp.Account.Application.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Abp.Account.Application", - "hash": "ebd6f98a2003938944d5a3790daf20af", + "hash": "", "contents": [ { "namespace": "Volo.Abp.Account", @@ -141,6 +141,7 @@ "methods": [ { "returnType": "IdentityUserDto", + "namespace": "Volo.Abp.Account", "name": "RegisterAsync", "summary": null, "isAsync": true, @@ -157,6 +158,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.Account", "name": "SendPasswordResetCodeAsync", "summary": null, "isAsync": true, @@ -173,6 +175,7 @@ }, { "returnType": "Boolean", + "namespace": "Volo.Abp.Account", "name": "VerifyPasswordResetTokenAsync", "summary": null, "isAsync": true, @@ -189,6 +192,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.Account", "name": "ResetPasswordAsync", "summary": null, "isAsync": true, @@ -208,6 +212,87 @@ "name": "AccountAppService", "summary": null }, + { + "namespace": "Volo.Abp.Account", + "baseClass": { + "name": "IdentityAppServiceBase", + "namespace": "Volo.Abp.Identity", + "declaringAssemblyName": "Volo.Abp.Identity.Application", + "fullName": "Volo.Abp.Identity.IdentityAppServiceBase" + }, + "implementingInterfaces": [ + { + "name": "IApplicationService", + "namespace": "Volo.Abp.Application.Services", + "declaringAssemblyName": "Volo.Abp.Ddd.Application.Contracts", + "fullName": "Volo.Abp.Application.Services.IApplicationService" + }, + { + "name": "IRemoteService", + "namespace": "Volo.Abp", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.IRemoteService" + }, + { + "name": "IAvoidDuplicateCrossCuttingConcerns", + "namespace": "Volo.Abp.Aspects", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Aspects.IAvoidDuplicateCrossCuttingConcerns" + }, + { + "name": "IValidationEnabled", + "namespace": "Volo.Abp.Validation", + "declaringAssemblyName": "Volo.Abp.Validation", + "fullName": "Volo.Abp.Validation.IValidationEnabled" + }, + { + "name": "IUnitOfWorkEnabled", + "namespace": "Volo.Abp.Uow", + "declaringAssemblyName": "Volo.Abp.Uow", + "fullName": "Volo.Abp.Uow.IUnitOfWorkEnabled" + }, + { + "name": "IAuditingEnabled", + "namespace": "Volo.Abp.Auditing", + "declaringAssemblyName": "Volo.Abp.Auditing.Contracts", + "fullName": "Volo.Abp.Auditing.IAuditingEnabled" + }, + { + "name": "IGlobalFeatureCheckingEnabled", + "namespace": "Volo.Abp.GlobalFeatures", + "declaringAssemblyName": "Volo.Abp.GlobalFeatures", + "fullName": "Volo.Abp.GlobalFeatures.IGlobalFeatureCheckingEnabled" + }, + { + "name": "ITransientDependency", + "namespace": "Volo.Abp.DependencyInjection", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.DependencyInjection.ITransientDependency" + }, + { + "name": "IDynamicClaimsAppService", + "namespace": "Volo.Abp.Account", + "declaringAssemblyName": "Volo.Abp.Account.Application.Contracts", + "fullName": "Volo.Abp.Account.IDynamicClaimsAppService" + } + ], + "methods": [ + { + "returnType": "Void", + "namespace": "Volo.Abp.Account", + "name": "RefreshAsync", + "summary": null, + "isAsync": true, + "isPublic": true, + "isPrivate": false, + "isStatic": false, + "parameters": [] + } + ], + "contentType": "applicationService", + "name": "DynamicClaimsAppService", + "summary": null + }, { "namespace": "Volo.Abp.Account", "baseClass": { @@ -275,6 +360,7 @@ "methods": [ { "returnType": "ProfileDto", + "namespace": "Volo.Abp.Account", "name": "GetAsync", "summary": null, "isAsync": true, @@ -285,6 +371,7 @@ }, { "returnType": "ProfileDto", + "namespace": "Volo.Abp.Account", "name": "UpdateAsync", "summary": null, "isAsync": true, @@ -301,6 +388,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.Account", "name": "ChangePasswordAsync", "summary": null, "isAsync": true, diff --git a/modules/account/src/Volo.Abp.Account.Application/Volo/Abp/Account/ProfileAppService.cs b/modules/account/src/Volo.Abp.Account.Application/Volo/Abp/Account/ProfileAppService.cs index 9749a607d5..d2baae8393 100644 --- a/modules/account/src/Volo.Abp.Account.Application/Volo/Abp/Account/ProfileAppService.cs +++ b/modules/account/src/Volo.Abp.Account.Application/Volo/Abp/Account/ProfileAppService.cs @@ -68,8 +68,8 @@ public class ProfileAppService : IdentityAppServiceBase, IProfileAppService (await UserManager.SetPhoneNumberAsync(user, input.PhoneNumber)).CheckErrors(); } - user.Name = input.Name; - user.Surname = input.Surname; + user.Name = input.Name?.Trim(); + user.Surname = input.Surname?.Trim(); input.MapExtraPropertiesTo(user); diff --git a/modules/account/src/Volo.Abp.Account.Blazor/Volo.Abp.Account.Blazor.abppkg.analyze.json b/modules/account/src/Volo.Abp.Account.Blazor/Volo.Abp.Account.Blazor.abppkg.analyze.json index 0fe0981e1d..cba964b090 100644 --- a/modules/account/src/Volo.Abp.Account.Blazor/Volo.Abp.Account.Blazor.abppkg.analyze.json +++ b/modules/account/src/Volo.Abp.Account.Blazor/Volo.Abp.Account.Blazor.abppkg.analyze.json @@ -1,10 +1,25 @@ { "name": "Volo.Abp.Account.Blazor", - "hash": "caa7279a6d55f90db90b3ec2313a4e12", + "hash": "", "contents": [ { - "namespace": "Volo.Abp.Account.Blazor;", + "namespace": "Volo.Abp.Account.Blazor", "dependsOnModules": [ + { + "declaringAssemblyName": "Volo.Abp.AspNetCore.Components.Web.Theming", + "namespace": "Volo.Abp.AspNetCore.Components.Web.Theming", + "name": "AbpAspNetCoreComponentsWebThemingModule" + }, + { + "declaringAssemblyName": "Volo.Abp.AutoMapper", + "namespace": "Volo.Abp.AutoMapper", + "name": "AbpAutoMapperModule" + }, + { + "declaringAssemblyName": "Volo.Abp.Account.Application.Contracts", + "namespace": "Volo.Abp.Account", + "name": "AbpAccountApplicationContractsModule" + } ], "implementingInterfaces": [ { @@ -53,6 +68,12 @@ "contentType": "abpModule", "name": "AbpAccountBlazorModule", "summary": null + }, + { + "namespace": "Volo.Abp.Account.Blazor.Pages.Account", + "contentType": "webPage", + "name": "AccountManage", + "summary": null } ] } \ No newline at end of file diff --git a/modules/account/src/Volo.Abp.Account.HttpApi.Client/Volo.Abp.Account.HttpApi.Client.abppkg.analyze.json b/modules/account/src/Volo.Abp.Account.HttpApi.Client/Volo.Abp.Account.HttpApi.Client.abppkg.analyze.json index bed1809a98..d6313846ba 100644 --- a/modules/account/src/Volo.Abp.Account.HttpApi.Client/Volo.Abp.Account.HttpApi.Client.abppkg.analyze.json +++ b/modules/account/src/Volo.Abp.Account.HttpApi.Client/Volo.Abp.Account.HttpApi.Client.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Abp.Account.HttpApi.Client", - "hash": "5a1716ad59fa19da3009381a4d0d3e1d", + "hash": "", "contents": [ { "namespace": "Volo.Abp.Account", diff --git a/modules/account/src/Volo.Abp.Account.HttpApi/Volo.Abp.Account.HttpApi.abppkg.analyze.json b/modules/account/src/Volo.Abp.Account.HttpApi/Volo.Abp.Account.HttpApi.abppkg.analyze.json index 2df3965fe7..3ee0c8975a 100644 --- a/modules/account/src/Volo.Abp.Account.HttpApi/Volo.Abp.Account.HttpApi.abppkg.analyze.json +++ b/modules/account/src/Volo.Abp.Account.HttpApi/Volo.Abp.Account.HttpApi.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Abp.Account.HttpApi", - "hash": "caa7279a6d55f90db90b3ec2313a4e12", + "hash": "", "contents": [ { "namespace": "Volo.Abp.Account", @@ -68,6 +68,107 @@ "contentType": "abpModule", "name": "AbpAccountHttpApiModule", "summary": null + }, + { + "apis": [ + { + "path": "api/account/register", + "method": "POST", + "groupName": "Account", + "responseType": "Volo.Abp.Identity.IdentityUserDto", + "responseTypeAsJson": "", + "parameterDescriptions": [ + { + "name": "input", + "type": "RegisterDto" + } + ] + }, + { + "path": "api/account/send-password-reset-code", + "method": "POST", + "groupName": "Account", + "responseType": "System.Void", + "responseTypeAsJson": "", + "parameterDescriptions": [ + { + "name": "input", + "type": "SendPasswordResetCodeDto" + } + ] + }, + { + "path": "api/account/verify-password-reset-token", + "method": "POST", + "groupName": "Account", + "responseType": "System.Boolean", + "responseTypeAsJson": "true", + "parameterDescriptions": [ + { + "name": "input", + "type": "VerifyPasswordResetTokenInput" + } + ] + }, + { + "path": "api/account/reset-password", + "method": "POST", + "groupName": "Account", + "responseType": "System.Void", + "responseTypeAsJson": "", + "parameterDescriptions": [ + { + "name": "input", + "type": "ResetPasswordDto" + } + ] + }, + { + "path": "api/account/dynamic-claims/refresh", + "method": "POST", + "groupName": "DynamicClaims", + "responseType": "System.Void", + "responseTypeAsJson": "", + "parameterDescriptions": [] + }, + { + "path": "api/account/my-profile", + "method": "GET", + "groupName": "Profile", + "responseType": "Volo.Abp.Account.ProfileDto", + "responseTypeAsJson": "", + "parameterDescriptions": [] + }, + { + "path": "api/account/my-profile", + "method": "PUT", + "groupName": "Profile", + "responseType": "Volo.Abp.Account.ProfileDto", + "responseTypeAsJson": "", + "parameterDescriptions": [ + { + "name": "input", + "type": "UpdateProfileDto" + } + ] + }, + { + "path": "api/account/my-profile/change-password", + "method": "POST", + "groupName": "Profile", + "responseType": "System.Void", + "responseTypeAsJson": "", + "parameterDescriptions": [ + { + "name": "input", + "type": "ChangePasswordInput" + } + ] + } + ], + "contentType": "httpApi", + "name": "Defined Http Apis", + "summary": null } ] } \ No newline at end of file diff --git a/modules/account/src/Volo.Abp.Account.Web.OpenIddict/Volo.Abp.Account.Web.OpenIddict.abppkg.analyze.json b/modules/account/src/Volo.Abp.Account.Web.OpenIddict/Volo.Abp.Account.Web.OpenIddict.abppkg.analyze.json index 2f22b0023e..5f73497d46 100644 --- a/modules/account/src/Volo.Abp.Account.Web.OpenIddict/Volo.Abp.Account.Web.OpenIddict.abppkg.analyze.json +++ b/modules/account/src/Volo.Abp.Account.Web.OpenIddict/Volo.Abp.Account.Web.OpenIddict.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Abp.Account.Web.OpenIddict", - "hash": "29785246e5bdaa8010c7da236efe3ba1", + "hash": "", "contents": [ { "namespace": "Volo.Abp.Account.Web", diff --git a/modules/account/src/Volo.Abp.Account.Web/Volo.Abp.Account.Web.abppkg.analyze.json b/modules/account/src/Volo.Abp.Account.Web/Volo.Abp.Account.Web.abppkg.analyze.json index f346e062ae..af62c4f131 100644 --- a/modules/account/src/Volo.Abp.Account.Web/Volo.Abp.Account.Web.abppkg.analyze.json +++ b/modules/account/src/Volo.Abp.Account.Web/Volo.Abp.Account.Web.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Abp.Account.Web", - "hash": "93b7e37fb41330719f0911b2c1b31cf0", + "hash": "", "contents": [ { "namespace": "Volo.Abp.Account.Web", @@ -78,6 +78,107 @@ "contentType": "abpModule", "name": "AbpAccountWebModule", "summary": null + }, + { + "apis": [ + { + "path": "api/account/login", + "method": "POST", + "groupName": "Account", + "responseType": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.AbpLoginResult", + "responseTypeAsJson": "", + "parameterDescriptions": [ + { + "name": "login", + "type": "UserLoginInfo" + } + ] + }, + { + "path": "api/account/logout", + "method": "GET", + "groupName": "Account", + "responseType": "System.Void", + "responseTypeAsJson": "", + "parameterDescriptions": [] + }, + { + "path": "api/account/check-password", + "method": "POST", + "groupName": "Account", + "responseType": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.AbpLoginResult", + "responseTypeAsJson": "", + "parameterDescriptions": [ + { + "name": "login", + "type": "UserLoginInfo" + } + ] + } + ], + "contentType": "httpApi", + "name": "Defined Http Apis", + "summary": null + }, + { + "namespace": "Volo.Abp.Account.Web.Pages.Account", + "contentType": "webPage", + "name": "AccessDeniedModel", + "summary": null + }, + { + "namespace": "Volo.Abp.Account.Web.Pages.Account", + "contentType": "webPage", + "name": "ForgotPasswordModel", + "summary": null + }, + { + "namespace": "Volo.Abp.Account.Web.Pages.Account", + "contentType": "webPage", + "name": "LoggedOutModel", + "summary": null + }, + { + "namespace": "Volo.Abp.Account.Web.Pages.Account", + "contentType": "webPage", + "name": "LoginModel", + "summary": null + }, + { + "namespace": "Volo.Abp.Account.Web.Pages.Account", + "contentType": "webPage", + "name": "LogoutModel", + "summary": null + }, + { + "namespace": "Volo.Abp.Account.Web.Pages.Account", + "contentType": "webPage", + "name": "ManageModel", + "summary": null + }, + { + "namespace": "Volo.Abp.Account.Web.Pages.Account", + "contentType": "webPage", + "name": "PasswordResetLinkSentModel", + "summary": null + }, + { + "namespace": "Volo.Abp.Account.Web.Pages.Account", + "contentType": "webPage", + "name": "RegisterModel", + "summary": null + }, + { + "namespace": "Volo.Abp.Account.Web.Pages.Account", + "contentType": "webPage", + "name": "ResetPasswordModel", + "summary": null + }, + { + "namespace": "Volo.Abp.Account.Web.Pages.Account", + "contentType": "webPage", + "name": "ResetPasswordConfirmationModel", + "summary": null } ] } \ No newline at end of file diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo.Abp.AuditLogging.Domain.Shared.abppkg.analyze.json b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo.Abp.AuditLogging.Domain.Shared.abppkg.analyze.json index 459bd50c19..3dab2d3fe4 100644 --- a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo.Abp.AuditLogging.Domain.Shared.abppkg.analyze.json +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo.Abp.AuditLogging.Domain.Shared.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Abp.AuditLogging.Domain.Shared", - "hash": "8e82f96ec1349d214e72c8fb4f902460", + "hash": "", "contents": [ { "namespace": "Volo.Abp.AuditLogging", diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/sv.json b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/sv.json new file mode 100644 index 0000000000..f0b8b1ebee --- /dev/null +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/sv.json @@ -0,0 +1,98 @@ +{ + "culture": "sv", + "texts": { + "Permission:AuditLogging": "Granskning av loggning", + "Permission:AuditLogs": "Granskningsloggar", + "Menu:AuditLogging": "Granskningsloggar", + "AuditLogs": "Granskningsloggar", + "HttpStatus": "HTTP-status", + "HttpMethod": "HTTP-metod", + "HttpMethodFilter": "Filter för HTTP-metod", + "HttpRequest": "HTTP-förfrĂ„gan", + "User": "AnvĂ€ndare", + "UserNameFilter": "AnvĂ€ndarfilter", + "HasException": "Har undantag", + "IpAddress": "IP-adress", + "Time": "Tid", + "Date": "Datum", + "Duration": "Varaktighet", + "Detail": "Detalj", + "Overall": "Övergripande", + "Actions": "ÅtgĂ€rder", + "ClientIpAddress": "Klientens IP-adress", + "ClientName": "Kundens namn", + "BrowserInfo": "Info om webblĂ€sare", + "Url": "URL", + "UserName": "AnvĂ€ndarens namn", + "TenantImpersonator": "Imitation av hyresgĂ€st", + "UserImpersonator": "AnvĂ€ndarimitatör", + "UrlFilter": "URL-filter", + "Exceptions": "Undantag", + "Comments": "Kommentarer", + "HttpStatusCode": "HTTP-statuskod", + "HttpStatusCodeFilter": "Filter för HTTP-statuskod", + "ServiceName": "Service", + "MethodName": "Metod", + "CorrelationId": "Korrelation Id", + "ApplicationName": "Applikationens namn", + "ExecutionDuration": "Varaktighet", + "ExtraProperties": "Extra egenskaper", + "MaxDuration": "Max. varaktighet", + "MinDuration": "Min. varaktighet", + "MinMaxDuration": "Varaktighet (min. - max.)", + "{0}Milliseconds": "{0} millisekunder", + "ExecutionTime": "Tid", + "Parameters": "Parametrar", + "EntityTypeFullName": "Entitetstyp FullstĂ€ndigt namn", + "Entity": "Entitet", + "ChangeType": "Ändra typ", + "ChangeTime": "Tid", + "NewValue": "Nytt vĂ€rde", + "OriginalValue": "Ursprungligt vĂ€rde", + "PropertyName": "Namn pĂ„ fastighet", + "PropertyTypeFullName": "Fastighetstyp FullstĂ€ndigt namn", + "Yes": "Ja", + "No": "Nej", + "Changes": "FörĂ€ndringar", + "AverageExecutionDurationInLogsPerDay": "Genomsnittlig exekveringstid", + "AverageExecutionDurationInMilliseconds": "Genomsnittlig exekveringstid i millisekunder", + "ErrorRateInLogs": "Felprocent i loggar", + "Success": "FramgĂ„ng", + "Fault": "Fel", + "NoChanges": "Ingen förĂ€ndring(ar)", + "EntityChanges": "FörĂ€ndringar av enheter", + "EntityId": "Entitet Id", + "EntityChangeStartTime": "Min Ă€ndringsdatum", + "EntityChangeEndTime": "Max Ă€ndringsdatum", + "EntityHistory": "Enhetens historia", + "DaysAgoTitle": "{0} {1}.", + "DaysAgoWithUserTitle": "{0} {1} av {2}.", + "Created": "Skapad", + "Updated": "Uppdaterad", + "Deleted": "Borttagen", + "ChangeHistory": "Ändra historik", + "FullChangeHistory": "FullstĂ€ndig Ă€ndringshistorik", + "ChangeDetails": "Ändra detaljer", + "DurationMs": "Varaktighet (ms)", + "StartDate": "Startdatum", + "EndDate": "Slutdatum", + "Feature:AuditLoggingGroup": "Granskning av loggning", + "Feature:AuditLoggingEnable": "Aktivera granskningsloggning sida", + "Feature:AuditLoggingEnableDescription": "Aktivera sidan för granskningsloggning i programmet.", + "Feature:AuditLoggingSettingManagementEnable": "Aktivera hantering av instĂ€llningar för granskningslogg", + "Feature:AuditLoggingSettingManagementEnableDescription": "Aktivera konfigurationen av instĂ€llningshanteringen för granskningsloggen i programmet.", + "InvalidAuditLogDeletionSettings": "Ogiltiga instĂ€llningar för radering av revisionslogg. Om radering Ă€r aktiverad ska perioden vara större Ă€n 0 dagar.", + "AuditLogSettingsGeneral": "AllmĂ€nt", + "AuditLogSettingsGlobal": "Globalt", + "DisplayName:IsPeriodicDeleterEnabled": "Möjliggör uppstĂ€dning av hela systemet", + "Description:IsPeriodicDeleterEnabled": "Om detta alternativ Ă€r avaktiverat fungerar inte den periodiska raderingen. Granskningsloggar kommer inte att raderas automatiskt.", + "DisplayName:GlobalIsExpiredDeleterEnabled": "Aktivera stĂ€dservice för alla hyresgĂ€ster och vĂ€rd", + "Description:GlobalIsExpiredDeleterEnabled": "Om det hĂ€r alternativet Ă€r aktiverat raderas alla förfallna objekt för hyresgĂ€ster och vĂ€rd automatiskt om det inte har en specifik instĂ€llning.", + "DisplayName:IsExpiredDeleterEnabled": "Möjliggör stĂ€dning", + "Description:IsExpiredDeleterEnabled": "Om detta alternativ Ă€r aktiverat raderas de utgĂ„ngna artiklarna automatiskt.", + "DisplayName:ExpiredDeleterPeriod": "UtgĂ„ngen raderingsperiod för objekt", + "Description:ExpiredDeleterPeriod": "StĂ€ll in antalet dagar efter vilka utgĂ„ngna objekt automatiskt ska raderas.", + "ExpiredDeleterPeriodUnit": "dag(ar)", + "AuditLogsBeforeXWillBeDeleted": "Granskningsloggar före {0} kommer att raderas." + } +} \ No newline at end of file diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/Volo.Abp.AuditLogging.Domain.abppkg.analyze.json b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/Volo.Abp.AuditLogging.Domain.abppkg.analyze.json index 9d2726bc18..92016b016f 100644 --- a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/Volo.Abp.AuditLogging.Domain.abppkg.analyze.json +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/Volo.Abp.AuditLogging.Domain.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Abp.AuditLogging.Domain", - "hash": "fa171768247503b44e7e57d4518d2ef8", + "hash": "", "contents": [ { "namespace": "Volo.Abp.AuditLogging", @@ -274,7 +274,7 @@ { "name": "IMultiTenant", "namespace": "Volo.Abp.MultiTenancy", - "declaringAssemblyName": "Volo.Abp.MultiTenancy", + "declaringAssemblyName": "Volo.Abp.MultiTenancy.Abstractions", "fullName": "Volo.Abp.MultiTenancy.IMultiTenant" } ], @@ -486,6 +486,7 @@ "methods": [ { "returnType": "List", + "namespace": "Volo.Abp.AuditLogging", "name": "GetListAsync", "summary": null, "isAsync": true, @@ -528,6 +529,11 @@ "name": "url", "isOptional": true }, + { + "type": "String", + "name": "clientId", + "isOptional": true + }, { "type": "Nullable", "name": "userId", @@ -587,6 +593,7 @@ }, { "returnType": "Int64", + "namespace": "Volo.Abp.AuditLogging", "name": "GetCountAsync", "summary": null, "isAsync": true, @@ -614,6 +621,11 @@ "name": "url", "isOptional": true }, + { + "type": "String", + "name": "clientId", + "isOptional": true + }, { "type": "Nullable", "name": "userId", @@ -668,6 +680,7 @@ }, { "returnType": "Dictionary", + "namespace": "Volo.Abp.AuditLogging", "name": "GetAverageExecutionDurationPerDayAsync", "summary": null, "isAsync": true, @@ -694,6 +707,7 @@ }, { "returnType": "EntityChange", + "namespace": "Volo.Abp.AuditLogging", "name": "GetEntityChange", "summary": null, "isAsync": true, @@ -715,6 +729,7 @@ }, { "returnType": "List", + "namespace": "Volo.Abp.AuditLogging", "name": "GetEntityChangeListAsync", "summary": null, "isAsync": true, @@ -781,6 +796,7 @@ }, { "returnType": "Int64", + "namespace": "Volo.Abp.AuditLogging", "name": "GetEntityChangeCountAsync", "summary": null, "isAsync": true, @@ -827,6 +843,7 @@ }, { "returnType": "EntityChangeWithUsername", + "namespace": "Volo.Abp.AuditLogging", "name": "GetEntityChangeWithUsernameAsync", "summary": null, "isAsync": true, @@ -848,6 +865,7 @@ }, { "returnType": "List", + "namespace": "Volo.Abp.AuditLogging", "name": "GetEntityChangesWithUsernameAsync", "summary": null, "isAsync": true, diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/Volo.Abp.AuditLogging.EntityFrameworkCore.abppkg.analyze.json b/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/Volo.Abp.AuditLogging.EntityFrameworkCore.abppkg.analyze.json index 5e5f6b6373..5d090598d4 100644 --- a/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/Volo.Abp.AuditLogging.EntityFrameworkCore.abppkg.analyze.json +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/Volo.Abp.AuditLogging.EntityFrameworkCore.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Abp.AuditLogging.EntityFrameworkCore", - "hash": "ce7134690167eded17ba2eac28d2d34e", + "hash": "", "contents": [ { "namespace": "Volo.Abp.AuditLogging.EntityFrameworkCore", @@ -67,33 +67,27 @@ { "namespace": "Volo.Abp.AuditLogging.EntityFrameworkCore", "connectionStringName": "AbpAuditLogging", - "databaseTables": [ - { - "entityFullName": "Volo.Abp.AuditLogging.AuditLog", - "contentType": "databaseTable", - "name": "AbpAuditLogs", - "summary": null - }, - { - "entityFullName": "Volo.Abp.AuditLogging.AuditLogAction", - "contentType": "databaseTable", - "name": "AbpAuditLogActions", - "summary": null - }, - { - "entityFullName": "Volo.Abp.AuditLogging.EntityChange", - "contentType": "databaseTable", - "name": "AbpEntityChanges", - "summary": null - }, + "databaseTables": [], + "replacedDbContexts": [], + "modelBuilderExtensionMethods": [ { - "entityFullName": "Volo.Abp.AuditLogging.EntityPropertyChange", - "contentType": "databaseTable", - "name": "AbpEntityPropertyChanges", - "summary": null + "returnType": "Void", + "namespace": "Volo.Abp.AuditLogging.EntityFrameworkCore", + "name": "ConfigureAuditLogging", + "summary": null, + "isAsync": false, + "isPublic": true, + "isPrivate": false, + "isStatic": true, + "parameters": [ + { + "type": "ModelBuilder", + "name": "builder", + "isOptional": false + } + ] } ], - "replacedDbContexts": [], "implementingInterfaces": [ { "name": "IInfrastructure", @@ -149,6 +143,12 @@ "declaringAssemblyName": "Volo.Abp.EntityFrameworkCore", "fullName": "Volo.Abp.EntityFrameworkCore.IEfCoreDbContext" }, + { + "name": "IAbpEfCoreDbFunctionContext", + "namespace": "Volo.Abp.EntityFrameworkCore.GlobalFilters", + "declaringAssemblyName": "Volo.Abp.EntityFrameworkCore", + "fullName": "Volo.Abp.EntityFrameworkCore.GlobalFilters.IAbpEfCoreDbFunctionContext" + }, { "name": "ITransientDependency", "namespace": "Volo.Abp.DependencyInjection", diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/Volo.Abp.AuditLogging.MongoDB.abppkg.analyze.json b/modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/Volo.Abp.AuditLogging.MongoDB.abppkg.analyze.json index 7b26febfce..93652f22ec 100644 --- a/modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/Volo.Abp.AuditLogging.MongoDB.abppkg.analyze.json +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/Volo.Abp.AuditLogging.MongoDB.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Abp.AuditLogging.MongoDB", - "hash": "ce6dfe92b247a77b0138c47e0da4a98c", + "hash": "", "contents": [ { "namespace": "Volo.Abp.AuditLogging.MongoDB", @@ -71,7 +71,7 @@ { "entityFullName": "Volo.Abp.AuditLogging.AuditLog", "contentType": "databaseCollection", - "name": "AbpAuditLogs", + "name": "AuditLogs", "summary": null } ], diff --git a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain.Shared/Volo.Abp.BackgroundJobs.Domain.Shared.abppkg.analyze.json b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain.Shared/Volo.Abp.BackgroundJobs.Domain.Shared.abppkg.analyze.json index c916e58771..40eeda286c 100644 --- a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain.Shared/Volo.Abp.BackgroundJobs.Domain.Shared.abppkg.analyze.json +++ b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain.Shared/Volo.Abp.BackgroundJobs.Domain.Shared.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Abp.BackgroundJobs.Domain.Shared", - "hash": "ad745dc8f75ef6e5b391ee5eca14a895", + "hash": "", "contents": [ { "namespace": "Volo.Abp.BackgroundJobs", diff --git a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain/Volo.Abp.BackgroundJobs.Domain.abppkg.analyze.json b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain/Volo.Abp.BackgroundJobs.Domain.abppkg.analyze.json index e969d25819..f792712158 100644 --- a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain/Volo.Abp.BackgroundJobs.Domain.abppkg.analyze.json +++ b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain/Volo.Abp.BackgroundJobs.Domain.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Abp.BackgroundJobs.Domain", - "hash": "9135b4c99ca5f16a980041e8621fb415", + "hash": "", "contents": [ { "namespace": "Volo.Abp.BackgroundJobs", @@ -222,6 +222,7 @@ "methods": [ { "returnType": "List", + "namespace": "Volo.Abp.BackgroundJobs", "name": "GetWaitingListAsync", "summary": null, "isAsync": true, diff --git a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.EntityFrameworkCore/Volo.Abp.BackgroundJobs.EntityFrameworkCore.abppkg.analyze.json b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.EntityFrameworkCore/Volo.Abp.BackgroundJobs.EntityFrameworkCore.abppkg.analyze.json index 41772a0d4f..fd7de5ddf3 100644 --- a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.EntityFrameworkCore/Volo.Abp.BackgroundJobs.EntityFrameworkCore.abppkg.analyze.json +++ b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.EntityFrameworkCore/Volo.Abp.BackgroundJobs.EntityFrameworkCore.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Abp.BackgroundJobs.EntityFrameworkCore", - "hash": "093b92974b3f005cca5e441d8cc1bafb", + "hash": "", "contents": [ { "namespace": "Volo.Abp.BackgroundJobs.EntityFrameworkCore", @@ -67,15 +67,27 @@ { "namespace": "Volo.Abp.BackgroundJobs.EntityFrameworkCore", "connectionStringName": "AbpBackgroundJobs", - "databaseTables": [ + "databaseTables": [], + "replacedDbContexts": [], + "modelBuilderExtensionMethods": [ { - "entityFullName": "Volo.Abp.BackgroundJobs.BackgroundJobRecord", - "contentType": "databaseTable", - "name": "AbpBackgroundJobs", - "summary": null + "returnType": "Void", + "namespace": "Volo.Abp.BackgroundJobs.EntityFrameworkCore", + "name": "ConfigureBackgroundJobs", + "summary": null, + "isAsync": false, + "isPublic": true, + "isPrivate": false, + "isStatic": true, + "parameters": [ + { + "type": "ModelBuilder", + "name": "builder", + "isOptional": false + } + ] } ], - "replacedDbContexts": [], "implementingInterfaces": [ { "name": "IInfrastructure", @@ -131,6 +143,12 @@ "declaringAssemblyName": "Volo.Abp.EntityFrameworkCore", "fullName": "Volo.Abp.EntityFrameworkCore.IEfCoreDbContext" }, + { + "name": "IAbpEfCoreDbFunctionContext", + "namespace": "Volo.Abp.EntityFrameworkCore.GlobalFilters", + "declaringAssemblyName": "Volo.Abp.EntityFrameworkCore", + "fullName": "Volo.Abp.EntityFrameworkCore.GlobalFilters.IAbpEfCoreDbFunctionContext" + }, { "name": "ITransientDependency", "namespace": "Volo.Abp.DependencyInjection", diff --git a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.MongoDB/Volo.Abp.BackgroundJobs.MongoDB.abppkg.analyze.json b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.MongoDB/Volo.Abp.BackgroundJobs.MongoDB.abppkg.analyze.json index 3c333134f7..d6e11b2a6f 100644 --- a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.MongoDB/Volo.Abp.BackgroundJobs.MongoDB.abppkg.analyze.json +++ b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.MongoDB/Volo.Abp.BackgroundJobs.MongoDB.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Abp.BackgroundJobs.MongoDB", - "hash": "43dcde5f0f68f0b06ce3158a154b58e1", + "hash": "", "contents": [ { "namespace": "Volo.Abp.BackgroundJobs.MongoDB", @@ -71,7 +71,7 @@ { "entityFullName": "Volo.Abp.BackgroundJobs.BackgroundJobRecord", "contentType": "databaseCollection", - "name": "AbpBackgroundJobs", + "name": "BackgroundJobs", "summary": null } ], diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.abppkg.analyze.json b/modules/basic-theme/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.abppkg.analyze.json index 0e1d29e0df..14797aa792 100644 --- a/modules/basic-theme/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.abppkg.analyze.json +++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic", - "hash": "69ff20961072c952f3a841d6e783cba9", + "hash": "", "contents": [ { "namespace": "Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic", diff --git a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/package.json b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/package.json index 75416ec342..634b99a3cb 100644 --- a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/package.json +++ b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/package.json @@ -3,8 +3,8 @@ "name": "asp.net", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.shared": "~8.3.0-rc.1", - "@abp/prismjs": "~8.3.0-rc.1", - "@abp/highlight.js": "~8.3.0-rc.1" + "@abp/aspnetcore.mvc.ui.theme.shared": "~8.3.0", + "@abp/prismjs": "~8.3.0", + "@abp/highlight.js": "~8.3.0" } } diff --git a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/yarn.lock b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/yarn.lock index 0d7bb87257..214c3a3fdd 100644 --- a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/yarn.lock +++ b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/yarn.lock @@ -2,212 +2,212 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.shared@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-8.3.0-rc.1.tgz#cec5ca6c5a5f61a361425b9d55711beb0db4eb81" - integrity sha512-qLAzDwiQvRB8xDs6bkeZ4YLMUuTb6Dz/GmWT61dSMUAhRCTPqPi6aWnt9fiM99HbkP7APLPb7d+o5ho6FoktNQ== - dependencies: - "@abp/aspnetcore.mvc.ui" "~8.3.0-rc.1" - "@abp/bootstrap" "~8.3.0-rc.1" - "@abp/bootstrap-datepicker" "~8.3.0-rc.1" - "@abp/bootstrap-daterangepicker" "~8.3.0-rc.1" - "@abp/datatables.net-bs5" "~8.3.0-rc.1" - "@abp/font-awesome" "~8.3.0-rc.1" - "@abp/jquery-form" "~8.3.0-rc.1" - "@abp/jquery-validation-unobtrusive" "~8.3.0-rc.1" - "@abp/lodash" "~8.3.0-rc.1" - "@abp/luxon" "~8.3.0-rc.1" - "@abp/malihu-custom-scrollbar-plugin" "~8.3.0-rc.1" - "@abp/moment" "~8.3.0-rc.1" - "@abp/select2" "~8.3.0-rc.1" - "@abp/sweetalert2" "~8.3.0-rc.1" - "@abp/timeago" "~8.3.0-rc.1" - "@abp/toastr" "~8.3.0-rc.1" - -"@abp/aspnetcore.mvc.ui@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-8.3.0-rc.1.tgz#7329e4878e64277dfed88eef5e9d1715d1af925f" - integrity sha512-NPWrtJ+Il+SI0oPQ5gc1Lc9vfPZvHbe0d/5y5qGIdwKY1F5txIyRGesc0najOLIUe7Z66AInyfNuNeoaFNR0fg== +"@abp/aspnetcore.mvc.ui.theme.shared@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-8.3.0.tgz#5d6bb5181a62770e9cb967980b77e75c115c5ed7" + integrity sha512-o/0eh8jLS+YJiseTKzzioUz0vNnMFzyoz+mkyA4PlO1gqw2JFhzPhTBZ3cuyV9QlxUfEA8dWAkqAUX6vqiHwkw== + dependencies: + "@abp/aspnetcore.mvc.ui" "~8.3.0" + "@abp/bootstrap" "~8.3.0" + "@abp/bootstrap-datepicker" "~8.3.0" + "@abp/bootstrap-daterangepicker" "~8.3.0" + "@abp/datatables.net-bs5" "~8.3.0" + "@abp/font-awesome" "~8.3.0" + "@abp/jquery-form" "~8.3.0" + "@abp/jquery-validation-unobtrusive" "~8.3.0" + "@abp/lodash" "~8.3.0" + "@abp/luxon" "~8.3.0" + "@abp/malihu-custom-scrollbar-plugin" "~8.3.0" + "@abp/moment" "~8.3.0" + "@abp/select2" "~8.3.0" + "@abp/sweetalert2" "~8.3.0" + "@abp/timeago" "~8.3.0" + "@abp/toastr" "~8.3.0" + +"@abp/aspnetcore.mvc.ui@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-8.3.0.tgz#d7ba0539bfcc6661a347dea7f952489010b3e816" + integrity sha512-OxgZhLKiXGFYYpNJ5O/IbhinsniiBPv9586e+1Soar0GckCMIIegJxnJb1Bo1O75blrcK2cIU6LqjRT1FXt2Lw== dependencies: ansi-colors "^4.1.3" -"@abp/bootstrap-datepicker@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-8.3.0-rc.1.tgz#d3bcb5f0063df631ad45c7f822195fc4e5c5b4e2" - integrity sha512-oqbwh9dz8XNfh+eZou8GvcEUYA1J0qr3ABA1r72DJZ/nzfLQX7pUO8NkkaDLpVwrly64rfOlxV4LT7g5muoAsw== +"@abp/bootstrap-datepicker@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-8.3.0.tgz#8c1bf9efec37b671d8f28b8b1e89c1ac66684267" + integrity sha512-KCwMtm7x+cnKPeNMzhjDJUce0stwu4e57ibmvA6sMf1tmj+yB256O4E2hIDDohiT3vP/zV8HVHX6uATlcmGC9w== dependencies: bootstrap-datepicker "^1.10.0" -"@abp/bootstrap-daterangepicker@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-8.3.0-rc.1.tgz#33958a1806a070db4fb01eb40a0897bfd16cf1f5" - integrity sha512-egtnxhRMCu56RV2bIRBLLTly2Y4W/2jwl9el+9Stjc8IN91j2UL5E4t5qn3zI3vXvVX4w5vP+TthQj0grFK0/Q== +"@abp/bootstrap-daterangepicker@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-8.3.0.tgz#2b8ed978333502677916f88cbb3e1d1b1c8a3a17" + integrity sha512-uQSfuCQogl4BujdqvtdAoSE+z32ci8FT5+i3gLfpqbgTaxvY/Kv5NxAUH5/1sjnuAE7SMWO+eVvI3V0pXgQohg== dependencies: bootstrap-daterangepicker "^3.1.0" -"@abp/bootstrap@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-8.3.0-rc.1.tgz#3ca994e4c003d056024dcd533221461cccd14f2a" - integrity sha512-xrs0JOYFEPzi3V6s9d3SCj0CxY06bBmFUK5aETgKUiXBXa4vU2YoNbnrCtDUvV+mn517FRuA/j3RaFkTWYg48g== +"@abp/bootstrap@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-8.3.0.tgz#96d6ea7e6ac30f6e34e495a4224f56f7b2a1a7a3" + integrity sha512-5AmdTtakmWhZmHrb7ibvvf+KwF9OGadpAe7Kv9mNEE02K2qkp7Xw4r5o/bgVl7YfLC1FA6GZZXrV2s2t0gjHtg== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" bootstrap "^5.3.3" -"@abp/clipboard@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-8.3.0-rc.1.tgz#65c6cd6672fc248097659908edd4a9fe92664475" - integrity sha512-CVyO/8BK2WnegwrEvBJCNcbkI5l31U/pZBn7DBUGpiawlLiyYZOtGFUgu4sIUTEfyaRdLiCIPd0eMzDPKMVTgA== +"@abp/clipboard@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-8.3.0.tgz#1b171e533f768cf42c8fc0c9c67fac1c636fee8c" + integrity sha512-T0O4OaMxLLYztAxyvEc3onEOpGHB/C8/jDcvJwd7mgpLoi9zXVfHwpnzkx/egfNJMzp49STD6Jc+jACi8Uq+CQ== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" clipboard "^2.0.11" -"@abp/core@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-8.3.0-rc.1.tgz#771c7ecd27319201a8236f0bc6b5601188059325" - integrity sha512-IB8Baa3LIv3XYja6iBw6VSnITGcRseGyY8wBNEXRiB+ni21Bv//NMyohdOot6G+HlnHlrB7kFeCX+gWu+LuYkg== +"@abp/core@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-8.3.0.tgz#3a68f5a9549efcc3e13500e301f2576751b51445" + integrity sha512-zrxnZi4qij/Y4AZWaXuPqs3Dd7gBtU/onX7FkYxLgQDxYBfx+84QAnPRNRFKMWaD/wKbTUB0wA66U3t2aiQX9Q== dependencies: - "@abp/utils" "~8.3.0-rc.1" + "@abp/utils" "~8.3.0" -"@abp/datatables.net-bs5@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-8.3.0-rc.1.tgz#b53dc353f485952439ea10035df0851d520efe96" - integrity sha512-89wpkG6u1YBR98OmuEbvs4VdR5n8L4n3Z8GiHwuKr2FpEOx7cAXYKsx/8ifmICMLPiMIvFrtOEBrrv5ZKANsAA== +"@abp/datatables.net-bs5@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-8.3.0.tgz#21822ae4912a561afe9112925185aece03fcd0eb" + integrity sha512-GOGYSSHp3iPUDFRX2Y3C0wkiCOJDuYuK/zUSzQLNpOvBMZO+I/oWBcZM+qkVowIzsoRlAGV9+CVV2B/B05qidA== dependencies: - "@abp/datatables.net" "~8.3.0-rc.1" + "@abp/datatables.net" "~8.3.0" datatables.net-bs5 "^2.0.8" -"@abp/datatables.net@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-8.3.0-rc.1.tgz#bb70608994c4a52bd15331f76af718353c843f94" - integrity sha512-G42D6W0Xb8NIQxJWGpcxLOjbZ4CHtrm9oBG5+GfVmQEPGfl8r+DYdrYDAkysDg483s+48POH7NC3L1LOlxlqRg== +"@abp/datatables.net@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-8.3.0.tgz#ff697758ce9309ba8311f23aec921c4722588c8b" + integrity sha512-4dIdv7eN1tVouOUrlF+MIdg8zQpecyH61waqLgy1q5jMZQivrTSFZ7UWMG3WVOAYjw5zSUZHZPbzA+ttnaOPkg== dependencies: - "@abp/jquery" "~8.3.0-rc.1" + "@abp/jquery" "~8.3.0" datatables.net "^2.0.8" -"@abp/font-awesome@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-8.3.0-rc.1.tgz#ea05d7e08395b1894eefe6f912ae0534fd75e69a" - integrity sha512-GN1xZ76RzQC3aqU2m19vYsyfESCeoSsp8AtvilmeqsjlzhuLLdQ6UWSxMqRqE22TCWRXbA/d/7IAb12TB1mawg== +"@abp/font-awesome@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-8.3.0.tgz#9e4e9adc08dfca52c0a07d1608c5e5662675a4c9" + integrity sha512-NRxvM/dzvQC2Cj/F5i07XB/i6IVTmXcO9sOq6TWosWib0wGaPxRbCSjy8QUAYSD1QYaVQ30XMb3XXImaMGyd8A== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" "@fortawesome/fontawesome-free" "^6.5.2" -"@abp/highlight.js@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/highlight.js/-/highlight.js-8.3.0-rc.1.tgz#14c1904f860543581440c67dc01fea109b61cccf" - integrity sha512-lnJtMxTt9gkZ24ZZZ5bAMfK8T3Sbwe7QxyXfQ2+oEm2NosNNbug2hLOHtINdFThp1bDN/bD+h0yXAWNAxhDSPQ== +"@abp/highlight.js@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/highlight.js/-/highlight.js-8.3.0.tgz#fabd11a8ef7cd0e379b4c9b359d66b4aa7585e30" + integrity sha512-SHvGXqQrZGuNmup32FisVHrWCdTJyEzHgp6y8Twx1FaP1e0hSN3QK6Jw4Do600ZKI9n5xCK+kMCpdJau8I6bIg== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" "@highlightjs/cdn-assets" "~11.9.0" -"@abp/jquery-form@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-8.3.0-rc.1.tgz#21025048f44028a5cb1ced7414cb48af00e91bff" - integrity sha512-mVZzEJKbhiYmXK2yZRZAJwO5e7C2N0lj8ueOYPiFG6h4UKLbKPHQdIrkapyc88VirrELe1hnhJJbQ56dsQWeyg== +"@abp/jquery-form@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-8.3.0.tgz#fa2ad2fedbe3d3528ee94cbbd4f94d48f0cb5e4d" + integrity sha512-olP9FmpNVTbOIewsVua0moHVYXw4Sl3chFbvTDLG6vRBohLSjllUXfgY3UEIVWR1PCqnAg+iEJZl9NHB9iOLBg== dependencies: - "@abp/jquery" "~8.3.0-rc.1" + "@abp/jquery" "~8.3.0" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-8.3.0-rc.1.tgz#63042715391ca63f273874ff66fca4b20330d31b" - integrity sha512-EKQf733+HS9bIVQhMgAHYZfCY663GqNv8KUcCIuQOHPt5DWU49ygYhawkcYIzUKd2Gy9+ZtyWLkWmoBxTnwlmw== +"@abp/jquery-validation-unobtrusive@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-8.3.0.tgz#0992cdd33170df83c79aa3371038c0b30e451521" + integrity sha512-9hidjq8x8sTnP5O3K2b2x9NpxvPd9WB03ENR6OfvM89kfSmQapSvBZTlCu80YK9NaQJ6MLQRLYOCuc3GHcj3EQ== dependencies: - "@abp/jquery-validation" "~8.3.0-rc.1" + "@abp/jquery-validation" "~8.3.0" jquery-validation-unobtrusive "^4.0.0" -"@abp/jquery-validation@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-8.3.0-rc.1.tgz#8c82189ba7c3614f7306c2bf958b3717a6a4e702" - integrity sha512-Fr8AI//7iV743S6bw4ixE5qOu+af3HfZSivQJnYVVTbR/75gPqI/xRe6u/k82TJIBM7IaspQ4QdruMuvnJyBpQ== +"@abp/jquery-validation@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-8.3.0.tgz#bd6a72c6d86f116abe3b5d2adf3752bdbbcca887" + integrity sha512-6l5BZSa3N0Fou6Se7MfUSnI2dD4SYhZ2V988bgPJQ6p37XBOZ2OAj7LEIf5FSjtUzXjao/6/vqjkPNYreNikig== dependencies: - "@abp/jquery" "~8.3.0-rc.1" + "@abp/jquery" "~8.3.0" jquery-validation "^1.20.1" -"@abp/jquery@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-8.3.0-rc.1.tgz#a181c6749d58690b3265705959d8c818296896f3" - integrity sha512-fXs35cDLAw66irfHsFIWD41RKzpLABkULLoMwxfB76nOVPdV7qlWrXoI2O/du3xhCqBqHR4fS8xjwE6kFvkdLQ== +"@abp/jquery@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-8.3.0.tgz#9be5ef2f769680226e6a1a981026590caf3b57ef" + integrity sha512-GsFY+n3EtS6B0pAoKd+xMnt5Dzi5bHvIbhLgDgfQfOBzAy3twGRWsPQ3nkuXXm8TppwujMNowU1oiLKPPm0AOA== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" jquery "~3.7.1" -"@abp/lodash@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-8.3.0-rc.1.tgz#32f8805031f73b9d5bdc338afe49739c4ebc3ce9" - integrity sha512-UBGlG5+tFpyAPMuwpkY7K/g21c+d3Aq3HbFmcIilUEIsJ+yJqj95xhRh6t/LSwJCo5ntdSCgVC85q0kD0fQlQA== +"@abp/lodash@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-8.3.0.tgz#f5a0a496c999886f2d6999067bfac2e1f0c3969c" + integrity sha512-BiAsONbKR/RKG3WjRaMWVmhNe1ELEsykVq+ogG1Rhk3kwPbvze3TS8k2p0Lu/RC41/BmDUmJ5abg1pUMwkRT8w== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" lodash "^4.17.21" -"@abp/luxon@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-8.3.0-rc.1.tgz#df19773212502336c2caf6a8806b7647748f8f81" - integrity sha512-1oPx0tGyFi58T0yv/pdqJpcIRWU6ej5Sv28fRgz3J6tHam3hVPtKJPK9Ajvn6+MNVDLuMUczgVtfWEOvO2Kqrg== +"@abp/luxon@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-8.3.0.tgz#7dd3f756be1605506e26f7ac76b80cc082a12d07" + integrity sha512-8gdI5BtXkVp0sFg89QVDe8AvgQ7Qfq4JCqz2PMrKPSATR3H8GD6BCaEYpRp6CNTCjVrQjGZdzKgUyea1D3dHbw== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" luxon "^3.4.4" -"@abp/malihu-custom-scrollbar-plugin@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-8.3.0-rc.1.tgz#b57086d708082ce45e1917aeca8c92029ebd805d" - integrity sha512-4sa5e07EPW9IM7eQbvKtk78gd/bESYhTsl+BeWSKeqjj5wwwPYf4GIEvfJM7JVnhYwh1IPYDEkTv9QNYLczXKQ== +"@abp/malihu-custom-scrollbar-plugin@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-8.3.0.tgz#c88c132c3402bbb02054ca7d446051950f87a817" + integrity sha512-nd/mb6LJa6fMxal8PGcIjIRIoZ/UHCd01WDC9YI2H4wGCGx0CA0JyHso5oc/OEzJhUL8ujO/vYm9uLb7YahPtA== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/moment@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-8.3.0-rc.1.tgz#0ba9d64ca6d7b454af7aaa63e54be267f333e1fe" - integrity sha512-YbVEDg3m+D5KMcTCBEnor/tFgmk9IeL4pF/oChYQGXLeyohY7vfmK68owAnEDN61nCRXng9xykiZu2bLq829WA== +"@abp/moment@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-8.3.0.tgz#8e4f7a523ab76ef9e4cd96a399560bad38d38d1a" + integrity sha512-LywSsKuQ2GN/Btmle6CcTKa811zbvUWdC+RLQA792K9HyBs6LvN0qRRluEQZgplairRgh2pDOg8tdFlUERkv2w== dependencies: moment "^2.30.1" -"@abp/prismjs@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-8.3.0-rc.1.tgz#82f98db7e3a5e5e535ecb0452c84a5fda57b5801" - integrity sha512-kvO7fU9KfXNK44mL9QDtGuDD3ebiXTd5nKNxgrsneHhYsdNiWwXzqWpZlfs7t9nqSydLzqWkQZ7we01GoxeQ/g== +"@abp/prismjs@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-8.3.0.tgz#0c87c63294d1452ed7152083d2fb6e70aa3aeae6" + integrity sha512-3wpwbqqlGRfQSLcBP+Qb2TKOoVGZVYYwOP6dP3So9ev8J5gFMDEizH9zLwRVHYrrsZZP8/etYnyZ0hn7ewuI5Q== dependencies: - "@abp/clipboard" "~8.3.0-rc.1" - "@abp/core" "~8.3.0-rc.1" + "@abp/clipboard" "~8.3.0" + "@abp/core" "~8.3.0" prismjs "^1.29.0" -"@abp/select2@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-8.3.0-rc.1.tgz#3eb932e05987cc1e13f72decc9ae70d47801bf7d" - integrity sha512-lZuJLiFcOEVj6cTPAA7ZfhE3v1LyivmMt8Tt7Dpvgybx2PDN1NtfLce2BCKb0MvsaTlfJMSK0ZLu3JpxCQ+Q/A== +"@abp/select2@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-8.3.0.tgz#ef4742fcd345394767f46180f61c6cabbd0b3867" + integrity sha512-bdLt2+ImxxpiZl4HGbYJpdDROQUT7/Z/+8A+6oJNacq3lNekdvufLYgTMxKru6zTbnd9j3HFKMOTE1eRjb9Xqg== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" select2 "^4.0.13" -"@abp/sweetalert2@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-8.3.0-rc.1.tgz#66d8b9ce287a71474ce37c217cd800e150a86138" - integrity sha512-b6dZbc5/nYrUz5s+lAgi561XnsASa0ZJOn6f5W2Oakm9ULzqFndapKx5f+zHeJaNArpeGDh50AjQ+lcGGw83zQ== +"@abp/sweetalert2@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-8.3.0.tgz#a63020d57e44f7940817287d3d9676288bfb85aa" + integrity sha512-ooqPM4Z2v2scnMo5l8ycTmp6t/sW4sCsvIkJ4TyM876WLQJaZxJdOao4RQWuU+dVFr9zg8cOwqLH4q7UEiO6ww== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" sweetalert2 "^11.3.6" -"@abp/timeago@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-8.3.0-rc.1.tgz#d795b9cccb190f5d42f242727ac447fe03c30db3" - integrity sha512-yJCA7PHmAxFxIvPq03iSx3LbIiDQls4AiVBO75103LEGokRUG9bg+iPA7GLkPpfNbnNgEJ7N7Gw6RQzMNRLCpA== +"@abp/timeago@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-8.3.0.tgz#b3b8d6927bf170f77af848bc1925e5ef6835bd55" + integrity sha512-Dd6xaUoF9Bp4F9WJnTsFBqY+Gt++UR7UmLvBZL/dvthkeNCu2I8MUsmshkUUjY0lIXpjZwefUOuyupQrgHXPMg== dependencies: - "@abp/jquery" "~8.3.0-rc.1" + "@abp/jquery" "~8.3.0" timeago "^1.6.7" -"@abp/toastr@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-8.3.0-rc.1.tgz#82c7f6566e604c2cf31555da3f9b0898df8a5541" - integrity sha512-0nBM4nEvDlANVulk7EKoB4Lk/1fH+UgzPOyUOyemQZAWHgPhIpa4z5yiLkCeOxN1hu/CBEe+Jo7qJblsj+v7kQ== +"@abp/toastr@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-8.3.0.tgz#e68a2bd8f731e79034594bc2c736f7c66b3df1af" + integrity sha512-aWK/RaX/FmcEKhJLjsw1A0K2c04m2fRJkmo9NwzBCSscy6Msw9IMkqNWLiFDThMU8/qKzq7wq3Vmk/C0IpeAwA== dependencies: - "@abp/jquery" "~8.3.0-rc.1" + "@abp/jquery" "~8.3.0" toastr "^2.1.4" -"@abp/utils@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-8.3.0-rc.1.tgz#7db324059f8f9c64fbb5d5a6f0c2384896ca1928" - integrity sha512-Eg4Lwv4DEDr5mfG/8ghwMPdphywZBZIxWTJCZnCWngDQ9fEn/bnYuL1WkvbVvKd10A6030wHEJXFJj2OuNdi3Q== +"@abp/utils@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-8.3.0.tgz#96ae9266ad4d833fd9d723acef7fc85fabf618d9" + integrity sha512-w/XAqza4Z8wBWRoj5uPNKbd1/bE9L/uUWk6EUSBKmljMRryWQBmaPkb1XgvrOMQIbyyF60tUvvipapQLPVh6hw== dependencies: just-compare "^2.3.0" diff --git a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/package.json b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/package.json index 9f81d00783..3f9c9e79e8 100644 --- a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/package.json +++ b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/package.json @@ -3,8 +3,8 @@ "name": "asp.net", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "~8.3.0-rc.1", - "@abp/prismjs": "~8.3.0-rc.1" + "@abp/aspnetcore.mvc.ui.theme.basic": "~8.3.0", + "@abp/prismjs": "~8.3.0" }, "devDependencies": {} } diff --git a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/yarn.lock b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/yarn.lock index 894e32644a..62c9b5489d 100644 --- a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/yarn.lock +++ b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/yarn.lock @@ -2,211 +2,211 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-8.3.0-rc.1.tgz#7254b66019b99ac8a29385c1bb2c9c658a167bc7" - integrity sha512-uMgO1VQgDOW9tMq9gl6idsBZZcL/voeMp0wkBTRORQHg0E+SyA8z0yQrg5S8hU/7zRwoZPm3K9R/Peu71jNTgQ== - dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~8.3.0-rc.1" - -"@abp/aspnetcore.mvc.ui.theme.shared@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-8.3.0-rc.1.tgz#cec5ca6c5a5f61a361425b9d55711beb0db4eb81" - integrity sha512-qLAzDwiQvRB8xDs6bkeZ4YLMUuTb6Dz/GmWT61dSMUAhRCTPqPi6aWnt9fiM99HbkP7APLPb7d+o5ho6FoktNQ== - dependencies: - "@abp/aspnetcore.mvc.ui" "~8.3.0-rc.1" - "@abp/bootstrap" "~8.3.0-rc.1" - "@abp/bootstrap-datepicker" "~8.3.0-rc.1" - "@abp/bootstrap-daterangepicker" "~8.3.0-rc.1" - "@abp/datatables.net-bs5" "~8.3.0-rc.1" - "@abp/font-awesome" "~8.3.0-rc.1" - "@abp/jquery-form" "~8.3.0-rc.1" - "@abp/jquery-validation-unobtrusive" "~8.3.0-rc.1" - "@abp/lodash" "~8.3.0-rc.1" - "@abp/luxon" "~8.3.0-rc.1" - "@abp/malihu-custom-scrollbar-plugin" "~8.3.0-rc.1" - "@abp/moment" "~8.3.0-rc.1" - "@abp/select2" "~8.3.0-rc.1" - "@abp/sweetalert2" "~8.3.0-rc.1" - "@abp/timeago" "~8.3.0-rc.1" - "@abp/toastr" "~8.3.0-rc.1" - -"@abp/aspnetcore.mvc.ui@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-8.3.0-rc.1.tgz#7329e4878e64277dfed88eef5e9d1715d1af925f" - integrity sha512-NPWrtJ+Il+SI0oPQ5gc1Lc9vfPZvHbe0d/5y5qGIdwKY1F5txIyRGesc0najOLIUe7Z66AInyfNuNeoaFNR0fg== +"@abp/aspnetcore.mvc.ui.theme.basic@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-8.3.0.tgz#a2d17eb5da2c3abfad4bcc842cfcda0e58a130a4" + integrity sha512-T2dg7WlvNSrwTCfy5wk4gqiJ/15kIjMGM4wLXIJcMYn60yGY/YeX6Q4A3R/qJzfl4JdgW5rt3GpdKv86y/ADXg== + dependencies: + "@abp/aspnetcore.mvc.ui.theme.shared" "~8.3.0" + +"@abp/aspnetcore.mvc.ui.theme.shared@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-8.3.0.tgz#5d6bb5181a62770e9cb967980b77e75c115c5ed7" + integrity sha512-o/0eh8jLS+YJiseTKzzioUz0vNnMFzyoz+mkyA4PlO1gqw2JFhzPhTBZ3cuyV9QlxUfEA8dWAkqAUX6vqiHwkw== + dependencies: + "@abp/aspnetcore.mvc.ui" "~8.3.0" + "@abp/bootstrap" "~8.3.0" + "@abp/bootstrap-datepicker" "~8.3.0" + "@abp/bootstrap-daterangepicker" "~8.3.0" + "@abp/datatables.net-bs5" "~8.3.0" + "@abp/font-awesome" "~8.3.0" + "@abp/jquery-form" "~8.3.0" + "@abp/jquery-validation-unobtrusive" "~8.3.0" + "@abp/lodash" "~8.3.0" + "@abp/luxon" "~8.3.0" + "@abp/malihu-custom-scrollbar-plugin" "~8.3.0" + "@abp/moment" "~8.3.0" + "@abp/select2" "~8.3.0" + "@abp/sweetalert2" "~8.3.0" + "@abp/timeago" "~8.3.0" + "@abp/toastr" "~8.3.0" + +"@abp/aspnetcore.mvc.ui@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-8.3.0.tgz#d7ba0539bfcc6661a347dea7f952489010b3e816" + integrity sha512-OxgZhLKiXGFYYpNJ5O/IbhinsniiBPv9586e+1Soar0GckCMIIegJxnJb1Bo1O75blrcK2cIU6LqjRT1FXt2Lw== dependencies: ansi-colors "^4.1.3" -"@abp/bootstrap-datepicker@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-8.3.0-rc.1.tgz#d3bcb5f0063df631ad45c7f822195fc4e5c5b4e2" - integrity sha512-oqbwh9dz8XNfh+eZou8GvcEUYA1J0qr3ABA1r72DJZ/nzfLQX7pUO8NkkaDLpVwrly64rfOlxV4LT7g5muoAsw== +"@abp/bootstrap-datepicker@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-8.3.0.tgz#8c1bf9efec37b671d8f28b8b1e89c1ac66684267" + integrity sha512-KCwMtm7x+cnKPeNMzhjDJUce0stwu4e57ibmvA6sMf1tmj+yB256O4E2hIDDohiT3vP/zV8HVHX6uATlcmGC9w== dependencies: bootstrap-datepicker "^1.10.0" -"@abp/bootstrap-daterangepicker@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-8.3.0-rc.1.tgz#33958a1806a070db4fb01eb40a0897bfd16cf1f5" - integrity sha512-egtnxhRMCu56RV2bIRBLLTly2Y4W/2jwl9el+9Stjc8IN91j2UL5E4t5qn3zI3vXvVX4w5vP+TthQj0grFK0/Q== +"@abp/bootstrap-daterangepicker@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-8.3.0.tgz#2b8ed978333502677916f88cbb3e1d1b1c8a3a17" + integrity sha512-uQSfuCQogl4BujdqvtdAoSE+z32ci8FT5+i3gLfpqbgTaxvY/Kv5NxAUH5/1sjnuAE7SMWO+eVvI3V0pXgQohg== dependencies: bootstrap-daterangepicker "^3.1.0" -"@abp/bootstrap@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-8.3.0-rc.1.tgz#3ca994e4c003d056024dcd533221461cccd14f2a" - integrity sha512-xrs0JOYFEPzi3V6s9d3SCj0CxY06bBmFUK5aETgKUiXBXa4vU2YoNbnrCtDUvV+mn517FRuA/j3RaFkTWYg48g== +"@abp/bootstrap@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-8.3.0.tgz#96d6ea7e6ac30f6e34e495a4224f56f7b2a1a7a3" + integrity sha512-5AmdTtakmWhZmHrb7ibvvf+KwF9OGadpAe7Kv9mNEE02K2qkp7Xw4r5o/bgVl7YfLC1FA6GZZXrV2s2t0gjHtg== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" bootstrap "^5.3.3" -"@abp/clipboard@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-8.3.0-rc.1.tgz#65c6cd6672fc248097659908edd4a9fe92664475" - integrity sha512-CVyO/8BK2WnegwrEvBJCNcbkI5l31U/pZBn7DBUGpiawlLiyYZOtGFUgu4sIUTEfyaRdLiCIPd0eMzDPKMVTgA== +"@abp/clipboard@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-8.3.0.tgz#1b171e533f768cf42c8fc0c9c67fac1c636fee8c" + integrity sha512-T0O4OaMxLLYztAxyvEc3onEOpGHB/C8/jDcvJwd7mgpLoi9zXVfHwpnzkx/egfNJMzp49STD6Jc+jACi8Uq+CQ== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" clipboard "^2.0.11" -"@abp/core@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-8.3.0-rc.1.tgz#771c7ecd27319201a8236f0bc6b5601188059325" - integrity sha512-IB8Baa3LIv3XYja6iBw6VSnITGcRseGyY8wBNEXRiB+ni21Bv//NMyohdOot6G+HlnHlrB7kFeCX+gWu+LuYkg== +"@abp/core@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-8.3.0.tgz#3a68f5a9549efcc3e13500e301f2576751b51445" + integrity sha512-zrxnZi4qij/Y4AZWaXuPqs3Dd7gBtU/onX7FkYxLgQDxYBfx+84QAnPRNRFKMWaD/wKbTUB0wA66U3t2aiQX9Q== dependencies: - "@abp/utils" "~8.3.0-rc.1" + "@abp/utils" "~8.3.0" -"@abp/datatables.net-bs5@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-8.3.0-rc.1.tgz#b53dc353f485952439ea10035df0851d520efe96" - integrity sha512-89wpkG6u1YBR98OmuEbvs4VdR5n8L4n3Z8GiHwuKr2FpEOx7cAXYKsx/8ifmICMLPiMIvFrtOEBrrv5ZKANsAA== +"@abp/datatables.net-bs5@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-8.3.0.tgz#21822ae4912a561afe9112925185aece03fcd0eb" + integrity sha512-GOGYSSHp3iPUDFRX2Y3C0wkiCOJDuYuK/zUSzQLNpOvBMZO+I/oWBcZM+qkVowIzsoRlAGV9+CVV2B/B05qidA== dependencies: - "@abp/datatables.net" "~8.3.0-rc.1" + "@abp/datatables.net" "~8.3.0" datatables.net-bs5 "^2.0.8" -"@abp/datatables.net@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-8.3.0-rc.1.tgz#bb70608994c4a52bd15331f76af718353c843f94" - integrity sha512-G42D6W0Xb8NIQxJWGpcxLOjbZ4CHtrm9oBG5+GfVmQEPGfl8r+DYdrYDAkysDg483s+48POH7NC3L1LOlxlqRg== +"@abp/datatables.net@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-8.3.0.tgz#ff697758ce9309ba8311f23aec921c4722588c8b" + integrity sha512-4dIdv7eN1tVouOUrlF+MIdg8zQpecyH61waqLgy1q5jMZQivrTSFZ7UWMG3WVOAYjw5zSUZHZPbzA+ttnaOPkg== dependencies: - "@abp/jquery" "~8.3.0-rc.1" + "@abp/jquery" "~8.3.0" datatables.net "^2.0.8" -"@abp/font-awesome@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-8.3.0-rc.1.tgz#ea05d7e08395b1894eefe6f912ae0534fd75e69a" - integrity sha512-GN1xZ76RzQC3aqU2m19vYsyfESCeoSsp8AtvilmeqsjlzhuLLdQ6UWSxMqRqE22TCWRXbA/d/7IAb12TB1mawg== +"@abp/font-awesome@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-8.3.0.tgz#9e4e9adc08dfca52c0a07d1608c5e5662675a4c9" + integrity sha512-NRxvM/dzvQC2Cj/F5i07XB/i6IVTmXcO9sOq6TWosWib0wGaPxRbCSjy8QUAYSD1QYaVQ30XMb3XXImaMGyd8A== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" "@fortawesome/fontawesome-free" "^6.5.2" -"@abp/jquery-form@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-8.3.0-rc.1.tgz#21025048f44028a5cb1ced7414cb48af00e91bff" - integrity sha512-mVZzEJKbhiYmXK2yZRZAJwO5e7C2N0lj8ueOYPiFG6h4UKLbKPHQdIrkapyc88VirrELe1hnhJJbQ56dsQWeyg== +"@abp/jquery-form@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-8.3.0.tgz#fa2ad2fedbe3d3528ee94cbbd4f94d48f0cb5e4d" + integrity sha512-olP9FmpNVTbOIewsVua0moHVYXw4Sl3chFbvTDLG6vRBohLSjllUXfgY3UEIVWR1PCqnAg+iEJZl9NHB9iOLBg== dependencies: - "@abp/jquery" "~8.3.0-rc.1" + "@abp/jquery" "~8.3.0" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-8.3.0-rc.1.tgz#63042715391ca63f273874ff66fca4b20330d31b" - integrity sha512-EKQf733+HS9bIVQhMgAHYZfCY663GqNv8KUcCIuQOHPt5DWU49ygYhawkcYIzUKd2Gy9+ZtyWLkWmoBxTnwlmw== +"@abp/jquery-validation-unobtrusive@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-8.3.0.tgz#0992cdd33170df83c79aa3371038c0b30e451521" + integrity sha512-9hidjq8x8sTnP5O3K2b2x9NpxvPd9WB03ENR6OfvM89kfSmQapSvBZTlCu80YK9NaQJ6MLQRLYOCuc3GHcj3EQ== dependencies: - "@abp/jquery-validation" "~8.3.0-rc.1" + "@abp/jquery-validation" "~8.3.0" jquery-validation-unobtrusive "^4.0.0" -"@abp/jquery-validation@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-8.3.0-rc.1.tgz#8c82189ba7c3614f7306c2bf958b3717a6a4e702" - integrity sha512-Fr8AI//7iV743S6bw4ixE5qOu+af3HfZSivQJnYVVTbR/75gPqI/xRe6u/k82TJIBM7IaspQ4QdruMuvnJyBpQ== +"@abp/jquery-validation@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-8.3.0.tgz#bd6a72c6d86f116abe3b5d2adf3752bdbbcca887" + integrity sha512-6l5BZSa3N0Fou6Se7MfUSnI2dD4SYhZ2V988bgPJQ6p37XBOZ2OAj7LEIf5FSjtUzXjao/6/vqjkPNYreNikig== dependencies: - "@abp/jquery" "~8.3.0-rc.1" + "@abp/jquery" "~8.3.0" jquery-validation "^1.20.1" -"@abp/jquery@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-8.3.0-rc.1.tgz#a181c6749d58690b3265705959d8c818296896f3" - integrity sha512-fXs35cDLAw66irfHsFIWD41RKzpLABkULLoMwxfB76nOVPdV7qlWrXoI2O/du3xhCqBqHR4fS8xjwE6kFvkdLQ== +"@abp/jquery@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-8.3.0.tgz#9be5ef2f769680226e6a1a981026590caf3b57ef" + integrity sha512-GsFY+n3EtS6B0pAoKd+xMnt5Dzi5bHvIbhLgDgfQfOBzAy3twGRWsPQ3nkuXXm8TppwujMNowU1oiLKPPm0AOA== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" jquery "~3.7.1" -"@abp/lodash@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-8.3.0-rc.1.tgz#32f8805031f73b9d5bdc338afe49739c4ebc3ce9" - integrity sha512-UBGlG5+tFpyAPMuwpkY7K/g21c+d3Aq3HbFmcIilUEIsJ+yJqj95xhRh6t/LSwJCo5ntdSCgVC85q0kD0fQlQA== +"@abp/lodash@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-8.3.0.tgz#f5a0a496c999886f2d6999067bfac2e1f0c3969c" + integrity sha512-BiAsONbKR/RKG3WjRaMWVmhNe1ELEsykVq+ogG1Rhk3kwPbvze3TS8k2p0Lu/RC41/BmDUmJ5abg1pUMwkRT8w== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" lodash "^4.17.21" -"@abp/luxon@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-8.3.0-rc.1.tgz#df19773212502336c2caf6a8806b7647748f8f81" - integrity sha512-1oPx0tGyFi58T0yv/pdqJpcIRWU6ej5Sv28fRgz3J6tHam3hVPtKJPK9Ajvn6+MNVDLuMUczgVtfWEOvO2Kqrg== +"@abp/luxon@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-8.3.0.tgz#7dd3f756be1605506e26f7ac76b80cc082a12d07" + integrity sha512-8gdI5BtXkVp0sFg89QVDe8AvgQ7Qfq4JCqz2PMrKPSATR3H8GD6BCaEYpRp6CNTCjVrQjGZdzKgUyea1D3dHbw== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" luxon "^3.4.4" -"@abp/malihu-custom-scrollbar-plugin@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-8.3.0-rc.1.tgz#b57086d708082ce45e1917aeca8c92029ebd805d" - integrity sha512-4sa5e07EPW9IM7eQbvKtk78gd/bESYhTsl+BeWSKeqjj5wwwPYf4GIEvfJM7JVnhYwh1IPYDEkTv9QNYLczXKQ== +"@abp/malihu-custom-scrollbar-plugin@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-8.3.0.tgz#c88c132c3402bbb02054ca7d446051950f87a817" + integrity sha512-nd/mb6LJa6fMxal8PGcIjIRIoZ/UHCd01WDC9YI2H4wGCGx0CA0JyHso5oc/OEzJhUL8ujO/vYm9uLb7YahPtA== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/moment@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-8.3.0-rc.1.tgz#0ba9d64ca6d7b454af7aaa63e54be267f333e1fe" - integrity sha512-YbVEDg3m+D5KMcTCBEnor/tFgmk9IeL4pF/oChYQGXLeyohY7vfmK68owAnEDN61nCRXng9xykiZu2bLq829WA== +"@abp/moment@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-8.3.0.tgz#8e4f7a523ab76ef9e4cd96a399560bad38d38d1a" + integrity sha512-LywSsKuQ2GN/Btmle6CcTKa811zbvUWdC+RLQA792K9HyBs6LvN0qRRluEQZgplairRgh2pDOg8tdFlUERkv2w== dependencies: moment "^2.30.1" -"@abp/prismjs@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-8.3.0-rc.1.tgz#82f98db7e3a5e5e535ecb0452c84a5fda57b5801" - integrity sha512-kvO7fU9KfXNK44mL9QDtGuDD3ebiXTd5nKNxgrsneHhYsdNiWwXzqWpZlfs7t9nqSydLzqWkQZ7we01GoxeQ/g== +"@abp/prismjs@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-8.3.0.tgz#0c87c63294d1452ed7152083d2fb6e70aa3aeae6" + integrity sha512-3wpwbqqlGRfQSLcBP+Qb2TKOoVGZVYYwOP6dP3So9ev8J5gFMDEizH9zLwRVHYrrsZZP8/etYnyZ0hn7ewuI5Q== dependencies: - "@abp/clipboard" "~8.3.0-rc.1" - "@abp/core" "~8.3.0-rc.1" + "@abp/clipboard" "~8.3.0" + "@abp/core" "~8.3.0" prismjs "^1.29.0" -"@abp/select2@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-8.3.0-rc.1.tgz#3eb932e05987cc1e13f72decc9ae70d47801bf7d" - integrity sha512-lZuJLiFcOEVj6cTPAA7ZfhE3v1LyivmMt8Tt7Dpvgybx2PDN1NtfLce2BCKb0MvsaTlfJMSK0ZLu3JpxCQ+Q/A== +"@abp/select2@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-8.3.0.tgz#ef4742fcd345394767f46180f61c6cabbd0b3867" + integrity sha512-bdLt2+ImxxpiZl4HGbYJpdDROQUT7/Z/+8A+6oJNacq3lNekdvufLYgTMxKru6zTbnd9j3HFKMOTE1eRjb9Xqg== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" select2 "^4.0.13" -"@abp/sweetalert2@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-8.3.0-rc.1.tgz#66d8b9ce287a71474ce37c217cd800e150a86138" - integrity sha512-b6dZbc5/nYrUz5s+lAgi561XnsASa0ZJOn6f5W2Oakm9ULzqFndapKx5f+zHeJaNArpeGDh50AjQ+lcGGw83zQ== +"@abp/sweetalert2@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-8.3.0.tgz#a63020d57e44f7940817287d3d9676288bfb85aa" + integrity sha512-ooqPM4Z2v2scnMo5l8ycTmp6t/sW4sCsvIkJ4TyM876WLQJaZxJdOao4RQWuU+dVFr9zg8cOwqLH4q7UEiO6ww== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" sweetalert2 "^11.3.6" -"@abp/timeago@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-8.3.0-rc.1.tgz#d795b9cccb190f5d42f242727ac447fe03c30db3" - integrity sha512-yJCA7PHmAxFxIvPq03iSx3LbIiDQls4AiVBO75103LEGokRUG9bg+iPA7GLkPpfNbnNgEJ7N7Gw6RQzMNRLCpA== +"@abp/timeago@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-8.3.0.tgz#b3b8d6927bf170f77af848bc1925e5ef6835bd55" + integrity sha512-Dd6xaUoF9Bp4F9WJnTsFBqY+Gt++UR7UmLvBZL/dvthkeNCu2I8MUsmshkUUjY0lIXpjZwefUOuyupQrgHXPMg== dependencies: - "@abp/jquery" "~8.3.0-rc.1" + "@abp/jquery" "~8.3.0" timeago "^1.6.7" -"@abp/toastr@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-8.3.0-rc.1.tgz#82c7f6566e604c2cf31555da3f9b0898df8a5541" - integrity sha512-0nBM4nEvDlANVulk7EKoB4Lk/1fH+UgzPOyUOyemQZAWHgPhIpa4z5yiLkCeOxN1hu/CBEe+Jo7qJblsj+v7kQ== +"@abp/toastr@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-8.3.0.tgz#e68a2bd8f731e79034594bc2c736f7c66b3df1af" + integrity sha512-aWK/RaX/FmcEKhJLjsw1A0K2c04m2fRJkmo9NwzBCSscy6Msw9IMkqNWLiFDThMU8/qKzq7wq3Vmk/C0IpeAwA== dependencies: - "@abp/jquery" "~8.3.0-rc.1" + "@abp/jquery" "~8.3.0" toastr "^2.1.4" -"@abp/utils@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-8.3.0-rc.1.tgz#7db324059f8f9c64fbb5d5a6f0c2384896ca1928" - integrity sha512-Eg4Lwv4DEDr5mfG/8ghwMPdphywZBZIxWTJCZnCWngDQ9fEn/bnYuL1WkvbVvKd10A6030wHEJXFJj2OuNdi3Q== +"@abp/utils@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-8.3.0.tgz#96ae9266ad4d833fd9d723acef7fc85fabf618d9" + integrity sha512-w/XAqza4Z8wBWRoj5uPNKbd1/bE9L/uUWk6EUSBKmljMRryWQBmaPkb1XgvrOMQIbyyF60tUvvipapQLPVh6hw== dependencies: just-compare "^2.3.0" diff --git a/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain.Shared/Volo.Abp.BlobStoring.Database.Domain.Shared.abppkg.analyze.json b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain.Shared/Volo.Abp.BlobStoring.Database.Domain.Shared.abppkg.analyze.json index ad923a8ce3..6deba88b34 100644 --- a/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain.Shared/Volo.Abp.BlobStoring.Database.Domain.Shared.abppkg.analyze.json +++ b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain.Shared/Volo.Abp.BlobStoring.Database.Domain.Shared.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Abp.BlobStoring.Database.Domain.Shared", - "hash": "ca71bff6138a518c84899353b3d88f2e", + "hash": "", "contents": [ { "namespace": "Volo.Abp.BlobStoring.Database", @@ -11,6 +11,50 @@ "name": "AbpValidationModule" } ], + "implementingInterfaces": [ + { + "name": "IAbpModule", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IAbpModule" + }, + { + "name": "IOnPreApplicationInitialization", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IOnPreApplicationInitialization" + }, + { + "name": "IOnApplicationInitialization", + "namespace": "Volo.Abp", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.IOnApplicationInitialization" + }, + { + "name": "IOnPostApplicationInitialization", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IOnPostApplicationInitialization" + }, + { + "name": "IOnApplicationShutdown", + "namespace": "Volo.Abp", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.IOnApplicationShutdown" + }, + { + "name": "IPreConfigureServices", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IPreConfigureServices" + }, + { + "name": "IPostConfigureServices", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IPostConfigureServices" + } + ], "contentType": "abpModule", "name": "BlobStoringDatabaseDomainSharedModule", "summary": null diff --git a/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain.Shared/Volo/Abp/BlobStoring/Database/Localization/sv.json b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain.Shared/Volo/Abp/BlobStoring/Database/Localization/sv.json new file mode 100644 index 0000000000..c091214de8 --- /dev/null +++ b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain.Shared/Volo/Abp/BlobStoring/Database/Localization/sv.json @@ -0,0 +1,6 @@ +{ + "culture": "sv", + "texts": { + "MyAccount": "Mitt konto" + } +} \ No newline at end of file diff --git a/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain/Volo.Abp.BlobStoring.Database.Domain.abppkg.analyze.json b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain/Volo.Abp.BlobStoring.Database.Domain.abppkg.analyze.json index 44aa7327f7..cd919d1727 100644 --- a/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain/Volo.Abp.BlobStoring.Database.Domain.abppkg.analyze.json +++ b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain/Volo.Abp.BlobStoring.Database.Domain.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Abp.BlobStoring.Database.Domain", - "hash": "4c72530134504ee1792b7e24248dc384", + "hash": "", "contents": [ { "namespace": "Volo.Abp.BlobStoring.Database", @@ -21,6 +21,50 @@ "name": "BlobStoringDatabaseDomainSharedModule" } ], + "implementingInterfaces": [ + { + "name": "IAbpModule", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IAbpModule" + }, + { + "name": "IOnPreApplicationInitialization", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IOnPreApplicationInitialization" + }, + { + "name": "IOnApplicationInitialization", + "namespace": "Volo.Abp", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.IOnApplicationInitialization" + }, + { + "name": "IOnPostApplicationInitialization", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IOnPostApplicationInitialization" + }, + { + "name": "IOnApplicationShutdown", + "namespace": "Volo.Abp", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.IOnApplicationShutdown" + }, + { + "name": "IPreConfigureServices", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IPreConfigureServices" + }, + { + "name": "IPostConfigureServices", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IPostConfigureServices" + } + ], "contentType": "abpModule", "name": "BlobStoringDatabaseDomainModule", "summary": null @@ -29,56 +73,69 @@ "baseClass": { "name": "AggregateRoot", "namespace": "Volo.Abp.Domain.Entities", - "declaringAssemblyName": "Volo.Abp.Ddd.Domain" + "declaringAssemblyName": "Volo.Abp.Ddd.Domain", + "fullName": "Volo.Abp.Domain.Entities.AggregateRoot" }, "implementingInterfaces": [ { "name": "IEntity", "namespace": "Volo.Abp.Domain.Entities", - "declaringAssemblyName": "Volo.Abp.Ddd.Domain" + "declaringAssemblyName": "Volo.Abp.Ddd.Domain", + "fullName": "Volo.Abp.Domain.Entities.IEntity" }, { "name": "IEntity", "namespace": "Volo.Abp.Domain.Entities", - "declaringAssemblyName": "Volo.Abp.Ddd.Domain" + "declaringAssemblyName": "Volo.Abp.Ddd.Domain", + "fullName": "Volo.Abp.Domain.Entities.IEntity" }, { "name": "IAggregateRoot", "namespace": "Volo.Abp.Domain.Entities", - "declaringAssemblyName": "Volo.Abp.Ddd.Domain" + "declaringAssemblyName": "Volo.Abp.Ddd.Domain", + "fullName": "Volo.Abp.Domain.Entities.IAggregateRoot" }, { "name": "IAggregateRoot", "namespace": "Volo.Abp.Domain.Entities", - "declaringAssemblyName": "Volo.Abp.Ddd.Domain" + "declaringAssemblyName": "Volo.Abp.Ddd.Domain", + "fullName": "Volo.Abp.Domain.Entities.IAggregateRoot" }, { "name": "IGeneratesDomainEvents", "namespace": "Volo.Abp.Domain.Entities", - "declaringAssemblyName": "Volo.Abp.Ddd.Domain" + "declaringAssemblyName": "Volo.Abp.Ddd.Domain", + "fullName": "Volo.Abp.Domain.Entities.IGeneratesDomainEvents" }, { "name": "IHasExtraProperties", "namespace": "Volo.Abp.Data", - "declaringAssemblyName": "Volo.Abp.ObjectExtending" + "declaringAssemblyName": "Volo.Abp.ObjectExtending", + "fullName": "Volo.Abp.Data.IHasExtraProperties" }, { "name": "IHasConcurrencyStamp", "namespace": "Volo.Abp.Domain.Entities", - "declaringAssemblyName": "Volo.Abp.Data" + "declaringAssemblyName": "Volo.Abp.Data", + "fullName": "Volo.Abp.Domain.Entities.IHasConcurrencyStamp" }, { "name": "IMultiTenant", "namespace": "Volo.Abp.MultiTenancy", - "declaringAssemblyName": "Volo.Abp.MultiTenancy" + "declaringAssemblyName": "Volo.Abp.MultiTenancy.Abstractions", + "fullName": "Volo.Abp.MultiTenancy.IMultiTenant" } ], "methods": [ { "returnType": "Void", - "isAsync": false, + "namespace": "Volo.Abp.BlobStoring.Database", "name": "SetContent", "summary": null, + "isAsync": false, + "isPublic": true, + "isPrivate": false, + "isStatic": false, "parameters": [ { "type": "Byte[]", @@ -88,10 +145,32 @@ ] } ], - "namespace": "Volo.Abp.BlobStoring.Database", - "primaryKeyType": "Guid", "collectionProperties": {}, "navigationProperties": {}, + "namespace": "Volo.Abp.BlobStoring.Database", + "primaryKeyType": "Guid", + "properties": [ + { + "type": "System.Guid", + "name": "ContainerId", + "summary": null + }, + { + "type": "System.Nullable`1[System.Guid]", + "name": "TenantId", + "summary": null + }, + { + "type": "System.String", + "name": "Name", + "summary": null + }, + { + "type": "System.Byte[]", + "name": "Content", + "summary": null + } + ], "contentType": "aggregateRoot", "name": "DatabaseBlob", "summary": null @@ -100,55 +179,76 @@ "baseClass": { "name": "AggregateRoot", "namespace": "Volo.Abp.Domain.Entities", - "declaringAssemblyName": "Volo.Abp.Ddd.Domain" + "declaringAssemblyName": "Volo.Abp.Ddd.Domain", + "fullName": "Volo.Abp.Domain.Entities.AggregateRoot" }, "implementingInterfaces": [ { "name": "IEntity", "namespace": "Volo.Abp.Domain.Entities", - "declaringAssemblyName": "Volo.Abp.Ddd.Domain" + "declaringAssemblyName": "Volo.Abp.Ddd.Domain", + "fullName": "Volo.Abp.Domain.Entities.IEntity" }, { "name": "IEntity", "namespace": "Volo.Abp.Domain.Entities", - "declaringAssemblyName": "Volo.Abp.Ddd.Domain" + "declaringAssemblyName": "Volo.Abp.Ddd.Domain", + "fullName": "Volo.Abp.Domain.Entities.IEntity" }, { "name": "IAggregateRoot", "namespace": "Volo.Abp.Domain.Entities", - "declaringAssemblyName": "Volo.Abp.Ddd.Domain" + "declaringAssemblyName": "Volo.Abp.Ddd.Domain", + "fullName": "Volo.Abp.Domain.Entities.IAggregateRoot" }, { "name": "IAggregateRoot", "namespace": "Volo.Abp.Domain.Entities", - "declaringAssemblyName": "Volo.Abp.Ddd.Domain" + "declaringAssemblyName": "Volo.Abp.Ddd.Domain", + "fullName": "Volo.Abp.Domain.Entities.IAggregateRoot" }, { "name": "IGeneratesDomainEvents", "namespace": "Volo.Abp.Domain.Entities", - "declaringAssemblyName": "Volo.Abp.Ddd.Domain" + "declaringAssemblyName": "Volo.Abp.Ddd.Domain", + "fullName": "Volo.Abp.Domain.Entities.IGeneratesDomainEvents" }, { "name": "IHasExtraProperties", "namespace": "Volo.Abp.Data", - "declaringAssemblyName": "Volo.Abp.ObjectExtending" + "declaringAssemblyName": "Volo.Abp.ObjectExtending", + "fullName": "Volo.Abp.Data.IHasExtraProperties" }, { "name": "IHasConcurrencyStamp", "namespace": "Volo.Abp.Domain.Entities", - "declaringAssemblyName": "Volo.Abp.Data" + "declaringAssemblyName": "Volo.Abp.Data", + "fullName": "Volo.Abp.Domain.Entities.IHasConcurrencyStamp" }, { "name": "IMultiTenant", "namespace": "Volo.Abp.MultiTenancy", - "declaringAssemblyName": "Volo.Abp.MultiTenancy" + "declaringAssemblyName": "Volo.Abp.MultiTenancy.Abstractions", + "fullName": "Volo.Abp.MultiTenancy.IMultiTenant" } ], "methods": [], - "namespace": "Volo.Abp.BlobStoring.Database", - "primaryKeyType": "Guid", "collectionProperties": {}, "navigationProperties": {}, + "namespace": "Volo.Abp.BlobStoring.Database", + "primaryKeyType": "Guid", + "properties": [ + { + "type": "System.Nullable`1[System.Guid]", + "name": "TenantId", + "summary": null + }, + { + "type": "System.String", + "name": "Name", + "summary": null + } + ], "contentType": "aggregateRoot", "name": "DatabaseBlobContainer", "summary": null @@ -158,12 +258,67 @@ "entityAnalyzeModel": { "namespace": "Volo.Abp.BlobStoring.Database", "primaryKeyType": "Guid", - "collectionProperties": {}, - "navigationProperties": {}, + "properties": [], "contentType": "entity", "name": "DatabaseBlobContainer", "summary": null }, + "implementingInterfaces": [ + { + "name": "IBasicRepository", + "namespace": "Volo.Abp.Domain.Repositories", + "declaringAssemblyName": "Volo.Abp.Ddd.Domain", + "fullName": "Volo.Abp.Domain.Repositories.IBasicRepository" + }, + { + "name": "IBasicRepository", + "namespace": "Volo.Abp.Domain.Repositories", + "declaringAssemblyName": "Volo.Abp.Ddd.Domain", + "fullName": "Volo.Abp.Domain.Repositories.IBasicRepository" + }, + { + "name": "IReadOnlyBasicRepository", + "namespace": "Volo.Abp.Domain.Repositories", + "declaringAssemblyName": "Volo.Abp.Ddd.Domain", + "fullName": "Volo.Abp.Domain.Repositories.IReadOnlyBasicRepository" + }, + { + "name": "IRepository", + "namespace": "Volo.Abp.Domain.Repositories", + "declaringAssemblyName": "Volo.Abp.Ddd.Domain", + "fullName": "Volo.Abp.Domain.Repositories.IRepository" + }, + { + "name": "IReadOnlyBasicRepository", + "namespace": "Volo.Abp.Domain.Repositories", + "declaringAssemblyName": "Volo.Abp.Ddd.Domain", + "fullName": "Volo.Abp.Domain.Repositories.IReadOnlyBasicRepository" + } + ], + "methods": [ + { + "returnType": "DatabaseBlobContainer", + "namespace": "Volo.Abp.BlobStoring.Database", + "name": "FindAsync", + "summary": null, + "isAsync": true, + "isPublic": true, + "isPrivate": false, + "isStatic": false, + "parameters": [ + { + "type": "String", + "name": "name", + "isOptional": false + }, + { + "type": "CancellationToken", + "name": "cancellationToken", + "isOptional": true + } + ] + } + ], "contentType": "repositoryInterface", "name": "IDatabaseBlobContainerRepository", "summary": null @@ -173,12 +328,131 @@ "entityAnalyzeModel": { "namespace": "Volo.Abp.BlobStoring.Database", "primaryKeyType": "Guid", - "collectionProperties": {}, - "navigationProperties": {}, + "properties": [], "contentType": "entity", "name": "DatabaseBlob", "summary": null }, + "implementingInterfaces": [ + { + "name": "IBasicRepository", + "namespace": "Volo.Abp.Domain.Repositories", + "declaringAssemblyName": "Volo.Abp.Ddd.Domain", + "fullName": "Volo.Abp.Domain.Repositories.IBasicRepository" + }, + { + "name": "IBasicRepository", + "namespace": "Volo.Abp.Domain.Repositories", + "declaringAssemblyName": "Volo.Abp.Ddd.Domain", + "fullName": "Volo.Abp.Domain.Repositories.IBasicRepository" + }, + { + "name": "IReadOnlyBasicRepository", + "namespace": "Volo.Abp.Domain.Repositories", + "declaringAssemblyName": "Volo.Abp.Ddd.Domain", + "fullName": "Volo.Abp.Domain.Repositories.IReadOnlyBasicRepository" + }, + { + "name": "IRepository", + "namespace": "Volo.Abp.Domain.Repositories", + "declaringAssemblyName": "Volo.Abp.Ddd.Domain", + "fullName": "Volo.Abp.Domain.Repositories.IRepository" + }, + { + "name": "IReadOnlyBasicRepository", + "namespace": "Volo.Abp.Domain.Repositories", + "declaringAssemblyName": "Volo.Abp.Ddd.Domain", + "fullName": "Volo.Abp.Domain.Repositories.IReadOnlyBasicRepository" + } + ], + "methods": [ + { + "returnType": "DatabaseBlob", + "namespace": "Volo.Abp.BlobStoring.Database", + "name": "FindAsync", + "summary": null, + "isAsync": true, + "isPublic": true, + "isPrivate": false, + "isStatic": false, + "parameters": [ + { + "type": "Guid", + "name": "containerId", + "isOptional": false + }, + { + "type": "String", + "name": "name", + "isOptional": false + }, + { + "type": "CancellationToken", + "name": "cancellationToken", + "isOptional": true + } + ] + }, + { + "returnType": "Boolean", + "namespace": "Volo.Abp.BlobStoring.Database", + "name": "ExistsAsync", + "summary": null, + "isAsync": true, + "isPublic": true, + "isPrivate": false, + "isStatic": false, + "parameters": [ + { + "type": "Guid", + "name": "containerId", + "isOptional": false + }, + { + "type": "String", + "name": "name", + "isOptional": false + }, + { + "type": "CancellationToken", + "name": "cancellationToken", + "isOptional": true + } + ] + }, + { + "returnType": "Boolean", + "namespace": "Volo.Abp.BlobStoring.Database", + "name": "DeleteAsync", + "summary": null, + "isAsync": true, + "isPublic": true, + "isPrivate": false, + "isStatic": false, + "parameters": [ + { + "type": "Guid", + "name": "containerId", + "isOptional": false + }, + { + "type": "String", + "name": "name", + "isOptional": false + }, + { + "type": "Boolean", + "name": "autoSave", + "isOptional": true + }, + { + "type": "CancellationToken", + "name": "cancellationToken", + "isOptional": true + } + ] + } + ], "contentType": "repositoryInterface", "name": "IDatabaseBlobRepository", "summary": null diff --git a/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.EntityFrameworkCore/Volo.Abp.BlobStoring.Database.EntityFrameworkCore.abppkg.analyze.json b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.EntityFrameworkCore/Volo.Abp.BlobStoring.Database.EntityFrameworkCore.abppkg.analyze.json index 132618f5a1..4cad523863 100644 --- a/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.EntityFrameworkCore/Volo.Abp.BlobStoring.Database.EntityFrameworkCore.abppkg.analyze.json +++ b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.EntityFrameworkCore/Volo.Abp.BlobStoring.Database.EntityFrameworkCore.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Abp.BlobStoring.Database.EntityFrameworkCore", - "hash": "0c136e999f8d28fc3b27414e0ff5aef7", + "hash": "", "contents": [ { "namespace": "Volo.Abp.BlobStoring.Database.EntityFrameworkCore", @@ -16,6 +16,50 @@ "name": "AbpEntityFrameworkCoreModule" } ], + "implementingInterfaces": [ + { + "name": "IAbpModule", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IAbpModule" + }, + { + "name": "IOnPreApplicationInitialization", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IOnPreApplicationInitialization" + }, + { + "name": "IOnApplicationInitialization", + "namespace": "Volo.Abp", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.IOnApplicationInitialization" + }, + { + "name": "IOnPostApplicationInitialization", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IOnPostApplicationInitialization" + }, + { + "name": "IOnApplicationShutdown", + "namespace": "Volo.Abp", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.IOnApplicationShutdown" + }, + { + "name": "IPreConfigureServices", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IPreConfigureServices" + }, + { + "name": "IPostConfigureServices", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IPostConfigureServices" + } + ], "contentType": "abpModule", "name": "BlobStoringDatabaseEntityFrameworkCoreModule", "summary": null @@ -23,18 +67,99 @@ { "namespace": "Volo.Abp.BlobStoring.Database.EntityFrameworkCore", "connectionStringName": "AbpBlobStoring", - "databaseTables": [ + "databaseTables": [], + "replacedDbContexts": [], + "modelBuilderExtensionMethods": [ + { + "returnType": "Void", + "namespace": "Volo.Abp.BlobStoring.Database.EntityFrameworkCore", + "name": "ConfigureBlobStoring", + "summary": null, + "isAsync": false, + "isPublic": true, + "isPrivate": false, + "isStatic": true, + "parameters": [ + { + "type": "ModelBuilder", + "name": "builder", + "isOptional": false + } + ] + } + ], + "implementingInterfaces": [ + { + "name": "IInfrastructure", + "namespace": "Microsoft.EntityFrameworkCore.Infrastructure", + "declaringAssemblyName": "Microsoft.EntityFrameworkCore", + "fullName": "Microsoft.EntityFrameworkCore.Infrastructure.IInfrastructure" + }, + { + "name": "IDbContextDependencies", + "namespace": "Microsoft.EntityFrameworkCore.Internal", + "declaringAssemblyName": "Microsoft.EntityFrameworkCore", + "fullName": "Microsoft.EntityFrameworkCore.Internal.IDbContextDependencies" + }, + { + "name": "IDbSetCache", + "namespace": "Microsoft.EntityFrameworkCore.Internal", + "declaringAssemblyName": "Microsoft.EntityFrameworkCore", + "fullName": "Microsoft.EntityFrameworkCore.Internal.IDbSetCache" + }, + { + "name": "IDbContextPoolable", + "namespace": "Microsoft.EntityFrameworkCore.Internal", + "declaringAssemblyName": "Microsoft.EntityFrameworkCore", + "fullName": "Microsoft.EntityFrameworkCore.Internal.IDbContextPoolable" + }, + { + "name": "IResettableService", + "namespace": "Microsoft.EntityFrameworkCore.Infrastructure", + "declaringAssemblyName": "Microsoft.EntityFrameworkCore", + "fullName": "Microsoft.EntityFrameworkCore.Infrastructure.IResettableService" + }, + { + "name": "IDisposable", + "namespace": "System", + "declaringAssemblyName": "System.Private.CoreLib", + "fullName": "System.IDisposable" + }, + { + "name": "IAsyncDisposable", + "namespace": "System", + "declaringAssemblyName": "System.Private.CoreLib", + "fullName": "System.IAsyncDisposable" + }, + { + "name": "IAbpEfCoreDbContext", + "namespace": "Volo.Abp.EntityFrameworkCore", + "declaringAssemblyName": "Volo.Abp.EntityFrameworkCore", + "fullName": "Volo.Abp.EntityFrameworkCore.IAbpEfCoreDbContext" + }, + { + "name": "IEfCoreDbContext", + "namespace": "Volo.Abp.EntityFrameworkCore", + "declaringAssemblyName": "Volo.Abp.EntityFrameworkCore", + "fullName": "Volo.Abp.EntityFrameworkCore.IEfCoreDbContext" + }, + { + "name": "IAbpEfCoreDbFunctionContext", + "namespace": "Volo.Abp.EntityFrameworkCore.GlobalFilters", + "declaringAssemblyName": "Volo.Abp.EntityFrameworkCore", + "fullName": "Volo.Abp.EntityFrameworkCore.GlobalFilters.IAbpEfCoreDbFunctionContext" + }, { - "entityFullName": "Volo.Abp.BlobStoring.Database.DatabaseBlob", - "contentType": "databaseTable", - "name": "AbpBlobs", - "summary": null + "name": "ITransientDependency", + "namespace": "Volo.Abp.DependencyInjection", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.DependencyInjection.ITransientDependency" }, { - "entityFullName": "Volo.Abp.BlobStoring.Database.DatabaseBlobContainer", - "contentType": "databaseTable", - "name": "AbpBlobContainers", - "summary": null + "name": "IBlobStoringDbContext", + "namespace": "Volo.Abp.BlobStoring.Database.EntityFrameworkCore", + "declaringAssemblyName": "Volo.Abp.BlobStoring.Database.EntityFrameworkCore", + "fullName": "Volo.Abp.BlobStoring.Database.EntityFrameworkCore.IBlobStoringDbContext" } ], "contentType": "efCoreDbContext", diff --git a/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.MongoDB/Volo.Abp.BlobStoring.Database.MongoDB.abppkg.analyze.json b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.MongoDB/Volo.Abp.BlobStoring.Database.MongoDB.abppkg.analyze.json index 888f20c52a..207bff6963 100644 --- a/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.MongoDB/Volo.Abp.BlobStoring.Database.MongoDB.abppkg.analyze.json +++ b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.MongoDB/Volo.Abp.BlobStoring.Database.MongoDB.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Abp.BlobStoring.Database.MongoDB", - "hash": "d0d45fc623e9180d60e60935449cb69b", + "hash": "", "contents": [ { "namespace": "Volo.Abp.BlobStoring.Database.MongoDB", @@ -16,6 +16,50 @@ "name": "AbpMongoDbModule" } ], + "implementingInterfaces": [ + { + "name": "IAbpModule", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IAbpModule" + }, + { + "name": "IOnPreApplicationInitialization", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IOnPreApplicationInitialization" + }, + { + "name": "IOnApplicationInitialization", + "namespace": "Volo.Abp", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.IOnApplicationInitialization" + }, + { + "name": "IOnPostApplicationInitialization", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IOnPostApplicationInitialization" + }, + { + "name": "IOnApplicationShutdown", + "namespace": "Volo.Abp", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.IOnApplicationShutdown" + }, + { + "name": "IPreConfigureServices", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IPreConfigureServices" + }, + { + "name": "IPostConfigureServices", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IPostConfigureServices" + } + ], "contentType": "abpModule", "name": "BlobStoringDatabaseMongoDbModule", "summary": null @@ -27,16 +71,36 @@ { "entityFullName": "Volo.Abp.BlobStoring.Database.DatabaseBlobContainer", "contentType": "databaseCollection", - "name": "AbpBlobContainers", + "name": "BlobContainers", "summary": null }, { "entityFullName": "Volo.Abp.BlobStoring.Database.DatabaseBlob", "contentType": "databaseCollection", - "name": "AbpBlobs", + "name": "Blobs", "summary": null } ], + "implementingInterfaces": [ + { + "name": "IAbpMongoDbContext", + "namespace": "Volo.Abp.MongoDB", + "declaringAssemblyName": "Volo.Abp.MongoDB", + "fullName": "Volo.Abp.MongoDB.IAbpMongoDbContext" + }, + { + "name": "ITransientDependency", + "namespace": "Volo.Abp.DependencyInjection", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.DependencyInjection.ITransientDependency" + }, + { + "name": "IBlobStoringMongoDbContext", + "namespace": "Volo.Abp.BlobStoring.Database.MongoDB", + "declaringAssemblyName": "Volo.Abp.BlobStoring.Database.MongoDB", + "fullName": "Volo.Abp.BlobStoring.Database.MongoDB.IBlobStoringMongoDbContext" + } + ], "contentType": "mongoDbContext", "name": "BlobStoringMongoDbContext", "summary": null diff --git a/modules/blogging/app/Volo.BloggingTestApp.EntityFrameworkCore/Volo.BloggingTestApp.EntityFrameworkCore.abppkg.analyze.json b/modules/blogging/app/Volo.BloggingTestApp.EntityFrameworkCore/Volo.BloggingTestApp.EntityFrameworkCore.abppkg.analyze.json index 0933dd25b5..ca0db01eb2 100644 --- a/modules/blogging/app/Volo.BloggingTestApp.EntityFrameworkCore/Volo.BloggingTestApp.EntityFrameworkCore.abppkg.analyze.json +++ b/modules/blogging/app/Volo.BloggingTestApp.EntityFrameworkCore/Volo.BloggingTestApp.EntityFrameworkCore.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.BloggingTestApp.EntityFrameworkCore", - "hash": "1ae906cf0026320e50077986287d66ac", + "hash": "", "contents": [ { "namespace": "Volo.BloggingTestApp.EntityFrameworkCore", @@ -89,6 +89,7 @@ "connectionStringName": null, "databaseTables": [], "replacedDbContexts": [], + "modelBuilderExtensionMethods": [], "implementingInterfaces": [ { "name": "IInfrastructure", @@ -144,6 +145,12 @@ "declaringAssemblyName": "Volo.Abp.EntityFrameworkCore", "fullName": "Volo.Abp.EntityFrameworkCore.IEfCoreDbContext" }, + { + "name": "IAbpEfCoreDbFunctionContext", + "namespace": "Volo.Abp.EntityFrameworkCore.GlobalFilters", + "declaringAssemblyName": "Volo.Abp.EntityFrameworkCore", + "fullName": "Volo.Abp.EntityFrameworkCore.GlobalFilters.IAbpEfCoreDbFunctionContext" + }, { "name": "ITransientDependency", "namespace": "Volo.Abp.DependencyInjection", diff --git a/modules/blogging/app/Volo.BloggingTestApp.MongoDB/Volo.BloggingTestApp.MongoDB.abppkg.analyze.json b/modules/blogging/app/Volo.BloggingTestApp.MongoDB/Volo.BloggingTestApp.MongoDB.abppkg.analyze.json index bb074e1d10..c5a0eb3244 100644 --- a/modules/blogging/app/Volo.BloggingTestApp.MongoDB/Volo.BloggingTestApp.MongoDB.abppkg.analyze.json +++ b/modules/blogging/app/Volo.BloggingTestApp.MongoDB/Volo.BloggingTestApp.MongoDB.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.BloggingTestApp.MongoDB", - "hash": "f3aae951c5c4cd55de2a949848c2a755", + "hash": "", "contents": [ { "namespace": "Volo.BloggingTestApp.MongoDB", diff --git a/modules/blogging/app/Volo.BloggingTestApp/package.json b/modules/blogging/app/Volo.BloggingTestApp/package.json index 0c2d03f213..a7d225a033 100644 --- a/modules/blogging/app/Volo.BloggingTestApp/package.json +++ b/modules/blogging/app/Volo.BloggingTestApp/package.json @@ -3,7 +3,7 @@ "name": "volo.blogtestapp", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "~8.3.0-rc.1", - "@abp/blogging": "~8.3.0-rc.1" + "@abp/aspnetcore.mvc.ui.theme.basic": "~8.3.0", + "@abp/blogging": "~8.3.0" } } diff --git a/modules/blogging/app/Volo.BloggingTestApp/yarn.lock b/modules/blogging/app/Volo.BloggingTestApp/yarn.lock index d2af14a195..a1ee3f6aea 100644 --- a/modules/blogging/app/Volo.BloggingTestApp/yarn.lock +++ b/modules/blogging/app/Volo.BloggingTestApp/yarn.lock @@ -2,237 +2,237 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-8.3.0-rc.1.tgz#7254b66019b99ac8a29385c1bb2c9c658a167bc7" - integrity sha512-uMgO1VQgDOW9tMq9gl6idsBZZcL/voeMp0wkBTRORQHg0E+SyA8z0yQrg5S8hU/7zRwoZPm3K9R/Peu71jNTgQ== - dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~8.3.0-rc.1" - -"@abp/aspnetcore.mvc.ui.theme.shared@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-8.3.0-rc.1.tgz#cec5ca6c5a5f61a361425b9d55711beb0db4eb81" - integrity sha512-qLAzDwiQvRB8xDs6bkeZ4YLMUuTb6Dz/GmWT61dSMUAhRCTPqPi6aWnt9fiM99HbkP7APLPb7d+o5ho6FoktNQ== - dependencies: - "@abp/aspnetcore.mvc.ui" "~8.3.0-rc.1" - "@abp/bootstrap" "~8.3.0-rc.1" - "@abp/bootstrap-datepicker" "~8.3.0-rc.1" - "@abp/bootstrap-daterangepicker" "~8.3.0-rc.1" - "@abp/datatables.net-bs5" "~8.3.0-rc.1" - "@abp/font-awesome" "~8.3.0-rc.1" - "@abp/jquery-form" "~8.3.0-rc.1" - "@abp/jquery-validation-unobtrusive" "~8.3.0-rc.1" - "@abp/lodash" "~8.3.0-rc.1" - "@abp/luxon" "~8.3.0-rc.1" - "@abp/malihu-custom-scrollbar-plugin" "~8.3.0-rc.1" - "@abp/moment" "~8.3.0-rc.1" - "@abp/select2" "~8.3.0-rc.1" - "@abp/sweetalert2" "~8.3.0-rc.1" - "@abp/timeago" "~8.3.0-rc.1" - "@abp/toastr" "~8.3.0-rc.1" - -"@abp/aspnetcore.mvc.ui@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-8.3.0-rc.1.tgz#7329e4878e64277dfed88eef5e9d1715d1af925f" - integrity sha512-NPWrtJ+Il+SI0oPQ5gc1Lc9vfPZvHbe0d/5y5qGIdwKY1F5txIyRGesc0najOLIUe7Z66AInyfNuNeoaFNR0fg== +"@abp/aspnetcore.mvc.ui.theme.basic@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-8.3.0.tgz#a2d17eb5da2c3abfad4bcc842cfcda0e58a130a4" + integrity sha512-T2dg7WlvNSrwTCfy5wk4gqiJ/15kIjMGM4wLXIJcMYn60yGY/YeX6Q4A3R/qJzfl4JdgW5rt3GpdKv86y/ADXg== + dependencies: + "@abp/aspnetcore.mvc.ui.theme.shared" "~8.3.0" + +"@abp/aspnetcore.mvc.ui.theme.shared@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-8.3.0.tgz#5d6bb5181a62770e9cb967980b77e75c115c5ed7" + integrity sha512-o/0eh8jLS+YJiseTKzzioUz0vNnMFzyoz+mkyA4PlO1gqw2JFhzPhTBZ3cuyV9QlxUfEA8dWAkqAUX6vqiHwkw== + dependencies: + "@abp/aspnetcore.mvc.ui" "~8.3.0" + "@abp/bootstrap" "~8.3.0" + "@abp/bootstrap-datepicker" "~8.3.0" + "@abp/bootstrap-daterangepicker" "~8.3.0" + "@abp/datatables.net-bs5" "~8.3.0" + "@abp/font-awesome" "~8.3.0" + "@abp/jquery-form" "~8.3.0" + "@abp/jquery-validation-unobtrusive" "~8.3.0" + "@abp/lodash" "~8.3.0" + "@abp/luxon" "~8.3.0" + "@abp/malihu-custom-scrollbar-plugin" "~8.3.0" + "@abp/moment" "~8.3.0" + "@abp/select2" "~8.3.0" + "@abp/sweetalert2" "~8.3.0" + "@abp/timeago" "~8.3.0" + "@abp/toastr" "~8.3.0" + +"@abp/aspnetcore.mvc.ui@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-8.3.0.tgz#d7ba0539bfcc6661a347dea7f952489010b3e816" + integrity sha512-OxgZhLKiXGFYYpNJ5O/IbhinsniiBPv9586e+1Soar0GckCMIIegJxnJb1Bo1O75blrcK2cIU6LqjRT1FXt2Lw== dependencies: ansi-colors "^4.1.3" -"@abp/blogging@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/blogging/-/blogging-8.3.0-rc.1.tgz#6a7644aac90a1cc87b6182b8bd7a4d3708057d82" - integrity sha512-aJc31WDzfC2kJgB3PmVg6PcWNqDP2V88Shewb+bImsU9hBM2sr6t7/M4Fxb/zUCPuRjAo5AyLspwzTEnwwCW0g== +"@abp/blogging@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/blogging/-/blogging-8.3.0.tgz#2559f67b961ce3987a1dd59c138c223e19f36d51" + integrity sha512-z9ntHhxgDYxX31OpGbPVsy9eY3/zLJiCpEtRpvNYKrKAVsS4fZSxfaywvma8owBpYmwyw4uNHVLr4EXpq0oX2Q== dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~8.3.0-rc.1" - "@abp/owl.carousel" "~8.3.0-rc.1" - "@abp/prismjs" "~8.3.0-rc.1" - "@abp/tui-editor" "~8.3.0-rc.1" + "@abp/aspnetcore.mvc.ui.theme.shared" "~8.3.0" + "@abp/owl.carousel" "~8.3.0" + "@abp/prismjs" "~8.3.0" + "@abp/tui-editor" "~8.3.0" -"@abp/bootstrap-datepicker@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-8.3.0-rc.1.tgz#d3bcb5f0063df631ad45c7f822195fc4e5c5b4e2" - integrity sha512-oqbwh9dz8XNfh+eZou8GvcEUYA1J0qr3ABA1r72DJZ/nzfLQX7pUO8NkkaDLpVwrly64rfOlxV4LT7g5muoAsw== +"@abp/bootstrap-datepicker@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-8.3.0.tgz#8c1bf9efec37b671d8f28b8b1e89c1ac66684267" + integrity sha512-KCwMtm7x+cnKPeNMzhjDJUce0stwu4e57ibmvA6sMf1tmj+yB256O4E2hIDDohiT3vP/zV8HVHX6uATlcmGC9w== dependencies: bootstrap-datepicker "^1.10.0" -"@abp/bootstrap-daterangepicker@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-8.3.0-rc.1.tgz#33958a1806a070db4fb01eb40a0897bfd16cf1f5" - integrity sha512-egtnxhRMCu56RV2bIRBLLTly2Y4W/2jwl9el+9Stjc8IN91j2UL5E4t5qn3zI3vXvVX4w5vP+TthQj0grFK0/Q== +"@abp/bootstrap-daterangepicker@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-8.3.0.tgz#2b8ed978333502677916f88cbb3e1d1b1c8a3a17" + integrity sha512-uQSfuCQogl4BujdqvtdAoSE+z32ci8FT5+i3gLfpqbgTaxvY/Kv5NxAUH5/1sjnuAE7SMWO+eVvI3V0pXgQohg== dependencies: bootstrap-daterangepicker "^3.1.0" -"@abp/bootstrap@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-8.3.0-rc.1.tgz#3ca994e4c003d056024dcd533221461cccd14f2a" - integrity sha512-xrs0JOYFEPzi3V6s9d3SCj0CxY06bBmFUK5aETgKUiXBXa4vU2YoNbnrCtDUvV+mn517FRuA/j3RaFkTWYg48g== +"@abp/bootstrap@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-8.3.0.tgz#96d6ea7e6ac30f6e34e495a4224f56f7b2a1a7a3" + integrity sha512-5AmdTtakmWhZmHrb7ibvvf+KwF9OGadpAe7Kv9mNEE02K2qkp7Xw4r5o/bgVl7YfLC1FA6GZZXrV2s2t0gjHtg== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" bootstrap "^5.3.3" -"@abp/clipboard@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-8.3.0-rc.1.tgz#65c6cd6672fc248097659908edd4a9fe92664475" - integrity sha512-CVyO/8BK2WnegwrEvBJCNcbkI5l31U/pZBn7DBUGpiawlLiyYZOtGFUgu4sIUTEfyaRdLiCIPd0eMzDPKMVTgA== +"@abp/clipboard@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-8.3.0.tgz#1b171e533f768cf42c8fc0c9c67fac1c636fee8c" + integrity sha512-T0O4OaMxLLYztAxyvEc3onEOpGHB/C8/jDcvJwd7mgpLoi9zXVfHwpnzkx/egfNJMzp49STD6Jc+jACi8Uq+CQ== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" clipboard "^2.0.11" -"@abp/core@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-8.3.0-rc.1.tgz#771c7ecd27319201a8236f0bc6b5601188059325" - integrity sha512-IB8Baa3LIv3XYja6iBw6VSnITGcRseGyY8wBNEXRiB+ni21Bv//NMyohdOot6G+HlnHlrB7kFeCX+gWu+LuYkg== +"@abp/core@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-8.3.0.tgz#3a68f5a9549efcc3e13500e301f2576751b51445" + integrity sha512-zrxnZi4qij/Y4AZWaXuPqs3Dd7gBtU/onX7FkYxLgQDxYBfx+84QAnPRNRFKMWaD/wKbTUB0wA66U3t2aiQX9Q== dependencies: - "@abp/utils" "~8.3.0-rc.1" + "@abp/utils" "~8.3.0" -"@abp/datatables.net-bs5@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-8.3.0-rc.1.tgz#b53dc353f485952439ea10035df0851d520efe96" - integrity sha512-89wpkG6u1YBR98OmuEbvs4VdR5n8L4n3Z8GiHwuKr2FpEOx7cAXYKsx/8ifmICMLPiMIvFrtOEBrrv5ZKANsAA== +"@abp/datatables.net-bs5@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-8.3.0.tgz#21822ae4912a561afe9112925185aece03fcd0eb" + integrity sha512-GOGYSSHp3iPUDFRX2Y3C0wkiCOJDuYuK/zUSzQLNpOvBMZO+I/oWBcZM+qkVowIzsoRlAGV9+CVV2B/B05qidA== dependencies: - "@abp/datatables.net" "~8.3.0-rc.1" + "@abp/datatables.net" "~8.3.0" datatables.net-bs5 "^2.0.8" -"@abp/datatables.net@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-8.3.0-rc.1.tgz#bb70608994c4a52bd15331f76af718353c843f94" - integrity sha512-G42D6W0Xb8NIQxJWGpcxLOjbZ4CHtrm9oBG5+GfVmQEPGfl8r+DYdrYDAkysDg483s+48POH7NC3L1LOlxlqRg== +"@abp/datatables.net@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-8.3.0.tgz#ff697758ce9309ba8311f23aec921c4722588c8b" + integrity sha512-4dIdv7eN1tVouOUrlF+MIdg8zQpecyH61waqLgy1q5jMZQivrTSFZ7UWMG3WVOAYjw5zSUZHZPbzA+ttnaOPkg== dependencies: - "@abp/jquery" "~8.3.0-rc.1" + "@abp/jquery" "~8.3.0" datatables.net "^2.0.8" -"@abp/font-awesome@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-8.3.0-rc.1.tgz#ea05d7e08395b1894eefe6f912ae0534fd75e69a" - integrity sha512-GN1xZ76RzQC3aqU2m19vYsyfESCeoSsp8AtvilmeqsjlzhuLLdQ6UWSxMqRqE22TCWRXbA/d/7IAb12TB1mawg== +"@abp/font-awesome@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-8.3.0.tgz#9e4e9adc08dfca52c0a07d1608c5e5662675a4c9" + integrity sha512-NRxvM/dzvQC2Cj/F5i07XB/i6IVTmXcO9sOq6TWosWib0wGaPxRbCSjy8QUAYSD1QYaVQ30XMb3XXImaMGyd8A== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" "@fortawesome/fontawesome-free" "^6.5.2" -"@abp/jquery-form@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-8.3.0-rc.1.tgz#21025048f44028a5cb1ced7414cb48af00e91bff" - integrity sha512-mVZzEJKbhiYmXK2yZRZAJwO5e7C2N0lj8ueOYPiFG6h4UKLbKPHQdIrkapyc88VirrELe1hnhJJbQ56dsQWeyg== +"@abp/jquery-form@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-8.3.0.tgz#fa2ad2fedbe3d3528ee94cbbd4f94d48f0cb5e4d" + integrity sha512-olP9FmpNVTbOIewsVua0moHVYXw4Sl3chFbvTDLG6vRBohLSjllUXfgY3UEIVWR1PCqnAg+iEJZl9NHB9iOLBg== dependencies: - "@abp/jquery" "~8.3.0-rc.1" + "@abp/jquery" "~8.3.0" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-8.3.0-rc.1.tgz#63042715391ca63f273874ff66fca4b20330d31b" - integrity sha512-EKQf733+HS9bIVQhMgAHYZfCY663GqNv8KUcCIuQOHPt5DWU49ygYhawkcYIzUKd2Gy9+ZtyWLkWmoBxTnwlmw== +"@abp/jquery-validation-unobtrusive@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-8.3.0.tgz#0992cdd33170df83c79aa3371038c0b30e451521" + integrity sha512-9hidjq8x8sTnP5O3K2b2x9NpxvPd9WB03ENR6OfvM89kfSmQapSvBZTlCu80YK9NaQJ6MLQRLYOCuc3GHcj3EQ== dependencies: - "@abp/jquery-validation" "~8.3.0-rc.1" + "@abp/jquery-validation" "~8.3.0" jquery-validation-unobtrusive "^4.0.0" -"@abp/jquery-validation@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-8.3.0-rc.1.tgz#8c82189ba7c3614f7306c2bf958b3717a6a4e702" - integrity sha512-Fr8AI//7iV743S6bw4ixE5qOu+af3HfZSivQJnYVVTbR/75gPqI/xRe6u/k82TJIBM7IaspQ4QdruMuvnJyBpQ== +"@abp/jquery-validation@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-8.3.0.tgz#bd6a72c6d86f116abe3b5d2adf3752bdbbcca887" + integrity sha512-6l5BZSa3N0Fou6Se7MfUSnI2dD4SYhZ2V988bgPJQ6p37XBOZ2OAj7LEIf5FSjtUzXjao/6/vqjkPNYreNikig== dependencies: - "@abp/jquery" "~8.3.0-rc.1" + "@abp/jquery" "~8.3.0" jquery-validation "^1.20.1" -"@abp/jquery@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-8.3.0-rc.1.tgz#a181c6749d58690b3265705959d8c818296896f3" - integrity sha512-fXs35cDLAw66irfHsFIWD41RKzpLABkULLoMwxfB76nOVPdV7qlWrXoI2O/du3xhCqBqHR4fS8xjwE6kFvkdLQ== +"@abp/jquery@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-8.3.0.tgz#9be5ef2f769680226e6a1a981026590caf3b57ef" + integrity sha512-GsFY+n3EtS6B0pAoKd+xMnt5Dzi5bHvIbhLgDgfQfOBzAy3twGRWsPQ3nkuXXm8TppwujMNowU1oiLKPPm0AOA== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" jquery "~3.7.1" -"@abp/lodash@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-8.3.0-rc.1.tgz#32f8805031f73b9d5bdc338afe49739c4ebc3ce9" - integrity sha512-UBGlG5+tFpyAPMuwpkY7K/g21c+d3Aq3HbFmcIilUEIsJ+yJqj95xhRh6t/LSwJCo5ntdSCgVC85q0kD0fQlQA== +"@abp/lodash@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-8.3.0.tgz#f5a0a496c999886f2d6999067bfac2e1f0c3969c" + integrity sha512-BiAsONbKR/RKG3WjRaMWVmhNe1ELEsykVq+ogG1Rhk3kwPbvze3TS8k2p0Lu/RC41/BmDUmJ5abg1pUMwkRT8w== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" lodash "^4.17.21" -"@abp/luxon@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-8.3.0-rc.1.tgz#df19773212502336c2caf6a8806b7647748f8f81" - integrity sha512-1oPx0tGyFi58T0yv/pdqJpcIRWU6ej5Sv28fRgz3J6tHam3hVPtKJPK9Ajvn6+MNVDLuMUczgVtfWEOvO2Kqrg== +"@abp/luxon@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-8.3.0.tgz#7dd3f756be1605506e26f7ac76b80cc082a12d07" + integrity sha512-8gdI5BtXkVp0sFg89QVDe8AvgQ7Qfq4JCqz2PMrKPSATR3H8GD6BCaEYpRp6CNTCjVrQjGZdzKgUyea1D3dHbw== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" luxon "^3.4.4" -"@abp/malihu-custom-scrollbar-plugin@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-8.3.0-rc.1.tgz#b57086d708082ce45e1917aeca8c92029ebd805d" - integrity sha512-4sa5e07EPW9IM7eQbvKtk78gd/bESYhTsl+BeWSKeqjj5wwwPYf4GIEvfJM7JVnhYwh1IPYDEkTv9QNYLczXKQ== +"@abp/malihu-custom-scrollbar-plugin@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-8.3.0.tgz#c88c132c3402bbb02054ca7d446051950f87a817" + integrity sha512-nd/mb6LJa6fMxal8PGcIjIRIoZ/UHCd01WDC9YI2H4wGCGx0CA0JyHso5oc/OEzJhUL8ujO/vYm9uLb7YahPtA== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/moment@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-8.3.0-rc.1.tgz#0ba9d64ca6d7b454af7aaa63e54be267f333e1fe" - integrity sha512-YbVEDg3m+D5KMcTCBEnor/tFgmk9IeL4pF/oChYQGXLeyohY7vfmK68owAnEDN61nCRXng9xykiZu2bLq829WA== +"@abp/moment@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-8.3.0.tgz#8e4f7a523ab76ef9e4cd96a399560bad38d38d1a" + integrity sha512-LywSsKuQ2GN/Btmle6CcTKa811zbvUWdC+RLQA792K9HyBs6LvN0qRRluEQZgplairRgh2pDOg8tdFlUERkv2w== dependencies: moment "^2.30.1" -"@abp/owl.carousel@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/owl.carousel/-/owl.carousel-8.3.0-rc.1.tgz#14942323ff52f10165bb695b7a7805b81c394549" - integrity sha512-vz08jsxbsG7L9PbQzjbfhzGuGdJgU2uBB7dqmk4A3l6D5c46L9UEoQZ7FsXXQxz/f9bLq73F6XCmviq0MYwo/Q== +"@abp/owl.carousel@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/owl.carousel/-/owl.carousel-8.3.0.tgz#4a1128e7eb98511b890fb91ef7658b6d8d3381e7" + integrity sha512-nVBPb00XOInGNUFQgzNEN/ASZGJPl1FTxPXkg6aQQPPAQMz3ZJXByZrvej56zUR550M831XtRNmWoulI+/yVGQ== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" owl.carousel "^2.3.4" -"@abp/prismjs@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-8.3.0-rc.1.tgz#82f98db7e3a5e5e535ecb0452c84a5fda57b5801" - integrity sha512-kvO7fU9KfXNK44mL9QDtGuDD3ebiXTd5nKNxgrsneHhYsdNiWwXzqWpZlfs7t9nqSydLzqWkQZ7we01GoxeQ/g== +"@abp/prismjs@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-8.3.0.tgz#0c87c63294d1452ed7152083d2fb6e70aa3aeae6" + integrity sha512-3wpwbqqlGRfQSLcBP+Qb2TKOoVGZVYYwOP6dP3So9ev8J5gFMDEizH9zLwRVHYrrsZZP8/etYnyZ0hn7ewuI5Q== dependencies: - "@abp/clipboard" "~8.3.0-rc.1" - "@abp/core" "~8.3.0-rc.1" + "@abp/clipboard" "~8.3.0" + "@abp/core" "~8.3.0" prismjs "^1.29.0" -"@abp/select2@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-8.3.0-rc.1.tgz#3eb932e05987cc1e13f72decc9ae70d47801bf7d" - integrity sha512-lZuJLiFcOEVj6cTPAA7ZfhE3v1LyivmMt8Tt7Dpvgybx2PDN1NtfLce2BCKb0MvsaTlfJMSK0ZLu3JpxCQ+Q/A== +"@abp/select2@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-8.3.0.tgz#ef4742fcd345394767f46180f61c6cabbd0b3867" + integrity sha512-bdLt2+ImxxpiZl4HGbYJpdDROQUT7/Z/+8A+6oJNacq3lNekdvufLYgTMxKru6zTbnd9j3HFKMOTE1eRjb9Xqg== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" select2 "^4.0.13" -"@abp/sweetalert2@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-8.3.0-rc.1.tgz#66d8b9ce287a71474ce37c217cd800e150a86138" - integrity sha512-b6dZbc5/nYrUz5s+lAgi561XnsASa0ZJOn6f5W2Oakm9ULzqFndapKx5f+zHeJaNArpeGDh50AjQ+lcGGw83zQ== +"@abp/sweetalert2@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-8.3.0.tgz#a63020d57e44f7940817287d3d9676288bfb85aa" + integrity sha512-ooqPM4Z2v2scnMo5l8ycTmp6t/sW4sCsvIkJ4TyM876WLQJaZxJdOao4RQWuU+dVFr9zg8cOwqLH4q7UEiO6ww== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" sweetalert2 "^11.3.6" -"@abp/timeago@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-8.3.0-rc.1.tgz#d795b9cccb190f5d42f242727ac447fe03c30db3" - integrity sha512-yJCA7PHmAxFxIvPq03iSx3LbIiDQls4AiVBO75103LEGokRUG9bg+iPA7GLkPpfNbnNgEJ7N7Gw6RQzMNRLCpA== +"@abp/timeago@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-8.3.0.tgz#b3b8d6927bf170f77af848bc1925e5ef6835bd55" + integrity sha512-Dd6xaUoF9Bp4F9WJnTsFBqY+Gt++UR7UmLvBZL/dvthkeNCu2I8MUsmshkUUjY0lIXpjZwefUOuyupQrgHXPMg== dependencies: - "@abp/jquery" "~8.3.0-rc.1" + "@abp/jquery" "~8.3.0" timeago "^1.6.7" -"@abp/toastr@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-8.3.0-rc.1.tgz#82c7f6566e604c2cf31555da3f9b0898df8a5541" - integrity sha512-0nBM4nEvDlANVulk7EKoB4Lk/1fH+UgzPOyUOyemQZAWHgPhIpa4z5yiLkCeOxN1hu/CBEe+Jo7qJblsj+v7kQ== +"@abp/toastr@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-8.3.0.tgz#e68a2bd8f731e79034594bc2c736f7c66b3df1af" + integrity sha512-aWK/RaX/FmcEKhJLjsw1A0K2c04m2fRJkmo9NwzBCSscy6Msw9IMkqNWLiFDThMU8/qKzq7wq3Vmk/C0IpeAwA== dependencies: - "@abp/jquery" "~8.3.0-rc.1" + "@abp/jquery" "~8.3.0" toastr "^2.1.4" -"@abp/tui-editor@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/tui-editor/-/tui-editor-8.3.0-rc.1.tgz#ce37f6456f9fc1964a9b6bd8358608ce9defbe9d" - integrity sha512-jBCCM8iThBdYPRQpW56gdY5Z3hUlmiXSTiVixBfGT8vadznD8kbvIJ8Zo4c/CJNs71ybceiCi3WzRQYiE0hTew== +"@abp/tui-editor@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/tui-editor/-/tui-editor-8.3.0.tgz#188360644140f3173b0347c1ce883612a5eb9e18" + integrity sha512-GNFuKvAlwihuzg91dekGZ5s5aLKySROHbLujanzaco1nfRvWehx+J+oCP0rHzQ3++DpxEXhlz05qW9I1gCEAKA== dependencies: - "@abp/jquery" "~8.3.0-rc.1" - "@abp/prismjs" "~8.3.0-rc.1" + "@abp/jquery" "~8.3.0" + "@abp/prismjs" "~8.3.0" -"@abp/utils@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-8.3.0-rc.1.tgz#7db324059f8f9c64fbb5d5a6f0c2384896ca1928" - integrity sha512-Eg4Lwv4DEDr5mfG/8ghwMPdphywZBZIxWTJCZnCWngDQ9fEn/bnYuL1WkvbVvKd10A6030wHEJXFJj2OuNdi3Q== +"@abp/utils@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-8.3.0.tgz#96ae9266ad4d833fd9d723acef7fc85fabf618d9" + integrity sha512-w/XAqza4Z8wBWRoj5uPNKbd1/bE9L/uUWk6EUSBKmljMRryWQBmaPkb1XgvrOMQIbyyF60tUvvipapQLPVh6hw== dependencies: just-compare "^2.3.0" diff --git a/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo.Blogging.Admin.Application.Contracts.abppkg.analyze.json b/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo.Blogging.Admin.Application.Contracts.abppkg.analyze.json index 3c721cbb8f..238d602da6 100644 --- a/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo.Blogging.Admin.Application.Contracts.abppkg.analyze.json +++ b/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo.Blogging.Admin.Application.Contracts.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Blogging.Admin.Application.Contracts", - "hash": "765deda9c2ad81c60686d163f8856cde", + "hash": "", "contents": [ { "namespace": "Volo.Blogging.Admin", diff --git a/modules/blogging/src/Volo.Blogging.Admin.Application/Volo.Blogging.Admin.Application.abppkg.analyze.json b/modules/blogging/src/Volo.Blogging.Admin.Application/Volo.Blogging.Admin.Application.abppkg.analyze.json index b247ffa372..473750d55d 100644 --- a/modules/blogging/src/Volo.Blogging.Admin.Application/Volo.Blogging.Admin.Application.abppkg.analyze.json +++ b/modules/blogging/src/Volo.Blogging.Admin.Application/Volo.Blogging.Admin.Application.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Blogging.Admin.Application", - "hash": "f36b44743b8df7a8d4cc013570d044a2", + "hash": "", "contents": [ { "namespace": "Volo.Blogging.Admin", @@ -146,6 +146,7 @@ "methods": [ { "returnType": "ListResultDto", + "namespace": "Volo.Blogging.Admin.Blogs", "name": "GetListAsync", "summary": null, "isAsync": true, @@ -156,6 +157,7 @@ }, { "returnType": "BlogDto", + "namespace": "Volo.Blogging.Admin.Blogs", "name": "GetAsync", "summary": null, "isAsync": true, @@ -172,6 +174,7 @@ }, { "returnType": "BlogDto", + "namespace": "Volo.Blogging.Admin.Blogs", "name": "CreateAsync", "summary": null, "isAsync": true, @@ -188,6 +191,7 @@ }, { "returnType": "BlogDto", + "namespace": "Volo.Blogging.Admin.Blogs", "name": "UpdateAsync", "summary": null, "isAsync": true, @@ -209,6 +213,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Blogging.Admin.Blogs", "name": "DeleteAsync", "summary": null, "isAsync": true, @@ -225,6 +230,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Blogging.Admin.Blogs", "name": "ClearCacheAsync", "summary": null, "isAsync": true, diff --git a/modules/blogging/src/Volo.Blogging.Admin.HttpApi.Client/Volo.Blogging.Admin.HttpApi.Client.abppkg.analyze.json b/modules/blogging/src/Volo.Blogging.Admin.HttpApi.Client/Volo.Blogging.Admin.HttpApi.Client.abppkg.analyze.json index 294df5e147..851a0316da 100644 --- a/modules/blogging/src/Volo.Blogging.Admin.HttpApi.Client/Volo.Blogging.Admin.HttpApi.Client.abppkg.analyze.json +++ b/modules/blogging/src/Volo.Blogging.Admin.HttpApi.Client/Volo.Blogging.Admin.HttpApi.Client.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Blogging.Admin.HttpApi.Client", - "hash": "3c18ac9eda422806cb4bba72a39ad229", + "hash": "", "contents": [ { "namespace": "Volo.Blogging.Admin", diff --git a/modules/blogging/src/Volo.Blogging.Admin.HttpApi/Volo.Blogging.Admin.HttpApi.abppkg.analyze.json b/modules/blogging/src/Volo.Blogging.Admin.HttpApi/Volo.Blogging.Admin.HttpApi.abppkg.analyze.json index a93621f41c..1a6a317bd2 100644 --- a/modules/blogging/src/Volo.Blogging.Admin.HttpApi/Volo.Blogging.Admin.HttpApi.abppkg.analyze.json +++ b/modules/blogging/src/Volo.Blogging.Admin.HttpApi/Volo.Blogging.Admin.HttpApi.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Blogging.Admin.HttpApi", - "hash": "689f6b3f8cc4a2e9e75308df5a58b588", + "hash": "", "contents": [ { "namespace": "Volo.Blogging.Admin", @@ -63,6 +63,90 @@ "contentType": "abpModule", "name": "BloggingAdminHttpApiModule", "summary": null + }, + { + "apis": [ + { + "path": "api/blogging/blogs/admin", + "method": "GET", + "groupName": "BlogManagement", + "responseType": "Volo.Abp.Application.Dtos.ListResultDto`1[Volo.Blogging.Blogs.Dtos.BlogDto]", + "responseTypeAsJson": "{\r\n \"items\": [\r\n {\r\n \"name\": \"string\",\r\n \"shortName\": \"string\",\r\n \"description\": \"string\",\r\n \"concurrencyStamp\": \"string\",\r\n \"isDeleted\": false,\r\n \"deleterId\": null,\r\n \"deletionTime\": null,\r\n \"lastModificationTime\": null,\r\n \"lastModifierId\": null,\r\n \"creationTime\": \"0001-01-01T00:00:00\",\r\n \"creatorId\": null,\r\n \"id\": \"00000000-0000-0000-0000-000000000000\"\r\n }\r\n ]\r\n}", + "parameterDescriptions": [] + }, + { + "path": "api/blogging/blogs/admin/{id}", + "method": "GET", + "groupName": "BlogManagement", + "responseType": "Volo.Blogging.Blogs.Dtos.BlogDto", + "responseTypeAsJson": "{\r\n \"name\": \"string\",\r\n \"shortName\": \"string\",\r\n \"description\": \"string\",\r\n \"concurrencyStamp\": \"string\",\r\n \"isDeleted\": false,\r\n \"deleterId\": null,\r\n \"deletionTime\": null,\r\n \"lastModificationTime\": null,\r\n \"lastModifierId\": null,\r\n \"creationTime\": \"0001-01-01T00:00:00\",\r\n \"creatorId\": null,\r\n \"id\": \"00000000-0000-0000-0000-000000000000\"\r\n}", + "parameterDescriptions": [ + { + "name": "id", + "type": "Guid" + } + ] + }, + { + "path": "api/blogging/blogs/admin", + "method": "POST", + "groupName": "BlogManagement", + "responseType": "Volo.Blogging.Blogs.Dtos.BlogDto", + "responseTypeAsJson": "{\r\n \"name\": \"string\",\r\n \"shortName\": \"string\",\r\n \"description\": \"string\",\r\n \"concurrencyStamp\": \"string\",\r\n \"isDeleted\": false,\r\n \"deleterId\": null,\r\n \"deletionTime\": null,\r\n \"lastModificationTime\": null,\r\n \"lastModifierId\": null,\r\n \"creationTime\": \"0001-01-01T00:00:00\",\r\n \"creatorId\": null,\r\n \"id\": \"00000000-0000-0000-0000-000000000000\"\r\n}", + "parameterDescriptions": [ + { + "name": "input", + "type": "CreateBlogDto" + } + ] + }, + { + "path": "api/blogging/blogs/admin/{id}", + "method": "PUT", + "groupName": "BlogManagement", + "responseType": "Volo.Blogging.Blogs.Dtos.BlogDto", + "responseTypeAsJson": "{\r\n \"name\": \"string\",\r\n \"shortName\": \"string\",\r\n \"description\": \"string\",\r\n \"concurrencyStamp\": \"string\",\r\n \"isDeleted\": false,\r\n \"deleterId\": null,\r\n \"deletionTime\": null,\r\n \"lastModificationTime\": null,\r\n \"lastModifierId\": null,\r\n \"creationTime\": \"0001-01-01T00:00:00\",\r\n \"creatorId\": null,\r\n \"id\": \"00000000-0000-0000-0000-000000000000\"\r\n}", + "parameterDescriptions": [ + { + "name": "id", + "type": "Guid" + }, + { + "name": "input", + "type": "UpdateBlogDto" + } + ] + }, + { + "path": "api/blogging/blogs/admin/{id}", + "method": "DELETE", + "groupName": "BlogManagement", + "responseType": "System.Void", + "responseTypeAsJson": "", + "parameterDescriptions": [ + { + "name": "id", + "type": "Guid" + } + ] + }, + { + "path": "api/blogging/blogs/admin/clear-cache/{id}", + "method": "GET", + "groupName": "BlogManagement", + "responseType": "System.Void", + "responseTypeAsJson": "", + "parameterDescriptions": [ + { + "name": "id", + "type": "Guid" + } + ] + } + ], + "contentType": "httpApi", + "name": "Defined Http Apis", + "summary": null } ] } \ No newline at end of file diff --git a/modules/blogging/src/Volo.Blogging.Admin.Web/Volo.Blogging.Admin.Web.abppkg.analyze.json b/modules/blogging/src/Volo.Blogging.Admin.Web/Volo.Blogging.Admin.Web.abppkg.analyze.json index 258c5ec139..bfadd4006b 100644 --- a/modules/blogging/src/Volo.Blogging.Admin.Web/Volo.Blogging.Admin.Web.abppkg.analyze.json +++ b/modules/blogging/src/Volo.Blogging.Admin.Web/Volo.Blogging.Admin.Web.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Blogging.Admin.Web", - "hash": "f00cd39c07130843c7103cc1f6caf9a2", + "hash": "", "contents": [ { "namespace": "Volo.Blogging.Admin", @@ -73,6 +73,24 @@ "contentType": "abpModule", "name": "BloggingAdminWebModule", "summary": null + }, + { + "namespace": "Volo.Blogging.Admin.Pages.Blogging.Admin.Blogs", + "contentType": "webPage", + "name": "CreateModel", + "summary": null + }, + { + "namespace": "Volo.Blogging.Admin.Pages.Blogging.Admin.Blogs", + "contentType": "webPage", + "name": "EditModel", + "summary": null + }, + { + "namespace": "Volo.Blogging.Admin.Pages.Blogging.Admin.Blogs", + "contentType": "webPage", + "name": "IndexModel", + "summary": null } ] } \ No newline at end of file diff --git a/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo.Blogging.Application.Contracts.abppkg.analyze.json b/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo.Blogging.Application.Contracts.abppkg.analyze.json index 233c9594ac..6d09472ac6 100644 --- a/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo.Blogging.Application.Contracts.abppkg.analyze.json +++ b/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo.Blogging.Application.Contracts.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Blogging.Application.Contracts", - "hash": "90bed1d4c7274bff6059309df9800b27", + "hash": "", "contents": [ { "namespace": "Volo.Blogging", diff --git a/modules/blogging/src/Volo.Blogging.Application/Volo.Blogging.Application.abppkg.analyze.json b/modules/blogging/src/Volo.Blogging.Application/Volo.Blogging.Application.abppkg.analyze.json index 97dc91e6d7..b332019e6d 100644 --- a/modules/blogging/src/Volo.Blogging.Application/Volo.Blogging.Application.abppkg.analyze.json +++ b/modules/blogging/src/Volo.Blogging.Application/Volo.Blogging.Application.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Blogging.Application", - "hash": "0119e0d4243cd5f865bda1dc7115637f", + "hash": "", "contents": [ { "namespace": "Volo.Blogging", @@ -151,6 +151,7 @@ "methods": [ { "returnType": "List", + "namespace": "Volo.Blogging.Tagging", "name": "GetPopularTagsAsync", "summary": null, "isAsync": true, @@ -242,6 +243,7 @@ "methods": [ { "returnType": "ListResultDto", + "namespace": "Volo.Blogging.Posts", "name": "GetListByBlogIdAndTagNameAsync", "summary": null, "isAsync": true, @@ -263,6 +265,7 @@ }, { "returnType": "ListResultDto", + "namespace": "Volo.Blogging.Posts", "name": "GetTimeOrderedListAsync", "summary": null, "isAsync": true, @@ -279,6 +282,7 @@ }, { "returnType": "PostWithDetailsDto", + "namespace": "Volo.Blogging.Posts", "name": "GetForReadingAsync", "summary": null, "isAsync": true, @@ -295,6 +299,7 @@ }, { "returnType": "PostWithDetailsDto", + "namespace": "Volo.Blogging.Posts", "name": "GetAsync", "summary": null, "isAsync": true, @@ -311,6 +316,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Blogging.Posts", "name": "DeleteAsync", "summary": null, "isAsync": true, @@ -327,6 +333,7 @@ }, { "returnType": "PostWithDetailsDto", + "namespace": "Volo.Blogging.Posts", "name": "UpdateAsync", "summary": null, "isAsync": true, @@ -346,8 +353,48 @@ } ] }, + { + "returnType": "List", + "namespace": "Volo.Blogging.Posts", + "name": "GetListByUserIdAsync", + "summary": null, + "isAsync": true, + "isPublic": true, + "isPrivate": false, + "isStatic": false, + "parameters": [ + { + "type": "Guid", + "name": "userId", + "isOptional": false + } + ] + }, + { + "returnType": "List", + "namespace": "Volo.Blogging.Posts", + "name": "GetLatestBlogPostsAsync", + "summary": null, + "isAsync": true, + "isPublic": true, + "isPrivate": false, + "isStatic": false, + "parameters": [ + { + "type": "Guid", + "name": "blogId", + "isOptional": false + }, + { + "type": "Int32", + "name": "count", + "isOptional": false + } + ] + }, { "returnType": "PostWithDetailsDto", + "namespace": "Volo.Blogging.Posts", "name": "CreateAsync", "summary": null, "isAsync": true, @@ -367,6 +414,110 @@ "name": "PostAppService", "summary": null }, + { + "namespace": "Volo.Blogging.Members", + "baseClass": { + "name": "BloggingAppServiceBase", + "namespace": "Volo.Blogging", + "declaringAssemblyName": "Volo.Blogging.Application", + "fullName": "Volo.Blogging.BloggingAppServiceBase" + }, + "implementingInterfaces": [ + { + "name": "IApplicationService", + "namespace": "Volo.Abp.Application.Services", + "declaringAssemblyName": "Volo.Abp.Ddd.Application.Contracts", + "fullName": "Volo.Abp.Application.Services.IApplicationService" + }, + { + "name": "IRemoteService", + "namespace": "Volo.Abp", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.IRemoteService" + }, + { + "name": "IAvoidDuplicateCrossCuttingConcerns", + "namespace": "Volo.Abp.Aspects", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Aspects.IAvoidDuplicateCrossCuttingConcerns" + }, + { + "name": "IValidationEnabled", + "namespace": "Volo.Abp.Validation", + "declaringAssemblyName": "Volo.Abp.Validation", + "fullName": "Volo.Abp.Validation.IValidationEnabled" + }, + { + "name": "IUnitOfWorkEnabled", + "namespace": "Volo.Abp.Uow", + "declaringAssemblyName": "Volo.Abp.Uow", + "fullName": "Volo.Abp.Uow.IUnitOfWorkEnabled" + }, + { + "name": "IAuditingEnabled", + "namespace": "Volo.Abp.Auditing", + "declaringAssemblyName": "Volo.Abp.Auditing.Contracts", + "fullName": "Volo.Abp.Auditing.IAuditingEnabled" + }, + { + "name": "IGlobalFeatureCheckingEnabled", + "namespace": "Volo.Abp.GlobalFeatures", + "declaringAssemblyName": "Volo.Abp.GlobalFeatures", + "fullName": "Volo.Abp.GlobalFeatures.IGlobalFeatureCheckingEnabled" + }, + { + "name": "ITransientDependency", + "namespace": "Volo.Abp.DependencyInjection", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.DependencyInjection.ITransientDependency" + }, + { + "name": "IMemberAppService", + "namespace": "Volo.Blogging.Members", + "declaringAssemblyName": "Volo.Blogging.Application.Contracts", + "fullName": "Volo.Blogging.Members.IMemberAppService" + } + ], + "methods": [ + { + "returnType": "BlogUserDto", + "namespace": "Volo.Blogging.Members", + "name": "FindAsync", + "summary": null, + "isAsync": true, + "isPublic": true, + "isPrivate": false, + "isStatic": false, + "parameters": [ + { + "type": "String", + "name": "username", + "isOptional": false + } + ] + }, + { + "returnType": "Void", + "namespace": "Volo.Blogging.Members", + "name": "UpdateUserProfileAsync", + "summary": null, + "isAsync": true, + "isPublic": true, + "isPrivate": false, + "isStatic": false, + "parameters": [ + { + "type": "CustomIdentityBlogUserUpdateDto", + "name": "input", + "isOptional": false + } + ] + } + ], + "contentType": "applicationService", + "name": "MemberAppService", + "summary": null + }, { "namespace": "Volo.Blogging.Files", "baseClass": { @@ -434,6 +585,7 @@ "methods": [ { "returnType": "RawFileDto", + "namespace": "Volo.Blogging.Files", "name": "GetAsync", "summary": null, "isAsync": true, @@ -450,6 +602,7 @@ }, { "returnType": "IRemoteStreamContent", + "namespace": "Volo.Blogging.Files", "name": "GetFileAsync", "summary": null, "isAsync": true, @@ -466,6 +619,7 @@ }, { "returnType": "FileUploadOutputDto", + "namespace": "Volo.Blogging.Files", "name": "CreateAsync", "summary": null, "isAsync": true, @@ -552,6 +706,7 @@ "methods": [ { "returnType": "List", + "namespace": "Volo.Blogging.Comments", "name": "GetHierarchicalListOfPostAsync", "summary": null, "isAsync": true, @@ -568,6 +723,7 @@ }, { "returnType": "CommentWithDetailsDto", + "namespace": "Volo.Blogging.Comments", "name": "CreateAsync", "summary": null, "isAsync": true, @@ -584,6 +740,7 @@ }, { "returnType": "CommentWithDetailsDto", + "namespace": "Volo.Blogging.Comments", "name": "UpdateAsync", "summary": null, "isAsync": true, @@ -605,6 +762,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Blogging.Comments", "name": "DeleteAsync", "summary": null, "isAsync": true, @@ -691,6 +849,7 @@ "methods": [ { "returnType": "ListResultDto", + "namespace": "Volo.Blogging.Blogs", "name": "GetListAsync", "summary": null, "isAsync": true, @@ -701,6 +860,7 @@ }, { "returnType": "BlogDto", + "namespace": "Volo.Blogging.Blogs", "name": "GetByShortNameAsync", "summary": null, "isAsync": true, @@ -717,6 +877,7 @@ }, { "returnType": "BlogDto", + "namespace": "Volo.Blogging.Blogs", "name": "GetAsync", "summary": null, "isAsync": true, diff --git a/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Posts/PostAppService.cs b/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Posts/PostAppService.cs index d1825f4475..0d612dfb0c 100644 --- a/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Posts/PostAppService.cs +++ b/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Posts/PostAppService.cs @@ -308,7 +308,7 @@ namespace Volo.Blogging.Posts foreach (var newTag in newTags) { - var tag = tags.FirstOrDefault(t => t.Name == newTag); + var tag = tags.FirstOrDefault(t => t.Name.Equals(newTag, StringComparison.OrdinalIgnoreCase)); if (tag == null) { diff --git a/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo.Blogging.Domain.Shared.abppkg.analyze.json b/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo.Blogging.Domain.Shared.abppkg.analyze.json index 54e8d52f5f..2b2ee467f7 100644 --- a/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo.Blogging.Domain.Shared.abppkg.analyze.json +++ b/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo.Blogging.Domain.Shared.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Blogging.Domain.Shared", - "hash": "416d1bef921b5bb0eb443877eb8af5a6", + "hash": "", "contents": [ { "namespace": "Volo.Blogging", diff --git a/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/sv.json b/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/sv.json new file mode 100644 index 0000000000..9703219c04 --- /dev/null +++ b/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/sv.json @@ -0,0 +1,92 @@ +{ + "culture": "sv", + "texts": { + "Menu:Blogs": "Blogg", + "Menu:BlogManagement": "Bloggande", + "Permission:Management": "Förvaltning", + "Permission:Edit": "Redigera", + "Permission:Create": "Skapa", + "Permission:Delete": "Radera", + "Permission:Blogging": "Blogg", + "Permission:Blogs": "Blogg", + "Permission:Posts": "InlĂ€gg", + "Permission:Tags": "Etiketter", + "Permission:Comments": "Kommentarer", + "Permission:ClearCache": "Rensa cache", + "Title": "Titel", + "Delete": "Radera", + "Reply": "Svar", + "ReplyTo": "Svara pĂ„ {0}", + "ContinueReading": "FortsĂ€tta lĂ€sa", + "DaysAgo": "{0} dagar sedan", + "DayAgo": "{0} dag sedan", + "YearsAgo": "{0} Ă„r sedan", + "YearAgo": "{0} Ă„r sedan", + "MonthsAgo": "{0} mĂ„nader sedan", + "MonthAgo": "{0} mĂ„nad sedan", + "WeeksAgo": "{0} veckor sedan", + "WeekAgo": "{0} vecka sedan", + "MinutesAgo": "{0} minuter sedan", + "MinuteAgo": "{0} minut sedan", + "SecondsAgo": "{0} sekunder sedan", + "SecondAgo": "{0} för en sekund sedan", + "HoursAgo": "för {0} timmar sedan", + "HourAgo": "{0} timme sedan", + "Now": "nu", + "Content": "InnehĂ„ll", + "SeeAll": "Se alla", + "PopularTags": "PopulĂ€ra taggar", + "WiewsWithCount": "{0} visningar", + "LastPosts": "Senaste inlĂ€gg", + "LeaveComment": "LĂ€mna kommentar", + "TagsInThisArticle": "Taggar i denna artikel", + "Posts": "InlĂ€gg", + "Edit": "Redigera", + "BLOG": "BLOGG", + "CommentDeletionWarningMessage": "Kommentaren kommer att raderas.", + "PostDeletionWarningMessage": "InlĂ€gget kommer att raderas.", + "BlogDeletionWarningMessage": "Bloggen kommer att raderas.", + "AreYouSure": "Är du sĂ€ker?", + "CommentWithCount": "{0} kommentarer", + "Comment": "Hur gör man", + "ShareOnTwitter": "Dela pĂ„ Twitter", + "CoverImage": "Omslagsbild", + "CreateANewPost": "Skapa ett nytt inlĂ€gg", + "CreateANewBlog": "Skapa en ny blogg", + "WhatIsNew": "Vad Ă€r nytt?", + "Name": "Namn", + "ShortName": "Kort namn", + "CreationTime": "Skapelsetid", + "Description": "Beskrivning", + "Blogs": "Blogg", + "Tags": "Etiketter", + "ShareOn": "Dela pĂ„", + "TitleLengthWarning": "HĂ„ll din titelstorlek under 60 tecken för att vara SEO-vĂ€nlig!", + "ClearCache": "Rensa cache", + "ClearCacheConfirmationMessage": "Är du sĂ€ker pĂ„ att du vill rensa cacheminnet?", + "MarkdownSupported": "Markdown stöds", + "FileUploadInfo": "Dra, slĂ€pp eller klistra in en kopierad bild.", + "PostDescriptionHint": "* Kommer att Ă„terges i förhandsgranskningen av artikellĂ€nken, stöder HTML", + "ReadMore": "FortsĂ€tta lĂ€sa", + "MemberNotPublishedPostYet": "Inga inlĂ€gg Ă€nnu!", + "UpdateUserWebSiteInfo": "Exempel: https://johndoe.com", + "UpdateUserTwitterInfo": "Exempel: johndoe", + "UpdateUserGithubInfo": "Exempel: johndoe", + "UpdateUserLinkedinInfo": "Exempel: https://www.linkedin.com/...", + "UpdateUserCompanyInfo": "Exempel: Volosoft", + "UpdateUserJobTitleInfo": "Exempel: Programvaruutvecklare", + "WebSite": "Webbplats", + "UserName": "AnvĂ€ndarnamn", + "FullURL": "Full URL", + "JobTitle": "Befattning", + "PersonalWebsite": "PERSONLIG WEBBPLATS", + "EditProfile": "Redigera profil", + "MoreFromBlog": "Mer frĂ„n bloggen", + "MoreFromUser": "Mer frĂ„n {0}", + "BlogPosts": "InlĂ€gg", + "Views": "utsikt", + "Biography": "Biografi", + "Social": "Sociala", + "NewBlogPost": "Nytt blogginlĂ€gg" + } +} \ No newline at end of file diff --git a/modules/blogging/src/Volo.Blogging.Domain/Volo.Blogging.Domain.abppkg.analyze.json b/modules/blogging/src/Volo.Blogging.Domain/Volo.Blogging.Domain.abppkg.analyze.json index 4ca41ac00d..64b65921d1 100644 --- a/modules/blogging/src/Volo.Blogging.Domain/Volo.Blogging.Domain.abppkg.analyze.json +++ b/modules/blogging/src/Volo.Blogging.Domain/Volo.Blogging.Domain.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Blogging.Domain", - "hash": "6ef78d68d0b8c8fe7a3f43214e572d5d", + "hash": "", "contents": [ { "namespace": "Volo.Blogging", @@ -152,7 +152,7 @@ { "name": "IMultiTenant", "namespace": "Volo.Abp.MultiTenancy", - "declaringAssemblyName": "Volo.Abp.MultiTenancy", + "declaringAssemblyName": "Volo.Abp.MultiTenancy.Abstractions", "fullName": "Volo.Abp.MultiTenancy.IMultiTenant" }, { @@ -165,6 +165,7 @@ "methods": [ { "returnType": "Boolean", + "namespace": "Volo.Blogging.Users", "name": "Update", "summary": null, "isAsync": false, @@ -229,6 +230,41 @@ "type": "System.Boolean", "name": "PhoneNumberConfirmed", "summary": null + }, + { + "type": "System.String", + "name": "WebSite", + "summary": null + }, + { + "type": "System.String", + "name": "Twitter", + "summary": null + }, + { + "type": "System.String", + "name": "Github", + "summary": null + }, + { + "type": "System.String", + "name": "Linkedin", + "summary": null + }, + { + "type": "System.String", + "name": "Company", + "summary": null + }, + { + "type": "System.String", + "name": "JobTitle", + "summary": null + }, + { + "type": "System.String", + "name": "Biography", + "summary": null } ], "contentType": "aggregateRoot", @@ -349,6 +385,7 @@ "methods": [ { "returnType": "Void", + "namespace": "Volo.Blogging.Tagging", "name": "SetName", "summary": null, "isAsync": false, @@ -365,6 +402,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Blogging.Tagging", "name": "IncreaseUsageCount", "summary": null, "isAsync": false, @@ -381,6 +419,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Blogging.Tagging", "name": "DecreaseUsageCount", "summary": null, "isAsync": false, @@ -397,6 +436,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Blogging.Tagging", "name": "SetDescription", "summary": null, "isAsync": false, @@ -556,6 +596,7 @@ "methods": [ { "returnType": "Post", + "namespace": "Volo.Blogging.Posts", "name": "IncreaseReadCount", "summary": null, "isAsync": false, @@ -566,6 +607,7 @@ }, { "returnType": "Post", + "namespace": "Volo.Blogging.Posts", "name": "SetTitle", "summary": null, "isAsync": false, @@ -582,6 +624,7 @@ }, { "returnType": "Post", + "namespace": "Volo.Blogging.Posts", "name": "SetUrl", "summary": null, "isAsync": false, @@ -598,6 +641,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Blogging.Posts", "name": "AddTag", "summary": null, "isAsync": false, @@ -614,6 +658,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Blogging.Posts", "name": "RemoveTag", "summary": null, "isAsync": false, @@ -800,6 +845,7 @@ "methods": [ { "returnType": "Void", + "namespace": "Volo.Blogging.Comments", "name": "SetText", "summary": null, "isAsync": false, @@ -954,6 +1000,7 @@ "methods": [ { "returnType": "Blog", + "namespace": "Volo.Blogging.Blogs", "name": "SetName", "summary": null, "isAsync": false, @@ -970,6 +1017,7 @@ }, { "returnType": "Blog", + "namespace": "Volo.Blogging.Blogs", "name": "SetShortName", "summary": null, "isAsync": false, @@ -1061,6 +1109,7 @@ "methods": [ { "returnType": "List", + "namespace": "Volo.Blogging.Users", "name": "GetUsersAsync", "summary": null, "isAsync": true, @@ -1135,6 +1184,7 @@ "methods": [ { "returnType": "List", + "namespace": "Volo.Blogging.Tagging", "name": "GetListAsync", "summary": null, "isAsync": true, @@ -1156,6 +1206,7 @@ }, { "returnType": "Tag", + "namespace": "Volo.Blogging.Tagging", "name": "GetByNameAsync", "summary": null, "isAsync": true, @@ -1182,6 +1233,7 @@ }, { "returnType": "Tag", + "namespace": "Volo.Blogging.Tagging", "name": "FindByNameAsync", "summary": null, "isAsync": true, @@ -1208,6 +1260,7 @@ }, { "returnType": "List", + "namespace": "Volo.Blogging.Tagging", "name": "GetListAsync", "summary": null, "isAsync": true, @@ -1229,6 +1282,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Blogging.Tagging", "name": "DecreaseUsageCountOfTagsAsync", "summary": null, "isAsync": true, @@ -1298,6 +1352,7 @@ "methods": [ { "returnType": "List", + "namespace": "Volo.Blogging.Posts", "name": "GetPostsByBlogId", "summary": null, "isAsync": true, @@ -1319,6 +1374,7 @@ }, { "returnType": "Boolean", + "namespace": "Volo.Blogging.Posts", "name": "IsPostUrlInUseAsync", "summary": null, "isAsync": true, @@ -1350,6 +1406,7 @@ }, { "returnType": "Post", + "namespace": "Volo.Blogging.Posts", "name": "GetPostByUrl", "summary": null, "isAsync": true, @@ -1376,6 +1433,7 @@ }, { "returnType": "List", + "namespace": "Volo.Blogging.Posts", "name": "GetOrderedList", "summary": null, "isAsync": true, @@ -1399,6 +1457,55 @@ "isOptional": true } ] + }, + { + "returnType": "List", + "namespace": "Volo.Blogging.Posts", + "name": "GetListByUserIdAsync", + "summary": null, + "isAsync": true, + "isPublic": true, + "isPrivate": false, + "isStatic": false, + "parameters": [ + { + "type": "Guid", + "name": "userId", + "isOptional": false + }, + { + "type": "CancellationToken", + "name": "cancellationToken", + "isOptional": true + } + ] + }, + { + "returnType": "List", + "namespace": "Volo.Blogging.Posts", + "name": "GetLatestBlogPostsAsync", + "summary": null, + "isAsync": true, + "isPublic": true, + "isPrivate": false, + "isStatic": false, + "parameters": [ + { + "type": "Guid", + "name": "blogId", + "isOptional": false + }, + { + "type": "Int32", + "name": "count", + "isOptional": false + }, + { + "type": "CancellationToken", + "name": "cancellationToken", + "isOptional": true + } + ] } ], "contentType": "repositoryInterface", @@ -1450,6 +1557,7 @@ "methods": [ { "returnType": "List", + "namespace": "Volo.Blogging.Comments", "name": "GetListOfPostAsync", "summary": null, "isAsync": true, @@ -1471,6 +1579,7 @@ }, { "returnType": "Int32", + "namespace": "Volo.Blogging.Comments", "name": "GetCommentCountOfPostAsync", "summary": null, "isAsync": true, @@ -1492,6 +1601,7 @@ }, { "returnType": "List", + "namespace": "Volo.Blogging.Comments", "name": "GetRepliesOfComment", "summary": null, "isAsync": true, @@ -1513,6 +1623,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Blogging.Comments", "name": "DeleteOfPost", "summary": null, "isAsync": true, @@ -1582,6 +1693,7 @@ "methods": [ { "returnType": "Blog", + "namespace": "Volo.Blogging.Blogs", "name": "FindByShortNameAsync", "summary": null, "isAsync": true, diff --git a/modules/blogging/src/Volo.Blogging.EntityFrameworkCore/Volo.Blogging.EntityFrameworkCore.abppkg.analyze.json b/modules/blogging/src/Volo.Blogging.EntityFrameworkCore/Volo.Blogging.EntityFrameworkCore.abppkg.analyze.json index 7fb2558e8c..c891a76071 100644 --- a/modules/blogging/src/Volo.Blogging.EntityFrameworkCore/Volo.Blogging.EntityFrameworkCore.abppkg.analyze.json +++ b/modules/blogging/src/Volo.Blogging.EntityFrameworkCore/Volo.Blogging.EntityFrameworkCore.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Blogging.EntityFrameworkCore", - "hash": "6a38802ee4510532b9dd8879c2b2b7ff", + "hash": "", "contents": [ { "namespace": "Volo.Blogging.EntityFrameworkCore", @@ -67,45 +67,27 @@ { "namespace": "Volo.Blogging.EntityFrameworkCore", "connectionStringName": "Blogging", - "databaseTables": [ - { - "entityFullName": "Volo.Blogging.Blogs.Blog", - "contentType": "databaseTable", - "name": "BlgBlogs", - "summary": null - }, - { - "entityFullName": "Volo.Blogging.Comments.Comment", - "contentType": "databaseTable", - "name": "BlgComments", - "summary": null - }, - { - "entityFullName": "Volo.Blogging.Posts.Post", - "contentType": "databaseTable", - "name": "BlgPosts", - "summary": null - }, - { - "entityFullName": "Volo.Blogging.Posts.PostTag", - "contentType": "databaseTable", - "name": "BlgPostTags", - "summary": null - }, - { - "entityFullName": "Volo.Blogging.Tagging.Tag", - "contentType": "databaseTable", - "name": "BlgTags", - "summary": null - }, + "databaseTables": [], + "replacedDbContexts": [], + "modelBuilderExtensionMethods": [ { - "entityFullName": "Volo.Blogging.Users.BlogUser", - "contentType": "databaseTable", - "name": "BlgUsers", - "summary": null + "returnType": "Void", + "namespace": "Volo.Blogging.EntityFrameworkCore", + "name": "ConfigureBlogging", + "summary": null, + "isAsync": false, + "isPublic": true, + "isPrivate": false, + "isStatic": true, + "parameters": [ + { + "type": "ModelBuilder", + "name": "builder", + "isOptional": false + } + ] } ], - "replacedDbContexts": [], "implementingInterfaces": [ { "name": "IInfrastructure", @@ -161,6 +143,12 @@ "declaringAssemblyName": "Volo.Abp.EntityFrameworkCore", "fullName": "Volo.Abp.EntityFrameworkCore.IEfCoreDbContext" }, + { + "name": "IAbpEfCoreDbFunctionContext", + "namespace": "Volo.Abp.EntityFrameworkCore.GlobalFilters", + "declaringAssemblyName": "Volo.Abp.EntityFrameworkCore", + "fullName": "Volo.Abp.EntityFrameworkCore.GlobalFilters.IAbpEfCoreDbFunctionContext" + }, { "name": "ITransientDependency", "namespace": "Volo.Abp.DependencyInjection", diff --git a/modules/blogging/src/Volo.Blogging.HttpApi.Client/Volo.Blogging.HttpApi.Client.abppkg.analyze.json b/modules/blogging/src/Volo.Blogging.HttpApi.Client/Volo.Blogging.HttpApi.Client.abppkg.analyze.json index fab3946f08..4fde803ba1 100644 --- a/modules/blogging/src/Volo.Blogging.HttpApi.Client/Volo.Blogging.HttpApi.Client.abppkg.analyze.json +++ b/modules/blogging/src/Volo.Blogging.HttpApi.Client/Volo.Blogging.HttpApi.Client.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Blogging.HttpApi.Client", - "hash": "3ca2666acad094da483790ffe3497ae0", + "hash": "", "contents": [ { "namespace": "Volo.Blogging", diff --git a/modules/blogging/src/Volo.Blogging.HttpApi/Volo.Blogging.HttpApi.abppkg.analyze.json b/modules/blogging/src/Volo.Blogging.HttpApi/Volo.Blogging.HttpApi.abppkg.analyze.json index e9fa020357..7b15b827b0 100644 --- a/modules/blogging/src/Volo.Blogging.HttpApi/Volo.Blogging.HttpApi.abppkg.analyze.json +++ b/modules/blogging/src/Volo.Blogging.HttpApi/Volo.Blogging.HttpApi.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Blogging.HttpApi", - "hash": "3e6f3a5c72fe4dd10117f387c5a28255", + "hash": "", "contents": [ { "namespace": "Volo.Blogging", @@ -63,6 +63,300 @@ "contentType": "abpModule", "name": "BloggingHttpApiModule", "summary": null + }, + { + "apis": [ + { + "path": "api/blogging/files/{name}", + "method": "GET", + "groupName": "BlogFiles", + "responseType": "Volo.Blogging.Files.RawFileDto", + "responseTypeAsJson": "", + "parameterDescriptions": [ + { + "name": "name", + "type": "String" + } + ] + }, + { + "path": "api/blogging/files/www/{name}", + "method": "GET", + "groupName": "BlogFiles", + "responseType": "Volo.Abp.Content.IRemoteStreamContent", + "responseTypeAsJson": "", + "parameterDescriptions": [ + { + "name": "name", + "type": "String" + } + ] + }, + { + "path": "api/blogging/files/images/upload", + "method": "POST", + "groupName": "BlogFiles", + "responseType": "Volo.Blogging.Files.FileUploadOutputDto", + "responseTypeAsJson": "{\r\n \"name\": \"string\",\r\n \"webUrl\": \"string\"\r\n}", + "parameterDescriptions": [ + { + "name": "File", + "type": "IRemoteStreamContent" + }, + { + "name": "Name", + "type": "String" + } + ] + }, + { + "path": "api/blogging/blogs", + "method": "GET", + "groupName": "Blogs", + "responseType": "Volo.Abp.Application.Dtos.ListResultDto`1[Volo.Blogging.Blogs.Dtos.BlogDto]", + "responseTypeAsJson": "{\r\n \"items\": [\r\n {\r\n \"name\": \"string\",\r\n \"shortName\": \"string\",\r\n \"description\": \"string\",\r\n \"concurrencyStamp\": \"string\",\r\n \"isDeleted\": false,\r\n \"deleterId\": null,\r\n \"deletionTime\": null,\r\n \"lastModificationTime\": null,\r\n \"lastModifierId\": null,\r\n \"creationTime\": \"0001-01-01T00:00:00\",\r\n \"creatorId\": null,\r\n \"id\": \"00000000-0000-0000-0000-000000000000\"\r\n }\r\n ]\r\n}", + "parameterDescriptions": [] + }, + { + "path": "api/blogging/blogs/by-shortname/{shortName}", + "method": "GET", + "groupName": "Blogs", + "responseType": "Volo.Blogging.Blogs.Dtos.BlogDto", + "responseTypeAsJson": "{\r\n \"name\": \"string\",\r\n \"shortName\": \"string\",\r\n \"description\": \"string\",\r\n \"concurrencyStamp\": \"string\",\r\n \"isDeleted\": false,\r\n \"deleterId\": null,\r\n \"deletionTime\": null,\r\n \"lastModificationTime\": null,\r\n \"lastModifierId\": null,\r\n \"creationTime\": \"0001-01-01T00:00:00\",\r\n \"creatorId\": null,\r\n \"id\": \"00000000-0000-0000-0000-000000000000\"\r\n}", + "parameterDescriptions": [ + { + "name": "shortName", + "type": "String" + } + ] + }, + { + "path": "api/blogging/blogs/{id}", + "method": "GET", + "groupName": "Blogs", + "responseType": "Volo.Blogging.Blogs.Dtos.BlogDto", + "responseTypeAsJson": "{\r\n \"name\": \"string\",\r\n \"shortName\": \"string\",\r\n \"description\": \"string\",\r\n \"concurrencyStamp\": \"string\",\r\n \"isDeleted\": false,\r\n \"deleterId\": null,\r\n \"deletionTime\": null,\r\n \"lastModificationTime\": null,\r\n \"lastModifierId\": null,\r\n \"creationTime\": \"0001-01-01T00:00:00\",\r\n \"creatorId\": null,\r\n \"id\": \"00000000-0000-0000-0000-000000000000\"\r\n}", + "parameterDescriptions": [ + { + "name": "id", + "type": "Guid" + } + ] + }, + { + "path": "api/blogging/comments/hierarchical/{postId}", + "method": "GET", + "groupName": "Comments", + "responseType": "System.Collections.Generic.List`1[Volo.Blogging.Comments.Dtos.CommentWithRepliesDto]", + "responseTypeAsJson": "[\r\n {\r\n \"comment\": {\r\n \"repliedCommentId\": null,\r\n \"text\": \"string\",\r\n \"writer\": {\r\n \"tenantId\": null,\r\n \"name\": \"string\",\r\n \"surname\": \"string\",\r\n \"userName\": \"string\",\r\n \"email\": \"string\",\r\n \"emailConfirmed\": false,\r\n \"phoneNumber\": \"string\",\r\n \"phoneNumberConfirmed\": false,\r\n \"webSite\": \"string\",\r\n \"twitter\": \"string\",\r\n \"github\": \"string\",\r\n \"linkedin\": \"string\",\r\n \"company\": \"string\",\r\n \"jobTitle\": \"string\",\r\n \"biography\": \"string\",\r\n \"extraProperties\": {\r\n \"string\": \"object\"\r\n },\r\n \"id\": \"00000000-0000-0000-0000-000000000000\"\r\n },\r\n \"concurrencyStamp\": \"string\",\r\n \"isDeleted\": false,\r\n \"deleterId\": null,\r\n \"deletionTime\": null,\r\n \"lastModificationTime\": null,\r\n \"lastModifierId\": null,\r\n \"creationTime\": \"0001-01-01T00:00:00\",\r\n \"creatorId\": null,\r\n \"id\": \"00000000-0000-0000-0000-000000000000\"\r\n },\r\n \"replies\": [\r\n {\r\n \"repliedCommentId\": null,\r\n \"text\": \"string\",\r\n \"writer\": {\r\n \"tenantId\": null,\r\n \"name\": \"string\",\r\n \"surname\": \"string\",\r\n \"userName\": \"string\",\r\n \"email\": \"string\",\r\n \"emailConfirmed\": false,\r\n \"phoneNumber\": \"string\",\r\n \"phoneNumberConfirmed\": false,\r\n \"webSite\": \"string\",\r\n \"twitter\": \"string\",\r\n \"github\": \"string\",\r\n \"linkedin\": \"string\",\r\n \"company\": \"string\",\r\n \"jobTitle\": \"string\",\r\n \"biography\": \"string\",\r\n \"extraProperties\": {\r\n \"string\": \"object\"\r\n },\r\n \"id\": \"00000000-0000-0000-0000-000000000000\"\r\n },\r\n \"concurrencyStamp\": \"string\",\r\n \"isDeleted\": false,\r\n \"deleterId\": null,\r\n \"deletionTime\": null,\r\n \"lastModificationTime\": null,\r\n \"lastModifierId\": null,\r\n \"creationTime\": \"0001-01-01T00:00:00\",\r\n \"creatorId\": null,\r\n \"id\": \"00000000-0000-0000-0000-000000000000\"\r\n }\r\n ]\r\n }\r\n]", + "parameterDescriptions": [ + { + "name": "postId", + "type": "Guid" + } + ] + }, + { + "path": "api/blogging/comments", + "method": "POST", + "groupName": "Comments", + "responseType": "Volo.Blogging.Comments.Dtos.CommentWithDetailsDto", + "responseTypeAsJson": "{\r\n \"repliedCommentId\": null,\r\n \"text\": \"string\",\r\n \"writer\": {\r\n \"tenantId\": null,\r\n \"name\": \"string\",\r\n \"surname\": \"string\",\r\n \"userName\": \"string\",\r\n \"email\": \"string\",\r\n \"emailConfirmed\": false,\r\n \"phoneNumber\": \"string\",\r\n \"phoneNumberConfirmed\": false,\r\n \"webSite\": \"string\",\r\n \"twitter\": \"string\",\r\n \"github\": \"string\",\r\n \"linkedin\": \"string\",\r\n \"company\": \"string\",\r\n \"jobTitle\": \"string\",\r\n \"biography\": \"string\",\r\n \"extraProperties\": {\r\n \"string\": \"object\"\r\n },\r\n \"id\": \"00000000-0000-0000-0000-000000000000\"\r\n },\r\n \"concurrencyStamp\": \"string\",\r\n \"isDeleted\": false,\r\n \"deleterId\": null,\r\n \"deletionTime\": null,\r\n \"lastModificationTime\": null,\r\n \"lastModifierId\": null,\r\n \"creationTime\": \"0001-01-01T00:00:00\",\r\n \"creatorId\": null,\r\n \"id\": \"00000000-0000-0000-0000-000000000000\"\r\n}", + "parameterDescriptions": [ + { + "name": "input", + "type": "CreateCommentDto" + } + ] + }, + { + "path": "api/blogging/comments/{id}", + "method": "PUT", + "groupName": "Comments", + "responseType": "Volo.Blogging.Comments.Dtos.CommentWithDetailsDto", + "responseTypeAsJson": "{\r\n \"repliedCommentId\": null,\r\n \"text\": \"string\",\r\n \"writer\": {\r\n \"tenantId\": null,\r\n \"name\": \"string\",\r\n \"surname\": \"string\",\r\n \"userName\": \"string\",\r\n \"email\": \"string\",\r\n \"emailConfirmed\": false,\r\n \"phoneNumber\": \"string\",\r\n \"phoneNumberConfirmed\": false,\r\n \"webSite\": \"string\",\r\n \"twitter\": \"string\",\r\n \"github\": \"string\",\r\n \"linkedin\": \"string\",\r\n \"company\": \"string\",\r\n \"jobTitle\": \"string\",\r\n \"biography\": \"string\",\r\n \"extraProperties\": {\r\n \"string\": \"object\"\r\n },\r\n \"id\": \"00000000-0000-0000-0000-000000000000\"\r\n },\r\n \"concurrencyStamp\": \"string\",\r\n \"isDeleted\": false,\r\n \"deleterId\": null,\r\n \"deletionTime\": null,\r\n \"lastModificationTime\": null,\r\n \"lastModifierId\": null,\r\n \"creationTime\": \"0001-01-01T00:00:00\",\r\n \"creatorId\": null,\r\n \"id\": \"00000000-0000-0000-0000-000000000000\"\r\n}", + "parameterDescriptions": [ + { + "name": "id", + "type": "Guid" + }, + { + "name": "input", + "type": "UpdateCommentDto" + } + ] + }, + { + "path": "api/blogging/comments/{id}", + "method": "DELETE", + "groupName": "Comments", + "responseType": "System.Void", + "responseTypeAsJson": "", + "parameterDescriptions": [ + { + "name": "id", + "type": "Guid" + } + ] + }, + { + "path": "api/blogging/posts/{blogId}/all", + "method": "GET", + "groupName": "Posts", + "responseType": "Volo.Abp.Application.Dtos.ListResultDto`1[Volo.Blogging.Posts.PostWithDetailsDto]", + "responseTypeAsJson": "{\r\n \"items\": [\r\n {\r\n \"blogId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"title\": \"string\",\r\n \"coverImage\": \"string\",\r\n \"url\": \"string\",\r\n \"content\": \"string\",\r\n \"description\": \"string\",\r\n \"readCount\": 0,\r\n \"commentCount\": 0,\r\n \"writer\": {\r\n \"tenantId\": null,\r\n \"name\": \"string\",\r\n \"surname\": \"string\",\r\n \"userName\": \"string\",\r\n \"email\": \"string\",\r\n \"emailConfirmed\": false,\r\n \"phoneNumber\": \"string\",\r\n \"phoneNumberConfirmed\": false,\r\n \"webSite\": \"string\",\r\n \"twitter\": \"string\",\r\n \"github\": \"string\",\r\n \"linkedin\": \"string\",\r\n \"company\": \"string\",\r\n \"jobTitle\": \"string\",\r\n \"biography\": \"string\",\r\n \"extraProperties\": {\r\n \"string\": \"object\"\r\n },\r\n \"id\": \"00000000-0000-0000-0000-000000000000\"\r\n },\r\n \"tags\": [\r\n {\r\n \"name\": \"string\",\r\n \"description\": \"string\",\r\n \"usageCount\": 0,\r\n \"isDeleted\": false,\r\n \"deleterId\": null,\r\n \"deletionTime\": null,\r\n \"lastModificationTime\": null,\r\n \"lastModifierId\": null,\r\n \"creationTime\": \"0001-01-01T00:00:00\",\r\n \"creatorId\": null,\r\n \"id\": \"00000000-0000-0000-0000-000000000000\"\r\n }\r\n ],\r\n \"concurrencyStamp\": \"string\",\r\n \"isDeleted\": false,\r\n \"deleterId\": null,\r\n \"deletionTime\": null,\r\n \"lastModificationTime\": null,\r\n \"lastModifierId\": null,\r\n \"creationTime\": \"0001-01-01T00:00:00\",\r\n \"creatorId\": null,\r\n \"id\": \"00000000-0000-0000-0000-000000000000\"\r\n }\r\n ]\r\n}", + "parameterDescriptions": [ + { + "name": "blogId", + "type": "Guid" + }, + { + "name": "tagName", + "type": "String" + } + ] + }, + { + "path": "api/blogging/posts/{blogId}/all/by-time", + "method": "GET", + "groupName": "Posts", + "responseType": "Volo.Abp.Application.Dtos.ListResultDto`1[Volo.Blogging.Posts.PostWithDetailsDto]", + "responseTypeAsJson": "{\r\n \"items\": [\r\n {\r\n \"blogId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"title\": \"string\",\r\n \"coverImage\": \"string\",\r\n \"url\": \"string\",\r\n \"content\": \"string\",\r\n \"description\": \"string\",\r\n \"readCount\": 0,\r\n \"commentCount\": 0,\r\n \"writer\": {\r\n \"tenantId\": null,\r\n \"name\": \"string\",\r\n \"surname\": \"string\",\r\n \"userName\": \"string\",\r\n \"email\": \"string\",\r\n \"emailConfirmed\": false,\r\n \"phoneNumber\": \"string\",\r\n \"phoneNumberConfirmed\": false,\r\n \"webSite\": \"string\",\r\n \"twitter\": \"string\",\r\n \"github\": \"string\",\r\n \"linkedin\": \"string\",\r\n \"company\": \"string\",\r\n \"jobTitle\": \"string\",\r\n \"biography\": \"string\",\r\n \"extraProperties\": {\r\n \"string\": \"object\"\r\n },\r\n \"id\": \"00000000-0000-0000-0000-000000000000\"\r\n },\r\n \"tags\": [\r\n {\r\n \"name\": \"string\",\r\n \"description\": \"string\",\r\n \"usageCount\": 0,\r\n \"isDeleted\": false,\r\n \"deleterId\": null,\r\n \"deletionTime\": null,\r\n \"lastModificationTime\": null,\r\n \"lastModifierId\": null,\r\n \"creationTime\": \"0001-01-01T00:00:00\",\r\n \"creatorId\": null,\r\n \"id\": \"00000000-0000-0000-0000-000000000000\"\r\n }\r\n ],\r\n \"concurrencyStamp\": \"string\",\r\n \"isDeleted\": false,\r\n \"deleterId\": null,\r\n \"deletionTime\": null,\r\n \"lastModificationTime\": null,\r\n \"lastModifierId\": null,\r\n \"creationTime\": \"0001-01-01T00:00:00\",\r\n \"creatorId\": null,\r\n \"id\": \"00000000-0000-0000-0000-000000000000\"\r\n }\r\n ]\r\n}", + "parameterDescriptions": [ + { + "name": "blogId", + "type": "Guid" + } + ] + }, + { + "path": "api/blogging/posts/read", + "method": "GET", + "groupName": "Posts", + "responseType": "Volo.Blogging.Posts.PostWithDetailsDto", + "responseTypeAsJson": "{\r\n \"blogId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"title\": \"string\",\r\n \"coverImage\": \"string\",\r\n \"url\": \"string\",\r\n \"content\": \"string\",\r\n \"description\": \"string\",\r\n \"readCount\": 0,\r\n \"commentCount\": 0,\r\n \"writer\": {\r\n \"tenantId\": null,\r\n \"name\": \"string\",\r\n \"surname\": \"string\",\r\n \"userName\": \"string\",\r\n \"email\": \"string\",\r\n \"emailConfirmed\": false,\r\n \"phoneNumber\": \"string\",\r\n \"phoneNumberConfirmed\": false,\r\n \"webSite\": \"string\",\r\n \"twitter\": \"string\",\r\n \"github\": \"string\",\r\n \"linkedin\": \"string\",\r\n \"company\": \"string\",\r\n \"jobTitle\": \"string\",\r\n \"biography\": \"string\",\r\n \"extraProperties\": {\r\n \"string\": \"object\"\r\n },\r\n \"id\": \"00000000-0000-0000-0000-000000000000\"\r\n },\r\n \"tags\": [\r\n {\r\n \"name\": \"string\",\r\n \"description\": \"string\",\r\n \"usageCount\": 0,\r\n \"isDeleted\": false,\r\n \"deleterId\": null,\r\n \"deletionTime\": null,\r\n \"lastModificationTime\": null,\r\n \"lastModifierId\": null,\r\n \"creationTime\": \"0001-01-01T00:00:00\",\r\n \"creatorId\": null,\r\n \"id\": \"00000000-0000-0000-0000-000000000000\"\r\n }\r\n ],\r\n \"concurrencyStamp\": \"string\",\r\n \"isDeleted\": false,\r\n \"deleterId\": null,\r\n \"deletionTime\": null,\r\n \"lastModificationTime\": null,\r\n \"lastModifierId\": null,\r\n \"creationTime\": \"0001-01-01T00:00:00\",\r\n \"creatorId\": null,\r\n \"id\": \"00000000-0000-0000-0000-000000000000\"\r\n}", + "parameterDescriptions": [ + { + "name": "Url", + "type": "String" + }, + { + "name": "BlogId", + "type": "Guid" + } + ] + }, + { + "path": "api/blogging/posts/{id}", + "method": "GET", + "groupName": "Posts", + "responseType": "Volo.Blogging.Posts.PostWithDetailsDto", + "responseTypeAsJson": "{\r\n \"blogId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"title\": \"string\",\r\n \"coverImage\": \"string\",\r\n \"url\": \"string\",\r\n \"content\": \"string\",\r\n \"description\": \"string\",\r\n \"readCount\": 0,\r\n \"commentCount\": 0,\r\n \"writer\": {\r\n \"tenantId\": null,\r\n \"name\": \"string\",\r\n \"surname\": \"string\",\r\n \"userName\": \"string\",\r\n \"email\": \"string\",\r\n \"emailConfirmed\": false,\r\n \"phoneNumber\": \"string\",\r\n \"phoneNumberConfirmed\": false,\r\n \"webSite\": \"string\",\r\n \"twitter\": \"string\",\r\n \"github\": \"string\",\r\n \"linkedin\": \"string\",\r\n \"company\": \"string\",\r\n \"jobTitle\": \"string\",\r\n \"biography\": \"string\",\r\n \"extraProperties\": {\r\n \"string\": \"object\"\r\n },\r\n \"id\": \"00000000-0000-0000-0000-000000000000\"\r\n },\r\n \"tags\": [\r\n {\r\n \"name\": \"string\",\r\n \"description\": \"string\",\r\n \"usageCount\": 0,\r\n \"isDeleted\": false,\r\n \"deleterId\": null,\r\n \"deletionTime\": null,\r\n \"lastModificationTime\": null,\r\n \"lastModifierId\": null,\r\n \"creationTime\": \"0001-01-01T00:00:00\",\r\n \"creatorId\": null,\r\n \"id\": \"00000000-0000-0000-0000-000000000000\"\r\n }\r\n ],\r\n \"concurrencyStamp\": \"string\",\r\n \"isDeleted\": false,\r\n \"deleterId\": null,\r\n \"deletionTime\": null,\r\n \"lastModificationTime\": null,\r\n \"lastModifierId\": null,\r\n \"creationTime\": \"0001-01-01T00:00:00\",\r\n \"creatorId\": null,\r\n \"id\": \"00000000-0000-0000-0000-000000000000\"\r\n}", + "parameterDescriptions": [ + { + "name": "id", + "type": "Guid" + } + ] + }, + { + "path": "api/blogging/posts", + "method": "POST", + "groupName": "Posts", + "responseType": "Volo.Blogging.Posts.PostWithDetailsDto", + "responseTypeAsJson": "{\r\n \"blogId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"title\": \"string\",\r\n \"coverImage\": \"string\",\r\n \"url\": \"string\",\r\n \"content\": \"string\",\r\n \"description\": \"string\",\r\n \"readCount\": 0,\r\n \"commentCount\": 0,\r\n \"writer\": {\r\n \"tenantId\": null,\r\n \"name\": \"string\",\r\n \"surname\": \"string\",\r\n \"userName\": \"string\",\r\n \"email\": \"string\",\r\n \"emailConfirmed\": false,\r\n \"phoneNumber\": \"string\",\r\n \"phoneNumberConfirmed\": false,\r\n \"webSite\": \"string\",\r\n \"twitter\": \"string\",\r\n \"github\": \"string\",\r\n \"linkedin\": \"string\",\r\n \"company\": \"string\",\r\n \"jobTitle\": \"string\",\r\n \"biography\": \"string\",\r\n \"extraProperties\": {\r\n \"string\": \"object\"\r\n },\r\n \"id\": \"00000000-0000-0000-0000-000000000000\"\r\n },\r\n \"tags\": [\r\n {\r\n \"name\": \"string\",\r\n \"description\": \"string\",\r\n \"usageCount\": 0,\r\n \"isDeleted\": false,\r\n \"deleterId\": null,\r\n \"deletionTime\": null,\r\n \"lastModificationTime\": null,\r\n \"lastModifierId\": null,\r\n \"creationTime\": \"0001-01-01T00:00:00\",\r\n \"creatorId\": null,\r\n \"id\": \"00000000-0000-0000-0000-000000000000\"\r\n }\r\n ],\r\n \"concurrencyStamp\": \"string\",\r\n \"isDeleted\": false,\r\n \"deleterId\": null,\r\n \"deletionTime\": null,\r\n \"lastModificationTime\": null,\r\n \"lastModifierId\": null,\r\n \"creationTime\": \"0001-01-01T00:00:00\",\r\n \"creatorId\": null,\r\n \"id\": \"00000000-0000-0000-0000-000000000000\"\r\n}", + "parameterDescriptions": [ + { + "name": "input", + "type": "CreatePostDto" + } + ] + }, + { + "path": "api/blogging/posts/{id}", + "method": "PUT", + "groupName": "Posts", + "responseType": "Volo.Blogging.Posts.PostWithDetailsDto", + "responseTypeAsJson": "{\r\n \"blogId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"title\": \"string\",\r\n \"coverImage\": \"string\",\r\n \"url\": \"string\",\r\n \"content\": \"string\",\r\n \"description\": \"string\",\r\n \"readCount\": 0,\r\n \"commentCount\": 0,\r\n \"writer\": {\r\n \"tenantId\": null,\r\n \"name\": \"string\",\r\n \"surname\": \"string\",\r\n \"userName\": \"string\",\r\n \"email\": \"string\",\r\n \"emailConfirmed\": false,\r\n \"phoneNumber\": \"string\",\r\n \"phoneNumberConfirmed\": false,\r\n \"webSite\": \"string\",\r\n \"twitter\": \"string\",\r\n \"github\": \"string\",\r\n \"linkedin\": \"string\",\r\n \"company\": \"string\",\r\n \"jobTitle\": \"string\",\r\n \"biography\": \"string\",\r\n \"extraProperties\": {\r\n \"string\": \"object\"\r\n },\r\n \"id\": \"00000000-0000-0000-0000-000000000000\"\r\n },\r\n \"tags\": [\r\n {\r\n \"name\": \"string\",\r\n \"description\": \"string\",\r\n \"usageCount\": 0,\r\n \"isDeleted\": false,\r\n \"deleterId\": null,\r\n \"deletionTime\": null,\r\n \"lastModificationTime\": null,\r\n \"lastModifierId\": null,\r\n \"creationTime\": \"0001-01-01T00:00:00\",\r\n \"creatorId\": null,\r\n \"id\": \"00000000-0000-0000-0000-000000000000\"\r\n }\r\n ],\r\n \"concurrencyStamp\": \"string\",\r\n \"isDeleted\": false,\r\n \"deleterId\": null,\r\n \"deletionTime\": null,\r\n \"lastModificationTime\": null,\r\n \"lastModifierId\": null,\r\n \"creationTime\": \"0001-01-01T00:00:00\",\r\n \"creatorId\": null,\r\n \"id\": \"00000000-0000-0000-0000-000000000000\"\r\n}", + "parameterDescriptions": [ + { + "name": "id", + "type": "Guid" + }, + { + "name": "input", + "type": "UpdatePostDto" + } + ] + }, + { + "path": "api/blogging/posts/user/{userId}", + "method": "GET", + "groupName": "Posts", + "responseType": "System.Collections.Generic.List`1[Volo.Blogging.Posts.PostWithDetailsDto]", + "responseTypeAsJson": "[\r\n {\r\n \"blogId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"title\": \"string\",\r\n \"coverImage\": \"string\",\r\n \"url\": \"string\",\r\n \"content\": \"string\",\r\n \"description\": \"string\",\r\n \"readCount\": 0,\r\n \"commentCount\": 0,\r\n \"writer\": {\r\n \"tenantId\": null,\r\n \"name\": \"string\",\r\n \"surname\": \"string\",\r\n \"userName\": \"string\",\r\n \"email\": \"string\",\r\n \"emailConfirmed\": false,\r\n \"phoneNumber\": \"string\",\r\n \"phoneNumberConfirmed\": false,\r\n \"webSite\": \"string\",\r\n \"twitter\": \"string\",\r\n \"github\": \"string\",\r\n \"linkedin\": \"string\",\r\n \"company\": \"string\",\r\n \"jobTitle\": \"string\",\r\n \"biography\": \"string\",\r\n \"extraProperties\": {\r\n \"string\": \"object\"\r\n },\r\n \"id\": \"00000000-0000-0000-0000-000000000000\"\r\n },\r\n \"tags\": [\r\n {\r\n \"name\": \"string\",\r\n \"description\": \"string\",\r\n \"usageCount\": 0,\r\n \"isDeleted\": false,\r\n \"deleterId\": null,\r\n \"deletionTime\": null,\r\n \"lastModificationTime\": null,\r\n \"lastModifierId\": null,\r\n \"creationTime\": \"0001-01-01T00:00:00\",\r\n \"creatorId\": null,\r\n \"id\": \"00000000-0000-0000-0000-000000000000\"\r\n }\r\n ],\r\n \"concurrencyStamp\": \"string\",\r\n \"isDeleted\": false,\r\n \"deleterId\": null,\r\n \"deletionTime\": null,\r\n \"lastModificationTime\": null,\r\n \"lastModifierId\": null,\r\n \"creationTime\": \"0001-01-01T00:00:00\",\r\n \"creatorId\": null,\r\n \"id\": \"00000000-0000-0000-0000-000000000000\"\r\n }\r\n]", + "parameterDescriptions": [ + { + "name": "userId", + "type": "Guid" + } + ] + }, + { + "path": "api/blogging/posts/{blogId}/latest/{count}", + "method": "GET", + "groupName": "Posts", + "responseType": "System.Collections.Generic.List`1[Volo.Blogging.Posts.PostWithDetailsDto]", + "responseTypeAsJson": "[\r\n {\r\n \"blogId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"title\": \"string\",\r\n \"coverImage\": \"string\",\r\n \"url\": \"string\",\r\n \"content\": \"string\",\r\n \"description\": \"string\",\r\n \"readCount\": 0,\r\n \"commentCount\": 0,\r\n \"writer\": {\r\n \"tenantId\": null,\r\n \"name\": \"string\",\r\n \"surname\": \"string\",\r\n \"userName\": \"string\",\r\n \"email\": \"string\",\r\n \"emailConfirmed\": false,\r\n \"phoneNumber\": \"string\",\r\n \"phoneNumberConfirmed\": false,\r\n \"webSite\": \"string\",\r\n \"twitter\": \"string\",\r\n \"github\": \"string\",\r\n \"linkedin\": \"string\",\r\n \"company\": \"string\",\r\n \"jobTitle\": \"string\",\r\n \"biography\": \"string\",\r\n \"extraProperties\": {\r\n \"string\": \"object\"\r\n },\r\n \"id\": \"00000000-0000-0000-0000-000000000000\"\r\n },\r\n \"tags\": [\r\n {\r\n \"name\": \"string\",\r\n \"description\": \"string\",\r\n \"usageCount\": 0,\r\n \"isDeleted\": false,\r\n \"deleterId\": null,\r\n \"deletionTime\": null,\r\n \"lastModificationTime\": null,\r\n \"lastModifierId\": null,\r\n \"creationTime\": \"0001-01-01T00:00:00\",\r\n \"creatorId\": null,\r\n \"id\": \"00000000-0000-0000-0000-000000000000\"\r\n }\r\n ],\r\n \"concurrencyStamp\": \"string\",\r\n \"isDeleted\": false,\r\n \"deleterId\": null,\r\n \"deletionTime\": null,\r\n \"lastModificationTime\": null,\r\n \"lastModifierId\": null,\r\n \"creationTime\": \"0001-01-01T00:00:00\",\r\n \"creatorId\": null,\r\n \"id\": \"00000000-0000-0000-0000-000000000000\"\r\n }\r\n]", + "parameterDescriptions": [ + { + "name": "blogId", + "type": "Guid" + }, + { + "name": "count", + "type": "Int32" + } + ] + }, + { + "path": "api/blogging/posts/{id}", + "method": "DELETE", + "groupName": "Posts", + "responseType": "System.Void", + "responseTypeAsJson": "", + "parameterDescriptions": [ + { + "name": "id", + "type": "Guid" + } + ] + }, + { + "path": "api/blogging/tags/popular/{blogId}", + "method": "GET", + "groupName": "Tags", + "responseType": "System.Collections.Generic.List`1[Volo.Blogging.Tagging.Dtos.TagDto]", + "responseTypeAsJson": "[\r\n {\r\n \"name\": \"string\",\r\n \"description\": \"string\",\r\n \"usageCount\": 0,\r\n \"isDeleted\": false,\r\n \"deleterId\": null,\r\n \"deletionTime\": null,\r\n \"lastModificationTime\": null,\r\n \"lastModifierId\": null,\r\n \"creationTime\": \"0001-01-01T00:00:00\",\r\n \"creatorId\": null,\r\n \"id\": \"00000000-0000-0000-0000-000000000000\"\r\n }\r\n]", + "parameterDescriptions": [ + { + "name": "blogId", + "type": "Guid" + }, + { + "name": "ResultCount", + "type": "Int32" + }, + { + "name": "MinimumPostCount", + "type": "Nullable" + } + ] + } + ], + "contentType": "httpApi", + "name": "Defined Http Apis", + "summary": null } ] } \ No newline at end of file diff --git a/modules/blogging/src/Volo.Blogging.MongoDB/Volo.Blogging.MongoDB.abppkg.analyze.json b/modules/blogging/src/Volo.Blogging.MongoDB/Volo.Blogging.MongoDB.abppkg.analyze.json index f72236e318..3c45d3118e 100644 --- a/modules/blogging/src/Volo.Blogging.MongoDB/Volo.Blogging.MongoDB.abppkg.analyze.json +++ b/modules/blogging/src/Volo.Blogging.MongoDB/Volo.Blogging.MongoDB.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Blogging.MongoDB", - "hash": "4487b4df01fcd98b0ce2e7d2d11c9ba5", + "hash": "", "contents": [ { "namespace": "Volo.Blogging.MongoDB", @@ -74,33 +74,33 @@ "connectionStringName": "Blogging", "databaseCollections": [ { - "entityFullName": "Volo.Blogging.Blogs.Blog", + "entityFullName": "Volo.Blogging.Users.BlogUser", "contentType": "databaseCollection", - "name": "BlgBlogs", + "name": "Users", "summary": null }, { - "entityFullName": "Volo.Blogging.Comments.Comment", + "entityFullName": "Volo.Blogging.Blogs.Blog", "contentType": "databaseCollection", - "name": "BlgComments", + "name": "Blogs", "summary": null }, { - "entityFullName": "Volo.Blogging.Users.BlogUser", + "entityFullName": "Volo.Blogging.Posts.Post", "contentType": "databaseCollection", - "name": "BlgUsers", + "name": "Posts", "summary": null }, { "entityFullName": "Volo.Blogging.Tagging.Tag", "contentType": "databaseCollection", - "name": "BlgTags", + "name": "Tags", "summary": null }, { - "entityFullName": "Volo.Blogging.Posts.Post", + "entityFullName": "Volo.Blogging.Comments.Comment", "contentType": "databaseCollection", - "name": "BlgPosts", + "name": "Comments", "summary": null } ], diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Detail.cshtml.cs b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Detail.cshtml.cs index de1f9dfdb0..f13936a5af 100644 --- a/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Detail.cshtml.cs +++ b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Detail.cshtml.cs @@ -98,7 +98,9 @@ namespace Volo.Blogging.Pages.Blogs.Posts await GetData(); - return Page(); + // PRG pattern + // Redirect to the same page to prevent form resubmission + return RedirectToPage(); } private async Task GetData() diff --git a/modules/blogging/src/Volo.Blogging.Web/Volo.Blogging.Web.abppkg.analyze.json b/modules/blogging/src/Volo.Blogging.Web/Volo.Blogging.Web.abppkg.analyze.json index 27a396bd9e..895ffb1675 100644 --- a/modules/blogging/src/Volo.Blogging.Web/Volo.Blogging.Web.abppkg.analyze.json +++ b/modules/blogging/src/Volo.Blogging.Web/Volo.Blogging.Web.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Blogging.Web", - "hash": "d4c82263439a4a663a6b98ee502d02f4", + "hash": "", "contents": [ { "namespace": "Volo.Blogging", @@ -73,6 +73,42 @@ "contentType": "abpModule", "name": "BloggingWebModule", "summary": null + }, + { + "namespace": "Volo.Blogging.Pages.Blogs", + "contentType": "webPage", + "name": "IndexModel", + "summary": null + }, + { + "namespace": "Volo.Blogging.Pages.Blogs.Posts", + "contentType": "webPage", + "name": "DetailModel", + "summary": null + }, + { + "namespace": "Volo.Blogging.Pages.Blogs.Posts", + "contentType": "webPage", + "name": "EditModel", + "summary": null + }, + { + "namespace": "Volo.Blogging.Pages.Blogs.Posts", + "contentType": "webPage", + "name": "IndexModel", + "summary": null + }, + { + "namespace": "Volo.Blogging.Pages.Blogs.Posts", + "contentType": "webPage", + "name": "NewModel", + "summary": null + }, + { + "namespace": "Volo.Blogging.Pages.Blogs.Members", + "contentType": "webPage", + "name": "IndexModel", + "summary": null } ] } \ No newline at end of file diff --git a/modules/client-simulation/demo/Volo.ClientSimulation.Demo/package.json b/modules/client-simulation/demo/Volo.ClientSimulation.Demo/package.json index 73b6824832..f218cbad11 100644 --- a/modules/client-simulation/demo/Volo.ClientSimulation.Demo/package.json +++ b/modules/client-simulation/demo/Volo.ClientSimulation.Demo/package.json @@ -3,6 +3,6 @@ "name": "client-simulation-web", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "~8.3.0-rc.1" + "@abp/aspnetcore.mvc.ui.theme.basic": "~8.3.0" } } diff --git a/modules/client-simulation/demo/Volo.ClientSimulation.Demo/yarn.lock b/modules/client-simulation/demo/Volo.ClientSimulation.Demo/yarn.lock index f8b5af47ca..d19b65bc24 100644 --- a/modules/client-simulation/demo/Volo.ClientSimulation.Demo/yarn.lock +++ b/modules/client-simulation/demo/Volo.ClientSimulation.Demo/yarn.lock @@ -2,194 +2,194 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-8.3.0-rc.1.tgz#7254b66019b99ac8a29385c1bb2c9c658a167bc7" - integrity sha512-uMgO1VQgDOW9tMq9gl6idsBZZcL/voeMp0wkBTRORQHg0E+SyA8z0yQrg5S8hU/7zRwoZPm3K9R/Peu71jNTgQ== - dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~8.3.0-rc.1" - -"@abp/aspnetcore.mvc.ui.theme.shared@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-8.3.0-rc.1.tgz#cec5ca6c5a5f61a361425b9d55711beb0db4eb81" - integrity sha512-qLAzDwiQvRB8xDs6bkeZ4YLMUuTb6Dz/GmWT61dSMUAhRCTPqPi6aWnt9fiM99HbkP7APLPb7d+o5ho6FoktNQ== - dependencies: - "@abp/aspnetcore.mvc.ui" "~8.3.0-rc.1" - "@abp/bootstrap" "~8.3.0-rc.1" - "@abp/bootstrap-datepicker" "~8.3.0-rc.1" - "@abp/bootstrap-daterangepicker" "~8.3.0-rc.1" - "@abp/datatables.net-bs5" "~8.3.0-rc.1" - "@abp/font-awesome" "~8.3.0-rc.1" - "@abp/jquery-form" "~8.3.0-rc.1" - "@abp/jquery-validation-unobtrusive" "~8.3.0-rc.1" - "@abp/lodash" "~8.3.0-rc.1" - "@abp/luxon" "~8.3.0-rc.1" - "@abp/malihu-custom-scrollbar-plugin" "~8.3.0-rc.1" - "@abp/moment" "~8.3.0-rc.1" - "@abp/select2" "~8.3.0-rc.1" - "@abp/sweetalert2" "~8.3.0-rc.1" - "@abp/timeago" "~8.3.0-rc.1" - "@abp/toastr" "~8.3.0-rc.1" - -"@abp/aspnetcore.mvc.ui@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-8.3.0-rc.1.tgz#7329e4878e64277dfed88eef5e9d1715d1af925f" - integrity sha512-NPWrtJ+Il+SI0oPQ5gc1Lc9vfPZvHbe0d/5y5qGIdwKY1F5txIyRGesc0najOLIUe7Z66AInyfNuNeoaFNR0fg== +"@abp/aspnetcore.mvc.ui.theme.basic@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-8.3.0.tgz#a2d17eb5da2c3abfad4bcc842cfcda0e58a130a4" + integrity sha512-T2dg7WlvNSrwTCfy5wk4gqiJ/15kIjMGM4wLXIJcMYn60yGY/YeX6Q4A3R/qJzfl4JdgW5rt3GpdKv86y/ADXg== + dependencies: + "@abp/aspnetcore.mvc.ui.theme.shared" "~8.3.0" + +"@abp/aspnetcore.mvc.ui.theme.shared@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-8.3.0.tgz#5d6bb5181a62770e9cb967980b77e75c115c5ed7" + integrity sha512-o/0eh8jLS+YJiseTKzzioUz0vNnMFzyoz+mkyA4PlO1gqw2JFhzPhTBZ3cuyV9QlxUfEA8dWAkqAUX6vqiHwkw== + dependencies: + "@abp/aspnetcore.mvc.ui" "~8.3.0" + "@abp/bootstrap" "~8.3.0" + "@abp/bootstrap-datepicker" "~8.3.0" + "@abp/bootstrap-daterangepicker" "~8.3.0" + "@abp/datatables.net-bs5" "~8.3.0" + "@abp/font-awesome" "~8.3.0" + "@abp/jquery-form" "~8.3.0" + "@abp/jquery-validation-unobtrusive" "~8.3.0" + "@abp/lodash" "~8.3.0" + "@abp/luxon" "~8.3.0" + "@abp/malihu-custom-scrollbar-plugin" "~8.3.0" + "@abp/moment" "~8.3.0" + "@abp/select2" "~8.3.0" + "@abp/sweetalert2" "~8.3.0" + "@abp/timeago" "~8.3.0" + "@abp/toastr" "~8.3.0" + +"@abp/aspnetcore.mvc.ui@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-8.3.0.tgz#d7ba0539bfcc6661a347dea7f952489010b3e816" + integrity sha512-OxgZhLKiXGFYYpNJ5O/IbhinsniiBPv9586e+1Soar0GckCMIIegJxnJb1Bo1O75blrcK2cIU6LqjRT1FXt2Lw== dependencies: ansi-colors "^4.1.3" -"@abp/bootstrap-datepicker@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-8.3.0-rc.1.tgz#d3bcb5f0063df631ad45c7f822195fc4e5c5b4e2" - integrity sha512-oqbwh9dz8XNfh+eZou8GvcEUYA1J0qr3ABA1r72DJZ/nzfLQX7pUO8NkkaDLpVwrly64rfOlxV4LT7g5muoAsw== +"@abp/bootstrap-datepicker@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-8.3.0.tgz#8c1bf9efec37b671d8f28b8b1e89c1ac66684267" + integrity sha512-KCwMtm7x+cnKPeNMzhjDJUce0stwu4e57ibmvA6sMf1tmj+yB256O4E2hIDDohiT3vP/zV8HVHX6uATlcmGC9w== dependencies: bootstrap-datepicker "^1.10.0" -"@abp/bootstrap-daterangepicker@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-8.3.0-rc.1.tgz#33958a1806a070db4fb01eb40a0897bfd16cf1f5" - integrity sha512-egtnxhRMCu56RV2bIRBLLTly2Y4W/2jwl9el+9Stjc8IN91j2UL5E4t5qn3zI3vXvVX4w5vP+TthQj0grFK0/Q== +"@abp/bootstrap-daterangepicker@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-8.3.0.tgz#2b8ed978333502677916f88cbb3e1d1b1c8a3a17" + integrity sha512-uQSfuCQogl4BujdqvtdAoSE+z32ci8FT5+i3gLfpqbgTaxvY/Kv5NxAUH5/1sjnuAE7SMWO+eVvI3V0pXgQohg== dependencies: bootstrap-daterangepicker "^3.1.0" -"@abp/bootstrap@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-8.3.0-rc.1.tgz#3ca994e4c003d056024dcd533221461cccd14f2a" - integrity sha512-xrs0JOYFEPzi3V6s9d3SCj0CxY06bBmFUK5aETgKUiXBXa4vU2YoNbnrCtDUvV+mn517FRuA/j3RaFkTWYg48g== +"@abp/bootstrap@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-8.3.0.tgz#96d6ea7e6ac30f6e34e495a4224f56f7b2a1a7a3" + integrity sha512-5AmdTtakmWhZmHrb7ibvvf+KwF9OGadpAe7Kv9mNEE02K2qkp7Xw4r5o/bgVl7YfLC1FA6GZZXrV2s2t0gjHtg== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" bootstrap "^5.3.3" -"@abp/core@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-8.3.0-rc.1.tgz#771c7ecd27319201a8236f0bc6b5601188059325" - integrity sha512-IB8Baa3LIv3XYja6iBw6VSnITGcRseGyY8wBNEXRiB+ni21Bv//NMyohdOot6G+HlnHlrB7kFeCX+gWu+LuYkg== +"@abp/core@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-8.3.0.tgz#3a68f5a9549efcc3e13500e301f2576751b51445" + integrity sha512-zrxnZi4qij/Y4AZWaXuPqs3Dd7gBtU/onX7FkYxLgQDxYBfx+84QAnPRNRFKMWaD/wKbTUB0wA66U3t2aiQX9Q== dependencies: - "@abp/utils" "~8.3.0-rc.1" + "@abp/utils" "~8.3.0" -"@abp/datatables.net-bs5@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-8.3.0-rc.1.tgz#b53dc353f485952439ea10035df0851d520efe96" - integrity sha512-89wpkG6u1YBR98OmuEbvs4VdR5n8L4n3Z8GiHwuKr2FpEOx7cAXYKsx/8ifmICMLPiMIvFrtOEBrrv5ZKANsAA== +"@abp/datatables.net-bs5@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-8.3.0.tgz#21822ae4912a561afe9112925185aece03fcd0eb" + integrity sha512-GOGYSSHp3iPUDFRX2Y3C0wkiCOJDuYuK/zUSzQLNpOvBMZO+I/oWBcZM+qkVowIzsoRlAGV9+CVV2B/B05qidA== dependencies: - "@abp/datatables.net" "~8.3.0-rc.1" + "@abp/datatables.net" "~8.3.0" datatables.net-bs5 "^2.0.8" -"@abp/datatables.net@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-8.3.0-rc.1.tgz#bb70608994c4a52bd15331f76af718353c843f94" - integrity sha512-G42D6W0Xb8NIQxJWGpcxLOjbZ4CHtrm9oBG5+GfVmQEPGfl8r+DYdrYDAkysDg483s+48POH7NC3L1LOlxlqRg== +"@abp/datatables.net@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-8.3.0.tgz#ff697758ce9309ba8311f23aec921c4722588c8b" + integrity sha512-4dIdv7eN1tVouOUrlF+MIdg8zQpecyH61waqLgy1q5jMZQivrTSFZ7UWMG3WVOAYjw5zSUZHZPbzA+ttnaOPkg== dependencies: - "@abp/jquery" "~8.3.0-rc.1" + "@abp/jquery" "~8.3.0" datatables.net "^2.0.8" -"@abp/font-awesome@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-8.3.0-rc.1.tgz#ea05d7e08395b1894eefe6f912ae0534fd75e69a" - integrity sha512-GN1xZ76RzQC3aqU2m19vYsyfESCeoSsp8AtvilmeqsjlzhuLLdQ6UWSxMqRqE22TCWRXbA/d/7IAb12TB1mawg== +"@abp/font-awesome@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-8.3.0.tgz#9e4e9adc08dfca52c0a07d1608c5e5662675a4c9" + integrity sha512-NRxvM/dzvQC2Cj/F5i07XB/i6IVTmXcO9sOq6TWosWib0wGaPxRbCSjy8QUAYSD1QYaVQ30XMb3XXImaMGyd8A== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" "@fortawesome/fontawesome-free" "^6.5.2" -"@abp/jquery-form@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-8.3.0-rc.1.tgz#21025048f44028a5cb1ced7414cb48af00e91bff" - integrity sha512-mVZzEJKbhiYmXK2yZRZAJwO5e7C2N0lj8ueOYPiFG6h4UKLbKPHQdIrkapyc88VirrELe1hnhJJbQ56dsQWeyg== +"@abp/jquery-form@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-8.3.0.tgz#fa2ad2fedbe3d3528ee94cbbd4f94d48f0cb5e4d" + integrity sha512-olP9FmpNVTbOIewsVua0moHVYXw4Sl3chFbvTDLG6vRBohLSjllUXfgY3UEIVWR1PCqnAg+iEJZl9NHB9iOLBg== dependencies: - "@abp/jquery" "~8.3.0-rc.1" + "@abp/jquery" "~8.3.0" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-8.3.0-rc.1.tgz#63042715391ca63f273874ff66fca4b20330d31b" - integrity sha512-EKQf733+HS9bIVQhMgAHYZfCY663GqNv8KUcCIuQOHPt5DWU49ygYhawkcYIzUKd2Gy9+ZtyWLkWmoBxTnwlmw== +"@abp/jquery-validation-unobtrusive@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-8.3.0.tgz#0992cdd33170df83c79aa3371038c0b30e451521" + integrity sha512-9hidjq8x8sTnP5O3K2b2x9NpxvPd9WB03ENR6OfvM89kfSmQapSvBZTlCu80YK9NaQJ6MLQRLYOCuc3GHcj3EQ== dependencies: - "@abp/jquery-validation" "~8.3.0-rc.1" + "@abp/jquery-validation" "~8.3.0" jquery-validation-unobtrusive "^4.0.0" -"@abp/jquery-validation@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-8.3.0-rc.1.tgz#8c82189ba7c3614f7306c2bf958b3717a6a4e702" - integrity sha512-Fr8AI//7iV743S6bw4ixE5qOu+af3HfZSivQJnYVVTbR/75gPqI/xRe6u/k82TJIBM7IaspQ4QdruMuvnJyBpQ== +"@abp/jquery-validation@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-8.3.0.tgz#bd6a72c6d86f116abe3b5d2adf3752bdbbcca887" + integrity sha512-6l5BZSa3N0Fou6Se7MfUSnI2dD4SYhZ2V988bgPJQ6p37XBOZ2OAj7LEIf5FSjtUzXjao/6/vqjkPNYreNikig== dependencies: - "@abp/jquery" "~8.3.0-rc.1" + "@abp/jquery" "~8.3.0" jquery-validation "^1.20.1" -"@abp/jquery@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-8.3.0-rc.1.tgz#a181c6749d58690b3265705959d8c818296896f3" - integrity sha512-fXs35cDLAw66irfHsFIWD41RKzpLABkULLoMwxfB76nOVPdV7qlWrXoI2O/du3xhCqBqHR4fS8xjwE6kFvkdLQ== +"@abp/jquery@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-8.3.0.tgz#9be5ef2f769680226e6a1a981026590caf3b57ef" + integrity sha512-GsFY+n3EtS6B0pAoKd+xMnt5Dzi5bHvIbhLgDgfQfOBzAy3twGRWsPQ3nkuXXm8TppwujMNowU1oiLKPPm0AOA== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" jquery "~3.7.1" -"@abp/lodash@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-8.3.0-rc.1.tgz#32f8805031f73b9d5bdc338afe49739c4ebc3ce9" - integrity sha512-UBGlG5+tFpyAPMuwpkY7K/g21c+d3Aq3HbFmcIilUEIsJ+yJqj95xhRh6t/LSwJCo5ntdSCgVC85q0kD0fQlQA== +"@abp/lodash@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-8.3.0.tgz#f5a0a496c999886f2d6999067bfac2e1f0c3969c" + integrity sha512-BiAsONbKR/RKG3WjRaMWVmhNe1ELEsykVq+ogG1Rhk3kwPbvze3TS8k2p0Lu/RC41/BmDUmJ5abg1pUMwkRT8w== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" lodash "^4.17.21" -"@abp/luxon@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-8.3.0-rc.1.tgz#df19773212502336c2caf6a8806b7647748f8f81" - integrity sha512-1oPx0tGyFi58T0yv/pdqJpcIRWU6ej5Sv28fRgz3J6tHam3hVPtKJPK9Ajvn6+MNVDLuMUczgVtfWEOvO2Kqrg== +"@abp/luxon@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-8.3.0.tgz#7dd3f756be1605506e26f7ac76b80cc082a12d07" + integrity sha512-8gdI5BtXkVp0sFg89QVDe8AvgQ7Qfq4JCqz2PMrKPSATR3H8GD6BCaEYpRp6CNTCjVrQjGZdzKgUyea1D3dHbw== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" luxon "^3.4.4" -"@abp/malihu-custom-scrollbar-plugin@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-8.3.0-rc.1.tgz#b57086d708082ce45e1917aeca8c92029ebd805d" - integrity sha512-4sa5e07EPW9IM7eQbvKtk78gd/bESYhTsl+BeWSKeqjj5wwwPYf4GIEvfJM7JVnhYwh1IPYDEkTv9QNYLczXKQ== +"@abp/malihu-custom-scrollbar-plugin@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-8.3.0.tgz#c88c132c3402bbb02054ca7d446051950f87a817" + integrity sha512-nd/mb6LJa6fMxal8PGcIjIRIoZ/UHCd01WDC9YI2H4wGCGx0CA0JyHso5oc/OEzJhUL8ujO/vYm9uLb7YahPtA== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/moment@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-8.3.0-rc.1.tgz#0ba9d64ca6d7b454af7aaa63e54be267f333e1fe" - integrity sha512-YbVEDg3m+D5KMcTCBEnor/tFgmk9IeL4pF/oChYQGXLeyohY7vfmK68owAnEDN61nCRXng9xykiZu2bLq829WA== +"@abp/moment@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-8.3.0.tgz#8e4f7a523ab76ef9e4cd96a399560bad38d38d1a" + integrity sha512-LywSsKuQ2GN/Btmle6CcTKa811zbvUWdC+RLQA792K9HyBs6LvN0qRRluEQZgplairRgh2pDOg8tdFlUERkv2w== dependencies: moment "^2.30.1" -"@abp/select2@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-8.3.0-rc.1.tgz#3eb932e05987cc1e13f72decc9ae70d47801bf7d" - integrity sha512-lZuJLiFcOEVj6cTPAA7ZfhE3v1LyivmMt8Tt7Dpvgybx2PDN1NtfLce2BCKb0MvsaTlfJMSK0ZLu3JpxCQ+Q/A== +"@abp/select2@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-8.3.0.tgz#ef4742fcd345394767f46180f61c6cabbd0b3867" + integrity sha512-bdLt2+ImxxpiZl4HGbYJpdDROQUT7/Z/+8A+6oJNacq3lNekdvufLYgTMxKru6zTbnd9j3HFKMOTE1eRjb9Xqg== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" select2 "^4.0.13" -"@abp/sweetalert2@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-8.3.0-rc.1.tgz#66d8b9ce287a71474ce37c217cd800e150a86138" - integrity sha512-b6dZbc5/nYrUz5s+lAgi561XnsASa0ZJOn6f5W2Oakm9ULzqFndapKx5f+zHeJaNArpeGDh50AjQ+lcGGw83zQ== +"@abp/sweetalert2@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-8.3.0.tgz#a63020d57e44f7940817287d3d9676288bfb85aa" + integrity sha512-ooqPM4Z2v2scnMo5l8ycTmp6t/sW4sCsvIkJ4TyM876WLQJaZxJdOao4RQWuU+dVFr9zg8cOwqLH4q7UEiO6ww== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" sweetalert2 "^11.3.6" -"@abp/timeago@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-8.3.0-rc.1.tgz#d795b9cccb190f5d42f242727ac447fe03c30db3" - integrity sha512-yJCA7PHmAxFxIvPq03iSx3LbIiDQls4AiVBO75103LEGokRUG9bg+iPA7GLkPpfNbnNgEJ7N7Gw6RQzMNRLCpA== +"@abp/timeago@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-8.3.0.tgz#b3b8d6927bf170f77af848bc1925e5ef6835bd55" + integrity sha512-Dd6xaUoF9Bp4F9WJnTsFBqY+Gt++UR7UmLvBZL/dvthkeNCu2I8MUsmshkUUjY0lIXpjZwefUOuyupQrgHXPMg== dependencies: - "@abp/jquery" "~8.3.0-rc.1" + "@abp/jquery" "~8.3.0" timeago "^1.6.7" -"@abp/toastr@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-8.3.0-rc.1.tgz#82c7f6566e604c2cf31555da3f9b0898df8a5541" - integrity sha512-0nBM4nEvDlANVulk7EKoB4Lk/1fH+UgzPOyUOyemQZAWHgPhIpa4z5yiLkCeOxN1hu/CBEe+Jo7qJblsj+v7kQ== +"@abp/toastr@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-8.3.0.tgz#e68a2bd8f731e79034594bc2c736f7c66b3df1af" + integrity sha512-aWK/RaX/FmcEKhJLjsw1A0K2c04m2fRJkmo9NwzBCSscy6Msw9IMkqNWLiFDThMU8/qKzq7wq3Vmk/C0IpeAwA== dependencies: - "@abp/jquery" "~8.3.0-rc.1" + "@abp/jquery" "~8.3.0" toastr "^2.1.4" -"@abp/utils@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-8.3.0-rc.1.tgz#7db324059f8f9c64fbb5d5a6f0c2384896ca1928" - integrity sha512-Eg4Lwv4DEDr5mfG/8ghwMPdphywZBZIxWTJCZnCWngDQ9fEn/bnYuL1WkvbVvKd10A6030wHEJXFJj2OuNdi3Q== +"@abp/utils@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-8.3.0.tgz#96ae9266ad4d833fd9d723acef7fc85fabf618d9" + integrity sha512-w/XAqza4Z8wBWRoj5uPNKbd1/bE9L/uUWk6EUSBKmljMRryWQBmaPkb1XgvrOMQIbyyF60tUvvipapQLPVh6hw== dependencies: just-compare "^2.3.0" diff --git a/modules/client-simulation/src/Volo.ClientSimulation.Web/Volo.ClientSimulation.Web.abppkg.analyze.json b/modules/client-simulation/src/Volo.ClientSimulation.Web/Volo.ClientSimulation.Web.abppkg.analyze.json index 907c063ea6..e0da5e658e 100644 --- a/modules/client-simulation/src/Volo.ClientSimulation.Web/Volo.ClientSimulation.Web.abppkg.analyze.json +++ b/modules/client-simulation/src/Volo.ClientSimulation.Web/Volo.ClientSimulation.Web.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.ClientSimulation.Web", - "hash": "219a88f8096628953238e9590f6a5e56", + "hash": "", "contents": [ { "namespace": "Volo.ClientSimulation", diff --git a/modules/cms-kit/angular/package.json b/modules/cms-kit/angular/package.json index 2ae723fb04..3ee27697d0 100644 --- a/modules/cms-kit/angular/package.json +++ b/modules/cms-kit/angular/package.json @@ -15,11 +15,11 @@ }, "private": true, "dependencies": { - "@abp/ng.account": "~8.3.0-rc.1", - "@abp/ng.identity": "~8.3.0-rc.1", - "@abp/ng.setting-management": "~8.3.0-rc.1", - "@abp/ng.tenant-management": "~8.3.0-rc.1", - "@abp/ng.theme.basic": "~8.3.0-rc.1", + "@abp/ng.account": "~8.3.0", + "@abp/ng.identity": "~8.3.0", + "@abp/ng.setting-management": "~8.3.0", + "@abp/ng.tenant-management": "~8.3.0", + "@abp/ng.theme.basic": "~8.3.0", "@angular/animations": "~10.0.0", "@angular/common": "~10.0.0", "@angular/compiler": "~10.0.0", diff --git a/modules/cms-kit/angular/projects/cms-kit/package.json b/modules/cms-kit/angular/projects/cms-kit/package.json index e3270b0963..d2cfd7941b 100644 --- a/modules/cms-kit/angular/projects/cms-kit/package.json +++ b/modules/cms-kit/angular/projects/cms-kit/package.json @@ -4,8 +4,8 @@ "peerDependencies": { "@angular/common": "^9.1.11", "@angular/core": "^9.1.11", - "@abp/ng.core": ">=8.3.0-rc.1", - "@abp/ng.theme.shared": ">=8.3.0-rc.1" + "@abp/ng.core": ">=8.3.0", + "@abp/ng.theme.shared": ">=8.3.0" }, "dependencies": { "tslib": "^2.0.0" diff --git a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/package.json b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/package.json index 63cf058897..31f6d4b511 100644 --- a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/package.json +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/package.json @@ -3,6 +3,6 @@ "name": "my-app-identityserver", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "~8.3.0-rc.1" + "@abp/aspnetcore.mvc.ui.theme.basic": "~8.3.0" } } diff --git a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/yarn.lock b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/yarn.lock index f8b5af47ca..d19b65bc24 100644 --- a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/yarn.lock +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/yarn.lock @@ -2,194 +2,194 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-8.3.0-rc.1.tgz#7254b66019b99ac8a29385c1bb2c9c658a167bc7" - integrity sha512-uMgO1VQgDOW9tMq9gl6idsBZZcL/voeMp0wkBTRORQHg0E+SyA8z0yQrg5S8hU/7zRwoZPm3K9R/Peu71jNTgQ== - dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~8.3.0-rc.1" - -"@abp/aspnetcore.mvc.ui.theme.shared@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-8.3.0-rc.1.tgz#cec5ca6c5a5f61a361425b9d55711beb0db4eb81" - integrity sha512-qLAzDwiQvRB8xDs6bkeZ4YLMUuTb6Dz/GmWT61dSMUAhRCTPqPi6aWnt9fiM99HbkP7APLPb7d+o5ho6FoktNQ== - dependencies: - "@abp/aspnetcore.mvc.ui" "~8.3.0-rc.1" - "@abp/bootstrap" "~8.3.0-rc.1" - "@abp/bootstrap-datepicker" "~8.3.0-rc.1" - "@abp/bootstrap-daterangepicker" "~8.3.0-rc.1" - "@abp/datatables.net-bs5" "~8.3.0-rc.1" - "@abp/font-awesome" "~8.3.0-rc.1" - "@abp/jquery-form" "~8.3.0-rc.1" - "@abp/jquery-validation-unobtrusive" "~8.3.0-rc.1" - "@abp/lodash" "~8.3.0-rc.1" - "@abp/luxon" "~8.3.0-rc.1" - "@abp/malihu-custom-scrollbar-plugin" "~8.3.0-rc.1" - "@abp/moment" "~8.3.0-rc.1" - "@abp/select2" "~8.3.0-rc.1" - "@abp/sweetalert2" "~8.3.0-rc.1" - "@abp/timeago" "~8.3.0-rc.1" - "@abp/toastr" "~8.3.0-rc.1" - -"@abp/aspnetcore.mvc.ui@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-8.3.0-rc.1.tgz#7329e4878e64277dfed88eef5e9d1715d1af925f" - integrity sha512-NPWrtJ+Il+SI0oPQ5gc1Lc9vfPZvHbe0d/5y5qGIdwKY1F5txIyRGesc0najOLIUe7Z66AInyfNuNeoaFNR0fg== +"@abp/aspnetcore.mvc.ui.theme.basic@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-8.3.0.tgz#a2d17eb5da2c3abfad4bcc842cfcda0e58a130a4" + integrity sha512-T2dg7WlvNSrwTCfy5wk4gqiJ/15kIjMGM4wLXIJcMYn60yGY/YeX6Q4A3R/qJzfl4JdgW5rt3GpdKv86y/ADXg== + dependencies: + "@abp/aspnetcore.mvc.ui.theme.shared" "~8.3.0" + +"@abp/aspnetcore.mvc.ui.theme.shared@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-8.3.0.tgz#5d6bb5181a62770e9cb967980b77e75c115c5ed7" + integrity sha512-o/0eh8jLS+YJiseTKzzioUz0vNnMFzyoz+mkyA4PlO1gqw2JFhzPhTBZ3cuyV9QlxUfEA8dWAkqAUX6vqiHwkw== + dependencies: + "@abp/aspnetcore.mvc.ui" "~8.3.0" + "@abp/bootstrap" "~8.3.0" + "@abp/bootstrap-datepicker" "~8.3.0" + "@abp/bootstrap-daterangepicker" "~8.3.0" + "@abp/datatables.net-bs5" "~8.3.0" + "@abp/font-awesome" "~8.3.0" + "@abp/jquery-form" "~8.3.0" + "@abp/jquery-validation-unobtrusive" "~8.3.0" + "@abp/lodash" "~8.3.0" + "@abp/luxon" "~8.3.0" + "@abp/malihu-custom-scrollbar-plugin" "~8.3.0" + "@abp/moment" "~8.3.0" + "@abp/select2" "~8.3.0" + "@abp/sweetalert2" "~8.3.0" + "@abp/timeago" "~8.3.0" + "@abp/toastr" "~8.3.0" + +"@abp/aspnetcore.mvc.ui@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-8.3.0.tgz#d7ba0539bfcc6661a347dea7f952489010b3e816" + integrity sha512-OxgZhLKiXGFYYpNJ5O/IbhinsniiBPv9586e+1Soar0GckCMIIegJxnJb1Bo1O75blrcK2cIU6LqjRT1FXt2Lw== dependencies: ansi-colors "^4.1.3" -"@abp/bootstrap-datepicker@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-8.3.0-rc.1.tgz#d3bcb5f0063df631ad45c7f822195fc4e5c5b4e2" - integrity sha512-oqbwh9dz8XNfh+eZou8GvcEUYA1J0qr3ABA1r72DJZ/nzfLQX7pUO8NkkaDLpVwrly64rfOlxV4LT7g5muoAsw== +"@abp/bootstrap-datepicker@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-8.3.0.tgz#8c1bf9efec37b671d8f28b8b1e89c1ac66684267" + integrity sha512-KCwMtm7x+cnKPeNMzhjDJUce0stwu4e57ibmvA6sMf1tmj+yB256O4E2hIDDohiT3vP/zV8HVHX6uATlcmGC9w== dependencies: bootstrap-datepicker "^1.10.0" -"@abp/bootstrap-daterangepicker@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-8.3.0-rc.1.tgz#33958a1806a070db4fb01eb40a0897bfd16cf1f5" - integrity sha512-egtnxhRMCu56RV2bIRBLLTly2Y4W/2jwl9el+9Stjc8IN91j2UL5E4t5qn3zI3vXvVX4w5vP+TthQj0grFK0/Q== +"@abp/bootstrap-daterangepicker@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-8.3.0.tgz#2b8ed978333502677916f88cbb3e1d1b1c8a3a17" + integrity sha512-uQSfuCQogl4BujdqvtdAoSE+z32ci8FT5+i3gLfpqbgTaxvY/Kv5NxAUH5/1sjnuAE7SMWO+eVvI3V0pXgQohg== dependencies: bootstrap-daterangepicker "^3.1.0" -"@abp/bootstrap@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-8.3.0-rc.1.tgz#3ca994e4c003d056024dcd533221461cccd14f2a" - integrity sha512-xrs0JOYFEPzi3V6s9d3SCj0CxY06bBmFUK5aETgKUiXBXa4vU2YoNbnrCtDUvV+mn517FRuA/j3RaFkTWYg48g== +"@abp/bootstrap@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-8.3.0.tgz#96d6ea7e6ac30f6e34e495a4224f56f7b2a1a7a3" + integrity sha512-5AmdTtakmWhZmHrb7ibvvf+KwF9OGadpAe7Kv9mNEE02K2qkp7Xw4r5o/bgVl7YfLC1FA6GZZXrV2s2t0gjHtg== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" bootstrap "^5.3.3" -"@abp/core@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-8.3.0-rc.1.tgz#771c7ecd27319201a8236f0bc6b5601188059325" - integrity sha512-IB8Baa3LIv3XYja6iBw6VSnITGcRseGyY8wBNEXRiB+ni21Bv//NMyohdOot6G+HlnHlrB7kFeCX+gWu+LuYkg== +"@abp/core@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-8.3.0.tgz#3a68f5a9549efcc3e13500e301f2576751b51445" + integrity sha512-zrxnZi4qij/Y4AZWaXuPqs3Dd7gBtU/onX7FkYxLgQDxYBfx+84QAnPRNRFKMWaD/wKbTUB0wA66U3t2aiQX9Q== dependencies: - "@abp/utils" "~8.3.0-rc.1" + "@abp/utils" "~8.3.0" -"@abp/datatables.net-bs5@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-8.3.0-rc.1.tgz#b53dc353f485952439ea10035df0851d520efe96" - integrity sha512-89wpkG6u1YBR98OmuEbvs4VdR5n8L4n3Z8GiHwuKr2FpEOx7cAXYKsx/8ifmICMLPiMIvFrtOEBrrv5ZKANsAA== +"@abp/datatables.net-bs5@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-8.3.0.tgz#21822ae4912a561afe9112925185aece03fcd0eb" + integrity sha512-GOGYSSHp3iPUDFRX2Y3C0wkiCOJDuYuK/zUSzQLNpOvBMZO+I/oWBcZM+qkVowIzsoRlAGV9+CVV2B/B05qidA== dependencies: - "@abp/datatables.net" "~8.3.0-rc.1" + "@abp/datatables.net" "~8.3.0" datatables.net-bs5 "^2.0.8" -"@abp/datatables.net@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-8.3.0-rc.1.tgz#bb70608994c4a52bd15331f76af718353c843f94" - integrity sha512-G42D6W0Xb8NIQxJWGpcxLOjbZ4CHtrm9oBG5+GfVmQEPGfl8r+DYdrYDAkysDg483s+48POH7NC3L1LOlxlqRg== +"@abp/datatables.net@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-8.3.0.tgz#ff697758ce9309ba8311f23aec921c4722588c8b" + integrity sha512-4dIdv7eN1tVouOUrlF+MIdg8zQpecyH61waqLgy1q5jMZQivrTSFZ7UWMG3WVOAYjw5zSUZHZPbzA+ttnaOPkg== dependencies: - "@abp/jquery" "~8.3.0-rc.1" + "@abp/jquery" "~8.3.0" datatables.net "^2.0.8" -"@abp/font-awesome@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-8.3.0-rc.1.tgz#ea05d7e08395b1894eefe6f912ae0534fd75e69a" - integrity sha512-GN1xZ76RzQC3aqU2m19vYsyfESCeoSsp8AtvilmeqsjlzhuLLdQ6UWSxMqRqE22TCWRXbA/d/7IAb12TB1mawg== +"@abp/font-awesome@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-8.3.0.tgz#9e4e9adc08dfca52c0a07d1608c5e5662675a4c9" + integrity sha512-NRxvM/dzvQC2Cj/F5i07XB/i6IVTmXcO9sOq6TWosWib0wGaPxRbCSjy8QUAYSD1QYaVQ30XMb3XXImaMGyd8A== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" "@fortawesome/fontawesome-free" "^6.5.2" -"@abp/jquery-form@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-8.3.0-rc.1.tgz#21025048f44028a5cb1ced7414cb48af00e91bff" - integrity sha512-mVZzEJKbhiYmXK2yZRZAJwO5e7C2N0lj8ueOYPiFG6h4UKLbKPHQdIrkapyc88VirrELe1hnhJJbQ56dsQWeyg== +"@abp/jquery-form@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-8.3.0.tgz#fa2ad2fedbe3d3528ee94cbbd4f94d48f0cb5e4d" + integrity sha512-olP9FmpNVTbOIewsVua0moHVYXw4Sl3chFbvTDLG6vRBohLSjllUXfgY3UEIVWR1PCqnAg+iEJZl9NHB9iOLBg== dependencies: - "@abp/jquery" "~8.3.0-rc.1" + "@abp/jquery" "~8.3.0" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-8.3.0-rc.1.tgz#63042715391ca63f273874ff66fca4b20330d31b" - integrity sha512-EKQf733+HS9bIVQhMgAHYZfCY663GqNv8KUcCIuQOHPt5DWU49ygYhawkcYIzUKd2Gy9+ZtyWLkWmoBxTnwlmw== +"@abp/jquery-validation-unobtrusive@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-8.3.0.tgz#0992cdd33170df83c79aa3371038c0b30e451521" + integrity sha512-9hidjq8x8sTnP5O3K2b2x9NpxvPd9WB03ENR6OfvM89kfSmQapSvBZTlCu80YK9NaQJ6MLQRLYOCuc3GHcj3EQ== dependencies: - "@abp/jquery-validation" "~8.3.0-rc.1" + "@abp/jquery-validation" "~8.3.0" jquery-validation-unobtrusive "^4.0.0" -"@abp/jquery-validation@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-8.3.0-rc.1.tgz#8c82189ba7c3614f7306c2bf958b3717a6a4e702" - integrity sha512-Fr8AI//7iV743S6bw4ixE5qOu+af3HfZSivQJnYVVTbR/75gPqI/xRe6u/k82TJIBM7IaspQ4QdruMuvnJyBpQ== +"@abp/jquery-validation@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-8.3.0.tgz#bd6a72c6d86f116abe3b5d2adf3752bdbbcca887" + integrity sha512-6l5BZSa3N0Fou6Se7MfUSnI2dD4SYhZ2V988bgPJQ6p37XBOZ2OAj7LEIf5FSjtUzXjao/6/vqjkPNYreNikig== dependencies: - "@abp/jquery" "~8.3.0-rc.1" + "@abp/jquery" "~8.3.0" jquery-validation "^1.20.1" -"@abp/jquery@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-8.3.0-rc.1.tgz#a181c6749d58690b3265705959d8c818296896f3" - integrity sha512-fXs35cDLAw66irfHsFIWD41RKzpLABkULLoMwxfB76nOVPdV7qlWrXoI2O/du3xhCqBqHR4fS8xjwE6kFvkdLQ== +"@abp/jquery@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-8.3.0.tgz#9be5ef2f769680226e6a1a981026590caf3b57ef" + integrity sha512-GsFY+n3EtS6B0pAoKd+xMnt5Dzi5bHvIbhLgDgfQfOBzAy3twGRWsPQ3nkuXXm8TppwujMNowU1oiLKPPm0AOA== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" jquery "~3.7.1" -"@abp/lodash@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-8.3.0-rc.1.tgz#32f8805031f73b9d5bdc338afe49739c4ebc3ce9" - integrity sha512-UBGlG5+tFpyAPMuwpkY7K/g21c+d3Aq3HbFmcIilUEIsJ+yJqj95xhRh6t/LSwJCo5ntdSCgVC85q0kD0fQlQA== +"@abp/lodash@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-8.3.0.tgz#f5a0a496c999886f2d6999067bfac2e1f0c3969c" + integrity sha512-BiAsONbKR/RKG3WjRaMWVmhNe1ELEsykVq+ogG1Rhk3kwPbvze3TS8k2p0Lu/RC41/BmDUmJ5abg1pUMwkRT8w== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" lodash "^4.17.21" -"@abp/luxon@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-8.3.0-rc.1.tgz#df19773212502336c2caf6a8806b7647748f8f81" - integrity sha512-1oPx0tGyFi58T0yv/pdqJpcIRWU6ej5Sv28fRgz3J6tHam3hVPtKJPK9Ajvn6+MNVDLuMUczgVtfWEOvO2Kqrg== +"@abp/luxon@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-8.3.0.tgz#7dd3f756be1605506e26f7ac76b80cc082a12d07" + integrity sha512-8gdI5BtXkVp0sFg89QVDe8AvgQ7Qfq4JCqz2PMrKPSATR3H8GD6BCaEYpRp6CNTCjVrQjGZdzKgUyea1D3dHbw== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" luxon "^3.4.4" -"@abp/malihu-custom-scrollbar-plugin@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-8.3.0-rc.1.tgz#b57086d708082ce45e1917aeca8c92029ebd805d" - integrity sha512-4sa5e07EPW9IM7eQbvKtk78gd/bESYhTsl+BeWSKeqjj5wwwPYf4GIEvfJM7JVnhYwh1IPYDEkTv9QNYLczXKQ== +"@abp/malihu-custom-scrollbar-plugin@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-8.3.0.tgz#c88c132c3402bbb02054ca7d446051950f87a817" + integrity sha512-nd/mb6LJa6fMxal8PGcIjIRIoZ/UHCd01WDC9YI2H4wGCGx0CA0JyHso5oc/OEzJhUL8ujO/vYm9uLb7YahPtA== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/moment@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-8.3.0-rc.1.tgz#0ba9d64ca6d7b454af7aaa63e54be267f333e1fe" - integrity sha512-YbVEDg3m+D5KMcTCBEnor/tFgmk9IeL4pF/oChYQGXLeyohY7vfmK68owAnEDN61nCRXng9xykiZu2bLq829WA== +"@abp/moment@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-8.3.0.tgz#8e4f7a523ab76ef9e4cd96a399560bad38d38d1a" + integrity sha512-LywSsKuQ2GN/Btmle6CcTKa811zbvUWdC+RLQA792K9HyBs6LvN0qRRluEQZgplairRgh2pDOg8tdFlUERkv2w== dependencies: moment "^2.30.1" -"@abp/select2@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-8.3.0-rc.1.tgz#3eb932e05987cc1e13f72decc9ae70d47801bf7d" - integrity sha512-lZuJLiFcOEVj6cTPAA7ZfhE3v1LyivmMt8Tt7Dpvgybx2PDN1NtfLce2BCKb0MvsaTlfJMSK0ZLu3JpxCQ+Q/A== +"@abp/select2@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-8.3.0.tgz#ef4742fcd345394767f46180f61c6cabbd0b3867" + integrity sha512-bdLt2+ImxxpiZl4HGbYJpdDROQUT7/Z/+8A+6oJNacq3lNekdvufLYgTMxKru6zTbnd9j3HFKMOTE1eRjb9Xqg== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" select2 "^4.0.13" -"@abp/sweetalert2@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-8.3.0-rc.1.tgz#66d8b9ce287a71474ce37c217cd800e150a86138" - integrity sha512-b6dZbc5/nYrUz5s+lAgi561XnsASa0ZJOn6f5W2Oakm9ULzqFndapKx5f+zHeJaNArpeGDh50AjQ+lcGGw83zQ== +"@abp/sweetalert2@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-8.3.0.tgz#a63020d57e44f7940817287d3d9676288bfb85aa" + integrity sha512-ooqPM4Z2v2scnMo5l8ycTmp6t/sW4sCsvIkJ4TyM876WLQJaZxJdOao4RQWuU+dVFr9zg8cOwqLH4q7UEiO6ww== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" sweetalert2 "^11.3.6" -"@abp/timeago@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-8.3.0-rc.1.tgz#d795b9cccb190f5d42f242727ac447fe03c30db3" - integrity sha512-yJCA7PHmAxFxIvPq03iSx3LbIiDQls4AiVBO75103LEGokRUG9bg+iPA7GLkPpfNbnNgEJ7N7Gw6RQzMNRLCpA== +"@abp/timeago@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-8.3.0.tgz#b3b8d6927bf170f77af848bc1925e5ef6835bd55" + integrity sha512-Dd6xaUoF9Bp4F9WJnTsFBqY+Gt++UR7UmLvBZL/dvthkeNCu2I8MUsmshkUUjY0lIXpjZwefUOuyupQrgHXPMg== dependencies: - "@abp/jquery" "~8.3.0-rc.1" + "@abp/jquery" "~8.3.0" timeago "^1.6.7" -"@abp/toastr@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-8.3.0-rc.1.tgz#82c7f6566e604c2cf31555da3f9b0898df8a5541" - integrity sha512-0nBM4nEvDlANVulk7EKoB4Lk/1fH+UgzPOyUOyemQZAWHgPhIpa4z5yiLkCeOxN1hu/CBEe+Jo7qJblsj+v7kQ== +"@abp/toastr@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-8.3.0.tgz#e68a2bd8f731e79034594bc2c736f7c66b3df1af" + integrity sha512-aWK/RaX/FmcEKhJLjsw1A0K2c04m2fRJkmo9NwzBCSscy6Msw9IMkqNWLiFDThMU8/qKzq7wq3Vmk/C0IpeAwA== dependencies: - "@abp/jquery" "~8.3.0-rc.1" + "@abp/jquery" "~8.3.0" toastr "^2.1.4" -"@abp/utils@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-8.3.0-rc.1.tgz#7db324059f8f9c64fbb5d5a6f0c2384896ca1928" - integrity sha512-Eg4Lwv4DEDr5mfG/8ghwMPdphywZBZIxWTJCZnCWngDQ9fEn/bnYuL1WkvbVvKd10A6030wHEJXFJj2OuNdi3Q== +"@abp/utils@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-8.3.0.tgz#96ae9266ad4d833fd9d723acef7fc85fabf618d9" + integrity sha512-w/XAqza4Z8wBWRoj5uPNKbd1/bE9L/uUWk6EUSBKmljMRryWQBmaPkb1XgvrOMQIbyyF60tUvvipapQLPVh6hw== dependencies: just-compare "^2.3.0" diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Host/package.json b/modules/cms-kit/host/Volo.CmsKit.Web.Host/package.json index 01201f86ab..7dad1fc3e2 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Host/package.json +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Host/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "~8.3.0-rc.1" + "@abp/aspnetcore.mvc.ui.theme.basic": "~8.3.0" } } diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Host/yarn.lock b/modules/cms-kit/host/Volo.CmsKit.Web.Host/yarn.lock index f8b5af47ca..d19b65bc24 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Host/yarn.lock +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Host/yarn.lock @@ -2,194 +2,194 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-8.3.0-rc.1.tgz#7254b66019b99ac8a29385c1bb2c9c658a167bc7" - integrity sha512-uMgO1VQgDOW9tMq9gl6idsBZZcL/voeMp0wkBTRORQHg0E+SyA8z0yQrg5S8hU/7zRwoZPm3K9R/Peu71jNTgQ== - dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~8.3.0-rc.1" - -"@abp/aspnetcore.mvc.ui.theme.shared@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-8.3.0-rc.1.tgz#cec5ca6c5a5f61a361425b9d55711beb0db4eb81" - integrity sha512-qLAzDwiQvRB8xDs6bkeZ4YLMUuTb6Dz/GmWT61dSMUAhRCTPqPi6aWnt9fiM99HbkP7APLPb7d+o5ho6FoktNQ== - dependencies: - "@abp/aspnetcore.mvc.ui" "~8.3.0-rc.1" - "@abp/bootstrap" "~8.3.0-rc.1" - "@abp/bootstrap-datepicker" "~8.3.0-rc.1" - "@abp/bootstrap-daterangepicker" "~8.3.0-rc.1" - "@abp/datatables.net-bs5" "~8.3.0-rc.1" - "@abp/font-awesome" "~8.3.0-rc.1" - "@abp/jquery-form" "~8.3.0-rc.1" - "@abp/jquery-validation-unobtrusive" "~8.3.0-rc.1" - "@abp/lodash" "~8.3.0-rc.1" - "@abp/luxon" "~8.3.0-rc.1" - "@abp/malihu-custom-scrollbar-plugin" "~8.3.0-rc.1" - "@abp/moment" "~8.3.0-rc.1" - "@abp/select2" "~8.3.0-rc.1" - "@abp/sweetalert2" "~8.3.0-rc.1" - "@abp/timeago" "~8.3.0-rc.1" - "@abp/toastr" "~8.3.0-rc.1" - -"@abp/aspnetcore.mvc.ui@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-8.3.0-rc.1.tgz#7329e4878e64277dfed88eef5e9d1715d1af925f" - integrity sha512-NPWrtJ+Il+SI0oPQ5gc1Lc9vfPZvHbe0d/5y5qGIdwKY1F5txIyRGesc0najOLIUe7Z66AInyfNuNeoaFNR0fg== +"@abp/aspnetcore.mvc.ui.theme.basic@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-8.3.0.tgz#a2d17eb5da2c3abfad4bcc842cfcda0e58a130a4" + integrity sha512-T2dg7WlvNSrwTCfy5wk4gqiJ/15kIjMGM4wLXIJcMYn60yGY/YeX6Q4A3R/qJzfl4JdgW5rt3GpdKv86y/ADXg== + dependencies: + "@abp/aspnetcore.mvc.ui.theme.shared" "~8.3.0" + +"@abp/aspnetcore.mvc.ui.theme.shared@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-8.3.0.tgz#5d6bb5181a62770e9cb967980b77e75c115c5ed7" + integrity sha512-o/0eh8jLS+YJiseTKzzioUz0vNnMFzyoz+mkyA4PlO1gqw2JFhzPhTBZ3cuyV9QlxUfEA8dWAkqAUX6vqiHwkw== + dependencies: + "@abp/aspnetcore.mvc.ui" "~8.3.0" + "@abp/bootstrap" "~8.3.0" + "@abp/bootstrap-datepicker" "~8.3.0" + "@abp/bootstrap-daterangepicker" "~8.3.0" + "@abp/datatables.net-bs5" "~8.3.0" + "@abp/font-awesome" "~8.3.0" + "@abp/jquery-form" "~8.3.0" + "@abp/jquery-validation-unobtrusive" "~8.3.0" + "@abp/lodash" "~8.3.0" + "@abp/luxon" "~8.3.0" + "@abp/malihu-custom-scrollbar-plugin" "~8.3.0" + "@abp/moment" "~8.3.0" + "@abp/select2" "~8.3.0" + "@abp/sweetalert2" "~8.3.0" + "@abp/timeago" "~8.3.0" + "@abp/toastr" "~8.3.0" + +"@abp/aspnetcore.mvc.ui@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-8.3.0.tgz#d7ba0539bfcc6661a347dea7f952489010b3e816" + integrity sha512-OxgZhLKiXGFYYpNJ5O/IbhinsniiBPv9586e+1Soar0GckCMIIegJxnJb1Bo1O75blrcK2cIU6LqjRT1FXt2Lw== dependencies: ansi-colors "^4.1.3" -"@abp/bootstrap-datepicker@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-8.3.0-rc.1.tgz#d3bcb5f0063df631ad45c7f822195fc4e5c5b4e2" - integrity sha512-oqbwh9dz8XNfh+eZou8GvcEUYA1J0qr3ABA1r72DJZ/nzfLQX7pUO8NkkaDLpVwrly64rfOlxV4LT7g5muoAsw== +"@abp/bootstrap-datepicker@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-8.3.0.tgz#8c1bf9efec37b671d8f28b8b1e89c1ac66684267" + integrity sha512-KCwMtm7x+cnKPeNMzhjDJUce0stwu4e57ibmvA6sMf1tmj+yB256O4E2hIDDohiT3vP/zV8HVHX6uATlcmGC9w== dependencies: bootstrap-datepicker "^1.10.0" -"@abp/bootstrap-daterangepicker@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-8.3.0-rc.1.tgz#33958a1806a070db4fb01eb40a0897bfd16cf1f5" - integrity sha512-egtnxhRMCu56RV2bIRBLLTly2Y4W/2jwl9el+9Stjc8IN91j2UL5E4t5qn3zI3vXvVX4w5vP+TthQj0grFK0/Q== +"@abp/bootstrap-daterangepicker@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-8.3.0.tgz#2b8ed978333502677916f88cbb3e1d1b1c8a3a17" + integrity sha512-uQSfuCQogl4BujdqvtdAoSE+z32ci8FT5+i3gLfpqbgTaxvY/Kv5NxAUH5/1sjnuAE7SMWO+eVvI3V0pXgQohg== dependencies: bootstrap-daterangepicker "^3.1.0" -"@abp/bootstrap@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-8.3.0-rc.1.tgz#3ca994e4c003d056024dcd533221461cccd14f2a" - integrity sha512-xrs0JOYFEPzi3V6s9d3SCj0CxY06bBmFUK5aETgKUiXBXa4vU2YoNbnrCtDUvV+mn517FRuA/j3RaFkTWYg48g== +"@abp/bootstrap@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-8.3.0.tgz#96d6ea7e6ac30f6e34e495a4224f56f7b2a1a7a3" + integrity sha512-5AmdTtakmWhZmHrb7ibvvf+KwF9OGadpAe7Kv9mNEE02K2qkp7Xw4r5o/bgVl7YfLC1FA6GZZXrV2s2t0gjHtg== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" bootstrap "^5.3.3" -"@abp/core@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-8.3.0-rc.1.tgz#771c7ecd27319201a8236f0bc6b5601188059325" - integrity sha512-IB8Baa3LIv3XYja6iBw6VSnITGcRseGyY8wBNEXRiB+ni21Bv//NMyohdOot6G+HlnHlrB7kFeCX+gWu+LuYkg== +"@abp/core@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-8.3.0.tgz#3a68f5a9549efcc3e13500e301f2576751b51445" + integrity sha512-zrxnZi4qij/Y4AZWaXuPqs3Dd7gBtU/onX7FkYxLgQDxYBfx+84QAnPRNRFKMWaD/wKbTUB0wA66U3t2aiQX9Q== dependencies: - "@abp/utils" "~8.3.0-rc.1" + "@abp/utils" "~8.3.0" -"@abp/datatables.net-bs5@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-8.3.0-rc.1.tgz#b53dc353f485952439ea10035df0851d520efe96" - integrity sha512-89wpkG6u1YBR98OmuEbvs4VdR5n8L4n3Z8GiHwuKr2FpEOx7cAXYKsx/8ifmICMLPiMIvFrtOEBrrv5ZKANsAA== +"@abp/datatables.net-bs5@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-8.3.0.tgz#21822ae4912a561afe9112925185aece03fcd0eb" + integrity sha512-GOGYSSHp3iPUDFRX2Y3C0wkiCOJDuYuK/zUSzQLNpOvBMZO+I/oWBcZM+qkVowIzsoRlAGV9+CVV2B/B05qidA== dependencies: - "@abp/datatables.net" "~8.3.0-rc.1" + "@abp/datatables.net" "~8.3.0" datatables.net-bs5 "^2.0.8" -"@abp/datatables.net@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-8.3.0-rc.1.tgz#bb70608994c4a52bd15331f76af718353c843f94" - integrity sha512-G42D6W0Xb8NIQxJWGpcxLOjbZ4CHtrm9oBG5+GfVmQEPGfl8r+DYdrYDAkysDg483s+48POH7NC3L1LOlxlqRg== +"@abp/datatables.net@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-8.3.0.tgz#ff697758ce9309ba8311f23aec921c4722588c8b" + integrity sha512-4dIdv7eN1tVouOUrlF+MIdg8zQpecyH61waqLgy1q5jMZQivrTSFZ7UWMG3WVOAYjw5zSUZHZPbzA+ttnaOPkg== dependencies: - "@abp/jquery" "~8.3.0-rc.1" + "@abp/jquery" "~8.3.0" datatables.net "^2.0.8" -"@abp/font-awesome@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-8.3.0-rc.1.tgz#ea05d7e08395b1894eefe6f912ae0534fd75e69a" - integrity sha512-GN1xZ76RzQC3aqU2m19vYsyfESCeoSsp8AtvilmeqsjlzhuLLdQ6UWSxMqRqE22TCWRXbA/d/7IAb12TB1mawg== +"@abp/font-awesome@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-8.3.0.tgz#9e4e9adc08dfca52c0a07d1608c5e5662675a4c9" + integrity sha512-NRxvM/dzvQC2Cj/F5i07XB/i6IVTmXcO9sOq6TWosWib0wGaPxRbCSjy8QUAYSD1QYaVQ30XMb3XXImaMGyd8A== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" "@fortawesome/fontawesome-free" "^6.5.2" -"@abp/jquery-form@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-8.3.0-rc.1.tgz#21025048f44028a5cb1ced7414cb48af00e91bff" - integrity sha512-mVZzEJKbhiYmXK2yZRZAJwO5e7C2N0lj8ueOYPiFG6h4UKLbKPHQdIrkapyc88VirrELe1hnhJJbQ56dsQWeyg== +"@abp/jquery-form@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-8.3.0.tgz#fa2ad2fedbe3d3528ee94cbbd4f94d48f0cb5e4d" + integrity sha512-olP9FmpNVTbOIewsVua0moHVYXw4Sl3chFbvTDLG6vRBohLSjllUXfgY3UEIVWR1PCqnAg+iEJZl9NHB9iOLBg== dependencies: - "@abp/jquery" "~8.3.0-rc.1" + "@abp/jquery" "~8.3.0" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-8.3.0-rc.1.tgz#63042715391ca63f273874ff66fca4b20330d31b" - integrity sha512-EKQf733+HS9bIVQhMgAHYZfCY663GqNv8KUcCIuQOHPt5DWU49ygYhawkcYIzUKd2Gy9+ZtyWLkWmoBxTnwlmw== +"@abp/jquery-validation-unobtrusive@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-8.3.0.tgz#0992cdd33170df83c79aa3371038c0b30e451521" + integrity sha512-9hidjq8x8sTnP5O3K2b2x9NpxvPd9WB03ENR6OfvM89kfSmQapSvBZTlCu80YK9NaQJ6MLQRLYOCuc3GHcj3EQ== dependencies: - "@abp/jquery-validation" "~8.3.0-rc.1" + "@abp/jquery-validation" "~8.3.0" jquery-validation-unobtrusive "^4.0.0" -"@abp/jquery-validation@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-8.3.0-rc.1.tgz#8c82189ba7c3614f7306c2bf958b3717a6a4e702" - integrity sha512-Fr8AI//7iV743S6bw4ixE5qOu+af3HfZSivQJnYVVTbR/75gPqI/xRe6u/k82TJIBM7IaspQ4QdruMuvnJyBpQ== +"@abp/jquery-validation@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-8.3.0.tgz#bd6a72c6d86f116abe3b5d2adf3752bdbbcca887" + integrity sha512-6l5BZSa3N0Fou6Se7MfUSnI2dD4SYhZ2V988bgPJQ6p37XBOZ2OAj7LEIf5FSjtUzXjao/6/vqjkPNYreNikig== dependencies: - "@abp/jquery" "~8.3.0-rc.1" + "@abp/jquery" "~8.3.0" jquery-validation "^1.20.1" -"@abp/jquery@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-8.3.0-rc.1.tgz#a181c6749d58690b3265705959d8c818296896f3" - integrity sha512-fXs35cDLAw66irfHsFIWD41RKzpLABkULLoMwxfB76nOVPdV7qlWrXoI2O/du3xhCqBqHR4fS8xjwE6kFvkdLQ== +"@abp/jquery@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-8.3.0.tgz#9be5ef2f769680226e6a1a981026590caf3b57ef" + integrity sha512-GsFY+n3EtS6B0pAoKd+xMnt5Dzi5bHvIbhLgDgfQfOBzAy3twGRWsPQ3nkuXXm8TppwujMNowU1oiLKPPm0AOA== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" jquery "~3.7.1" -"@abp/lodash@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-8.3.0-rc.1.tgz#32f8805031f73b9d5bdc338afe49739c4ebc3ce9" - integrity sha512-UBGlG5+tFpyAPMuwpkY7K/g21c+d3Aq3HbFmcIilUEIsJ+yJqj95xhRh6t/LSwJCo5ntdSCgVC85q0kD0fQlQA== +"@abp/lodash@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-8.3.0.tgz#f5a0a496c999886f2d6999067bfac2e1f0c3969c" + integrity sha512-BiAsONbKR/RKG3WjRaMWVmhNe1ELEsykVq+ogG1Rhk3kwPbvze3TS8k2p0Lu/RC41/BmDUmJ5abg1pUMwkRT8w== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" lodash "^4.17.21" -"@abp/luxon@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-8.3.0-rc.1.tgz#df19773212502336c2caf6a8806b7647748f8f81" - integrity sha512-1oPx0tGyFi58T0yv/pdqJpcIRWU6ej5Sv28fRgz3J6tHam3hVPtKJPK9Ajvn6+MNVDLuMUczgVtfWEOvO2Kqrg== +"@abp/luxon@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-8.3.0.tgz#7dd3f756be1605506e26f7ac76b80cc082a12d07" + integrity sha512-8gdI5BtXkVp0sFg89QVDe8AvgQ7Qfq4JCqz2PMrKPSATR3H8GD6BCaEYpRp6CNTCjVrQjGZdzKgUyea1D3dHbw== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" luxon "^3.4.4" -"@abp/malihu-custom-scrollbar-plugin@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-8.3.0-rc.1.tgz#b57086d708082ce45e1917aeca8c92029ebd805d" - integrity sha512-4sa5e07EPW9IM7eQbvKtk78gd/bESYhTsl+BeWSKeqjj5wwwPYf4GIEvfJM7JVnhYwh1IPYDEkTv9QNYLczXKQ== +"@abp/malihu-custom-scrollbar-plugin@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-8.3.0.tgz#c88c132c3402bbb02054ca7d446051950f87a817" + integrity sha512-nd/mb6LJa6fMxal8PGcIjIRIoZ/UHCd01WDC9YI2H4wGCGx0CA0JyHso5oc/OEzJhUL8ujO/vYm9uLb7YahPtA== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/moment@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-8.3.0-rc.1.tgz#0ba9d64ca6d7b454af7aaa63e54be267f333e1fe" - integrity sha512-YbVEDg3m+D5KMcTCBEnor/tFgmk9IeL4pF/oChYQGXLeyohY7vfmK68owAnEDN61nCRXng9xykiZu2bLq829WA== +"@abp/moment@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-8.3.0.tgz#8e4f7a523ab76ef9e4cd96a399560bad38d38d1a" + integrity sha512-LywSsKuQ2GN/Btmle6CcTKa811zbvUWdC+RLQA792K9HyBs6LvN0qRRluEQZgplairRgh2pDOg8tdFlUERkv2w== dependencies: moment "^2.30.1" -"@abp/select2@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-8.3.0-rc.1.tgz#3eb932e05987cc1e13f72decc9ae70d47801bf7d" - integrity sha512-lZuJLiFcOEVj6cTPAA7ZfhE3v1LyivmMt8Tt7Dpvgybx2PDN1NtfLce2BCKb0MvsaTlfJMSK0ZLu3JpxCQ+Q/A== +"@abp/select2@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-8.3.0.tgz#ef4742fcd345394767f46180f61c6cabbd0b3867" + integrity sha512-bdLt2+ImxxpiZl4HGbYJpdDROQUT7/Z/+8A+6oJNacq3lNekdvufLYgTMxKru6zTbnd9j3HFKMOTE1eRjb9Xqg== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" select2 "^4.0.13" -"@abp/sweetalert2@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-8.3.0-rc.1.tgz#66d8b9ce287a71474ce37c217cd800e150a86138" - integrity sha512-b6dZbc5/nYrUz5s+lAgi561XnsASa0ZJOn6f5W2Oakm9ULzqFndapKx5f+zHeJaNArpeGDh50AjQ+lcGGw83zQ== +"@abp/sweetalert2@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-8.3.0.tgz#a63020d57e44f7940817287d3d9676288bfb85aa" + integrity sha512-ooqPM4Z2v2scnMo5l8ycTmp6t/sW4sCsvIkJ4TyM876WLQJaZxJdOao4RQWuU+dVFr9zg8cOwqLH4q7UEiO6ww== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" sweetalert2 "^11.3.6" -"@abp/timeago@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-8.3.0-rc.1.tgz#d795b9cccb190f5d42f242727ac447fe03c30db3" - integrity sha512-yJCA7PHmAxFxIvPq03iSx3LbIiDQls4AiVBO75103LEGokRUG9bg+iPA7GLkPpfNbnNgEJ7N7Gw6RQzMNRLCpA== +"@abp/timeago@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-8.3.0.tgz#b3b8d6927bf170f77af848bc1925e5ef6835bd55" + integrity sha512-Dd6xaUoF9Bp4F9WJnTsFBqY+Gt++UR7UmLvBZL/dvthkeNCu2I8MUsmshkUUjY0lIXpjZwefUOuyupQrgHXPMg== dependencies: - "@abp/jquery" "~8.3.0-rc.1" + "@abp/jquery" "~8.3.0" timeago "^1.6.7" -"@abp/toastr@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-8.3.0-rc.1.tgz#82c7f6566e604c2cf31555da3f9b0898df8a5541" - integrity sha512-0nBM4nEvDlANVulk7EKoB4Lk/1fH+UgzPOyUOyemQZAWHgPhIpa4z5yiLkCeOxN1hu/CBEe+Jo7qJblsj+v7kQ== +"@abp/toastr@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-8.3.0.tgz#e68a2bd8f731e79034594bc2c736f7c66b3df1af" + integrity sha512-aWK/RaX/FmcEKhJLjsw1A0K2c04m2fRJkmo9NwzBCSscy6Msw9IMkqNWLiFDThMU8/qKzq7wq3Vmk/C0IpeAwA== dependencies: - "@abp/jquery" "~8.3.0-rc.1" + "@abp/jquery" "~8.3.0" toastr "^2.1.4" -"@abp/utils@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-8.3.0-rc.1.tgz#7db324059f8f9c64fbb5d5a6f0c2384896ca1928" - integrity sha512-Eg4Lwv4DEDr5mfG/8ghwMPdphywZBZIxWTJCZnCWngDQ9fEn/bnYuL1WkvbVvKd10A6030wHEJXFJj2OuNdi3Q== +"@abp/utils@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-8.3.0.tgz#96ae9266ad4d833fd9d723acef7fc85fabf618d9" + integrity sha512-w/XAqza4Z8wBWRoj5uPNKbd1/bE9L/uUWk6EUSBKmljMRryWQBmaPkb1XgvrOMQIbyyF60tUvvipapQLPVh6hw== dependencies: just-compare "^2.3.0" diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/package.json b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/package.json index 1c378e7dd0..bad9a5bd0d 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/package.json +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/package.json @@ -3,7 +3,7 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "~8.3.0-rc.1", - "@abp/cms-kit": "8.3.0-rc.1" + "@abp/aspnetcore.mvc.ui.theme.basic": "~8.3.0", + "@abp/cms-kit": "8.3.0" } } diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/yarn.lock b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/yarn.lock index 82d4a1d36d..2b5adef665 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/yarn.lock +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/yarn.lock @@ -2,302 +2,302 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-8.3.0-rc.1.tgz#7254b66019b99ac8a29385c1bb2c9c658a167bc7" - integrity sha512-uMgO1VQgDOW9tMq9gl6idsBZZcL/voeMp0wkBTRORQHg0E+SyA8z0yQrg5S8hU/7zRwoZPm3K9R/Peu71jNTgQ== - dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~8.3.0-rc.1" - -"@abp/aspnetcore.mvc.ui.theme.shared@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-8.3.0-rc.1.tgz#cec5ca6c5a5f61a361425b9d55711beb0db4eb81" - integrity sha512-qLAzDwiQvRB8xDs6bkeZ4YLMUuTb6Dz/GmWT61dSMUAhRCTPqPi6aWnt9fiM99HbkP7APLPb7d+o5ho6FoktNQ== - dependencies: - "@abp/aspnetcore.mvc.ui" "~8.3.0-rc.1" - "@abp/bootstrap" "~8.3.0-rc.1" - "@abp/bootstrap-datepicker" "~8.3.0-rc.1" - "@abp/bootstrap-daterangepicker" "~8.3.0-rc.1" - "@abp/datatables.net-bs5" "~8.3.0-rc.1" - "@abp/font-awesome" "~8.3.0-rc.1" - "@abp/jquery-form" "~8.3.0-rc.1" - "@abp/jquery-validation-unobtrusive" "~8.3.0-rc.1" - "@abp/lodash" "~8.3.0-rc.1" - "@abp/luxon" "~8.3.0-rc.1" - "@abp/malihu-custom-scrollbar-plugin" "~8.3.0-rc.1" - "@abp/moment" "~8.3.0-rc.1" - "@abp/select2" "~8.3.0-rc.1" - "@abp/sweetalert2" "~8.3.0-rc.1" - "@abp/timeago" "~8.3.0-rc.1" - "@abp/toastr" "~8.3.0-rc.1" - -"@abp/aspnetcore.mvc.ui@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-8.3.0-rc.1.tgz#7329e4878e64277dfed88eef5e9d1715d1af925f" - integrity sha512-NPWrtJ+Il+SI0oPQ5gc1Lc9vfPZvHbe0d/5y5qGIdwKY1F5txIyRGesc0najOLIUe7Z66AInyfNuNeoaFNR0fg== +"@abp/aspnetcore.mvc.ui.theme.basic@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-8.3.0.tgz#a2d17eb5da2c3abfad4bcc842cfcda0e58a130a4" + integrity sha512-T2dg7WlvNSrwTCfy5wk4gqiJ/15kIjMGM4wLXIJcMYn60yGY/YeX6Q4A3R/qJzfl4JdgW5rt3GpdKv86y/ADXg== + dependencies: + "@abp/aspnetcore.mvc.ui.theme.shared" "~8.3.0" + +"@abp/aspnetcore.mvc.ui.theme.shared@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-8.3.0.tgz#5d6bb5181a62770e9cb967980b77e75c115c5ed7" + integrity sha512-o/0eh8jLS+YJiseTKzzioUz0vNnMFzyoz+mkyA4PlO1gqw2JFhzPhTBZ3cuyV9QlxUfEA8dWAkqAUX6vqiHwkw== + dependencies: + "@abp/aspnetcore.mvc.ui" "~8.3.0" + "@abp/bootstrap" "~8.3.0" + "@abp/bootstrap-datepicker" "~8.3.0" + "@abp/bootstrap-daterangepicker" "~8.3.0" + "@abp/datatables.net-bs5" "~8.3.0" + "@abp/font-awesome" "~8.3.0" + "@abp/jquery-form" "~8.3.0" + "@abp/jquery-validation-unobtrusive" "~8.3.0" + "@abp/lodash" "~8.3.0" + "@abp/luxon" "~8.3.0" + "@abp/malihu-custom-scrollbar-plugin" "~8.3.0" + "@abp/moment" "~8.3.0" + "@abp/select2" "~8.3.0" + "@abp/sweetalert2" "~8.3.0" + "@abp/timeago" "~8.3.0" + "@abp/toastr" "~8.3.0" + +"@abp/aspnetcore.mvc.ui@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-8.3.0.tgz#d7ba0539bfcc6661a347dea7f952489010b3e816" + integrity sha512-OxgZhLKiXGFYYpNJ5O/IbhinsniiBPv9586e+1Soar0GckCMIIegJxnJb1Bo1O75blrcK2cIU6LqjRT1FXt2Lw== dependencies: ansi-colors "^4.1.3" -"@abp/bootstrap-datepicker@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-8.3.0-rc.1.tgz#d3bcb5f0063df631ad45c7f822195fc4e5c5b4e2" - integrity sha512-oqbwh9dz8XNfh+eZou8GvcEUYA1J0qr3ABA1r72DJZ/nzfLQX7pUO8NkkaDLpVwrly64rfOlxV4LT7g5muoAsw== +"@abp/bootstrap-datepicker@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-8.3.0.tgz#8c1bf9efec37b671d8f28b8b1e89c1ac66684267" + integrity sha512-KCwMtm7x+cnKPeNMzhjDJUce0stwu4e57ibmvA6sMf1tmj+yB256O4E2hIDDohiT3vP/zV8HVHX6uATlcmGC9w== dependencies: bootstrap-datepicker "^1.10.0" -"@abp/bootstrap-daterangepicker@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-8.3.0-rc.1.tgz#33958a1806a070db4fb01eb40a0897bfd16cf1f5" - integrity sha512-egtnxhRMCu56RV2bIRBLLTly2Y4W/2jwl9el+9Stjc8IN91j2UL5E4t5qn3zI3vXvVX4w5vP+TthQj0grFK0/Q== +"@abp/bootstrap-daterangepicker@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-8.3.0.tgz#2b8ed978333502677916f88cbb3e1d1b1c8a3a17" + integrity sha512-uQSfuCQogl4BujdqvtdAoSE+z32ci8FT5+i3gLfpqbgTaxvY/Kv5NxAUH5/1sjnuAE7SMWO+eVvI3V0pXgQohg== dependencies: bootstrap-daterangepicker "^3.1.0" -"@abp/bootstrap@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-8.3.0-rc.1.tgz#3ca994e4c003d056024dcd533221461cccd14f2a" - integrity sha512-xrs0JOYFEPzi3V6s9d3SCj0CxY06bBmFUK5aETgKUiXBXa4vU2YoNbnrCtDUvV+mn517FRuA/j3RaFkTWYg48g== +"@abp/bootstrap@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-8.3.0.tgz#96d6ea7e6ac30f6e34e495a4224f56f7b2a1a7a3" + integrity sha512-5AmdTtakmWhZmHrb7ibvvf+KwF9OGadpAe7Kv9mNEE02K2qkp7Xw4r5o/bgVl7YfLC1FA6GZZXrV2s2t0gjHtg== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" bootstrap "^5.3.3" -"@abp/clipboard@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-8.3.0-rc.1.tgz#65c6cd6672fc248097659908edd4a9fe92664475" - integrity sha512-CVyO/8BK2WnegwrEvBJCNcbkI5l31U/pZBn7DBUGpiawlLiyYZOtGFUgu4sIUTEfyaRdLiCIPd0eMzDPKMVTgA== +"@abp/clipboard@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-8.3.0.tgz#1b171e533f768cf42c8fc0c9c67fac1c636fee8c" + integrity sha512-T0O4OaMxLLYztAxyvEc3onEOpGHB/C8/jDcvJwd7mgpLoi9zXVfHwpnzkx/egfNJMzp49STD6Jc+jACi8Uq+CQ== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" clipboard "^2.0.11" -"@abp/cms-kit.admin@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/cms-kit.admin/-/cms-kit.admin-8.3.0-rc.1.tgz#c3607094caf2d5d1c57dbb08679c63e1ecf66490" - integrity sha512-s/vMuyMO7RHQ2yeDSc1f/MJPaEbniC4VA+nc8pjnbE9SByNtZau2CuhXDumLxpN27ncEW/e2NSx6dl7yJfVkLg== +"@abp/cms-kit.admin@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/cms-kit.admin/-/cms-kit.admin-8.3.0.tgz#9601f8b8e391a1b19b53fa04f0ea7ffb8358ab45" + integrity sha512-Bwk505jNh4bthmSemsvsc2eaSppaUyctHCX2of+ZEwkbB4uc9S4ctbeV9VmeO45AUIm055/GnttfXbMKvte7ng== dependencies: - "@abp/codemirror" "~8.3.0-rc.1" - "@abp/jstree" "~8.3.0-rc.1" - "@abp/markdown-it" "~8.3.0-rc.1" - "@abp/slugify" "~8.3.0-rc.1" - "@abp/tui-editor" "~8.3.0-rc.1" - "@abp/uppy" "~8.3.0-rc.1" + "@abp/codemirror" "~8.3.0" + "@abp/jstree" "~8.3.0" + "@abp/markdown-it" "~8.3.0" + "@abp/slugify" "~8.3.0" + "@abp/tui-editor" "~8.3.0" + "@abp/uppy" "~8.3.0" -"@abp/cms-kit.public@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/cms-kit.public/-/cms-kit.public-8.3.0-rc.1.tgz#6f382975d8afd4b93201acd547411402bef0f6d7" - integrity sha512-tJhppsRitCPgdGDao3+pqvxB4VyH5wormf48FLptBB9SRVYuSYoLeS8oJ8DmuiEmelb7VaIyeYmHJA3y7AVtXw== +"@abp/cms-kit.public@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/cms-kit.public/-/cms-kit.public-8.3.0.tgz#cec3a67e223f951ceb6863ef62b7a487794d7253" + integrity sha512-K8azk9SGEIzE4F+Zcb9tltZezyNP9Yzkq4bDRysv5EAyfa+zNQbyftaA6LcysEhhHbiJ8Gzvtxl93sNUiCluFg== dependencies: - "@abp/highlight.js" "~8.3.0-rc.1" - "@abp/star-rating-svg" "~8.3.0-rc.1" + "@abp/highlight.js" "~8.3.0" + "@abp/star-rating-svg" "~8.3.0" -"@abp/cms-kit@8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/cms-kit/-/cms-kit-8.3.0-rc.1.tgz#5d19ed4d026fb694c7179f95f9e2d582a098175c" - integrity sha512-oLdtA624tZw2ZYPnMkxHa4uYOYJD6T7VY3rf9vZKA+WGC0OAF8oEEnOSz/O2PeOEqiQMz7PRVqoiF1I9Hb9Kig== +"@abp/cms-kit@8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/cms-kit/-/cms-kit-8.3.0.tgz#7ac7ebcb43b1633ea337e5e6f5b447ef4e000992" + integrity sha512-XBunhRVZE4cKyTx1L9Ieh3SUw4rn0+GPGHarUmdK4oiK2q3zRZHnmAQ9w0Pb34yNcAlbPVvcqU0zE2lz2k2sSQ== dependencies: - "@abp/cms-kit.admin" "~8.3.0-rc.1" - "@abp/cms-kit.public" "~8.3.0-rc.1" + "@abp/cms-kit.admin" "~8.3.0" + "@abp/cms-kit.public" "~8.3.0" -"@abp/codemirror@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/codemirror/-/codemirror-8.3.0-rc.1.tgz#14a06f118cb0144b1019157473f854f71fffba66" - integrity sha512-Nx1Oywgq4Y9NlRAOOa6Z07+GSmmL/9Q9R6oATFD+Dxn+WF7sONnoXf/bNhUcdwxJzPho8QmKY70gu90Q4rQszA== +"@abp/codemirror@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/codemirror/-/codemirror-8.3.0.tgz#e5b631154ab9900ba01128b4f8d2d5d16b74566f" + integrity sha512-1Mi9wT/Nl1c7VS4q/OVFilbyhAkUTy+o4WRA1OMvLd9c4pJXflmJk6CT7XODmB38ePp3kygLB7nxvNN+GLu70A== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" codemirror "^6.0.1" -"@abp/core@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-8.3.0-rc.1.tgz#771c7ecd27319201a8236f0bc6b5601188059325" - integrity sha512-IB8Baa3LIv3XYja6iBw6VSnITGcRseGyY8wBNEXRiB+ni21Bv//NMyohdOot6G+HlnHlrB7kFeCX+gWu+LuYkg== +"@abp/core@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-8.3.0.tgz#3a68f5a9549efcc3e13500e301f2576751b51445" + integrity sha512-zrxnZi4qij/Y4AZWaXuPqs3Dd7gBtU/onX7FkYxLgQDxYBfx+84QAnPRNRFKMWaD/wKbTUB0wA66U3t2aiQX9Q== dependencies: - "@abp/utils" "~8.3.0-rc.1" + "@abp/utils" "~8.3.0" -"@abp/datatables.net-bs5@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-8.3.0-rc.1.tgz#b53dc353f485952439ea10035df0851d520efe96" - integrity sha512-89wpkG6u1YBR98OmuEbvs4VdR5n8L4n3Z8GiHwuKr2FpEOx7cAXYKsx/8ifmICMLPiMIvFrtOEBrrv5ZKANsAA== +"@abp/datatables.net-bs5@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-8.3.0.tgz#21822ae4912a561afe9112925185aece03fcd0eb" + integrity sha512-GOGYSSHp3iPUDFRX2Y3C0wkiCOJDuYuK/zUSzQLNpOvBMZO+I/oWBcZM+qkVowIzsoRlAGV9+CVV2B/B05qidA== dependencies: - "@abp/datatables.net" "~8.3.0-rc.1" + "@abp/datatables.net" "~8.3.0" datatables.net-bs5 "^2.0.8" -"@abp/datatables.net@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-8.3.0-rc.1.tgz#bb70608994c4a52bd15331f76af718353c843f94" - integrity sha512-G42D6W0Xb8NIQxJWGpcxLOjbZ4CHtrm9oBG5+GfVmQEPGfl8r+DYdrYDAkysDg483s+48POH7NC3L1LOlxlqRg== +"@abp/datatables.net@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-8.3.0.tgz#ff697758ce9309ba8311f23aec921c4722588c8b" + integrity sha512-4dIdv7eN1tVouOUrlF+MIdg8zQpecyH61waqLgy1q5jMZQivrTSFZ7UWMG3WVOAYjw5zSUZHZPbzA+ttnaOPkg== dependencies: - "@abp/jquery" "~8.3.0-rc.1" + "@abp/jquery" "~8.3.0" datatables.net "^2.0.8" -"@abp/font-awesome@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-8.3.0-rc.1.tgz#ea05d7e08395b1894eefe6f912ae0534fd75e69a" - integrity sha512-GN1xZ76RzQC3aqU2m19vYsyfESCeoSsp8AtvilmeqsjlzhuLLdQ6UWSxMqRqE22TCWRXbA/d/7IAb12TB1mawg== +"@abp/font-awesome@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-8.3.0.tgz#9e4e9adc08dfca52c0a07d1608c5e5662675a4c9" + integrity sha512-NRxvM/dzvQC2Cj/F5i07XB/i6IVTmXcO9sOq6TWosWib0wGaPxRbCSjy8QUAYSD1QYaVQ30XMb3XXImaMGyd8A== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" "@fortawesome/fontawesome-free" "^6.5.2" -"@abp/highlight.js@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/highlight.js/-/highlight.js-8.3.0-rc.1.tgz#14c1904f860543581440c67dc01fea109b61cccf" - integrity sha512-lnJtMxTt9gkZ24ZZZ5bAMfK8T3Sbwe7QxyXfQ2+oEm2NosNNbug2hLOHtINdFThp1bDN/bD+h0yXAWNAxhDSPQ== +"@abp/highlight.js@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/highlight.js/-/highlight.js-8.3.0.tgz#fabd11a8ef7cd0e379b4c9b359d66b4aa7585e30" + integrity sha512-SHvGXqQrZGuNmup32FisVHrWCdTJyEzHgp6y8Twx1FaP1e0hSN3QK6Jw4Do600ZKI9n5xCK+kMCpdJau8I6bIg== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" "@highlightjs/cdn-assets" "~11.9.0" -"@abp/jquery-form@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-8.3.0-rc.1.tgz#21025048f44028a5cb1ced7414cb48af00e91bff" - integrity sha512-mVZzEJKbhiYmXK2yZRZAJwO5e7C2N0lj8ueOYPiFG6h4UKLbKPHQdIrkapyc88VirrELe1hnhJJbQ56dsQWeyg== +"@abp/jquery-form@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-8.3.0.tgz#fa2ad2fedbe3d3528ee94cbbd4f94d48f0cb5e4d" + integrity sha512-olP9FmpNVTbOIewsVua0moHVYXw4Sl3chFbvTDLG6vRBohLSjllUXfgY3UEIVWR1PCqnAg+iEJZl9NHB9iOLBg== dependencies: - "@abp/jquery" "~8.3.0-rc.1" + "@abp/jquery" "~8.3.0" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-8.3.0-rc.1.tgz#63042715391ca63f273874ff66fca4b20330d31b" - integrity sha512-EKQf733+HS9bIVQhMgAHYZfCY663GqNv8KUcCIuQOHPt5DWU49ygYhawkcYIzUKd2Gy9+ZtyWLkWmoBxTnwlmw== +"@abp/jquery-validation-unobtrusive@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-8.3.0.tgz#0992cdd33170df83c79aa3371038c0b30e451521" + integrity sha512-9hidjq8x8sTnP5O3K2b2x9NpxvPd9WB03ENR6OfvM89kfSmQapSvBZTlCu80YK9NaQJ6MLQRLYOCuc3GHcj3EQ== dependencies: - "@abp/jquery-validation" "~8.3.0-rc.1" + "@abp/jquery-validation" "~8.3.0" jquery-validation-unobtrusive "^4.0.0" -"@abp/jquery-validation@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-8.3.0-rc.1.tgz#8c82189ba7c3614f7306c2bf958b3717a6a4e702" - integrity sha512-Fr8AI//7iV743S6bw4ixE5qOu+af3HfZSivQJnYVVTbR/75gPqI/xRe6u/k82TJIBM7IaspQ4QdruMuvnJyBpQ== +"@abp/jquery-validation@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-8.3.0.tgz#bd6a72c6d86f116abe3b5d2adf3752bdbbcca887" + integrity sha512-6l5BZSa3N0Fou6Se7MfUSnI2dD4SYhZ2V988bgPJQ6p37XBOZ2OAj7LEIf5FSjtUzXjao/6/vqjkPNYreNikig== dependencies: - "@abp/jquery" "~8.3.0-rc.1" + "@abp/jquery" "~8.3.0" jquery-validation "^1.20.1" -"@abp/jquery@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-8.3.0-rc.1.tgz#a181c6749d58690b3265705959d8c818296896f3" - integrity sha512-fXs35cDLAw66irfHsFIWD41RKzpLABkULLoMwxfB76nOVPdV7qlWrXoI2O/du3xhCqBqHR4fS8xjwE6kFvkdLQ== +"@abp/jquery@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-8.3.0.tgz#9be5ef2f769680226e6a1a981026590caf3b57ef" + integrity sha512-GsFY+n3EtS6B0pAoKd+xMnt5Dzi5bHvIbhLgDgfQfOBzAy3twGRWsPQ3nkuXXm8TppwujMNowU1oiLKPPm0AOA== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" jquery "~3.7.1" -"@abp/jstree@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/jstree/-/jstree-8.3.0-rc.1.tgz#d9ad6511c403341464f1afeff5ab7c9ab39e0d53" - integrity sha512-/nsP+RAlAWIkg23On6CA3bcDSU9dCjNDmNoHLa+ysMzCExpjn5zTuuA9jxPCgy1qkOmAwcExF2PrnyBbslWdzw== +"@abp/jstree@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/jstree/-/jstree-8.3.0.tgz#48054d14cd2f5ad255e5ddfb11facfae5902256a" + integrity sha512-9+0cLxIPo1pZJvYsmvo/lWWDI/yH2e9p7iQg/QukQsavvfZ/QNTDweCTI4o407lu66s6921UEZ+KnozvFvuAfg== dependencies: - "@abp/jquery" "~8.3.0-rc.1" + "@abp/jquery" "~8.3.0" jstree "^3.3.16" -"@abp/lodash@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-8.3.0-rc.1.tgz#32f8805031f73b9d5bdc338afe49739c4ebc3ce9" - integrity sha512-UBGlG5+tFpyAPMuwpkY7K/g21c+d3Aq3HbFmcIilUEIsJ+yJqj95xhRh6t/LSwJCo5ntdSCgVC85q0kD0fQlQA== +"@abp/lodash@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-8.3.0.tgz#f5a0a496c999886f2d6999067bfac2e1f0c3969c" + integrity sha512-BiAsONbKR/RKG3WjRaMWVmhNe1ELEsykVq+ogG1Rhk3kwPbvze3TS8k2p0Lu/RC41/BmDUmJ5abg1pUMwkRT8w== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" lodash "^4.17.21" -"@abp/luxon@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-8.3.0-rc.1.tgz#df19773212502336c2caf6a8806b7647748f8f81" - integrity sha512-1oPx0tGyFi58T0yv/pdqJpcIRWU6ej5Sv28fRgz3J6tHam3hVPtKJPK9Ajvn6+MNVDLuMUczgVtfWEOvO2Kqrg== +"@abp/luxon@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-8.3.0.tgz#7dd3f756be1605506e26f7ac76b80cc082a12d07" + integrity sha512-8gdI5BtXkVp0sFg89QVDe8AvgQ7Qfq4JCqz2PMrKPSATR3H8GD6BCaEYpRp6CNTCjVrQjGZdzKgUyea1D3dHbw== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" luxon "^3.4.4" -"@abp/malihu-custom-scrollbar-plugin@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-8.3.0-rc.1.tgz#b57086d708082ce45e1917aeca8c92029ebd805d" - integrity sha512-4sa5e07EPW9IM7eQbvKtk78gd/bESYhTsl+BeWSKeqjj5wwwPYf4GIEvfJM7JVnhYwh1IPYDEkTv9QNYLczXKQ== +"@abp/malihu-custom-scrollbar-plugin@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-8.3.0.tgz#c88c132c3402bbb02054ca7d446051950f87a817" + integrity sha512-nd/mb6LJa6fMxal8PGcIjIRIoZ/UHCd01WDC9YI2H4wGCGx0CA0JyHso5oc/OEzJhUL8ujO/vYm9uLb7YahPtA== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/markdown-it@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/markdown-it/-/markdown-it-8.3.0-rc.1.tgz#09a7eefbd82d73ef7c9837d7dc9cceb5712c968a" - integrity sha512-7Np5ilN8hTloHPFF440apMKAVt4ambqLhGOSZvyoU0Bg2YoU8oAAPGfBLHwxlKZ4x4gKJY2S0bs1/kuFysfLqw== +"@abp/markdown-it@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/markdown-it/-/markdown-it-8.3.0.tgz#d8ca44d277dbce804b2240371cbd4d01e7bfeb55" + integrity sha512-hrwh1M/KbOmZ826EbllU/bQFcQq+YskZMpKTIDhPj8FQTXsOIjsvlcNjaBcSCGwE3hHyiUG8h3qw1VjjTE/PmA== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" markdown-it "^14.1.0" -"@abp/moment@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-8.3.0-rc.1.tgz#0ba9d64ca6d7b454af7aaa63e54be267f333e1fe" - integrity sha512-YbVEDg3m+D5KMcTCBEnor/tFgmk9IeL4pF/oChYQGXLeyohY7vfmK68owAnEDN61nCRXng9xykiZu2bLq829WA== +"@abp/moment@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-8.3.0.tgz#8e4f7a523ab76ef9e4cd96a399560bad38d38d1a" + integrity sha512-LywSsKuQ2GN/Btmle6CcTKa811zbvUWdC+RLQA792K9HyBs6LvN0qRRluEQZgplairRgh2pDOg8tdFlUERkv2w== dependencies: moment "^2.30.1" -"@abp/prismjs@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-8.3.0-rc.1.tgz#82f98db7e3a5e5e535ecb0452c84a5fda57b5801" - integrity sha512-kvO7fU9KfXNK44mL9QDtGuDD3ebiXTd5nKNxgrsneHhYsdNiWwXzqWpZlfs7t9nqSydLzqWkQZ7we01GoxeQ/g== +"@abp/prismjs@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-8.3.0.tgz#0c87c63294d1452ed7152083d2fb6e70aa3aeae6" + integrity sha512-3wpwbqqlGRfQSLcBP+Qb2TKOoVGZVYYwOP6dP3So9ev8J5gFMDEizH9zLwRVHYrrsZZP8/etYnyZ0hn7ewuI5Q== dependencies: - "@abp/clipboard" "~8.3.0-rc.1" - "@abp/core" "~8.3.0-rc.1" + "@abp/clipboard" "~8.3.0" + "@abp/core" "~8.3.0" prismjs "^1.29.0" -"@abp/select2@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-8.3.0-rc.1.tgz#3eb932e05987cc1e13f72decc9ae70d47801bf7d" - integrity sha512-lZuJLiFcOEVj6cTPAA7ZfhE3v1LyivmMt8Tt7Dpvgybx2PDN1NtfLce2BCKb0MvsaTlfJMSK0ZLu3JpxCQ+Q/A== +"@abp/select2@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-8.3.0.tgz#ef4742fcd345394767f46180f61c6cabbd0b3867" + integrity sha512-bdLt2+ImxxpiZl4HGbYJpdDROQUT7/Z/+8A+6oJNacq3lNekdvufLYgTMxKru6zTbnd9j3HFKMOTE1eRjb9Xqg== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" select2 "^4.0.13" -"@abp/slugify@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/slugify/-/slugify-8.3.0-rc.1.tgz#937f00193834d0cf2259d789f3ec532c2af5f2af" - integrity sha512-4AY4tck6T5F+6apG+qSIJSkq7kfa9vETIZPx0Kbu36Dd5YE9z87b7fOTWlpDKsaoclhEipK3Ec5iRJo5vhmBqg== +"@abp/slugify@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/slugify/-/slugify-8.3.0.tgz#ac061a40268437a10defef48045ddce8eb109035" + integrity sha512-YCNg+wiyx2Y+pQesQvsZKQBYj9kVc5041opCFRuwos3IbbHUCtOdzvrc11ZAIAaUOfN5EfGZ2MfVD3v18OH3DQ== dependencies: slugify "^1.6.6" -"@abp/star-rating-svg@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/star-rating-svg/-/star-rating-svg-8.3.0-rc.1.tgz#db2d4799e1554fc5ae0c99dd202ea6e8a10c8a6c" - integrity sha512-ClQJZCVlQOKzcwII6cBTiORgJ3FdoeGhmLphq0Kd1i0lIY1ebg9bDVpPcW2EcAwuDMLyCmYQQ4royGyN0sJG0A== +"@abp/star-rating-svg@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/star-rating-svg/-/star-rating-svg-8.3.0.tgz#5a8d62eca5158a4bc9f827a610db5c93e6fc9e78" + integrity sha512-W7ds+IYw45M+HNVBPSBMH7Tn7edrxQ+elUgE8eEYdz9MzYoGxwIW97lzwDjr30LMR45+ITzcc6v8GwwF4jSR6w== dependencies: - "@abp/jquery" "~8.3.0-rc.1" + "@abp/jquery" "~8.3.0" star-rating-svg "^3.5.0" -"@abp/sweetalert2@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-8.3.0-rc.1.tgz#66d8b9ce287a71474ce37c217cd800e150a86138" - integrity sha512-b6dZbc5/nYrUz5s+lAgi561XnsASa0ZJOn6f5W2Oakm9ULzqFndapKx5f+zHeJaNArpeGDh50AjQ+lcGGw83zQ== +"@abp/sweetalert2@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-8.3.0.tgz#a63020d57e44f7940817287d3d9676288bfb85aa" + integrity sha512-ooqPM4Z2v2scnMo5l8ycTmp6t/sW4sCsvIkJ4TyM876WLQJaZxJdOao4RQWuU+dVFr9zg8cOwqLH4q7UEiO6ww== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" sweetalert2 "^11.3.6" -"@abp/timeago@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-8.3.0-rc.1.tgz#d795b9cccb190f5d42f242727ac447fe03c30db3" - integrity sha512-yJCA7PHmAxFxIvPq03iSx3LbIiDQls4AiVBO75103LEGokRUG9bg+iPA7GLkPpfNbnNgEJ7N7Gw6RQzMNRLCpA== +"@abp/timeago@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-8.3.0.tgz#b3b8d6927bf170f77af848bc1925e5ef6835bd55" + integrity sha512-Dd6xaUoF9Bp4F9WJnTsFBqY+Gt++UR7UmLvBZL/dvthkeNCu2I8MUsmshkUUjY0lIXpjZwefUOuyupQrgHXPMg== dependencies: - "@abp/jquery" "~8.3.0-rc.1" + "@abp/jquery" "~8.3.0" timeago "^1.6.7" -"@abp/toastr@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-8.3.0-rc.1.tgz#82c7f6566e604c2cf31555da3f9b0898df8a5541" - integrity sha512-0nBM4nEvDlANVulk7EKoB4Lk/1fH+UgzPOyUOyemQZAWHgPhIpa4z5yiLkCeOxN1hu/CBEe+Jo7qJblsj+v7kQ== +"@abp/toastr@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-8.3.0.tgz#e68a2bd8f731e79034594bc2c736f7c66b3df1af" + integrity sha512-aWK/RaX/FmcEKhJLjsw1A0K2c04m2fRJkmo9NwzBCSscy6Msw9IMkqNWLiFDThMU8/qKzq7wq3Vmk/C0IpeAwA== dependencies: - "@abp/jquery" "~8.3.0-rc.1" + "@abp/jquery" "~8.3.0" toastr "^2.1.4" -"@abp/tui-editor@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/tui-editor/-/tui-editor-8.3.0-rc.1.tgz#ce37f6456f9fc1964a9b6bd8358608ce9defbe9d" - integrity sha512-jBCCM8iThBdYPRQpW56gdY5Z3hUlmiXSTiVixBfGT8vadznD8kbvIJ8Zo4c/CJNs71ybceiCi3WzRQYiE0hTew== +"@abp/tui-editor@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/tui-editor/-/tui-editor-8.3.0.tgz#188360644140f3173b0347c1ce883612a5eb9e18" + integrity sha512-GNFuKvAlwihuzg91dekGZ5s5aLKySROHbLujanzaco1nfRvWehx+J+oCP0rHzQ3++DpxEXhlz05qW9I1gCEAKA== dependencies: - "@abp/jquery" "~8.3.0-rc.1" - "@abp/prismjs" "~8.3.0-rc.1" + "@abp/jquery" "~8.3.0" + "@abp/prismjs" "~8.3.0" -"@abp/uppy@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/uppy/-/uppy-8.3.0-rc.1.tgz#bdcc90c5aa83bf07608175285c48aad4f2c2e028" - integrity sha512-cC9f8rMSQ14gk/G8d29qHtORUyyYR6F7IXARHDYRlDPI6IxZ58eGMDR0PeE3ZBOpuqltX1muwqKo9R3uwe0img== +"@abp/uppy@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/uppy/-/uppy-8.3.0.tgz#4b19ae7ed431276415195c19e94a24841232a7aa" + integrity sha512-ob9dVKxCnnxP3VarSIivx5++7KzKpUGA8qFI+tOpTiL2uPI71ERo4neOnCC1USa03bWDEo24cLWz3/CNGVIWrA== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" uppy "^3.27.0" -"@abp/utils@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-8.3.0-rc.1.tgz#7db324059f8f9c64fbb5d5a6f0c2384896ca1928" - integrity sha512-Eg4Lwv4DEDr5mfG/8ghwMPdphywZBZIxWTJCZnCWngDQ9fEn/bnYuL1WkvbVvKd10A6030wHEJXFJj2OuNdi3Q== +"@abp/utils@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-8.3.0.tgz#96ae9266ad4d833fd9d723acef7fc85fabf618d9" + integrity sha512-w/XAqza4Z8wBWRoj5uPNKbd1/bE9L/uUWk6EUSBKmljMRryWQBmaPkb1XgvrOMQIbyyF60tUvvipapQLPVh6hw== dependencies: just-compare "^2.3.0" diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo.CmsKit.Admin.Application.Contracts.abppkg.analyze.json b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo.CmsKit.Admin.Application.Contracts.abppkg.analyze.json index b89faf42fe..1be9d68e1d 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo.CmsKit.Admin.Application.Contracts.abppkg.analyze.json +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo.CmsKit.Admin.Application.Contracts.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.CmsKit.Admin.Application.Contracts", - "hash": "ff0f4d058f512abcca9b3b61a7bb300e", + "hash": "", "contents": [ { "namespace": "Volo.CmsKit.Admin", @@ -60,7 +60,7 @@ "summary": null }, { - "displayName": "Comment Management", + "displayName": "Comment management", "isEnabled": true, "contentType": "permission", "name": "CmsKit.Comments", @@ -74,7 +74,21 @@ "summary": null }, { - "displayName": "Tag Management", + "displayName": "Permission:Comments.Update", + "isEnabled": true, + "contentType": "permission", + "name": "CmsKit.Comments.Update", + "summary": null + }, + { + "displayName": "Permission:Comments.SettingManagement", + "isEnabled": true, + "contentType": "permission", + "name": "CmsKit.Comments.SettingManagement", + "summary": null + }, + { + "displayName": "Tag management", "isEnabled": true, "contentType": "permission", "name": "CmsKit.Tags", @@ -102,7 +116,7 @@ "summary": null }, { - "displayName": "Page Management", + "displayName": "Page management", "isEnabled": true, "contentType": "permission", "name": "CmsKit.Pages", @@ -130,14 +144,14 @@ "summary": null }, { - "displayName": "Set As Home Page", + "displayName": "Set as home page", "isEnabled": true, "contentType": "permission", "name": "CmsKit.Pages.SetAsHomePage", "summary": null }, { - "displayName": "Blog Management", + "displayName": "Blog management", "isEnabled": true, "contentType": "permission", "name": "CmsKit.Blogs", @@ -172,7 +186,7 @@ "summary": null }, { - "displayName": "Blog Post Management", + "displayName": "Blog post management", "isEnabled": true, "contentType": "permission", "name": "CmsKit.BlogPosts", @@ -207,7 +221,7 @@ "summary": null }, { - "displayName": "Menu Management", + "displayName": "Menu management", "isEnabled": true, "contentType": "permission", "name": "CmsKit.Menus", @@ -235,7 +249,7 @@ "summary": null }, { - "displayName": "Global Resources", + "displayName": "Global resources", "isEnabled": true, "contentType": "permission", "name": "CmsKit.GlobalResources", diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo.CmsKit.Admin.Application.abppkg.analyze.json b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo.CmsKit.Admin.Application.abppkg.analyze.json index e58e8fb34a..cb49ddb813 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo.CmsKit.Admin.Application.abppkg.analyze.json +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo.CmsKit.Admin.Application.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.CmsKit.Admin.Application", - "hash": "1cf0db9a201c7d8143e4f8efb6218d59", + "hash": "", "contents": [ { "namespace": "Volo.CmsKit.Admin", @@ -136,6 +136,7 @@ "methods": [ { "returnType": "Void", + "namespace": "Volo.CmsKit.Admin.Tags", "name": "AddTagToEntityAsync", "summary": null, "isAsync": true, @@ -152,6 +153,7 @@ }, { "returnType": "Void", + "namespace": "Volo.CmsKit.Admin.Tags", "name": "RemoveTagFromEntityAsync", "summary": null, "isAsync": true, @@ -168,6 +170,7 @@ }, { "returnType": "Void", + "namespace": "Volo.CmsKit.Admin.Tags", "name": "SetEntityTagsAsync", "summary": null, "isAsync": true, @@ -296,6 +299,7 @@ "methods": [ { "returnType": "TagDto", + "namespace": "Volo.CmsKit.Admin.Tags", "name": "CreateAsync", "summary": null, "isAsync": true, @@ -312,6 +316,7 @@ }, { "returnType": "TagDto", + "namespace": "Volo.CmsKit.Admin.Tags", "name": "UpdateAsync", "summary": null, "isAsync": true, @@ -333,6 +338,7 @@ }, { "returnType": "List", + "namespace": "Volo.CmsKit.Admin.Tags", "name": "GetTagDefinitionsAsync", "summary": null, "isAsync": true, @@ -343,6 +349,7 @@ }, { "returnType": "TagDto", + "namespace": "Volo.CmsKit.Admin.Tags", "name": "GetAsync", "summary": null, "isAsync": true, @@ -359,6 +366,7 @@ }, { "returnType": "PagedResultDto", + "namespace": "Volo.CmsKit.Admin.Tags", "name": "GetListAsync", "summary": null, "isAsync": true, @@ -375,6 +383,7 @@ }, { "returnType": "Void", + "namespace": "Volo.CmsKit.Admin.Tags", "name": "DeleteAsync", "summary": null, "isAsync": true, @@ -497,6 +506,7 @@ "methods": [ { "returnType": "PageDto", + "namespace": "Volo.CmsKit.Admin.Pages", "name": "GetAsync", "summary": null, "isAsync": true, @@ -513,6 +523,7 @@ }, { "returnType": "PagedResultDto", + "namespace": "Volo.CmsKit.Admin.Pages", "name": "GetListAsync", "summary": null, "isAsync": true, @@ -529,6 +540,7 @@ }, { "returnType": "PageDto", + "namespace": "Volo.CmsKit.Admin.Pages", "name": "CreateAsync", "summary": null, "isAsync": true, @@ -545,6 +557,7 @@ }, { "returnType": "PageDto", + "namespace": "Volo.CmsKit.Admin.Pages", "name": "UpdateAsync", "summary": null, "isAsync": true, @@ -566,6 +579,7 @@ }, { "returnType": "Void", + "namespace": "Volo.CmsKit.Admin.Pages", "name": "DeleteAsync", "summary": null, "isAsync": true, @@ -582,6 +596,7 @@ }, { "returnType": "Void", + "namespace": "Volo.CmsKit.Admin.Pages", "name": "SetAsHomePageAsync", "summary": null, "isAsync": true, @@ -668,6 +683,7 @@ "methods": [ { "returnType": "ListResultDto", + "namespace": "Volo.CmsKit.Admin.Menus", "name": "GetListAsync", "summary": null, "isAsync": true, @@ -677,7 +693,8 @@ "parameters": [] }, { - "returnType": "MenuItemDto", + "returnType": "MenuItemWithDetailsDto", + "namespace": "Volo.CmsKit.Admin.Menus", "name": "GetAsync", "summary": null, "isAsync": true, @@ -694,6 +711,7 @@ }, { "returnType": "MenuItemDto", + "namespace": "Volo.CmsKit.Admin.Menus", "name": "CreateAsync", "summary": null, "isAsync": true, @@ -710,6 +728,7 @@ }, { "returnType": "MenuItemDto", + "namespace": "Volo.CmsKit.Admin.Menus", "name": "UpdateAsync", "summary": null, "isAsync": true, @@ -731,6 +750,7 @@ }, { "returnType": "Void", + "namespace": "Volo.CmsKit.Admin.Menus", "name": "DeleteAsync", "summary": null, "isAsync": true, @@ -747,6 +767,7 @@ }, { "returnType": "Void", + "namespace": "Volo.CmsKit.Admin.Menus", "name": "MoveMenuItemAsync", "summary": null, "isAsync": true, @@ -768,6 +789,7 @@ }, { "returnType": "PagedResultDto", + "namespace": "Volo.CmsKit.Admin.Menus", "name": "GetPageLookupAsync", "summary": null, "isAsync": true, @@ -854,6 +876,7 @@ "methods": [ { "returnType": "MediaDescriptorDto", + "namespace": "Volo.CmsKit.Admin.MediaDescriptors", "name": "CreateAsync", "summary": null, "isAsync": true, @@ -875,6 +898,7 @@ }, { "returnType": "Void", + "namespace": "Volo.CmsKit.Admin.MediaDescriptors", "name": "DeleteAsync", "summary": null, "isAsync": true, @@ -961,6 +985,7 @@ "methods": [ { "returnType": "GlobalResourcesDto", + "namespace": "Volo.CmsKit.Admin.GlobalResources", "name": "GetAsync", "summary": null, "isAsync": true, @@ -971,6 +996,7 @@ }, { "returnType": "Void", + "namespace": "Volo.CmsKit.Admin.GlobalResources", "name": "SetGlobalResourcesAsync", "summary": null, "isAsync": true, @@ -1057,6 +1083,7 @@ "methods": [ { "returnType": "PagedResultDto", + "namespace": "Volo.CmsKit.Admin.Comments", "name": "GetListAsync", "summary": null, "isAsync": true, @@ -1073,6 +1100,7 @@ }, { "returnType": "CommentWithAuthorDto", + "namespace": "Volo.CmsKit.Admin.Comments", "name": "GetAsync", "summary": null, "isAsync": true, @@ -1089,6 +1117,7 @@ }, { "returnType": "Void", + "namespace": "Volo.CmsKit.Admin.Comments", "name": "DeleteAsync", "summary": null, "isAsync": true, @@ -1102,6 +1131,56 @@ "isOptional": false } ] + }, + { + "returnType": "Void", + "namespace": "Volo.CmsKit.Admin.Comments", + "name": "UpdateApprovalStatusAsync", + "summary": null, + "isAsync": true, + "isPublic": true, + "isPrivate": false, + "isStatic": false, + "parameters": [ + { + "type": "Guid", + "name": "id", + "isOptional": false + }, + { + "type": "CommentApprovalDto", + "name": "input", + "isOptional": false + } + ] + }, + { + "returnType": "Void", + "namespace": "Volo.CmsKit.Admin.Comments", + "name": "UpdateSettingsAsync", + "summary": null, + "isAsync": true, + "isPublic": true, + "isPrivate": false, + "isStatic": false, + "parameters": [ + { + "type": "CommentSettingsDto", + "name": "input", + "isOptional": false + } + ] + }, + { + "returnType": "Int32", + "namespace": "Volo.CmsKit.Admin.Comments", + "name": "GetWaitingCountAsync", + "summary": null, + "isAsync": true, + "isPublic": true, + "isPrivate": false, + "isStatic": false, + "parameters": [] } ], "contentType": "applicationService", @@ -1217,6 +1296,7 @@ "methods": [ { "returnType": "BlogDto", + "namespace": "Volo.CmsKit.Admin.Blogs", "name": "GetAsync", "summary": null, "isAsync": true, @@ -1233,6 +1313,7 @@ }, { "returnType": "PagedResultDto", + "namespace": "Volo.CmsKit.Admin.Blogs", "name": "GetListAsync", "summary": null, "isAsync": true, @@ -1249,6 +1330,7 @@ }, { "returnType": "BlogDto", + "namespace": "Volo.CmsKit.Admin.Blogs", "name": "CreateAsync", "summary": null, "isAsync": true, @@ -1265,6 +1347,7 @@ }, { "returnType": "BlogDto", + "namespace": "Volo.CmsKit.Admin.Blogs", "name": "UpdateAsync", "summary": null, "isAsync": true, @@ -1286,6 +1369,7 @@ }, { "returnType": "Void", + "namespace": "Volo.CmsKit.Admin.Blogs", "name": "DeleteAsync", "summary": null, "isAsync": true, @@ -1372,6 +1456,7 @@ "methods": [ { "returnType": "List", + "namespace": "Volo.CmsKit.Admin.Blogs", "name": "GetListAsync", "summary": null, "isAsync": true, @@ -1388,6 +1473,7 @@ }, { "returnType": "Void", + "namespace": "Volo.CmsKit.Admin.Blogs", "name": "SetAsync", "summary": null, "isAsync": true, @@ -1515,6 +1601,7 @@ "methods": [ { "returnType": "BlogPostDto", + "namespace": "Volo.CmsKit.Admin.Blogs", "name": "CreateAsync", "summary": null, "isAsync": true, @@ -1531,6 +1618,7 @@ }, { "returnType": "BlogPostDto", + "namespace": "Volo.CmsKit.Admin.Blogs", "name": "UpdateAsync", "summary": null, "isAsync": true, @@ -1552,6 +1640,7 @@ }, { "returnType": "BlogPostDto", + "namespace": "Volo.CmsKit.Admin.Blogs", "name": "GetAsync", "summary": null, "isAsync": true, @@ -1568,6 +1657,7 @@ }, { "returnType": "PagedResultDto", + "namespace": "Volo.CmsKit.Admin.Blogs", "name": "GetListAsync", "summary": null, "isAsync": true, @@ -1584,6 +1674,7 @@ }, { "returnType": "Void", + "namespace": "Volo.CmsKit.Admin.Blogs", "name": "DeleteAsync", "summary": null, "isAsync": true, @@ -1600,6 +1691,7 @@ }, { "returnType": "Void", + "namespace": "Volo.CmsKit.Admin.Blogs", "name": "PublishAsync", "summary": null, "isAsync": true, @@ -1616,6 +1708,7 @@ }, { "returnType": "Void", + "namespace": "Volo.CmsKit.Admin.Blogs", "name": "DraftAsync", "summary": null, "isAsync": true, @@ -1632,6 +1725,7 @@ }, { "returnType": "BlogPostDto", + "namespace": "Volo.CmsKit.Admin.Blogs", "name": "CreateAndPublishAsync", "summary": null, "isAsync": true, @@ -1648,6 +1742,7 @@ }, { "returnType": "Void", + "namespace": "Volo.CmsKit.Admin.Blogs", "name": "SendToReviewAsync", "summary": null, "isAsync": true, @@ -1664,6 +1759,7 @@ }, { "returnType": "BlogPostDto", + "namespace": "Volo.CmsKit.Admin.Blogs", "name": "CreateAndSendToReviewAsync", "summary": null, "isAsync": true, @@ -1680,6 +1776,7 @@ }, { "returnType": "Boolean", + "namespace": "Volo.CmsKit.Admin.Blogs", "name": "HasBlogPostWaitingForReviewAsync", "summary": null, "isAsync": true, diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/Volo.CmsKit.Admin.HttpApi.Client.abppkg.analyze.json b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/Volo.CmsKit.Admin.HttpApi.Client.abppkg.analyze.json index 5f9d12dd8c..15d3a881b5 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/Volo.CmsKit.Admin.HttpApi.Client.abppkg.analyze.json +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/Volo.CmsKit.Admin.HttpApi.Client.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.CmsKit.Admin.HttpApi.Client", - "hash": "ef3894ffa45c8acb929d4feba96f8075", + "hash": "", "contents": [ { "namespace": "Volo.CmsKit.Admin", diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo.CmsKit.Admin.HttpApi.abppkg.analyze.json b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo.CmsKit.Admin.HttpApi.abppkg.analyze.json index a616d94e35..e18611bd30 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo.CmsKit.Admin.HttpApi.abppkg.analyze.json +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo.CmsKit.Admin.HttpApi.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.CmsKit.Admin.HttpApi", - "hash": "5d180189476676a5483931264591c077", + "hash": "", "contents": [ { "namespace": "Volo.CmsKit.Admin", diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Volo.CmsKit.Admin.Web.abppkg.analyze.json b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Volo.CmsKit.Admin.Web.abppkg.analyze.json index 87cdbecc70..b8b9d3e51e 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Volo.CmsKit.Admin.Web.abppkg.analyze.json +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Volo.CmsKit.Admin.Web.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.CmsKit.Admin.Web", - "hash": "fa6d7b5a529c2c76386141dc3cb12bba", + "hash": "", "contents": [ { "namespace": "Volo.CmsKit.Admin.Web", @@ -63,6 +63,132 @@ "contentType": "abpModule", "name": "CmsKitAdminWebModule", "summary": null + }, + { + "namespace": "Volo.CmsKit.Admin.Web.Pages.CmsKit.Tags", + "contentType": "webPage", + "name": "CreateModalModel", + "summary": null + }, + { + "namespace": "Volo.CmsKit.Admin.Web.Pages.CmsKit.Tags", + "contentType": "webPage", + "name": "EditModalModel", + "summary": null + }, + { + "namespace": "Volo.CmsKit.Admin.Web.Pages.CmsKit.Tags", + "contentType": "webPage", + "name": "IndexModel", + "summary": null + }, + { + "namespace": "Volo.CmsKit.Admin.Web.Pages.CmsKit.Pages", + "contentType": "webPage", + "name": "CreateModel", + "summary": null + }, + { + "namespace": "Volo.CmsKit.Admin.Web.Pages.CmsKit.Pages", + "contentType": "webPage", + "name": "IndexModel", + "summary": null + }, + { + "namespace": "Volo.CmsKit.Admin.Web.Pages.CmsKit.Pages", + "contentType": "webPage", + "name": "UpdateModel", + "summary": null + }, + { + "namespace": "Volo.CmsKit.Admin.Web.Pages.CmsKit.Menus.MenuItems", + "contentType": "webPage", + "name": "CreateModalModel", + "summary": null + }, + { + "namespace": "Volo.CmsKit.Admin.Web.Pages.CmsKit.Menus.MenuItems", + "contentType": "webPage", + "name": "IndexModel", + "summary": null + }, + { + "namespace": "Volo.CmsKit.Admin.Web.Pages.CmsKit.Menus.MenuItems", + "contentType": "webPage", + "name": "UpdateModalModel", + "summary": null + }, + { + "namespace": "Volo.CmsKit.Admin.Web.Pages.CmsKit.GlobalResources", + "contentType": "webPage", + "name": "IndexModel", + "summary": null + }, + { + "namespace": "Volo.CmsKit.Admin.Web.Pages.CmsKit.Contents", + "contentType": "webPage", + "name": "AddWidgetModal", + "summary": null + }, + { + "namespace": "Volo.CmsKit.Admin.Web.Pages.CmsKit.Comments", + "contentType": "webPage", + "name": "DetailsModel", + "summary": null + }, + { + "namespace": "Volo.CmsKit.Admin.Web.Pages.CmsKit.Comments", + "contentType": "webPage", + "name": "IndexModel", + "summary": null + }, + { + "namespace": "Volo.CmsKit.Admin.Web.Pages.CmsKit.Comments.Approve", + "contentType": "webPage", + "name": "IndexModel", + "summary": null + }, + { + "namespace": "Volo.CmsKit.Admin.Web.Pages.CmsKit.Blogs", + "contentType": "webPage", + "name": "CreateModalModel", + "summary": null + }, + { + "namespace": "Volo.CmsKit.Admin.Web.Pages.CmsKit.Blogs", + "contentType": "webPage", + "name": "FeaturesModalModel", + "summary": null + }, + { + "namespace": "Volo.CmsKit.Admin.Web.Pages.CmsKit.Blogs", + "contentType": "webPage", + "name": "IndexModel", + "summary": null + }, + { + "namespace": "Volo.CmsKit.Admin.Web.Pages.CmsKit.Blogs", + "contentType": "webPage", + "name": "UpdateModalModel", + "summary": null + }, + { + "namespace": "Volo.CmsKit.Admin.Web.Pages.CmsKit.BlogPosts", + "contentType": "webPage", + "name": "CreateModel", + "summary": null + }, + { + "namespace": "Volo.CmsKit.Admin.Web.Pages.CmsKit.BlogPosts", + "contentType": "webPage", + "name": "IndexModel", + "summary": null + }, + { + "namespace": "Volo.CmsKit.Admin.Web.Pages.CmsKit.BlogPosts", + "contentType": "webPage", + "name": "UpdateModel", + "summary": null } ] } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Application.Contracts/Volo.CmsKit.Application.Contracts.abppkg.analyze.json b/modules/cms-kit/src/Volo.CmsKit.Application.Contracts/Volo.CmsKit.Application.Contracts.abppkg.analyze.json index 31c2e8b638..f99448fb3a 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Application.Contracts/Volo.CmsKit.Application.Contracts.abppkg.analyze.json +++ b/modules/cms-kit/src/Volo.CmsKit.Application.Contracts/Volo.CmsKit.Application.Contracts.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.CmsKit.Application.Contracts", - "hash": "66c9cd5f35e614372742f30cffd8bd6f", + "hash": "", "contents": [ { "namespace": "Volo.CmsKit", diff --git a/modules/cms-kit/src/Volo.CmsKit.Application/Volo.CmsKit.Application.abppkg.analyze.json b/modules/cms-kit/src/Volo.CmsKit.Application/Volo.CmsKit.Application.abppkg.analyze.json index 176ef47816..f9241cd762 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Application/Volo.CmsKit.Application.abppkg.analyze.json +++ b/modules/cms-kit/src/Volo.CmsKit.Application/Volo.CmsKit.Application.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.CmsKit.Application", - "hash": "00e09a7a3302312d77b39946caa4bfeb", + "hash": "", "contents": [ { "namespace": "Volo.CmsKit", diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo.CmsKit.Common.Application.Contracts.abppkg.analyze.json b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo.CmsKit.Common.Application.Contracts.abppkg.analyze.json index 3c7c768c62..83c5e5ef19 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo.CmsKit.Common.Application.Contracts.abppkg.analyze.json +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo.CmsKit.Common.Application.Contracts.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.CmsKit.Common.Application.Contracts", - "hash": "784cb8875b468f63331845f2e59b803c", + "hash": "", "contents": [ { "namespace": "Volo.CmsKit", diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo.CmsKit.Common.Application.abppkg.analyze.json b/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo.CmsKit.Common.Application.abppkg.analyze.json index cc91790057..97e0500737 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo.CmsKit.Common.Application.abppkg.analyze.json +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo.CmsKit.Common.Application.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.CmsKit.Common.Application", - "hash": "9c83bf387d563350ffb80d42d2884a92", + "hash": "", "contents": [ { "namespace": "Volo.CmsKit", @@ -141,6 +141,7 @@ "methods": [ { "returnType": "List", + "namespace": "Volo.CmsKit.Tags", "name": "GetAllRelatedTagsAsync", "summary": null, "isAsync": true, @@ -159,6 +160,28 @@ "isOptional": false } ] + }, + { + "returnType": "List", + "namespace": "Volo.CmsKit.Tags", + "name": "GetPopularTagsAsync", + "summary": null, + "isAsync": true, + "isPublic": true, + "isPrivate": false, + "isStatic": false, + "parameters": [ + { + "type": "String", + "name": "entityType", + "isOptional": false + }, + { + "type": "Int32", + "name": "maxCount", + "isOptional": false + } + ] } ], "contentType": "applicationService", @@ -232,6 +255,7 @@ "methods": [ { "returnType": "RemoteStreamContent", + "namespace": "Volo.CmsKit.MediaDescriptors", "name": "DownloadAsync", "summary": null, "isAsync": true, @@ -318,6 +342,7 @@ "methods": [ { "returnType": "BlogFeatureDto", + "namespace": "Volo.CmsKit.Blogs", "name": "GetOrDefaultAsync", "summary": null, "isAsync": true, diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi.Client/ClientProxies/BlogFeatureClientProxy.Generated.cs b/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi.Client/ClientProxies/BlogFeatureClientProxy.Generated.cs deleted file mode 100644 index 3f9d502147..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi.Client/ClientProxies/BlogFeatureClientProxy.Generated.cs +++ /dev/null @@ -1,26 +0,0 @@ -// This file is automatically generated by ABP framework to use MVC Controllers from CSharp -using System; -using System.Threading.Tasks; -using Volo.Abp.Application.Dtos; -using Volo.Abp.Http.Client; -using Volo.Abp.Http.Modeling; -using Volo.Abp.DependencyInjection; -using Volo.Abp.Http.Client.ClientProxying; -using Volo.CmsKit.Blogs; - -// ReSharper disable once CheckNamespace -namespace Volo.CmsKit.Blogs.ClientProxies; - -[Dependency(ReplaceServices = true)] -[ExposeServices(typeof(IBlogFeatureAppService), typeof(BlogFeatureClientProxy))] -public partial class BlogFeatureClientProxy : ClientProxyBase, IBlogFeatureAppService -{ - public virtual async Task GetOrDefaultAsync(Guid blogId, string featureName) - { - return await RequestAsync(nameof(GetOrDefaultAsync), new ClientProxyRequestTypeValue - { - { typeof(Guid), blogId }, - { typeof(string), featureName } - }); - } -} diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi.Client/ClientProxies/BlogFeatureClientProxy.cs b/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi.Client/ClientProxies/BlogFeatureClientProxy.cs deleted file mode 100644 index 61650128a9..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi.Client/ClientProxies/BlogFeatureClientProxy.cs +++ /dev/null @@ -1,7 +0,0 @@ -// This file is part of BlogFeatureClientProxy, you can customize it here -// ReSharper disable once CheckNamespace -namespace Volo.CmsKit.Blogs.ClientProxies; - -public partial class BlogFeatureClientProxy -{ -} diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi.Client/ClientProxies/MediaDescriptorClientProxy.Generated.cs b/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi.Client/ClientProxies/MediaDescriptorClientProxy.Generated.cs deleted file mode 100644 index d916a1e8d7..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi.Client/ClientProxies/MediaDescriptorClientProxy.Generated.cs +++ /dev/null @@ -1,26 +0,0 @@ -// This file is automatically generated by ABP framework to use MVC Controllers from CSharp -using System; -using System.Threading.Tasks; -using Volo.Abp.Application.Dtos; -using Volo.Abp.Http.Client; -using Volo.Abp.Http.Modeling; -using Volo.Abp.DependencyInjection; -using Volo.Abp.Http.Client.ClientProxying; -using Volo.CmsKit.MediaDescriptors; -using Volo.Abp.Content; - -// ReSharper disable once CheckNamespace -namespace Volo.CmsKit.MediaDescriptors.ClientProxies; - -[Dependency(ReplaceServices = true)] -[ExposeServices(typeof(IMediaDescriptorAppService), typeof(MediaDescriptorClientProxy))] -public partial class MediaDescriptorClientProxy : ClientProxyBase, IMediaDescriptorAppService -{ - public virtual async Task DownloadAsync(Guid id) - { - return await RequestAsync(nameof(DownloadAsync), new ClientProxyRequestTypeValue - { - { typeof(Guid), id } - }); - } -} diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi.Client/ClientProxies/MediaDescriptorClientProxy.cs b/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi.Client/ClientProxies/MediaDescriptorClientProxy.cs deleted file mode 100644 index cf3e084ddc..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi.Client/ClientProxies/MediaDescriptorClientProxy.cs +++ /dev/null @@ -1,7 +0,0 @@ -// This file is part of MediaDescriptorClientProxy, you can customize it here -// ReSharper disable once CheckNamespace -namespace Volo.CmsKit.MediaDescriptors.ClientProxies; - -public partial class MediaDescriptorClientProxy -{ -} diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi.Client/Volo.CmsKit.Common.HttpApi.Client.abppkg.analyze.json b/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi.Client/Volo.CmsKit.Common.HttpApi.Client.abppkg.analyze.json index 07cf87050b..878f2a794c 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi.Client/Volo.CmsKit.Common.HttpApi.Client.abppkg.analyze.json +++ b/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi.Client/Volo.CmsKit.Common.HttpApi.Client.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.CmsKit.Common.HttpApi.Client", - "hash": "e7ad713defbe5999262cd31144491fae", + "hash": "", "contents": [ { "namespace": "Volo.CmsKit", diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi/Volo.CmsKit.Common.HttpApi.abppkg.analyze.json b/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi/Volo.CmsKit.Common.HttpApi.abppkg.analyze.json index 9fe40718c1..d89526e298 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi/Volo.CmsKit.Common.HttpApi.abppkg.analyze.json +++ b/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi/Volo.CmsKit.Common.HttpApi.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.CmsKit.Common.HttpApi", - "hash": "a5120d7c193b3e67658db2321ee7f3cf", + "hash": "", "contents": [ { "namespace": "Volo.CmsKit", diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Volo.CmsKit.Common.Web.abppkg.analyze.json b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Volo.CmsKit.Common.Web.abppkg.analyze.json index 4fb7b3751a..56c251adff 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Volo.CmsKit.Common.Web.abppkg.analyze.json +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Volo.CmsKit.Common.Web.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.CmsKit.Common.Web", - "hash": "f301d4e5431930d0c906428b835e9b6d", + "hash": "", "contents": [ { "namespace": "Volo.CmsKit.Web", @@ -19,6 +19,11 @@ "declaringAssemblyName": "Volo.Abp.AutoMapper", "namespace": "Volo.Abp.AutoMapper", "name": "AbpAutoMapperModule" + }, + { + "declaringAssemblyName": "Volo.Abp.SettingManagement.Web", + "namespace": "Volo.Abp.SettingManagement.Web", + "name": "AbpSettingManagementWebModule" } ], "implementingInterfaces": [ diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo.CmsKit.Domain.Shared.abppkg.analyze.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo.CmsKit.Domain.Shared.abppkg.analyze.json index 5ae7c0efe3..a748e67a44 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo.CmsKit.Domain.Shared.abppkg.analyze.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo.CmsKit.Domain.Shared.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.CmsKit.Domain.Shared", - "hash": "bdbefadcd3677ae51a666b11c07bee07", + "hash": "", "contents": [ { "namespace": "Volo.CmsKit", @@ -68,6 +68,17 @@ "contentType": "abpModule", "name": "CmsKitDomainSharedModule", "summary": null + }, + { + "defaultValue": "false", + "displayName": "CmsKit.Comments.RequireApprovement", + "description": "", + "isVisibleToClient": true, + "isInherited": true, + "isEncrypted": false, + "contentType": "setting", + "name": "CmsKit.Comments.RequireApprovement", + "summary": null } ] } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/sv.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/sv.json new file mode 100644 index 0000000000..6e8962915b --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/sv.json @@ -0,0 +1,259 @@ +{ + "culture": "sv", + "texts": { + "AddSubMenuItem": "LĂ€gg till undermenyobjekt", + "AreYouSure": "Är du sĂ€ker?", + "BlogDeletionConfirmationMessage": "Bloggen '{0}' kommer att raderas. Är du sĂ€ker pĂ„ det?", + "BlogFeatureNotAvailable": "Denna funktion Ă€r inte tillgĂ€nglig nu. Aktivera med 'GlobalFeatureManager' för att anvĂ€nda den.", + "BlogId": "Blogg", + "BlogPostDeletionConfirmationMessage": "BlogginlĂ€gget \"{0}\" kommer att raderas. Är du sĂ€ker pĂ„ det?", + "BlogPosts": "BlogginlĂ€gg", + "Blogs": "Blogg", + "ChoosePreference": "VĂ€lj preferens...", + "Cms": "CMS", + "CmsKit.Comments": "Kommentarer", + "CmsKit.Ratings": "Betyg", + "CmsKit.Reactions": "Reaktioner", + "CmsKit.Tags": "Etiketter", + "CmsKit:0002": "InnehĂ„llet finns redan!", + "CmsKit:0003": "Entiteten {0} Ă€r inte taggbar.", + "CmsKit:Blog:0001": "Den angivna sluggen ({Slug}) finns redan!", + "CmsKit:BlogPost:0001": "Den angivna sluggen finns redan!", + "CmsKit:Comments:0001": "Enheten {EntityType} Ă€r inte kommenterbar.", + "CmsKit:Media:0001": "'{Namn}' Ă€r inte ett giltigt medienamn.", + "CmsKit:Media:0002": "Enheten kan inte ha media.", + "CmsKit:Page:0001": "Den angivna webbadressen ({Slug}) finns redan. VĂ€nligen försök med en annan webbadress.", + "CmsKit:Rating:0001": "Enheten {EntityType} kan inte betygsĂ€ttas.", + "CmsKit:Reaction:0001": "Enheten {EntityType} kan inte ha reaktioner.", + "CmsKit:Tag:0002": "Enheten Ă€r inte taggbar!", + "CmsKit:MarkedItem:ToggleConfirmation": "Är du sĂ€ker pĂ„ att du vill vĂ€xla det markerade objektet?", + "CommentAuthorizationExceptionMessage": "Dessa kommentarer Ă€r inte tillĂ„tna för offentlig visning.", + "CmsKit:Modals:Login": "Logga in", + "CmsKit:Modals:LoginModalDefaultMessage": "VĂ€nligen logga in för att fortsĂ€tta!", + "CmsKit:Modals:YouAreNotAuthenticated": "Denna Ă„tgĂ€rd Ă€r inte auktoriserad för dig.", + "CommentDeletionConfirmationMessage": "Denna kommentar och alla svar kommer att raderas!", + "CmsKit:MarkedItem:0001": "Entiteten {EntityType} kan inte markeras.", + "CmsKit:MarkedItem:0002": "Ingen definition hittades för entitetstypen '{EntityType}'.", + "CmsKit:MarkedItem:0003": "Det finns redan en definition för entitetstypen '{EntityType}'. Varje entitetstyp bör endast ha en definition.", + "CmsKit:MarkedItem:LoginMessage": "VĂ€nligen logga in för att markera denna artikel.", + "Comments": "Kommentarer", + "Content": "InnehĂ„ll", + "ContentDeletionConfirmationMessage": "Är du sĂ€ker pĂ„ att du vill radera detta innehĂ„ll?", + "Contents": "InnehĂ„ll", + "CoverImage": "Omslagsbild", + "CreateBlogPostPage": "Nytt blogginlĂ€gg", + "CreationTime": "Skapelsetid", + "Delete": "Radera", + "Detail": "Detalj", + "Details": "Detaljer", + "DisplayName": "Visa namn", + "DoYouPreferAdditionalEmails": "Vill du ha ytterligare e-postmeddelanden?", + "Edit": "Redigera", + "EndDate": "Slutdatum", + "EntityId": "Entitet Id", + "EntityType": "Typ av enhet", + "ExportCSV": "Exportera CSV", + "Features": "Funktioner", + "GenericDeletionConfirmationMessage": "Är du sĂ€ker att du vill ta bort \"{0}\"?", + "IsActive": "Aktiv", + "LastModification": "Senaste modifiering", + "LastModificationTime": "Tidpunkt för senaste modifiering", + "LoginToAddComment": "Logga in för att lĂ€gga till en kommentar", + "LoginToRate": "Logga in för att betygsĂ€tta", + "LoginToReact": "Logga in för att reagera", + "LoginToReply": "Logga in för att svara", + "MainMenu": "Huvudmeny", + "MakeMainMenu": "Skapa huvudmeny", + "Menu:CMS": "CMS", + "Menus": "Menyer", + "MenuDeletionConfirmationMessage": "Menyn \"{0}\" kommer att raderas. Är du sĂ€ker pĂ„ det?", + "MenuItemDeletionConfirmationMessage": "Är du sĂ€ker pĂ„ att du vill ta bort det hĂ€r menyalternativet?", + "MenuItemMoveConfirmMessage": "Är du sĂ€ker pĂ„ att du vill flytta '{0}' under '{1}'?", + "MenuItems": "Menyalternativ", + "Message": "Meddelande", + "MessageDeletionConfirmationMessage": "Denna kommentar kommer att raderas helt.", + "NewBlog": "Ny blogg", + "NewBlogPost": "Nytt blogginlĂ€gg", + "NewMenu": "Ny meny", + "NewMenuItem": "Nytt menyalternativ i rotmenyn", + "NewPage": "Ny sida", + "NewTag": "Ny etikett", + "NoMenuItems": "Det finns inget menyalternativ Ă€nnu!", + "OK": "OK", + "PageDeletionConfirmationMessage": "Är du sĂ€ker pĂ„ att du vill radera den hĂ€r sidan?", + "PageId": "Sidan", + "Pages": "Sidor", + "PageSlugInformation": "Sluggen anvĂ€nds pĂ„ webbadressen. Din webbadress kommer att vara \"/{{slug}}\".", + "BlogSlugInformation": "Sluggen anvĂ€nds pĂ„ webbadressen. Din webbadress kommer att vara \"/{0}/{{slug}}\".", + "Permission:BlogManagement": "Hantering av bloggar", + "Permission:BlogManagement.Create": "Skapa", + "Permission:BlogManagement.Delete": "Radera", + "Permission:BlogManagement.Features": "Funktioner", + "Permission:BlogManagement.Update": "Uppdatering", + "Permission:BlogPostManagement": "Hantering av blogginlĂ€gg", + "Permission:BlogPostManagement.Create": "Skapa", + "Permission:BlogPostManagement.Delete": "Radera", + "Permission:BlogPostManagement.Update": "Uppdatering", + "Permission:BlogPostManagement.Publish": "Publicera", + "Permission:CmsKit": "CmsKit administratör", + "Permission:Comments": "Hur man hanterar", + "Permission:Comments.Delete": "Radera", + "Permission:Contents": "Hantering av innehĂ„ll", + "Permission:Contents.Create": "Skapa innehĂ„ll", + "Permission:Contents.Delete": "Ta bort innehĂ„ll", + "Permission:Contents.Update": "Uppdatera innehĂ„ll", + "Permission:MediaDescriptorManagement": "Hantering av media", + "Permission:MediaDescriptorManagement:Create": "Skapa", + "Permission:MediaDescriptorManagement:Delete": "Radera", + "Permission:MenuItemManagement": "Hantering av menyalternativ", + "Permission:MenuItemManagement.Create": "Skapa", + "Permission:MenuItemManagement.Delete": "Radera", + "Permission:MenuItemManagement.Update": "Uppdatering", + "Permission:MenuManagement": "Meny för hantering", + "Permission:MenuManagement.Create": "Skapa", + "Permission:MenuManagement.Delete": "Radera", + "Permission:MenuManagement.Update": "Uppdatering", + "Permission:Menus": "Meny för hantering", + "Permission:Menus.Create": "Skapa", + "Permission:Menus.Delete": "Radera", + "Permission:Menus.Update": "Uppdatering", + "Permission:PageManagement": "Hantering av sidor", + "Permission:PageManagement:Create": "Skapa", + "Permission:PageManagement:Delete": "Radera", + "Permission:PageManagement:Update": "Uppdatering", + "Permission:PageManagement:SetAsHomePage": "StĂ€ll in som startsida", + "Permission:TagManagement": "Hantering av taggar", + "Permission:TagManagement.Create": "Skapa", + "Permission:TagManagement.Delete": "Radera", + "Permission:TagManagement.Update": "Uppdatering", + "Permission:GlobalResources": "Globala resurser", + "Permission:CmsKitPublic": "CmsKit allmĂ€n", + "Permission:Comments.DeleteAll": "Radera alla", + "PickYourReaction": "VĂ€lj din reaktion", + "Rating": "Betyg", + "RatingUndoMessage": "Ditt betyg kommer att Ă„ngras.", + "Reactions": "Reaktioner", + "Read": "LĂ€s", + "RepliesToThisComment": "Svar pĂ„ denna kommentar", + "Reply": "Svar", + "ReplyTo": "Svara pĂ„", + "SamplePageMessage": "En exempelsida för Pro-modulen", + "SaveChanges": "Spara Ă€ndringar", + "Script": "Skript", + "SelectAll": "VĂ€lj alla", + "Send": "Skicka", + "SendMessage": "Skicka meddelande", + "SelectedAuthor": "Författaren", + "ShortDescription": "Kort beskrivning", + "Slug": "Snigel", + "Source": "KĂ€lla", + "SourceUrl": "KĂ€llans webbadress", + "Star": "StjĂ€rna", + "StartDate": "Startdatum", + "Style": "Stil", + "Subject": "Ämne", + "SubjectPlaceholder": "VĂ€nligen skriv ett Ă€mne", + "Submit": "Skicka in", + "Subscribe": "Prenumerera", + "SavedSuccessfully": "Sparad framgĂ„ngsrikt!", + "TagDeletionConfirmationMessage": "Är du sĂ€ker pĂ„ att du vill ta bort taggen \"{0}\"?", + "Tags": "Etiketter", + "Text": "Text", + "ThankYou": "Tack sĂ„ mycket", + "Title": "Titel", + "Undo": "Ångra", + "Update": "Uppdatering", + "UpdatePreferenceSuccessMessage": "Dina instĂ€llningar har sparats.", + "UpdateYourEmailPreferences": "Uppdatera dina e-postpreferenser", + "UnMakeMainMenu": "Unmake Huvudmeny", + "UploadFailedMessage": "Uppladdningen misslyckades.", + "UserId": "AnvĂ€ndar-ID", + "Username": "AnvĂ€ndarnamn", + "YourComment": "Din kommentar", + "YourEmailAddress": "Din e-postadress", + "YourFullName": "Ditt fullstĂ€ndiga namn", + "YourMessage": "Ditt meddelande", + "YourReply": "Ditt svar", + "MarkdownSupported": "Stöd för Markdown.", + "GlobalResources": "Globala resurser", + "CmsKit.BlogPost.Status.0": "Utkast", + "CmsKit.BlogPost.Status.1": "Publicerad", + "CmsKit.BlogPost.Status.2": "VĂ€ntar pĂ„ recension", + "BlogPostPublishConfirmationMessage": "Är du sĂ€ker pĂ„ att du vill publicera blogginlĂ€gget \"{0}\"?", + "SuccessfullyPublished": "FramgĂ„ngsrikt publicerad!", + "Draft": "Utkast", + "Publish": "Publicera", + "BlogPostDraftConfirmationMessage": "Är du sĂ€ker pĂ„ att du har angett blogginlĂ€gget \"{0}\" som utkast?", + "BlogPostSendToReviewConfirmationMessage": "Är du sĂ€ker att du vill skicka blogginlĂ€gget \"{0}\" till administratörsgranskning för publicering?", + "SaveAsDraft": "Spara som utkast", + "SendToReview": "Skicka till recension", + "SendToReviewToPublish": "Skicka för granskning för publicering", + "BlogPostSendToReviewSuccessMessage": "BlogginlĂ€gget \"{0}\" har skickats till admin review för publicering.", + "HasBlogPostWaitingForReviewMessage": "Du har ett blogginlĂ€gg som vĂ€ntar pĂ„ att granskas. Klicka för att lista.", + "SelectAStatus": "VĂ€lj en status", + "Status": "Status", + "CmsKit.BlogPost.ScrollIndex": "SnabbnavigeringsfĂ€lt i blogginlĂ€gg", + "CmsKit.BlogPost.PreventXssFeature": "Förhindra XSS", + "Add": "LĂ€gg till", + "AddWidget": "LĂ€gg till widget", + "PleaseConfigureWidgets": "VĂ€nligen konfigurera widgets", + "SelectAnAuthor": "VĂ€lj en författare", + "InThisDocument": "I detta dokument", + "GoToTop": "GĂ„ till toppen", + "SetAsHomePage": "Ändra status för startsidan", + "CompletedSettingAsHomePage": "StĂ€ll in som startsida", + "IsHomePage": "Är hemsidan", + "RemovedSettingAsHomePage": "Borttagen instĂ€llning av startsidan", + "Feature:CmsKitGroup": "Cms-kit", + "Feature:BlogEnable": "BlogginlĂ€gg", + "Feature:BlogEnableDescription": "CMS Kits bloggpostsystem som gör det möjligt att skapa bloggar och inlĂ€gg dynamiskt i applikationen.", + "Feature:CommentEnable": "Kommentar", + "Feature:CommentEnableDescription": "CMS Kits kommentarsystem gör det möjligt att kommentera enheter som BlogPost.", + "Feature:GlobalResourceEnable": "Global resourcing", + "Feature:GlobalResourceEnableDescription": "CMS Kit's globala resoruces-funktion som gör det möjligt att hantera globala stilar och skript.", + "Feature:MenuEnable": "Meny", + "Feature:MenuEnableDescription": "CMS Kits dynamiska menysystem som gör det möjligt att lĂ€gga till/ta bort applikationsmenyer dynamiskt.", + "Feature:PageEnable": "Personsökning", + "Feature:PageEnableDescription": "CMS Kits sidosystem som gör det möjligt att skapa statiska sidor med en specifik URL.", + "Feature:RatingEnable": "Betyg", + "Feature:RatingEnableDescription": "CMS Kits betygssystem som gör det möjligt för anvĂ€ndare att betygsĂ€tta enheter som BlogPost.", + "Feature:ReactionEnable": "Reaktion", + "Feature:ReactionEnableDescription": "CMS Kits reaktionssystem som gör det möjligt för anvĂ€ndare att skicka reaktioner till enheter som BlogPost, Comments, etc.", + "Feature:TagEnable": "Taggning", + "Feature:TagEnableDescription": "CMS Kits taggsystem som gör det möjligt att tagga enheter som BlogPost.", + "Feature:MarkedItemEnable": "Markerat föremĂ„l", + "Feature:MarkedItemEnableDescription": "CMS Kits markeringssystem som gör det möjligt för anvĂ€ndare att markera enheter som favoriter.", + "DeleteBlogPostMessage": "Bloggen kommer att raderas. Är du sĂ€ker pĂ„ det?", + "CaptchaCode": "Captcha-kod", + "CommentTextRequired": "Kommentar krĂ€vs", + "CaptchaCodeErrorMessage": "Det svar du angav för CAPTCHA var inte korrekt. VĂ€nligen försök igen", + "CaptchaCodeMissingMessage": "Captcha-koden saknas!", + "UnAllowedExternalUrlMessage": "Du inkluderade en otillĂ„ten extern webbadress. Försök igen utan den externa webbadressen.", + "URL": "URL", + "PopularTags": "PopulĂ€ra taggar", + "RemoveCoverImageConfirmationMessage": "Är du sĂ€ker pĂ„ att du vill ta bort omslagsbilden?", + "RemoveCoverImage": "Ta bort omslagsbilden", + "CssClass": "CSS-klass", + "TagsHelpText": "Taggar ska vara kommaseparerade (t.ex.: tag1, tag2, tag3)", + "ThisPartOfContentCouldntBeLoaded": "Den hĂ€r delen av innehĂ„llet kunde inte laddas.", + "DuplicateCommentAttemptMessage": "Duplikat försök att posta kommentar upptĂ€ckt. Din kommentar har redan skickats in.", + "NoBlogPostYet": "Inget blogginlĂ€gg Ă€nnu!", + "CmsKit:Comment": "Hur gör man", + "CmsKitCommentOptions:RequireApprovement": "KrĂ€ver godkĂ€nnande för kommentarer", + "CmsKitCommentOptions:RequireApprovementDescription": "NĂ€r funktionen Ă€r aktiverad mĂ„ste kommentarer godkĂ€nnas innan de publiceras.", + "CommentFilter:ApproveState": "GodkĂ€nna stat", + "ApproveState": "GodkĂ€nna stat", + "CommentFilter:0": "Alla", + "CommentFilter:1": "GodkĂ€nd", + "CommentFilter:2": "Avvisad", + "CommentFilter:4": "VĂ€ntar pĂ„", + "ApprovedSuccessfully": "GodkĂ€nd framgĂ„ngsrikt", + "ApprovalRevokedSuccessfully": "Återkallat godkĂ€nnande framgĂ„ngsrikt", + "Approve": "GodkĂ€nna", + "Disapproved": "Avvisad", + "CommentAlertMessage": "Det finns {0} kommentarer som vĂ€ntar pĂ„ godkĂ€nnande", + "Settings:Menu:CmsKit": "CMS", + "CommentsAwaitingApproval": "Kommentarer som vĂ€ntar pĂ„ godkĂ€nnande", + "CommentSubmittedForApproval": "Din kommentar har skickats in för godkĂ€nnande." + } +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo.CmsKit.Domain.abppkg.analyze.json b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo.CmsKit.Domain.abppkg.analyze.json index a6e5c0aa93..1c3f2c14fd 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo.CmsKit.Domain.abppkg.analyze.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo.CmsKit.Domain.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.CmsKit.Domain", - "hash": "a330d75df32c8b504c193f59fe9554e5", + "hash": "", "contents": [ { "namespace": "Volo.CmsKit", @@ -24,6 +24,11 @@ "declaringAssemblyName": "Volo.Abp.BlobStoring", "namespace": "Volo.Abp.BlobStoring", "name": "AbpBlobStoringModule" + }, + { + "declaringAssemblyName": "Volo.Abp.SettingManagement.Domain", + "namespace": "Volo.Abp.SettingManagement", + "name": "AbpSettingManagementDomainModule" } ], "implementingInterfaces": [ @@ -157,7 +162,7 @@ { "name": "IMultiTenant", "namespace": "Volo.Abp.MultiTenancy", - "declaringAssemblyName": "Volo.Abp.MultiTenancy", + "declaringAssemblyName": "Volo.Abp.MultiTenancy.Abstractions", "fullName": "Volo.Abp.MultiTenancy.IMultiTenant" }, { @@ -170,6 +175,7 @@ "methods": [ { "returnType": "Boolean", + "namespace": "Volo.CmsKit.Users", "name": "Update", "summary": null, "isAsync": false, @@ -353,13 +359,14 @@ { "name": "IMultiTenant", "namespace": "Volo.Abp.MultiTenancy", - "declaringAssemblyName": "Volo.Abp.MultiTenancy", + "declaringAssemblyName": "Volo.Abp.MultiTenancy.Abstractions", "fullName": "Volo.Abp.MultiTenancy.IMultiTenant" } ], "methods": [ { "returnType": "Void", + "namespace": "Volo.CmsKit.Tags", "name": "SetName", "summary": null, "isAsync": false, @@ -376,6 +383,7 @@ }, { "returnType": "Void", + "namespace": "Volo.CmsKit.Tags", "name": "SetEntityType", "summary": null, "isAsync": false, @@ -469,7 +477,7 @@ { "name": "IMultiTenant", "namespace": "Volo.Abp.MultiTenancy", - "declaringAssemblyName": "Volo.Abp.MultiTenancy", + "declaringAssemblyName": "Volo.Abp.MultiTenancy.Abstractions", "fullName": "Volo.Abp.MultiTenancy.IMultiTenant" } ], @@ -568,6 +576,7 @@ "methods": [ { "returnType": "Void", + "namespace": "Volo.CmsKit.Ratings", "name": "SetStarCount", "summary": null, "isAsync": false, @@ -736,13 +745,20 @@ { "name": "IMultiTenant", "namespace": "Volo.Abp.MultiTenancy", - "declaringAssemblyName": "Volo.Abp.MultiTenancy", + "declaringAssemblyName": "Volo.Abp.MultiTenancy.Abstractions", "fullName": "Volo.Abp.MultiTenancy.IMultiTenant" + }, + { + "name": "IHasEntityVersion", + "namespace": "Volo.Abp.Auditing", + "declaringAssemblyName": "Volo.Abp.Auditing.Contracts", + "fullName": "Volo.Abp.Auditing.IHasEntityVersion" } ], "methods": [ { "returnType": "Void", + "namespace": "Volo.CmsKit.Pages", "name": "SetTitle", "summary": null, "isAsync": false, @@ -759,6 +775,7 @@ }, { "returnType": "Void", + "namespace": "Volo.CmsKit.Pages", "name": "SetContent", "summary": null, "isAsync": false, @@ -775,6 +792,7 @@ }, { "returnType": "Void", + "namespace": "Volo.CmsKit.Pages", "name": "SetScript", "summary": null, "isAsync": false, @@ -791,6 +809,7 @@ }, { "returnType": "Void", + "namespace": "Volo.CmsKit.Pages", "name": "SetStyle", "summary": null, "isAsync": false, @@ -845,6 +864,11 @@ "type": "System.Boolean", "name": "IsHomePage", "summary": null + }, + { + "type": "System.Int32", + "name": "EntityVersion", + "summary": null } ], "contentType": "aggregateRoot", @@ -940,13 +964,14 @@ { "name": "IMultiTenant", "namespace": "Volo.Abp.MultiTenancy", - "declaringAssemblyName": "Volo.Abp.MultiTenancy", + "declaringAssemblyName": "Volo.Abp.MultiTenancy.Abstractions", "fullName": "Volo.Abp.MultiTenancy.IMultiTenant" } ], "methods": [ { "returnType": "Void", + "namespace": "Volo.CmsKit.Menus", "name": "SetDisplayName", "summary": null, "isAsync": false, @@ -963,6 +988,7 @@ }, { "returnType": "Void", + "namespace": "Volo.CmsKit.Menus", "name": "SetUrl", "summary": null, "isAsync": false, @@ -1156,13 +1182,14 @@ { "name": "IMultiTenant", "namespace": "Volo.Abp.MultiTenancy", - "declaringAssemblyName": "Volo.Abp.MultiTenancy", + "declaringAssemblyName": "Volo.Abp.MultiTenancy.Abstractions", "fullName": "Volo.Abp.MultiTenancy.IMultiTenant" } ], "methods": [ { "returnType": "Void", + "namespace": "Volo.CmsKit.MediaDescriptors", "name": "SetName", "summary": null, "isAsync": false, @@ -1213,6 +1240,99 @@ "name": "MediaDescriptor", "summary": null }, + { + "baseClass": { + "name": "BasicAggregateRoot", + "namespace": "Volo.Abp.Domain.Entities", + "declaringAssemblyName": "Volo.Abp.Ddd.Domain", + "fullName": "Volo.Abp.Domain.Entities.BasicAggregateRoot" + }, + "implementingInterfaces": [ + { + "name": "IEntity", + "namespace": "Volo.Abp.Domain.Entities", + "declaringAssemblyName": "Volo.Abp.Ddd.Domain", + "fullName": "Volo.Abp.Domain.Entities.IEntity" + }, + { + "name": "IEntity", + "namespace": "Volo.Abp.Domain.Entities", + "declaringAssemblyName": "Volo.Abp.Ddd.Domain", + "fullName": "Volo.Abp.Domain.Entities.IEntity" + }, + { + "name": "IAggregateRoot", + "namespace": "Volo.Abp.Domain.Entities", + "declaringAssemblyName": "Volo.Abp.Ddd.Domain", + "fullName": "Volo.Abp.Domain.Entities.IAggregateRoot" + }, + { + "name": "IAggregateRoot", + "namespace": "Volo.Abp.Domain.Entities", + "declaringAssemblyName": "Volo.Abp.Ddd.Domain", + "fullName": "Volo.Abp.Domain.Entities.IAggregateRoot" + }, + { + "name": "IGeneratesDomainEvents", + "namespace": "Volo.Abp.Domain.Entities", + "declaringAssemblyName": "Volo.Abp.Ddd.Domain", + "fullName": "Volo.Abp.Domain.Entities.IGeneratesDomainEvents" + }, + { + "name": "IHasCreationTime", + "namespace": "Volo.Abp.Auditing", + "declaringAssemblyName": "Volo.Abp.Auditing.Contracts", + "fullName": "Volo.Abp.Auditing.IHasCreationTime" + }, + { + "name": "IMustHaveCreator", + "namespace": "Volo.Abp.Auditing", + "declaringAssemblyName": "Volo.Abp.Auditing.Contracts", + "fullName": "Volo.Abp.Auditing.IMustHaveCreator" + }, + { + "name": "IMultiTenant", + "namespace": "Volo.Abp.MultiTenancy", + "declaringAssemblyName": "Volo.Abp.MultiTenancy.Abstractions", + "fullName": "Volo.Abp.MultiTenancy.IMultiTenant" + } + ], + "methods": [], + "collectionProperties": {}, + "navigationProperties": {}, + "namespace": "Volo.CmsKit.MarkedItems", + "primaryKeyType": "Guid", + "properties": [ + { + "type": "System.Nullable`1[System.Guid]", + "name": "TenantId", + "summary": null + }, + { + "type": "System.Guid", + "name": "CreatorId", + "summary": null + }, + { + "type": "System.DateTime", + "name": "CreationTime", + "summary": null + }, + { + "type": "System.String", + "name": "EntityId", + "summary": null + }, + { + "type": "System.String", + "name": "EntityType", + "summary": null + } + ], + "contentType": "aggregateRoot", + "name": "UserMarkedItem", + "summary": null + }, { "baseClass": { "name": "AuditedAggregateRoot", @@ -1302,13 +1422,14 @@ { "name": "IMultiTenant", "namespace": "Volo.Abp.MultiTenancy", - "declaringAssemblyName": "Volo.Abp.MultiTenancy", + "declaringAssemblyName": "Volo.Abp.MultiTenancy.Abstractions", "fullName": "Volo.Abp.MultiTenancy.IMultiTenant" } ], "methods": [ { "returnType": "Void", + "namespace": "Volo.CmsKit.GlobalResources", "name": "SetValue", "summary": null, "isAsync": false, @@ -1414,13 +1535,14 @@ { "name": "IMultiTenant", "namespace": "Volo.Abp.MultiTenancy", - "declaringAssemblyName": "Volo.Abp.MultiTenancy", + "declaringAssemblyName": "Volo.Abp.MultiTenancy.Abstractions", "fullName": "Volo.Abp.MultiTenancy.IMultiTenant" } ], "methods": [ { "returnType": "Void", + "namespace": "Volo.CmsKit.Comments", "name": "SetText", "summary": null, "isAsync": false, @@ -1434,6 +1556,39 @@ "isOptional": false } ] + }, + { + "returnType": "Comment", + "namespace": "Volo.CmsKit.Comments", + "name": "Approve", + "summary": null, + "isAsync": false, + "isPublic": true, + "isPrivate": false, + "isStatic": false, + "parameters": [] + }, + { + "returnType": "Comment", + "namespace": "Volo.CmsKit.Comments", + "name": "Reject", + "summary": null, + "isAsync": false, + "isPublic": true, + "isPrivate": false, + "isStatic": false, + "parameters": [] + }, + { + "returnType": "Comment", + "namespace": "Volo.CmsKit.Comments", + "name": "WaitForApproval", + "summary": null, + "isAsync": false, + "isPublic": true, + "isPrivate": false, + "isStatic": false, + "parameters": [] } ], "collectionProperties": {}, @@ -1475,6 +1630,21 @@ "type": "System.DateTime", "name": "CreationTime", "summary": null + }, + { + "type": "System.String", + "name": "Url", + "summary": null + }, + { + "type": "System.String", + "name": "IdempotencyToken", + "summary": null + }, + { + "type": "System.Nullable`1[System.Boolean]", + "name": "IsApproved", + "summary": null } ], "contentType": "aggregateRoot", @@ -1594,13 +1764,14 @@ { "name": "IMultiTenant", "namespace": "Volo.Abp.MultiTenancy", - "declaringAssemblyName": "Volo.Abp.MultiTenancy", + "declaringAssemblyName": "Volo.Abp.MultiTenancy.Abstractions", "fullName": "Volo.Abp.MultiTenancy.IMultiTenant" } ], "methods": [ { "returnType": "Void", + "namespace": "Volo.CmsKit.Blogs", "name": "SetName", "summary": null, "isAsync": false, @@ -1617,6 +1788,7 @@ }, { "returnType": "Void", + "namespace": "Volo.CmsKit.Blogs", "name": "SetSlug", "summary": null, "isAsync": false, @@ -1907,13 +2079,20 @@ { "name": "IMultiTenant", "namespace": "Volo.Abp.MultiTenancy", - "declaringAssemblyName": "Volo.Abp.MultiTenancy", + "declaringAssemblyName": "Volo.Abp.MultiTenancy.Abstractions", "fullName": "Volo.Abp.MultiTenancy.IMultiTenant" + }, + { + "name": "IHasEntityVersion", + "namespace": "Volo.Abp.Auditing", + "declaringAssemblyName": "Volo.Abp.Auditing.Contracts", + "fullName": "Volo.Abp.Auditing.IHasEntityVersion" } ], "methods": [ { "returnType": "Void", + "namespace": "Volo.CmsKit.Blogs", "name": "SetTitle", "summary": null, "isAsync": false, @@ -1930,6 +2109,7 @@ }, { "returnType": "Void", + "namespace": "Volo.CmsKit.Blogs", "name": "SetShortDescription", "summary": null, "isAsync": false, @@ -1946,6 +2126,7 @@ }, { "returnType": "Void", + "namespace": "Volo.CmsKit.Blogs", "name": "SetContent", "summary": null, "isAsync": false, @@ -1962,6 +2143,7 @@ }, { "returnType": "Void", + "namespace": "Volo.CmsKit.Blogs", "name": "SetDraft", "summary": null, "isAsync": false, @@ -1972,6 +2154,7 @@ }, { "returnType": "Void", + "namespace": "Volo.CmsKit.Blogs", "name": "SetPublished", "summary": null, "isAsync": false, @@ -1982,6 +2165,7 @@ }, { "returnType": "Void", + "namespace": "Volo.CmsKit.Blogs", "name": "SetWaitingForReview", "summary": null, "isAsync": false, @@ -2052,6 +2236,11 @@ "type": "Volo.CmsKit.Blogs.BlogPostStatus", "name": "Status", "summary": null + }, + { + "type": "System.Int32", + "name": "EntityVersion", + "summary": null } ], "contentType": "aggregateRoot", @@ -2069,6 +2258,7 @@ "methods": [ { "returnType": "EntityTag", + "namespace": "Volo.CmsKit.Tags", "name": "AddTagToEntityAsync", "summary": null, "isAsync": true, @@ -2105,6 +2295,7 @@ }, { "returnType": "Void", + "namespace": "Volo.CmsKit.Tags", "name": "RemoveTagFromEntityAsync", "summary": null, "isAsync": true, @@ -2141,6 +2332,7 @@ }, { "returnType": "Void", + "namespace": "Volo.CmsKit.Tags", "name": "SetEntityTagsAsync", "summary": null, "isAsync": true, @@ -2167,6 +2359,7 @@ }, { "returnType": "List", + "namespace": "Volo.CmsKit.Tags", "name": "GetEntityIdsFilteredByTagAsync", "summary": null, "isAsync": true, @@ -2193,6 +2386,7 @@ }, { "returnType": "List", + "namespace": "Volo.CmsKit.Tags", "name": "GetEntityIdsFilteredByTagNameAsync", "summary": null, "isAsync": true, @@ -2252,6 +2446,7 @@ "methods": [ { "returnType": "Tag", + "namespace": "Volo.CmsKit.Tags", "name": "GetOrAddAsync", "summary": null, "isAsync": true, @@ -2273,6 +2468,7 @@ }, { "returnType": "Tag", + "namespace": "Volo.CmsKit.Tags", "name": "CreateAsync", "summary": null, "isAsync": true, @@ -2299,6 +2495,7 @@ }, { "returnType": "Tag", + "namespace": "Volo.CmsKit.Tags", "name": "UpdateAsync", "summary": null, "isAsync": true, @@ -2348,6 +2545,7 @@ "methods": [ { "returnType": "List", + "namespace": "Volo.CmsKit.Reactions", "name": "GetReactionsAsync", "summary": null, "isAsync": true, @@ -2364,6 +2562,7 @@ }, { "returnType": "List", + "namespace": "Volo.CmsKit.Reactions", "name": "GetSummariesAsync", "summary": null, "isAsync": true, @@ -2385,6 +2584,7 @@ }, { "returnType": "UserReaction", + "namespace": "Volo.CmsKit.Reactions", "name": "GetOrCreateAsync", "summary": null, "isAsync": true, @@ -2416,6 +2616,7 @@ }, { "returnType": "Boolean", + "namespace": "Volo.CmsKit.Reactions", "name": "DeleteAsync", "summary": null, "isAsync": true, @@ -2475,6 +2676,7 @@ "methods": [ { "returnType": "Rating", + "namespace": "Volo.CmsKit.Ratings", "name": "SetStarAsync", "summary": null, "isAsync": true, @@ -2534,6 +2736,7 @@ "methods": [ { "returnType": "Page", + "namespace": "Volo.CmsKit.Pages", "name": "CreateAsync", "summary": null, "isAsync": true, @@ -2570,6 +2773,7 @@ }, { "returnType": "Void", + "namespace": "Volo.CmsKit.Pages", "name": "SetSlugAsync", "summary": null, "isAsync": true, @@ -2591,6 +2795,7 @@ }, { "returnType": "Void", + "namespace": "Volo.CmsKit.Pages", "name": "SetHomePageAsync", "summary": null, "isAsync": true, @@ -2607,6 +2812,7 @@ }, { "returnType": "Page", + "namespace": "Volo.CmsKit.Pages", "name": "GetHomePageAsync", "summary": null, "isAsync": true, @@ -2645,6 +2851,7 @@ "methods": [ { "returnType": "Void", + "namespace": "Volo.CmsKit.Menus", "name": "SetPageUrl", "summary": null, "isAsync": false, @@ -2666,6 +2873,29 @@ }, { "returnType": "Void", + "namespace": "Volo.CmsKit.Menus", + "name": "SetPageUrl", + "summary": null, + "isAsync": false, + "isPublic": true, + "isPrivate": false, + "isStatic": false, + "parameters": [ + { + "type": "MenuItem", + "name": "menuItem", + "isOptional": false + }, + { + "type": "String", + "name": "url", + "isOptional": false + } + ] + }, + { + "returnType": "Void", + "namespace": "Volo.CmsKit.Menus", "name": "MoveAsync", "summary": null, "isAsync": true, @@ -2692,6 +2922,7 @@ }, { "returnType": "Void", + "namespace": "Volo.CmsKit.Menus", "name": "OrganizeTreeOrderForMenuItem", "summary": null, "isAsync": false, @@ -2741,6 +2972,7 @@ "methods": [ { "returnType": "MediaDescriptor", + "namespace": "Volo.CmsKit.MediaDescriptors", "name": "CreateAsync", "summary": null, "isAsync": true, @@ -2789,6 +3021,61 @@ "name": "MediaDescriptorManager", "summary": null }, + { + "namespace": "Volo.CmsKit.MarkedItems", + "baseClass": { + "name": "CmsKitDomainServiceBase", + "namespace": "Volo.CmsKit", + "declaringAssemblyName": "Volo.CmsKit.Domain", + "fullName": "Volo.CmsKit.CmsKitDomainServiceBase" + }, + "methods": [ + { + "returnType": "Boolean", + "namespace": "Volo.CmsKit.MarkedItems", + "name": "ToggleUserMarkedItemAsync", + "summary": null, + "isAsync": true, + "isPublic": true, + "isPrivate": false, + "isStatic": false, + "parameters": [ + { + "type": "Guid", + "name": "creatorId", + "isOptional": false + }, + { + "type": "String", + "name": "entityType", + "isOptional": false + }, + { + "type": "String", + "name": "entityId", + "isOptional": false + } + ] + } + ], + "implementingInterfaces": [ + { + "name": "IDomainService", + "namespace": "Volo.Abp.Domain.Services", + "declaringAssemblyName": "Volo.Abp.Ddd.Domain", + "fullName": "Volo.Abp.Domain.Services.IDomainService" + }, + { + "name": "ITransientDependency", + "namespace": "Volo.Abp.DependencyInjection", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.DependencyInjection.ITransientDependency" + } + ], + "contentType": "domainService", + "name": "MarkedItemManager", + "summary": null + }, { "namespace": "Volo.CmsKit.GlobalResources", "baseClass": { @@ -2800,6 +3087,7 @@ "methods": [ { "returnType": "GlobalResource", + "namespace": "Volo.CmsKit.GlobalResources", "name": "SetGlobalStyleAsync", "summary": null, "isAsync": true, @@ -2816,6 +3104,7 @@ }, { "returnType": "GlobalResource", + "namespace": "Volo.CmsKit.GlobalResources", "name": "SetGlobalScriptAsync", "summary": null, "isAsync": true, @@ -2832,6 +3121,7 @@ }, { "returnType": "GlobalResource", + "namespace": "Volo.CmsKit.GlobalResources", "name": "GetGlobalStyleAsync", "summary": null, "isAsync": true, @@ -2842,6 +3132,7 @@ }, { "returnType": "GlobalResource", + "namespace": "Volo.CmsKit.GlobalResources", "name": "GetGlobalScriptAsync", "summary": null, "isAsync": true, @@ -2880,6 +3171,7 @@ "methods": [ { "returnType": "Comment", + "namespace": "Volo.CmsKit.Comments", "name": "CreateAsync", "summary": null, "isAsync": true, @@ -2907,6 +3199,11 @@ "name": "text", "isOptional": false }, + { + "type": "String", + "name": "url", + "isOptional": true + }, { "type": "Nullable", "name": "repliedCommentId", @@ -2944,6 +3241,7 @@ "methods": [ { "returnType": "Void", + "namespace": "Volo.CmsKit.Blogs", "name": "SetAsync", "summary": null, "isAsync": true, @@ -2970,6 +3268,7 @@ }, { "returnType": "Void", + "namespace": "Volo.CmsKit.Blogs", "name": "SetDefaultsAsync", "summary": null, "isAsync": true, @@ -2986,6 +3285,7 @@ }, { "returnType": "Void", + "namespace": "Volo.CmsKit.Blogs", "name": "SetIfNotSetAsync", "summary": null, "isAsync": true, @@ -3012,6 +3312,7 @@ }, { "returnType": "Void", + "namespace": "Volo.CmsKit.Blogs", "name": "SetDefaultsIfNotSetAsync", "summary": null, "isAsync": true, @@ -3056,6 +3357,7 @@ "methods": [ { "returnType": "Blog", + "namespace": "Volo.CmsKit.Blogs", "name": "CreateAsync", "summary": null, "isAsync": true, @@ -3077,6 +3379,7 @@ }, { "returnType": "Blog", + "namespace": "Volo.CmsKit.Blogs", "name": "UpdateAsync", "summary": null, "isAsync": true, @@ -3131,6 +3434,7 @@ "methods": [ { "returnType": "BlogPost", + "namespace": "Volo.CmsKit.Blogs", "name": "CreateAsync", "summary": null, "isAsync": true, @@ -3182,6 +3486,7 @@ }, { "returnType": "Void", + "namespace": "Volo.CmsKit.Blogs", "name": "SetSlugUrlAsync", "summary": null, "isAsync": true, @@ -3306,6 +3611,7 @@ "methods": [ { "returnType": "EntityTag", + "namespace": "Volo.CmsKit.Tags", "name": "FindAsync", "summary": null, "isAsync": true, @@ -3337,6 +3643,7 @@ }, { "returnType": "Void", + "namespace": "Volo.CmsKit.Tags", "name": "DeleteManyAsync", "summary": null, "isAsync": true, @@ -3363,6 +3670,7 @@ }, { "returnType": "List", + "namespace": "Volo.CmsKit.Tags", "name": "GetEntityIdsFilteredByTagAsync", "summary": null, "isAsync": true, @@ -3389,6 +3697,7 @@ }, { "returnType": "List", + "namespace": "Volo.CmsKit.Tags", "name": "GetEntityIdsFilteredByTagNameAsync", "summary": null, "isAsync": true, @@ -3468,6 +3777,7 @@ "methods": [ { "returnType": "Tag", + "namespace": "Volo.CmsKit.Tags", "name": "GetAsync", "summary": null, "isAsync": true, @@ -3494,6 +3804,7 @@ }, { "returnType": "Boolean", + "namespace": "Volo.CmsKit.Tags", "name": "AnyAsync", "summary": null, "isAsync": true, @@ -3520,6 +3831,7 @@ }, { "returnType": "Tag", + "namespace": "Volo.CmsKit.Tags", "name": "FindAsync", "summary": null, "isAsync": true, @@ -3546,6 +3858,7 @@ }, { "returnType": "List", + "namespace": "Volo.CmsKit.Tags", "name": "GetListAsync", "summary": null, "isAsync": true, @@ -3558,6 +3871,21 @@ "name": "filter", "isOptional": false }, + { + "type": "Int32", + "name": "maxResultCount", + "isOptional": true + }, + { + "type": "Int32", + "name": "skipCount", + "isOptional": true + }, + { + "type": "String", + "name": "sorting", + "isOptional": true + }, { "type": "CancellationToken", "name": "cancellationToken", @@ -3567,6 +3895,7 @@ }, { "returnType": "Int32", + "namespace": "Volo.CmsKit.Tags", "name": "GetCountAsync", "summary": null, "isAsync": true, @@ -3588,6 +3917,7 @@ }, { "returnType": "List", + "namespace": "Volo.CmsKit.Tags", "name": "GetAllRelatedTagsAsync", "summary": null, "isAsync": true, @@ -3611,6 +3941,33 @@ "isOptional": true } ] + }, + { + "returnType": "List", + "namespace": "Volo.CmsKit.Tags", + "name": "GetPopularTagsAsync", + "summary": null, + "isAsync": true, + "isPublic": true, + "isPrivate": false, + "isStatic": false, + "parameters": [ + { + "type": "String", + "name": "entityType", + "isOptional": false + }, + { + "type": "Int32", + "name": "maxCount", + "isOptional": false + }, + { + "type": "CancellationToken", + "name": "cancellationToken", + "isOptional": true + } + ] } ], "contentType": "repositoryInterface", @@ -3662,6 +4019,7 @@ "methods": [ { "returnType": "UserReaction", + "namespace": "Volo.CmsKit.Reactions", "name": "FindAsync", "summary": null, "isAsync": true, @@ -3698,6 +4056,7 @@ }, { "returnType": "List", + "namespace": "Volo.CmsKit.Reactions", "name": "GetListForUserAsync", "summary": null, "isAsync": true, @@ -3729,6 +4088,7 @@ }, { "returnType": "List", + "namespace": "Volo.CmsKit.Reactions", "name": "GetSummariesAsync", "summary": null, "isAsync": true, @@ -3803,6 +4163,7 @@ "methods": [ { "returnType": "Rating", + "namespace": "Volo.CmsKit.Ratings", "name": "GetCurrentUserRatingAsync", "summary": null, "isAsync": true, @@ -3834,6 +4195,7 @@ }, { "returnType": "List", + "namespace": "Volo.CmsKit.Ratings", "name": "GetGroupedStarCountsAsync", "summary": null, "isAsync": true, @@ -3908,6 +4270,7 @@ "methods": [ { "returnType": "Int32", + "namespace": "Volo.CmsKit.Pages", "name": "GetCountAsync", "summary": null, "isAsync": true, @@ -3929,6 +4292,7 @@ }, { "returnType": "List", + "namespace": "Volo.CmsKit.Pages", "name": "GetListAsync", "summary": null, "isAsync": true, @@ -3965,6 +4329,7 @@ }, { "returnType": "Page", + "namespace": "Volo.CmsKit.Pages", "name": "GetBySlugAsync", "summary": null, "isAsync": true, @@ -3986,6 +4351,7 @@ }, { "returnType": "Page", + "namespace": "Volo.CmsKit.Pages", "name": "FindBySlugAsync", "summary": null, "isAsync": true, @@ -4007,6 +4373,7 @@ }, { "returnType": "Boolean", + "namespace": "Volo.CmsKit.Pages", "name": "ExistsAsync", "summary": null, "isAsync": true, @@ -4028,6 +4395,7 @@ }, { "returnType": "List", + "namespace": "Volo.CmsKit.Pages", "name": "GetListOfHomePagesAsync", "summary": null, "isAsync": true, @@ -4041,6 +4409,28 @@ "isOptional": true } ] + }, + { + "returnType": "String", + "namespace": "Volo.CmsKit.Pages", + "name": "FindTitleAsync", + "summary": null, + "isAsync": true, + "isPublic": true, + "isPrivate": false, + "isStatic": false, + "parameters": [ + { + "type": "Guid", + "name": "pageId", + "isOptional": false + }, + { + "type": "CancellationToken", + "name": "cancellationToken", + "isOptional": true + } + ] } ], "contentType": "repositoryInterface", @@ -4141,6 +4531,145 @@ "name": "IMediaDescriptorRepository", "summary": null }, + { + "namespace": "Volo.CmsKit.MarkedItems", + "entityAnalyzeModel": { + "namespace": "Volo.CmsKit.MarkedItems", + "primaryKeyType": "Guid", + "properties": [], + "contentType": "entity", + "name": "UserMarkedItem", + "summary": null + }, + "implementingInterfaces": [ + { + "name": "IBasicRepository", + "namespace": "Volo.Abp.Domain.Repositories", + "declaringAssemblyName": "Volo.Abp.Ddd.Domain", + "fullName": "Volo.Abp.Domain.Repositories.IBasicRepository" + }, + { + "name": "IBasicRepository", + "namespace": "Volo.Abp.Domain.Repositories", + "declaringAssemblyName": "Volo.Abp.Ddd.Domain", + "fullName": "Volo.Abp.Domain.Repositories.IBasicRepository" + }, + { + "name": "IReadOnlyBasicRepository", + "namespace": "Volo.Abp.Domain.Repositories", + "declaringAssemblyName": "Volo.Abp.Ddd.Domain", + "fullName": "Volo.Abp.Domain.Repositories.IReadOnlyBasicRepository" + }, + { + "name": "IRepository", + "namespace": "Volo.Abp.Domain.Repositories", + "declaringAssemblyName": "Volo.Abp.Ddd.Domain", + "fullName": "Volo.Abp.Domain.Repositories.IRepository" + }, + { + "name": "IReadOnlyBasicRepository", + "namespace": "Volo.Abp.Domain.Repositories", + "declaringAssemblyName": "Volo.Abp.Ddd.Domain", + "fullName": "Volo.Abp.Domain.Repositories.IReadOnlyBasicRepository" + } + ], + "methods": [ + { + "returnType": "UserMarkedItem", + "namespace": "Volo.CmsKit.MarkedItems", + "name": "FindAsync", + "summary": null, + "isAsync": true, + "isPublic": true, + "isPrivate": false, + "isStatic": false, + "parameters": [ + { + "type": "Guid", + "name": "userId", + "isOptional": false + }, + { + "type": "String", + "name": "entityType", + "isOptional": false + }, + { + "type": "String", + "name": "entityId", + "isOptional": false + }, + { + "type": "CancellationToken", + "name": "cancellationToken", + "isOptional": true + } + ] + }, + { + "returnType": "List", + "namespace": "Volo.CmsKit.MarkedItems", + "name": "GetListForUserAsync", + "summary": null, + "isAsync": true, + "isPublic": true, + "isPrivate": false, + "isStatic": false, + "parameters": [ + { + "type": "Guid", + "name": "userId", + "isOptional": false + }, + { + "type": "String", + "name": "entityType", + "isOptional": false + }, + { + "type": "CancellationToken", + "name": "cancellationToken", + "isOptional": true + } + ] + }, + { + "returnType": "List", + "namespace": "Volo.CmsKit.MarkedItems", + "name": "GetEntityIdsFilteredByUserAsync", + "summary": null, + "isAsync": true, + "isPublic": true, + "isPrivate": false, + "isStatic": false, + "parameters": [ + { + "type": "Guid", + "name": "userId", + "isOptional": false + }, + { + "type": "String", + "name": "entityType", + "isOptional": false + }, + { + "type": "Nullable", + "name": "tenantId", + "isOptional": true + }, + { + "type": "CancellationToken", + "name": "cancellationToken", + "isOptional": true + } + ] + } + ], + "contentType": "repositoryInterface", + "name": "IUserMarkedItemRepository", + "summary": null + }, { "namespace": "Volo.CmsKit.GlobalResources", "entityAnalyzeModel": { @@ -4186,6 +4715,7 @@ "methods": [ { "returnType": "GlobalResource", + "namespace": "Volo.CmsKit.GlobalResources", "name": "FindByNameAsync", "summary": null, "isAsync": true, @@ -4255,6 +4785,7 @@ "methods": [ { "returnType": "CommentWithAuthorQueryResultItem", + "namespace": "Volo.CmsKit.Comments", "name": "GetWithAuthorAsync", "summary": null, "isAsync": true, @@ -4276,6 +4807,7 @@ }, { "returnType": "List", + "namespace": "Volo.CmsKit.Comments", "name": "GetListAsync", "summary": null, "isAsync": true, @@ -4328,6 +4860,11 @@ "name": "skipCount", "isOptional": true }, + { + "type": "CommentApproveState", + "name": "commentApproveState", + "isOptional": true + }, { "type": "CancellationToken", "name": "cancellationToken", @@ -4337,6 +4874,7 @@ }, { "returnType": "Int64", + "namespace": "Volo.CmsKit.Comments", "name": "GetCountAsync", "summary": null, "isAsync": true, @@ -4374,6 +4912,11 @@ "name": "creationEndDate", "isOptional": true }, + { + "type": "CommentApproveState", + "name": "commentApproveState", + "isOptional": true + }, { "type": "CancellationToken", "name": "cancellationToken", @@ -4383,6 +4926,7 @@ }, { "returnType": "List", + "namespace": "Volo.CmsKit.Comments", "name": "GetListWithAuthorsAsync", "summary": null, "isAsync": true, @@ -4400,6 +4944,11 @@ "name": "entityId", "isOptional": false }, + { + "type": "CommentApproveState", + "name": "commentApproveState", + "isOptional": true + }, { "type": "CancellationToken", "name": "cancellationToken", @@ -4409,6 +4958,7 @@ }, { "returnType": "Void", + "namespace": "Volo.CmsKit.Comments", "name": "DeleteWithRepliesAsync", "summary": null, "isAsync": true, @@ -4427,6 +4977,28 @@ "isOptional": true } ] + }, + { + "returnType": "Boolean", + "namespace": "Volo.CmsKit.Comments", + "name": "ExistsAsync", + "summary": null, + "isAsync": true, + "isPublic": true, + "isPrivate": false, + "isStatic": false, + "parameters": [ + { + "type": "String", + "name": "idempotencyToken", + "isOptional": false + }, + { + "type": "CancellationToken", + "name": "cancellationToken", + "isOptional": true + } + ] } ], "contentType": "repositoryInterface", @@ -4478,6 +5050,7 @@ "methods": [ { "returnType": "List", + "namespace": "Volo.CmsKit.Blogs", "name": "GetListAsync", "summary": null, "isAsync": true, @@ -4499,6 +5072,7 @@ }, { "returnType": "List", + "namespace": "Volo.CmsKit.Blogs", "name": "GetListAsync", "summary": null, "isAsync": true, @@ -4525,6 +5099,7 @@ }, { "returnType": "BlogFeature", + "namespace": "Volo.CmsKit.Blogs", "name": "FindAsync", "summary": null, "isAsync": true, @@ -4599,6 +5174,7 @@ "methods": [ { "returnType": "Int32", + "namespace": "Volo.CmsKit.Blogs", "name": "GetCountAsync", "summary": null, "isAsync": true, @@ -4640,6 +5216,7 @@ }, { "returnType": "List", + "namespace": "Volo.CmsKit.Blogs", "name": "GetListAsync", "summary": null, "isAsync": true, @@ -4696,6 +5273,7 @@ }, { "returnType": "Boolean", + "namespace": "Volo.CmsKit.Blogs", "name": "SlugExistsAsync", "summary": null, "isAsync": true, @@ -4722,6 +5300,7 @@ }, { "returnType": "BlogPost", + "namespace": "Volo.CmsKit.Blogs", "name": "GetBySlugAsync", "summary": null, "isAsync": true, @@ -4748,6 +5327,7 @@ }, { "returnType": "List", + "namespace": "Volo.CmsKit.Blogs", "name": "GetAuthorsHasBlogPostsAsync", "summary": null, "isAsync": true, @@ -4784,6 +5364,7 @@ }, { "returnType": "Int32", + "namespace": "Volo.CmsKit.Blogs", "name": "GetAuthorsHasBlogPostsCountAsync", "summary": null, "isAsync": true, @@ -4805,6 +5386,7 @@ }, { "returnType": "CmsUser", + "namespace": "Volo.CmsKit.Blogs", "name": "GetAuthorHasBlogPostAsync", "summary": null, "isAsync": true, @@ -4826,6 +5408,7 @@ }, { "returnType": "Boolean", + "namespace": "Volo.CmsKit.Blogs", "name": "HasBlogPostWaitingForReviewAsync", "summary": null, "isAsync": true, @@ -4890,6 +5473,7 @@ "methods": [ { "returnType": "List", + "namespace": "Volo.CmsKit.Blogs", "name": "GetListAsync", "summary": null, "isAsync": true, @@ -4926,6 +5510,7 @@ }, { "returnType": "Int64", + "namespace": "Volo.CmsKit.Blogs", "name": "GetCountAsync", "summary": null, "isAsync": true, @@ -4947,6 +5532,7 @@ }, { "returnType": "Blog", + "namespace": "Volo.CmsKit.Blogs", "name": "GetBySlugAsync", "summary": null, "isAsync": true, @@ -4968,6 +5554,7 @@ }, { "returnType": "Boolean", + "namespace": "Volo.CmsKit.Blogs", "name": "ExistsAsync", "summary": null, "isAsync": true, @@ -4989,6 +5576,7 @@ }, { "returnType": "Boolean", + "namespace": "Volo.CmsKit.Blogs", "name": "SlugExistsAsync", "summary": null, "isAsync": true, diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo.CmsKit.EntityFrameworkCore.abppkg.analyze.json b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo.CmsKit.EntityFrameworkCore.abppkg.analyze.json index 75a47da9b8..88283b8433 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo.CmsKit.EntityFrameworkCore.abppkg.analyze.json +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo.CmsKit.EntityFrameworkCore.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.CmsKit.EntityFrameworkCore", - "hash": "f77c50f915305bf6c4f61dd28fac3d42", + "hash": "", "contents": [ { "namespace": "Volo.CmsKit.EntityFrameworkCore", @@ -74,6 +74,25 @@ "connectionStringName": "CmsKit", "databaseTables": [], "replacedDbContexts": [], + "modelBuilderExtensionMethods": [ + { + "returnType": "Void", + "namespace": "Volo.CmsKit.EntityFrameworkCore", + "name": "ConfigureCmsKit", + "summary": null, + "isAsync": false, + "isPublic": true, + "isPrivate": false, + "isStatic": true, + "parameters": [ + { + "type": "ModelBuilder", + "name": "builder", + "isOptional": false + } + ] + } + ], "implementingInterfaces": [ { "name": "IInfrastructure", @@ -129,6 +148,12 @@ "declaringAssemblyName": "Volo.Abp.EntityFrameworkCore", "fullName": "Volo.Abp.EntityFrameworkCore.IEfCoreDbContext" }, + { + "name": "IAbpEfCoreDbFunctionContext", + "namespace": "Volo.Abp.EntityFrameworkCore.GlobalFilters", + "declaringAssemblyName": "Volo.Abp.EntityFrameworkCore", + "fullName": "Volo.Abp.EntityFrameworkCore.GlobalFilters.IAbpEfCoreDbFunctionContext" + }, { "name": "ITransientDependency", "namespace": "Volo.Abp.DependencyInjection", diff --git a/modules/cms-kit/src/Volo.CmsKit.HttpApi.Client/Volo.CmsKit.HttpApi.Client.abppkg.analyze.json b/modules/cms-kit/src/Volo.CmsKit.HttpApi.Client/Volo.CmsKit.HttpApi.Client.abppkg.analyze.json index 1629b07433..6d48362846 100644 --- a/modules/cms-kit/src/Volo.CmsKit.HttpApi.Client/Volo.CmsKit.HttpApi.Client.abppkg.analyze.json +++ b/modules/cms-kit/src/Volo.CmsKit.HttpApi.Client/Volo.CmsKit.HttpApi.Client.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.CmsKit.HttpApi.Client", - "hash": "81149b8997a408cc61968718d651707d", + "hash": "", "contents": [ { "namespace": "Volo.CmsKit", diff --git a/modules/cms-kit/src/Volo.CmsKit.HttpApi/Volo.CmsKit.HttpApi.abppkg.analyze.json b/modules/cms-kit/src/Volo.CmsKit.HttpApi/Volo.CmsKit.HttpApi.abppkg.analyze.json index 3cccbcb7bd..a2b88f1280 100644 --- a/modules/cms-kit/src/Volo.CmsKit.HttpApi/Volo.CmsKit.HttpApi.abppkg.analyze.json +++ b/modules/cms-kit/src/Volo.CmsKit.HttpApi/Volo.CmsKit.HttpApi.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.CmsKit.HttpApi", - "hash": "21341ac4929e1d6f0dbc8e183ac3434d", + "hash": "", "contents": [ { "namespace": "Volo.CmsKit", diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo.CmsKit.MongoDB.abppkg.analyze.json b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo.CmsKit.MongoDB.abppkg.analyze.json index e4f8245ace..23de87b372 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo.CmsKit.MongoDB.abppkg.analyze.json +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo.CmsKit.MongoDB.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.CmsKit.MongoDB", - "hash": "0a97f3dd5afa54002ac001896c098325", + "hash": "", "contents": [ { "namespace": "Volo.CmsKit.MongoDB", @@ -74,81 +74,87 @@ "connectionStringName": "CmsKit", "databaseCollections": [ { - "entityFullName": "Volo.CmsKit.Tags.Tag", + "entityFullName": "Volo.CmsKit.Comments.Comment", "contentType": "databaseCollection", - "name": "CmsTags", + "name": "Comments", "summary": null }, { "entityFullName": "Volo.CmsKit.Reactions.UserReaction", "contentType": "databaseCollection", - "name": "CmsUserReactions", + "name": "UserReactions", "summary": null }, { - "entityFullName": "Volo.CmsKit.Pages.Page", + "entityFullName": "Volo.CmsKit.Users.CmsUser", "contentType": "databaseCollection", - "name": "CmsPages", + "name": "CmsUsers", "summary": null }, { - "entityFullName": "Volo.CmsKit.Comments.Comment", + "entityFullName": "Volo.CmsKit.Ratings.Rating", "contentType": "databaseCollection", - "name": "CmsComments", + "name": "Ratings", "summary": null }, { - "entityFullName": "Volo.CmsKit.Ratings.Rating", + "entityFullName": "Volo.CmsKit.Tags.Tag", "contentType": "databaseCollection", - "name": "CmsRatings", + "name": "Tags", "summary": null }, { - "entityFullName": "Volo.CmsKit.Blogs.BlogFeature", + "entityFullName": "Volo.CmsKit.Tags.EntityTag", "contentType": "databaseCollection", - "name": "CmsBlogFeatures", + "name": "EntityTags", "summary": null }, { - "entityFullName": "Volo.CmsKit.Users.CmsUser", + "entityFullName": "Volo.CmsKit.Pages.Page", "contentType": "databaseCollection", - "name": "CmsUsers", + "name": "Pages", "summary": null }, { - "entityFullName": "Volo.CmsKit.Blogs.BlogPost", + "entityFullName": "Volo.CmsKit.Blogs.Blog", "contentType": "databaseCollection", - "name": "CmsBlogPosts", + "name": "Blogs", "summary": null }, { - "entityFullName": "Volo.CmsKit.Menus.MenuItem", + "entityFullName": "Volo.CmsKit.Blogs.BlogPost", "contentType": "databaseCollection", - "name": "CmsMenuItems", + "name": "BlogPosts", "summary": null }, { - "entityFullName": "Volo.CmsKit.Blogs.Blog", + "entityFullName": "Volo.CmsKit.Blogs.BlogFeature", "contentType": "databaseCollection", - "name": "CmsBlogs", + "name": "BlogFeatures", "summary": null }, { - "entityFullName": "Volo.CmsKit.Tags.EntityTag", + "entityFullName": "Volo.CmsKit.MediaDescriptors.MediaDescriptor", "contentType": "databaseCollection", - "name": "CmsEntityTags", + "name": "MediaDescriptors", "summary": null }, { - "entityFullName": "Volo.CmsKit.MediaDescriptors.MediaDescriptor", + "entityFullName": "Volo.CmsKit.Menus.MenuItem", "contentType": "databaseCollection", - "name": "CmsMediaDescriptors", + "name": "MenuItems", "summary": null }, { "entityFullName": "Volo.CmsKit.GlobalResources.GlobalResource", "contentType": "databaseCollection", - "name": "CmsGlobalResources", + "name": "GlobalResources", + "summary": null + }, + { + "entityFullName": "Volo.CmsKit.MarkedItems.UserMarkedItem", + "contentType": "databaseCollection", + "name": "UserMarkedItems", "summary": null } ], diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo.CmsKit.Public.Application.Contracts.abppkg.analyze.json b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo.CmsKit.Public.Application.Contracts.abppkg.analyze.json index 1dc00dc661..68bc9f6b6d 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo.CmsKit.Public.Application.Contracts.abppkg.analyze.json +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo.CmsKit.Public.Application.Contracts.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.CmsKit.Public.Application.Contracts", - "hash": "399ba7790fef13507bce65ed77967e4b", + "hash": "", "contents": [ { "namespace": "Volo.CmsKit.Public", @@ -63,6 +63,20 @@ "contentType": "abpModule", "name": "CmsKitPublicApplicationContractsModule", "summary": null + }, + { + "displayName": "Comment management", + "isEnabled": true, + "contentType": "permission", + "name": "CmsKitPublic.Comments", + "summary": null + }, + { + "displayName": "Delete all", + "isEnabled": true, + "contentType": "permission", + "name": "CmsKitPublic.Comments.DeleteAll", + "summary": null } ] } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo.CmsKit.Public.Application.abppkg.analyze.json b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo.CmsKit.Public.Application.abppkg.analyze.json index 5aa9406110..599b6913f4 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo.CmsKit.Public.Application.abppkg.analyze.json +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo.CmsKit.Public.Application.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.CmsKit.Public.Application", - "hash": "b56557870806fcc0a1b72ff08f55da55", + "hash": "", "contents": [ { "namespace": "Volo.CmsKit.Public", @@ -136,6 +136,7 @@ "methods": [ { "returnType": "ListResultDto", + "namespace": "Volo.CmsKit.Public.Reactions", "name": "GetForSelectionAsync", "summary": null, "isAsync": true, @@ -157,6 +158,7 @@ }, { "returnType": "Void", + "namespace": "Volo.CmsKit.Public.Reactions", "name": "CreateAsync", "summary": null, "isAsync": true, @@ -183,6 +185,7 @@ }, { "returnType": "Void", + "namespace": "Volo.CmsKit.Public.Reactions", "name": "DeleteAsync", "summary": null, "isAsync": true, @@ -279,6 +282,7 @@ "methods": [ { "returnType": "RatingDto", + "namespace": "Volo.CmsKit.Public.Ratings", "name": "CreateAsync", "summary": null, "isAsync": true, @@ -305,6 +309,7 @@ }, { "returnType": "Void", + "namespace": "Volo.CmsKit.Public.Ratings", "name": "DeleteAsync", "summary": null, "isAsync": true, @@ -326,6 +331,7 @@ }, { "returnType": "List", + "namespace": "Volo.CmsKit.Public.Ratings", "name": "GetGroupedStarCountsAsync", "summary": null, "isAsync": true, @@ -417,6 +423,7 @@ "methods": [ { "returnType": "PageDto", + "namespace": "Volo.CmsKit.Public.Pages", "name": "FindBySlugAsync", "summary": null, "isAsync": true, @@ -433,6 +440,7 @@ }, { "returnType": "PageDto", + "namespace": "Volo.CmsKit.Public.Pages", "name": "FindDefaultHomePageAsync", "summary": null, "isAsync": true, @@ -440,6 +448,23 @@ "isPrivate": false, "isStatic": false, "parameters": [] + }, + { + "returnType": "Boolean", + "namespace": "Volo.CmsKit.Public.Pages", + "name": "DoesSlugExistAsync", + "summary": null, + "isAsync": true, + "isPublic": true, + "isPrivate": false, + "isStatic": false, + "parameters": [ + { + "type": "String", + "name": "slug", + "isOptional": false + } + ] } ], "contentType": "applicationService", @@ -513,6 +538,7 @@ "methods": [ { "returnType": "List", + "namespace": "Volo.CmsKit.Public.Menus", "name": "GetListAsync", "summary": null, "isAsync": true, @@ -526,6 +552,120 @@ "name": "MenuItemPublicAppService", "summary": null }, + { + "namespace": "Volo.CmsKit.Public.MarkedItems", + "baseClass": { + "name": "CmsKitPublicAppServiceBase", + "namespace": "Volo.CmsKit.Public", + "declaringAssemblyName": "Volo.CmsKit.Public.Application", + "fullName": "Volo.CmsKit.Public.CmsKitPublicAppServiceBase" + }, + "implementingInterfaces": [ + { + "name": "IApplicationService", + "namespace": "Volo.Abp.Application.Services", + "declaringAssemblyName": "Volo.Abp.Ddd.Application.Contracts", + "fullName": "Volo.Abp.Application.Services.IApplicationService" + }, + { + "name": "IRemoteService", + "namespace": "Volo.Abp", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.IRemoteService" + }, + { + "name": "IAvoidDuplicateCrossCuttingConcerns", + "namespace": "Volo.Abp.Aspects", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Aspects.IAvoidDuplicateCrossCuttingConcerns" + }, + { + "name": "IValidationEnabled", + "namespace": "Volo.Abp.Validation", + "declaringAssemblyName": "Volo.Abp.Validation", + "fullName": "Volo.Abp.Validation.IValidationEnabled" + }, + { + "name": "IUnitOfWorkEnabled", + "namespace": "Volo.Abp.Uow", + "declaringAssemblyName": "Volo.Abp.Uow", + "fullName": "Volo.Abp.Uow.IUnitOfWorkEnabled" + }, + { + "name": "IAuditingEnabled", + "namespace": "Volo.Abp.Auditing", + "declaringAssemblyName": "Volo.Abp.Auditing.Contracts", + "fullName": "Volo.Abp.Auditing.IAuditingEnabled" + }, + { + "name": "IGlobalFeatureCheckingEnabled", + "namespace": "Volo.Abp.GlobalFeatures", + "declaringAssemblyName": "Volo.Abp.GlobalFeatures", + "fullName": "Volo.Abp.GlobalFeatures.IGlobalFeatureCheckingEnabled" + }, + { + "name": "ITransientDependency", + "namespace": "Volo.Abp.DependencyInjection", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.DependencyInjection.ITransientDependency" + }, + { + "name": "IMarkedItemPublicAppService", + "namespace": "Volo.CmsKit.Public.MarkedItems", + "declaringAssemblyName": "Volo.CmsKit.Public.Application.Contracts", + "fullName": "Volo.CmsKit.Public.MarkedItems.IMarkedItemPublicAppService" + } + ], + "methods": [ + { + "returnType": "MarkedItemWithToggleDto", + "namespace": "Volo.CmsKit.Public.MarkedItems", + "name": "GetForUserAsync", + "summary": null, + "isAsync": true, + "isPublic": true, + "isPrivate": false, + "isStatic": false, + "parameters": [ + { + "type": "String", + "name": "entityType", + "isOptional": false + }, + { + "type": "String", + "name": "entityId", + "isOptional": false + } + ] + }, + { + "returnType": "Boolean", + "namespace": "Volo.CmsKit.Public.MarkedItems", + "name": "ToggleAsync", + "summary": null, + "isAsync": true, + "isPublic": true, + "isPrivate": false, + "isStatic": false, + "parameters": [ + { + "type": "String", + "name": "entityType", + "isOptional": false + }, + { + "type": "String", + "name": "entityId", + "isOptional": false + } + ] + } + ], + "contentType": "applicationService", + "name": "MarkedItemPublicAppService", + "summary": null + }, { "namespace": "Volo.CmsKit.Public.GlobalResources", "baseClass": { @@ -593,6 +733,7 @@ "methods": [ { "returnType": "GlobalResourceDto", + "namespace": "Volo.CmsKit.Public.GlobalResources", "name": "GetGlobalScriptAsync", "summary": null, "isAsync": true, @@ -603,6 +744,7 @@ }, { "returnType": "GlobalResourceDto", + "namespace": "Volo.CmsKit.Public.GlobalResources", "name": "GetGlobalStyleAsync", "summary": null, "isAsync": true, @@ -683,6 +825,7 @@ "methods": [ { "returnType": "ListResultDto", + "namespace": "Volo.CmsKit.Public.Comments", "name": "GetListAsync", "summary": null, "isAsync": true, @@ -704,6 +847,7 @@ }, { "returnType": "CommentDto", + "namespace": "Volo.CmsKit.Public.Comments", "name": "CreateAsync", "summary": null, "isAsync": true, @@ -730,6 +874,7 @@ }, { "returnType": "CommentDto", + "namespace": "Volo.CmsKit.Public.Comments", "name": "UpdateAsync", "summary": null, "isAsync": true, @@ -751,6 +896,7 @@ }, { "returnType": "Void", + "namespace": "Volo.CmsKit.Public.Comments", "name": "DeleteAsync", "summary": null, "isAsync": true, @@ -837,6 +983,7 @@ "methods": [ { "returnType": "BlogPostCommonDto", + "namespace": "Volo.CmsKit.Public.Blogs", "name": "GetAsync", "summary": null, "isAsync": true, @@ -858,6 +1005,7 @@ }, { "returnType": "PagedResultDto", + "namespace": "Volo.CmsKit.Public.Blogs", "name": "GetListAsync", "summary": null, "isAsync": true, @@ -879,6 +1027,7 @@ }, { "returnType": "PagedResultDto", + "namespace": "Volo.CmsKit.Public.Blogs", "name": "GetAuthorsHasBlogPostsAsync", "summary": null, "isAsync": true, @@ -895,6 +1044,7 @@ }, { "returnType": "CmsUserDto", + "namespace": "Volo.CmsKit.Public.Blogs", "name": "GetAuthorHasBlogPostAsync", "summary": null, "isAsync": true, @@ -908,6 +1058,40 @@ "isOptional": false } ] + }, + { + "returnType": "Void", + "namespace": "Volo.CmsKit.Public.Blogs", + "name": "DeleteAsync", + "summary": null, + "isAsync": true, + "isPublic": true, + "isPrivate": false, + "isStatic": false, + "parameters": [ + { + "type": "Guid", + "name": "id", + "isOptional": false + } + ] + }, + { + "returnType": "String", + "namespace": "Volo.CmsKit.Public.Blogs", + "name": "GetTagNameAsync", + "summary": null, + "isAsync": true, + "isPublic": true, + "isPrivate": false, + "isStatic": false, + "parameters": [ + { + "type": "Guid", + "name": "tagId", + "isOptional": false + } + ] } ], "contentType": "applicationService", diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Blogs/BlogPostFilteredPagedAndSortedResultRequestDto.cs b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Blogs/BlogPostFilteredPagedAndSortedResultRequestDto.cs deleted file mode 100644 index 60ad724f4f..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Blogs/BlogPostFilteredPagedAndSortedResultRequestDto.cs +++ /dev/null @@ -1,15 +0,0 @@ -// This file is automatically generated by ABP framework to use MVC Controllers from CSharp -using System; -using System.Collections.Generic; -using Volo.Abp; -using Volo.Abp.Application.Dtos; -using Volo.Abp.ObjectExtending; -using Volo.CmsKit.Public.Blogs; - -// ReSharper disable once CheckNamespace -namespace Volo.CmsKit.Public.Blogs; - -public class BlogPostFilteredPagedAndSortedResultRequestDto : PagedAndSortedResultRequestDto -{ - public string Filter { get; set; } -} diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Blogs/BlogPostGetListInput.cs b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Blogs/BlogPostGetListInput.cs deleted file mode 100644 index d0061a0584..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Blogs/BlogPostGetListInput.cs +++ /dev/null @@ -1,17 +0,0 @@ -// This file is automatically generated by ABP framework to use MVC Controllers from CSharp -using System; -using System.Collections.Generic; -using Volo.Abp; -using Volo.Abp.Application.Dtos; -using Volo.Abp.ObjectExtending; -using Volo.CmsKit.Public.Blogs; - -// ReSharper disable once CheckNamespace -namespace Volo.CmsKit.Public.Blogs; - -public class BlogPostGetListInput : PagedAndSortedResultRequestDto -{ - public Guid? AuthorId { get; set; } - - public Guid? TagId { get; set; } -} diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Blogs/IBlogPostPublicAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Blogs/IBlogPostPublicAppService.cs deleted file mode 100644 index 5723b82f46..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Blogs/IBlogPostPublicAppService.cs +++ /dev/null @@ -1,28 +0,0 @@ -// This file is automatically generated by ABP framework to use MVC Controllers from CSharp -using System; -using System.Collections.Generic; -using System.Threading.Tasks; -using Volo.Abp; -using Volo.Abp.Application.Dtos; -using Volo.Abp.Application.Services; -using Volo.CmsKit.Contents; -using Volo.CmsKit.Public.Blogs; -using Volo.CmsKit.Users; - -// ReSharper disable once CheckNamespace -namespace Volo.CmsKit.Public.Blogs; - -public interface IBlogPostPublicAppService : IApplicationService -{ - Task> GetListAsync(string blogSlug, BlogPostGetListInput input); - - Task GetAsync(string blogSlug, string blogPostSlug); - - Task> GetAuthorsHasBlogPostsAsync(BlogPostFilteredPagedAndSortedResultRequestDto input); - - Task GetAuthorHasBlogPostAsync(Guid id); - - Task DeleteAsync(Guid id); - - Task GetTagNameAsync(Guid tagId); -} diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Comments/CmsUserDto.cs b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Comments/CmsUserDto.cs deleted file mode 100644 index fa38f0a2ba..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Comments/CmsUserDto.cs +++ /dev/null @@ -1,21 +0,0 @@ -// This file is automatically generated by ABP framework to use MVC Controllers from CSharp -using System; -using System.Collections.Generic; -using Volo.Abp; -using Volo.Abp.Application.Dtos; -using Volo.Abp.ObjectExtending; -using Volo.CmsKit.Public.Comments; - -// ReSharper disable once CheckNamespace -namespace Volo.CmsKit.Public.Comments; - -public class CmsUserDto : ExtensibleObject -{ - public Guid Id { get; set; } - - public string UserName { get; set; } - - public string Name { get; set; } - - public string Surname { get; set; } -} diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Comments/CommentDto.cs b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Comments/CommentDto.cs deleted file mode 100644 index 7cd73197e7..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Comments/CommentDto.cs +++ /dev/null @@ -1,33 +0,0 @@ -// This file is automatically generated by ABP framework to use MVC Controllers from CSharp -using System; -using System.Collections.Generic; -using Volo.Abp; -using Volo.Abp.Application.Dtos; -using Volo.Abp.ObjectExtending; -using Volo.CmsKit.Public.Comments; - -// ReSharper disable once CheckNamespace -namespace Volo.CmsKit.Public.Comments; - -public class CommentDto : ExtensibleObject -{ - public Guid Id { get; set; } - - public string EntityType { get; set; } - - public string EntityId { get; set; } - - public string Text { get; set; } - - public Guid? RepliedCommentId { get; set; } - - public Guid CreatorId { get; set; } - - public DateTime CreationTime { get; set; } - - public CmsUserDto Author { get; set; } - - public string ConcurrencyStamp { get; set; } - - public string Url { get; set; } -} diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Comments/CommentWithDetailsDto.cs b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Comments/CommentWithDetailsDto.cs deleted file mode 100644 index 4a7d05ca49..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Comments/CommentWithDetailsDto.cs +++ /dev/null @@ -1,31 +0,0 @@ -// This file is automatically generated by ABP framework to use MVC Controllers from CSharp -using System; -using System.Collections.Generic; -using Volo.Abp; -using Volo.Abp.Application.Dtos; -using Volo.Abp.ObjectExtending; -using Volo.CmsKit.Public.Comments; - -// ReSharper disable once CheckNamespace -namespace Volo.CmsKit.Public.Comments; - -public class CommentWithDetailsDto : ExtensibleObject -{ - public Guid Id { get; set; } - - public string EntityType { get; set; } - - public string EntityId { get; set; } - - public string Text { get; set; } - - public Guid CreatorId { get; set; } - - public DateTime CreationTime { get; set; } - - public CommentDto[] Replies { get; set; } - - public CmsUserDto Author { get; set; } - - public string ConcurrencyStamp { get; set; } -} diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Comments/CreateCommentInput.cs b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Comments/CreateCommentInput.cs deleted file mode 100644 index 7571a2f8fd..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Comments/CreateCommentInput.cs +++ /dev/null @@ -1,25 +0,0 @@ -// This file is automatically generated by ABP framework to use MVC Controllers from CSharp -using System; -using System.Collections.Generic; -using Volo.Abp; -using Volo.Abp.Application.Dtos; -using Volo.Abp.ObjectExtending; -using Volo.CmsKit.Public.Comments; - -// ReSharper disable once CheckNamespace -namespace Volo.CmsKit.Public.Comments; - -public class CreateCommentInput : ExtensibleObject -{ - public string Text { get; set; } - - public Guid? RepliedCommentId { get; set; } - - public Guid? CaptchaToken { get; set; } - - public int CaptchaAnswer { get; set; } - - public string Url { get; set; } - - public string IdempotencyToken { get; set; } -} diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Comments/ICommentPublicAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Comments/ICommentPublicAppService.cs deleted file mode 100644 index beda330087..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Comments/ICommentPublicAppService.cs +++ /dev/null @@ -1,22 +0,0 @@ -// This file is automatically generated by ABP framework to use MVC Controllers from CSharp -using System; -using System.Collections.Generic; -using System.Threading.Tasks; -using Volo.Abp; -using Volo.Abp.Application.Dtos; -using Volo.Abp.Application.Services; -using Volo.CmsKit.Public.Comments; - -// ReSharper disable once CheckNamespace -namespace Volo.CmsKit.Public.Comments; - -public interface ICommentPublicAppService : IApplicationService -{ - Task> GetListAsync(string entityType, string entityId); - - Task CreateAsync(string entityType, string entityId, CreateCommentInput input); - - Task UpdateAsync(Guid id, UpdateCommentInput input); - - Task DeleteAsync(Guid id); -} diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Comments/UpdateCommentInput.cs b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Comments/UpdateCommentInput.cs deleted file mode 100644 index f5c5d75bdf..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Comments/UpdateCommentInput.cs +++ /dev/null @@ -1,21 +0,0 @@ -// This file is automatically generated by ABP framework to use MVC Controllers from CSharp -using System; -using System.Collections.Generic; -using Volo.Abp; -using Volo.Abp.Application.Dtos; -using Volo.Abp.ObjectExtending; -using Volo.CmsKit.Public.Comments; - -// ReSharper disable once CheckNamespace -namespace Volo.CmsKit.Public.Comments; - -public class UpdateCommentInput : ExtensibleObject -{ - public string Text { get; set; } - - public string ConcurrencyStamp { get; set; } - - public Guid? CaptchaToken { get; set; } - - public int CaptchaAnswer { get; set; } -} diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/GlobalResources/GlobalResourceDto.cs b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/GlobalResources/GlobalResourceDto.cs deleted file mode 100644 index dfc5bd86ca..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/GlobalResources/GlobalResourceDto.cs +++ /dev/null @@ -1,17 +0,0 @@ -// This file is automatically generated by ABP framework to use MVC Controllers from CSharp -using System; -using System.Collections.Generic; -using Volo.Abp; -using Volo.Abp.Application.Dtos; -using Volo.Abp.ObjectExtending; -using Volo.CmsKit.Public.GlobalResources; - -// ReSharper disable once CheckNamespace -namespace Volo.CmsKit.Public.GlobalResources; - -public class GlobalResourceDto : ExtensibleAuditedEntityDto -{ - public string Name { get; set; } - - public string Value { get; set; } -} diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/GlobalResources/IGlobalResourcePublicAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/GlobalResources/IGlobalResourcePublicAppService.cs deleted file mode 100644 index abd0e7aa1f..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/GlobalResources/IGlobalResourcePublicAppService.cs +++ /dev/null @@ -1,18 +0,0 @@ -// This file is automatically generated by ABP framework to use MVC Controllers from CSharp -using System; -using System.Collections.Generic; -using System.Threading.Tasks; -using Volo.Abp; -using Volo.Abp.Application.Dtos; -using Volo.Abp.Application.Services; -using Volo.CmsKit.Public.GlobalResources; - -// ReSharper disable once CheckNamespace -namespace Volo.CmsKit.Public.GlobalResources; - -public interface IGlobalResourcePublicAppService : IApplicationService -{ - Task GetGlobalScriptAsync(); - - Task GetGlobalStyleAsync(); -} diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/MarkedItems/IMarkedItemPublicAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/MarkedItems/IMarkedItemPublicAppService.cs deleted file mode 100644 index 5387fae58b..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/MarkedItems/IMarkedItemPublicAppService.cs +++ /dev/null @@ -1,18 +0,0 @@ -// This file is automatically generated by ABP framework to use MVC Controllers from CSharp -using System; -using System.Collections.Generic; -using System.Threading.Tasks; -using Volo.Abp; -using Volo.Abp.Application.Dtos; -using Volo.Abp.Application.Services; -using Volo.CmsKit.Public.MarkedItems; - -// ReSharper disable once CheckNamespace -namespace Volo.CmsKit.Public.MarkedItems; - -public interface IMarkedItemPublicAppService : IApplicationService -{ - Task GetForUserAsync(string entityType, string entityId); - - Task ToggleAsync(string entityType, string entityId); -} diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/MarkedItems/MarkedItemDto.cs b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/MarkedItems/MarkedItemDto.cs deleted file mode 100644 index 6ee899ac78..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/MarkedItems/MarkedItemDto.cs +++ /dev/null @@ -1,15 +0,0 @@ -// This file is automatically generated by ABP framework to use MVC Controllers from CSharp -using System; -using System.Collections.Generic; -using Volo.Abp; -using Volo.Abp.Application.Dtos; -using Volo.Abp.ObjectExtending; -using Volo.CmsKit.Public.MarkedItems; - -// ReSharper disable once CheckNamespace -namespace Volo.CmsKit.Public.MarkedItems; - -public class MarkedItemDto -{ - public string IconName { get; set; } -} diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/MarkedItems/MarkedItemWithToggleDto.cs b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/MarkedItems/MarkedItemWithToggleDto.cs deleted file mode 100644 index 100bcc800f..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/MarkedItems/MarkedItemWithToggleDto.cs +++ /dev/null @@ -1,17 +0,0 @@ -// This file is automatically generated by ABP framework to use MVC Controllers from CSharp -using System; -using System.Collections.Generic; -using Volo.Abp; -using Volo.Abp.Application.Dtos; -using Volo.Abp.ObjectExtending; -using Volo.CmsKit.Public.MarkedItems; - -// ReSharper disable once CheckNamespace -namespace Volo.CmsKit.Public.MarkedItems; - -public class MarkedItemWithToggleDto -{ - public MarkedItemDto MarkedItem { get; set; } - - public bool IsMarkedByCurrentUser { get; set; } -} diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Menus/IMenuItemPublicAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Menus/IMenuItemPublicAppService.cs deleted file mode 100644 index e2da8ac351..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Menus/IMenuItemPublicAppService.cs +++ /dev/null @@ -1,17 +0,0 @@ -// This file is automatically generated by ABP framework to use MVC Controllers from CSharp -using System; -using System.Collections.Generic; -using System.Threading.Tasks; -using Volo.Abp; -using Volo.Abp.Application.Dtos; -using Volo.Abp.Application.Services; -using Volo.CmsKit.Menus; -using Volo.CmsKit.Public.Menus; - -// ReSharper disable once CheckNamespace -namespace Volo.CmsKit.Public.Menus; - -public interface IMenuItemPublicAppService : IApplicationService -{ - Task> GetListAsync(); -} diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Pages/IPagePublicAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Pages/IPagePublicAppService.cs deleted file mode 100644 index 4b8595d376..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Pages/IPagePublicAppService.cs +++ /dev/null @@ -1,21 +0,0 @@ -// This file is automatically generated by ABP framework to use MVC Controllers from CSharp -using System; -using System.Collections.Generic; -using System.Threading.Tasks; -using Volo.Abp; -using Volo.Abp.Application.Dtos; -using Volo.Abp.Application.Services; -using Volo.CmsKit.Contents; -using Volo.CmsKit.Public.Pages; - -// ReSharper disable once CheckNamespace -namespace Volo.CmsKit.Public.Pages; - -public interface IPagePublicAppService : IApplicationService -{ - Task FindBySlugAsync(string slug); - - Task DoesSlugExistAsync(string slug); - - Task FindDefaultHomePageAsync(); -} diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Ratings/CreateUpdateRatingInput.cs b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Ratings/CreateUpdateRatingInput.cs deleted file mode 100644 index 99945667be..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Ratings/CreateUpdateRatingInput.cs +++ /dev/null @@ -1,15 +0,0 @@ -// This file is automatically generated by ABP framework to use MVC Controllers from CSharp -using System; -using System.Collections.Generic; -using Volo.Abp; -using Volo.Abp.Application.Dtos; -using Volo.Abp.ObjectExtending; -using Volo.CmsKit.Public.Ratings; - -// ReSharper disable once CheckNamespace -namespace Volo.CmsKit.Public.Ratings; - -public class CreateUpdateRatingInput -{ - public Int16 StarCount { get; set; } -} diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Ratings/IRatingPublicAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Ratings/IRatingPublicAppService.cs deleted file mode 100644 index 842a920d76..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Ratings/IRatingPublicAppService.cs +++ /dev/null @@ -1,20 +0,0 @@ -// This file is automatically generated by ABP framework to use MVC Controllers from CSharp -using System; -using System.Collections.Generic; -using System.Threading.Tasks; -using Volo.Abp; -using Volo.Abp.Application.Dtos; -using Volo.Abp.Application.Services; -using Volo.CmsKit.Public.Ratings; - -// ReSharper disable once CheckNamespace -namespace Volo.CmsKit.Public.Ratings; - -public interface IRatingPublicAppService : IApplicationService -{ - Task CreateAsync(string entityType, string entityId, CreateUpdateRatingInput input); - - Task DeleteAsync(string entityType, string entityId); - - Task> GetGroupedStarCountsAsync(string entityType, string entityId); -} diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Ratings/RatingDto.cs b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Ratings/RatingDto.cs deleted file mode 100644 index 70d74d7691..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Ratings/RatingDto.cs +++ /dev/null @@ -1,25 +0,0 @@ -// This file is automatically generated by ABP framework to use MVC Controllers from CSharp -using System; -using System.Collections.Generic; -using Volo.Abp; -using Volo.Abp.Application.Dtos; -using Volo.Abp.ObjectExtending; -using Volo.CmsKit.Public.Ratings; - -// ReSharper disable once CheckNamespace -namespace Volo.CmsKit.Public.Ratings; - -public class RatingDto -{ - public Guid Id { get; set; } - - public string EntityType { get; set; } - - public string EntityId { get; set; } - - public Int16 StarCount { get; set; } - - public Guid CreatorId { get; set; } - - public DateTime CreationTime { get; set; } -} diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Ratings/RatingWithStarCountDto.cs b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Ratings/RatingWithStarCountDto.cs deleted file mode 100644 index 9608d14283..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Ratings/RatingWithStarCountDto.cs +++ /dev/null @@ -1,19 +0,0 @@ -// This file is automatically generated by ABP framework to use MVC Controllers from CSharp -using System; -using System.Collections.Generic; -using Volo.Abp; -using Volo.Abp.Application.Dtos; -using Volo.Abp.ObjectExtending; -using Volo.CmsKit.Public.Ratings; - -// ReSharper disable once CheckNamespace -namespace Volo.CmsKit.Public.Ratings; - -public class RatingWithStarCountDto -{ - public Int16 StarCount { get; set; } - - public int Count { get; set; } - - public bool IsSelectedByCurrentUser { get; set; } -} diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Reactions/IReactionPublicAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Reactions/IReactionPublicAppService.cs deleted file mode 100644 index 47ba42f981..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Reactions/IReactionPublicAppService.cs +++ /dev/null @@ -1,20 +0,0 @@ -// This file is automatically generated by ABP framework to use MVC Controllers from CSharp -using System; -using System.Collections.Generic; -using System.Threading.Tasks; -using Volo.Abp; -using Volo.Abp.Application.Dtos; -using Volo.Abp.Application.Services; -using Volo.CmsKit.Public.Reactions; - -// ReSharper disable once CheckNamespace -namespace Volo.CmsKit.Public.Reactions; - -public interface IReactionPublicAppService : IApplicationService -{ - Task> GetForSelectionAsync(string entityType, string entityId); - - Task CreateAsync(string entityType, string entityId, string reaction); - - Task DeleteAsync(string entityType, string entityId, string reaction); -} diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Reactions/ReactionDto.cs b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Reactions/ReactionDto.cs deleted file mode 100644 index ea353415e3..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Reactions/ReactionDto.cs +++ /dev/null @@ -1,17 +0,0 @@ -// This file is automatically generated by ABP framework to use MVC Controllers from CSharp -using System; -using System.Collections.Generic; -using Volo.Abp; -using Volo.Abp.Application.Dtos; -using Volo.Abp.ObjectExtending; -using Volo.CmsKit.Public.Reactions; - -// ReSharper disable once CheckNamespace -namespace Volo.CmsKit.Public.Reactions; - -public class ReactionDto -{ - public string Name { get; set; } - - public string DisplayName { get; set; } -} diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Reactions/ReactionWithSelectionDto.cs b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Reactions/ReactionWithSelectionDto.cs deleted file mode 100644 index 4f2b674023..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Reactions/ReactionWithSelectionDto.cs +++ /dev/null @@ -1,19 +0,0 @@ -// This file is automatically generated by ABP framework to use MVC Controllers from CSharp -using System; -using System.Collections.Generic; -using Volo.Abp; -using Volo.Abp.Application.Dtos; -using Volo.Abp.ObjectExtending; -using Volo.CmsKit.Public.Reactions; - -// ReSharper disable once CheckNamespace -namespace Volo.CmsKit.Public.Reactions; - -public class ReactionWithSelectionDto -{ - public ReactionDto Reaction { get; set; } - - public int Count { get; set; } - - public bool IsSelectedByCurrentUser { get; set; } -} diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Tags/ITagAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Tags/ITagAppService.cs deleted file mode 100644 index 6095d73ae1..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/Volo/CmsKit/Public/Tags/ITagAppService.cs +++ /dev/null @@ -1,18 +0,0 @@ -// This file is automatically generated by ABP framework to use MVC Controllers from CSharp -using System; -using System.Collections.Generic; -using System.Threading.Tasks; -using Volo.Abp; -using Volo.Abp.Application.Dtos; -using Volo.Abp.Application.Services; -using Volo.CmsKit.Tags; - -// ReSharper disable once CheckNamespace -namespace Volo.CmsKit.Public.Tags; - -public interface ITagAppService : IApplicationService -{ - Task> GetAllRelatedTagsAsync(string entityType, string entityId); - - Task> GetPopularTagsAsync(string entityType, int maxCount); -} diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/cms-kit-generate-proxy.json b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/cms-kit-generate-proxy.json index b51fb76677..3bee77cf96 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/cms-kit-generate-proxy.json +++ b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/cms-kit-generate-proxy.json @@ -2079,8659 +2079,5 @@ } } }, - "types": { - "Microsoft.AspNetCore.Mvc.IActionResult": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [] - }, - "System.Nullable": { - "baseType": "System.ValueType", - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": [ - "T" - ], - "properties": [ - { - "name": "HasValue", - "jsonName": null, - "type": "System.Boolean", - "typeSimple": "boolean", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Value", - "jsonName": null, - "type": "T", - "typeSimple": "T", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.Account.ChangePasswordInput": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "CurrentPassword", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": 0, - "maxLength": 128, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "NewPassword", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": true, - "minLength": 0, - "maxLength": 128, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.Account.ProfileDto": { - "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "UserName", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Email", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Name", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Surname", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "PhoneNumber", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "IsExternal", - "jsonName": null, - "type": "System.Boolean", - "typeSimple": "boolean", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "HasPassword", - "jsonName": null, - "type": "System.Boolean", - "typeSimple": "boolean", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "ConcurrencyStamp", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.Account.RegisterDto": { - "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "UserName", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": true, - "minLength": 0, - "maxLength": 256, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "EmailAddress", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": true, - "minLength": 0, - "maxLength": 256, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Password", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": true, - "minLength": 0, - "maxLength": 128, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "AppName", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": true, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.Account.ResetPasswordDto": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "UserId", - "jsonName": null, - "type": "System.Guid", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "ResetToken", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": true, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Password", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": true, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.Account.SendPasswordResetCodeDto": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "Email", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": true, - "minLength": 0, - "maxLength": 256, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "AppName", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": true, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "ReturnUrl", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "ReturnUrlHash", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.Account.UpdateProfileDto": { - "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "UserName", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": 0, - "maxLength": 256, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Email", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": 0, - "maxLength": 256, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Name", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": 0, - "maxLength": 64, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Surname", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": 0, - "maxLength": 64, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "PhoneNumber", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": 0, - "maxLength": 16, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "ConcurrencyStamp", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.Account.VerifyPasswordResetTokenInput": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "UserId", - "jsonName": null, - "type": "System.Guid", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "ResetToken", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": true, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.AbpLoginResult": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "Result", - "jsonName": null, - "type": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.LoginResultType", - "typeSimple": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.LoginResultType", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Description", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.LoginResultType": { - "baseType": "System.Enum", - "isEnum": true, - "enumNames": [ - "Success", - "InvalidUserNameOrPassword", - "NotAllowed", - "LockedOut", - "RequiresTwoFactor" - ], - "enumValues": [ - 1, - 2, - 3, - 4, - 5 - ], - "genericArguments": null, - "properties": null - }, - "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.UserLoginInfo": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "UserNameOrEmailAddress", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": true, - "minLength": 0, - "maxLength": 255, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Password", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": true, - "minLength": 0, - "maxLength": 32, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "RememberMe", - "jsonName": null, - "type": "System.Boolean", - "typeSimple": "boolean", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.Application.Dtos.EntityDto": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [] - }, - "Volo.Abp.Application.Dtos.EntityDto": { - "baseType": "Volo.Abp.Application.Dtos.EntityDto", - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": [ - "TKey" - ], - "properties": [ - { - "name": "Id", - "jsonName": null, - "type": "TKey", - "typeSimple": "TKey", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.Application.Dtos.ExtensibleAuditedEntityDto": { - "baseType": "Volo.Abp.Application.Dtos.ExtensibleCreationAuditedEntityDto", - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "LastModificationTime", - "jsonName": null, - "type": "System.DateTime?", - "typeSimple": "string?", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "LastModifierId", - "jsonName": null, - "type": "System.Guid?", - "typeSimple": "string?", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.Application.Dtos.ExtensibleAuditedEntityDto": { - "baseType": "Volo.Abp.Application.Dtos.ExtensibleCreationAuditedEntityDto", - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": [ - "TPrimaryKey" - ], - "properties": [ - { - "name": "LastModificationTime", - "jsonName": null, - "type": "System.DateTime?", - "typeSimple": "string?", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "LastModifierId", - "jsonName": null, - "type": "System.Guid?", - "typeSimple": "string?", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.Application.Dtos.ExtensibleCreationAuditedEntityDto": { - "baseType": "Volo.Abp.Application.Dtos.ExtensibleEntityDto", - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "CreationTime", - "jsonName": null, - "type": "System.DateTime", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "CreatorId", - "jsonName": null, - "type": "System.Guid?", - "typeSimple": "string?", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.Application.Dtos.ExtensibleCreationAuditedEntityDto": { - "baseType": "Volo.Abp.Application.Dtos.ExtensibleEntityDto", - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": [ - "TPrimaryKey" - ], - "properties": [ - { - "name": "CreationTime", - "jsonName": null, - "type": "System.DateTime", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "CreatorId", - "jsonName": null, - "type": "System.Guid?", - "typeSimple": "string?", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.Application.Dtos.ExtensibleEntityDto": { - "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [] - }, - "Volo.Abp.Application.Dtos.ExtensibleEntityDto": { - "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": [ - "TKey" - ], - "properties": [ - { - "name": "Id", - "jsonName": null, - "type": "TKey", - "typeSimple": "TKey", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.Application.Dtos.ExtensibleFullAuditedEntityDto": { - "baseType": "Volo.Abp.Application.Dtos.ExtensibleAuditedEntityDto", - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": [ - "TPrimaryKey" - ], - "properties": [ - { - "name": "IsDeleted", - "jsonName": null, - "type": "System.Boolean", - "typeSimple": "boolean", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "DeleterId", - "jsonName": null, - "type": "System.Guid?", - "typeSimple": "string?", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "DeletionTime", - "jsonName": null, - "type": "System.DateTime?", - "typeSimple": "string?", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.Application.Dtos.ExtensibleLimitedResultRequestDto": { - "baseType": "Volo.Abp.Application.Dtos.ExtensibleEntityDto", - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "DefaultMaxResultCount", - "jsonName": null, - "type": "System.Int32", - "typeSimple": "number", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "MaxMaxResultCount", - "jsonName": null, - "type": "System.Int32", - "typeSimple": "number", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "MaxResultCount", - "jsonName": null, - "type": "System.Int32", - "typeSimple": "number", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": "1", - "maximum": "2147483647", - "regex": null - } - ] - }, - "Volo.Abp.Application.Dtos.ExtensiblePagedAndSortedResultRequestDto": { - "baseType": "Volo.Abp.Application.Dtos.ExtensiblePagedResultRequestDto", - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "Sorting", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.Application.Dtos.ExtensiblePagedResultRequestDto": { - "baseType": "Volo.Abp.Application.Dtos.ExtensibleLimitedResultRequestDto", - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "SkipCount", - "jsonName": null, - "type": "System.Int32", - "typeSimple": "number", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": "0", - "maximum": "2147483647", - "regex": null - } - ] - }, - "Volo.Abp.Application.Dtos.LimitedResultRequestDto": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "DefaultMaxResultCount", - "jsonName": null, - "type": "System.Int32", - "typeSimple": "number", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "MaxMaxResultCount", - "jsonName": null, - "type": "System.Int32", - "typeSimple": "number", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "MaxResultCount", - "jsonName": null, - "type": "System.Int32", - "typeSimple": "number", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": "1", - "maximum": "2147483647", - "regex": null - } - ] - }, - "Volo.Abp.Application.Dtos.ListResultDto": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": [ - "T" - ], - "properties": [ - { - "name": "Items", - "jsonName": null, - "type": "[T]", - "typeSimple": "[T]", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto": { - "baseType": "Volo.Abp.Application.Dtos.PagedResultRequestDto", - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "Sorting", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.Application.Dtos.PagedResultDto": { - "baseType": "Volo.Abp.Application.Dtos.ListResultDto", - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": [ - "T" - ], - "properties": [ - { - "name": "TotalCount", - "jsonName": null, - "type": "System.Int64", - "typeSimple": "number", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.Application.Dtos.PagedResultRequestDto": { - "baseType": "Volo.Abp.Application.Dtos.LimitedResultRequestDto", - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "SkipCount", - "jsonName": null, - "type": "System.Int32", - "typeSimple": "number", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": "0", - "maximum": "2147483647", - "regex": null - } - ] - }, - "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationAuthConfigurationDto": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "GrantedPolicies", - "jsonName": null, - "type": "{System.String:System.Boolean}", - "typeSimple": "{string:boolean}", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationConfigurationDto": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "Localization", - "jsonName": null, - "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationLocalizationConfigurationDto", - "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationLocalizationConfigurationDto", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Auth", - "jsonName": null, - "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationAuthConfigurationDto", - "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationAuthConfigurationDto", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Setting", - "jsonName": null, - "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationSettingConfigurationDto", - "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationSettingConfigurationDto", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "CurrentUser", - "jsonName": null, - "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.CurrentUserDto", - "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.CurrentUserDto", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Features", - "jsonName": null, - "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationFeatureConfigurationDto", - "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationFeatureConfigurationDto", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "GlobalFeatures", - "jsonName": null, - "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationGlobalFeatureConfigurationDto", - "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationGlobalFeatureConfigurationDto", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "MultiTenancy", - "jsonName": null, - "type": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.MultiTenancyInfoDto", - "typeSimple": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.MultiTenancyInfoDto", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "CurrentTenant", - "jsonName": null, - "type": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.CurrentTenantDto", - "typeSimple": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.CurrentTenantDto", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Timing", - "jsonName": null, - "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.TimingDto", - "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.TimingDto", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Clock", - "jsonName": null, - "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ClockDto", - "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ClockDto", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "ObjectExtensions", - "jsonName": null, - "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ObjectExtensionsDto", - "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ObjectExtensionsDto", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "ExtraProperties", - "jsonName": null, - "type": "{System.String:System.Object}", - "typeSimple": "{string:object}", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationConfigurationRequestOptions": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "IncludeLocalizationResources", - "jsonName": null, - "type": "System.Boolean", - "typeSimple": "boolean", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationFeatureConfigurationDto": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "Values", - "jsonName": null, - "type": "{System.String:System.String}", - "typeSimple": "{string:string}", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationGlobalFeatureConfigurationDto": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "EnabledFeatures", - "jsonName": null, - "type": "[System.String]", - "typeSimple": "[string]", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationLocalizationConfigurationDto": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "Values", - "jsonName": null, - "type": "{System.String:System.Collections.Generic.Dictionary}", - "typeSimple": "{string:System.Collections.Generic.Dictionary}", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Resources", - "jsonName": null, - "type": "{System.String:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationLocalizationResourceDto}", - "typeSimple": "{string:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationLocalizationResourceDto}", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Languages", - "jsonName": null, - "type": "[Volo.Abp.Localization.LanguageInfo]", - "typeSimple": "[Volo.Abp.Localization.LanguageInfo]", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "CurrentCulture", - "jsonName": null, - "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.CurrentCultureDto", - "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.CurrentCultureDto", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "DefaultResourceName", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "LanguagesMap", - "jsonName": null, - "type": "{System.String:[Volo.Abp.NameValue]}", - "typeSimple": "{string:[Volo.Abp.NameValue]}", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "LanguageFilesMap", - "jsonName": null, - "type": "{System.String:[Volo.Abp.NameValue]}", - "typeSimple": "{string:[Volo.Abp.NameValue]}", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationLocalizationDto": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "Resources", - "jsonName": null, - "type": "{System.String:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationLocalizationResourceDto}", - "typeSimple": "{string:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationLocalizationResourceDto}", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "CurrentCulture", - "jsonName": null, - "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.CurrentCultureDto", - "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.CurrentCultureDto", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationLocalizationRequestDto": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "CultureName", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": true, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "OnlyDynamics", - "jsonName": null, - "type": "System.Boolean", - "typeSimple": "boolean", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationLocalizationResourceDto": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "Texts", - "jsonName": null, - "type": "{System.String:System.String}", - "typeSimple": "{string:string}", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "BaseResources", - "jsonName": null, - "type": "[System.String]", - "typeSimple": "[string]", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationSettingConfigurationDto": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "Values", - "jsonName": null, - "type": "{System.String:System.String}", - "typeSimple": "{string:string}", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ClockDto": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "Kind", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.CurrentCultureDto": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "DisplayName", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "EnglishName", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "ThreeLetterIsoLanguageName", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "TwoLetterIsoLanguageName", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "IsRightToLeft", - "jsonName": null, - "type": "System.Boolean", - "typeSimple": "boolean", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "CultureName", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Name", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "NativeName", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "DateTimeFormat", - "jsonName": null, - "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.DateTimeFormatDto", - "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.DateTimeFormatDto", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.CurrentUserDto": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "IsAuthenticated", - "jsonName": null, - "type": "System.Boolean", - "typeSimple": "boolean", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Id", - "jsonName": null, - "type": "System.Guid?", - "typeSimple": "string?", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "TenantId", - "jsonName": null, - "type": "System.Guid?", - "typeSimple": "string?", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "ImpersonatorUserId", - "jsonName": null, - "type": "System.Guid?", - "typeSimple": "string?", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "ImpersonatorTenantId", - "jsonName": null, - "type": "System.Guid?", - "typeSimple": "string?", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "ImpersonatorUserName", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "ImpersonatorTenantName", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "UserName", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Name", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "SurName", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Email", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "EmailVerified", - "jsonName": null, - "type": "System.Boolean", - "typeSimple": "boolean", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "PhoneNumber", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "PhoneNumberVerified", - "jsonName": null, - "type": "System.Boolean", - "typeSimple": "boolean", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Roles", - "jsonName": null, - "type": "[System.String]", - "typeSimple": "[string]", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "SessionId", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.DateTimeFormatDto": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "CalendarAlgorithmType", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "DateTimeFormatLong", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "ShortDatePattern", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "FullDateTimePattern", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "DateSeparator", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "ShortTimePattern", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "LongTimePattern", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.IanaTimeZone": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "TimeZoneName", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.EntityExtensionDto": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "Properties", - "jsonName": null, - "type": "{System.String:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyDto}", - "typeSimple": "{string:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyDto}", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Configuration", - "jsonName": null, - "type": "{System.String:System.Object}", - "typeSimple": "{string:object}", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionEnumDto": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "Fields", - "jsonName": null, - "type": "[Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionEnumFieldDto]", - "typeSimple": "[Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionEnumFieldDto]", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "LocalizationResource", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionEnumFieldDto": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "Name", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Value", - "jsonName": null, - "type": "System.Object", - "typeSimple": "object", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiCreateDto": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "IsAvailable", - "jsonName": null, - "type": "System.Boolean", - "typeSimple": "boolean", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiDto": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "OnGet", - "jsonName": null, - "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiGetDto", - "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiGetDto", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "OnCreate", - "jsonName": null, - "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiCreateDto", - "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiCreateDto", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "OnUpdate", - "jsonName": null, - "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiUpdateDto", - "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiUpdateDto", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiGetDto": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "IsAvailable", - "jsonName": null, - "type": "System.Boolean", - "typeSimple": "boolean", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiUpdateDto": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "IsAvailable", - "jsonName": null, - "type": "System.Boolean", - "typeSimple": "boolean", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyAttributeDto": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "TypeSimple", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Config", - "jsonName": null, - "type": "{System.String:System.Object}", - "typeSimple": "{string:object}", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyDto": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "Type", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "TypeSimple", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "DisplayName", - "jsonName": null, - "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.LocalizableStringDto", - "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.LocalizableStringDto", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Api", - "jsonName": null, - "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiDto", - "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiDto", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Ui", - "jsonName": null, - "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiDto", - "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiDto", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Attributes", - "jsonName": null, - "type": "[Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyAttributeDto]", - "typeSimple": "[Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyAttributeDto]", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Configuration", - "jsonName": null, - "type": "{System.String:System.Object}", - "typeSimple": "{string:object}", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "DefaultValue", - "jsonName": null, - "type": "System.Object", - "typeSimple": "object", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiDto": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "OnTable", - "jsonName": null, - "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiTableDto", - "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiTableDto", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "OnCreateForm", - "jsonName": null, - "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiFormDto", - "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiFormDto", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "OnEditForm", - "jsonName": null, - "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiFormDto", - "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiFormDto", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Lookup", - "jsonName": null, - "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiLookupDto", - "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiLookupDto", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiFormDto": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "IsVisible", - "jsonName": null, - "type": "System.Boolean", - "typeSimple": "boolean", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiLookupDto": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "Url", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "ResultListPropertyName", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "DisplayPropertyName", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "ValuePropertyName", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "FilterParamName", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiTableDto": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "IsVisible", - "jsonName": null, - "type": "System.Boolean", - "typeSimple": "boolean", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.LocalizableStringDto": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "Name", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Resource", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ModuleExtensionDto": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "Entities", - "jsonName": null, - "type": "{System.String:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.EntityExtensionDto}", - "typeSimple": "{string:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.EntityExtensionDto}", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Configuration", - "jsonName": null, - "type": "{System.String:System.Object}", - "typeSimple": "{string:object}", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ObjectExtensionsDto": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "Modules", - "jsonName": null, - "type": "{System.String:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ModuleExtensionDto}", - "typeSimple": "{string:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ModuleExtensionDto}", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Enums", - "jsonName": null, - "type": "{System.String:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionEnumDto}", - "typeSimple": "{string:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionEnumDto}", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.TimeZone": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "Iana", - "jsonName": null, - "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.IanaTimeZone", - "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.IanaTimeZone", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Windows", - "jsonName": null, - "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.WindowsTimeZone", - "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.WindowsTimeZone", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.TimingDto": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "TimeZone", - "jsonName": null, - "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.TimeZone", - "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.TimeZone", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.WindowsTimeZone": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "TimeZoneId", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.AspNetCore.Mvc.MultiTenancy.CurrentTenantDto": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "Id", - "jsonName": null, - "type": "System.Guid?", - "typeSimple": "string?", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Name", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "IsAvailable", - "jsonName": null, - "type": "System.Boolean", - "typeSimple": "boolean", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.AspNetCore.Mvc.MultiTenancy.FindTenantResultDto": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "Success", - "jsonName": null, - "type": "System.Boolean", - "typeSimple": "boolean", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "TenantId", - "jsonName": null, - "type": "System.Guid?", - "typeSimple": "string?", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Name", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "NormalizedName", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "IsActive", - "jsonName": null, - "type": "System.Boolean", - "typeSimple": "boolean", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.AspNetCore.Mvc.MultiTenancy.MultiTenancyInfoDto": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "IsEnabled", - "jsonName": null, - "type": "System.Boolean", - "typeSimple": "boolean", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.Content.IRemoteStreamContent": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "FileName", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "ContentType", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "ContentLength", - "jsonName": null, - "type": "System.Int64?", - "typeSimple": "number?", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.Content.RemoteStreamContent": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "FileName", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "ContentType", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "ContentLength", - "jsonName": null, - "type": "System.Int64?", - "typeSimple": "number?", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.FeatureManagement.FeatureDto": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "Name", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "DisplayName", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Value", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Provider", - "jsonName": null, - "type": "Volo.Abp.FeatureManagement.FeatureProviderDto", - "typeSimple": "Volo.Abp.FeatureManagement.FeatureProviderDto", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Description", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "ValueType", - "jsonName": null, - "type": "Volo.Abp.Validation.StringValues.IStringValueType", - "typeSimple": "Volo.Abp.Validation.StringValues.IStringValueType", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Depth", - "jsonName": null, - "type": "System.Int32", - "typeSimple": "number", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "ParentName", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.FeatureManagement.FeatureGroupDto": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "Name", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "DisplayName", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Features", - "jsonName": null, - "type": "[Volo.Abp.FeatureManagement.FeatureDto]", - "typeSimple": "[Volo.Abp.FeatureManagement.FeatureDto]", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.FeatureManagement.FeatureProviderDto": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "Name", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Key", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.FeatureManagement.GetFeatureListResultDto": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "Groups", - "jsonName": null, - "type": "[Volo.Abp.FeatureManagement.FeatureGroupDto]", - "typeSimple": "[Volo.Abp.FeatureManagement.FeatureGroupDto]", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.FeatureManagement.UpdateFeatureDto": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "Name", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Value", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.FeatureManagement.UpdateFeaturesDto": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "Features", - "jsonName": null, - "type": "[Volo.Abp.FeatureManagement.UpdateFeatureDto]", - "typeSimple": "[Volo.Abp.FeatureManagement.UpdateFeatureDto]", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.Http.Modeling.ActionApiDescriptionModel": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "UniqueName", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Name", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "HttpMethod", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Url", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "SupportedVersions", - "jsonName": null, - "type": "[System.String]", - "typeSimple": "[string]", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "ParametersOnMethod", - "jsonName": null, - "type": "[Volo.Abp.Http.Modeling.MethodParameterApiDescriptionModel]", - "typeSimple": "[Volo.Abp.Http.Modeling.MethodParameterApiDescriptionModel]", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Parameters", - "jsonName": null, - "type": "[Volo.Abp.Http.Modeling.ParameterApiDescriptionModel]", - "typeSimple": "[Volo.Abp.Http.Modeling.ParameterApiDescriptionModel]", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "ReturnValue", - "jsonName": null, - "type": "Volo.Abp.Http.Modeling.ReturnValueApiDescriptionModel", - "typeSimple": "Volo.Abp.Http.Modeling.ReturnValueApiDescriptionModel", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "AllowAnonymous", - "jsonName": null, - "type": "System.Boolean?", - "typeSimple": "boolean?", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "ImplementFrom", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModel": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "Modules", - "jsonName": null, - "type": "{System.String:Volo.Abp.Http.Modeling.ModuleApiDescriptionModel}", - "typeSimple": "{string:Volo.Abp.Http.Modeling.ModuleApiDescriptionModel}", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Types", - "jsonName": null, - "type": "{System.String:Volo.Abp.Http.Modeling.TypeApiDescriptionModel}", - "typeSimple": "{string:Volo.Abp.Http.Modeling.TypeApiDescriptionModel}", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModelRequestDto": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "IncludeTypes", - "jsonName": null, - "type": "System.Boolean", - "typeSimple": "boolean", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.Http.Modeling.ControllerApiDescriptionModel": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "ControllerName", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "ControllerGroupName", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "IsRemoteService", - "jsonName": null, - "type": "System.Boolean", - "typeSimple": "boolean", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "IsIntegrationService", - "jsonName": null, - "type": "System.Boolean", - "typeSimple": "boolean", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "ApiVersion", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Type", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Interfaces", - "jsonName": null, - "type": "[Volo.Abp.Http.Modeling.ControllerInterfaceApiDescriptionModel]", - "typeSimple": "[Volo.Abp.Http.Modeling.ControllerInterfaceApiDescriptionModel]", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Actions", - "jsonName": null, - "type": "{System.String:Volo.Abp.Http.Modeling.ActionApiDescriptionModel}", - "typeSimple": "{string:Volo.Abp.Http.Modeling.ActionApiDescriptionModel}", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.Http.Modeling.ControllerInterfaceApiDescriptionModel": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "Type", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Name", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Methods", - "jsonName": null, - "type": "[Volo.Abp.Http.Modeling.InterfaceMethodApiDescriptionModel]", - "typeSimple": "[Volo.Abp.Http.Modeling.InterfaceMethodApiDescriptionModel]", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.Http.Modeling.InterfaceMethodApiDescriptionModel": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "Name", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "ParametersOnMethod", - "jsonName": null, - "type": "[Volo.Abp.Http.Modeling.MethodParameterApiDescriptionModel]", - "typeSimple": "[Volo.Abp.Http.Modeling.MethodParameterApiDescriptionModel]", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "ReturnValue", - "jsonName": null, - "type": "Volo.Abp.Http.Modeling.ReturnValueApiDescriptionModel", - "typeSimple": "Volo.Abp.Http.Modeling.ReturnValueApiDescriptionModel", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.Http.Modeling.MethodParameterApiDescriptionModel": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "Name", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "TypeAsString", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Type", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "TypeSimple", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "IsOptional", - "jsonName": null, - "type": "System.Boolean", - "typeSimple": "boolean", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "DefaultValue", - "jsonName": null, - "type": "System.Object", - "typeSimple": "object", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.Http.Modeling.ModuleApiDescriptionModel": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "RootPath", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "RemoteServiceName", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Controllers", - "jsonName": null, - "type": "{System.String:Volo.Abp.Http.Modeling.ControllerApiDescriptionModel}", - "typeSimple": "{string:Volo.Abp.Http.Modeling.ControllerApiDescriptionModel}", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.Http.Modeling.ParameterApiDescriptionModel": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "NameOnMethod", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Name", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "JsonName", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Type", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "TypeSimple", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "IsOptional", - "jsonName": null, - "type": "System.Boolean", - "typeSimple": "boolean", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "DefaultValue", - "jsonName": null, - "type": "System.Object", - "typeSimple": "object", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "ConstraintTypes", - "jsonName": null, - "type": "[System.String]", - "typeSimple": "[string]", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "BindingSourceId", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "DescriptorName", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.Http.Modeling.PropertyApiDescriptionModel": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "Name", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "JsonName", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Type", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "TypeSimple", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "IsRequired", - "jsonName": null, - "type": "System.Boolean", - "typeSimple": "boolean", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "MinLength", - "jsonName": null, - "type": "System.Int32?", - "typeSimple": "number?", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "MaxLength", - "jsonName": null, - "type": "System.Int32?", - "typeSimple": "number?", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Minimum", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Maximum", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Regex", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.Http.Modeling.ReturnValueApiDescriptionModel": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "Type", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "TypeSimple", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.Http.Modeling.TypeApiDescriptionModel": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "BaseType", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "IsEnum", - "jsonName": null, - "type": "System.Boolean", - "typeSimple": "boolean", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "EnumNames", - "jsonName": null, - "type": "[System.String]", - "typeSimple": "[string]", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "EnumValues", - "jsonName": null, - "type": "[System.Object]", - "typeSimple": "[object]", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "GenericArguments", - "jsonName": null, - "type": "[System.String]", - "typeSimple": "[string]", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Properties", - "jsonName": null, - "type": "[Volo.Abp.Http.Modeling.PropertyApiDescriptionModel]", - "typeSimple": "[Volo.Abp.Http.Modeling.PropertyApiDescriptionModel]", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.Identity.GetIdentityRolesInput": { - "baseType": "Volo.Abp.Application.Dtos.ExtensiblePagedAndSortedResultRequestDto", - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "Filter", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.Identity.GetIdentityUsersInput": { - "baseType": "Volo.Abp.Application.Dtos.ExtensiblePagedAndSortedResultRequestDto", - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "Filter", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.Identity.IdentityRoleCreateDto": { - "baseType": "Volo.Abp.Identity.IdentityRoleCreateOrUpdateDtoBase", - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [] - }, - "Volo.Abp.Identity.IdentityRoleCreateOrUpdateDtoBase": { - "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "Name", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": true, - "minLength": 0, - "maxLength": 256, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "IsDefault", - "jsonName": null, - "type": "System.Boolean", - "typeSimple": "boolean", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "IsPublic", - "jsonName": null, - "type": "System.Boolean", - "typeSimple": "boolean", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.Identity.IdentityRoleDto": { - "baseType": "Volo.Abp.Application.Dtos.ExtensibleEntityDto", - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "Name", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "IsDefault", - "jsonName": null, - "type": "System.Boolean", - "typeSimple": "boolean", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "IsStatic", - "jsonName": null, - "type": "System.Boolean", - "typeSimple": "boolean", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "IsPublic", - "jsonName": null, - "type": "System.Boolean", - "typeSimple": "boolean", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "ConcurrencyStamp", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.Identity.IdentityRoleUpdateDto": { - "baseType": "Volo.Abp.Identity.IdentityRoleCreateOrUpdateDtoBase", - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "ConcurrencyStamp", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.Identity.IdentityUserCreateDto": { - "baseType": "Volo.Abp.Identity.IdentityUserCreateOrUpdateDtoBase", - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "Password", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": true, - "minLength": 0, - "maxLength": 128, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.Identity.IdentityUserCreateOrUpdateDtoBase": { - "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "UserName", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": true, - "minLength": 0, - "maxLength": 256, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Name", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": 0, - "maxLength": 64, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Surname", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": 0, - "maxLength": 64, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Email", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": true, - "minLength": 0, - "maxLength": 256, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "PhoneNumber", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": 0, - "maxLength": 16, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "IsActive", - "jsonName": null, - "type": "System.Boolean", - "typeSimple": "boolean", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "LockoutEnabled", - "jsonName": null, - "type": "System.Boolean", - "typeSimple": "boolean", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "RoleNames", - "jsonName": null, - "type": "[System.String]", - "typeSimple": "[string]", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.Identity.IdentityUserDto": { - "baseType": "Volo.Abp.Application.Dtos.ExtensibleFullAuditedEntityDto", - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "TenantId", - "jsonName": null, - "type": "System.Guid?", - "typeSimple": "string?", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "UserName", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Name", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Surname", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Email", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "EmailConfirmed", - "jsonName": null, - "type": "System.Boolean", - "typeSimple": "boolean", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "PhoneNumber", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "PhoneNumberConfirmed", - "jsonName": null, - "type": "System.Boolean", - "typeSimple": "boolean", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "IsActive", - "jsonName": null, - "type": "System.Boolean", - "typeSimple": "boolean", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "LockoutEnabled", - "jsonName": null, - "type": "System.Boolean", - "typeSimple": "boolean", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "AccessFailedCount", - "jsonName": null, - "type": "System.Int32", - "typeSimple": "number", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "LockoutEnd", - "jsonName": null, - "type": "System.DateTimeOffset?", - "typeSimple": "string?", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "ConcurrencyStamp", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "EntityVersion", - "jsonName": null, - "type": "System.Int32", - "typeSimple": "number", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "LastPasswordChangeTime", - "jsonName": null, - "type": "System.DateTimeOffset?", - "typeSimple": "string?", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.Identity.IdentityUserUpdateDto": { - "baseType": "Volo.Abp.Identity.IdentityUserCreateOrUpdateDtoBase", - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "Password", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": 0, - "maxLength": 128, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "ConcurrencyStamp", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.Identity.IdentityUserUpdateRolesDto": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "RoleNames", - "jsonName": null, - "type": "[System.String]", - "typeSimple": "[string]", - "isRequired": true, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.Identity.UserLookupCountInputDto": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "Filter", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.Identity.UserLookupSearchInputDto": { - "baseType": "Volo.Abp.Application.Dtos.ExtensiblePagedAndSortedResultRequestDto", - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "Filter", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.Localization.LanguageInfo": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "CultureName", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "UiCultureName", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "DisplayName", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "TwoLetterISOLanguageName", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.NameValue": { - "baseType": "Volo.Abp.NameValue", - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [] - }, - "Volo.Abp.NameValue": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": [ - "T" - ], - "properties": [ - { - "name": "Name", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Value", - "jsonName": null, - "type": "T", - "typeSimple": "T", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.ObjectExtending.ExtensibleObject": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "ExtraProperties", - "jsonName": null, - "type": "{System.String:System.Object}", - "typeSimple": "{string:object}", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.PermissionManagement.GetPermissionListResultDto": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "EntityDisplayName", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Groups", - "jsonName": null, - "type": "[Volo.Abp.PermissionManagement.PermissionGroupDto]", - "typeSimple": "[Volo.Abp.PermissionManagement.PermissionGroupDto]", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.PermissionManagement.PermissionGrantInfoDto": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "Name", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "DisplayName", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "ParentName", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "IsGranted", - "jsonName": null, - "type": "System.Boolean", - "typeSimple": "boolean", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "AllowedProviders", - "jsonName": null, - "type": "[System.String]", - "typeSimple": "[string]", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "GrantedProviders", - "jsonName": null, - "type": "[Volo.Abp.PermissionManagement.ProviderInfoDto]", - "typeSimple": "[Volo.Abp.PermissionManagement.ProviderInfoDto]", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.PermissionManagement.PermissionGroupDto": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "Name", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "DisplayName", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "DisplayNameKey", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "DisplayNameResource", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Permissions", - "jsonName": null, - "type": "[Volo.Abp.PermissionManagement.PermissionGrantInfoDto]", - "typeSimple": "[Volo.Abp.PermissionManagement.PermissionGrantInfoDto]", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.PermissionManagement.ProviderInfoDto": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "ProviderName", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "ProviderKey", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.PermissionManagement.UpdatePermissionDto": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "Name", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "IsGranted", - "jsonName": null, - "type": "System.Boolean", - "typeSimple": "boolean", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.PermissionManagement.UpdatePermissionsDto": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "Permissions", - "jsonName": null, - "type": "[Volo.Abp.PermissionManagement.UpdatePermissionDto]", - "typeSimple": "[Volo.Abp.PermissionManagement.UpdatePermissionDto]", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.TenantManagement.GetTenantsInput": { - "baseType": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "Filter", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.TenantManagement.TenantCreateDto": { - "baseType": "Volo.Abp.TenantManagement.TenantCreateOrUpdateDtoBase", - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "AdminEmailAddress", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": true, - "minLength": null, - "maxLength": 256, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "AdminPassword", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": true, - "minLength": null, - "maxLength": 128, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.TenantManagement.TenantCreateOrUpdateDtoBase": { - "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "Name", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": true, - "minLength": 0, - "maxLength": 64, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.TenantManagement.TenantDto": { - "baseType": "Volo.Abp.Application.Dtos.ExtensibleEntityDto", - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "Name", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "ConcurrencyStamp", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.TenantManagement.TenantUpdateDto": { - "baseType": "Volo.Abp.TenantManagement.TenantCreateOrUpdateDtoBase", - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "ConcurrencyStamp", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.Users.UserData": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "Id", - "jsonName": null, - "type": "System.Guid", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "TenantId", - "jsonName": null, - "type": "System.Guid?", - "typeSimple": "string?", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "UserName", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Name", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Surname", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "IsActive", - "jsonName": null, - "type": "System.Boolean", - "typeSimple": "boolean", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Email", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "EmailConfirmed", - "jsonName": null, - "type": "System.Boolean", - "typeSimple": "boolean", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "PhoneNumber", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "PhoneNumberConfirmed", - "jsonName": null, - "type": "System.Boolean", - "typeSimple": "boolean", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "ExtraProperties", - "jsonName": null, - "type": "{System.String:System.Object}", - "typeSimple": "{string:object}", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.Validation.StringValues.IStringValueType": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "Name", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Item", - "jsonName": null, - "type": "System.Object", - "typeSimple": "object", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Properties", - "jsonName": null, - "type": "{System.String:System.Object}", - "typeSimple": "{string:object}", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Validator", - "jsonName": null, - "type": "Volo.Abp.Validation.StringValues.IValueValidator", - "typeSimple": "Volo.Abp.Validation.StringValues.IValueValidator", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.Abp.Validation.StringValues.IValueValidator": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "Name", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Item", - "jsonName": null, - "type": "System.Object", - "typeSimple": "object", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Properties", - "jsonName": null, - "type": "{System.String:System.Object}", - "typeSimple": "{string:object}", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.CmsKit.Admin.Blogs.BlogDto": { - "baseType": "Volo.Abp.Application.Dtos.ExtensibleEntityDto", - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "Name", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Slug", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "ConcurrencyStamp", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.CmsKit.Admin.Blogs.BlogFeatureInputDto": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "FeatureName", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": true, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "IsEnabled", - "jsonName": null, - "type": "System.Boolean", - "typeSimple": "boolean", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.CmsKit.Admin.Blogs.BlogGetListInput": { - "baseType": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "Filter", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.CmsKit.Admin.Blogs.BlogPostDto": { - "baseType": "Volo.Abp.Application.Dtos.ExtensibleEntityDto", - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "BlogId", - "jsonName": null, - "type": "System.Guid", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Title", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Slug", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "ShortDescription", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Content", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "CoverImageMediaId", - "jsonName": null, - "type": "System.Guid?", - "typeSimple": "string?", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "CreationTime", - "jsonName": null, - "type": "System.DateTime", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "LastModificationTime", - "jsonName": null, - "type": "System.DateTime?", - "typeSimple": "string?", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "ConcurrencyStamp", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Status", - "jsonName": null, - "type": "Volo.CmsKit.Blogs.BlogPostStatus", - "typeSimple": "Volo.CmsKit.Blogs.BlogPostStatus", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.CmsKit.Admin.Blogs.BlogPostGetListInput": { - "baseType": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "Filter", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "BlogId", - "jsonName": null, - "type": "System.Guid?", - "typeSimple": "string?", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "AuthorId", - "jsonName": null, - "type": "System.Guid?", - "typeSimple": "string?", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "TagId", - "jsonName": null, - "type": "System.Guid?", - "typeSimple": "string?", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Status", - "jsonName": null, - "type": "Volo.CmsKit.Blogs.BlogPostStatus?", - "typeSimple": "Volo.CmsKit.Blogs.BlogPostStatus?", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.CmsKit.Admin.Blogs.BlogPostListDto": { - "baseType": "Volo.Abp.Application.Dtos.ExtensibleEntityDto", - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "BlogId", - "jsonName": null, - "type": "System.Guid", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "BlogName", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Title", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Slug", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "ShortDescription", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Content", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "CoverImageMediaId", - "jsonName": null, - "type": "System.Guid?", - "typeSimple": "string?", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "CreationTime", - "jsonName": null, - "type": "System.DateTime", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "LastModificationTime", - "jsonName": null, - "type": "System.DateTime?", - "typeSimple": "string?", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Status", - "jsonName": null, - "type": "Volo.CmsKit.Blogs.BlogPostStatus?", - "typeSimple": "Volo.CmsKit.Blogs.BlogPostStatus?", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.CmsKit.Admin.Blogs.CreateBlogDto": { - "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "Name", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": true, - "minLength": null, - "maxLength": 64, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Slug", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": true, - "minLength": null, - "maxLength": 64, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.CmsKit.Admin.Blogs.CreateBlogPostDto": { - "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "BlogId", - "jsonName": null, - "type": "System.Guid", - "typeSimple": "string", - "isRequired": true, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Title", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": true, - "minLength": null, - "maxLength": 64, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Slug", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": true, - "minLength": 2, - "maxLength": 256, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "ShortDescription", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": 256, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Content", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": 2147483647, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "CoverImageMediaId", - "jsonName": null, - "type": "System.Guid?", - "typeSimple": "string?", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.CmsKit.Admin.Blogs.UpdateBlogDto": { - "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "Name", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": true, - "minLength": null, - "maxLength": 64, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Slug", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": true, - "minLength": null, - "maxLength": 64, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "ConcurrencyStamp", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.CmsKit.Admin.Blogs.UpdateBlogPostDto": { - "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "Title", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": true, - "minLength": null, - "maxLength": 64, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Slug", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": true, - "minLength": 2, - "maxLength": 256, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "ShortDescription", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": 256, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Content", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": 2147483647, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "CoverImageMediaId", - "jsonName": null, - "type": "System.Guid?", - "typeSimple": "string?", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "ConcurrencyStamp", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.CmsKit.Admin.Comments.CmsUserDto": { - "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "Id", - "jsonName": null, - "type": "System.Guid", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "UserName", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Name", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Surname", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.CmsKit.Admin.Comments.CommentApprovalDto": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "IsApproved", - "jsonName": null, - "type": "System.Boolean", - "typeSimple": "boolean", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.CmsKit.Admin.Comments.CommentGetListInput": { - "baseType": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "EntityType", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Text", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "RepliedCommentId", - "jsonName": null, - "type": "System.Guid?", - "typeSimple": "string?", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Author", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "CreationStartDate", - "jsonName": null, - "type": "System.DateTime?", - "typeSimple": "string?", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "CreationEndDate", - "jsonName": null, - "type": "System.DateTime?", - "typeSimple": "string?", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "CommentApproveState", - "jsonName": null, - "type": "Volo.CmsKit.Comments.CommentApproveState", - "typeSimple": "Volo.CmsKit.Comments.CommentApproveState", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.CmsKit.Admin.Comments.CommentSettingsDto": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "CommentRequireApprovement", - "jsonName": null, - "type": "System.Boolean", - "typeSimple": "boolean", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.CmsKit.Admin.Comments.CommentWithAuthorDto": { - "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "Id", - "jsonName": null, - "type": "System.Guid", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "EntityType", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "EntityId", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Text", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "RepliedCommentId", - "jsonName": null, - "type": "System.Guid?", - "typeSimple": "string?", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "CreatorId", - "jsonName": null, - "type": "System.Guid", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "CreationTime", - "jsonName": null, - "type": "System.DateTime", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Author", - "jsonName": null, - "type": "Volo.CmsKit.Admin.Comments.CmsUserDto", - "typeSimple": "Volo.CmsKit.Admin.Comments.CmsUserDto", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Url", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "IsApproved", - "jsonName": null, - "type": "System.Boolean?", - "typeSimple": "boolean?", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.CmsKit.Admin.GlobalResources.GlobalResourcesDto": { - "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "StyleContent", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "ScriptContent", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.CmsKit.Admin.GlobalResources.GlobalResourcesUpdateDto": { - "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "Style", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Script", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.CmsKit.Admin.MediaDescriptors.CreateMediaInputWithStream": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "Name", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": true, - "minLength": 0, - "maxLength": 255, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "File", - "jsonName": null, - "type": "Volo.Abp.Content.IRemoteStreamContent", - "typeSimple": "Volo.Abp.Content.IRemoteStreamContent", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.CmsKit.Admin.MediaDescriptors.MediaDescriptorDto": { - "baseType": "Volo.Abp.Application.Dtos.ExtensibleEntityDto", - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "Name", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "MimeType", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Size", - "jsonName": null, - "type": "System.Int32", - "typeSimple": "number", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.CmsKit.Admin.Menus.MenuItemCreateInput": { - "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "ParentId", - "jsonName": null, - "type": "System.Guid?", - "typeSimple": "string?", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "DisplayName", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": true, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "IsActive", - "jsonName": null, - "type": "System.Boolean", - "typeSimple": "boolean", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Url", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Icon", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Order", - "jsonName": null, - "type": "System.Int32", - "typeSimple": "number", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Target", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "ElementId", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "CssClass", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "PageId", - "jsonName": null, - "type": "System.Guid?", - "typeSimple": "string?", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.CmsKit.Admin.Menus.MenuItemMoveInput": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "NewParentId", - "jsonName": null, - "type": "System.Guid?", - "typeSimple": "string?", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Position", - "jsonName": null, - "type": "System.Int32", - "typeSimple": "number", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.CmsKit.Admin.Menus.MenuItemUpdateInput": { - "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "DisplayName", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": true, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "IsActive", - "jsonName": null, - "type": "System.Boolean", - "typeSimple": "boolean", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Url", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Icon", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Target", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "ElementId", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "CssClass", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "PageId", - "jsonName": null, - "type": "System.Guid?", - "typeSimple": "string?", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "ConcurrencyStamp", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.CmsKit.Admin.Menus.MenuItemWithDetailsDto": { - "baseType": "Volo.CmsKit.Menus.MenuItemDto", - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "PageTitle", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.CmsKit.Admin.Menus.PageLookupDto": { - "baseType": "Volo.Abp.Application.Dtos.EntityDto", - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "Title", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Slug", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.CmsKit.Admin.Menus.PageLookupInputDto": { - "baseType": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "Filter", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.CmsKit.Admin.Pages.CreatePageInputDto": { - "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "Title", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": true, - "minLength": null, - "maxLength": 256, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Slug", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": true, - "minLength": null, - "maxLength": 256, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Content", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": 2147483647, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Script", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": 2147483647, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Style", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": 2147483647, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.CmsKit.Admin.Pages.GetPagesInputDto": { - "baseType": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "Filter", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.CmsKit.Admin.Pages.PageDto": { - "baseType": "Volo.Abp.Application.Dtos.ExtensibleAuditedEntityDto", - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "Title", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Slug", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Content", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Script", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Style", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "IsHomePage", - "jsonName": null, - "type": "System.Boolean", - "typeSimple": "boolean", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "ConcurrencyStamp", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.CmsKit.Admin.Pages.UpdatePageInputDto": { - "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "Title", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": true, - "minLength": null, - "maxLength": 256, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Slug", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": true, - "minLength": null, - "maxLength": 256, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Content", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": 2147483647, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Script", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": 2147483647, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Style", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": 2147483647, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "ConcurrencyStamp", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.CmsKit.Admin.Tags.EntityTagCreateDto": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "TagName", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": true, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "EntityType", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": true, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "EntityId", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": true, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.CmsKit.Admin.Tags.EntityTagRemoveDto": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "TagId", - "jsonName": null, - "type": "System.Guid", - "typeSimple": "string", - "isRequired": true, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "EntityType", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": true, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "EntityId", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": true, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.CmsKit.Admin.Tags.EntityTagSetDto": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "EntityId", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "EntityType", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Tags", - "jsonName": null, - "type": "[System.String]", - "typeSimple": "[string]", - "isRequired": true, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.CmsKit.Admin.Tags.TagCreateDto": { - "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "EntityType", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": true, - "minLength": null, - "maxLength": 64, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Name", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": true, - "minLength": null, - "maxLength": 32, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.CmsKit.Admin.Tags.TagDefinitionDto": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "EntityType", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "DisplayName", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.CmsKit.Admin.Tags.TagGetListInput": { - "baseType": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "Filter", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.CmsKit.Admin.Tags.TagUpdateDto": { - "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "Name", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": true, - "minLength": null, - "maxLength": 32, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "ConcurrencyStamp", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.CmsKit.Blogs.BlogFeatureDto": { - "baseType": "Volo.Abp.Application.Dtos.ExtensibleEntityDto", - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "FeatureName", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "IsEnabled", - "jsonName": null, - "type": "System.Boolean", - "typeSimple": "boolean", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.CmsKit.Blogs.BlogPostStatus": { - "baseType": "System.Enum", - "isEnum": true, - "enumNames": [ - "Draft", - "Published", - "WaitingForReview" - ], - "enumValues": [ - 0, - 1, - 2 - ], - "genericArguments": null, - "properties": null - }, - "Volo.CmsKit.Comments.CommentApproveState": { - "baseType": "System.Enum", - "isEnum": true, - "enumNames": [ - "All", - "Approved", - "Disapproved", - "Waiting" - ], - "enumValues": [ - 0, - 1, - 2, - 4 - ], - "genericArguments": null, - "properties": null - }, - "Volo.CmsKit.Contents.BlogPostCommonDto": { - "baseType": "Volo.Abp.Application.Dtos.ExtensibleAuditedEntityDto", - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "BlogId", - "jsonName": null, - "type": "System.Guid", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Title", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Slug", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "ShortDescription", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Content", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "CoverImageMediaId", - "jsonName": null, - "type": "System.Guid?", - "typeSimple": "string?", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Author", - "jsonName": null, - "type": "Volo.CmsKit.Users.CmsUserDto", - "typeSimple": "Volo.CmsKit.Users.CmsUserDto", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.CmsKit.Contents.PageDto": { - "baseType": "Volo.Abp.Application.Dtos.ExtensibleEntityDto", - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "Title", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Slug", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Content", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Script", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Style", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.CmsKit.Menus.MenuItemDto": { - "baseType": "Volo.Abp.Application.Dtos.ExtensibleAuditedEntityDto", - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "ParentId", - "jsonName": null, - "type": "System.Guid?", - "typeSimple": "string?", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "DisplayName", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "IsActive", - "jsonName": null, - "type": "System.Boolean", - "typeSimple": "boolean", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Url", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Icon", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Order", - "jsonName": null, - "type": "System.Int32", - "typeSimple": "number", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Target", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "ElementId", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "CssClass", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "PageId", - "jsonName": null, - "type": "System.Guid?", - "typeSimple": "string?", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "ConcurrencyStamp", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.CmsKit.Public.Blogs.BlogPostFilteredPagedAndSortedResultRequestDto": { - "baseType": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "Filter", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.CmsKit.Public.Blogs.BlogPostGetListInput": { - "baseType": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "AuthorId", - "jsonName": null, - "type": "System.Guid?", - "typeSimple": "string?", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "TagId", - "jsonName": null, - "type": "System.Guid?", - "typeSimple": "string?", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.CmsKit.Public.Comments.CmsUserDto": { - "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "Id", - "jsonName": null, - "type": "System.Guid", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "UserName", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Name", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Surname", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.CmsKit.Public.Comments.CommentDto": { - "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "Id", - "jsonName": null, - "type": "System.Guid", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "EntityType", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "EntityId", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Text", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "RepliedCommentId", - "jsonName": null, - "type": "System.Guid?", - "typeSimple": "string?", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "CreatorId", - "jsonName": null, - "type": "System.Guid", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "CreationTime", - "jsonName": null, - "type": "System.DateTime", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Author", - "jsonName": null, - "type": "Volo.CmsKit.Public.Comments.CmsUserDto", - "typeSimple": "Volo.CmsKit.Public.Comments.CmsUserDto", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "ConcurrencyStamp", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Url", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.CmsKit.Public.Comments.CommentWithDetailsDto": { - "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "Id", - "jsonName": null, - "type": "System.Guid", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "EntityType", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "EntityId", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Text", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "CreatorId", - "jsonName": null, - "type": "System.Guid", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "CreationTime", - "jsonName": null, - "type": "System.DateTime", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Replies", - "jsonName": null, - "type": "[Volo.CmsKit.Public.Comments.CommentDto]", - "typeSimple": "[Volo.CmsKit.Public.Comments.CommentDto]", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Author", - "jsonName": null, - "type": "Volo.CmsKit.Public.Comments.CmsUserDto", - "typeSimple": "Volo.CmsKit.Public.Comments.CmsUserDto", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "ConcurrencyStamp", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.CmsKit.Public.Comments.CreateCommentInput": { - "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "Text", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": true, - "minLength": 0, - "maxLength": 512, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "RepliedCommentId", - "jsonName": null, - "type": "System.Guid?", - "typeSimple": "string?", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "CaptchaToken", - "jsonName": null, - "type": "System.Guid?", - "typeSimple": "string?", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "CaptchaAnswer", - "jsonName": null, - "type": "System.Int32", - "typeSimple": "number", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Url", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "IdempotencyToken", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": true, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.CmsKit.Public.Comments.UpdateCommentInput": { - "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "Text", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": true, - "minLength": 0, - "maxLength": 512, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "ConcurrencyStamp", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "CaptchaToken", - "jsonName": null, - "type": "System.Guid?", - "typeSimple": "string?", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "CaptchaAnswer", - "jsonName": null, - "type": "System.Int32", - "typeSimple": "number", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.CmsKit.Public.GlobalResources.GlobalResourceDto": { - "baseType": "Volo.Abp.Application.Dtos.ExtensibleAuditedEntityDto", - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "Name", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Value", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.CmsKit.Public.MarkedItems.MarkedItemDto": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "IconName", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.CmsKit.Public.MarkedItems.MarkedItemWithToggleDto": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "MarkedItem", - "jsonName": null, - "type": "Volo.CmsKit.Public.MarkedItems.MarkedItemDto", - "typeSimple": "Volo.CmsKit.Public.MarkedItems.MarkedItemDto", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "IsMarkedByCurrentUser", - "jsonName": null, - "type": "System.Boolean", - "typeSimple": "boolean", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.CmsKit.Public.Ratings.CreateUpdateRatingInput": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "StarCount", - "jsonName": null, - "type": "System.Int16", - "typeSimple": "number", - "isRequired": true, - "minLength": null, - "maxLength": null, - "minimum": "1", - "maximum": "5", - "regex": null - } - ] - }, - "Volo.CmsKit.Public.Ratings.RatingDto": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "Id", - "jsonName": null, - "type": "System.Guid", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "EntityType", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "EntityId", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "StarCount", - "jsonName": null, - "type": "System.Int16", - "typeSimple": "number", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "CreatorId", - "jsonName": null, - "type": "System.Guid", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "CreationTime", - "jsonName": null, - "type": "System.DateTime", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.CmsKit.Public.Ratings.RatingWithStarCountDto": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "StarCount", - "jsonName": null, - "type": "System.Int16", - "typeSimple": "number", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Count", - "jsonName": null, - "type": "System.Int32", - "typeSimple": "number", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "IsSelectedByCurrentUser", - "jsonName": null, - "type": "System.Boolean", - "typeSimple": "boolean", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.CmsKit.Public.Reactions.ReactionDto": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "Name", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "DisplayName", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.CmsKit.Public.Reactions.ReactionWithSelectionDto": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "Reaction", - "jsonName": null, - "type": "Volo.CmsKit.Public.Reactions.ReactionDto", - "typeSimple": "Volo.CmsKit.Public.Reactions.ReactionDto", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Count", - "jsonName": null, - "type": "System.Int32", - "typeSimple": "number", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "IsSelectedByCurrentUser", - "jsonName": null, - "type": "System.Boolean", - "typeSimple": "boolean", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.CmsKit.Tags.PopularTagDto": { - "baseType": null, - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "Id", - "jsonName": null, - "type": "System.Guid", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Name", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Count", - "jsonName": null, - "type": "System.Int32", - "typeSimple": "number", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.CmsKit.Tags.TagDto": { - "baseType": "Volo.Abp.Application.Dtos.ExtensibleEntityDto", - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "EntityType", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Name", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "ConcurrencyStamp", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - }, - "Volo.CmsKit.Users.CmsUserDto": { - "baseType": "Volo.Abp.Application.Dtos.ExtensibleEntityDto", - "isEnum": false, - "enumNames": null, - "enumValues": null, - "genericArguments": null, - "properties": [ - { - "name": "TenantId", - "jsonName": null, - "type": "System.Guid?", - "typeSimple": "string?", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "UserName", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Name", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - }, - { - "name": "Surname", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isRequired": false, - "minLength": null, - "maxLength": null, - "minimum": null, - "maximum": null, - "regex": null - } - ] - } - } + "types": {} } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/Volo.CmsKit.Public.HttpApi.Client.abppkg.analyze.json b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/Volo.CmsKit.Public.HttpApi.Client.abppkg.analyze.json index 80205a3959..62a47341e8 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/Volo.CmsKit.Public.HttpApi.Client.abppkg.analyze.json +++ b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/Volo.CmsKit.Public.HttpApi.Client.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.CmsKit.Public.HttpApi.Client", - "hash": "54e4cc77905039df9b16fde35a23e6fa", + "hash": "", "contents": [ { "namespace": "Volo.CmsKit.Public", diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo.CmsKit.Public.HttpApi.abppkg.analyze.json b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo.CmsKit.Public.HttpApi.abppkg.analyze.json index a99c733cc3..ff3f4e1b8e 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo.CmsKit.Public.HttpApi.abppkg.analyze.json +++ b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo.CmsKit.Public.HttpApi.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.CmsKit.Public.HttpApi", - "hash": "e0f90c7c40bbd72d50bcd41f413fbf6a", + "hash": "", "contents": [ { "namespace": "Volo.CmsKit.Public", diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Volo.CmsKit.Public.Web.abppkg.analyze.json b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Volo.CmsKit.Public.Web.abppkg.analyze.json index baff1e5a88..86f1cb14bf 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Volo.CmsKit.Public.Web.abppkg.analyze.json +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Volo.CmsKit.Public.Web.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.CmsKit.Public.Web", - "hash": "a7ba6e8a7c5cd8f816a4fe9e11d41a02", + "hash": "", "contents": [ { "namespace": "Volo.CmsKit.Public.Web", @@ -63,6 +63,30 @@ "contentType": "abpModule", "name": "CmsKitPublicWebModule", "summary": null + }, + { + "namespace": "Volo.CmsKit.Public.Web.Pages.Public.CmsKit.Pages", + "contentType": "webPage", + "name": "IndexModel", + "summary": null + }, + { + "namespace": "Volo.CmsKit.Public.Web.Pages.Public.CmsKit.Blogs", + "contentType": "webPage", + "name": "BlogPostModel", + "summary": null + }, + { + "namespace": "Volo.CmsKit.Public.Web.Pages.Public.CmsKit.Blogs", + "contentType": "webPage", + "name": "IndexModel", + "summary": null + }, + { + "namespace": "Volo.CmsKit.Public.Web.Pages.CmsKit.Shared.Modals.Login", + "contentType": "webPage", + "name": "LoginModalModel", + "summary": null } ] } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Web/Volo.CmsKit.Web.abppkg.analyze.json b/modules/cms-kit/src/Volo.CmsKit.Web/Volo.CmsKit.Web.abppkg.analyze.json index 39cd4fabeb..1c49452d8b 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Web/Volo.CmsKit.Web.abppkg.analyze.json +++ b/modules/cms-kit/src/Volo.CmsKit.Web/Volo.CmsKit.Web.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.CmsKit.Web", - "hash": "5baa473fb5239f09781f6d7baf769b0c", + "hash": "", "contents": [ { "namespace": "Volo.CmsKit.Web", diff --git a/modules/docs/app/VoloDocs.EntityFrameworkCore/VoloDocs.EntityFrameworkCore.abppkg.analyze.json b/modules/docs/app/VoloDocs.EntityFrameworkCore/VoloDocs.EntityFrameworkCore.abppkg.analyze.json index db21a0a643..ed67f9c244 100644 --- a/modules/docs/app/VoloDocs.EntityFrameworkCore/VoloDocs.EntityFrameworkCore.abppkg.analyze.json +++ b/modules/docs/app/VoloDocs.EntityFrameworkCore/VoloDocs.EntityFrameworkCore.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "VoloDocs.EntityFrameworkCore", - "hash": "16b4276f8bb7836474b6a2da1a71df37", + "hash": "", "contents": [ { "namespace": "VoloDocs.EntityFrameworkCore", @@ -84,6 +84,7 @@ "connectionStringName": null, "databaseTables": [], "replacedDbContexts": [], + "modelBuilderExtensionMethods": [], "implementingInterfaces": [ { "name": "IInfrastructure", @@ -139,6 +140,12 @@ "declaringAssemblyName": "Volo.Abp.EntityFrameworkCore", "fullName": "Volo.Abp.EntityFrameworkCore.IEfCoreDbContext" }, + { + "name": "IAbpEfCoreDbFunctionContext", + "namespace": "Volo.Abp.EntityFrameworkCore.GlobalFilters", + "declaringAssemblyName": "Volo.Abp.EntityFrameworkCore", + "fullName": "Volo.Abp.EntityFrameworkCore.GlobalFilters.IAbpEfCoreDbFunctionContext" + }, { "name": "ITransientDependency", "namespace": "Volo.Abp.DependencyInjection", diff --git a/modules/docs/app/VoloDocs.Web/Localization/Resources/VoloDocs/Web/sv.json b/modules/docs/app/VoloDocs.Web/Localization/Resources/VoloDocs/Web/sv.json new file mode 100644 index 0000000000..f4453a0565 --- /dev/null +++ b/modules/docs/app/VoloDocs.Web/Localization/Resources/VoloDocs/Web/sv.json @@ -0,0 +1,10 @@ +{ + "culture": "sv", + "texts": { + "DocsTitle": "VoloDocs", + "WelcomeVoloDocs": "VĂ€lkommen till VoloDocs!", + "NoProjectWarning": "Det finns inget definierat projekt Ă€nnu!", + "CreateYourFirstProject": "Klicka hĂ€r för att starta ditt första projekt", + "NoProject": "Inget projekt!" + } +} \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/package.json b/modules/docs/app/VoloDocs.Web/package.json index 38defe9de4..0eabf0859a 100644 --- a/modules/docs/app/VoloDocs.Web/package.json +++ b/modules/docs/app/VoloDocs.Web/package.json @@ -3,7 +3,7 @@ "name": "volo.docstestapp", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "~8.3.0-rc.1", - "@abp/docs": "~8.3.0-rc.1" + "@abp/aspnetcore.mvc.ui.theme.basic": "~8.3.0", + "@abp/docs": "~8.3.0" } } diff --git a/modules/docs/app/VoloDocs.Web/yarn.lock b/modules/docs/app/VoloDocs.Web/yarn.lock index aeb42af87d..027f4c5064 100644 --- a/modules/docs/app/VoloDocs.Web/yarn.lock +++ b/modules/docs/app/VoloDocs.Web/yarn.lock @@ -2,238 +2,238 @@ # yarn lockfile v1 -"@abp/anchor-js@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/anchor-js/-/anchor-js-8.3.0-rc.1.tgz#466affc69542954bbeaa55fb76b808cb72a6e689" - integrity sha512-5I3knleQv11iTZBmIszxEgTNAZR16etJBnvwTrOEqx/y/lNW3eX3RV2Np5oqWmscQpvLcWVFCsyt7Bj2Qqd7jw== +"@abp/anchor-js@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/anchor-js/-/anchor-js-8.3.0.tgz#8dd848c157440ab41fe46e486afa390fae6838b4" + integrity sha512-fugT/x0pdHbE246W3z3qhunRz/SUkEwYU8ANBu8QM/+JgKwyqIl8M82UD3aHCimKQFqadvMo17XGQJsGcSAS/Q== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" anchor-js "^5.0.0" -"@abp/aspnetcore.mvc.ui.theme.basic@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-8.3.0-rc.1.tgz#7254b66019b99ac8a29385c1bb2c9c658a167bc7" - integrity sha512-uMgO1VQgDOW9tMq9gl6idsBZZcL/voeMp0wkBTRORQHg0E+SyA8z0yQrg5S8hU/7zRwoZPm3K9R/Peu71jNTgQ== - dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~8.3.0-rc.1" - -"@abp/aspnetcore.mvc.ui.theme.shared@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-8.3.0-rc.1.tgz#cec5ca6c5a5f61a361425b9d55711beb0db4eb81" - integrity sha512-qLAzDwiQvRB8xDs6bkeZ4YLMUuTb6Dz/GmWT61dSMUAhRCTPqPi6aWnt9fiM99HbkP7APLPb7d+o5ho6FoktNQ== - dependencies: - "@abp/aspnetcore.mvc.ui" "~8.3.0-rc.1" - "@abp/bootstrap" "~8.3.0-rc.1" - "@abp/bootstrap-datepicker" "~8.3.0-rc.1" - "@abp/bootstrap-daterangepicker" "~8.3.0-rc.1" - "@abp/datatables.net-bs5" "~8.3.0-rc.1" - "@abp/font-awesome" "~8.3.0-rc.1" - "@abp/jquery-form" "~8.3.0-rc.1" - "@abp/jquery-validation-unobtrusive" "~8.3.0-rc.1" - "@abp/lodash" "~8.3.0-rc.1" - "@abp/luxon" "~8.3.0-rc.1" - "@abp/malihu-custom-scrollbar-plugin" "~8.3.0-rc.1" - "@abp/moment" "~8.3.0-rc.1" - "@abp/select2" "~8.3.0-rc.1" - "@abp/sweetalert2" "~8.3.0-rc.1" - "@abp/timeago" "~8.3.0-rc.1" - "@abp/toastr" "~8.3.0-rc.1" - -"@abp/aspnetcore.mvc.ui@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-8.3.0-rc.1.tgz#7329e4878e64277dfed88eef5e9d1715d1af925f" - integrity sha512-NPWrtJ+Il+SI0oPQ5gc1Lc9vfPZvHbe0d/5y5qGIdwKY1F5txIyRGesc0najOLIUe7Z66AInyfNuNeoaFNR0fg== +"@abp/aspnetcore.mvc.ui.theme.basic@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-8.3.0.tgz#a2d17eb5da2c3abfad4bcc842cfcda0e58a130a4" + integrity sha512-T2dg7WlvNSrwTCfy5wk4gqiJ/15kIjMGM4wLXIJcMYn60yGY/YeX6Q4A3R/qJzfl4JdgW5rt3GpdKv86y/ADXg== + dependencies: + "@abp/aspnetcore.mvc.ui.theme.shared" "~8.3.0" + +"@abp/aspnetcore.mvc.ui.theme.shared@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-8.3.0.tgz#5d6bb5181a62770e9cb967980b77e75c115c5ed7" + integrity sha512-o/0eh8jLS+YJiseTKzzioUz0vNnMFzyoz+mkyA4PlO1gqw2JFhzPhTBZ3cuyV9QlxUfEA8dWAkqAUX6vqiHwkw== + dependencies: + "@abp/aspnetcore.mvc.ui" "~8.3.0" + "@abp/bootstrap" "~8.3.0" + "@abp/bootstrap-datepicker" "~8.3.0" + "@abp/bootstrap-daterangepicker" "~8.3.0" + "@abp/datatables.net-bs5" "~8.3.0" + "@abp/font-awesome" "~8.3.0" + "@abp/jquery-form" "~8.3.0" + "@abp/jquery-validation-unobtrusive" "~8.3.0" + "@abp/lodash" "~8.3.0" + "@abp/luxon" "~8.3.0" + "@abp/malihu-custom-scrollbar-plugin" "~8.3.0" + "@abp/moment" "~8.3.0" + "@abp/select2" "~8.3.0" + "@abp/sweetalert2" "~8.3.0" + "@abp/timeago" "~8.3.0" + "@abp/toastr" "~8.3.0" + +"@abp/aspnetcore.mvc.ui@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-8.3.0.tgz#d7ba0539bfcc6661a347dea7f952489010b3e816" + integrity sha512-OxgZhLKiXGFYYpNJ5O/IbhinsniiBPv9586e+1Soar0GckCMIIegJxnJb1Bo1O75blrcK2cIU6LqjRT1FXt2Lw== dependencies: ansi-colors "^4.1.3" -"@abp/bootstrap-datepicker@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-8.3.0-rc.1.tgz#d3bcb5f0063df631ad45c7f822195fc4e5c5b4e2" - integrity sha512-oqbwh9dz8XNfh+eZou8GvcEUYA1J0qr3ABA1r72DJZ/nzfLQX7pUO8NkkaDLpVwrly64rfOlxV4LT7g5muoAsw== +"@abp/bootstrap-datepicker@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-8.3.0.tgz#8c1bf9efec37b671d8f28b8b1e89c1ac66684267" + integrity sha512-KCwMtm7x+cnKPeNMzhjDJUce0stwu4e57ibmvA6sMf1tmj+yB256O4E2hIDDohiT3vP/zV8HVHX6uATlcmGC9w== dependencies: bootstrap-datepicker "^1.10.0" -"@abp/bootstrap-daterangepicker@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-8.3.0-rc.1.tgz#33958a1806a070db4fb01eb40a0897bfd16cf1f5" - integrity sha512-egtnxhRMCu56RV2bIRBLLTly2Y4W/2jwl9el+9Stjc8IN91j2UL5E4t5qn3zI3vXvVX4w5vP+TthQj0grFK0/Q== +"@abp/bootstrap-daterangepicker@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-8.3.0.tgz#2b8ed978333502677916f88cbb3e1d1b1c8a3a17" + integrity sha512-uQSfuCQogl4BujdqvtdAoSE+z32ci8FT5+i3gLfpqbgTaxvY/Kv5NxAUH5/1sjnuAE7SMWO+eVvI3V0pXgQohg== dependencies: bootstrap-daterangepicker "^3.1.0" -"@abp/bootstrap@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-8.3.0-rc.1.tgz#3ca994e4c003d056024dcd533221461cccd14f2a" - integrity sha512-xrs0JOYFEPzi3V6s9d3SCj0CxY06bBmFUK5aETgKUiXBXa4vU2YoNbnrCtDUvV+mn517FRuA/j3RaFkTWYg48g== +"@abp/bootstrap@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-8.3.0.tgz#96d6ea7e6ac30f6e34e495a4224f56f7b2a1a7a3" + integrity sha512-5AmdTtakmWhZmHrb7ibvvf+KwF9OGadpAe7Kv9mNEE02K2qkp7Xw4r5o/bgVl7YfLC1FA6GZZXrV2s2t0gjHtg== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" bootstrap "^5.3.3" -"@abp/clipboard@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-8.3.0-rc.1.tgz#65c6cd6672fc248097659908edd4a9fe92664475" - integrity sha512-CVyO/8BK2WnegwrEvBJCNcbkI5l31U/pZBn7DBUGpiawlLiyYZOtGFUgu4sIUTEfyaRdLiCIPd0eMzDPKMVTgA== +"@abp/clipboard@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-8.3.0.tgz#1b171e533f768cf42c8fc0c9c67fac1c636fee8c" + integrity sha512-T0O4OaMxLLYztAxyvEc3onEOpGHB/C8/jDcvJwd7mgpLoi9zXVfHwpnzkx/egfNJMzp49STD6Jc+jACi8Uq+CQ== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" clipboard "^2.0.11" -"@abp/core@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-8.3.0-rc.1.tgz#771c7ecd27319201a8236f0bc6b5601188059325" - integrity sha512-IB8Baa3LIv3XYja6iBw6VSnITGcRseGyY8wBNEXRiB+ni21Bv//NMyohdOot6G+HlnHlrB7kFeCX+gWu+LuYkg== +"@abp/core@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-8.3.0.tgz#3a68f5a9549efcc3e13500e301f2576751b51445" + integrity sha512-zrxnZi4qij/Y4AZWaXuPqs3Dd7gBtU/onX7FkYxLgQDxYBfx+84QAnPRNRFKMWaD/wKbTUB0wA66U3t2aiQX9Q== dependencies: - "@abp/utils" "~8.3.0-rc.1" + "@abp/utils" "~8.3.0" -"@abp/datatables.net-bs5@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-8.3.0-rc.1.tgz#b53dc353f485952439ea10035df0851d520efe96" - integrity sha512-89wpkG6u1YBR98OmuEbvs4VdR5n8L4n3Z8GiHwuKr2FpEOx7cAXYKsx/8ifmICMLPiMIvFrtOEBrrv5ZKANsAA== +"@abp/datatables.net-bs5@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-8.3.0.tgz#21822ae4912a561afe9112925185aece03fcd0eb" + integrity sha512-GOGYSSHp3iPUDFRX2Y3C0wkiCOJDuYuK/zUSzQLNpOvBMZO+I/oWBcZM+qkVowIzsoRlAGV9+CVV2B/B05qidA== dependencies: - "@abp/datatables.net" "~8.3.0-rc.1" + "@abp/datatables.net" "~8.3.0" datatables.net-bs5 "^2.0.8" -"@abp/datatables.net@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-8.3.0-rc.1.tgz#bb70608994c4a52bd15331f76af718353c843f94" - integrity sha512-G42D6W0Xb8NIQxJWGpcxLOjbZ4CHtrm9oBG5+GfVmQEPGfl8r+DYdrYDAkysDg483s+48POH7NC3L1LOlxlqRg== +"@abp/datatables.net@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-8.3.0.tgz#ff697758ce9309ba8311f23aec921c4722588c8b" + integrity sha512-4dIdv7eN1tVouOUrlF+MIdg8zQpecyH61waqLgy1q5jMZQivrTSFZ7UWMG3WVOAYjw5zSUZHZPbzA+ttnaOPkg== dependencies: - "@abp/jquery" "~8.3.0-rc.1" + "@abp/jquery" "~8.3.0" datatables.net "^2.0.8" -"@abp/docs@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/docs/-/docs-8.3.0-rc.1.tgz#e1fdd55b09d927d0beec0d1fb99e1684348ebb2d" - integrity sha512-dL3Hfz5/9HAAo0+wvGa1oSpydZeFTezGrW6ulZ/Ti9I7cjkZebMtB/lc35EOzOy9oZp7qD/3juw0AuUlICxGqg== +"@abp/docs@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/docs/-/docs-8.3.0.tgz#3ca32d80b00e2f2b7410c76d92f653919fa50d20" + integrity sha512-HIHLoRtMeeZIF9JAfQ+EWyFyNWT/rJhtz23rweWz2waaC+Ua5JWkFF3vcNuPiMIqWilOp0iwsSAP0ex10/+7kA== dependencies: - "@abp/anchor-js" "~8.3.0-rc.1" - "@abp/clipboard" "~8.3.0-rc.1" - "@abp/malihu-custom-scrollbar-plugin" "~8.3.0-rc.1" - "@abp/popper.js" "~8.3.0-rc.1" - "@abp/prismjs" "~8.3.0-rc.1" + "@abp/anchor-js" "~8.3.0" + "@abp/clipboard" "~8.3.0" + "@abp/malihu-custom-scrollbar-plugin" "~8.3.0" + "@abp/popper.js" "~8.3.0" + "@abp/prismjs" "~8.3.0" -"@abp/font-awesome@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-8.3.0-rc.1.tgz#ea05d7e08395b1894eefe6f912ae0534fd75e69a" - integrity sha512-GN1xZ76RzQC3aqU2m19vYsyfESCeoSsp8AtvilmeqsjlzhuLLdQ6UWSxMqRqE22TCWRXbA/d/7IAb12TB1mawg== +"@abp/font-awesome@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-8.3.0.tgz#9e4e9adc08dfca52c0a07d1608c5e5662675a4c9" + integrity sha512-NRxvM/dzvQC2Cj/F5i07XB/i6IVTmXcO9sOq6TWosWib0wGaPxRbCSjy8QUAYSD1QYaVQ30XMb3XXImaMGyd8A== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" "@fortawesome/fontawesome-free" "^6.5.2" -"@abp/jquery-form@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-8.3.0-rc.1.tgz#21025048f44028a5cb1ced7414cb48af00e91bff" - integrity sha512-mVZzEJKbhiYmXK2yZRZAJwO5e7C2N0lj8ueOYPiFG6h4UKLbKPHQdIrkapyc88VirrELe1hnhJJbQ56dsQWeyg== +"@abp/jquery-form@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-8.3.0.tgz#fa2ad2fedbe3d3528ee94cbbd4f94d48f0cb5e4d" + integrity sha512-olP9FmpNVTbOIewsVua0moHVYXw4Sl3chFbvTDLG6vRBohLSjllUXfgY3UEIVWR1PCqnAg+iEJZl9NHB9iOLBg== dependencies: - "@abp/jquery" "~8.3.0-rc.1" + "@abp/jquery" "~8.3.0" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-8.3.0-rc.1.tgz#63042715391ca63f273874ff66fca4b20330d31b" - integrity sha512-EKQf733+HS9bIVQhMgAHYZfCY663GqNv8KUcCIuQOHPt5DWU49ygYhawkcYIzUKd2Gy9+ZtyWLkWmoBxTnwlmw== +"@abp/jquery-validation-unobtrusive@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-8.3.0.tgz#0992cdd33170df83c79aa3371038c0b30e451521" + integrity sha512-9hidjq8x8sTnP5O3K2b2x9NpxvPd9WB03ENR6OfvM89kfSmQapSvBZTlCu80YK9NaQJ6MLQRLYOCuc3GHcj3EQ== dependencies: - "@abp/jquery-validation" "~8.3.0-rc.1" + "@abp/jquery-validation" "~8.3.0" jquery-validation-unobtrusive "^4.0.0" -"@abp/jquery-validation@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-8.3.0-rc.1.tgz#8c82189ba7c3614f7306c2bf958b3717a6a4e702" - integrity sha512-Fr8AI//7iV743S6bw4ixE5qOu+af3HfZSivQJnYVVTbR/75gPqI/xRe6u/k82TJIBM7IaspQ4QdruMuvnJyBpQ== +"@abp/jquery-validation@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-8.3.0.tgz#bd6a72c6d86f116abe3b5d2adf3752bdbbcca887" + integrity sha512-6l5BZSa3N0Fou6Se7MfUSnI2dD4SYhZ2V988bgPJQ6p37XBOZ2OAj7LEIf5FSjtUzXjao/6/vqjkPNYreNikig== dependencies: - "@abp/jquery" "~8.3.0-rc.1" + "@abp/jquery" "~8.3.0" jquery-validation "^1.20.1" -"@abp/jquery@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-8.3.0-rc.1.tgz#a181c6749d58690b3265705959d8c818296896f3" - integrity sha512-fXs35cDLAw66irfHsFIWD41RKzpLABkULLoMwxfB76nOVPdV7qlWrXoI2O/du3xhCqBqHR4fS8xjwE6kFvkdLQ== +"@abp/jquery@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-8.3.0.tgz#9be5ef2f769680226e6a1a981026590caf3b57ef" + integrity sha512-GsFY+n3EtS6B0pAoKd+xMnt5Dzi5bHvIbhLgDgfQfOBzAy3twGRWsPQ3nkuXXm8TppwujMNowU1oiLKPPm0AOA== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" jquery "~3.7.1" -"@abp/lodash@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-8.3.0-rc.1.tgz#32f8805031f73b9d5bdc338afe49739c4ebc3ce9" - integrity sha512-UBGlG5+tFpyAPMuwpkY7K/g21c+d3Aq3HbFmcIilUEIsJ+yJqj95xhRh6t/LSwJCo5ntdSCgVC85q0kD0fQlQA== +"@abp/lodash@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-8.3.0.tgz#f5a0a496c999886f2d6999067bfac2e1f0c3969c" + integrity sha512-BiAsONbKR/RKG3WjRaMWVmhNe1ELEsykVq+ogG1Rhk3kwPbvze3TS8k2p0Lu/RC41/BmDUmJ5abg1pUMwkRT8w== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" lodash "^4.17.21" -"@abp/luxon@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-8.3.0-rc.1.tgz#df19773212502336c2caf6a8806b7647748f8f81" - integrity sha512-1oPx0tGyFi58T0yv/pdqJpcIRWU6ej5Sv28fRgz3J6tHam3hVPtKJPK9Ajvn6+MNVDLuMUczgVtfWEOvO2Kqrg== +"@abp/luxon@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-8.3.0.tgz#7dd3f756be1605506e26f7ac76b80cc082a12d07" + integrity sha512-8gdI5BtXkVp0sFg89QVDe8AvgQ7Qfq4JCqz2PMrKPSATR3H8GD6BCaEYpRp6CNTCjVrQjGZdzKgUyea1D3dHbw== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" luxon "^3.4.4" -"@abp/malihu-custom-scrollbar-plugin@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-8.3.0-rc.1.tgz#b57086d708082ce45e1917aeca8c92029ebd805d" - integrity sha512-4sa5e07EPW9IM7eQbvKtk78gd/bESYhTsl+BeWSKeqjj5wwwPYf4GIEvfJM7JVnhYwh1IPYDEkTv9QNYLczXKQ== +"@abp/malihu-custom-scrollbar-plugin@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-8.3.0.tgz#c88c132c3402bbb02054ca7d446051950f87a817" + integrity sha512-nd/mb6LJa6fMxal8PGcIjIRIoZ/UHCd01WDC9YI2H4wGCGx0CA0JyHso5oc/OEzJhUL8ujO/vYm9uLb7YahPtA== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/moment@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-8.3.0-rc.1.tgz#0ba9d64ca6d7b454af7aaa63e54be267f333e1fe" - integrity sha512-YbVEDg3m+D5KMcTCBEnor/tFgmk9IeL4pF/oChYQGXLeyohY7vfmK68owAnEDN61nCRXng9xykiZu2bLq829WA== +"@abp/moment@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-8.3.0.tgz#8e4f7a523ab76ef9e4cd96a399560bad38d38d1a" + integrity sha512-LywSsKuQ2GN/Btmle6CcTKa811zbvUWdC+RLQA792K9HyBs6LvN0qRRluEQZgplairRgh2pDOg8tdFlUERkv2w== dependencies: moment "^2.30.1" -"@abp/popper.js@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/popper.js/-/popper.js-8.3.0-rc.1.tgz#2ddfe4c8f118d6f4b2abe358c8bf8f9e66a72d82" - integrity sha512-qLAppoo9YUGk7gvze3CELl1DIsi42ONpSaCFuF4QvN95j0j7aMFCpO0RdJ1vWPkRqqm7tXiB7u9TFDxs3RbxkQ== +"@abp/popper.js@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/popper.js/-/popper.js-8.3.0.tgz#95af55f98209ed2537e5f61404e6bfcdf36045e9" + integrity sha512-1jJbKU7zod3ihQ5hpDz91j33gkprQUkysvOzFnyDG8T5yQk+E63kYCHY+dzV3lSI1QpQscZA0c3SWVcgDgROvA== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" "@popperjs/core" "^2.11.8" -"@abp/prismjs@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-8.3.0-rc.1.tgz#82f98db7e3a5e5e535ecb0452c84a5fda57b5801" - integrity sha512-kvO7fU9KfXNK44mL9QDtGuDD3ebiXTd5nKNxgrsneHhYsdNiWwXzqWpZlfs7t9nqSydLzqWkQZ7we01GoxeQ/g== +"@abp/prismjs@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-8.3.0.tgz#0c87c63294d1452ed7152083d2fb6e70aa3aeae6" + integrity sha512-3wpwbqqlGRfQSLcBP+Qb2TKOoVGZVYYwOP6dP3So9ev8J5gFMDEizH9zLwRVHYrrsZZP8/etYnyZ0hn7ewuI5Q== dependencies: - "@abp/clipboard" "~8.3.0-rc.1" - "@abp/core" "~8.3.0-rc.1" + "@abp/clipboard" "~8.3.0" + "@abp/core" "~8.3.0" prismjs "^1.29.0" -"@abp/select2@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-8.3.0-rc.1.tgz#3eb932e05987cc1e13f72decc9ae70d47801bf7d" - integrity sha512-lZuJLiFcOEVj6cTPAA7ZfhE3v1LyivmMt8Tt7Dpvgybx2PDN1NtfLce2BCKb0MvsaTlfJMSK0ZLu3JpxCQ+Q/A== +"@abp/select2@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-8.3.0.tgz#ef4742fcd345394767f46180f61c6cabbd0b3867" + integrity sha512-bdLt2+ImxxpiZl4HGbYJpdDROQUT7/Z/+8A+6oJNacq3lNekdvufLYgTMxKru6zTbnd9j3HFKMOTE1eRjb9Xqg== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" select2 "^4.0.13" -"@abp/sweetalert2@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-8.3.0-rc.1.tgz#66d8b9ce287a71474ce37c217cd800e150a86138" - integrity sha512-b6dZbc5/nYrUz5s+lAgi561XnsASa0ZJOn6f5W2Oakm9ULzqFndapKx5f+zHeJaNArpeGDh50AjQ+lcGGw83zQ== +"@abp/sweetalert2@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-8.3.0.tgz#a63020d57e44f7940817287d3d9676288bfb85aa" + integrity sha512-ooqPM4Z2v2scnMo5l8ycTmp6t/sW4sCsvIkJ4TyM876WLQJaZxJdOao4RQWuU+dVFr9zg8cOwqLH4q7UEiO6ww== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" sweetalert2 "^11.3.6" -"@abp/timeago@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-8.3.0-rc.1.tgz#d795b9cccb190f5d42f242727ac447fe03c30db3" - integrity sha512-yJCA7PHmAxFxIvPq03iSx3LbIiDQls4AiVBO75103LEGokRUG9bg+iPA7GLkPpfNbnNgEJ7N7Gw6RQzMNRLCpA== +"@abp/timeago@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-8.3.0.tgz#b3b8d6927bf170f77af848bc1925e5ef6835bd55" + integrity sha512-Dd6xaUoF9Bp4F9WJnTsFBqY+Gt++UR7UmLvBZL/dvthkeNCu2I8MUsmshkUUjY0lIXpjZwefUOuyupQrgHXPMg== dependencies: - "@abp/jquery" "~8.3.0-rc.1" + "@abp/jquery" "~8.3.0" timeago "^1.6.7" -"@abp/toastr@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-8.3.0-rc.1.tgz#82c7f6566e604c2cf31555da3f9b0898df8a5541" - integrity sha512-0nBM4nEvDlANVulk7EKoB4Lk/1fH+UgzPOyUOyemQZAWHgPhIpa4z5yiLkCeOxN1hu/CBEe+Jo7qJblsj+v7kQ== +"@abp/toastr@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-8.3.0.tgz#e68a2bd8f731e79034594bc2c736f7c66b3df1af" + integrity sha512-aWK/RaX/FmcEKhJLjsw1A0K2c04m2fRJkmo9NwzBCSscy6Msw9IMkqNWLiFDThMU8/qKzq7wq3Vmk/C0IpeAwA== dependencies: - "@abp/jquery" "~8.3.0-rc.1" + "@abp/jquery" "~8.3.0" toastr "^2.1.4" -"@abp/utils@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-8.3.0-rc.1.tgz#7db324059f8f9c64fbb5d5a6f0c2384896ca1928" - integrity sha512-Eg4Lwv4DEDr5mfG/8ghwMPdphywZBZIxWTJCZnCWngDQ9fEn/bnYuL1WkvbVvKd10A6030wHEJXFJj2OuNdi3Q== +"@abp/utils@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-8.3.0.tgz#96ae9266ad4d833fd9d723acef7fc85fabf618d9" + integrity sha512-w/XAqza4Z8wBWRoj5uPNKbd1/bE9L/uUWk6EUSBKmljMRryWQBmaPkb1XgvrOMQIbyyF60tUvvipapQLPVh6hw== dependencies: just-compare "^2.3.0" diff --git a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo.Docs.Admin.Application.Contracts.abppkg.analyze.json b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo.Docs.Admin.Application.Contracts.abppkg.analyze.json index 15df3ae702..e46f6f929a 100644 --- a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo.Docs.Admin.Application.Contracts.abppkg.analyze.json +++ b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo.Docs.Admin.Application.Contracts.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Docs.Admin.Application.Contracts", - "hash": "100fbf697289f27c22d70a1f4eb45b5a", + "hash": "", "contents": [ { "namespace": "Volo.Docs.Admin", diff --git a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/sv.json b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/sv.json new file mode 100644 index 0000000000..cbde97c756 --- /dev/null +++ b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/sv.json @@ -0,0 +1,62 @@ +{ + "culture": "sv", + "texts": { + "Permission:DocumentManagement": "Dokumenthantering", + "Permission:Projects": "Projekt", + "Permission:Edit": "Redigera", + "Permission:Delete": "Radera", + "Permission:Create": "Skapa", + "Permission:Documents": "Dokument", + "Menu:Documents": "Dokument", + "Menu:DocumentManagement": "Dokument", + "Menu:ProjectManagement": "Projekt", + "CreateANewProject": "Skapa ett nytt projekt", + "Edit": "Redigera", + "Create": "Skapa", + "Pull": "Dra frĂ„n", + "Projects": "Projekt", + "Name": "Namn", + "ShortName": "Kortnamn", + "DocumentStoreType": "DokumentStoreTyp", + "Format": "Format", + "ShortNameInfoText": "Kommer att anvĂ€ndas för unik URL.", + "DisplayName:Name": "Namn", + "DisplayName:ShortName": "Kort namn", + "DisplayName:Format": "Format", + "DisplayName:DefaultDocumentName": "Standardnamn för dokument", + "DisplayName:NavigationDocumentName": "Namn pĂ„ navigeringsdokument", + "DisplayName:MinimumVersion": "Minsta version", + "DisplayName:MainWebsiteUrl": "URL för huvudwebbplats", + "DisplayName:LatestVersionBranchName": "Grennamn för senaste versionen", + "DisplayName:GitHubRootUrl": "URL för GitHub-rot", + "DisplayName:GitHubAccessToken": "Token för GitHub-Ă„tkomst", + "DisplayName:GitHubUserAgent": "GitHub anvĂ€ndaragent", + "DisplayName:GithubVersionProviderSource": "GitHub version leverantör kĂ€lla", + "DisplayName:VersionBranchPrefix": "Prefix för versionsgren", + "DisplayName:All": "Dra alla", + "DisplayName:LanguageCode": "SprĂ„kkod", + "DisplayName:Version": "Version", + "Documents": "Dokument", + "RemoveFromCache": "Ta bort frĂ„n cache och indexera pĂ„ nytt", + "Reindex": "Återindexera", + "ReindexCompleted": "Omindexering slutförd", + "RemovedFromCache": "Borttagen frĂ„n cache och indexerad pĂ„ nytt", + "RemoveFromCacheConfirmation": "Är du sĂ€ker pĂ„ att du vill ta bort det hĂ€r objektet frĂ„n cacheminnet?", + "ReIndexDocumentConfirmation": "Är du sĂ€ker att du vill indexera om \"{0}\"?", + "DeleteFromDatabase": "Ta bort frĂ„n databasen", + "Deleted": "Borttagen", + "Search": "Sök", + "StartDate": "Startdatum", + "EndDate": "Slutdatum", + "CreationTime": "Skapelsetid", + "LastUpdateTime": "Senaste uppdatering", + "LastSignificantUpdateTime": "Senaste betydande uppdatering", + "Version": "Version", + "LanguageCode": "SprĂ„kkod", + "FileName": "Filens namn", + "LastCachedTime": "Cache-tid", + "Project": "Projekt", + "AdvancedFilters": "Avancerade filter", + "RemoveCacheAndReIndexConfirmation": "Dokumentet \"{0}\" kommer att tas bort frĂ„n cacheminnet och indexeras pĂ„ nytt. Kan du bekrĂ€fta detta?" + } +} \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Admin.Application/Volo.Docs.Admin.Application.abppkg.analyze.json b/modules/docs/src/Volo.Docs.Admin.Application/Volo.Docs.Admin.Application.abppkg.analyze.json index 2ceac5605f..777b36a3d0 100644 --- a/modules/docs/src/Volo.Docs.Admin.Application/Volo.Docs.Admin.Application.abppkg.analyze.json +++ b/modules/docs/src/Volo.Docs.Admin.Application/Volo.Docs.Admin.Application.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Docs.Admin.Application", - "hash": "9f9f4df9fb9f426b7c115abc968b99d1", + "hash": "", "contents": [ { "namespace": "Volo.Docs.Admin", @@ -146,6 +146,7 @@ "methods": [ { "returnType": "PagedResultDto", + "namespace": "Volo.Docs.Admin.Projects", "name": "GetListAsync", "summary": null, "isAsync": true, @@ -162,6 +163,7 @@ }, { "returnType": "ProjectDto", + "namespace": "Volo.Docs.Admin.Projects", "name": "GetAsync", "summary": null, "isAsync": true, @@ -178,6 +180,7 @@ }, { "returnType": "ProjectDto", + "namespace": "Volo.Docs.Admin.Projects", "name": "CreateAsync", "summary": null, "isAsync": true, @@ -194,6 +197,7 @@ }, { "returnType": "ProjectDto", + "namespace": "Volo.Docs.Admin.Projects", "name": "UpdateAsync", "summary": null, "isAsync": true, @@ -215,6 +219,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Docs.Admin.Projects", "name": "DeleteAsync", "summary": null, "isAsync": true, @@ -231,6 +236,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Docs.Admin.Projects", "name": "ReindexAsync", "summary": null, "isAsync": true, @@ -247,6 +253,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Docs.Admin.Projects", "name": "ReindexAllAsync", "summary": null, "isAsync": true, @@ -257,6 +264,7 @@ }, { "returnType": "List", + "namespace": "Volo.Docs.Admin.Projects", "name": "GetListWithoutDetailsAsync", "summary": null, "isAsync": true, @@ -337,6 +345,7 @@ "methods": [ { "returnType": "Void", + "namespace": "Volo.Docs.Admin.Documents", "name": "ClearCacheAsync", "summary": null, "isAsync": true, @@ -353,6 +362,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Docs.Admin.Documents", "name": "PullAllAsync", "summary": null, "isAsync": true, @@ -369,6 +379,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Docs.Admin.Documents", "name": "PullAsync", "summary": null, "isAsync": true, @@ -385,6 +396,7 @@ }, { "returnType": "PagedResultDto", + "namespace": "Volo.Docs.Admin.Documents", "name": "GetAllAsync", "summary": null, "isAsync": true, @@ -401,6 +413,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Docs.Admin.Documents", "name": "RemoveFromCacheAsync", "summary": null, "isAsync": true, @@ -417,6 +430,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Docs.Admin.Documents", "name": "ReindexAsync", "summary": null, "isAsync": true, @@ -433,6 +447,7 @@ }, { "returnType": "List", + "namespace": "Volo.Docs.Admin.Documents", "name": "GetFilterItemsAsync", "summary": null, "isAsync": true, diff --git a/modules/docs/src/Volo.Docs.Admin.HttpApi.Client/Volo.Docs.Admin.HttpApi.Client.abppkg.analyze.json b/modules/docs/src/Volo.Docs.Admin.HttpApi.Client/Volo.Docs.Admin.HttpApi.Client.abppkg.analyze.json index a516cd090d..0a847b9638 100644 --- a/modules/docs/src/Volo.Docs.Admin.HttpApi.Client/Volo.Docs.Admin.HttpApi.Client.abppkg.analyze.json +++ b/modules/docs/src/Volo.Docs.Admin.HttpApi.Client/Volo.Docs.Admin.HttpApi.Client.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Docs.Admin.HttpApi.Client", - "hash": "76183fefaf0abfaa267c1d6e05a08b82", + "hash": "", "contents": [ { "namespace": "Volo.Docs.Admin", diff --git a/modules/docs/src/Volo.Docs.Admin.HttpApi/Volo.Docs.Admin.HttpApi.abppkg.analyze.json b/modules/docs/src/Volo.Docs.Admin.HttpApi/Volo.Docs.Admin.HttpApi.abppkg.analyze.json index a8db7612a7..0123d894fc 100644 --- a/modules/docs/src/Volo.Docs.Admin.HttpApi/Volo.Docs.Admin.HttpApi.abppkg.analyze.json +++ b/modules/docs/src/Volo.Docs.Admin.HttpApi/Volo.Docs.Admin.HttpApi.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Docs.Admin.HttpApi", - "hash": "6661b70996cefd1caa9f3072d98aeab3", + "hash": "", "contents": [ { "namespace": "Volo.Docs.Admin", @@ -63,6 +63,269 @@ "contentType": "abpModule", "name": "DocsAdminHttpApiModule", "summary": null + }, + { + "apis": [ + { + "path": "api/docs/admin/documents/ClearCache", + "method": "POST", + "groupName": "DocumentsAdmin", + "responseType": "System.Void", + "responseTypeAsJson": "", + "parameterDescriptions": [ + { + "name": "input", + "type": "ClearCacheInput" + } + ] + }, + { + "path": "api/docs/admin/documents/PullAll", + "method": "POST", + "groupName": "DocumentsAdmin", + "responseType": "System.Void", + "responseTypeAsJson": "", + "parameterDescriptions": [ + { + "name": "input", + "type": "PullAllDocumentInput" + } + ] + }, + { + "path": "api/docs/admin/documents/Pull", + "method": "POST", + "groupName": "DocumentsAdmin", + "responseType": "System.Void", + "responseTypeAsJson": "", + "parameterDescriptions": [ + { + "name": "input", + "type": "PullDocumentInput" + } + ] + }, + { + "path": "api/docs/admin/documents/GetAll", + "method": "GET", + "groupName": "DocumentsAdmin", + "responseType": "Volo.Abp.Application.Dtos.PagedResultDto`1[Volo.Docs.Admin.Documents.DocumentDto]", + "responseTypeAsJson": "{\r\n \"totalCount\": 0,\r\n \"items\": [\r\n {\r\n \"projectId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"projectName\": \"string\",\r\n \"name\": \"string\",\r\n \"version\": \"string\",\r\n \"languageCode\": \"string\",\r\n \"fileName\": \"string\",\r\n \"format\": \"string\",\r\n \"creationTime\": \"0001-01-01T00:00:00\",\r\n \"lastUpdatedTime\": \"0001-01-01T00:00:00\",\r\n \"lastSignificantUpdateTime\": null,\r\n \"lastCachedTime\": \"0001-01-01T00:00:00\",\r\n \"id\": \"00000000-0000-0000-0000-000000000000\"\r\n }\r\n ]\r\n}", + "parameterDescriptions": [ + { + "name": "ProjectId", + "type": "Nullable" + }, + { + "name": "Name", + "type": "String" + }, + { + "name": "Version", + "type": "String" + }, + { + "name": "LanguageCode", + "type": "String" + }, + { + "name": "FileName", + "type": "String" + }, + { + "name": "Format", + "type": "String" + }, + { + "name": "CreationTimeMin", + "type": "Nullable" + }, + { + "name": "CreationTimeMax", + "type": "Nullable" + }, + { + "name": "LastUpdatedTimeMin", + "type": "Nullable" + }, + { + "name": "LastUpdatedTimeMax", + "type": "Nullable" + }, + { + "name": "LastSignificantUpdateTimeMin", + "type": "Nullable" + }, + { + "name": "LastSignificantUpdateTimeMax", + "type": "Nullable" + }, + { + "name": "LastCachedTimeMin", + "type": "Nullable" + }, + { + "name": "LastCachedTimeMax", + "type": "Nullable" + }, + { + "name": "Sorting", + "type": "String" + }, + { + "name": "SkipCount", + "type": "Int32" + }, + { + "name": "MaxResultCount", + "type": "Int32" + } + ] + }, + { + "path": "api/docs/admin/documents/RemoveDocumentFromCache", + "method": "PUT", + "groupName": "DocumentsAdmin", + "responseType": "System.Void", + "responseTypeAsJson": "", + "parameterDescriptions": [ + { + "name": "documentId", + "type": "Guid" + } + ] + }, + { + "path": "api/docs/admin/documents/ReindexDocument", + "method": "PUT", + "groupName": "DocumentsAdmin", + "responseType": "System.Void", + "responseTypeAsJson": "", + "parameterDescriptions": [ + { + "name": "documentId", + "type": "Guid" + } + ] + }, + { + "path": "api/docs/admin/documents/GetFilterItems", + "method": "GET", + "groupName": "DocumentsAdmin", + "responseType": "System.Collections.Generic.List`1[Volo.Docs.Admin.Documents.DocumentInfoDto]", + "responseTypeAsJson": "[\r\n {\r\n \"version\": \"string\",\r\n \"format\": \"string\",\r\n \"languageCode\": \"string\",\r\n \"projectId\": \"00000000-0000-0000-0000-000000000000\"\r\n }\r\n]", + "parameterDescriptions": [] + }, + { + "path": "api/docs/admin/projects", + "method": "GET", + "groupName": "ProjectsAdmin", + "responseType": "Volo.Abp.Application.Dtos.PagedResultDto`1[Volo.Docs.Admin.Projects.ProjectDto]", + "responseTypeAsJson": "", + "parameterDescriptions": [ + { + "name": "Sorting", + "type": "String" + }, + { + "name": "SkipCount", + "type": "Int32" + }, + { + "name": "MaxResultCount", + "type": "Int32" + } + ] + }, + { + "path": "api/docs/admin/projects/{id}", + "method": "GET", + "groupName": "ProjectsAdmin", + "responseType": "Volo.Docs.Admin.Projects.ProjectDto", + "responseTypeAsJson": "", + "parameterDescriptions": [ + { + "name": "id", + "type": "Guid" + } + ] + }, + { + "path": "api/docs/admin/projects", + "method": "POST", + "groupName": "ProjectsAdmin", + "responseType": "Volo.Docs.Admin.Projects.ProjectDto", + "responseTypeAsJson": "", + "parameterDescriptions": [ + { + "name": "input", + "type": "CreateProjectDto" + } + ] + }, + { + "path": "api/docs/admin/projects/{id}", + "method": "PUT", + "groupName": "ProjectsAdmin", + "responseType": "Volo.Docs.Admin.Projects.ProjectDto", + "responseTypeAsJson": "", + "parameterDescriptions": [ + { + "name": "id", + "type": "Guid" + }, + { + "name": "input", + "type": "UpdateProjectDto" + } + ] + }, + { + "path": "api/docs/admin/projects", + "method": "DELETE", + "groupName": "ProjectsAdmin", + "responseType": "System.Void", + "responseTypeAsJson": "", + "parameterDescriptions": [ + { + "name": "id", + "type": "Guid" + } + ] + }, + { + "path": "api/docs/admin/projects/ReindexAll", + "method": "POST", + "groupName": "ProjectsAdmin", + "responseType": "System.Void", + "responseTypeAsJson": "", + "parameterDescriptions": [] + }, + { + "path": "api/docs/admin/projects/GetListProjectWithoutDetailsAsync", + "method": "GET", + "groupName": "ProjectsAdmin", + "responseType": "System.Collections.Generic.List`1[Volo.Docs.Admin.Projects.ProjectWithoutDetailsDto]", + "responseTypeAsJson": "[\r\n {\r\n \"id\": \"00000000-0000-0000-0000-000000000000\",\r\n \"name\": \"string\"\r\n }\r\n]", + "parameterDescriptions": [] + }, + { + "path": "api/docs/admin/projects/Reindex", + "method": "POST", + "groupName": "ProjectsAdmin", + "responseType": "System.Void", + "responseTypeAsJson": "", + "parameterDescriptions": [ + { + "name": "input", + "type": "ReindexInput" + } + ] + } + ], + "contentType": "httpApi", + "name": "Defined Http Apis", + "summary": null } ] } \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Admin.Web/Volo.Docs.Admin.Web.abppkg.analyze.json b/modules/docs/src/Volo.Docs.Admin.Web/Volo.Docs.Admin.Web.abppkg.analyze.json index 0cd4f5a31e..d186a8cb22 100644 --- a/modules/docs/src/Volo.Docs.Admin.Web/Volo.Docs.Admin.Web.abppkg.analyze.json +++ b/modules/docs/src/Volo.Docs.Admin.Web/Volo.Docs.Admin.Web.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Docs.Admin.Web", - "hash": "46beda5e0ea0eec3abd53bd83b1ab711", + "hash": "", "contents": [ { "namespace": "Volo.Docs.Admin", @@ -63,6 +63,36 @@ "contentType": "abpModule", "name": "DocsAdminWebModule", "summary": null + }, + { + "namespace": "Volo.Docs.Admin.Pages.Docs.Admin.Projects", + "contentType": "webPage", + "name": "CreateModel", + "summary": null + }, + { + "namespace": "Volo.Docs.Admin.Pages.Docs.Admin.Projects", + "contentType": "webPage", + "name": "EditModel", + "summary": null + }, + { + "namespace": "Volo.Docs.Admin.Pages.Docs.Admin.Projects", + "contentType": "webPage", + "name": "IndexModel", + "summary": null + }, + { + "namespace": "Volo.Docs.Admin.Pages.Docs.Admin.Projects", + "contentType": "webPage", + "name": "PullModel", + "summary": null + }, + { + "namespace": "Volo.Docs.Admin.Pages.Docs.Admin.Documents", + "contentType": "webPage", + "name": "IndexModel", + "summary": null } ] } \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Application.Contracts/Volo.Docs.Application.Contracts.abppkg.analyze.json b/modules/docs/src/Volo.Docs.Application.Contracts/Volo.Docs.Application.Contracts.abppkg.analyze.json index 913486993a..72118d01a8 100644 --- a/modules/docs/src/Volo.Docs.Application.Contracts/Volo.Docs.Application.Contracts.abppkg.analyze.json +++ b/modules/docs/src/Volo.Docs.Application.Contracts/Volo.Docs.Application.Contracts.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Docs.Application.Contracts", - "hash": "77681b4bcac4f8661cfb9320e5a88586", + "hash": "", "contents": [ { "namespace": "Volo.Docs", diff --git a/modules/docs/src/Volo.Docs.Application/Volo.Docs.Application.abppkg.analyze.json b/modules/docs/src/Volo.Docs.Application/Volo.Docs.Application.abppkg.analyze.json index 62d9f908e0..86f06c124b 100644 --- a/modules/docs/src/Volo.Docs.Application/Volo.Docs.Application.abppkg.analyze.json +++ b/modules/docs/src/Volo.Docs.Application/Volo.Docs.Application.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Docs.Application", - "hash": "3ceeb88026645c5e1f479c66635735e1", + "hash": "", "contents": [ { "namespace": "Volo.Docs", @@ -146,6 +146,7 @@ "methods": [ { "returnType": "ListResultDto", + "namespace": "Volo.Docs.Projects", "name": "GetListAsync", "summary": null, "isAsync": true, @@ -156,6 +157,7 @@ }, { "returnType": "ProjectDto", + "namespace": "Volo.Docs.Projects", "name": "GetAsync", "summary": null, "isAsync": true, @@ -172,6 +174,7 @@ }, { "returnType": "ListResultDto", + "namespace": "Volo.Docs.Projects", "name": "GetVersionsAsync", "summary": null, "isAsync": true, @@ -188,6 +191,7 @@ }, { "returnType": "LanguageConfig", + "namespace": "Volo.Docs.Projects", "name": "GetLanguageListAsync", "summary": null, "isAsync": true, @@ -209,6 +213,7 @@ }, { "returnType": "String", + "namespace": "Volo.Docs.Projects", "name": "GetDefaultLanguageCodeAsync", "summary": null, "isAsync": true, @@ -300,6 +305,7 @@ "methods": [ { "returnType": "DocumentWithDetailsDto", + "namespace": "Volo.Docs.Documents", "name": "GetAsync", "summary": null, "isAsync": true, @@ -316,6 +322,7 @@ }, { "returnType": "DocumentWithDetailsDto", + "namespace": "Volo.Docs.Documents", "name": "GetDefaultAsync", "summary": null, "isAsync": true, @@ -332,6 +339,7 @@ }, { "returnType": "NavigationNode", + "namespace": "Volo.Docs.Documents", "name": "GetNavigationAsync", "summary": null, "isAsync": true, @@ -348,6 +356,7 @@ }, { "returnType": "DocumentResourceDto", + "namespace": "Volo.Docs.Documents", "name": "GetResourceAsync", "summary": null, "isAsync": true, @@ -363,7 +372,8 @@ ] }, { - "returnType": "List", + "returnType": "PagedResultDto", + "namespace": "Volo.Docs.Documents", "name": "SearchAsync", "summary": null, "isAsync": true, @@ -380,6 +390,7 @@ }, { "returnType": "Boolean", + "namespace": "Volo.Docs.Documents", "name": "FullSearchEnabledAsync", "summary": null, "isAsync": true, @@ -390,6 +401,7 @@ }, { "returnType": "List", + "namespace": "Volo.Docs.Documents", "name": "GetUrlsAsync", "summary": null, "isAsync": true, @@ -406,6 +418,7 @@ }, { "returnType": "DocumentParametersDto", + "namespace": "Volo.Docs.Documents", "name": "GetParametersAsync", "summary": null, "isAsync": true, diff --git a/modules/docs/src/Volo.Docs.Domain.Shared/Volo.Docs.Domain.Shared.abppkg.analyze.json b/modules/docs/src/Volo.Docs.Domain.Shared/Volo.Docs.Domain.Shared.abppkg.analyze.json index 99859ba391..f25d8b5f85 100644 --- a/modules/docs/src/Volo.Docs.Domain.Shared/Volo.Docs.Domain.Shared.abppkg.analyze.json +++ b/modules/docs/src/Volo.Docs.Domain.Shared/Volo.Docs.Domain.Shared.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Docs.Domain.Shared", - "hash": "cde21886d0014f55d0917549fc979627", + "hash": "", "contents": [ { "namespace": "Volo.Docs", diff --git a/modules/docs/src/Volo.Docs.Domain.Shared/Volo/Docs/Documents/DocumentRenderErrorEvent.cs b/modules/docs/src/Volo.Docs.Domain.Shared/Volo/Docs/Documents/DocumentRenderErrorEvent.cs new file mode 100644 index 0000000000..f837c740e7 --- /dev/null +++ b/modules/docs/src/Volo.Docs.Domain.Shared/Volo/Docs/Documents/DocumentRenderErrorEvent.cs @@ -0,0 +1,14 @@ +using System.Collections.Generic; + +namespace Volo.Docs.Documents; + +public class DocumentRenderErrorEvent +{ + public string Name { get; set; } + + public string ErrorMessage { get; set; } + + public string Url { get; set; } + + public Dictionary UserPreferences { get; set; } +} \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Domain.Shared/Volo/Docs/Documents/NavigationNode.cs b/modules/docs/src/Volo.Docs.Domain.Shared/Volo/Docs/Documents/NavigationNode.cs index 6ecf7eb204..2f1afce342 100644 --- a/modules/docs/src/Volo.Docs.Domain.Shared/Volo/Docs/Documents/NavigationNode.cs +++ b/modules/docs/src/Volo.Docs.Domain.Shared/Volo/Docs/Documents/NavigationNode.cs @@ -29,12 +29,17 @@ namespace Volo.Docs.Documents public DateTime? LastSignificantUpdateTime { get; set; } public bool IsSelected(string documentName) + { + return FindNavigation(documentName) != null; + } + + public NavigationNode FindNavigation(string documentName) { if (documentName == null) { - return false; + return null; } - + var path = Path ?? string.Empty; var pathHasExtension = System.IO.Path.HasExtension(path); @@ -44,26 +49,26 @@ namespace Volo.Docs.Documents path = path.EnsureEndsWith('/') + "index" + extension; } - if (string.Equals(documentName, path, StringComparison.OrdinalIgnoreCase)) { - return true; + return this; } if (Items == null) { - return false; + return null; } foreach (var childItem in Items) { - if (childItem.IsSelected(documentName)) + var node = childItem.FindNavigation(documentName); + if (node != null) { - return true; + return node; } } - return false; + return null; } } diff --git a/modules/docs/src/Volo.Docs.Domain/Volo.Docs.Domain.abppkg.analyze.json b/modules/docs/src/Volo.Docs.Domain/Volo.Docs.Domain.abppkg.analyze.json index 27b92c495b..3e6a93851c 100644 --- a/modules/docs/src/Volo.Docs.Domain/Volo.Docs.Domain.abppkg.analyze.json +++ b/modules/docs/src/Volo.Docs.Domain/Volo.Docs.Domain.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Docs.Domain", - "hash": "5b3b84e3cbb3954883258e6ceb4c6f98", + "hash": "", "contents": [ { "namespace": "Volo.Docs", @@ -157,6 +157,7 @@ "methods": [ { "returnType": "Void", + "namespace": "Volo.Docs.Projects", "name": "SetName", "summary": null, "isAsync": false, @@ -173,6 +174,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Docs.Projects", "name": "SetFormat", "summary": null, "isAsync": false, @@ -189,6 +191,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Docs.Projects", "name": "SetNavigationDocumentName", "summary": null, "isAsync": false, @@ -205,6 +208,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Docs.Projects", "name": "SetParametersDocumentName", "summary": null, "isAsync": false, @@ -221,6 +225,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Docs.Projects", "name": "SetDefaultDocumentName", "summary": null, "isAsync": false, @@ -350,6 +355,7 @@ "methods": [ { "returnType": "Void", + "namespace": "Volo.Docs.Documents", "name": "AddContributor", "summary": null, "isAsync": false, @@ -381,6 +387,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Docs.Documents", "name": "RemoveAllContributors", "summary": null, "isAsync": false, @@ -391,6 +398,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Docs.Documents", "name": "RemoveContributor", "summary": null, "isAsync": false, @@ -417,6 +425,7 @@ }, { "returnType": "DocumentContributor", + "namespace": "Volo.Docs.Documents", "name": "FindContributor", "summary": null, "isAsync": false, @@ -550,6 +559,7 @@ "methods": [ { "returnType": "Document", + "namespace": "Volo.Docs.GitHub.Documents", "name": "GetDocumentAsync", "summary": null, "isAsync": true, @@ -586,6 +596,7 @@ }, { "returnType": "List", + "namespace": "Volo.Docs.GitHub.Documents", "name": "GetVersionsAsync", "summary": null, "isAsync": true, @@ -602,6 +613,7 @@ }, { "returnType": "DocumentResource", + "namespace": "Volo.Docs.GitHub.Documents", "name": "GetResource", "summary": null, "isAsync": true, @@ -633,6 +645,7 @@ }, { "returnType": "LanguageConfig", + "namespace": "Volo.Docs.GitHub.Documents", "name": "GetLanguageListAsync", "summary": null, "isAsync": true, @@ -688,6 +701,7 @@ "methods": [ { "returnType": "Boolean", + "namespace": "Volo.Docs.GitHub.Documents", "name": "HasPatchSignificantChanges", "summary": null, "isAsync": false, @@ -738,6 +752,7 @@ "methods": [ { "returnType": "Document", + "namespace": "Volo.Docs.FileSystem.Documents", "name": "GetDocumentAsync", "summary": null, "isAsync": true, @@ -774,6 +789,7 @@ }, { "returnType": "List", + "namespace": "Volo.Docs.FileSystem.Documents", "name": "GetVersionsAsync", "summary": null, "isAsync": true, @@ -790,6 +806,7 @@ }, { "returnType": "LanguageConfig", + "namespace": "Volo.Docs.FileSystem.Documents", "name": "GetLanguageListAsync", "summary": null, "isAsync": true, @@ -811,6 +828,7 @@ }, { "returnType": "DocumentResource", + "namespace": "Volo.Docs.FileSystem.Documents", "name": "GetResource", "summary": null, "isAsync": true, @@ -876,6 +894,7 @@ "methods": [ { "returnType": "Void", + "namespace": "Volo.Docs.Documents.FullSearch.Elastic", "name": "CreateIndexIfNeededAsync", "summary": null, "isAsync": true, @@ -892,6 +911,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Docs.Documents.FullSearch.Elastic", "name": "AddOrUpdateAsync", "summary": null, "isAsync": true, @@ -913,6 +933,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Docs.Documents.FullSearch.Elastic", "name": "AddOrUpdateManyAsync", "summary": null, "isAsync": true, @@ -934,6 +955,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Docs.Documents.FullSearch.Elastic", "name": "DeleteAsync", "summary": null, "isAsync": true, @@ -955,6 +977,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Docs.Documents.FullSearch.Elastic", "name": "DeleteAllAsync", "summary": null, "isAsync": true, @@ -971,6 +994,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Docs.Documents.FullSearch.Elastic", "name": "DeleteAllByProjectIdAsync", "summary": null, "isAsync": true, @@ -991,7 +1015,8 @@ ] }, { - "returnType": "List", + "returnType": "EsDocumentResult", + "namespace": "Volo.Docs.Documents.FullSearch.Elastic", "name": "SearchAsync", "summary": null, "isAsync": true, @@ -1038,6 +1063,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Docs.Documents.FullSearch.Elastic", "name": "ValidateElasticSearchEnabled", "summary": null, "isAsync": false, @@ -1116,6 +1142,7 @@ "methods": [ { "returnType": "List", + "namespace": "Volo.Docs.Projects", "name": "GetListAsync", "summary": null, "isAsync": true, @@ -1147,6 +1174,7 @@ }, { "returnType": "List", + "namespace": "Volo.Docs.Projects", "name": "GetListWithoutDetailsAsync", "summary": null, "isAsync": true, @@ -1163,6 +1191,7 @@ }, { "returnType": "Project", + "namespace": "Volo.Docs.Projects", "name": "GetByShortNameAsync", "summary": null, "isAsync": true, @@ -1184,6 +1213,7 @@ }, { "returnType": "Boolean", + "namespace": "Volo.Docs.Projects", "name": "ShortNameExistsAsync", "summary": null, "isAsync": true, @@ -1241,6 +1271,7 @@ "methods": [ { "returnType": "List", + "namespace": "Volo.Docs.Documents", "name": "GetListWithoutDetailsByProjectId", "summary": null, "isAsync": true, @@ -1262,6 +1293,7 @@ }, { "returnType": "List", + "namespace": "Volo.Docs.Documents", "name": "GetUniqueListDocumentInfoAsync", "summary": null, "isAsync": true, @@ -1278,6 +1310,7 @@ }, { "returnType": "List", + "namespace": "Volo.Docs.Documents", "name": "GetListByProjectId", "summary": null, "isAsync": true, @@ -1297,8 +1330,90 @@ } ] }, + { + "returnType": "List", + "namespace": "Volo.Docs.Documents", + "name": "GetUniqueDocumentsByProjectIdPagedAsync", + "summary": null, + "isAsync": true, + "isPublic": true, + "isPrivate": false, + "isStatic": false, + "parameters": [ + { + "type": "Guid", + "name": "projectId", + "isOptional": false + }, + { + "type": "Int32", + "name": "skipCount", + "isOptional": false + }, + { + "type": "Int32", + "name": "maxResultCount", + "isOptional": false + }, + { + "type": "CancellationToken", + "name": "cancellationToken", + "isOptional": true + } + ] + }, + { + "returnType": "Int64", + "namespace": "Volo.Docs.Documents", + "name": "GetUniqueDocumentCountByProjectIdAsync", + "summary": null, + "isAsync": true, + "isPublic": true, + "isPrivate": false, + "isStatic": false, + "parameters": [ + { + "type": "Guid", + "name": "projectId", + "isOptional": false + }, + { + "type": "CancellationToken", + "name": "cancellationToken", + "isOptional": true + } + ] + }, + { + "returnType": "Void", + "namespace": "Volo.Docs.Documents", + "name": "UpdateProjectLastCachedTimeAsync", + "summary": null, + "isAsync": true, + "isPublic": true, + "isPrivate": false, + "isStatic": false, + "parameters": [ + { + "type": "Guid", + "name": "projectId", + "isOptional": false + }, + { + "type": "DateTime", + "name": "cachedTime", + "isOptional": false + }, + { + "type": "CancellationToken", + "name": "cancellationToken", + "isOptional": true + } + ] + }, { "returnType": "Document", + "namespace": "Volo.Docs.Documents", "name": "FindAsync", "summary": null, "isAsync": true, @@ -1338,8 +1453,51 @@ } ] }, + { + "returnType": "Document", + "namespace": "Volo.Docs.Documents", + "name": "FindAsync", + "summary": null, + "isAsync": true, + "isPublic": true, + "isPrivate": false, + "isStatic": false, + "parameters": [ + { + "type": "Guid", + "name": "projectId", + "isOptional": false + }, + { + "type": "List", + "name": "possibleNames", + "isOptional": false + }, + { + "type": "String", + "name": "languageCode", + "isOptional": false + }, + { + "type": "String", + "name": "version", + "isOptional": false + }, + { + "type": "Boolean", + "name": "includeDetails", + "isOptional": true + }, + { + "type": "CancellationToken", + "name": "cancellationToken", + "isOptional": true + } + ] + }, { "returnType": "Void", + "namespace": "Volo.Docs.Documents", "name": "DeleteAsync", "summary": null, "isAsync": true, @@ -1381,6 +1539,7 @@ }, { "returnType": "List", + "namespace": "Volo.Docs.Documents", "name": "GetListAsync", "summary": null, "isAsync": true, @@ -1412,6 +1571,7 @@ }, { "returnType": "List", + "namespace": "Volo.Docs.Documents", "name": "GetAllAsync", "summary": null, "isAsync": true, @@ -1513,6 +1673,7 @@ }, { "returnType": "Int64", + "namespace": "Volo.Docs.Documents", "name": "GetAllCountAsync", "summary": null, "isAsync": true, @@ -1614,6 +1775,7 @@ }, { "returnType": "Document", + "namespace": "Volo.Docs.Documents", "name": "GetAsync", "summary": null, "isAsync": true, diff --git a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/sv.json b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/sv.json new file mode 100644 index 0000000000..2ec28362f0 --- /dev/null +++ b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/sv.json @@ -0,0 +1,48 @@ +{ + "culture": "sv", + "texts": { + "Documents": "Dokument", + "BackToWebsite": "Tillbaka till webbplatsen", + "Contributors": "Medverkande", + "ShareOn": "Dela pĂ„", + "Version": "Version", + "Edit": "Redigera", + "LastEditTime": "Sista redigeringen", + "Delete": "Radera", + "ClearCache": "Rensa cache", + "ClearCacheConfirmationMessage": "Är du sĂ€ker pĂ„ att du vill rensa alla cacheminnen för projekt \"{0}\"", + "ReIndexAllProjects": "Omindexera alla projekt", + "ReIndexProject": "ReIndex-projektet", + "ReIndexProjectConfirmationMessage": "Är du sĂ€ker pĂ„ att omindexera för projekt \"{0}\"", + "SuccessfullyReIndexProject": "FramgĂ„ngsrikt omindexerad: \"{0}\"", + "ReIndexAllProjectConfirmationMessage": "Är du sĂ€ker pĂ„ att omindexera alla projekt?", + "SuccessfullyReIndexAllProject": "FramgĂ„ngsrik omindexering av alla projekt", + "InThisDocument": "I detta dokument", + "GoToTop": "GĂ„ till toppen", + "Projects": "Projekt", + "NoProjectWarning": "Det finns inga projekt Ă€nnu!", + "DocumentNotFound": "Oops, det begĂ€rda dokumentet hittades inte!", + "ProjectNotFound": "Oops, det begĂ€rda projektet hittades inte!", + "NavigationDocumentNotFound": "Denna version har inte nĂ„got navigationsdokument!", + "DocumentNotFoundInSelectedLanguage": "Dokumentet pĂ„ det sprĂ„k du ville ha hittades inte. Dokumentet visas pĂ„ standardsprĂ„ket.", + "FilterTopics": "Filtrera Ă€mnen", + "FullSearch": "Sök i dokument", + "Volo.Docs.Domain:010001": "Elastisk sökning Ă€r inte aktiverad.", + "MultipleVersionDocumentInfo": "Det finns flera versioner av detta dokument. VĂ€lj de alternativ som passar dig bĂ€st.", + "New": "Nya", + "Upd": "Uppdatering", + "NewExplanation": "Skapad under de senaste tvĂ„ veckorna.", + "UpdatedExplanation": "Uppdaterad under de senaste tvĂ„ veckorna.", + "Volo.Docs.Domain:010002": "Kortnamn {Kortnamn} finns redan.", + "Preview": "förhandsvisning", + "Search": "Sök", + "SearchResults": "Sökresultat", + "SearchInTheAllDocuments": "Sök i alla dokument", + "Next": "NĂ€sta", + "Previous": "FöregĂ„ende", + "ProjectDeletionWarningMessage": "Projektet kommer att raderas.", + "Docs_Page_Title": "ABP-dokumentation", + "Docs_Page_Description": "FĂ„ tillgĂ„ng till omfattande guider och API-referenser i ABP Documentation, vilket underlĂ€ttar utveckling och felsökning.", + "GoogleTranslate": "Google ÖversĂ€tt" + } +} \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo.Docs.EntityFrameworkCore.abppkg.analyze.json b/modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo.Docs.EntityFrameworkCore.abppkg.analyze.json index 1ee0fd3a6e..df487b23e9 100644 --- a/modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo.Docs.EntityFrameworkCore.abppkg.analyze.json +++ b/modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo.Docs.EntityFrameworkCore.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Docs.EntityFrameworkCore", - "hash": "cda98b30d45c0f9999f98a05e8368841", + "hash": "", "contents": [ { "namespace": "Volo.Docs.EntityFrameworkCore", @@ -67,27 +67,27 @@ { "namespace": "Volo.Docs.EntityFrameworkCore", "connectionStringName": "Docs", - "databaseTables": [ - { - "entityFullName": "Volo.Docs.Documents.Document", - "contentType": "databaseTable", - "name": "DocsDocuments", - "summary": null - }, - { - "entityFullName": "Volo.Docs.Documents.DocumentContributor", - "contentType": "databaseTable", - "name": "DocsDocumentContributors", - "summary": null - }, + "databaseTables": [], + "replacedDbContexts": [], + "modelBuilderExtensionMethods": [ { - "entityFullName": "Volo.Docs.Projects.Project", - "contentType": "databaseTable", - "name": "DocsProjects", - "summary": null + "returnType": "Void", + "namespace": "Volo.Docs.EntityFrameworkCore", + "name": "ConfigureDocs", + "summary": null, + "isAsync": false, + "isPublic": true, + "isPrivate": false, + "isStatic": true, + "parameters": [ + { + "type": "ModelBuilder", + "name": "builder", + "isOptional": false + } + ] } ], - "replacedDbContexts": [], "implementingInterfaces": [ { "name": "IInfrastructure", @@ -143,6 +143,12 @@ "declaringAssemblyName": "Volo.Abp.EntityFrameworkCore", "fullName": "Volo.Abp.EntityFrameworkCore.IEfCoreDbContext" }, + { + "name": "IAbpEfCoreDbFunctionContext", + "namespace": "Volo.Abp.EntityFrameworkCore.GlobalFilters", + "declaringAssemblyName": "Volo.Abp.EntityFrameworkCore", + "fullName": "Volo.Abp.EntityFrameworkCore.GlobalFilters.IAbpEfCoreDbFunctionContext" + }, { "name": "ITransientDependency", "namespace": "Volo.Abp.DependencyInjection", diff --git a/modules/docs/src/Volo.Docs.HttpApi.Client/Volo.Docs.HttpApi.Client.abppkg.analyze.json b/modules/docs/src/Volo.Docs.HttpApi.Client/Volo.Docs.HttpApi.Client.abppkg.analyze.json index 7f356ba232..8f97c28e30 100644 --- a/modules/docs/src/Volo.Docs.HttpApi.Client/Volo.Docs.HttpApi.Client.abppkg.analyze.json +++ b/modules/docs/src/Volo.Docs.HttpApi.Client/Volo.Docs.HttpApi.Client.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Docs.HttpApi.Client", - "hash": "551e49e8d7abd9c47376edaae70ab7f8", + "hash": "", "contents": [ { "namespace": "Volo.Docs", diff --git a/modules/docs/src/Volo.Docs.HttpApi/Volo.Docs.HttpApi.abppkg.analyze.json b/modules/docs/src/Volo.Docs.HttpApi/Volo.Docs.HttpApi.abppkg.analyze.json index c9a125a359..cc16357478 100644 --- a/modules/docs/src/Volo.Docs.HttpApi/Volo.Docs.HttpApi.abppkg.analyze.json +++ b/modules/docs/src/Volo.Docs.HttpApi/Volo.Docs.HttpApi.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Docs.HttpApi", - "hash": "26ffc9a7630f4d5dddf4eea1ac4c51cc", + "hash": "", "contents": [ { "namespace": "Volo.Docs", @@ -63,6 +63,228 @@ "contentType": "abpModule", "name": "DocsHttpApiModule", "summary": null + }, + { + "apis": [ + { + "path": "api/docs/projects", + "method": "GET", + "groupName": "DocsProject", + "responseType": "Volo.Abp.Application.Dtos.ListResultDto`1[Volo.Docs.Projects.ProjectDto]", + "responseTypeAsJson": "", + "parameterDescriptions": [] + }, + { + "path": "api/docs/projects/{shortName}", + "method": "GET", + "groupName": "DocsProject", + "responseType": "Volo.Docs.Projects.ProjectDto", + "responseTypeAsJson": "", + "parameterDescriptions": [ + { + "name": "shortName", + "type": "String" + } + ] + }, + { + "path": "api/docs/projects/{shortName}/defaultLanguage", + "method": "GET", + "groupName": "DocsProject", + "responseType": "System.String", + "responseTypeAsJson": "\"string\"", + "parameterDescriptions": [ + { + "name": "shortName", + "type": "String" + }, + { + "name": "version", + "type": "String" + } + ] + }, + { + "path": "api/docs/projects/{shortName}/versions", + "method": "GET", + "groupName": "DocsProject", + "responseType": "Volo.Abp.Application.Dtos.ListResultDto`1[Volo.Docs.Projects.VersionInfoDto]", + "responseTypeAsJson": "{\r\n \"items\": [\r\n {\r\n \"displayName\": \"string\",\r\n \"name\": \"string\"\r\n }\r\n ]\r\n}", + "parameterDescriptions": [ + { + "name": "shortName", + "type": "String" + } + ] + }, + { + "path": "api/docs/projects/{shortName}/{version}/languageList", + "method": "GET", + "groupName": "DocsProject", + "responseType": "Volo.Docs.Documents.LanguageConfig", + "responseTypeAsJson": "{\r\n \"languages\": [\r\n {\r\n \"displayName\": \"string\",\r\n \"code\": \"string\",\r\n \"isDefault\": false\r\n }\r\n ]\r\n}", + "parameterDescriptions": [ + { + "name": "shortName", + "type": "String" + }, + { + "name": "version", + "type": "String" + } + ] + }, + { + "path": "api/docs/documents", + "method": "GET", + "groupName": "DocsDocument", + "responseType": "Volo.Docs.Documents.DocumentWithDetailsDto", + "responseTypeAsJson": "", + "parameterDescriptions": [ + { + "name": "ProjectId", + "type": "Guid" + }, + { + "name": "Name", + "type": "String" + }, + { + "name": "Version", + "type": "String" + }, + { + "name": "LanguageCode", + "type": "String" + } + ] + }, + { + "path": "api/docs/documents/default", + "method": "GET", + "groupName": "DocsDocument", + "responseType": "Volo.Docs.Documents.DocumentWithDetailsDto", + "responseTypeAsJson": "", + "parameterDescriptions": [ + { + "name": "ProjectId", + "type": "Guid" + }, + { + "name": "Version", + "type": "String" + }, + { + "name": "LanguageCode", + "type": "String" + } + ] + }, + { + "path": "api/docs/documents/navigation", + "method": "GET", + "groupName": "DocsDocument", + "responseType": "Volo.Docs.Documents.NavigationNode", + "responseTypeAsJson": "", + "parameterDescriptions": [ + { + "name": "ProjectId", + "type": "Guid" + }, + { + "name": "Version", + "type": "String" + }, + { + "name": "LanguageCode", + "type": "String" + } + ] + }, + { + "path": "api/docs/documents/resource", + "method": "GET", + "groupName": "DocsDocument", + "responseType": "Volo.Docs.Documents.DocumentResourceDto", + "responseTypeAsJson": "", + "parameterDescriptions": [ + { + "name": "ProjectId", + "type": "Guid" + }, + { + "name": "Name", + "type": "String" + }, + { + "name": "Version", + "type": "String" + }, + { + "name": "LanguageCode", + "type": "String" + } + ] + }, + { + "path": "api/docs/documents/search", + "method": "POST", + "groupName": "DocsDocument", + "responseType": "Volo.Abp.Application.Dtos.PagedResultDto`1[Volo.Docs.Documents.DocumentSearchOutput]", + "responseTypeAsJson": "{\r\n \"totalCount\": 0,\r\n \"items\": [\r\n {\r\n \"name\": \"string\",\r\n \"fileName\": \"string\",\r\n \"version\": \"string\",\r\n \"languageCode\": \"string\",\r\n \"highlight\": [\r\n \"string\"\r\n ]\r\n }\r\n ]\r\n}", + "parameterDescriptions": [ + { + "name": "input", + "type": "DocumentSearchInput" + } + ] + }, + { + "path": "api/docs/documents/full-search-enabled", + "method": "GET", + "groupName": "DocsDocument", + "responseType": "System.Boolean", + "responseTypeAsJson": "true", + "parameterDescriptions": [] + }, + { + "path": "api/docs/documents/links", + "method": "GET", + "groupName": "DocsDocument", + "responseType": "System.Collections.Generic.List`1[System.String]", + "responseTypeAsJson": "[\r\n \"string\"\r\n]", + "parameterDescriptions": [ + { + "name": "prefix", + "type": "String" + } + ] + }, + { + "path": "api/docs/documents/parameters", + "method": "GET", + "groupName": "DocsDocument", + "responseType": "Volo.Docs.Documents.DocumentParametersDto", + "responseTypeAsJson": "{\r\n \"parameters\": [\r\n {\r\n \"name\": \"string\",\r\n \"displayName\": \"string\",\r\n \"values\": {\r\n \"string\": \"string\"\r\n }\r\n }\r\n ]\r\n}", + "parameterDescriptions": [ + { + "name": "ProjectId", + "type": "Guid" + }, + { + "name": "Version", + "type": "String" + }, + { + "name": "LanguageCode", + "type": "String" + } + ] + } + ], + "contentType": "httpApi", + "name": "Defined Http Apis", + "summary": null } ] } \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.MongoDB/Volo.Docs.MongoDB.abppkg.analyze.json b/modules/docs/src/Volo.Docs.MongoDB/Volo.Docs.MongoDB.abppkg.analyze.json index 287cbacf5b..e6dde9a37b 100644 --- a/modules/docs/src/Volo.Docs.MongoDB/Volo.Docs.MongoDB.abppkg.analyze.json +++ b/modules/docs/src/Volo.Docs.MongoDB/Volo.Docs.MongoDB.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Docs.MongoDB", - "hash": "010d09056500caecfaeb5cbb7f049f0a", + "hash": "", "contents": [ { "namespace": "Volo.Docs.MongoDB", @@ -69,15 +69,15 @@ "connectionStringName": "Docs", "databaseCollections": [ { - "entityFullName": "Volo.Docs.Documents.Document", + "entityFullName": "Volo.Docs.Projects.Project", "contentType": "databaseCollection", - "name": "DocsDocumentS", + "name": "Projects", "summary": null }, { - "entityFullName": "Volo.Docs.Projects.Project", + "entityFullName": "Volo.Docs.Documents.Document", "contentType": "databaseCollection", - "name": "DocsProjects", + "name": "Documents", "summary": null } ], diff --git a/modules/docs/src/Volo.Docs.Web/Bundling/PrismjsScriptBundleContributorDocsExtension.cs b/modules/docs/src/Volo.Docs.Web/Bundling/PrismjsScriptBundleContributorDocsExtension.cs index 3fc129bf55..0be1e7cb29 100644 --- a/modules/docs/src/Volo.Docs.Web/Bundling/PrismjsScriptBundleContributorDocsExtension.cs +++ b/modules/docs/src/Volo.Docs.Web/Bundling/PrismjsScriptBundleContributorDocsExtension.cs @@ -23,7 +23,8 @@ namespace Volo.Docs.Bundling "scss", "sql", "typescript", - "diff" + "diff", + "yaml" }; public override void ConfigureBundle(BundleConfigurationContext context) diff --git a/modules/docs/src/Volo.Docs.Web/DocsUiOptions.cs b/modules/docs/src/Volo.Docs.Web/DocsUiOptions.cs index 67af1f3197..702536c31d 100644 --- a/modules/docs/src/Volo.Docs.Web/DocsUiOptions.cs +++ b/modules/docs/src/Volo.Docs.Web/DocsUiOptions.cs @@ -36,6 +36,8 @@ namespace Volo.Docs public bool MultiLanguageMode { get; set; } = true; public SingleProjectModeOptions SingleProjectMode { get; } = new (); + + public bool EnableEnlargeImage { get; set; } = true; private string GetFormattedRoutePrefix() { diff --git a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Index.cshtml.cs b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Index.cshtml.cs index 82b43dbfca..a5a40eb43b 100644 --- a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Index.cshtml.cs +++ b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Index.cshtml.cs @@ -29,7 +29,7 @@ namespace Volo.Docs.Pages.Documents { if (_uiOptions.SingleProjectMode.Enable) { - return RedirectToPage("/Documents/Project/Index"); + return RedirectToPage("/Documents/Project/Index", new {version = DocsAppConsts.Latest }); } var listResult = await _projectAppService.GetListAsync(); diff --git a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml index b60ad9507f..2167119a0d 100644 --- a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml +++ b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml @@ -23,12 +23,13 @@ @inject IPageLayout PageLayout @inject IHtmlLocalizer L @inject IOptions DocsWebGoogleOptions +@inject IOptions DocsUiOptions @model IndexModel @{ ViewBag.FluidLayout = true; Layout = ThemeManager.CurrentTheme.GetEmptyLayout(); - PageLayout.Content.Title = Model.DocumentName?.Replace("-", " "); + PageLayout.Content.Title = Model.DocumentPageTitle; ViewBag.Description = Model.GetDescription(); ViewBag.CanonicalUrl = Model.IsLatestVersion ? null : Model.GetFullUrlOfTheLatestDocument(); //issue #12355 } @@ -40,6 +41,10 @@ + @if (DocsUiOptions.Value.EnableEnlargeImage) + { + + } } @@ -57,6 +62,10 @@ + @if (DocsUiOptions.Value.EnableEnlargeImage) + { + + } if (DocsWebGoogleOptions.Value.EnableGoogleTranslate) { diff --git a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml.cs b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml.cs index c3c1ae9643..2f029fcfce 100644 --- a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml.cs +++ b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Globalization; using System.Linq; +using System.Net; using System.Text; using System.Text.RegularExpressions; using System.Threading.Tasks; @@ -16,6 +17,7 @@ using Volo.Abp.Application.Dtos; using Volo.Abp.AspNetCore.Mvc.UI.RazorPages; using Volo.Abp.Data; using Volo.Abp.Domain.Entities; +using Volo.Abp.EventBus.Local; using Volo.Docs.Documents; using Volo.Docs.HtmlConverting; using Volo.Docs.Models; @@ -55,6 +57,8 @@ namespace Volo.Docs.Pages.Documents.Project public List LanguageSelectListItems { get; set; } public string DocumentNameWithExtension { get; private set; } + + public string DocumentPageTitle { get; private set; } public DocumentWithDetailsDto Document { get; private set; } @@ -96,6 +100,8 @@ namespace Volo.Docs.Pages.Documents.Project private readonly DocsUiOptions _uiOptions; protected IDocsLinkGenerator DocsLinkGenerator => LazyServiceProvider.LazyGetRequiredService(); + + protected ILocalEventBus LocalEventBus => LazyServiceProvider.LazyGetRequiredService(); public IndexModel( IDocumentAppService documentAppService, @@ -455,12 +461,23 @@ namespace Volo.Docs.Pages.Documents.Project Version = Version } ); + } catch (DocumentNotFoundException) //TODO: What if called on a remote service which may return 404 { return; } } + + private void SetDocumentPageTitle() + { + DocumentPageTitle = DocumentName?.Replace("-", " "); + var match = Regex.Match(Document.Content, @"#(?.+)"); + if (match.Success && match.Groups.TryGetValue("PageTitle", out var group)) + { + DocumentPageTitle = Regex.Replace(group.Value, "<.*?>", string.Empty).Trim(); + } + } public string CreateVersionLink(VersionInfoViewModel latestVersion, string version, string documentName = null) { @@ -495,6 +512,7 @@ namespace Volo.Docs.Pages.Documents.Project Document = await GetSpecificDocumentOrDefaultAsync(language); DocumentLanguageCode = language; DocumentNameWithExtension = Document.Name; + SetDocumentPageTitle(); await ConvertDocumentContentToHtmlAsync(); return true; } @@ -540,7 +558,14 @@ namespace Volo.Docs.Pages.Documents.Project DocumentNavigationsDto = await _documentSectionRenderer.GetDocumentNavigationsAsync(Document.Content); - Document.Content = await _documentSectionRenderer.RenderAsync(Document.Content, UserPreferences, partialTemplates); + try + { + Document.Content = await _documentSectionRenderer.RenderAsync(Document.Content, UserPreferences, partialTemplates); + } + catch (Exception e) + { + await OnSectionRenderingErrorAsync(e); + } } var converter = _documentToHtmlConverterFactory.Create(Document.Format ?? Project.Format); @@ -552,7 +577,10 @@ namespace Volo.Docs.Pages.Documents.Project Document.LocalDirectory ); - content = HtmlNormalizer.WrapImagesWithinAnchors(content); + if (!_uiOptions.EnableEnlargeImage) + { + content = HtmlNormalizer.WrapImagesWithinAnchors(content); + } //todo find a way to make it on client in prismJS configuration (eg: map C# => csharp) content = HtmlNormalizer.ReplaceCodeBlocksLanguage( @@ -563,6 +591,22 @@ namespace Volo.Docs.Pages.Documents.Project Document.Content = content; } + + protected virtual async Task OnSectionRenderingErrorAsync(Exception e) + { + var message = $"Error occurred during the rendering of this document. The document is not valid: {e.Message}"; + Document.Content = $"````txt{Environment.NewLine}{message}{Environment.NewLine}````"; + await LocalEventBus.PublishAsync(new DocumentRenderErrorEvent + { + ErrorMessage = e.Message, + Name = Document.Name, + Url = Request.GetDisplayUrl(), + UserPreferences = UserPreferences + }); + + // Slow down with crawling + HttpContext.Response.StatusCode = (int)HttpStatusCode.InternalServerError; + } private async Task> GetDocumentPartialTemplatesAsync() { diff --git a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/enlarge-image.css b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/enlarge-image.css new file mode 100644 index 0000000000..1113d2f914 --- /dev/null +++ b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/enlarge-image.css @@ -0,0 +1,87 @@ +/* The Modal (background) */ +.docs-image-modal { + display: none; /* Hidden by default */ + position: fixed; /* Stay in place */ + z-index: 1; /* Sit on top */ + padding-top: 100px; /* Location of the box */ + left: 0; + top: 0; + width: 100%; /* Full width */ + height: 100%; /* Full height */ + overflow: auto; /* Enable scroll if needed */ + background-color: rgb(41,45,50); /* Fallback color */ + background-color: rgb(41 45 50 / 50%); + cursor: zoom-out; +} + +.docs-image-modal.show { + z-index: 9999; + align-items: center; + display: flex; + padding-top: 0; +} + +/* Modal Content (image) */ +.docs-image-modal .docs-image-modal-content { + margin: auto; + display: block; + background: #fff; + + position: relative; + flex-direction: column; + background-clip: padding-box; + outline: 0; +} + +/* Add Animation */ +.docs-image-modal .docs-image-modal-content{ + -webkit-animation-name: zoom; + -webkit-animation-duration: 0.6s; + animation-name: zoom; + animation-duration: 0.3s; +} + +@-webkit-keyframes zoom { + from {-webkit-transform:scale(0)} + to {-webkit-transform:scale(1)} +} + +@keyframes zoom { + from {transform:scale(0)} + to {transform:scale(1)} +} +/* The Close Button */ +.docs-image-modal .close { + position: absolute; + top: 15px; + right: 35px; + color: #f1f1f1; + transition: 0.3s; + font-size: 48px; + font-weight: 100; +} + +.docs-image-modal .close:hover, +.docs-image-modal .close:focus { + color: #bbb; + text-decoration: none; + cursor: pointer; +} + +/* 100% Image Width on Smaller Screens */ +@media only screen and (max-width: 768px){ + .docs-image-modal .docs-image-modal-content { + max-width: 95vw; + } +} + +@media only screen and (min-width: 768px){ + .docs-image-modal .docs-image-modal-content { + max-width: 80vw; + max-height: 80vh; + } +} + +.docs-enlarge-image { + cursor: zoom-in; +} \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/enlarge-image.js b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/enlarge-image.js new file mode 100644 index 0000000000..4e402d8abf --- /dev/null +++ b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/enlarge-image.js @@ -0,0 +1,34 @@ +$(function () { + var $enlargeImage = $("article img"); + + if (!$enlargeImage.length) { + return; + } + + $enlargeImage.addClass("docs-enlarge-image"); + + var $modal = $("#image-modal"); + + if (!$modal.length) { + $modal = $("
×
"); + $("body").append($modal); + } + + var modalImg = $modal.find("img"); + $enlargeImage.click(function () { + var width = $(this).width(); + var height = $(this).height(); + modalImg.attr("src", $(this).findWithSelf("img").attr("src")); + modalImg.css("min-width", width + "px"); + modalImg.css("min-height", height + "px"); + $modal.addClass("show"); + }); + + $modal.find(".close").click(modalClose); + + $modal.click(modalClose); + + function modalClose() { + $modal.removeClass("show"); + } +}); \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Web/Volo.Docs.Web.abppkg.analyze.json b/modules/docs/src/Volo.Docs.Web/Volo.Docs.Web.abppkg.analyze.json index 8577f013a9..e05caa0b3c 100644 --- a/modules/docs/src/Volo.Docs.Web/Volo.Docs.Web.abppkg.analyze.json +++ b/modules/docs/src/Volo.Docs.Web/Volo.Docs.Web.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Docs.Web", - "hash": "6de1a5d8b7e07b55bd1fc1f98dad11d0", + "hash": "", "contents": [ { "namespace": "Volo.Docs", @@ -83,6 +83,44 @@ "contentType": "abpModule", "name": "DocsWebModule", "summary": null + }, + { + "apis": [ + { + "path": "document-resources", + "method": "GET", + "groupName": "DocumentResource", + "responseType": "Volo.Abp.Http.RemoteServiceErrorResponse", + "responseTypeAsJson": "", + "parameterDescriptions": [ + { + "name": "ProjectId", + "type": "Guid" + }, + { + "name": "Name", + "type": "String" + }, + { + "name": "Version", + "type": "String" + }, + { + "name": "LanguageCode", + "type": "String" + } + ] + } + ], + "contentType": "httpApi", + "name": "Defined Http Apis", + "summary": null + }, + { + "namespace": "Volo.Docs.Pages.Documents.Project", + "contentType": "webPage", + "name": "IndexModel", + "summary": null } ] } \ No newline at end of file diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo.Abp.FeatureManagement.Application.Contracts.abppkg.analyze.json b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo.Abp.FeatureManagement.Application.Contracts.abppkg.analyze.json index 16b9522c12..fe7a26b081 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo.Abp.FeatureManagement.Application.Contracts.abppkg.analyze.json +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo.Abp.FeatureManagement.Application.Contracts.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Abp.FeatureManagement.Application.Contracts", - "hash": "a098bfbfeedbc75302632b819fbdd62c", + "hash": "", "contents": [ { "namespace": "Volo.Abp.FeatureManagement", @@ -75,7 +75,7 @@ "summary": null }, { - "displayName": "Manage Host features", + "displayName": "Manage host features", "isEnabled": true, "contentType": "permission", "name": "FeatureManagement.ManageHostFeatures", diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application/Volo.Abp.FeatureManagement.Application.abppkg.analyze.json b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application/Volo.Abp.FeatureManagement.Application.abppkg.analyze.json index af78f2dc02..96e583a191 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application/Volo.Abp.FeatureManagement.Application.abppkg.analyze.json +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application/Volo.Abp.FeatureManagement.Application.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Abp.FeatureManagement.Application", - "hash": "a9ca2b4f663694fa5d258984dc689f56", + "hash": "", "contents": [ { "namespace": "Volo.Abp.FeatureManagement", @@ -136,6 +136,7 @@ "methods": [ { "returnType": "GetFeatureListResultDto", + "namespace": "Volo.Abp.FeatureManagement", "name": "GetAsync", "summary": null, "isAsync": true, @@ -157,6 +158,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.FeatureManagement", "name": "UpdateAsync", "summary": null, "isAsync": true, @@ -183,6 +185,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.FeatureManagement", "name": "DeleteAsync", "summary": null, "isAsync": true, diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor.Server/Volo.Abp.FeatureManagement.Blazor.Server.abppkg.analyze.json b/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor.Server/Volo.Abp.FeatureManagement.Blazor.Server.abppkg.analyze.json new file mode 100644 index 0000000000..1b85033b80 --- /dev/null +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor.Server/Volo.Abp.FeatureManagement.Blazor.Server.abppkg.analyze.json @@ -0,0 +1,68 @@ +{ + "name": "Volo.Abp.FeatureManagement.Blazor.Server", + "hash": "", + "contents": [ + { + "namespace": "Volo.Abp.FeatureManagement.Blazor.Server", + "dependsOnModules": [ + { + "declaringAssemblyName": "Volo.Abp.FeatureManagement.Blazor", + "namespace": "Volo.Abp.FeatureManagement.Blazor", + "name": "AbpFeatureManagementBlazorModule" + }, + { + "declaringAssemblyName": "Volo.Abp.AspNetCore.Components.Server.Theming", + "namespace": "Volo.Abp.AspNetCore.Components.Server.Theming", + "name": "AbpAspNetCoreComponentsServerThemingModule" + } + ], + "implementingInterfaces": [ + { + "name": "IAbpModule", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IAbpModule" + }, + { + "name": "IOnPreApplicationInitialization", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IOnPreApplicationInitialization" + }, + { + "name": "IOnApplicationInitialization", + "namespace": "Volo.Abp", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.IOnApplicationInitialization" + }, + { + "name": "IOnPostApplicationInitialization", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IOnPostApplicationInitialization" + }, + { + "name": "IOnApplicationShutdown", + "namespace": "Volo.Abp", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.IOnApplicationShutdown" + }, + { + "name": "IPreConfigureServices", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IPreConfigureServices" + }, + { + "name": "IPostConfigureServices", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IPostConfigureServices" + } + ], + "contentType": "abpModule", + "name": "AbpFeatureManagementBlazorServerModule", + "summary": null + } + ] +} \ No newline at end of file diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor/Components/FeatureManagementModal.razor b/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor/Components/FeatureManagementModal.razor index 6b5a16fbb0..feebe23119 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor/Components/FeatureManagementModal.razor +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor/Components/FeatureManagementModal.razor @@ -5,7 +5,7 @@ - @L["Features"] + @L["Features"]@ProviderKeyDisplayName @if (Groups == null || !Groups.Any()) diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor/Components/FeatureManagementModal.razor.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor/Components/FeatureManagementModal.razor.cs index f8fe065bed..0d0728db71 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor/Components/FeatureManagementModal.razor.cs +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor/Components/FeatureManagementModal.razor.cs @@ -31,6 +31,7 @@ public partial class FeatureManagementModal protected string ProviderName; protected string ProviderKey; + protected string ProviderKeyDisplayName; protected string SelectedTabName; @@ -40,7 +41,7 @@ public partial class FeatureManagementModal protected Dictionary SelectionStringValues; - public virtual async Task OpenAsync([NotNull] string providerName, string providerKey = null) + public virtual async Task OpenAsync([NotNull] string providerName, string providerKey = null, string providerKeyDisplayName = null) { try { @@ -50,6 +51,11 @@ public partial class FeatureManagementModal ToggleValues = new Dictionary(); SelectionStringValues = new Dictionary(); + if (!providerKeyDisplayName.IsNullOrWhiteSpace()) + { + ProviderKeyDisplayName = $" - {providerKeyDisplayName}"; + } + var result = await FeatureAppService.GetAsync(ProviderName, ProviderKey); Groups = result?.Groups ?? new List(); diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor/Volo.Abp.FeatureManagement.Blazor.abppkg.analyze.json b/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor/Volo.Abp.FeatureManagement.Blazor.abppkg.analyze.json new file mode 100644 index 0000000000..1332348464 --- /dev/null +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor/Volo.Abp.FeatureManagement.Blazor.abppkg.analyze.json @@ -0,0 +1,90 @@ +{ + "name": "Volo.Abp.FeatureManagement.Blazor", + "hash": "", + "contents": [ + { + "namespace": "Volo.Abp.FeatureManagement.Blazor", + "dependsOnModules": [ + { + "declaringAssemblyName": "Volo.Abp.AspNetCore.Components.Web.Theming", + "namespace": "Volo.Abp.AspNetCore.Components.Web.Theming", + "name": "AbpAspNetCoreComponentsWebThemingModule" + }, + { + "declaringAssemblyName": "Volo.Abp.FeatureManagement.Application.Contracts", + "namespace": "Volo.Abp.FeatureManagement", + "name": "AbpFeatureManagementApplicationContractsModule" + }, + { + "declaringAssemblyName": "Volo.Abp.Features", + "namespace": "Volo.Abp.Features", + "name": "AbpFeaturesModule" + }, + { + "declaringAssemblyName": "Volo.Abp.SettingManagement.Blazor", + "namespace": "Volo.Abp.SettingManagement.Blazor", + "name": "AbpSettingManagementBlazorModule" + } + ], + "implementingInterfaces": [ + { + "name": "IAbpModule", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IAbpModule" + }, + { + "name": "IOnPreApplicationInitialization", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IOnPreApplicationInitialization" + }, + { + "name": "IOnApplicationInitialization", + "namespace": "Volo.Abp", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.IOnApplicationInitialization" + }, + { + "name": "IOnPostApplicationInitialization", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IOnPostApplicationInitialization" + }, + { + "name": "IOnApplicationShutdown", + "namespace": "Volo.Abp", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.IOnApplicationShutdown" + }, + { + "name": "IPreConfigureServices", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IPreConfigureServices" + }, + { + "name": "IPostConfigureServices", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IPostConfigureServices" + } + ], + "contentType": "abpModule", + "name": "AbpFeatureManagementBlazorModule", + "summary": null + }, + { + "namespace": "Volo.Abp.FeatureManagement.Blazor.Components", + "contentType": "webPage", + "name": "FeatureManagementModal", + "summary": null + }, + { + "namespace": "Volo.Abp.FeatureManagement.Blazor.Components.FeatureSettingGroup", + "contentType": "webPage", + "name": "FeatureSettingManagementComponent", + "summary": null + } + ] +} \ No newline at end of file diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo.Abp.FeatureManagement.Domain.Shared.abppkg.analyze.json b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo.Abp.FeatureManagement.Domain.Shared.abppkg.analyze.json index a383a8f2d2..441f9df896 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo.Abp.FeatureManagement.Domain.Shared.abppkg.analyze.json +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo.Abp.FeatureManagement.Domain.Shared.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Abp.FeatureManagement.Domain.Shared", - "hash": "7cf1adab77763451880c93c2ce5de54d", + "hash": "", "contents": [ { "namespace": "Volo.Abp.FeatureManagement", diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/sv.json b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/sv.json new file mode 100644 index 0000000000..fcdac9b109 --- /dev/null +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/sv.json @@ -0,0 +1,17 @@ +{ + "culture": "sv", + "texts": { + "Features": "Funktioner", + "NoFeatureFoundMessage": "Det finns inte nĂ„gon tillgĂ€nglig funktion.", + "ManageHostFeatures": "Hantera vĂ€rdfunktioner", + "ManageHostFeaturesText": "Du kan hantera funktionerna pĂ„ hostsidan genom att klicka pĂ„ följande knapp.", + "Permission:FeatureManagement": "Hantering av funktioner", + "Permission:FeatureManagement.ManageHostFeatures": "Hantera vĂ€rdfunktioner", + "Volo.Abp.FeatureManagement:InvalidFeatureValue": "{0} FunktionsvĂ€rdet Ă€r inte giltigt!", + "Menu:FeatureManagement": "Hantering av funktioner", + "ResetToDefault": "ÅterstĂ€ll till standard", + "ResetedToDefault": "ÅterstĂ€lld till standard", + "AreYouSure": "Är du sĂ€ker?", + "AreYouSureToResetToDefault": "Är du sĂ€ker pĂ„ att Ă„terstĂ€lla till standard?" + } +} \ No newline at end of file diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo.Abp.FeatureManagement.Domain.abppkg.analyze.json b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo.Abp.FeatureManagement.Domain.abppkg.analyze.json index e45b038fb4..3c2abaac23 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo.Abp.FeatureManagement.Domain.abppkg.analyze.json +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo.Abp.FeatureManagement.Domain.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Abp.FeatureManagement.Domain", - "hash": "7dc58fbace956cd5b28d943e0568d553", + "hash": "", "contents": [ { "namespace": "Volo.Abp.FeatureManagement", @@ -117,6 +117,7 @@ "methods": [ { "returnType": "Boolean", + "namespace": "Volo.Abp.FeatureManagement", "name": "HasSameData", "summary": null, "isAsync": false, @@ -133,6 +134,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.FeatureManagement", "name": "Patch", "summary": null, "isAsync": false, @@ -153,11 +155,6 @@ "namespace": "Volo.Abp.FeatureManagement", "primaryKeyType": "Guid", "properties": [ - { - "type": "System.Guid", - "name": "Id", - "summary": null - }, { "type": "System.String", "name": "GroupName", @@ -266,6 +263,7 @@ "methods": [ { "returnType": "Boolean", + "namespace": "Volo.Abp.FeatureManagement", "name": "HasSameData", "summary": null, "isAsync": false, @@ -282,6 +280,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.FeatureManagement", "name": "Patch", "summary": null, "isAsync": false, @@ -302,11 +301,6 @@ "namespace": "Volo.Abp.FeatureManagement", "primaryKeyType": "Guid", "properties": [ - { - "type": "System.Guid", - "name": "Id", - "summary": null - }, { "type": "System.String", "name": "Name", @@ -436,6 +430,7 @@ "methods": [ { "returnType": "FeatureDefinitionRecord", + "namespace": "Volo.Abp.FeatureManagement", "name": "FindByNameAsync", "summary": null, "isAsync": true, @@ -552,6 +547,7 @@ "methods": [ { "returnType": "FeatureValue", + "namespace": "Volo.Abp.FeatureManagement", "name": "FindAsync", "summary": null, "isAsync": true, @@ -583,6 +579,7 @@ }, { "returnType": "List", + "namespace": "Volo.Abp.FeatureManagement", "name": "FindAllAsync", "summary": null, "isAsync": true, @@ -614,6 +611,7 @@ }, { "returnType": "List", + "namespace": "Volo.Abp.FeatureManagement", "name": "GetListAsync", "summary": null, "isAsync": true, @@ -640,6 +638,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.FeatureManagement", "name": "DeleteAsync", "summary": null, "isAsync": true, diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.EntityFrameworkCore/Volo.Abp.FeatureManagement.EntityFrameworkCore.abppkg.analyze.json b/modules/feature-management/src/Volo.Abp.FeatureManagement.EntityFrameworkCore/Volo.Abp.FeatureManagement.EntityFrameworkCore.abppkg.analyze.json index 5374e87d7b..39496c615c 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.EntityFrameworkCore/Volo.Abp.FeatureManagement.EntityFrameworkCore.abppkg.analyze.json +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.EntityFrameworkCore/Volo.Abp.FeatureManagement.EntityFrameworkCore.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Abp.FeatureManagement.EntityFrameworkCore", - "hash": "d23d13b3c72c26ef41eb0070ab00ac34", + "hash": "", "contents": [ { "namespace": "Volo.Abp.FeatureManagement.EntityFrameworkCore", @@ -67,27 +67,27 @@ { "namespace": "Volo.Abp.FeatureManagement.EntityFrameworkCore", "connectionStringName": "AbpFeatureManagement", - "databaseTables": [ - { - "entityFullName": "Volo.Abp.FeatureManagement.FeatureDefinitionRecord", - "contentType": "databaseTable", - "name": "AbpFeatures", - "summary": null - }, - { - "entityFullName": "Volo.Abp.FeatureManagement.FeatureGroupDefinitionRecord", - "contentType": "databaseTable", - "name": "AbpFeatureGroups", - "summary": null - }, + "databaseTables": [], + "replacedDbContexts": [], + "modelBuilderExtensionMethods": [ { - "entityFullName": "Volo.Abp.FeatureManagement.FeatureValue", - "contentType": "databaseTable", - "name": "AbpFeatureValues", - "summary": null + "returnType": "Void", + "namespace": "Volo.Abp.FeatureManagement.EntityFrameworkCore", + "name": "ConfigureFeatureManagement", + "summary": null, + "isAsync": false, + "isPublic": true, + "isPrivate": false, + "isStatic": true, + "parameters": [ + { + "type": "ModelBuilder", + "name": "builder", + "isOptional": false + } + ] } ], - "replacedDbContexts": [], "implementingInterfaces": [ { "name": "IInfrastructure", @@ -143,6 +143,12 @@ "declaringAssemblyName": "Volo.Abp.EntityFrameworkCore", "fullName": "Volo.Abp.EntityFrameworkCore.IEfCoreDbContext" }, + { + "name": "IAbpEfCoreDbFunctionContext", + "namespace": "Volo.Abp.EntityFrameworkCore.GlobalFilters", + "declaringAssemblyName": "Volo.Abp.EntityFrameworkCore", + "fullName": "Volo.Abp.EntityFrameworkCore.GlobalFilters.IAbpEfCoreDbFunctionContext" + }, { "name": "ITransientDependency", "namespace": "Volo.Abp.DependencyInjection", diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.HttpApi.Client/Volo.Abp.FeatureManagement.HttpApi.Client.abppkg.analyze.json b/modules/feature-management/src/Volo.Abp.FeatureManagement.HttpApi.Client/Volo.Abp.FeatureManagement.HttpApi.Client.abppkg.analyze.json index cdacabfb3a..ce50d5b83a 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.HttpApi.Client/Volo.Abp.FeatureManagement.HttpApi.Client.abppkg.analyze.json +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.HttpApi.Client/Volo.Abp.FeatureManagement.HttpApi.Client.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Abp.FeatureManagement.HttpApi.Client", - "hash": "f2c557d60cc7414ca67a85fd5295870d", + "hash": "", "contents": [ { "namespace": "Volo.Abp.FeatureManagement", diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.HttpApi/Volo.Abp.FeatureManagement.HttpApi.abppkg.analyze.json b/modules/feature-management/src/Volo.Abp.FeatureManagement.HttpApi/Volo.Abp.FeatureManagement.HttpApi.abppkg.analyze.json index 12fa8fd972..5f25516d3b 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.HttpApi/Volo.Abp.FeatureManagement.HttpApi.abppkg.analyze.json +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.HttpApi/Volo.Abp.FeatureManagement.HttpApi.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Abp.FeatureManagement.HttpApi", - "hash": "eaa44cd23162ceaf3ec1f00798ef4dd5", + "hash": "", "contents": [ { "namespace": "Volo.Abp.FeatureManagement", @@ -63,6 +63,68 @@ "contentType": "abpModule", "name": "AbpFeatureManagementHttpApiModule", "summary": null + }, + { + "apis": [ + { + "path": "api/feature-management/features", + "method": "GET", + "groupName": "Features", + "responseType": "Volo.Abp.FeatureManagement.GetFeatureListResultDto", + "responseTypeAsJson": "", + "parameterDescriptions": [ + { + "name": "providerName", + "type": "String" + }, + { + "name": "providerKey", + "type": "String" + } + ] + }, + { + "path": "api/feature-management/features", + "method": "PUT", + "groupName": "Features", + "responseType": "System.Void", + "responseTypeAsJson": "", + "parameterDescriptions": [ + { + "name": "providerName", + "type": "String" + }, + { + "name": "providerKey", + "type": "String" + }, + { + "name": "input", + "type": "UpdateFeaturesDto" + } + ] + }, + { + "path": "api/feature-management/features", + "method": "DELETE", + "groupName": "Features", + "responseType": "System.Void", + "responseTypeAsJson": "", + "parameterDescriptions": [ + { + "name": "providerName", + "type": "String" + }, + { + "name": "providerKey", + "type": "String" + } + ] + } + ], + "contentType": "httpApi", + "name": "Defined Http Apis", + "summary": null } ] } \ No newline at end of file diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.MongoDB/Volo.Abp.FeatureManagement.MongoDB.abppkg.analyze.json b/modules/feature-management/src/Volo.Abp.FeatureManagement.MongoDB/Volo.Abp.FeatureManagement.MongoDB.abppkg.analyze.json index cec46992d3..db589c9c51 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.MongoDB/Volo.Abp.FeatureManagement.MongoDB.abppkg.analyze.json +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.MongoDB/Volo.Abp.FeatureManagement.MongoDB.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Abp.FeatureManagement.MongoDB", - "hash": "1287dca2b75f3753abc23921cc0263b4", + "hash": "", "contents": [ { "namespace": "Volo.Abp.FeatureManagement.MongoDB", @@ -69,21 +69,21 @@ "connectionStringName": "AbpFeatureManagement", "databaseCollections": [ { - "entityFullName": "Volo.Abp.FeatureManagement.FeatureValue", + "entityFullName": "Volo.Abp.FeatureManagement.FeatureGroupDefinitionRecord", "contentType": "databaseCollection", - "name": "AbpFeatureValues", + "name": "FeatureGroups", "summary": null }, { "entityFullName": "Volo.Abp.FeatureManagement.FeatureDefinitionRecord", "contentType": "databaseCollection", - "name": "AbpFeatures", + "name": "Features", "summary": null }, { - "entityFullName": "Volo.Abp.FeatureManagement.FeatureGroupDefinitionRecord", + "entityFullName": "Volo.Abp.FeatureManagement.FeatureValue", "contentType": "databaseCollection", - "name": "AbpFeatureGroups", + "name": "FeatureValues", "summary": null } ], diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/Pages/FeatureManagement/FeatureManagementModal.cshtml b/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/Pages/FeatureManagement/FeatureManagementModal.cshtml index 87d186d4ad..c29e77fcfc 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/Pages/FeatureManagement/FeatureManagementModal.cshtml +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/Pages/FeatureManagement/FeatureManagementModal.cshtml @@ -1,4 +1,5 @@ @page +@using System.Web @using Microsoft.AspNetCore.Mvc.Localization @using Microsoft.Extensions.Localization @using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal @@ -23,7 +24,7 @@
- + @if (Model.FeatureListResultDto != null && Model.FeatureListResultDto.Groups.Any()) { var featureGroups = Model.FeatureListResultDto.Groups; diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/Pages/FeatureManagement/FeatureManagementModal.cshtml.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/Pages/FeatureManagement/FeatureManagementModal.cshtml.cs index 879b4f1676..f08d42cfd2 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/Pages/FeatureManagement/FeatureManagementModal.cshtml.cs +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/Pages/FeatureManagement/FeatureManagementModal.cshtml.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Threading.Tasks; +using System.Web; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Options; using Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations; @@ -24,6 +25,10 @@ public class FeatureManagementModal : AbpPageModel [HiddenInput] [BindProperty(SupportsGet = true)] public string ProviderKey { get; set; } + + [HiddenInput] + [BindProperty(SupportsGet = true)] + public string ProviderKeyDisplayName { get; set; } [BindProperty] public List FeatureGroups { get; set; } @@ -51,7 +56,10 @@ public class FeatureManagementModal : AbpPageModel public virtual async Task OnGetAsync() { ValidateModel(); - + if (!ProviderKeyDisplayName.IsNullOrWhiteSpace()) + { + ProviderKeyDisplayName = " - " + HttpUtility.HtmlEncode(ProviderKeyDisplayName); + } FeatureListResultDto = await FeatureAppService.GetAsync(ProviderName, ProviderKey); return Page(); diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/Volo.Abp.FeatureManagement.Web.abppkg.analyze.json b/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/Volo.Abp.FeatureManagement.Web.abppkg.analyze.json index 53d44b8f79..905cfe0387 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/Volo.Abp.FeatureManagement.Web.abppkg.analyze.json +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/Volo.Abp.FeatureManagement.Web.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Abp.FeatureManagement.Web", - "hash": "448e16aaf1a76101ee1902adbe650fb1", + "hash": "", "contents": [ { "namespace": "Volo.Abp.FeatureManagement", @@ -68,6 +68,12 @@ "contentType": "abpModule", "name": "AbpFeatureManagementWebModule", "summary": null + }, + { + "namespace": "Volo.Abp.FeatureManagement.Web.Pages.FeatureManagement", + "contentType": "webPage", + "name": "FeatureManagementModal", + "summary": null } ] } \ No newline at end of file diff --git a/modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo.Abp.Identity.Application.Contracts.abppkg.analyze.json b/modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo.Abp.Identity.Application.Contracts.abppkg.analyze.json index 6f323d4671..ed9bd2c045 100644 --- a/modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo.Abp.Identity.Application.Contracts.abppkg.analyze.json +++ b/modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo.Abp.Identity.Application.Contracts.abppkg.analyze.json @@ -130,6 +130,13 @@ "name": "AbpIdentity.Users.Update", "summary": null }, + { + "displayName": "Manage roles", + "isEnabled": true, + "contentType": "permission", + "name": "AbpIdentity.Users.Update.ManageRoles", + "summary": null + }, { "displayName": "Delete", "isEnabled": true, diff --git a/modules/identity/src/Volo.Abp.Identity.Application/Volo.Abp.Identity.Application.abppkg.analyze.json b/modules/identity/src/Volo.Abp.Identity.Application/Volo.Abp.Identity.Application.abppkg.analyze.json index 603d2d9faf..51d711b151 100644 --- a/modules/identity/src/Volo.Abp.Identity.Application/Volo.Abp.Identity.Application.abppkg.analyze.json +++ b/modules/identity/src/Volo.Abp.Identity.Application/Volo.Abp.Identity.Application.abppkg.analyze.json @@ -183,6 +183,7 @@ "methods": [ { "returnType": "IdentityRoleDto", + "namespace": "Volo.Abp.Identity", "name": "GetAsync", "summary": null, "isAsync": true, @@ -199,6 +200,7 @@ }, { "returnType": "ListResultDto", + "namespace": "Volo.Abp.Identity", "name": "GetAllListAsync", "summary": null, "isAsync": true, @@ -209,6 +211,7 @@ }, { "returnType": "PagedResultDto", + "namespace": "Volo.Abp.Identity", "name": "GetListAsync", "summary": null, "isAsync": true, @@ -225,6 +228,7 @@ }, { "returnType": "IdentityRoleDto", + "namespace": "Volo.Abp.Identity", "name": "CreateAsync", "summary": null, "isAsync": true, @@ -241,6 +245,7 @@ }, { "returnType": "IdentityRoleDto", + "namespace": "Volo.Abp.Identity", "name": "UpdateAsync", "summary": null, "isAsync": true, @@ -262,6 +267,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.Identity", "name": "DeleteAsync", "summary": null, "isAsync": true, @@ -390,6 +396,7 @@ "methods": [ { "returnType": "IdentityUserDto", + "namespace": "Volo.Abp.Identity", "name": "GetAsync", "summary": null, "isAsync": true, @@ -406,6 +413,7 @@ }, { "returnType": "PagedResultDto", + "namespace": "Volo.Abp.Identity", "name": "GetListAsync", "summary": null, "isAsync": true, @@ -422,6 +430,7 @@ }, { "returnType": "ListResultDto", + "namespace": "Volo.Abp.Identity", "name": "GetRolesAsync", "summary": null, "isAsync": true, @@ -438,6 +447,7 @@ }, { "returnType": "ListResultDto", + "namespace": "Volo.Abp.Identity", "name": "GetAssignableRolesAsync", "summary": null, "isAsync": true, @@ -448,6 +458,7 @@ }, { "returnType": "IdentityUserDto", + "namespace": "Volo.Abp.Identity", "name": "CreateAsync", "summary": null, "isAsync": true, @@ -464,6 +475,7 @@ }, { "returnType": "IdentityUserDto", + "namespace": "Volo.Abp.Identity", "name": "UpdateAsync", "summary": null, "isAsync": true, @@ -485,6 +497,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.Identity", "name": "DeleteAsync", "summary": null, "isAsync": true, @@ -501,6 +514,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.Identity", "name": "UpdateRolesAsync", "summary": null, "isAsync": true, @@ -522,6 +536,7 @@ }, { "returnType": "IdentityUserDto", + "namespace": "Volo.Abp.Identity", "name": "FindByUsernameAsync", "summary": null, "isAsync": true, @@ -538,6 +553,7 @@ }, { "returnType": "IdentityUserDto", + "namespace": "Volo.Abp.Identity", "name": "FindByEmailAsync", "summary": null, "isAsync": true, @@ -624,6 +640,7 @@ "methods": [ { "returnType": "UserData", + "namespace": "Volo.Abp.Identity", "name": "FindByIdAsync", "summary": null, "isAsync": true, @@ -640,6 +657,7 @@ }, { "returnType": "UserData", + "namespace": "Volo.Abp.Identity", "name": "FindByUserNameAsync", "summary": null, "isAsync": true, @@ -656,6 +674,7 @@ }, { "returnType": "ListResultDto", + "namespace": "Volo.Abp.Identity", "name": "SearchAsync", "summary": null, "isAsync": true, @@ -672,6 +691,7 @@ }, { "returnType": "Int64", + "namespace": "Volo.Abp.Identity", "name": "GetCountAsync", "summary": null, "isAsync": true, @@ -758,6 +778,7 @@ "methods": [ { "returnType": "String[]", + "namespace": "Volo.Abp.Identity.Integration", "name": "GetRoleNamesAsync", "summary": null, "isAsync": true, @@ -771,6 +792,74 @@ "isOptional": false } ] + }, + { + "returnType": "UserData", + "namespace": "Volo.Abp.Identity.Integration", + "name": "FindByIdAsync", + "summary": null, + "isAsync": true, + "isPublic": true, + "isPrivate": false, + "isStatic": false, + "parameters": [ + { + "type": "Guid", + "name": "id", + "isOptional": false + } + ] + }, + { + "returnType": "UserData", + "namespace": "Volo.Abp.Identity.Integration", + "name": "FindByUserNameAsync", + "summary": null, + "isAsync": true, + "isPublic": true, + "isPrivate": false, + "isStatic": false, + "parameters": [ + { + "type": "String", + "name": "userName", + "isOptional": false + } + ] + }, + { + "returnType": "ListResultDto", + "namespace": "Volo.Abp.Identity.Integration", + "name": "SearchAsync", + "summary": null, + "isAsync": true, + "isPublic": true, + "isPrivate": false, + "isStatic": false, + "parameters": [ + { + "type": "UserLookupSearchInputDto", + "name": "input", + "isOptional": false + } + ] + }, + { + "returnType": "Int64", + "namespace": "Volo.Abp.Identity.Integration", + "name": "GetCountAsync", + "summary": null, + "isAsync": true, + "isPublic": true, + "isPrivate": false, + "isStatic": false, + "parameters": [ + { + "type": "UserLookupCountInputDto", + "name": "input", + "isOptional": false + } + ] } ], "contentType": "applicationService", diff --git a/modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityRoleAppService.cs b/modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityRoleAppService.cs index 13c79029fa..e6563727bc 100644 --- a/modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityRoleAppService.cs +++ b/modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityRoleAppService.cs @@ -77,7 +77,10 @@ public class IdentityRoleAppService : IdentityAppServiceBase, IIdentityRoleAppSe role.SetConcurrencyStampIfNotNull(input.ConcurrencyStamp); - (await RoleManager.SetRoleNameAsync(role, input.Name)).CheckErrors(); + if (role.Name != input.Name) + { + (await RoleManager.SetRoleNameAsync(role, input.Name)).CheckErrors(); + } role.IsDefault = input.IsDefault; role.IsPublic = input.IsPublic; diff --git a/modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityUserAppService.cs b/modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityUserAppService.cs index 6b55815732..a56935424e 100644 --- a/modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityUserAppService.cs +++ b/modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityUserAppService.cs @@ -184,8 +184,8 @@ public class IdentityUserAppService : IdentityAppServiceBase, IIdentityUserAppSe user.SetIsActive(input.IsActive); } - user.Name = input.Name; - user.Surname = input.Surname; + user.Name = input.Name?.Trim(); + user.Surname = input.Surname?.Trim(); (await UserManager.UpdateAsync(user)).CheckErrors(); if (input.RoleNames != null && await PermissionChecker.IsGrantedAsync(IdentityPermissions.Users.ManageRoles)) { diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/sv.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/sv.json new file mode 100644 index 0000000000..3a2139a240 --- /dev/null +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/sv.json @@ -0,0 +1,132 @@ +{ + "culture": "sv", + "texts": { + "Menu:IdentityManagement": "Identitetshantering", + "Users": "AnvĂ€ndare", + "NewUser": "Ny anvĂ€ndare", + "UserName": "AnvĂ€ndarens namn", + "Surname": "Efternamn", + "EmailAddress": "E-postadress", + "PhoneNumber": "Telefonnummer", + "UserInformations": "AnvĂ€ndarinformation", + "DisplayName:IsDefault": "Standard", + "DisplayName:IsStatic": "Statisk", + "DisplayName:IsPublic": "AllmĂ€nheten", + "Roles": "Roller", + "Password": "Lösenord", + "PersonalInfo": "Min profil", + "PersonalSettings": "Personliga instĂ€llningar", + "UserDeletionConfirmationMessage": "AnvĂ€ndaren '{0}' kommer att raderas. Kan du bekrĂ€fta det?", + "RoleDeletionConfirmationMessage": "Roll '{0}' kommer att raderas. Kan du bekrĂ€fta det?", + "DisplayName:RoleName": "Namn pĂ„ roll", + "DisplayName:UserName": "AnvĂ€ndarens namn", + "DisplayName:Name": "Namn", + "DisplayName:Surname": "Efternamn", + "DisplayName:Password": "Lösenord", + "DisplayName:Email": "E-postadress", + "DisplayName:PhoneNumber": "Telefonnummer", + "DisplayName:TwoFactorEnabled": "Verifiering med tvĂ„ faktorer", + "DisplayName:IsActive": "Aktiv", + "DisplayName:LockoutEnabled": "SpĂ€rrat konto", + "Description:LockoutEnabled": "LĂ„s konto efter misslyckade inloggningsförsök", + "NewRole": "Ny roll", + "RoleName": "Namn pĂ„ roll", + "CreationTime": "Skapelsetid", + "Permissions": "Behörigheter", + "DisplayName:CurrentPassword": "Aktuellt lösenord", + "DisplayName:NewPassword": "Nytt lösenord", + "DisplayName:NewPasswordConfirm": "BekrĂ€fta nytt lösenord", + "PasswordChangedMessage": "Ditt lösenord har Ă€ndrats framgĂ„ngsrikt.", + "PersonalSettingsSavedMessage": "Dina personliga instĂ€llningar har sparats framgĂ„ngsrikt.", + "Volo.Abp.Identity:DefaultError": "Ett okĂ€nt fel har uppstĂ„tt.", + "Volo.Abp.Identity:ConcurrencyFailure": "Optimistisk samtidighetskontroll har misslyckats. Den entitet du arbetar med har Ă€ndrats av en annan anvĂ€ndare. Kassera dina Ă€ndringar och försök igen.", + "Volo.Abp.Identity:DuplicateEmail": "E-post '{0}' Ă€r redan upptagen.", + "Volo.Abp.Identity:DuplicateRoleName": "Rollnamnet '{0}' Ă€r redan upptaget.", + "Volo.Abp.Identity:DuplicateUserName": "AnvĂ€ndarnamnet '{0}' Ă€r redan upptaget.", + "Volo.Abp.Identity:InvalidEmail": "E-post '{0}' Ă€r ogiltig.", + "Volo.Abp.Identity:InvalidPasswordHasherCompatibilityMode": "Det angivna PasswordHasherCompatibilityMode Ă€r ogiltigt.", + "Volo.Abp.Identity:InvalidPasswordHasherIterationCount": "Antalet iterationer mĂ„ste vara ett positivt heltal.", + "Volo.Abp.Identity:InvalidRoleName": "Rollnamnet '{0}' Ă€r ogiltigt.", + "Volo.Abp.Identity:InvalidToken": "Ogiltig token.", + "Volo.Abp.Identity:InvalidUserName": "AnvĂ€ndarnamn '{0}' Ă€r ogiltigt, kan bara innehĂ„lla bokstĂ€ver eller siffror.", + "InvalidUserName": "AnvĂ€ndarnamnet '{0}' Ă€r ogiltigt.", + "Volo.Abp.Identity:LoginAlreadyAssociated": "En anvĂ€ndare med den hĂ€r inloggningen finns redan.", + "Volo.Abp.Identity:PasswordMismatch": "Felaktigt lösenord.", + "Volo.Abp.Identity:PasswordRequiresDigit": "Lösenord mĂ„ste innehĂ„lla minst en siffra ('0'-'9').", + "Volo.Abp.Identity:PasswordRequiresLower": "Lösenord mĂ„ste innehĂ„lla minst en gemen bokstav ('a'-'z').", + "Volo.Abp.Identity:PasswordRequiresNonAlphanumeric": "Lösenord mĂ„ste innehĂ„lla minst ett icke-alfanumeriskt tecken.", + "Volo.Abp.Identity:PasswordRequiresUpper": "Lösenord mĂ„ste innehĂ„lla minst en versal ('A'-'Z').", + "Volo.Abp.Identity:PasswordTooShort": "Lösenord mĂ„ste innehĂ„lla minst {0} tecken.", + "Volo.Abp.Identity:PasswordRequiresUniqueChars": "Lösenord mĂ„ste innehĂ„lla minst {0} olika tecken.", + "Volo.Abp.Identity:RoleNotFound": "Roll {0} finns inte.", + "Volo.Abp.Identity:UserAlreadyHasPassword": "AnvĂ€ndaren har redan ett lösenord instĂ€llt.", + "Volo.Abp.Identity:UserAlreadyInRole": "AnvĂ€ndaren har redan rollen '{0}'.", + "Volo.Abp.Identity:UserLockedOut": "AnvĂ€ndaren Ă€r utelĂ„st.", + "Volo.Abp.Identity:UserLockoutNotEnabled": "SpĂ€rren Ă€r inte aktiverad för den hĂ€r anvĂ€ndaren.", + "Volo.Abp.Identity:UserNameNotFound": "AnvĂ€ndaren {0} finns inte.", + "Volo.Abp.Identity:UserNotInRole": "AnvĂ€ndaren Ă€r inte i rollen '{0}'.", + "Volo.Abp.Identity:PasswordConfirmationFailed": "Lösenordet stĂ€mmer inte överens med det bekrĂ€ftade lösenordet.", + "Volo.Abp.Identity:NullSecurityStamp": "AnvĂ€ndarens sĂ€kerhetsstĂ€mpel kan inte vara null.", + "Volo.Abp.Identity:RecoveryCodeRedemptionFailed": "Inlösen av Ă„terstĂ€llningskod misslyckades.", + "Volo.Abp.Identity:010001": "Du kan inte radera ditt eget konto!", + "Volo.Abp.Identity:010002": "Det gĂ„r inte att ange mer Ă€n {MaxUserMembershipCount} organisationsenhet för en anvĂ€ndare!", + "Volo.Abp.Identity:010003": "Kan inte Ă€ndra lösenord för en externt inloggad anvĂ€ndare!", + "Volo.Abp.Identity:010004": "Det finns redan en organisationsenhet med namnet {0}. TvĂ„ enheter med samma namn kan inte skapas pĂ„ samma nivĂ„.", + "Volo.Abp.Identity:010005": "Statiska roller kan inte bytas namn pĂ„.", + "Volo.Abp.Identity:010006": "Statiska roller kan inte tas bort.", + "Volo.Abp.Identity:010007": "Du kan inte Ă€ndra din tvĂ„faktorsinstĂ€llning.", + "Volo.Abp.Identity:010008": "Det Ă€r inte tillĂ„tet att Ă€ndra instĂ€llningen för tvĂ„ faktorer.", + "Volo.Abp.Identity:010009": "Du kan inte delegera dig sjĂ€lv.", + "Volo.Abp.Identity:010021": "Namn finns: '{0}'.", + "Identity.OrganizationUnit.MaxUserMembershipCount": "Högsta tillĂ„tna antal medlemskap i organisationsenheter för en anvĂ€ndare", + "ThisUserIsNotActiveMessage": "Den hĂ€r anvĂ€ndaren Ă€r inte aktiv.", + "Permission:IdentityManagement": "Identitetshantering", + "Permission:RoleManagement": "Hantering av roller", + "Permission:Create": "Skapa", + "Permission:Edit": "Redigera", + "Permission:Delete": "Radera", + "Permission:ChangePermissions": "Ändra behörigheter", + "Permission:ManageRoles": "Hantera roller", + "Permission:UserManagement": "Hantering av anvĂ€ndare", + "Permission:UserLookup": "AnvĂ€ndaruppslagning", + "DisplayName:Abp.Identity.Password.RequiredLength": "Erforderlig lĂ€ngd", + "DisplayName:Abp.Identity.Password.RequiredUniqueChars": "Obligatoriska unika tecken nummer", + "DisplayName:Abp.Identity.Password.RequireNonAlphanumeric": "Obligatoriskt icke-alfanumeriskt tecken", + "DisplayName:Abp.Identity.Password.RequireLowercase": "Obligatoriskt tecken för gemener", + "DisplayName:Abp.Identity.Password.RequireUppercase": "Obligatoriskt tecken för versaler", + "DisplayName:Abp.Identity.Password.RequireDigit": "NödvĂ€ndig siffra", + "DisplayName:Abp.Identity.Password.ForceUsersToPeriodicallyChangePassword": "Tvinga anvĂ€ndare att regelbundet byta lösenord", + "DisplayName:Abp.Identity.Password.PasswordChangePeriodDays": "Period för byte av lösenord (dagar)", + "DisplayName:Abp.Identity.Lockout.AllowedForNewUsers": "Aktiverad för nya anvĂ€ndare", + "DisplayName:Abp.Identity.Lockout.LockoutDuration": "Varaktighet för lĂ„sning (sekunder)", + "DisplayName:Abp.Identity.Lockout.MaxFailedAccessAttempts": "Max misslyckade Ă„tkomstförsök", + "DisplayName:Abp.Identity.SignIn.RequireConfirmedEmail": "KrĂ€ver bekrĂ€ftad e-post", + "DisplayName:Abp.Identity.SignIn.EnablePhoneNumberConfirmation": "TillĂ„t anvĂ€ndare att bekrĂ€fta sitt telefonnummer", + "DisplayName:Abp.Identity.SignIn.RequireConfirmedPhoneNumber": "KrĂ€ver bekrĂ€ftat telefonnummer", + "DisplayName:Abp.Identity.User.IsUserNameUpdateEnabled": "TillĂ„t anvĂ€ndare att Ă€ndra sina anvĂ€ndarnamn", + "DisplayName:Abp.Identity.User.IsEmailUpdateEnabled": "TillĂ„t anvĂ€ndare att Ă€ndra sina e-postadresser", + "Description:Abp.Identity.Password.RequiredLength": "Den minsta lĂ€ngd som ett lösenord mĂ„ste ha.", + "Description:Abp.Identity.Password.RequiredUniqueChars": "Det minsta antal unika tecken som ett lösenord mĂ„ste innehĂ„lla.", + "Description:Abp.Identity.Password.RequireNonAlphanumeric": "Om lösenorden mĂ„ste innehĂ„lla ett icke-alfanumeriskt tecken.", + "Description:Abp.Identity.Password.RequireLowercase": "Om lösenorden mĂ„ste innehĂ„lla ett ASCII-tecken med gemener.", + "Description:Abp.Identity.Password.RequireUppercase": "Om lösenorden mĂ„ste innehĂ„lla ett ASCII-tecken i versaler.", + "Description:Abp.Identity.Password.RequireDigit": "Om lösenorden mĂ„ste innehĂ„lla en siffra.", + "Description:Abp.Identity.Password.ForceUsersToPeriodicallyChangePassword": "Om anvĂ€ndare tvingas byta lösenord med jĂ€mna mellanrum.", + "Description:Abp.Identity.Password.PasswordChangePeriodDays": "Antal dagar som en anvĂ€ndares lösenord Ă€r giltigt.", + "Description:Abp.Identity.Lockout.AllowedForNewUsers": "Om en ny anvĂ€ndare kan lĂ„sas ute.", + "Description:Abp.Identity.Lockout.LockoutDuration": "Den tid som en anvĂ€ndare Ă€r utelĂ„st nĂ€r en utelĂ„sning intrĂ€ffar.", + "Description:Abp.Identity.Lockout.MaxFailedAccessAttempts": "Det antal misslyckade Ă„tkomstförsök som tillĂ„ts innan en anvĂ€ndare lĂ„ses ut, förutsatt att lĂ„sning Ă€r aktiverad.", + "Description:Abp.Identity.SignIn.RequireConfirmedEmail": "Om det krĂ€vs en bekrĂ€ftad e-postadress för att logga in.", + "Description:Abp.Identity.SignIn.EnablePhoneNumberConfirmation": "Huruvida phoneNumber kan bekrĂ€ftas av anvĂ€ndaren.", + "Description:Abp.Identity.SignIn.RequireConfirmedPhoneNumber": "Om det krĂ€vs ett bekrĂ€ftat telefonnummer för att logga in.", + "Description:Abp.Identity.User.IsUserNameUpdateEnabled": "Om anvĂ€ndarnamnet kan uppdateras av anvĂ€ndaren.", + "Description:Abp.Identity.User.IsEmailUpdateEnabled": "Om e-postmeddelandet kan uppdateras av anvĂ€ndaren.", + "Details": "Detaljer", + "CreatedBy": "Skapad av", + "ModifiedBy": "Ändrad av", + "ModificationTime": "Tid för modifiering", + "PasswordUpdateTime": "Uppdateringstid för lösenord", + "LockoutEndTime": "Sluttid för lĂ„sning", + "FailedAccessCount": "Antal misslyckade Ă„tkomster" + } +} \ No newline at end of file diff --git a/modules/identity/src/Volo.Abp.Identity.Domain/Volo.Abp.Identity.Domain.abppkg.analyze.json b/modules/identity/src/Volo.Abp.Identity.Domain/Volo.Abp.Identity.Domain.abppkg.analyze.json index 9873e72b5f..1304d00eed 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain/Volo.Abp.Identity.Domain.abppkg.analyze.json +++ b/modules/identity/src/Volo.Abp.Identity.Domain/Volo.Abp.Identity.Domain.abppkg.analyze.json @@ -296,6 +296,7 @@ "methods": [ { "returnType": "Void", + "namespace": "Volo.Abp.Identity", "name": "SetName", "summary": null, "isAsync": false, @@ -492,6 +493,7 @@ "methods": [ { "returnType": "Void", + "namespace": "Volo.Abp.Identity", "name": "AddClaim", "summary": null, "isAsync": false, @@ -513,6 +515,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.Identity", "name": "AddClaims", "summary": null, "isAsync": false, @@ -534,6 +537,7 @@ }, { "returnType": "IdentityRoleClaim", + "namespace": "Volo.Abp.Identity", "name": "FindClaim", "summary": null, "isAsync": false, @@ -550,6 +554,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.Identity", "name": "RemoveClaim", "summary": null, "isAsync": false, @@ -566,6 +571,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.Identity", "name": "ChangeName", "summary": null, "isAsync": false, @@ -582,6 +588,7 @@ }, { "returnType": "String", + "namespace": "Volo.Abp.Identity", "name": "ToString", "summary": null, "isAsync": false, @@ -776,6 +783,170 @@ "name": "IdentitySecurityLog", "summary": null }, + { + "baseClass": { + "name": "BasicAggregateRoot", + "namespace": "Volo.Abp.Domain.Entities", + "declaringAssemblyName": "Volo.Abp.Ddd.Domain", + "fullName": "Volo.Abp.Domain.Entities.BasicAggregateRoot" + }, + "implementingInterfaces": [ + { + "name": "IEntity", + "namespace": "Volo.Abp.Domain.Entities", + "declaringAssemblyName": "Volo.Abp.Ddd.Domain", + "fullName": "Volo.Abp.Domain.Entities.IEntity" + }, + { + "name": "IEntity", + "namespace": "Volo.Abp.Domain.Entities", + "declaringAssemblyName": "Volo.Abp.Ddd.Domain", + "fullName": "Volo.Abp.Domain.Entities.IEntity" + }, + { + "name": "IAggregateRoot", + "namespace": "Volo.Abp.Domain.Entities", + "declaringAssemblyName": "Volo.Abp.Ddd.Domain", + "fullName": "Volo.Abp.Domain.Entities.IAggregateRoot" + }, + { + "name": "IAggregateRoot", + "namespace": "Volo.Abp.Domain.Entities", + "declaringAssemblyName": "Volo.Abp.Ddd.Domain", + "fullName": "Volo.Abp.Domain.Entities.IAggregateRoot" + }, + { + "name": "IGeneratesDomainEvents", + "namespace": "Volo.Abp.Domain.Entities", + "declaringAssemblyName": "Volo.Abp.Ddd.Domain", + "fullName": "Volo.Abp.Domain.Entities.IGeneratesDomainEvents" + }, + { + "name": "IMultiTenant", + "namespace": "Volo.Abp.MultiTenancy", + "declaringAssemblyName": "Volo.Abp.MultiTenancy.Abstractions", + "fullName": "Volo.Abp.MultiTenancy.IMultiTenant" + } + ], + "methods": [ + { + "returnType": "Void", + "namespace": "Volo.Abp.Identity", + "name": "SetSignedInTime", + "summary": null, + "isAsync": false, + "isPublic": true, + "isPrivate": false, + "isStatic": false, + "parameters": [ + { + "type": "DateTime", + "name": "signedIn", + "isOptional": false + } + ] + }, + { + "returnType": "Void", + "namespace": "Volo.Abp.Identity", + "name": "UpdateLastAccessedTime", + "summary": null, + "isAsync": false, + "isPublic": true, + "isPrivate": false, + "isStatic": false, + "parameters": [ + { + "type": "Nullable", + "name": "lastAccessed", + "isOptional": false + } + ] + }, + { + "returnType": "Void", + "namespace": "Volo.Abp.Identity", + "name": "SetIpAddresses", + "summary": null, + "isAsync": false, + "isPublic": true, + "isPrivate": false, + "isStatic": false, + "parameters": [ + { + "type": "IEnumerable", + "name": "ipAddresses", + "isOptional": false + } + ] + }, + { + "returnType": "IEnumerable", + "namespace": "Volo.Abp.Identity", + "name": "GetIpAddresses", + "summary": null, + "isAsync": false, + "isPublic": true, + "isPrivate": false, + "isStatic": false, + "parameters": [] + } + ], + "collectionProperties": {}, + "navigationProperties": {}, + "namespace": "Volo.Abp.Identity", + "primaryKeyType": "Guid", + "properties": [ + { + "type": "System.String", + "name": "SessionId", + "summary": null + }, + { + "type": "System.String", + "name": "Device", + "summary": "Web, Mobile ..." + }, + { + "type": "System.String", + "name": "DeviceInfo", + "summary": null + }, + { + "type": "System.Nullable`1[System.Guid]", + "name": "TenantId", + "summary": null + }, + { + "type": "System.Guid", + "name": "UserId", + "summary": null + }, + { + "type": "System.String", + "name": "ClientId", + "summary": null + }, + { + "type": "System.String", + "name": "IpAddresses", + "summary": null + }, + { + "type": "System.DateTime", + "name": "SignedIn", + "summary": null + }, + { + "type": "System.Nullable`1[System.DateTime]", + "name": "LastAccessed", + "summary": null + } + ], + "contentType": "aggregateRoot", + "name": "IdentitySession", + "summary": null + }, { "baseClass": { "name": "FullAuditedAggregateRoot", @@ -908,6 +1079,7 @@ "methods": [ { "returnType": "Void", + "namespace": "Volo.Abp.Identity", "name": "AddRole", "summary": null, "isAsync": false, @@ -924,6 +1096,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.Identity", "name": "RemoveRole", "summary": null, "isAsync": false, @@ -940,6 +1113,7 @@ }, { "returnType": "Boolean", + "namespace": "Volo.Abp.Identity", "name": "IsInRole", "summary": null, "isAsync": false, @@ -956,6 +1130,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.Identity", "name": "AddClaim", "summary": null, "isAsync": false, @@ -977,6 +1152,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.Identity", "name": "AddClaims", "summary": null, "isAsync": false, @@ -998,6 +1174,7 @@ }, { "returnType": "IdentityUserClaim", + "namespace": "Volo.Abp.Identity", "name": "FindClaim", "summary": null, "isAsync": false, @@ -1014,6 +1191,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.Identity", "name": "ReplaceClaim", "summary": null, "isAsync": false, @@ -1035,6 +1213,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.Identity", "name": "RemoveClaims", "summary": null, "isAsync": false, @@ -1051,6 +1230,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.Identity", "name": "RemoveClaim", "summary": null, "isAsync": false, @@ -1067,6 +1247,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.Identity", "name": "AddLogin", "summary": null, "isAsync": false, @@ -1083,6 +1264,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.Identity", "name": "RemoveLogin", "summary": null, "isAsync": false, @@ -1104,6 +1286,7 @@ }, { "returnType": "IdentityUserToken", + "namespace": "Volo.Abp.Identity", "name": "FindToken", "summary": null, "isAsync": false, @@ -1125,6 +1308,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.Identity", "name": "SetToken", "summary": null, "isAsync": false, @@ -1151,6 +1335,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.Identity", "name": "RemoveToken", "summary": null, "isAsync": false, @@ -1172,6 +1357,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.Identity", "name": "AddOrganizationUnit", "summary": null, "isAsync": false, @@ -1188,6 +1374,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.Identity", "name": "RemoveOrganizationUnit", "summary": null, "isAsync": false, @@ -1204,6 +1391,7 @@ }, { "returnType": "Boolean", + "namespace": "Volo.Abp.Identity", "name": "IsInOrganizationUnit", "summary": null, "isAsync": false, @@ -1220,6 +1408,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.Identity", "name": "SetEmailConfirmed", "summary": null, "isAsync": false, @@ -1236,6 +1425,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.Identity", "name": "SetPhoneNumberConfirmed", "summary": null, "isAsync": false, @@ -1252,6 +1442,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.Identity", "name": "SetPhoneNumber", "summary": null, "isAsync": false, @@ -1273,6 +1464,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.Identity", "name": "SetIsActive", "summary": null, "isAsync": false, @@ -1289,6 +1481,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.Identity", "name": "SetShouldChangePasswordOnNextLogin", "summary": null, "isAsync": false, @@ -1305,6 +1498,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.Identity", "name": "SetLastPasswordChangeTime", "summary": null, "isAsync": false, @@ -1321,6 +1515,7 @@ }, { "returnType": "String", + "namespace": "Volo.Abp.Identity", "name": "ToString", "summary": null, "isAsync": false, @@ -1708,6 +1903,7 @@ "methods": [ { "returnType": "String", + "namespace": "Volo.Abp.Identity", "name": "CreateCode", "summary": null, "isAsync": false, @@ -1724,6 +1920,7 @@ }, { "returnType": "String", + "namespace": "Volo.Abp.Identity", "name": "AppendCode", "summary": null, "isAsync": false, @@ -1745,6 +1942,7 @@ }, { "returnType": "String", + "namespace": "Volo.Abp.Identity", "name": "GetRelativeCode", "summary": null, "isAsync": false, @@ -1766,6 +1964,7 @@ }, { "returnType": "String", + "namespace": "Volo.Abp.Identity", "name": "CalculateNextCode", "summary": null, "isAsync": false, @@ -1782,6 +1981,7 @@ }, { "returnType": "String", + "namespace": "Volo.Abp.Identity", "name": "GetLastUnitCode", "summary": null, "isAsync": false, @@ -1798,6 +1998,7 @@ }, { "returnType": "String", + "namespace": "Volo.Abp.Identity", "name": "GetParentCode", "summary": null, "isAsync": false, @@ -1814,6 +2015,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.Identity", "name": "AddRole", "summary": null, "isAsync": false, @@ -1830,6 +2032,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.Identity", "name": "RemoveRole", "summary": null, "isAsync": false, @@ -1846,6 +2049,7 @@ }, { "returnType": "Boolean", + "namespace": "Volo.Abp.Identity", "name": "IsInRole", "summary": null, "isAsync": false, @@ -1919,6 +2123,7 @@ "methods": [ { "returnType": "IdentityClaimType", + "namespace": "Volo.Abp.Identity", "name": "CreateAsync", "summary": null, "isAsync": true, @@ -1935,6 +2140,7 @@ }, { "returnType": "IdentityClaimType", + "namespace": "Volo.Abp.Identity", "name": "UpdateAsync", "summary": null, "isAsync": true, @@ -1948,6 +2154,23 @@ "isOptional": false } ] + }, + { + "returnType": "Void", + "namespace": "Volo.Abp.Identity", + "name": "DeleteAsync", + "summary": null, + "isAsync": true, + "isPublic": true, + "isPrivate": false, + "isStatic": false, + "parameters": [ + { + "type": "Guid", + "name": "id", + "isOptional": false + } + ] } ], "implementingInterfaces": [ @@ -1979,6 +2202,7 @@ "methods": [ { "returnType": "List", + "namespace": "Volo.Abp.Identity", "name": "GetListAsync", "summary": null, "isAsync": true, @@ -2005,6 +2229,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.Identity", "name": "LinkAsync", "summary": null, "isAsync": true, @@ -2031,6 +2256,7 @@ }, { "returnType": "Boolean", + "namespace": "Volo.Abp.Identity", "name": "IsLinkedAsync", "summary": null, "isAsync": true, @@ -2062,6 +2288,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.Identity", "name": "UnlinkAsync", "summary": null, "isAsync": true, @@ -2088,6 +2315,7 @@ }, { "returnType": "String", + "namespace": "Volo.Abp.Identity", "name": "GenerateLinkTokenAsync", "summary": null, "isAsync": true, @@ -2114,6 +2342,7 @@ }, { "returnType": "Boolean", + "namespace": "Volo.Abp.Identity", "name": "VerifyLinkTokenAsync", "summary": null, "isAsync": true, @@ -2173,6 +2402,7 @@ "methods": [ { "returnType": "IdentityRole", + "namespace": "Volo.Abp.Identity", "name": "GetByIdAsync", "summary": null, "isAsync": true, @@ -2189,6 +2419,7 @@ }, { "returnType": "IdentityResult", + "namespace": "Volo.Abp.Identity", "name": "SetRoleNameAsync", "summary": null, "isAsync": true, @@ -2210,6 +2441,7 @@ }, { "returnType": "IdentityResult", + "namespace": "Volo.Abp.Identity", "name": "DeleteAsync", "summary": null, "isAsync": true, @@ -2260,6 +2492,7 @@ "methods": [ { "returnType": "List", + "namespace": "Volo.Abp.Identity", "name": "GetListAsync", "summary": null, "isAsync": true, @@ -2286,6 +2519,7 @@ }, { "returnType": "List", + "namespace": "Volo.Abp.Identity", "name": "GetActiveDelegationsAsync", "summary": null, "isAsync": true, @@ -2307,6 +2541,7 @@ }, { "returnType": "IdentityUserDelegation", + "namespace": "Volo.Abp.Identity", "name": "FindActiveDelegationByIdAsync", "summary": null, "isAsync": true, @@ -2328,6 +2563,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.Identity", "name": "DelegateNewUserAsync", "summary": null, "isAsync": true, @@ -2364,6 +2600,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.Identity", "name": "DeleteDelegationAsync", "summary": null, "isAsync": true, @@ -2418,6 +2655,7 @@ "methods": [ { "returnType": "IdentityResult", + "namespace": "Volo.Abp.Identity", "name": "CreateAsync", "summary": null, "isAsync": true, @@ -2442,8 +2680,26 @@ } ] }, + { + "returnType": "IdentityResult", + "namespace": "Volo.Abp.Identity", + "name": "DeleteAsync", + "summary": null, + "isAsync": true, + "isPublic": true, + "isPrivate": false, + "isStatic": false, + "parameters": [ + { + "type": "IdentityUser", + "name": "user", + "isOptional": false + } + ] + }, { "returnType": "IdentityUser", + "namespace": "Volo.Abp.Identity", "name": "GetByIdAsync", "summary": null, "isAsync": true, @@ -2460,6 +2716,7 @@ }, { "returnType": "IdentityResult", + "namespace": "Volo.Abp.Identity", "name": "SetRolesAsync", "summary": null, "isAsync": true, @@ -2481,6 +2738,7 @@ }, { "returnType": "Boolean", + "namespace": "Volo.Abp.Identity", "name": "IsInOrganizationUnitAsync", "summary": null, "isAsync": true, @@ -2502,6 +2760,7 @@ }, { "returnType": "Boolean", + "namespace": "Volo.Abp.Identity", "name": "IsInOrganizationUnitAsync", "summary": null, "isAsync": true, @@ -2523,6 +2782,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.Identity", "name": "AddToOrganizationUnitAsync", "summary": null, "isAsync": true, @@ -2544,6 +2804,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.Identity", "name": "AddToOrganizationUnitAsync", "summary": null, "isAsync": true, @@ -2565,6 +2826,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.Identity", "name": "RemoveFromOrganizationUnitAsync", "summary": null, "isAsync": true, @@ -2586,6 +2848,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.Identity", "name": "RemoveFromOrganizationUnitAsync", "summary": null, "isAsync": true, @@ -2607,6 +2870,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.Identity", "name": "SetOrganizationUnitsAsync", "summary": null, "isAsync": true, @@ -2628,6 +2892,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.Identity", "name": "SetOrganizationUnitsAsync", "summary": null, "isAsync": true, @@ -2649,6 +2914,7 @@ }, { "returnType": "List", + "namespace": "Volo.Abp.Identity", "name": "GetOrganizationUnitsAsync", "summary": null, "isAsync": true, @@ -2670,6 +2936,7 @@ }, { "returnType": "List", + "namespace": "Volo.Abp.Identity", "name": "GetUsersInOrganizationUnitAsync", "summary": null, "isAsync": true, @@ -2691,6 +2958,7 @@ }, { "returnType": "IdentityResult", + "namespace": "Volo.Abp.Identity", "name": "AddDefaultRolesAsync", "summary": null, "isAsync": true, @@ -2707,6 +2975,7 @@ }, { "returnType": "Boolean", + "namespace": "Volo.Abp.Identity", "name": "ShouldPeriodicallyChangePasswordAsync", "summary": null, "isAsync": true, @@ -2723,6 +2992,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.Identity", "name": "ResetRecoveryCodesAsync", "summary": null, "isAsync": true, @@ -2736,9 +3006,153 @@ "isOptional": false } ] - } - ], - "implementingInterfaces": [ + }, + { + "returnType": "IdentityResult", + "namespace": "Volo.Abp.Identity", + "name": "SetEmailAsync", + "summary": null, + "isAsync": true, + "isPublic": true, + "isPrivate": false, + "isStatic": false, + "parameters": [ + { + "type": "IdentityUser", + "name": "user", + "isOptional": false + }, + { + "type": "String", + "name": "email", + "isOptional": false + } + ] + }, + { + "returnType": "IdentityResult", + "namespace": "Volo.Abp.Identity", + "name": "SetUserNameAsync", + "summary": null, + "isAsync": true, + "isPublic": true, + "isPrivate": false, + "isStatic": false, + "parameters": [ + { + "type": "IdentityUser", + "name": "user", + "isOptional": false + }, + { + "type": "String", + "name": "userName", + "isOptional": false + } + ] + }, + { + "returnType": "Void", + "namespace": "Volo.Abp.Identity", + "name": "UpdateRoleAsync", + "summary": null, + "isAsync": true, + "isPublic": true, + "isPrivate": false, + "isStatic": false, + "parameters": [ + { + "type": "Guid", + "name": "sourceRoleId", + "isOptional": false + }, + { + "type": "Nullable", + "name": "targetRoleId", + "isOptional": false + } + ] + }, + { + "returnType": "Void", + "namespace": "Volo.Abp.Identity", + "name": "UpdateOrganizationAsync", + "summary": null, + "isAsync": true, + "isPublic": true, + "isPrivate": false, + "isStatic": false, + "parameters": [ + { + "type": "Guid", + "name": "sourceOrganizationId", + "isOptional": false + }, + { + "type": "Nullable", + "name": "targetOrganizationId", + "isOptional": false + } + ] + }, + { + "returnType": "Boolean", + "namespace": "Volo.Abp.Identity", + "name": "ValidateUserNameAsync", + "summary": null, + "isAsync": true, + "isPublic": true, + "isPrivate": false, + "isStatic": false, + "parameters": [ + { + "type": "String", + "name": "userName", + "isOptional": false + }, + { + "type": "Nullable", + "name": "userId", + "isOptional": true + } + ] + }, + { + "returnType": "String", + "namespace": "Volo.Abp.Identity", + "name": "GetRandomUserNameAsync", + "summary": null, + "isAsync": true, + "isPublic": true, + "isPrivate": false, + "isStatic": false, + "parameters": [ + { + "type": "Int32", + "name": "length", + "isOptional": false + } + ] + }, + { + "returnType": "String", + "namespace": "Volo.Abp.Identity", + "name": "GetUserNameFromEmailAsync", + "summary": null, + "isAsync": true, + "isPublic": true, + "isPrivate": false, + "isStatic": false, + "parameters": [ + { + "type": "String", + "name": "email", + "isOptional": false + } + ] + } + ], + "implementingInterfaces": [ { "name": "IDisposable", "namespace": "System", @@ -2773,6 +3187,7 @@ "methods": [ { "returnType": "Void", + "namespace": "Volo.Abp.Identity", "name": "CreateAsync", "summary": null, "isAsync": true, @@ -2789,6 +3204,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.Identity", "name": "UpdateAsync", "summary": null, "isAsync": true, @@ -2805,6 +3221,7 @@ }, { "returnType": "String", + "namespace": "Volo.Abp.Identity", "name": "GetNextChildCodeAsync", "summary": null, "isAsync": true, @@ -2821,6 +3238,7 @@ }, { "returnType": "OrganizationUnit", + "namespace": "Volo.Abp.Identity", "name": "GetLastChildOrNullAsync", "summary": null, "isAsync": true, @@ -2837,6 +3255,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.Identity", "name": "DeleteAsync", "summary": null, "isAsync": true, @@ -2853,6 +3272,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.Identity", "name": "MoveAsync", "summary": null, "isAsync": true, @@ -2874,6 +3294,7 @@ }, { "returnType": "String", + "namespace": "Volo.Abp.Identity", "name": "GetCodeOrDefaultAsync", "summary": null, "isAsync": true, @@ -2890,6 +3311,7 @@ }, { "returnType": "List", + "namespace": "Volo.Abp.Identity", "name": "FindChildrenAsync", "summary": null, "isAsync": true, @@ -2911,6 +3333,7 @@ }, { "returnType": "Boolean", + "namespace": "Volo.Abp.Identity", "name": "IsInOrganizationUnitAsync", "summary": null, "isAsync": true, @@ -2932,6 +3355,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.Identity", "name": "AddRoleToOrganizationUnitAsync", "summary": null, "isAsync": true, @@ -2953,6 +3377,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.Identity", "name": "AddRoleToOrganizationUnitAsync", "summary": null, "isAsync": true, @@ -2974,6 +3399,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.Identity", "name": "RemoveRoleFromOrganizationUnitAsync", "summary": null, "isAsync": true, @@ -2995,6 +3421,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.Identity", "name": "RemoveRoleFromOrganizationUnitAsync", "summary": null, "isAsync": true, @@ -3013,6 +3440,23 @@ "isOptional": false } ] + }, + { + "returnType": "Void", + "namespace": "Volo.Abp.Identity", + "name": "RemoveDynamicClaimCacheAsync", + "summary": null, + "isAsync": true, + "isPublic": true, + "isPrivate": false, + "isStatic": false, + "parameters": [ + { + "type": "OrganizationUnit", + "name": "organizationUnit", + "isOptional": false + } + ] } ], "implementingInterfaces": [ @@ -3078,6 +3522,7 @@ "methods": [ { "returnType": "Boolean", + "namespace": "Volo.Abp.Identity", "name": "AnyAsync", "summary": null, "isAsync": true, @@ -3104,6 +3549,7 @@ }, { "returnType": "List", + "namespace": "Volo.Abp.Identity", "name": "GetListAsync", "summary": null, "isAsync": true, @@ -3140,6 +3586,7 @@ }, { "returnType": "Int64", + "namespace": "Volo.Abp.Identity", "name": "GetCountAsync", "summary": null, "isAsync": true, @@ -3158,6 +3605,28 @@ "isOptional": true } ] + }, + { + "returnType": "List", + "namespace": "Volo.Abp.Identity", + "name": "GetListByNamesAsync", + "summary": null, + "isAsync": true, + "isPublic": true, + "isPrivate": false, + "isStatic": false, + "parameters": [ + { + "type": "IEnumerable", + "name": "names", + "isOptional": false + }, + { + "type": "CancellationToken", + "name": "cancellationToken", + "isOptional": true + } + ] } ], "contentType": "repositoryInterface", @@ -3209,6 +3678,7 @@ "methods": [ { "returnType": "IdentityLinkUser", + "namespace": "Volo.Abp.Identity", "name": "FindAsync", "summary": null, "isAsync": true, @@ -3235,6 +3705,7 @@ }, { "returnType": "List", + "namespace": "Volo.Abp.Identity", "name": "GetListAsync", "summary": null, "isAsync": true, @@ -3261,6 +3732,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.Identity", "name": "DeleteAsync", "summary": null, "isAsync": true, @@ -3330,6 +3802,7 @@ "methods": [ { "returnType": "IdentityRole", + "namespace": "Volo.Abp.Identity", "name": "FindByNormalizedNameAsync", "summary": null, "isAsync": true, @@ -3354,8 +3827,51 @@ } ] }, + { + "returnType": "List", + "namespace": "Volo.Abp.Identity", + "name": "GetListWithUserCountAsync", + "summary": null, + "isAsync": true, + "isPublic": true, + "isPrivate": false, + "isStatic": false, + "parameters": [ + { + "type": "String", + "name": "sorting", + "isOptional": true + }, + { + "type": "Int32", + "name": "maxResultCount", + "isOptional": true + }, + { + "type": "Int32", + "name": "skipCount", + "isOptional": true + }, + { + "type": "String", + "name": "filter", + "isOptional": true + }, + { + "type": "Boolean", + "name": "includeDetails", + "isOptional": true + }, + { + "type": "CancellationToken", + "name": "cancellationToken", + "isOptional": true + } + ] + }, { "returnType": "List", + "namespace": "Volo.Abp.Identity", "name": "GetListAsync", "summary": null, "isAsync": true, @@ -3397,6 +3913,7 @@ }, { "returnType": "List", + "namespace": "Volo.Abp.Identity", "name": "GetListAsync", "summary": null, "isAsync": true, @@ -3418,6 +3935,7 @@ }, { "returnType": "List", + "namespace": "Volo.Abp.Identity", "name": "GetDefaultOnesAsync", "summary": null, "isAsync": true, @@ -3439,6 +3957,7 @@ }, { "returnType": "Int64", + "namespace": "Volo.Abp.Identity", "name": "GetCountAsync", "summary": null, "isAsync": true, @@ -3457,31 +3976,58 @@ "isOptional": true } ] - } - ], - "contentType": "repositoryInterface", - "name": "IIdentityRoleRepository", - "summary": null - }, - { - "namespace": "Volo.Abp.Identity", - "entityAnalyzeModel": { - "namespace": "Volo.Abp.Identity", - "primaryKeyType": "Guid", - "properties": [], - "contentType": "entity", - "name": "IdentitySecurityLog", - "summary": null - }, - "implementingInterfaces": [ - { - "name": "IBasicRepository", - "namespace": "Volo.Abp.Domain.Repositories", - "declaringAssemblyName": "Volo.Abp.Ddd.Domain", - "fullName": "Volo.Abp.Domain.Repositories.IBasicRepository" }, { - "name": "IBasicRepository", + "returnType": "Void", + "namespace": "Volo.Abp.Identity", + "name": "RemoveClaimFromAllRolesAsync", + "summary": null, + "isAsync": true, + "isPublic": true, + "isPrivate": false, + "isStatic": false, + "parameters": [ + { + "type": "String", + "name": "claimType", + "isOptional": false + }, + { + "type": "Boolean", + "name": "autoSave", + "isOptional": true + }, + { + "type": "CancellationToken", + "name": "cancellationToken", + "isOptional": true + } + ] + } + ], + "contentType": "repositoryInterface", + "name": "IIdentityRoleRepository", + "summary": null + }, + { + "namespace": "Volo.Abp.Identity", + "entityAnalyzeModel": { + "namespace": "Volo.Abp.Identity", + "primaryKeyType": "Guid", + "properties": [], + "contentType": "entity", + "name": "IdentitySecurityLog", + "summary": null + }, + "implementingInterfaces": [ + { + "name": "IBasicRepository", + "namespace": "Volo.Abp.Domain.Repositories", + "declaringAssemblyName": "Volo.Abp.Ddd.Domain", + "fullName": "Volo.Abp.Domain.Repositories.IBasicRepository" + }, + { + "name": "IBasicRepository", "namespace": "Volo.Abp.Domain.Repositories", "declaringAssemblyName": "Volo.Abp.Ddd.Domain", "fullName": "Volo.Abp.Domain.Repositories.IBasicRepository" @@ -3508,6 +4054,7 @@ "methods": [ { "returnType": "List", + "namespace": "Volo.Abp.Identity", "name": "GetListAsync", "summary": null, "isAsync": true, @@ -3589,6 +4136,7 @@ }, { "returnType": "Int64", + "namespace": "Volo.Abp.Identity", "name": "GetCountAsync", "summary": null, "isAsync": true, @@ -3637,8 +4185,314 @@ "isOptional": true }, { - "type": "String", - "name": "correlationId", + "type": "String", + "name": "correlationId", + "isOptional": true + }, + { + "type": "CancellationToken", + "name": "cancellationToken", + "isOptional": true + } + ] + }, + { + "returnType": "IdentitySecurityLog", + "namespace": "Volo.Abp.Identity", + "name": "GetByUserIdAsync", + "summary": null, + "isAsync": true, + "isPublic": true, + "isPrivate": false, + "isStatic": false, + "parameters": [ + { + "type": "Guid", + "name": "id", + "isOptional": false + }, + { + "type": "Guid", + "name": "userId", + "isOptional": false + }, + { + "type": "Boolean", + "name": "includeDetails", + "isOptional": true + }, + { + "type": "CancellationToken", + "name": "cancellationToken", + "isOptional": true + } + ] + } + ], + "contentType": "repositoryInterface", + "name": "IIdentitySecurityLogRepository", + "summary": null + }, + { + "namespace": "Volo.Abp.Identity", + "entityAnalyzeModel": { + "namespace": "Volo.Abp.Identity", + "primaryKeyType": "Guid", + "properties": [], + "contentType": "entity", + "name": "IdentitySession", + "summary": null + }, + "implementingInterfaces": [ + { + "name": "IBasicRepository", + "namespace": "Volo.Abp.Domain.Repositories", + "declaringAssemblyName": "Volo.Abp.Ddd.Domain", + "fullName": "Volo.Abp.Domain.Repositories.IBasicRepository" + }, + { + "name": "IBasicRepository", + "namespace": "Volo.Abp.Domain.Repositories", + "declaringAssemblyName": "Volo.Abp.Ddd.Domain", + "fullName": "Volo.Abp.Domain.Repositories.IBasicRepository" + }, + { + "name": "IReadOnlyBasicRepository", + "namespace": "Volo.Abp.Domain.Repositories", + "declaringAssemblyName": "Volo.Abp.Ddd.Domain", + "fullName": "Volo.Abp.Domain.Repositories.IReadOnlyBasicRepository" + }, + { + "name": "IRepository", + "namespace": "Volo.Abp.Domain.Repositories", + "declaringAssemblyName": "Volo.Abp.Ddd.Domain", + "fullName": "Volo.Abp.Domain.Repositories.IRepository" + }, + { + "name": "IReadOnlyBasicRepository", + "namespace": "Volo.Abp.Domain.Repositories", + "declaringAssemblyName": "Volo.Abp.Ddd.Domain", + "fullName": "Volo.Abp.Domain.Repositories.IReadOnlyBasicRepository" + } + ], + "methods": [ + { + "returnType": "IdentitySession", + "namespace": "Volo.Abp.Identity", + "name": "FindAsync", + "summary": null, + "isAsync": true, + "isPublic": true, + "isPrivate": false, + "isStatic": false, + "parameters": [ + { + "type": "String", + "name": "sessionId", + "isOptional": false + }, + { + "type": "CancellationToken", + "name": "cancellationToken", + "isOptional": true + } + ] + }, + { + "returnType": "IdentitySession", + "namespace": "Volo.Abp.Identity", + "name": "GetAsync", + "summary": null, + "isAsync": true, + "isPublic": true, + "isPrivate": false, + "isStatic": false, + "parameters": [ + { + "type": "String", + "name": "sessionId", + "isOptional": false + }, + { + "type": "CancellationToken", + "name": "cancellationToken", + "isOptional": true + } + ] + }, + { + "returnType": "Boolean", + "namespace": "Volo.Abp.Identity", + "name": "ExistAsync", + "summary": null, + "isAsync": true, + "isPublic": true, + "isPrivate": false, + "isStatic": false, + "parameters": [ + { + "type": "Guid", + "name": "id", + "isOptional": false + }, + { + "type": "CancellationToken", + "name": "cancellationToken", + "isOptional": true + } + ] + }, + { + "returnType": "Boolean", + "namespace": "Volo.Abp.Identity", + "name": "ExistAsync", + "summary": null, + "isAsync": true, + "isPublic": true, + "isPrivate": false, + "isStatic": false, + "parameters": [ + { + "type": "String", + "name": "sessionId", + "isOptional": false + }, + { + "type": "CancellationToken", + "name": "cancellationToken", + "isOptional": true + } + ] + }, + { + "returnType": "List", + "namespace": "Volo.Abp.Identity", + "name": "GetListAsync", + "summary": null, + "isAsync": true, + "isPublic": true, + "isPrivate": false, + "isStatic": false, + "parameters": [ + { + "type": "String", + "name": "sorting", + "isOptional": true + }, + { + "type": "Int32", + "name": "maxResultCount", + "isOptional": true + }, + { + "type": "Int32", + "name": "skipCount", + "isOptional": true + }, + { + "type": "Nullable", + "name": "userId", + "isOptional": true + }, + { + "type": "String", + "name": "device", + "isOptional": true + }, + { + "type": "String", + "name": "clientId", + "isOptional": true + }, + { + "type": "CancellationToken", + "name": "cancellationToken", + "isOptional": true + } + ] + }, + { + "returnType": "Int64", + "namespace": "Volo.Abp.Identity", + "name": "GetCountAsync", + "summary": null, + "isAsync": true, + "isPublic": true, + "isPrivate": false, + "isStatic": false, + "parameters": [ + { + "type": "Nullable", + "name": "userId", + "isOptional": true + }, + { + "type": "String", + "name": "device", + "isOptional": true + }, + { + "type": "String", + "name": "clientId", + "isOptional": true + }, + { + "type": "CancellationToken", + "name": "cancellationToken", + "isOptional": true + } + ] + }, + { + "returnType": "Void", + "namespace": "Volo.Abp.Identity", + "name": "DeleteAllAsync", + "summary": null, + "isAsync": true, + "isPublic": true, + "isPrivate": false, + "isStatic": false, + "parameters": [ + { + "type": "Guid", + "name": "userId", + "isOptional": false + }, + { + "type": "Nullable", + "name": "exceptSessionId", + "isOptional": true + }, + { + "type": "CancellationToken", + "name": "cancellationToken", + "isOptional": true + } + ] + }, + { + "returnType": "Void", + "namespace": "Volo.Abp.Identity", + "name": "DeleteAllAsync", + "summary": null, + "isAsync": true, + "isPublic": true, + "isPrivate": false, + "isStatic": false, + "parameters": [ + { + "type": "Guid", + "name": "userId", + "isOptional": false + }, + { + "type": "String", + "name": "device", + "isOptional": false + }, + { + "type": "Nullable", + "name": "exceptSessionId", "isOptional": true }, { @@ -3649,8 +4503,9 @@ ] }, { - "returnType": "IdentitySecurityLog", - "name": "GetByUserIdAsync", + "returnType": "Void", + "namespace": "Volo.Abp.Identity", + "name": "DeleteAllAsync", "summary": null, "isAsync": true, "isPublic": true, @@ -3658,20 +4513,10 @@ "isStatic": false, "parameters": [ { - "type": "Guid", - "name": "id", - "isOptional": false - }, - { - "type": "Guid", - "name": "userId", + "type": "TimeSpan", + "name": "inactiveTimeSpan", "isOptional": false }, - { - "type": "Boolean", - "name": "includeDetails", - "isOptional": true - }, { "type": "CancellationToken", "name": "cancellationToken", @@ -3681,7 +4526,7 @@ } ], "contentType": "repositoryInterface", - "name": "IIdentitySecurityLogRepository", + "name": "IIdentitySessionRepository", "summary": null }, { @@ -3729,6 +4574,7 @@ "methods": [ { "returnType": "List", + "namespace": "Volo.Abp.Identity", "name": "GetListAsync", "summary": null, "isAsync": true, @@ -3755,6 +4601,7 @@ }, { "returnType": "List", + "namespace": "Volo.Abp.Identity", "name": "GetActiveDelegationsAsync", "summary": null, "isAsync": true, @@ -3776,6 +4623,7 @@ }, { "returnType": "IdentityUserDelegation", + "namespace": "Volo.Abp.Identity", "name": "FindActiveDelegationByIdAsync", "summary": null, "isAsync": true, @@ -3845,6 +4693,7 @@ "methods": [ { "returnType": "IdentityUser", + "namespace": "Volo.Abp.Identity", "name": "FindByNormalizedUserNameAsync", "summary": null, "isAsync": true, @@ -3871,6 +4720,7 @@ }, { "returnType": "List", + "namespace": "Volo.Abp.Identity", "name": "GetRoleNamesAsync", "summary": null, "isAsync": true, @@ -3892,6 +4742,7 @@ }, { "returnType": "List", + "namespace": "Volo.Abp.Identity", "name": "GetRoleNamesInOrganizationUnitAsync", "summary": null, "isAsync": true, @@ -3913,6 +4764,7 @@ }, { "returnType": "IdentityUser", + "namespace": "Volo.Abp.Identity", "name": "FindByLoginAsync", "summary": null, "isAsync": true, @@ -3944,6 +4796,7 @@ }, { "returnType": "IdentityUser", + "namespace": "Volo.Abp.Identity", "name": "FindByNormalizedEmailAsync", "summary": null, "isAsync": true, @@ -3970,6 +4823,7 @@ }, { "returnType": "List", + "namespace": "Volo.Abp.Identity", "name": "GetListByClaimAsync", "summary": null, "isAsync": true, @@ -3994,8 +4848,36 @@ } ] }, + { + "returnType": "Void", + "namespace": "Volo.Abp.Identity", + "name": "RemoveClaimFromAllUsersAsync", + "summary": null, + "isAsync": true, + "isPublic": true, + "isPrivate": false, + "isStatic": false, + "parameters": [ + { + "type": "String", + "name": "claimType", + "isOptional": false + }, + { + "type": "Boolean", + "name": "autoSave", + "isOptional": true + }, + { + "type": "CancellationToken", + "name": "cancellationToken", + "isOptional": true + } + ] + }, { "returnType": "List", + "namespace": "Volo.Abp.Identity", "name": "GetListByNormalizedRoleNameAsync", "summary": null, "isAsync": true, @@ -4020,8 +4902,31 @@ } ] }, + { + "returnType": "List", + "namespace": "Volo.Abp.Identity", + "name": "GetUserIdListByRoleIdAsync", + "summary": null, + "isAsync": true, + "isPublic": true, + "isPrivate": false, + "isStatic": false, + "parameters": [ + { + "type": "Guid", + "name": "roleId", + "isOptional": false + }, + { + "type": "CancellationToken", + "name": "cancellationToken", + "isOptional": true + } + ] + }, { "returnType": "List", + "namespace": "Volo.Abp.Identity", "name": "GetListAsync", "summary": null, "isAsync": true, @@ -4138,6 +5043,7 @@ }, { "returnType": "List", + "namespace": "Volo.Abp.Identity", "name": "GetRolesAsync", "summary": null, "isAsync": true, @@ -4164,6 +5070,7 @@ }, { "returnType": "List", + "namespace": "Volo.Abp.Identity", "name": "GetOrganizationUnitsAsync", "summary": null, "isAsync": true, @@ -4190,6 +5097,7 @@ }, { "returnType": "List", + "namespace": "Volo.Abp.Identity", "name": "GetUsersInOrganizationUnitAsync", "summary": null, "isAsync": true, @@ -4211,6 +5119,7 @@ }, { "returnType": "List", + "namespace": "Volo.Abp.Identity", "name": "GetUsersInOrganizationsListAsync", "summary": null, "isAsync": true, @@ -4232,6 +5141,7 @@ }, { "returnType": "List", + "namespace": "Volo.Abp.Identity", "name": "GetUsersInOrganizationUnitWithChildrenAsync", "summary": null, "isAsync": true, @@ -4253,6 +5163,7 @@ }, { "returnType": "Int64", + "namespace": "Volo.Abp.Identity", "name": "GetCountAsync", "summary": null, "isAsync": true, @@ -4349,6 +5260,7 @@ }, { "returnType": "IdentityUser", + "namespace": "Volo.Abp.Identity", "name": "FindByTenantIdAndUserNameAsync", "summary": null, "isAsync": true, @@ -4380,6 +5292,7 @@ }, { "returnType": "List", + "namespace": "Volo.Abp.Identity", "name": "GetListByIdsAsync", "summary": null, "isAsync": true, @@ -4403,6 +5316,82 @@ "isOptional": true } ] + }, + { + "returnType": "Void", + "namespace": "Volo.Abp.Identity", + "name": "UpdateRoleAsync", + "summary": null, + "isAsync": true, + "isPublic": true, + "isPrivate": false, + "isStatic": false, + "parameters": [ + { + "type": "Guid", + "name": "sourceRoleId", + "isOptional": false + }, + { + "type": "Nullable", + "name": "targetRoleId", + "isOptional": false + }, + { + "type": "CancellationToken", + "name": "cancellationToken", + "isOptional": true + } + ] + }, + { + "returnType": "Void", + "namespace": "Volo.Abp.Identity", + "name": "UpdateOrganizationAsync", + "summary": null, + "isAsync": true, + "isPublic": true, + "isPrivate": false, + "isStatic": false, + "parameters": [ + { + "type": "Guid", + "name": "sourceOrganizationId", + "isOptional": false + }, + { + "type": "Nullable", + "name": "targetOrganizationId", + "isOptional": false + }, + { + "type": "CancellationToken", + "name": "cancellationToken", + "isOptional": true + } + ] + }, + { + "returnType": "List", + "namespace": "Volo.Abp.Identity", + "name": "GetRoleNamesAsync", + "summary": null, + "isAsync": true, + "isPublic": true, + "isPrivate": false, + "isStatic": false, + "parameters": [ + { + "type": "IEnumerable", + "name": "userIds", + "isOptional": false + }, + { + "type": "CancellationToken", + "name": "cancellationToken", + "isOptional": true + } + ] } ], "contentType": "repositoryInterface", @@ -4454,6 +5443,7 @@ "methods": [ { "returnType": "List", + "namespace": "Volo.Abp.Identity", "name": "GetChildrenAsync", "summary": null, "isAsync": true, @@ -4480,6 +5470,7 @@ }, { "returnType": "List", + "namespace": "Volo.Abp.Identity", "name": "GetAllChildrenWithParentCodeAsync", "summary": null, "isAsync": true, @@ -4511,6 +5502,7 @@ }, { "returnType": "OrganizationUnit", + "namespace": "Volo.Abp.Identity", "name": "GetAsync", "summary": null, "isAsync": true, @@ -4537,6 +5529,7 @@ }, { "returnType": "List", + "namespace": "Volo.Abp.Identity", "name": "GetListAsync", "summary": null, "isAsync": true, @@ -4573,6 +5566,7 @@ }, { "returnType": "List", + "namespace": "Volo.Abp.Identity", "name": "GetListAsync", "summary": null, "isAsync": true, @@ -4597,8 +5591,36 @@ } ] }, + { + "returnType": "List", + "namespace": "Volo.Abp.Identity", + "name": "GetListByRoleIdAsync", + "summary": null, + "isAsync": true, + "isPublic": true, + "isPrivate": false, + "isStatic": false, + "parameters": [ + { + "type": "Guid", + "name": "roleId", + "isOptional": false + }, + { + "type": "Boolean", + "name": "includeDetails", + "isOptional": true + }, + { + "type": "CancellationToken", + "name": "cancellationToken", + "isOptional": true + } + ] + }, { "returnType": "List", + "namespace": "Volo.Abp.Identity", "name": "GetRolesAsync", "summary": null, "isAsync": true, @@ -4638,8 +5660,51 @@ } ] }, + { + "returnType": "List", + "namespace": "Volo.Abp.Identity", + "name": "GetRolesAsync", + "summary": null, + "isAsync": true, + "isPublic": true, + "isPrivate": false, + "isStatic": false, + "parameters": [ + { + "type": "Guid[]", + "name": "organizationUnitIds", + "isOptional": false + }, + { + "type": "String", + "name": "sorting", + "isOptional": true + }, + { + "type": "Int32", + "name": "maxResultCount", + "isOptional": true + }, + { + "type": "Int32", + "name": "skipCount", + "isOptional": true + }, + { + "type": "Boolean", + "name": "includeDetails", + "isOptional": true + }, + { + "type": "CancellationToken", + "name": "cancellationToken", + "isOptional": true + } + ] + }, { "returnType": "Int32", + "namespace": "Volo.Abp.Identity", "name": "GetRolesCountAsync", "summary": null, "isAsync": true, @@ -4661,6 +5726,7 @@ }, { "returnType": "List", + "namespace": "Volo.Abp.Identity", "name": "GetUnaddedRolesAsync", "summary": null, "isAsync": true, @@ -4707,6 +5773,7 @@ }, { "returnType": "Int32", + "namespace": "Volo.Abp.Identity", "name": "GetUnaddedRolesCountAsync", "summary": null, "isAsync": true, @@ -4733,6 +5800,7 @@ }, { "returnType": "List", + "namespace": "Volo.Abp.Identity", "name": "GetMembersAsync", "summary": null, "isAsync": true, @@ -4777,8 +5845,31 @@ } ] }, + { + "returnType": "List", + "namespace": "Volo.Abp.Identity", + "name": "GetMemberIdsAsync", + "summary": null, + "isAsync": true, + "isPublic": true, + "isPrivate": false, + "isStatic": false, + "parameters": [ + { + "type": "Guid", + "name": "id", + "isOptional": false + }, + { + "type": "CancellationToken", + "name": "cancellationToken", + "isOptional": true + } + ] + }, { "returnType": "Int32", + "namespace": "Volo.Abp.Identity", "name": "GetMembersCountAsync", "summary": null, "isAsync": true, @@ -4805,6 +5896,7 @@ }, { "returnType": "List", + "namespace": "Volo.Abp.Identity", "name": "GetUnaddedUsersAsync", "summary": null, "isAsync": true, @@ -4851,6 +5943,7 @@ }, { "returnType": "Int32", + "namespace": "Volo.Abp.Identity", "name": "GetUnaddedUsersCountAsync", "summary": null, "isAsync": true, @@ -4877,6 +5970,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.Identity", "name": "RemoveAllRolesAsync", "summary": null, "isAsync": true, @@ -4898,6 +5992,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.Identity", "name": "RemoveAllMembersAsync", "summary": null, "isAsync": true, diff --git a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/AbpIdentityUserValidator.cs b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/AbpIdentityUserValidator.cs index c7507c6e36..149ff3bf31 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/AbpIdentityUserValidator.cs +++ b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/AbpIdentityUserValidator.cs @@ -41,6 +41,24 @@ namespace Volo.Abp.Identity }); } } + + var email = await manager.GetEmailAsync(user); + if (email == null) + { + errors.Add(describer.InvalidEmail(null)); + } + else + { + var owner = await manager.FindByNameAsync(email); + if (owner != null && !string.Equals(await manager.GetUserIdAsync(owner), await manager.GetUserIdAsync(user))) + { + errors.Add(new IdentityError + { + Code = "InvalidEmail", + Description = Localizer["Volo.Abp.Identity:InvalidEmail", email] + }); + } + } return errors.Count > 0 ? IdentityResult.Failed(errors.ToArray()) : IdentityResult.Success; } diff --git a/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo.Abp.Identity.EntityFrameworkCore.abppkg.analyze.json b/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo.Abp.Identity.EntityFrameworkCore.abppkg.analyze.json index 7889d66fe1..06cd2fea51 100644 --- a/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo.Abp.Identity.EntityFrameworkCore.abppkg.analyze.json +++ b/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo.Abp.Identity.EntityFrameworkCore.abppkg.analyze.json @@ -69,6 +69,25 @@ "connectionStringName": "AbpIdentity", "databaseTables": [], "replacedDbContexts": [], + "modelBuilderExtensionMethods": [ + { + "returnType": "Void", + "namespace": "Volo.Abp.Identity.EntityFrameworkCore", + "name": "ConfigureIdentity", + "summary": null, + "isAsync": false, + "isPublic": true, + "isPrivate": false, + "isStatic": true, + "parameters": [ + { + "type": "ModelBuilder", + "name": "builder", + "isOptional": false + } + ] + } + ], "implementingInterfaces": [ { "name": "IInfrastructure", @@ -124,6 +143,12 @@ "declaringAssemblyName": "Volo.Abp.EntityFrameworkCore", "fullName": "Volo.Abp.EntityFrameworkCore.IEfCoreDbContext" }, + { + "name": "IAbpEfCoreDbFunctionContext", + "namespace": "Volo.Abp.EntityFrameworkCore.GlobalFilters", + "declaringAssemblyName": "Volo.Abp.EntityFrameworkCore", + "fullName": "Volo.Abp.EntityFrameworkCore.GlobalFilters.IAbpEfCoreDbFunctionContext" + }, { "name": "ITransientDependency", "namespace": "Volo.Abp.DependencyInjection", diff --git a/modules/identity/src/Volo.Abp.Identity.HttpApi/Volo.Abp.Identity.HttpApi.abppkg.analyze.json b/modules/identity/src/Volo.Abp.Identity.HttpApi/Volo.Abp.Identity.HttpApi.abppkg.analyze.json index d3029541cf..60e2d18f17 100644 --- a/modules/identity/src/Volo.Abp.Identity.HttpApi/Volo.Abp.Identity.HttpApi.abppkg.analyze.json +++ b/modules/identity/src/Volo.Abp.Identity.HttpApi/Volo.Abp.Identity.HttpApi.abppkg.analyze.json @@ -96,6 +96,10 @@ { "name": "MaxResultCount", "type": "Int32" + }, + { + "name": "ExtraProperties", + "type": "ExtraPropertyDictionary" } ] }, @@ -190,6 +194,10 @@ { "name": "MaxResultCount", "type": "Int32" + }, + { + "name": "ExtraProperties", + "type": "ExtraPropertyDictionary" } ] }, @@ -348,6 +356,10 @@ { "name": "MaxResultCount", "type": "Int32" + }, + { + "name": "ExtraProperties", + "type": "ExtraPropertyDictionary" } ] }, diff --git a/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo.Abp.Identity.MongoDB.abppkg.analyze.json b/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo.Abp.Identity.MongoDB.abppkg.analyze.json index 16c91703aa..57087c93c4 100644 --- a/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo.Abp.Identity.MongoDB.abppkg.analyze.json +++ b/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo.Abp.Identity.MongoDB.abppkg.analyze.json @@ -69,45 +69,51 @@ "connectionStringName": "AbpIdentity", "databaseCollections": [ { - "entityFullName": "Volo.Abp.Identity.IdentityLinkUser", + "entityFullName": "Volo.Abp.Identity.IdentityUser", "contentType": "databaseCollection", - "name": "AbpLinkUsers", + "name": "Users", "summary": null }, { - "entityFullName": "Volo.Abp.Identity.IdentityUserDelegation", + "entityFullName": "Volo.Abp.Identity.IdentityRole", "contentType": "databaseCollection", - "name": "AbpUserDelegations", + "name": "Roles", "summary": null }, { "entityFullName": "Volo.Abp.Identity.IdentityClaimType", "contentType": "databaseCollection", - "name": "AbpClaimTypes", + "name": "ClaimTypes", "summary": null }, { "entityFullName": "Volo.Abp.Identity.OrganizationUnit", "contentType": "databaseCollection", - "name": "AbpOrganizationUnits", + "name": "OrganizationUnits", "summary": null }, { "entityFullName": "Volo.Abp.Identity.IdentitySecurityLog", "contentType": "databaseCollection", - "name": "AbpSecurityLogs", + "name": "SecurityLogs", "summary": null }, { - "entityFullName": "Volo.Abp.Identity.IdentityRole", + "entityFullName": "Volo.Abp.Identity.IdentityLinkUser", "contentType": "databaseCollection", - "name": "AbpRoles", + "name": "LinkUsers", "summary": null }, { - "entityFullName": "Volo.Abp.Identity.IdentityUser", + "entityFullName": "Volo.Abp.Identity.IdentityUserDelegation", + "contentType": "databaseCollection", + "name": "UserDelegations", + "summary": null + }, + { + "entityFullName": "Volo.Abp.Identity.IdentitySession", "contentType": "databaseCollection", - "name": "AbpUsers", + "name": "Sessions", "summary": null } ], diff --git a/modules/identity/src/Volo.Abp.Identity.Web/Volo.Abp.Identity.Web.abppkg.analyze.json b/modules/identity/src/Volo.Abp.Identity.Web/Volo.Abp.Identity.Web.abppkg.analyze.json index 3ab45eaadb..61e3708272 100644 --- a/modules/identity/src/Volo.Abp.Identity.Web/Volo.Abp.Identity.Web.abppkg.analyze.json +++ b/modules/identity/src/Volo.Abp.Identity.Web/Volo.Abp.Identity.Web.abppkg.analyze.json @@ -74,12 +74,6 @@ "name": "AbpIdentityWebModule", "summary": null }, - { - "apis": [], - "contentType": "httpApi", - "name": "Defined Http Apis", - "summary": null - }, { "namespace": "Volo.Abp.Identity.Web.Pages.Identity.Users", "contentType": "webPage", diff --git a/modules/identity/test/Volo.Abp.Identity.AspNetCore.Tests/Volo/Abp/Identity/AspNetCore/AbpIdentityUserValidator_Tests.cs b/modules/identity/test/Volo.Abp.Identity.AspNetCore.Tests/Volo/Abp/Identity/AspNetCore/AbpIdentityUserValidator_Tests.cs index ef9cfb53d3..0333ad7dec 100644 --- a/modules/identity/test/Volo.Abp.Identity.AspNetCore.Tests/Volo/Abp/Identity/AspNetCore/AbpIdentityUserValidator_Tests.cs +++ b/modules/identity/test/Volo.Abp.Identity.AspNetCore.Tests/Volo/Abp/Identity/AspNetCore/AbpIdentityUserValidator_Tests.cs @@ -33,4 +33,19 @@ public class AbpIdentityUserValidator_Tests : AbpIdentityAspNetCoreTestBase identityResult.Errors.First().Code.ShouldBe("InvalidUserName"); identityResult.Errors.First().Description.ShouldBe(Localizer["InvalidUserName", "user1@volosoft.com"]); } + + [Fact] + public async Task Can_Not_Use_Another_Users_Name_As_Your_Email_Test() + { + var user1 = new IdentityUser(Guid.NewGuid(), "user1@volosoft.com", "user@volosoft.com"); + var identityResult = await _identityUserManager.CreateAsync(user1); + identityResult.Succeeded.ShouldBeTrue(); + + var user2 = new IdentityUser(Guid.NewGuid(), "user2", "user1@volosoft.com"); + identityResult = await _identityUserManager.CreateAsync(user2); + identityResult.Succeeded.ShouldBeFalse(); + identityResult.Errors.Count().ShouldBe(1); + identityResult.Errors.First().Code.ShouldBe("InvalidEmail"); + identityResult.Errors.First().Description.ShouldBe(Localizer["Volo.Abp.Identity:InvalidEmail", "user1@volosoft.com"]); + } } diff --git a/modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/LocalizationExtensions/sv.json b/modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/LocalizationExtensions/sv.json new file mode 100644 index 0000000000..571fdfb4fc --- /dev/null +++ b/modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/LocalizationExtensions/sv.json @@ -0,0 +1,7 @@ +{ + "culture": "sv", + "texts": { + "Volo.Abp.Identity:PasswordTooShort": "LösenordslĂ€ngden mĂ„ste vara större Ă€n {0} tecken.", + "Volo.Abp.Identity:PasswordRequiresNonAlphanumeric": "Lösenordet mĂ„ste innehĂ„lla minst ett icke-alfanumeriskt tecken." + } +} \ No newline at end of file diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo.Abp.IdentityServer.Domain.Shared.abppkg.analyze.json b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo.Abp.IdentityServer.Domain.Shared.abppkg.analyze.json index db6116bba5..5887cf0c27 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo.Abp.IdentityServer.Domain.Shared.abppkg.analyze.json +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo.Abp.IdentityServer.Domain.Shared.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Abp.IdentityServer.Domain.Shared", - "hash": "4c08d52a7966ddf0249ea9b228f5019b", + "hash": "", "contents": [ { "namespace": "Volo.Abp.IdentityServer", diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Localization/Resources/sv.json b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Localization/Resources/sv.json new file mode 100644 index 0000000000..cdbf5d0dff --- /dev/null +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Localization/Resources/sv.json @@ -0,0 +1,16 @@ +{ + "culture": "sv", + "texts": { + "Volo.IdentityServer:DuplicateIdentityResourceName": "Identity Resursnamnet finns redan: {Namn}", + "Volo.IdentityServer:DuplicateApiResourceName": "Api-resursnamnet finns redan: {Namn}", + "Volo.IdentityServer:DuplicateApiScopeName": "Namnet pĂ„ Api-omfĂ„nget finns redan: {Namn}", + "Volo.IdentityServer:DuplicateClientId": "KlientId finns redan: {KlientId}", + "UserLockedOut": "AnvĂ€ndarkontot har lĂ„sts pĂ„ grund av ogiltiga inloggningsförsök. VĂ€nligen vĂ€nta ett tag och försök igen.", + "InvalidUserNameOrPassword": "Ogiltigt anvĂ€ndarnamn eller lösenord!", + "LoginIsNotAllowed": "Du fĂ„r inte logga in! Ditt konto Ă€r inaktivt eller sĂ„ behöver du bekrĂ€fta din e-post eller ditt telefonnummer.", + "InvalidUsername": "Ogiltigt anvĂ€ndarnamn eller lösenord!", + "InvalidAuthenticatorCode": "Ogiltig autentiseringskod!", + "InvalidRecoveryCode": "Ogiltig Ă„terstĂ€llningskod!", + "TheTargetUserIsNotLinkedToYou": "MĂ„lanvĂ€ndaren Ă€r inte kopplad till dig!" + } +} \ No newline at end of file diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo.Abp.IdentityServer.Domain.abppkg.analyze.json b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo.Abp.IdentityServer.Domain.abppkg.analyze.json index 25b8ab9746..ee8a8e35db 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo.Abp.IdentityServer.Domain.abppkg.analyze.json +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo.Abp.IdentityServer.Domain.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Abp.IdentityServer.Domain", - "hash": "e92e0873e411d6a1c141aa10c5cfad37", + "hash": "", "contents": [ { "namespace": "Volo.Abp.IdentityServer", @@ -526,6 +526,7 @@ "methods": [ { "returnType": "Void", + "namespace": "Volo.Abp.IdentityServer.IdentityResources", "name": "AddUserClaim", "summary": null, "isAsync": false, @@ -542,6 +543,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.IdentityServer.IdentityResources", "name": "RemoveAllUserClaims", "summary": null, "isAsync": false, @@ -552,6 +554,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.IdentityServer.IdentityResources", "name": "RemoveUserClaim", "summary": null, "isAsync": false, @@ -568,6 +571,7 @@ }, { "returnType": "IdentityResourceClaim", + "namespace": "Volo.Abp.IdentityServer.IdentityResources", "name": "FindUserClaim", "summary": null, "isAsync": false, @@ -584,6 +588,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.IdentityServer.IdentityResources", "name": "AddProperty", "summary": null, "isAsync": false, @@ -605,6 +610,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.IdentityServer.IdentityResources", "name": "RemoveAllProperties", "summary": null, "isAsync": false, @@ -615,6 +621,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.IdentityServer.IdentityResources", "name": "RemoveProperty", "summary": null, "isAsync": false, @@ -631,6 +638,7 @@ }, { "returnType": "IdentityResourceProperty", + "namespace": "Volo.Abp.IdentityServer.IdentityResources", "name": "FindProperty", "summary": null, "isAsync": false, @@ -1060,6 +1068,7 @@ "methods": [ { "returnType": "Void", + "namespace": "Volo.Abp.IdentityServer.Clients", "name": "AddGrantType", "summary": null, "isAsync": false, @@ -1076,6 +1085,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.IdentityServer.Clients", "name": "RemoveAllAllowedGrantTypes", "summary": null, "isAsync": false, @@ -1086,6 +1096,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.IdentityServer.Clients", "name": "RemoveGrantType", "summary": null, "isAsync": false, @@ -1102,6 +1113,7 @@ }, { "returnType": "ClientGrantType", + "namespace": "Volo.Abp.IdentityServer.Clients", "name": "FindGrantType", "summary": null, "isAsync": false, @@ -1118,6 +1130,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.IdentityServer.Clients", "name": "AddSecret", "summary": null, "isAsync": false, @@ -1149,6 +1162,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.IdentityServer.Clients", "name": "RemoveSecret", "summary": null, "isAsync": false, @@ -1170,6 +1184,7 @@ }, { "returnType": "ClientSecret", + "namespace": "Volo.Abp.IdentityServer.Clients", "name": "FindSecret", "summary": null, "isAsync": false, @@ -1191,6 +1206,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.IdentityServer.Clients", "name": "AddScope", "summary": null, "isAsync": false, @@ -1207,6 +1223,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.IdentityServer.Clients", "name": "RemoveAllScopes", "summary": null, "isAsync": false, @@ -1217,6 +1234,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.IdentityServer.Clients", "name": "RemoveScope", "summary": null, "isAsync": false, @@ -1233,6 +1251,7 @@ }, { "returnType": "ClientScope", + "namespace": "Volo.Abp.IdentityServer.Clients", "name": "FindScope", "summary": null, "isAsync": false, @@ -1249,6 +1268,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.IdentityServer.Clients", "name": "AddCorsOrigin", "summary": null, "isAsync": false, @@ -1265,6 +1285,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.IdentityServer.Clients", "name": "AddRedirectUri", "summary": null, "isAsync": false, @@ -1281,6 +1302,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.IdentityServer.Clients", "name": "AddPostLogoutRedirectUri", "summary": null, "isAsync": false, @@ -1297,6 +1319,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.IdentityServer.Clients", "name": "RemoveAllCorsOrigins", "summary": null, "isAsync": false, @@ -1307,6 +1330,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.IdentityServer.Clients", "name": "RemoveCorsOrigin", "summary": null, "isAsync": false, @@ -1323,6 +1347,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.IdentityServer.Clients", "name": "RemoveAllRedirectUris", "summary": null, "isAsync": false, @@ -1333,6 +1358,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.IdentityServer.Clients", "name": "RemoveRedirectUri", "summary": null, "isAsync": false, @@ -1349,6 +1375,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.IdentityServer.Clients", "name": "RemoveAllPostLogoutRedirectUris", "summary": null, "isAsync": false, @@ -1359,6 +1386,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.IdentityServer.Clients", "name": "RemovePostLogoutRedirectUri", "summary": null, "isAsync": false, @@ -1375,6 +1403,7 @@ }, { "returnType": "ClientCorsOrigin", + "namespace": "Volo.Abp.IdentityServer.Clients", "name": "FindCorsOrigin", "summary": null, "isAsync": false, @@ -1391,6 +1420,7 @@ }, { "returnType": "ClientRedirectUri", + "namespace": "Volo.Abp.IdentityServer.Clients", "name": "FindRedirectUri", "summary": null, "isAsync": false, @@ -1407,6 +1437,7 @@ }, { "returnType": "ClientPostLogoutRedirectUri", + "namespace": "Volo.Abp.IdentityServer.Clients", "name": "FindPostLogoutRedirectUri", "summary": null, "isAsync": false, @@ -1423,6 +1454,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.IdentityServer.Clients", "name": "AddProperty", "summary": null, "isAsync": false, @@ -1444,6 +1476,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.IdentityServer.Clients", "name": "RemoveAllProperties", "summary": null, "isAsync": false, @@ -1454,6 +1487,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.IdentityServer.Clients", "name": "RemoveProperty", "summary": null, "isAsync": false, @@ -1470,6 +1504,7 @@ }, { "returnType": "ClientProperty", + "namespace": "Volo.Abp.IdentityServer.Clients", "name": "FindProperty", "summary": null, "isAsync": false, @@ -1486,6 +1521,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.IdentityServer.Clients", "name": "AddClaim", "summary": null, "isAsync": false, @@ -1507,6 +1543,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.IdentityServer.Clients", "name": "RemoveAllClaims", "summary": null, "isAsync": false, @@ -1517,6 +1554,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.IdentityServer.Clients", "name": "RemoveClaim", "summary": null, "isAsync": false, @@ -1533,6 +1571,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.IdentityServer.Clients", "name": "RemoveClaim", "summary": null, "isAsync": false, @@ -1554,6 +1593,7 @@ }, { "returnType": "List", + "namespace": "Volo.Abp.IdentityServer.Clients", "name": "FindClaims", "summary": null, "isAsync": false, @@ -1570,6 +1610,7 @@ }, { "returnType": "ClientClaim", + "namespace": "Volo.Abp.IdentityServer.Clients", "name": "FindClaim", "summary": null, "isAsync": false, @@ -1591,6 +1632,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.IdentityServer.Clients", "name": "AddIdentityProviderRestriction", "summary": null, "isAsync": false, @@ -1607,6 +1649,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.IdentityServer.Clients", "name": "RemoveAllIdentityProviderRestrictions", "summary": null, "isAsync": false, @@ -1617,6 +1660,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.IdentityServer.Clients", "name": "RemoveIdentityProviderRestriction", "summary": null, "isAsync": false, @@ -1633,6 +1677,7 @@ }, { "returnType": "ClientIdPRestriction", + "namespace": "Volo.Abp.IdentityServer.Clients", "name": "FindIdentityProviderRestriction", "summary": null, "isAsync": false, @@ -2067,6 +2112,7 @@ "methods": [ { "returnType": "Void", + "namespace": "Volo.Abp.IdentityServer.ApiScopes", "name": "AddUserClaim", "summary": null, "isAsync": false, @@ -2083,6 +2129,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.IdentityServer.ApiScopes", "name": "RemoveAllUserClaims", "summary": null, "isAsync": false, @@ -2093,6 +2140,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.IdentityServer.ApiScopes", "name": "RemoveClaim", "summary": null, "isAsync": false, @@ -2109,6 +2157,7 @@ }, { "returnType": "ApiScopeClaim", + "namespace": "Volo.Abp.IdentityServer.ApiScopes", "name": "FindClaim", "summary": null, "isAsync": false, @@ -2125,6 +2174,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.IdentityServer.ApiScopes", "name": "AddProperty", "summary": null, "isAsync": false, @@ -2146,6 +2196,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.IdentityServer.ApiScopes", "name": "RemoveAllProperties", "summary": null, "isAsync": false, @@ -2156,6 +2207,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.IdentityServer.ApiScopes", "name": "RemoveProperty", "summary": null, "isAsync": false, @@ -2172,6 +2224,7 @@ }, { "returnType": "ApiScopeProperty", + "namespace": "Volo.Abp.IdentityServer.ApiScopes", "name": "FindProperty", "summary": null, "isAsync": false, @@ -2369,6 +2422,7 @@ "methods": [ { "returnType": "Void", + "namespace": "Volo.Abp.IdentityServer.ApiResources", "name": "AddSecret", "summary": null, "isAsync": false, @@ -2400,6 +2454,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.IdentityServer.ApiResources", "name": "RemoveSecret", "summary": null, "isAsync": false, @@ -2421,6 +2476,7 @@ }, { "returnType": "ApiResourceSecret", + "namespace": "Volo.Abp.IdentityServer.ApiResources", "name": "FindSecret", "summary": null, "isAsync": false, @@ -2442,6 +2498,7 @@ }, { "returnType": "ApiResourceScope", + "namespace": "Volo.Abp.IdentityServer.ApiResources", "name": "AddScope", "summary": null, "isAsync": false, @@ -2458,6 +2515,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.IdentityServer.ApiResources", "name": "AddUserClaim", "summary": null, "isAsync": false, @@ -2474,6 +2532,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.IdentityServer.ApiResources", "name": "RemoveAllUserClaims", "summary": null, "isAsync": false, @@ -2484,6 +2543,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.IdentityServer.ApiResources", "name": "RemoveClaim", "summary": null, "isAsync": false, @@ -2500,6 +2560,7 @@ }, { "returnType": "ApiResourceClaim", + "namespace": "Volo.Abp.IdentityServer.ApiResources", "name": "FindClaim", "summary": null, "isAsync": false, @@ -2516,6 +2577,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.IdentityServer.ApiResources", "name": "RemoveAllSecrets", "summary": null, "isAsync": false, @@ -2526,6 +2588,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.IdentityServer.ApiResources", "name": "RemoveAllScopes", "summary": null, "isAsync": false, @@ -2536,6 +2599,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.IdentityServer.ApiResources", "name": "RemoveScope", "summary": null, "isAsync": false, @@ -2552,6 +2616,7 @@ }, { "returnType": "ApiResourceScope", + "namespace": "Volo.Abp.IdentityServer.ApiResources", "name": "FindScope", "summary": null, "isAsync": false, @@ -2568,6 +2633,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.IdentityServer.ApiResources", "name": "AddProperty", "summary": null, "isAsync": false, @@ -2589,6 +2655,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.IdentityServer.ApiResources", "name": "RemoveAllProperties", "summary": null, "isAsync": false, @@ -2599,6 +2666,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.IdentityServer.ApiResources", "name": "RemoveProperty", "summary": null, "isAsync": false, @@ -2615,6 +2683,7 @@ }, { "returnType": "ApiResourceProperty", + "namespace": "Volo.Abp.IdentityServer.ApiResources", "name": "FindProperty", "summary": null, "isAsync": false, @@ -2760,6 +2829,7 @@ "methods": [ { "returnType": "List", + "namespace": "Volo.Abp.IdentityServer.IdentityResources", "name": "GetListByScopeNameAsync", "summary": null, "isAsync": true, @@ -2786,6 +2856,7 @@ }, { "returnType": "List", + "namespace": "Volo.Abp.IdentityServer.IdentityResources", "name": "GetListAsync", "summary": null, "isAsync": true, @@ -2827,6 +2898,7 @@ }, { "returnType": "Int64", + "namespace": "Volo.Abp.IdentityServer.IdentityResources", "name": "GetCountAsync", "summary": null, "isAsync": true, @@ -2848,6 +2920,7 @@ }, { "returnType": "IdentityResource", + "namespace": "Volo.Abp.IdentityServer.IdentityResources", "name": "FindByNameAsync", "summary": null, "isAsync": true, @@ -2874,6 +2947,7 @@ }, { "returnType": "Boolean", + "namespace": "Volo.Abp.IdentityServer.IdentityResources", "name": "CheckNameExistAsync", "summary": null, "isAsync": true, @@ -2948,6 +3022,7 @@ "methods": [ { "returnType": "List", + "namespace": "Volo.Abp.IdentityServer.Grants", "name": "GetListAsync", "summary": null, "isAsync": true, @@ -2989,6 +3064,7 @@ }, { "returnType": "PersistedGrant", + "namespace": "Volo.Abp.IdentityServer.Grants", "name": "FindByKeyAsync", "summary": null, "isAsync": true, @@ -3010,6 +3086,7 @@ }, { "returnType": "List", + "namespace": "Volo.Abp.IdentityServer.Grants", "name": "GetListBySubjectIdAsync", "summary": null, "isAsync": true, @@ -3031,6 +3108,7 @@ }, { "returnType": "List", + "namespace": "Volo.Abp.IdentityServer.Grants", "name": "GetListByExpirationAsync", "summary": null, "isAsync": true, @@ -3057,6 +3135,29 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.IdentityServer.Grants", + "name": "DeleteExpirationAsync", + "summary": null, + "isAsync": true, + "isPublic": true, + "isPrivate": false, + "isStatic": false, + "parameters": [ + { + "type": "DateTime", + "name": "maxExpirationDate", + "isOptional": false + }, + { + "type": "CancellationToken", + "name": "cancellationToken", + "isOptional": true + } + ] + }, + { + "returnType": "Void", + "namespace": "Volo.Abp.IdentityServer.Grants", "name": "DeleteAsync", "summary": null, "isAsync": true, @@ -3141,6 +3242,7 @@ "methods": [ { "returnType": "DeviceFlowCodes", + "namespace": "Volo.Abp.IdentityServer.Devices", "name": "FindByUserCodeAsync", "summary": null, "isAsync": true, @@ -3162,6 +3264,7 @@ }, { "returnType": "DeviceFlowCodes", + "namespace": "Volo.Abp.IdentityServer.Devices", "name": "FindByDeviceCodeAsync", "summary": null, "isAsync": true, @@ -3183,6 +3286,7 @@ }, { "returnType": "List", + "namespace": "Volo.Abp.IdentityServer.Devices", "name": "GetListByExpirationAsync", "summary": null, "isAsync": true, @@ -3206,6 +3310,28 @@ "isOptional": true } ] + }, + { + "returnType": "Void", + "namespace": "Volo.Abp.IdentityServer.Devices", + "name": "DeleteExpirationAsync", + "summary": null, + "isAsync": true, + "isPublic": true, + "isPrivate": false, + "isStatic": false, + "parameters": [ + { + "type": "DateTime", + "name": "maxExpirationDate", + "isOptional": false + }, + { + "type": "CancellationToken", + "name": "cancellationToken", + "isOptional": true + } + ] } ], "contentType": "repositoryInterface", @@ -3257,6 +3383,7 @@ "methods": [ { "returnType": "Client", + "namespace": "Volo.Abp.IdentityServer.Clients", "name": "FindByClientIdAsync", "summary": null, "isAsync": true, @@ -3283,6 +3410,7 @@ }, { "returnType": "List", + "namespace": "Volo.Abp.IdentityServer.Clients", "name": "GetListAsync", "summary": null, "isAsync": true, @@ -3324,6 +3452,7 @@ }, { "returnType": "Int64", + "namespace": "Volo.Abp.IdentityServer.Clients", "name": "GetCountAsync", "summary": null, "isAsync": true, @@ -3345,6 +3474,7 @@ }, { "returnType": "List", + "namespace": "Volo.Abp.IdentityServer.Clients", "name": "GetAllDistinctAllowedCorsOriginsAsync", "summary": null, "isAsync": true, @@ -3361,6 +3491,7 @@ }, { "returnType": "Boolean", + "namespace": "Volo.Abp.IdentityServer.Clients", "name": "CheckClientIdExistAsync", "summary": null, "isAsync": true, @@ -3435,6 +3566,7 @@ "methods": [ { "returnType": "ApiScope", + "namespace": "Volo.Abp.IdentityServer.ApiScopes", "name": "FindByNameAsync", "summary": null, "isAsync": true, @@ -3461,6 +3593,7 @@ }, { "returnType": "List", + "namespace": "Volo.Abp.IdentityServer.ApiScopes", "name": "GetListByNameAsync", "summary": null, "isAsync": true, @@ -3487,6 +3620,7 @@ }, { "returnType": "List", + "namespace": "Volo.Abp.IdentityServer.ApiScopes", "name": "GetListAsync", "summary": null, "isAsync": true, @@ -3528,6 +3662,7 @@ }, { "returnType": "Int64", + "namespace": "Volo.Abp.IdentityServer.ApiScopes", "name": "GetCountAsync", "summary": null, "isAsync": true, @@ -3549,6 +3684,7 @@ }, { "returnType": "Boolean", + "namespace": "Volo.Abp.IdentityServer.ApiScopes", "name": "CheckNameExistAsync", "summary": null, "isAsync": true, @@ -3623,6 +3759,7 @@ "methods": [ { "returnType": "ApiResource", + "namespace": "Volo.Abp.IdentityServer.ApiResources", "name": "FindByNameAsync", "summary": null, "isAsync": true, @@ -3649,6 +3786,7 @@ }, { "returnType": "List", + "namespace": "Volo.Abp.IdentityServer.ApiResources", "name": "FindByNameAsync", "summary": null, "isAsync": true, @@ -3675,6 +3813,7 @@ }, { "returnType": "List", + "namespace": "Volo.Abp.IdentityServer.ApiResources", "name": "GetListByScopesAsync", "summary": null, "isAsync": true, @@ -3701,6 +3840,7 @@ }, { "returnType": "List", + "namespace": "Volo.Abp.IdentityServer.ApiResources", "name": "GetListAsync", "summary": null, "isAsync": true, @@ -3742,6 +3882,7 @@ }, { "returnType": "Int64", + "namespace": "Volo.Abp.IdentityServer.ApiResources", "name": "GetCountAsync", "summary": null, "isAsync": true, @@ -3763,6 +3904,7 @@ }, { "returnType": "Boolean", + "namespace": "Volo.Abp.IdentityServer.ApiResources", "name": "CheckNameExistAsync", "summary": null, "isAsync": true, diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo.Abp.IdentityServer.EntityFrameworkCore.abppkg.analyze.json b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo.Abp.IdentityServer.EntityFrameworkCore.abppkg.analyze.json index a266ed41b3..6e763e3e8b 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo.Abp.IdentityServer.EntityFrameworkCore.abppkg.analyze.json +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo.Abp.IdentityServer.EntityFrameworkCore.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Abp.IdentityServer.EntityFrameworkCore", - "hash": "17dbfc67f1fd967841f05d2c9df3cbbf", + "hash": "", "contents": [ { "namespace": "Volo.Abp.IdentityServer.EntityFrameworkCore", @@ -67,147 +67,27 @@ { "namespace": "Volo.Abp.IdentityServer.EntityFrameworkCore", "connectionStringName": "AbpIdentityServer", - "databaseTables": [ - { - "entityFullName": "Volo.Abp.IdentityServer.ApiResources.ApiResource", - "contentType": "databaseTable", - "name": "IdentityServerApiResources", - "summary": null - }, - { - "entityFullName": "Volo.Abp.IdentityServer.ApiResources.ApiResourceClaim", - "contentType": "databaseTable", - "name": "IdentityServerApiResourceClaims", - "summary": null - }, - { - "entityFullName": "Volo.Abp.IdentityServer.ApiResources.ApiResourceProperty", - "contentType": "databaseTable", - "name": "IdentityServerApiResourceProperties", - "summary": null - }, - { - "entityFullName": "Volo.Abp.IdentityServer.ApiResources.ApiResourceScope", - "contentType": "databaseTable", - "name": "IdentityServerApiResourceScopes", - "summary": null - }, - { - "entityFullName": "Volo.Abp.IdentityServer.ApiResources.ApiResourceSecret", - "contentType": "databaseTable", - "name": "IdentityServerApiResourceSecrets", - "summary": null - }, - { - "entityFullName": "Volo.Abp.IdentityServer.ApiScopes.ApiScope", - "contentType": "databaseTable", - "name": "IdentityServerApiScopes", - "summary": null - }, - { - "entityFullName": "Volo.Abp.IdentityServer.ApiScopes.ApiScopeClaim", - "contentType": "databaseTable", - "name": "IdentityServerApiScopeClaims", - "summary": null - }, - { - "entityFullName": "Volo.Abp.IdentityServer.ApiScopes.ApiScopeProperty", - "contentType": "databaseTable", - "name": "IdentityServerApiScopeProperties", - "summary": null - }, - { - "entityFullName": "Volo.Abp.IdentityServer.Clients.Client", - "contentType": "databaseTable", - "name": "IdentityServerClients", - "summary": null - }, - { - "entityFullName": "Volo.Abp.IdentityServer.Clients.ClientClaim", - "contentType": "databaseTable", - "name": "IdentityServerClientClaims", - "summary": null - }, - { - "entityFullName": "Volo.Abp.IdentityServer.Clients.ClientCorsOrigin", - "contentType": "databaseTable", - "name": "IdentityServerClientCorsOrigins", - "summary": null - }, - { - "entityFullName": "Volo.Abp.IdentityServer.Clients.ClientGrantType", - "contentType": "databaseTable", - "name": "IdentityServerClientGrantTypes", - "summary": null - }, - { - "entityFullName": "Volo.Abp.IdentityServer.Clients.ClientIdPRestriction", - "contentType": "databaseTable", - "name": "IdentityServerClientIdPRestrictions", - "summary": null - }, - { - "entityFullName": "Volo.Abp.IdentityServer.Clients.ClientPostLogoutRedirectUri", - "contentType": "databaseTable", - "name": "IdentityServerClientPostLogoutRedirectUris", - "summary": null - }, - { - "entityFullName": "Volo.Abp.IdentityServer.Clients.ClientProperty", - "contentType": "databaseTable", - "name": "IdentityServerClientProperties", - "summary": null - }, - { - "entityFullName": "Volo.Abp.IdentityServer.Clients.ClientRedirectUri", - "contentType": "databaseTable", - "name": "IdentityServerClientRedirectUris", - "summary": null - }, - { - "entityFullName": "Volo.Abp.IdentityServer.Clients.ClientScope", - "contentType": "databaseTable", - "name": "IdentityServerClientScopes", - "summary": null - }, - { - "entityFullName": "Volo.Abp.IdentityServer.Clients.ClientSecret", - "contentType": "databaseTable", - "name": "IdentityServerClientSecrets", - "summary": null - }, - { - "entityFullName": "Volo.Abp.IdentityServer.Devices.DeviceFlowCodes", - "contentType": "databaseTable", - "name": "IdentityServerDeviceFlowCodes", - "summary": null - }, - { - "entityFullName": "Volo.Abp.IdentityServer.Grants.PersistedGrant", - "contentType": "databaseTable", - "name": "IdentityServerPersistedGrants", - "summary": null - }, - { - "entityFullName": "Volo.Abp.IdentityServer.IdentityResources.IdentityResource", - "contentType": "databaseTable", - "name": "IdentityServerIdentityResources", - "summary": null - }, - { - "entityFullName": "Volo.Abp.IdentityServer.IdentityResources.IdentityResourceClaim", - "contentType": "databaseTable", - "name": "IdentityServerIdentityResourceClaims", - "summary": null - }, + "databaseTables": [], + "replacedDbContexts": [], + "modelBuilderExtensionMethods": [ { - "entityFullName": "Volo.Abp.IdentityServer.IdentityResources.IdentityResourceProperty", - "contentType": "databaseTable", - "name": "IdentityServerIdentityResourceProperties", - "summary": null + "returnType": "Void", + "namespace": "Volo.Abp.IdentityServer.EntityFrameworkCore", + "name": "ConfigureIdentityServer", + "summary": null, + "isAsync": false, + "isPublic": true, + "isPrivate": false, + "isStatic": true, + "parameters": [ + { + "type": "ModelBuilder", + "name": "builder", + "isOptional": false + } + ] } ], - "replacedDbContexts": [], "implementingInterfaces": [ { "name": "IInfrastructure", @@ -263,6 +143,12 @@ "declaringAssemblyName": "Volo.Abp.EntityFrameworkCore", "fullName": "Volo.Abp.EntityFrameworkCore.IEfCoreDbContext" }, + { + "name": "IAbpEfCoreDbFunctionContext", + "namespace": "Volo.Abp.EntityFrameworkCore.GlobalFilters", + "declaringAssemblyName": "Volo.Abp.EntityFrameworkCore", + "fullName": "Volo.Abp.EntityFrameworkCore.GlobalFilters.IAbpEfCoreDbFunctionContext" + }, { "name": "ITransientDependency", "namespace": "Volo.Abp.DependencyInjection", diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo.Abp.IdentityServer.MongoDB.abppkg.analyze.json b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo.Abp.IdentityServer.MongoDB.abppkg.analyze.json index 7e7ef739ee..a425647a3c 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo.Abp.IdentityServer.MongoDB.abppkg.analyze.json +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo.Abp.IdentityServer.MongoDB.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Abp.IdentityServer.MongoDB", - "hash": "78375f5eb62811a80c4e7897e2f327df", + "hash": "", "contents": [ { "namespace": "Volo.Abp.IdentityServer.MongoDB", @@ -71,37 +71,37 @@ { "entityFullName": "Volo.Abp.IdentityServer.ApiResources.ApiResource", "contentType": "databaseCollection", - "name": "IdentityServerApiResources", + "name": "ApiResources", "summary": null }, { - "entityFullName": "Volo.Abp.IdentityServer.Clients.Client", + "entityFullName": "Volo.Abp.IdentityServer.ApiScopes.ApiScope", "contentType": "databaseCollection", - "name": "IdentityServerClients", + "name": "ApiScopes", "summary": null }, { - "entityFullName": "Volo.Abp.IdentityServer.ApiScopes.ApiScope", + "entityFullName": "Volo.Abp.IdentityServer.Clients.Client", "contentType": "databaseCollection", - "name": "IdentityServerApiScopes", + "name": "Clients", "summary": null }, { "entityFullName": "Volo.Abp.IdentityServer.IdentityResources.IdentityResource", "contentType": "databaseCollection", - "name": "IdentityServerIdentityResources", + "name": "IdentityResources", "summary": null }, { - "entityFullName": "Volo.Abp.IdentityServer.Devices.DeviceFlowCodes", + "entityFullName": "Volo.Abp.IdentityServer.Grants.PersistedGrant", "contentType": "databaseCollection", - "name": "IdentityServerDeviceFlowCodes", + "name": "PersistedGrants", "summary": null }, { - "entityFullName": "Volo.Abp.IdentityServer.Grants.PersistedGrant", + "entityFullName": "Volo.Abp.IdentityServer.Devices.DeviceFlowCodes", "contentType": "databaseCollection", - "name": "IdentityServerPersistedGrants", + "name": "DeviceFlowCodes", "summary": null } ], diff --git a/modules/openiddict/app/OpenIddict.Demo.Server/package.json b/modules/openiddict/app/OpenIddict.Demo.Server/package.json index 01201f86ab..7dad1fc3e2 100644 --- a/modules/openiddict/app/OpenIddict.Demo.Server/package.json +++ b/modules/openiddict/app/OpenIddict.Demo.Server/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "~8.3.0-rc.1" + "@abp/aspnetcore.mvc.ui.theme.basic": "~8.3.0" } } diff --git a/modules/openiddict/app/angular/package.json b/modules/openiddict/app/angular/package.json index 1f3ca65206..8399146544 100644 --- a/modules/openiddict/app/angular/package.json +++ b/modules/openiddict/app/angular/package.json @@ -12,15 +12,15 @@ }, "private": true, "dependencies": { - "@abp/ng.account": "~8.3.0-rc.1", - "@abp/ng.components": "~8.3.0-rc.1", - "@abp/ng.core": "~8.3.0-rc.1", - "@abp/ng.oauth": "~8.3.0-rc.1", - "@abp/ng.identity": "~8.3.0-rc.1", - "@abp/ng.setting-management": "~8.3.0-rc.1", - "@abp/ng.tenant-management": "~8.3.0-rc.1", - "@abp/ng.theme.shared": "~8.3.0-rc.1", - "@abp/ng.theme.lepton-x": "~3.3.0-rc.1", + "@abp/ng.account": "~8.3.0", + "@abp/ng.components": "~8.3.0", + "@abp/ng.core": "~8.3.0", + "@abp/ng.oauth": "~8.3.0", + "@abp/ng.identity": "~8.3.0", + "@abp/ng.setting-management": "~8.3.0", + "@abp/ng.tenant-management": "~8.3.0", + "@abp/ng.theme.shared": "~8.3.0", + "@abp/ng.theme.lepton-x": "~3.3.0", "@angular/animations": "^15.0.1", "@angular/common": "^15.0.1", "@angular/compiler": "^15.0.1", @@ -36,7 +36,7 @@ "zone.js": "~0.11.4" }, "devDependencies": { - "@abp/ng.schematics": "~8.3.0-rc.1", + "@abp/ng.schematics": "~8.3.0", "@angular-devkit/build-angular": "^15.0.1", "@angular-eslint/builder": "~15.1.0", "@angular-eslint/eslint-plugin": "~15.1.0", diff --git a/modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Microsoft/Extensions/DependencyInjection/OpenIddictServerBuilderExtensions.cs b/modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Microsoft/Extensions/DependencyInjection/OpenIddictServerBuilderExtensions.cs index c99ce5e245..7ba0fc9340 100644 --- a/modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Microsoft/Extensions/DependencyInjection/OpenIddictServerBuilderExtensions.cs +++ b/modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Microsoft/Extensions/DependencyInjection/OpenIddictServerBuilderExtensions.cs @@ -5,14 +5,17 @@ namespace Microsoft.Extensions.DependencyInjection; public static class OpenIddictServerBuilderExtensions { - public static OpenIddictServerBuilder AddProductionEncryptionAndSigningCertificate(this OpenIddictServerBuilder builder, string fileName, string passPhrase) + public static OpenIddictServerBuilder AddProductionEncryptionAndSigningCertificate(this OpenIddictServerBuilder builder, string fileName, string passPhrase, X509KeyStorageFlags? flag = null) { if (!File.Exists(fileName)) { throw new FileNotFoundException($"Signing Certificate couldn't found: {fileName}"); } - var certificate = new X509Certificate2(fileName, passPhrase); + var certificate = flag != null + ? new X509Certificate2(fileName, passPhrase, flag.Value) + : new X509Certificate2(fileName, passPhrase); + builder.AddSigningCertificate(certificate); builder.AddEncryptionCertificate(certificate); return builder; diff --git a/modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Volo/Abp/OpenIddict/AbpOpenIddictAspNetCoreModule.cs b/modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Volo/Abp/OpenIddict/AbpOpenIddictAspNetCoreModule.cs index 2b890c6067..1b8fb5d39c 100644 --- a/modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Volo/Abp/OpenIddict/AbpOpenIddictAspNetCoreModule.cs +++ b/modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Volo/Abp/OpenIddict/AbpOpenIddictAspNetCoreModule.cs @@ -5,6 +5,7 @@ using OpenIddict.Server; using Volo.Abp.AspNetCore.MultiTenancy; using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared; using Volo.Abp.Modularity; +using Volo.Abp.OpenIddict.Globalization; using Volo.Abp.OpenIddict.Scopes; using Volo.Abp.OpenIddict.WildcardDomains; using Volo.Abp.Security.Claims; @@ -24,7 +25,6 @@ public class AbpOpenIddictAspNetCoreModule : AbpModule Configure(options => { - options.ClaimsPrincipalHandlers.Add(); options.ClaimsPrincipalHandlers.Add(); }); @@ -136,6 +136,7 @@ public class AbpOpenIddictAspNetCoreModule : AbpModule builder.AddEventHandler(RemoveClaimsFromClientCredentialsGrantType.Descriptor); builder.AddEventHandler(AttachScopes.Descriptor); + builder.AddEventHandler(AttachCultureInfo.Descriptor); services.ExecutePreConfiguredActions(builder); }); diff --git a/modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Volo/Abp/OpenIddict/AbpOpenIddictOptions.cs b/modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Volo/Abp/OpenIddict/AbpOpenIddictOptions.cs index 475c13e447..84149e9b0b 100644 --- a/modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Volo/Abp/OpenIddict/AbpOpenIddictOptions.cs +++ b/modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Volo/Abp/OpenIddict/AbpOpenIddictOptions.cs @@ -15,4 +15,9 @@ public class AbpOpenIddictAspNetCoreOptions /// Default: true. /// public bool AddDevelopmentEncryptionAndSigningCertificate { get; set; } = true; + + /// + /// Attach auth server current culture info to response. + /// + public bool AttachCultureInfo { get; set; } = true; } diff --git a/modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Volo/Abp/OpenIddict/Claims/AbpDynamicClaimsOpenIddictClaimsPrincipalHandler.cs b/modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Volo/Abp/OpenIddict/Claims/AbpDynamicClaimsOpenIddictClaimsPrincipalHandler.cs deleted file mode 100644 index 8fcadcff5c..0000000000 --- a/modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Volo/Abp/OpenIddict/Claims/AbpDynamicClaimsOpenIddictClaimsPrincipalHandler.cs +++ /dev/null @@ -1,24 +0,0 @@ -using System.Threading.Tasks; -using Microsoft.Extensions.DependencyInjection; -using OpenIddict.Abstractions; -using Volo.Abp.DependencyInjection; -using Volo.Abp.Security.Claims; - -namespace Volo.Abp.OpenIddict; - -public class AbpDynamicClaimsOpenIddictClaimsPrincipalHandler: IAbpOpenIddictClaimsPrincipalHandler, ITransientDependency -{ - public virtual async Task HandleAsync(AbpOpenIddictClaimsPrincipalHandlerContext context) - { - if (context.OpenIddictRequest.IsClientCredentialsGrantType()) - { - return; - } - - var abpClaimsPrincipalFactory = context - .ScopeServiceProvider - .GetRequiredService(); - - await abpClaimsPrincipalFactory.CreateDynamicAsync(context.Principal); - } -} diff --git a/modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Volo/Abp/OpenIddict/Globalization/AttachCultureInfo.cs b/modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Volo/Abp/OpenIddict/Globalization/AttachCultureInfo.cs new file mode 100644 index 0000000000..5bc093244d --- /dev/null +++ b/modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Volo/Abp/OpenIddict/Globalization/AttachCultureInfo.cs @@ -0,0 +1,43 @@ +using System.Globalization; +using System.Threading.Tasks; +using Microsoft.Extensions.Options; +using OpenIddict.Server; + +namespace Volo.Abp.OpenIddict.Globalization; + +public class AttachCultureInfo : IOpenIddictServerHandler +{ + public static OpenIddictServerHandlerDescriptor Descriptor { get; } + = OpenIddictServerHandlerDescriptor.CreateBuilder() + .UseSingletonHandler() + .SetOrder(OpenIddictServerHandlers.Authentication.AttachIssuer.Descriptor.Order + 1_000) + .SetType(OpenIddictServerHandlerType.Custom) + .Build(); + + protected IOptions Options { get; } + + public AttachCultureInfo(IOptions options) + { + Options = options; + } + + public ValueTask HandleAsync(OpenIddictServerEvents.ApplyAuthorizationResponseContext context) + { + Check.NotNull(context, nameof(context)); + + if (Options.Value.AttachCultureInfo) + { + if (!context.Response.HasParameter("culture")) + { + context.Response.SetParameter("culture", CultureInfo.CurrentCulture.Name); + } + + if (!context.Response.HasParameter("ui-culture")) + { + context.Response.SetParameter("ui-culture", CultureInfo.CurrentUICulture.Name); + } + } + + return default; + } +} diff --git a/modules/openiddict/src/Volo.Abp.OpenIddict.Domain.Shared/Volo.Abp.OpenIddict.Domain.Shared.abppkg.analyze.json b/modules/openiddict/src/Volo.Abp.OpenIddict.Domain.Shared/Volo.Abp.OpenIddict.Domain.Shared.abppkg.analyze.json index a374653fc6..5778ee3f66 100644 --- a/modules/openiddict/src/Volo.Abp.OpenIddict.Domain.Shared/Volo.Abp.OpenIddict.Domain.Shared.abppkg.analyze.json +++ b/modules/openiddict/src/Volo.Abp.OpenIddict.Domain.Shared/Volo.Abp.OpenIddict.Domain.Shared.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Abp.OpenIddict.Domain.Shared", - "hash": "f6dd4c13b9e54fc791d6feb622b6bf26", + "hash": "", "contents": [ { "namespace": "Volo.Abp.OpenIddict", diff --git a/modules/openiddict/src/Volo.Abp.OpenIddict.Domain.Shared/Volo/Abp/OpenIddict/Localization/OpenIddict/sv.json b/modules/openiddict/src/Volo.Abp.OpenIddict.Domain.Shared/Volo/Abp/OpenIddict/Localization/OpenIddict/sv.json new file mode 100644 index 0000000000..3e2a58578e --- /dev/null +++ b/modules/openiddict/src/Volo.Abp.OpenIddict.Domain.Shared/Volo/Abp/OpenIddict/Localization/OpenIddict/sv.json @@ -0,0 +1,15 @@ +{ + "culture": "sv", + "texts": { + "TheOpenIDConnectRequestCannotBeRetrieved": "OpenID Connect-begĂ€ran kan inte hĂ€mtas.", + "TheUserDetailsCannotBbeRetrieved": "AnvĂ€ndaruppgifterna kan inte hĂ€mtas.", + "TheApplicationDetailsCannotBeFound": "Ansökningsuppgifterna kan inte hittas.", + "DetailsConcerningTheCallingClientApplicationCannotBeFound": "Detaljer om den anropande klientapplikationen kan inte hittas.", + "TheSpecifiedGrantTypeIsNotImplemented": "Den angivna grant-typen {0} Ă€r inte implementerad.", + "Authorization": "Auktorisering", + "DoYouWantToGrantAccessToYourData": "Vill du ge {0} tillgĂ„ng till dina data?", + "ScopesRequested": "BegĂ€rda omfattningar", + "Accept": "Acceptera", + "Deny": "Förneka" + } +} \ No newline at end of file diff --git a/modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo.Abp.OpenIddict.Domain.abppkg.analyze.json b/modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo.Abp.OpenIddict.Domain.abppkg.analyze.json index 633f7567dd..6475807654 100644 --- a/modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo.Abp.OpenIddict.Domain.abppkg.analyze.json +++ b/modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo.Abp.OpenIddict.Domain.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Abp.OpenIddict.Domain", - "hash": "7bc7931189c97d5bef0fed5dbd107b10", + "hash": "", "contents": [ { "namespace": "Volo.Abp.OpenIddict", @@ -692,6 +692,11 @@ "namespace": "Volo.Abp.OpenIddict.Applications", "primaryKeyType": "Guid", "properties": [ + { + "type": "System.String", + "name": "ApplicationType", + "summary": "Gets or sets the application type associated with the application." + }, { "type": "System.String", "name": "ClientId", @@ -702,6 +707,11 @@ "name": "ClientSecret", "summary": "Gets or sets the client secret associated with the current application.\r\n Note: depending on the application manager used to create this instance,\r\n this property may be hashed or encrypted for security reasons." }, + { + "type": "System.String", + "name": "ClientType", + "summary": "Gets or sets the client type associated with the application." + }, { "type": "System.String", "name": "ConsentType", @@ -717,6 +727,11 @@ "name": "DisplayNames", "summary": "Gets or sets the localized display names\r\n associated with the current application,\r\n serialized as a JSON object." }, + { + "type": "System.String", + "name": "JsonWebKeySet", + "summary": "Gets or sets the JSON Web Key Set associated with\r\n the application, serialized as a JSON object." + }, { "type": "System.String", "name": "Permissions", @@ -744,8 +759,8 @@ }, { "type": "System.String", - "name": "Type", - "summary": "Gets or sets the application type associated with the current application." + "name": "Settings", + "summary": "Gets or sets the settings serialized as a JSON object." }, { "type": "System.String", @@ -807,6 +822,7 @@ "methods": [ { "returnType": "Void", + "namespace": "Volo.Abp.OpenIddict.Tokens", "name": "DeleteManyByApplicationIdAsync", "summary": null, "isAsync": true, @@ -833,6 +849,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.OpenIddict.Tokens", "name": "DeleteManyByAuthorizationIdAsync", "summary": null, "isAsync": true, @@ -857,8 +874,36 @@ } ] }, + { + "returnType": "Void", + "namespace": "Volo.Abp.OpenIddict.Tokens", + "name": "DeleteManyByAuthorizationIdsAsync", + "summary": null, + "isAsync": true, + "isPublic": true, + "isPrivate": false, + "isStatic": false, + "parameters": [ + { + "type": "Guid[]", + "name": "authorizationIds", + "isOptional": false + }, + { + "type": "Boolean", + "name": "autoSave", + "isOptional": true + }, + { + "type": "CancellationToken", + "name": "cancellationToken", + "isOptional": true + } + ] + }, { "returnType": "List", + "namespace": "Volo.Abp.OpenIddict.Tokens", "name": "FindAsync", "summary": null, "isAsync": true, @@ -885,6 +930,7 @@ }, { "returnType": "List", + "namespace": "Volo.Abp.OpenIddict.Tokens", "name": "FindAsync", "summary": null, "isAsync": true, @@ -916,6 +962,7 @@ }, { "returnType": "List", + "namespace": "Volo.Abp.OpenIddict.Tokens", "name": "FindAsync", "summary": null, "isAsync": true, @@ -952,6 +999,7 @@ }, { "returnType": "List", + "namespace": "Volo.Abp.OpenIddict.Tokens", "name": "FindByApplicationIdAsync", "summary": null, "isAsync": true, @@ -973,6 +1021,7 @@ }, { "returnType": "List", + "namespace": "Volo.Abp.OpenIddict.Tokens", "name": "FindByAuthorizationIdAsync", "summary": null, "isAsync": true, @@ -994,6 +1043,7 @@ }, { "returnType": "OpenIddictToken", + "namespace": "Volo.Abp.OpenIddict.Tokens", "name": "FindByIdAsync", "summary": null, "isAsync": true, @@ -1015,6 +1065,7 @@ }, { "returnType": "OpenIddictToken", + "namespace": "Volo.Abp.OpenIddict.Tokens", "name": "FindByReferenceIdAsync", "summary": null, "isAsync": true, @@ -1036,6 +1087,7 @@ }, { "returnType": "List", + "namespace": "Volo.Abp.OpenIddict.Tokens", "name": "FindBySubjectAsync", "summary": null, "isAsync": true, @@ -1057,6 +1109,7 @@ }, { "returnType": "List", + "namespace": "Volo.Abp.OpenIddict.Tokens", "name": "ListAsync", "summary": null, "isAsync": true, @@ -1082,8 +1135,9 @@ ] }, { - "returnType": "List", - "name": "GetPruneListAsync", + "returnType": "Int64", + "namespace": "Volo.Abp.OpenIddict.Tokens", + "name": "PruneAsync", "summary": null, "isAsync": true, "isPublic": true, @@ -1096,14 +1150,31 @@ "isOptional": false }, { - "type": "Int32", - "name": "count", + "type": "CancellationToken", + "name": "cancellationToken", + "isOptional": true + } + ] + }, + { + "returnType": "ValueTask", + "namespace": "Volo.Abp.OpenIddict.Tokens", + "name": "RevokeByAuthorizationIdAsync", + "summary": null, + "isAsync": false, + "isPublic": true, + "isPrivate": false, + "isStatic": false, + "parameters": [ + { + "type": "Guid", + "name": "id", "isOptional": false }, { "type": "CancellationToken", "name": "cancellationToken", - "isOptional": true + "isOptional": false } ] } @@ -1157,6 +1228,7 @@ "methods": [ { "returnType": "List", + "namespace": "Volo.Abp.OpenIddict.Scopes", "name": "GetListAsync", "summary": null, "isAsync": true, @@ -1193,6 +1265,7 @@ }, { "returnType": "Int64", + "namespace": "Volo.Abp.OpenIddict.Scopes", "name": "GetCountAsync", "summary": null, "isAsync": true, @@ -1214,6 +1287,7 @@ }, { "returnType": "OpenIddictScope", + "namespace": "Volo.Abp.OpenIddict.Scopes", "name": "FindByIdAsync", "summary": null, "isAsync": true, @@ -1235,6 +1309,7 @@ }, { "returnType": "OpenIddictScope", + "namespace": "Volo.Abp.OpenIddict.Scopes", "name": "FindByNameAsync", "summary": null, "isAsync": true, @@ -1256,6 +1331,7 @@ }, { "returnType": "List", + "namespace": "Volo.Abp.OpenIddict.Scopes", "name": "FindByNamesAsync", "summary": null, "isAsync": true, @@ -1277,6 +1353,7 @@ }, { "returnType": "List", + "namespace": "Volo.Abp.OpenIddict.Scopes", "name": "FindByResourceAsync", "summary": null, "isAsync": true, @@ -1298,6 +1375,7 @@ }, { "returnType": "List", + "namespace": "Volo.Abp.OpenIddict.Scopes", "name": "ListAsync", "summary": null, "isAsync": true, @@ -1372,6 +1450,7 @@ "methods": [ { "returnType": "List", + "namespace": "Volo.Abp.OpenIddict.Authorizations", "name": "FindAsync", "summary": null, "isAsync": true, @@ -1398,6 +1477,7 @@ }, { "returnType": "List", + "namespace": "Volo.Abp.OpenIddict.Authorizations", "name": "FindAsync", "summary": null, "isAsync": true, @@ -1429,6 +1509,7 @@ }, { "returnType": "List", + "namespace": "Volo.Abp.OpenIddict.Authorizations", "name": "FindAsync", "summary": null, "isAsync": true, @@ -1465,6 +1546,7 @@ }, { "returnType": "List", + "namespace": "Volo.Abp.OpenIddict.Authorizations", "name": "FindByApplicationIdAsync", "summary": null, "isAsync": true, @@ -1486,6 +1568,7 @@ }, { "returnType": "OpenIddictAuthorization", + "namespace": "Volo.Abp.OpenIddict.Authorizations", "name": "FindByIdAsync", "summary": null, "isAsync": true, @@ -1507,6 +1590,7 @@ }, { "returnType": "List", + "namespace": "Volo.Abp.OpenIddict.Authorizations", "name": "FindBySubjectAsync", "summary": null, "isAsync": true, @@ -1528,6 +1612,7 @@ }, { "returnType": "List", + "namespace": "Volo.Abp.OpenIddict.Authorizations", "name": "ListAsync", "summary": null, "isAsync": true, @@ -1553,8 +1638,9 @@ ] }, { - "returnType": "List", - "name": "GetPruneListAsync", + "returnType": "Int64", + "namespace": "Volo.Abp.OpenIddict.Authorizations", + "name": "PruneAsync", "summary": null, "isAsync": true, "isPublic": true, @@ -1566,11 +1652,6 @@ "name": "date", "isOptional": false }, - { - "type": "Int32", - "name": "count", - "isOptional": false - }, { "type": "CancellationToken", "name": "cancellationToken", @@ -1628,6 +1709,7 @@ "methods": [ { "returnType": "List", + "namespace": "Volo.Abp.OpenIddict.Applications", "name": "GetListAsync", "summary": null, "isAsync": true, @@ -1664,6 +1746,7 @@ }, { "returnType": "Int64", + "namespace": "Volo.Abp.OpenIddict.Applications", "name": "GetCountAsync", "summary": null, "isAsync": true, @@ -1685,6 +1768,7 @@ }, { "returnType": "OpenIddictApplication", + "namespace": "Volo.Abp.OpenIddict.Applications", "name": "FindByClientIdAsync", "summary": null, "isAsync": true, @@ -1706,6 +1790,7 @@ }, { "returnType": "List", + "namespace": "Volo.Abp.OpenIddict.Applications", "name": "FindByPostLogoutRedirectUriAsync", "summary": null, "isAsync": true, @@ -1727,6 +1812,7 @@ }, { "returnType": "List", + "namespace": "Volo.Abp.OpenIddict.Applications", "name": "FindByRedirectUriAsync", "summary": null, "isAsync": true, @@ -1748,6 +1834,7 @@ }, { "returnType": "List", + "namespace": "Volo.Abp.OpenIddict.Applications", "name": "ListAsync", "summary": null, "isAsync": true, diff --git a/modules/openiddict/src/Volo.Abp.OpenIddict.EntityFrameworkCore/Volo.Abp.OpenIddict.EntityFrameworkCore.abppkg.analyze.json b/modules/openiddict/src/Volo.Abp.OpenIddict.EntityFrameworkCore/Volo.Abp.OpenIddict.EntityFrameworkCore.abppkg.analyze.json index cda46414df..6978ff01a7 100644 --- a/modules/openiddict/src/Volo.Abp.OpenIddict.EntityFrameworkCore/Volo.Abp.OpenIddict.EntityFrameworkCore.abppkg.analyze.json +++ b/modules/openiddict/src/Volo.Abp.OpenIddict.EntityFrameworkCore/Volo.Abp.OpenIddict.EntityFrameworkCore.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Abp.OpenIddict.EntityFrameworkCore", - "hash": "15ae177e740932706726e9ba9e5e8b3e", + "hash": "", "contents": [ { "namespace": "Volo.Abp.OpenIddict.EntityFrameworkCore", @@ -67,33 +67,27 @@ { "namespace": "Volo.Abp.OpenIddict.EntityFrameworkCore", "connectionStringName": "AbpOpenIddict", - "databaseTables": [ - { - "entityFullName": "Volo.Abp.OpenIddict.Applications.OpenIddictApplication", - "contentType": "databaseTable", - "name": "OpenIddictApplications", - "summary": null - }, - { - "entityFullName": "Volo.Abp.OpenIddict.Authorizations.OpenIddictAuthorization", - "contentType": "databaseTable", - "name": "OpenIddictAuthorizations", - "summary": null - }, - { - "entityFullName": "Volo.Abp.OpenIddict.Scopes.OpenIddictScope", - "contentType": "databaseTable", - "name": "OpenIddictScopes", - "summary": null - }, + "databaseTables": [], + "replacedDbContexts": [], + "modelBuilderExtensionMethods": [ { - "entityFullName": "Volo.Abp.OpenIddict.Tokens.OpenIddictToken", - "contentType": "databaseTable", - "name": "OpenIddictTokens", - "summary": null + "returnType": "Void", + "namespace": "Volo.Abp.OpenIddict.EntityFrameworkCore", + "name": "ConfigureOpenIddict", + "summary": null, + "isAsync": false, + "isPublic": true, + "isPrivate": false, + "isStatic": true, + "parameters": [ + { + "type": "ModelBuilder", + "name": "builder", + "isOptional": false + } + ] } ], - "replacedDbContexts": [], "implementingInterfaces": [ { "name": "IInfrastructure", @@ -149,6 +143,12 @@ "declaringAssemblyName": "Volo.Abp.EntityFrameworkCore", "fullName": "Volo.Abp.EntityFrameworkCore.IEfCoreDbContext" }, + { + "name": "IAbpEfCoreDbFunctionContext", + "namespace": "Volo.Abp.EntityFrameworkCore.GlobalFilters", + "declaringAssemblyName": "Volo.Abp.EntityFrameworkCore", + "fullName": "Volo.Abp.EntityFrameworkCore.GlobalFilters.IAbpEfCoreDbFunctionContext" + }, { "name": "ITransientDependency", "namespace": "Volo.Abp.DependencyInjection", diff --git a/modules/openiddict/src/Volo.Abp.OpenIddict.MongoDB/Volo.Abp.OpenIddict.MongoDB.abppkg.analyze.json b/modules/openiddict/src/Volo.Abp.OpenIddict.MongoDB/Volo.Abp.OpenIddict.MongoDB.abppkg.analyze.json index 3ed6e04f73..98bae6abd8 100644 --- a/modules/openiddict/src/Volo.Abp.OpenIddict.MongoDB/Volo.Abp.OpenIddict.MongoDB.abppkg.analyze.json +++ b/modules/openiddict/src/Volo.Abp.OpenIddict.MongoDB/Volo.Abp.OpenIddict.MongoDB.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Abp.OpenIddict.MongoDB", - "hash": "c523d1992cdfef4210763a2d4609779e", + "hash": "", "contents": [ { "namespace": "Volo.Abp.OpenIddict.MongoDB", @@ -69,27 +69,27 @@ "connectionStringName": "AbpOpenIddict", "databaseCollections": [ { - "entityFullName": "Volo.Abp.OpenIddict.Scopes.OpenIddictScope", + "entityFullName": "Volo.Abp.OpenIddict.Applications.OpenIddictApplication", "contentType": "databaseCollection", - "name": "OpenIddictScopes", + "name": "Applications", "summary": null }, { "entityFullName": "Volo.Abp.OpenIddict.Authorizations.OpenIddictAuthorization", "contentType": "databaseCollection", - "name": "OpenIddictAuthorizations", + "name": "Authorizations", "summary": null }, { - "entityFullName": "Volo.Abp.OpenIddict.Tokens.OpenIddictToken", + "entityFullName": "Volo.Abp.OpenIddict.Scopes.OpenIddictScope", "contentType": "databaseCollection", - "name": "OpenIddictTokens", + "name": "Scopes", "summary": null }, { - "entityFullName": "Volo.Abp.OpenIddict.Applications.OpenIddictApplication", + "entityFullName": "Volo.Abp.OpenIddict.Tokens.OpenIddictToken", "contentType": "databaseCollection", - "name": "OpenIddictApplications", + "name": "Tokens", "summary": null } ], diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo.Abp.PermissionManagement.Application.Contracts.abppkg.analyze.json b/modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo.Abp.PermissionManagement.Application.Contracts.abppkg.analyze.json index 5adbe608d9..bbfdbd10d9 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo.Abp.PermissionManagement.Application.Contracts.abppkg.analyze.json +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo.Abp.PermissionManagement.Application.Contracts.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Abp.PermissionManagement.Application.Contracts", - "hash": "ff59ff5b2d869012729f9c27ff07fa59", + "hash": "", "contents": [ { "namespace": "Volo.Abp.PermissionManagement", diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Application/Volo.Abp.PermissionManagement.Application.abppkg.analyze.json b/modules/permission-management/src/Volo.Abp.PermissionManagement.Application/Volo.Abp.PermissionManagement.Application.abppkg.analyze.json index 25cbab98c0..bc689ccd41 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Application/Volo.Abp.PermissionManagement.Application.abppkg.analyze.json +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Application/Volo.Abp.PermissionManagement.Application.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Abp.PermissionManagement.Application", - "hash": "79a7cac0023cd7e3a88b63544271c8e0", + "hash": "", "contents": [ { "namespace": "Volo.Abp.PermissionManagement", @@ -136,6 +136,7 @@ "methods": [ { "returnType": "GetPermissionListResultDto", + "namespace": "Volo.Abp.PermissionManagement", "name": "GetAsync", "summary": null, "isAsync": true, @@ -157,6 +158,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.PermissionManagement", "name": "UpdateAsync", "summary": null, "isAsync": true, @@ -185,6 +187,93 @@ "contentType": "applicationService", "name": "PermissionAppService", "summary": null + }, + { + "namespace": "Volo.Abp.PermissionManagement.Integration", + "baseClass": { + "name": "ApplicationService", + "namespace": "Volo.Abp.Application.Services", + "declaringAssemblyName": "Volo.Abp.Ddd.Application", + "fullName": "Volo.Abp.Application.Services.ApplicationService" + }, + "implementingInterfaces": [ + { + "name": "IApplicationService", + "namespace": "Volo.Abp.Application.Services", + "declaringAssemblyName": "Volo.Abp.Ddd.Application.Contracts", + "fullName": "Volo.Abp.Application.Services.IApplicationService" + }, + { + "name": "IRemoteService", + "namespace": "Volo.Abp", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.IRemoteService" + }, + { + "name": "IAvoidDuplicateCrossCuttingConcerns", + "namespace": "Volo.Abp.Aspects", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Aspects.IAvoidDuplicateCrossCuttingConcerns" + }, + { + "name": "IValidationEnabled", + "namespace": "Volo.Abp.Validation", + "declaringAssemblyName": "Volo.Abp.Validation", + "fullName": "Volo.Abp.Validation.IValidationEnabled" + }, + { + "name": "IUnitOfWorkEnabled", + "namespace": "Volo.Abp.Uow", + "declaringAssemblyName": "Volo.Abp.Uow", + "fullName": "Volo.Abp.Uow.IUnitOfWorkEnabled" + }, + { + "name": "IAuditingEnabled", + "namespace": "Volo.Abp.Auditing", + "declaringAssemblyName": "Volo.Abp.Auditing.Contracts", + "fullName": "Volo.Abp.Auditing.IAuditingEnabled" + }, + { + "name": "IGlobalFeatureCheckingEnabled", + "namespace": "Volo.Abp.GlobalFeatures", + "declaringAssemblyName": "Volo.Abp.GlobalFeatures", + "fullName": "Volo.Abp.GlobalFeatures.IGlobalFeatureCheckingEnabled" + }, + { + "name": "ITransientDependency", + "namespace": "Volo.Abp.DependencyInjection", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.DependencyInjection.ITransientDependency" + }, + { + "name": "IPermissionIntegrationService", + "namespace": "Volo.Abp.PermissionManagement.Integration", + "declaringAssemblyName": "Volo.Abp.PermissionManagement.Application.Contracts", + "fullName": "Volo.Abp.PermissionManagement.Integration.IPermissionIntegrationService" + } + ], + "methods": [ + { + "returnType": "ListResultDto", + "namespace": "Volo.Abp.PermissionManagement.Integration", + "name": "IsGrantedAsync", + "summary": null, + "isAsync": true, + "isPublic": true, + "isPrivate": false, + "isStatic": false, + "parameters": [ + { + "type": "List", + "name": "input", + "isOptional": false + } + ] + } + ], + "contentType": "applicationService", + "name": "PermissionIntegrationService", + "summary": null } ] } \ No newline at end of file diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor.Server/Volo.Abp.PermissionManagement.Blazor.Server.abppkg.analyze.json b/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor.Server/Volo.Abp.PermissionManagement.Blazor.Server.abppkg.analyze.json new file mode 100644 index 0000000000..b374423a34 --- /dev/null +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor.Server/Volo.Abp.PermissionManagement.Blazor.Server.abppkg.analyze.json @@ -0,0 +1,68 @@ +{ + "name": "Volo.Abp.PermissionManagement.Blazor.Server", + "hash": "", + "contents": [ + { + "namespace": "Volo.Abp.PermissionManagement.Blazor.Server", + "dependsOnModules": [ + { + "declaringAssemblyName": "Volo.Abp.PermissionManagement.Blazor", + "namespace": "Volo.Abp.PermissionManagement.Blazor", + "name": "AbpPermissionManagementBlazorModule" + }, + { + "declaringAssemblyName": "Volo.Abp.AspNetCore.Components.Server.Theming", + "namespace": "Volo.Abp.AspNetCore.Components.Server.Theming", + "name": "AbpAspNetCoreComponentsServerThemingModule" + } + ], + "implementingInterfaces": [ + { + "name": "IAbpModule", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IAbpModule" + }, + { + "name": "IOnPreApplicationInitialization", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IOnPreApplicationInitialization" + }, + { + "name": "IOnApplicationInitialization", + "namespace": "Volo.Abp", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.IOnApplicationInitialization" + }, + { + "name": "IOnPostApplicationInitialization", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IOnPostApplicationInitialization" + }, + { + "name": "IOnApplicationShutdown", + "namespace": "Volo.Abp", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.IOnApplicationShutdown" + }, + { + "name": "IPreConfigureServices", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IPreConfigureServices" + }, + { + "name": "IPostConfigureServices", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IPostConfigureServices" + } + ], + "contentType": "abpModule", + "name": "AbpPermissionManagementBlazorServerModule", + "summary": null + } + ] +} \ No newline at end of file diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/Volo.Abp.PermissionManagement.Blazor.abppkg.analyze.json b/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/Volo.Abp.PermissionManagement.Blazor.abppkg.analyze.json new file mode 100644 index 0000000000..da772e4123 --- /dev/null +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/Volo.Abp.PermissionManagement.Blazor.abppkg.analyze.json @@ -0,0 +1,79 @@ +{ + "name": "Volo.Abp.PermissionManagement.Blazor", + "hash": "", + "contents": [ + { + "namespace": "Volo.Abp.PermissionManagement.Blazor", + "dependsOnModules": [ + { + "declaringAssemblyName": "Volo.Abp.AspNetCore.Components.Web.Theming", + "namespace": "Volo.Abp.AspNetCore.Components.Web.Theming", + "name": "AbpAspNetCoreComponentsWebThemingModule" + }, + { + "declaringAssemblyName": "Volo.Abp.AutoMapper", + "namespace": "Volo.Abp.AutoMapper", + "name": "AbpAutoMapperModule" + }, + { + "declaringAssemblyName": "Volo.Abp.PermissionManagement.Application.Contracts", + "namespace": "Volo.Abp.PermissionManagement", + "name": "AbpPermissionManagementApplicationContractsModule" + } + ], + "implementingInterfaces": [ + { + "name": "IAbpModule", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IAbpModule" + }, + { + "name": "IOnPreApplicationInitialization", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IOnPreApplicationInitialization" + }, + { + "name": "IOnApplicationInitialization", + "namespace": "Volo.Abp", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.IOnApplicationInitialization" + }, + { + "name": "IOnPostApplicationInitialization", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IOnPostApplicationInitialization" + }, + { + "name": "IOnApplicationShutdown", + "namespace": "Volo.Abp", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.IOnApplicationShutdown" + }, + { + "name": "IPreConfigureServices", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IPreConfigureServices" + }, + { + "name": "IPostConfigureServices", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IPostConfigureServices" + } + ], + "contentType": "abpModule", + "name": "AbpPermissionManagementBlazorModule", + "summary": null + }, + { + "namespace": "Volo.Abp.PermissionManagement.Blazor.Components", + "contentType": "webPage", + "name": "PermissionManagementModal", + "summary": null + } + ] +} \ No newline at end of file diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo.Abp.PermissionManagement.Domain.Shared.abppkg.analyze.json b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo.Abp.PermissionManagement.Domain.Shared.abppkg.analyze.json index d52d0be711..3d2c25d8c3 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo.Abp.PermissionManagement.Domain.Shared.abppkg.analyze.json +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo.Abp.PermissionManagement.Domain.Shared.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Abp.PermissionManagement.Domain.Shared", - "hash": "8d71916b9616b7e4dedfd03b7468a1b8", + "hash": "", "contents": [ { "namespace": "Volo.Abp.PermissionManagement", diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/DynamicPermissionDefinitionsChangedEto.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/DynamicPermissionDefinitionsChangedEto.cs new file mode 100644 index 0000000000..f1e27aad1e --- /dev/null +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/DynamicPermissionDefinitionsChangedEto.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using Volo.Abp.EventBus; + +namespace Volo.Abp.PermissionManagement; + +[Serializable] +[EventName("abp.permission-management.dynamic-permission-definitions-changed")] +public class DynamicPermissionDefinitionsChangedEto +{ + public List Permissions { get; set; } +} diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/sv.json b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/sv.json new file mode 100644 index 0000000000..0a151cb50a --- /dev/null +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/sv.json @@ -0,0 +1,11 @@ +{ + "culture": "sv", + "texts": { + "Permissions": "Behörigheter", + "OnlyProviderPermissons": "Endast denna leverantör", + "All": "Alla", + "SelectAllInAllTabs": "Ge alla behörigheter", + "SelectAllInThisTab": "VĂ€lj alla", + "SaveWithoutAnyPermissionsWarningMessage": "Är du sĂ€ker pĂ„ att du vill spara utan nĂ„gra behörigheter?" + } +} \ No newline at end of file diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo.Abp.PermissionManagement.Domain.abppkg.analyze.json b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo.Abp.PermissionManagement.Domain.abppkg.analyze.json index 97a9c45861..a6f3e6528d 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo.Abp.PermissionManagement.Domain.abppkg.analyze.json +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo.Abp.PermissionManagement.Domain.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Abp.PermissionManagement.Domain", - "hash": "5fdb46829763b28e9bc9a5be7d3965aa", + "hash": "", "contents": [ { "namespace": "Volo.Abp.PermissionManagement", @@ -156,6 +156,7 @@ "methods": [ { "returnType": "Boolean", + "namespace": "Volo.Abp.PermissionManagement", "name": "HasSameData", "summary": null, "isAsync": false, @@ -172,6 +173,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.PermissionManagement", "name": "Patch", "summary": null, "isAsync": false, @@ -192,11 +194,6 @@ "namespace": "Volo.Abp.PermissionManagement", "primaryKeyType": "Guid", "properties": [ - { - "type": "System.Guid", - "name": "Id", - "summary": null - }, { "type": "System.String", "name": "GroupName", @@ -295,6 +292,7 @@ "methods": [ { "returnType": "Boolean", + "namespace": "Volo.Abp.PermissionManagement", "name": "HasSameData", "summary": null, "isAsync": false, @@ -311,6 +309,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.PermissionManagement", "name": "Patch", "summary": null, "isAsync": false, @@ -331,11 +330,6 @@ "namespace": "Volo.Abp.PermissionManagement", "primaryKeyType": "Guid", "properties": [ - { - "type": "System.Guid", - "name": "Id", - "summary": null - }, { "type": "System.String", "name": "Name", @@ -401,6 +395,7 @@ "methods": [ { "returnType": "PermissionDefinitionRecord", + "namespace": "Volo.Abp.PermissionManagement", "name": "FindByNameAsync", "summary": null, "isAsync": true, @@ -470,6 +465,7 @@ "methods": [ { "returnType": "PermissionGrant", + "namespace": "Volo.Abp.PermissionManagement", "name": "FindAsync", "summary": null, "isAsync": true, @@ -501,6 +497,7 @@ }, { "returnType": "List", + "namespace": "Volo.Abp.PermissionManagement", "name": "GetListAsync", "summary": null, "isAsync": true, @@ -527,6 +524,7 @@ }, { "returnType": "List", + "namespace": "Volo.Abp.PermissionManagement", "name": "GetListAsync", "summary": null, "isAsync": true, diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/StaticPermissionSaver.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/StaticPermissionSaver.cs index 1ef851dac3..4fe6e63e3f 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/StaticPermissionSaver.cs +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/StaticPermissionSaver.cs @@ -11,6 +11,7 @@ using Volo.Abp.Authorization.Permissions; using Volo.Abp.Caching; using Volo.Abp.DependencyInjection; using Volo.Abp.DistributedLocking; +using Volo.Abp.EventBus.Distributed; using Volo.Abp.Json.SystemTextJson.Modifiers; using Volo.Abp.Threading; using Volo.Abp.Uow; @@ -29,8 +30,8 @@ public class StaticPermissionSaver : IStaticPermissionSaver, ITransientDependenc protected AbpPermissionOptions PermissionOptions { get; } protected ICancellationTokenProvider CancellationTokenProvider { get; } protected AbpDistributedCacheOptions CacheOptions { get; } - protected IUnitOfWorkManager UnitOfWorkManager { get; } + protected IDistributedEventBus DistributedEventBus { get; } public StaticPermissionSaver( IStaticPermissionDefinitionStore staticStore, @@ -43,9 +44,11 @@ public class StaticPermissionSaver : IStaticPermissionSaver, ITransientDependenc IAbpDistributedLock distributedLock, IOptions permissionOptions, ICancellationTokenProvider cancellationTokenProvider, - IUnitOfWorkManager unitOfWorkManager) + IUnitOfWorkManager unitOfWorkManager, + IDistributedEventBus distributedEventBus) { UnitOfWorkManager = unitOfWorkManager; + DistributedEventBus = distributedEventBus; StaticStore = staticStore; PermissionGroupRepository = permissionGroupRepository; PermissionRepository = permissionRepository; @@ -104,12 +107,13 @@ public class StaticPermissionSaver : IStaticPermissionSaver, ITransientDependenc throw new AbpException("Could not acquire distributed lock for saving static permissions!"); } + var newOrChangedPermissions = new List(); using (var unitOfWork = UnitOfWorkManager.Begin(requiresNew: true, isTransactional: true)) { try { var hasChangesInGroups = await UpdateChangedPermissionGroupsAsync(permissionGroupRecords); - var hasChangesInPermissions = await UpdateChangedPermissionsAsync(permissionRecords); + var hasChangesInPermissions = await UpdateChangedPermissionsAsync(permissionRecords, newOrChangedPermissions); if (hasChangesInGroups || hasChangesInPermissions) { @@ -133,12 +137,20 @@ public class StaticPermissionSaver : IStaticPermissionSaver, ITransientDependenc { /* ignored */ } - + throw; } await unitOfWork.CompleteAsync(); } + + if (newOrChangedPermissions.Any()) + { + await DistributedEventBus.PublishAsync(new DynamicPermissionDefinitionsChangedEto + { + Permissions = newOrChangedPermissions.Distinct().ToList() + }); + } } await Cache.SetStringAsync( @@ -207,8 +219,7 @@ public class StaticPermissionSaver : IStaticPermissionSaver, ITransientDependenc return newRecords.Any() || changedRecords.Any() || deletedRecords.Any(); } - private async Task UpdateChangedPermissionsAsync( - IEnumerable permissionRecords) + private async Task UpdateChangedPermissionsAsync(IEnumerable permissionRecords, List newOrChangedPermissions) { var newRecords = new List(); var changedRecords = new List(); @@ -221,7 +232,7 @@ public class StaticPermissionSaver : IStaticPermissionSaver, ITransientDependenc var permissionRecordInDatabase = permissionRecordsInDatabase.GetOrDefault(permissionRecord.Name); if (permissionRecordInDatabase == null) { - /* New group */ + /* New permission */ newRecords.Add(permissionRecord); continue; } @@ -258,11 +269,13 @@ public class StaticPermissionSaver : IStaticPermissionSaver, ITransientDependenc if (newRecords.Any()) { + newOrChangedPermissions.AddRange(newRecords.Select(x => x.Name)); await PermissionRepository.InsertManyAsync(newRecords); } if (changedRecords.Any()) { + newOrChangedPermissions.AddRange(newRecords.Select(x => x.Name)); await PermissionRepository.UpdateManyAsync(changedRecords); } @@ -330,4 +343,4 @@ public class StaticPermissionSaver : IStaticPermissionSaver, ITransientDependenc .ToString() .ToMd5(); } -} \ No newline at end of file +} diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.EntityFrameworkCore/Volo.Abp.PermissionManagement.EntityFrameworkCore.abppkg.analyze.json b/modules/permission-management/src/Volo.Abp.PermissionManagement.EntityFrameworkCore/Volo.Abp.PermissionManagement.EntityFrameworkCore.abppkg.analyze.json index a6e55276a6..099ce4d6cc 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.EntityFrameworkCore/Volo.Abp.PermissionManagement.EntityFrameworkCore.abppkg.analyze.json +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.EntityFrameworkCore/Volo.Abp.PermissionManagement.EntityFrameworkCore.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Abp.PermissionManagement.EntityFrameworkCore", - "hash": "0dd0efed5fec2360dd19217eb02c8343", + "hash": "", "contents": [ { "namespace": "Volo.Abp.PermissionManagement.EntityFrameworkCore", @@ -67,27 +67,27 @@ { "namespace": "Volo.Abp.PermissionManagement.EntityFrameworkCore", "connectionStringName": "AbpPermissionManagement", - "databaseTables": [ - { - "entityFullName": "Volo.Abp.PermissionManagement.PermissionDefinitionRecord", - "contentType": "databaseTable", - "name": "AbpPermissions", - "summary": null - }, - { - "entityFullName": "Volo.Abp.PermissionManagement.PermissionGrant", - "contentType": "databaseTable", - "name": "AbpPermissionGrants", - "summary": null - }, + "databaseTables": [], + "replacedDbContexts": [], + "modelBuilderExtensionMethods": [ { - "entityFullName": "Volo.Abp.PermissionManagement.PermissionGroupDefinitionRecord", - "contentType": "databaseTable", - "name": "AbpPermissionGroups", - "summary": null + "returnType": "Void", + "namespace": "Volo.Abp.PermissionManagement.EntityFrameworkCore", + "name": "ConfigurePermissionManagement", + "summary": null, + "isAsync": false, + "isPublic": true, + "isPrivate": false, + "isStatic": true, + "parameters": [ + { + "type": "ModelBuilder", + "name": "builder", + "isOptional": false + } + ] } ], - "replacedDbContexts": [], "implementingInterfaces": [ { "name": "IInfrastructure", @@ -143,6 +143,12 @@ "declaringAssemblyName": "Volo.Abp.EntityFrameworkCore", "fullName": "Volo.Abp.EntityFrameworkCore.IEfCoreDbContext" }, + { + "name": "IAbpEfCoreDbFunctionContext", + "namespace": "Volo.Abp.EntityFrameworkCore.GlobalFilters", + "declaringAssemblyName": "Volo.Abp.EntityFrameworkCore", + "fullName": "Volo.Abp.EntityFrameworkCore.GlobalFilters.IAbpEfCoreDbFunctionContext" + }, { "name": "ITransientDependency", "namespace": "Volo.Abp.DependencyInjection", diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi.Client/Volo.Abp.PermissionManagement.HttpApi.Client.abppkg.analyze.json b/modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi.Client/Volo.Abp.PermissionManagement.HttpApi.Client.abppkg.analyze.json index d6e743f841..bad2a3d1b1 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi.Client/Volo.Abp.PermissionManagement.HttpApi.Client.abppkg.analyze.json +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi.Client/Volo.Abp.PermissionManagement.HttpApi.Client.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Abp.PermissionManagement.HttpApi.Client", - "hash": "d148a3deb0693369b6ac043923b7dd6a", + "hash": "", "contents": [ { "namespace": "Volo.Abp.PermissionManagement", diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi/Volo.Abp.PermissionManagement.HttpApi.abppkg.analyze.json b/modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi/Volo.Abp.PermissionManagement.HttpApi.abppkg.analyze.json index c9314a1775..951b30cdbd 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi/Volo.Abp.PermissionManagement.HttpApi.abppkg.analyze.json +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi/Volo.Abp.PermissionManagement.HttpApi.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Abp.PermissionManagement.HttpApi", - "hash": "7250e0a57ae6777cf200341791f24bdd", + "hash": "", "contents": [ { "namespace": "Volo.Abp.PermissionManagement.HttpApi", @@ -63,6 +63,51 @@ "contentType": "abpModule", "name": "AbpPermissionManagementHttpApiModule", "summary": null + }, + { + "apis": [ + { + "path": "api/permission-management/permissions", + "method": "GET", + "groupName": "Permissions", + "responseType": "Volo.Abp.PermissionManagement.GetPermissionListResultDto", + "responseTypeAsJson": "{\r\n \"entityDisplayName\": \"string\",\r\n \"groups\": [\r\n {\r\n \"name\": \"string\",\r\n \"displayName\": \"string\",\r\n \"displayNameKey\": \"string\",\r\n \"displayNameResource\": \"string\",\r\n \"permissions\": [\r\n {\r\n \"name\": \"string\",\r\n \"displayName\": \"string\",\r\n \"parentName\": \"string\",\r\n \"isGranted\": false,\r\n \"allowedProviders\": [\r\n \"string\"\r\n ],\r\n \"grantedProviders\": [\r\n {\r\n \"providerName\": \"string\",\r\n \"providerKey\": \"string\"\r\n }\r\n ]\r\n }\r\n ]\r\n }\r\n ]\r\n}", + "parameterDescriptions": [ + { + "name": "providerName", + "type": "String" + }, + { + "name": "providerKey", + "type": "String" + } + ] + }, + { + "path": "api/permission-management/permissions", + "method": "PUT", + "groupName": "Permissions", + "responseType": "System.Void", + "responseTypeAsJson": "", + "parameterDescriptions": [ + { + "name": "providerName", + "type": "String" + }, + { + "name": "providerKey", + "type": "String" + }, + { + "name": "input", + "type": "UpdatePermissionsDto" + } + ] + } + ], + "contentType": "httpApi", + "name": "Defined Http Apis", + "summary": null } ] } \ No newline at end of file diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.MongoDB/Volo.Abp.PermissionManagement.MongoDB.abppkg.analyze.json b/modules/permission-management/src/Volo.Abp.PermissionManagement.MongoDB/Volo.Abp.PermissionManagement.MongoDB.abppkg.analyze.json index a86ff5892d..ab836e4108 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.MongoDB/Volo.Abp.PermissionManagement.MongoDB.abppkg.analyze.json +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.MongoDB/Volo.Abp.PermissionManagement.MongoDB.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Abp.PermissionManagement.MongoDB", - "hash": "33af874bb56ed9db03c5e7b77e15f321", + "hash": "", "contents": [ { "namespace": "Volo.Abp.PermissionManagement.MongoDB", @@ -71,19 +71,19 @@ { "entityFullName": "Volo.Abp.PermissionManagement.PermissionGroupDefinitionRecord", "contentType": "databaseCollection", - "name": "AbpPermissionGroups", + "name": "PermissionGroups", "summary": null }, { "entityFullName": "Volo.Abp.PermissionManagement.PermissionDefinitionRecord", "contentType": "databaseCollection", - "name": "AbpPermissions", + "name": "Permissions", "summary": null }, { "entityFullName": "Volo.Abp.PermissionManagement.PermissionGrant", "contentType": "databaseCollection", - "name": "AbpPermissionGrants", + "name": "PermissionGrants", "summary": null } ], diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Volo.Abp.PermissionManagement.Web.abppkg.analyze.json b/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Volo.Abp.PermissionManagement.Web.abppkg.analyze.json index 0213be3e83..0b6bbe7fa9 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Volo.Abp.PermissionManagement.Web.abppkg.analyze.json +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Volo.Abp.PermissionManagement.Web.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Abp.PermissionManagement.Web", - "hash": "0499a3058051b1ccbf1cb53b7731f1c8", + "hash": "", "contents": [ { "namespace": "Volo.Abp.PermissionManagement.Web", @@ -68,6 +68,12 @@ "contentType": "abpModule", "name": "AbpPermissionManagementWebModule", "summary": null + }, + { + "namespace": "Volo.Abp.PermissionManagement.Web.Pages.AbpPermissionManagement", + "contentType": "webPage", + "name": "PermissionManagementModal", + "summary": null } ] } \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/package.json b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/package.json index af2521b7fa..78fa030754 100644 --- a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/package.json +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/package.json @@ -3,6 +3,6 @@ "name": "demo-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "~8.3.0-rc.1" + "@abp/aspnetcore.mvc.ui.theme.basic": "~8.3.0" } } diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/yarn.lock b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/yarn.lock index f8b5af47ca..d19b65bc24 100644 --- a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/yarn.lock +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/yarn.lock @@ -2,194 +2,194 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-8.3.0-rc.1.tgz#7254b66019b99ac8a29385c1bb2c9c658a167bc7" - integrity sha512-uMgO1VQgDOW9tMq9gl6idsBZZcL/voeMp0wkBTRORQHg0E+SyA8z0yQrg5S8hU/7zRwoZPm3K9R/Peu71jNTgQ== - dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~8.3.0-rc.1" - -"@abp/aspnetcore.mvc.ui.theme.shared@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-8.3.0-rc.1.tgz#cec5ca6c5a5f61a361425b9d55711beb0db4eb81" - integrity sha512-qLAzDwiQvRB8xDs6bkeZ4YLMUuTb6Dz/GmWT61dSMUAhRCTPqPi6aWnt9fiM99HbkP7APLPb7d+o5ho6FoktNQ== - dependencies: - "@abp/aspnetcore.mvc.ui" "~8.3.0-rc.1" - "@abp/bootstrap" "~8.3.0-rc.1" - "@abp/bootstrap-datepicker" "~8.3.0-rc.1" - "@abp/bootstrap-daterangepicker" "~8.3.0-rc.1" - "@abp/datatables.net-bs5" "~8.3.0-rc.1" - "@abp/font-awesome" "~8.3.0-rc.1" - "@abp/jquery-form" "~8.3.0-rc.1" - "@abp/jquery-validation-unobtrusive" "~8.3.0-rc.1" - "@abp/lodash" "~8.3.0-rc.1" - "@abp/luxon" "~8.3.0-rc.1" - "@abp/malihu-custom-scrollbar-plugin" "~8.3.0-rc.1" - "@abp/moment" "~8.3.0-rc.1" - "@abp/select2" "~8.3.0-rc.1" - "@abp/sweetalert2" "~8.3.0-rc.1" - "@abp/timeago" "~8.3.0-rc.1" - "@abp/toastr" "~8.3.0-rc.1" - -"@abp/aspnetcore.mvc.ui@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-8.3.0-rc.1.tgz#7329e4878e64277dfed88eef5e9d1715d1af925f" - integrity sha512-NPWrtJ+Il+SI0oPQ5gc1Lc9vfPZvHbe0d/5y5qGIdwKY1F5txIyRGesc0najOLIUe7Z66AInyfNuNeoaFNR0fg== +"@abp/aspnetcore.mvc.ui.theme.basic@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-8.3.0.tgz#a2d17eb5da2c3abfad4bcc842cfcda0e58a130a4" + integrity sha512-T2dg7WlvNSrwTCfy5wk4gqiJ/15kIjMGM4wLXIJcMYn60yGY/YeX6Q4A3R/qJzfl4JdgW5rt3GpdKv86y/ADXg== + dependencies: + "@abp/aspnetcore.mvc.ui.theme.shared" "~8.3.0" + +"@abp/aspnetcore.mvc.ui.theme.shared@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-8.3.0.tgz#5d6bb5181a62770e9cb967980b77e75c115c5ed7" + integrity sha512-o/0eh8jLS+YJiseTKzzioUz0vNnMFzyoz+mkyA4PlO1gqw2JFhzPhTBZ3cuyV9QlxUfEA8dWAkqAUX6vqiHwkw== + dependencies: + "@abp/aspnetcore.mvc.ui" "~8.3.0" + "@abp/bootstrap" "~8.3.0" + "@abp/bootstrap-datepicker" "~8.3.0" + "@abp/bootstrap-daterangepicker" "~8.3.0" + "@abp/datatables.net-bs5" "~8.3.0" + "@abp/font-awesome" "~8.3.0" + "@abp/jquery-form" "~8.3.0" + "@abp/jquery-validation-unobtrusive" "~8.3.0" + "@abp/lodash" "~8.3.0" + "@abp/luxon" "~8.3.0" + "@abp/malihu-custom-scrollbar-plugin" "~8.3.0" + "@abp/moment" "~8.3.0" + "@abp/select2" "~8.3.0" + "@abp/sweetalert2" "~8.3.0" + "@abp/timeago" "~8.3.0" + "@abp/toastr" "~8.3.0" + +"@abp/aspnetcore.mvc.ui@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-8.3.0.tgz#d7ba0539bfcc6661a347dea7f952489010b3e816" + integrity sha512-OxgZhLKiXGFYYpNJ5O/IbhinsniiBPv9586e+1Soar0GckCMIIegJxnJb1Bo1O75blrcK2cIU6LqjRT1FXt2Lw== dependencies: ansi-colors "^4.1.3" -"@abp/bootstrap-datepicker@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-8.3.0-rc.1.tgz#d3bcb5f0063df631ad45c7f822195fc4e5c5b4e2" - integrity sha512-oqbwh9dz8XNfh+eZou8GvcEUYA1J0qr3ABA1r72DJZ/nzfLQX7pUO8NkkaDLpVwrly64rfOlxV4LT7g5muoAsw== +"@abp/bootstrap-datepicker@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-8.3.0.tgz#8c1bf9efec37b671d8f28b8b1e89c1ac66684267" + integrity sha512-KCwMtm7x+cnKPeNMzhjDJUce0stwu4e57ibmvA6sMf1tmj+yB256O4E2hIDDohiT3vP/zV8HVHX6uATlcmGC9w== dependencies: bootstrap-datepicker "^1.10.0" -"@abp/bootstrap-daterangepicker@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-8.3.0-rc.1.tgz#33958a1806a070db4fb01eb40a0897bfd16cf1f5" - integrity sha512-egtnxhRMCu56RV2bIRBLLTly2Y4W/2jwl9el+9Stjc8IN91j2UL5E4t5qn3zI3vXvVX4w5vP+TthQj0grFK0/Q== +"@abp/bootstrap-daterangepicker@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-8.3.0.tgz#2b8ed978333502677916f88cbb3e1d1b1c8a3a17" + integrity sha512-uQSfuCQogl4BujdqvtdAoSE+z32ci8FT5+i3gLfpqbgTaxvY/Kv5NxAUH5/1sjnuAE7SMWO+eVvI3V0pXgQohg== dependencies: bootstrap-daterangepicker "^3.1.0" -"@abp/bootstrap@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-8.3.0-rc.1.tgz#3ca994e4c003d056024dcd533221461cccd14f2a" - integrity sha512-xrs0JOYFEPzi3V6s9d3SCj0CxY06bBmFUK5aETgKUiXBXa4vU2YoNbnrCtDUvV+mn517FRuA/j3RaFkTWYg48g== +"@abp/bootstrap@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-8.3.0.tgz#96d6ea7e6ac30f6e34e495a4224f56f7b2a1a7a3" + integrity sha512-5AmdTtakmWhZmHrb7ibvvf+KwF9OGadpAe7Kv9mNEE02K2qkp7Xw4r5o/bgVl7YfLC1FA6GZZXrV2s2t0gjHtg== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" bootstrap "^5.3.3" -"@abp/core@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-8.3.0-rc.1.tgz#771c7ecd27319201a8236f0bc6b5601188059325" - integrity sha512-IB8Baa3LIv3XYja6iBw6VSnITGcRseGyY8wBNEXRiB+ni21Bv//NMyohdOot6G+HlnHlrB7kFeCX+gWu+LuYkg== +"@abp/core@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-8.3.0.tgz#3a68f5a9549efcc3e13500e301f2576751b51445" + integrity sha512-zrxnZi4qij/Y4AZWaXuPqs3Dd7gBtU/onX7FkYxLgQDxYBfx+84QAnPRNRFKMWaD/wKbTUB0wA66U3t2aiQX9Q== dependencies: - "@abp/utils" "~8.3.0-rc.1" + "@abp/utils" "~8.3.0" -"@abp/datatables.net-bs5@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-8.3.0-rc.1.tgz#b53dc353f485952439ea10035df0851d520efe96" - integrity sha512-89wpkG6u1YBR98OmuEbvs4VdR5n8L4n3Z8GiHwuKr2FpEOx7cAXYKsx/8ifmICMLPiMIvFrtOEBrrv5ZKANsAA== +"@abp/datatables.net-bs5@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-8.3.0.tgz#21822ae4912a561afe9112925185aece03fcd0eb" + integrity sha512-GOGYSSHp3iPUDFRX2Y3C0wkiCOJDuYuK/zUSzQLNpOvBMZO+I/oWBcZM+qkVowIzsoRlAGV9+CVV2B/B05qidA== dependencies: - "@abp/datatables.net" "~8.3.0-rc.1" + "@abp/datatables.net" "~8.3.0" datatables.net-bs5 "^2.0.8" -"@abp/datatables.net@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-8.3.0-rc.1.tgz#bb70608994c4a52bd15331f76af718353c843f94" - integrity sha512-G42D6W0Xb8NIQxJWGpcxLOjbZ4CHtrm9oBG5+GfVmQEPGfl8r+DYdrYDAkysDg483s+48POH7NC3L1LOlxlqRg== +"@abp/datatables.net@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-8.3.0.tgz#ff697758ce9309ba8311f23aec921c4722588c8b" + integrity sha512-4dIdv7eN1tVouOUrlF+MIdg8zQpecyH61waqLgy1q5jMZQivrTSFZ7UWMG3WVOAYjw5zSUZHZPbzA+ttnaOPkg== dependencies: - "@abp/jquery" "~8.3.0-rc.1" + "@abp/jquery" "~8.3.0" datatables.net "^2.0.8" -"@abp/font-awesome@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-8.3.0-rc.1.tgz#ea05d7e08395b1894eefe6f912ae0534fd75e69a" - integrity sha512-GN1xZ76RzQC3aqU2m19vYsyfESCeoSsp8AtvilmeqsjlzhuLLdQ6UWSxMqRqE22TCWRXbA/d/7IAb12TB1mawg== +"@abp/font-awesome@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-8.3.0.tgz#9e4e9adc08dfca52c0a07d1608c5e5662675a4c9" + integrity sha512-NRxvM/dzvQC2Cj/F5i07XB/i6IVTmXcO9sOq6TWosWib0wGaPxRbCSjy8QUAYSD1QYaVQ30XMb3XXImaMGyd8A== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" "@fortawesome/fontawesome-free" "^6.5.2" -"@abp/jquery-form@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-8.3.0-rc.1.tgz#21025048f44028a5cb1ced7414cb48af00e91bff" - integrity sha512-mVZzEJKbhiYmXK2yZRZAJwO5e7C2N0lj8ueOYPiFG6h4UKLbKPHQdIrkapyc88VirrELe1hnhJJbQ56dsQWeyg== +"@abp/jquery-form@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-8.3.0.tgz#fa2ad2fedbe3d3528ee94cbbd4f94d48f0cb5e4d" + integrity sha512-olP9FmpNVTbOIewsVua0moHVYXw4Sl3chFbvTDLG6vRBohLSjllUXfgY3UEIVWR1PCqnAg+iEJZl9NHB9iOLBg== dependencies: - "@abp/jquery" "~8.3.0-rc.1" + "@abp/jquery" "~8.3.0" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-8.3.0-rc.1.tgz#63042715391ca63f273874ff66fca4b20330d31b" - integrity sha512-EKQf733+HS9bIVQhMgAHYZfCY663GqNv8KUcCIuQOHPt5DWU49ygYhawkcYIzUKd2Gy9+ZtyWLkWmoBxTnwlmw== +"@abp/jquery-validation-unobtrusive@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-8.3.0.tgz#0992cdd33170df83c79aa3371038c0b30e451521" + integrity sha512-9hidjq8x8sTnP5O3K2b2x9NpxvPd9WB03ENR6OfvM89kfSmQapSvBZTlCu80YK9NaQJ6MLQRLYOCuc3GHcj3EQ== dependencies: - "@abp/jquery-validation" "~8.3.0-rc.1" + "@abp/jquery-validation" "~8.3.0" jquery-validation-unobtrusive "^4.0.0" -"@abp/jquery-validation@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-8.3.0-rc.1.tgz#8c82189ba7c3614f7306c2bf958b3717a6a4e702" - integrity sha512-Fr8AI//7iV743S6bw4ixE5qOu+af3HfZSivQJnYVVTbR/75gPqI/xRe6u/k82TJIBM7IaspQ4QdruMuvnJyBpQ== +"@abp/jquery-validation@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-8.3.0.tgz#bd6a72c6d86f116abe3b5d2adf3752bdbbcca887" + integrity sha512-6l5BZSa3N0Fou6Se7MfUSnI2dD4SYhZ2V988bgPJQ6p37XBOZ2OAj7LEIf5FSjtUzXjao/6/vqjkPNYreNikig== dependencies: - "@abp/jquery" "~8.3.0-rc.1" + "@abp/jquery" "~8.3.0" jquery-validation "^1.20.1" -"@abp/jquery@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-8.3.0-rc.1.tgz#a181c6749d58690b3265705959d8c818296896f3" - integrity sha512-fXs35cDLAw66irfHsFIWD41RKzpLABkULLoMwxfB76nOVPdV7qlWrXoI2O/du3xhCqBqHR4fS8xjwE6kFvkdLQ== +"@abp/jquery@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-8.3.0.tgz#9be5ef2f769680226e6a1a981026590caf3b57ef" + integrity sha512-GsFY+n3EtS6B0pAoKd+xMnt5Dzi5bHvIbhLgDgfQfOBzAy3twGRWsPQ3nkuXXm8TppwujMNowU1oiLKPPm0AOA== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" jquery "~3.7.1" -"@abp/lodash@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-8.3.0-rc.1.tgz#32f8805031f73b9d5bdc338afe49739c4ebc3ce9" - integrity sha512-UBGlG5+tFpyAPMuwpkY7K/g21c+d3Aq3HbFmcIilUEIsJ+yJqj95xhRh6t/LSwJCo5ntdSCgVC85q0kD0fQlQA== +"@abp/lodash@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-8.3.0.tgz#f5a0a496c999886f2d6999067bfac2e1f0c3969c" + integrity sha512-BiAsONbKR/RKG3WjRaMWVmhNe1ELEsykVq+ogG1Rhk3kwPbvze3TS8k2p0Lu/RC41/BmDUmJ5abg1pUMwkRT8w== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" lodash "^4.17.21" -"@abp/luxon@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-8.3.0-rc.1.tgz#df19773212502336c2caf6a8806b7647748f8f81" - integrity sha512-1oPx0tGyFi58T0yv/pdqJpcIRWU6ej5Sv28fRgz3J6tHam3hVPtKJPK9Ajvn6+MNVDLuMUczgVtfWEOvO2Kqrg== +"@abp/luxon@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-8.3.0.tgz#7dd3f756be1605506e26f7ac76b80cc082a12d07" + integrity sha512-8gdI5BtXkVp0sFg89QVDe8AvgQ7Qfq4JCqz2PMrKPSATR3H8GD6BCaEYpRp6CNTCjVrQjGZdzKgUyea1D3dHbw== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" luxon "^3.4.4" -"@abp/malihu-custom-scrollbar-plugin@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-8.3.0-rc.1.tgz#b57086d708082ce45e1917aeca8c92029ebd805d" - integrity sha512-4sa5e07EPW9IM7eQbvKtk78gd/bESYhTsl+BeWSKeqjj5wwwPYf4GIEvfJM7JVnhYwh1IPYDEkTv9QNYLczXKQ== +"@abp/malihu-custom-scrollbar-plugin@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-8.3.0.tgz#c88c132c3402bbb02054ca7d446051950f87a817" + integrity sha512-nd/mb6LJa6fMxal8PGcIjIRIoZ/UHCd01WDC9YI2H4wGCGx0CA0JyHso5oc/OEzJhUL8ujO/vYm9uLb7YahPtA== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/moment@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-8.3.0-rc.1.tgz#0ba9d64ca6d7b454af7aaa63e54be267f333e1fe" - integrity sha512-YbVEDg3m+D5KMcTCBEnor/tFgmk9IeL4pF/oChYQGXLeyohY7vfmK68owAnEDN61nCRXng9xykiZu2bLq829WA== +"@abp/moment@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-8.3.0.tgz#8e4f7a523ab76ef9e4cd96a399560bad38d38d1a" + integrity sha512-LywSsKuQ2GN/Btmle6CcTKa811zbvUWdC+RLQA792K9HyBs6LvN0qRRluEQZgplairRgh2pDOg8tdFlUERkv2w== dependencies: moment "^2.30.1" -"@abp/select2@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-8.3.0-rc.1.tgz#3eb932e05987cc1e13f72decc9ae70d47801bf7d" - integrity sha512-lZuJLiFcOEVj6cTPAA7ZfhE3v1LyivmMt8Tt7Dpvgybx2PDN1NtfLce2BCKb0MvsaTlfJMSK0ZLu3JpxCQ+Q/A== +"@abp/select2@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-8.3.0.tgz#ef4742fcd345394767f46180f61c6cabbd0b3867" + integrity sha512-bdLt2+ImxxpiZl4HGbYJpdDROQUT7/Z/+8A+6oJNacq3lNekdvufLYgTMxKru6zTbnd9j3HFKMOTE1eRjb9Xqg== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" select2 "^4.0.13" -"@abp/sweetalert2@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-8.3.0-rc.1.tgz#66d8b9ce287a71474ce37c217cd800e150a86138" - integrity sha512-b6dZbc5/nYrUz5s+lAgi561XnsASa0ZJOn6f5W2Oakm9ULzqFndapKx5f+zHeJaNArpeGDh50AjQ+lcGGw83zQ== +"@abp/sweetalert2@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-8.3.0.tgz#a63020d57e44f7940817287d3d9676288bfb85aa" + integrity sha512-ooqPM4Z2v2scnMo5l8ycTmp6t/sW4sCsvIkJ4TyM876WLQJaZxJdOao4RQWuU+dVFr9zg8cOwqLH4q7UEiO6ww== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" sweetalert2 "^11.3.6" -"@abp/timeago@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-8.3.0-rc.1.tgz#d795b9cccb190f5d42f242727ac447fe03c30db3" - integrity sha512-yJCA7PHmAxFxIvPq03iSx3LbIiDQls4AiVBO75103LEGokRUG9bg+iPA7GLkPpfNbnNgEJ7N7Gw6RQzMNRLCpA== +"@abp/timeago@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-8.3.0.tgz#b3b8d6927bf170f77af848bc1925e5ef6835bd55" + integrity sha512-Dd6xaUoF9Bp4F9WJnTsFBqY+Gt++UR7UmLvBZL/dvthkeNCu2I8MUsmshkUUjY0lIXpjZwefUOuyupQrgHXPMg== dependencies: - "@abp/jquery" "~8.3.0-rc.1" + "@abp/jquery" "~8.3.0" timeago "^1.6.7" -"@abp/toastr@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-8.3.0-rc.1.tgz#82c7f6566e604c2cf31555da3f9b0898df8a5541" - integrity sha512-0nBM4nEvDlANVulk7EKoB4Lk/1fH+UgzPOyUOyemQZAWHgPhIpa4z5yiLkCeOxN1hu/CBEe+Jo7qJblsj+v7kQ== +"@abp/toastr@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-8.3.0.tgz#e68a2bd8f731e79034594bc2c736f7c66b3df1af" + integrity sha512-aWK/RaX/FmcEKhJLjsw1A0K2c04m2fRJkmo9NwzBCSscy6Msw9IMkqNWLiFDThMU8/qKzq7wq3Vmk/C0IpeAwA== dependencies: - "@abp/jquery" "~8.3.0-rc.1" + "@abp/jquery" "~8.3.0" toastr "^2.1.4" -"@abp/utils@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-8.3.0-rc.1.tgz#7db324059f8f9c64fbb5d5a6f0c2384896ca1928" - integrity sha512-Eg4Lwv4DEDr5mfG/8ghwMPdphywZBZIxWTJCZnCWngDQ9fEn/bnYuL1WkvbVvKd10A6030wHEJXFJj2OuNdi3Q== +"@abp/utils@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-8.3.0.tgz#96ae9266ad4d833fd9d723acef7fc85fabf618d9" + integrity sha512-w/XAqza4Z8wBWRoj5uPNKbd1/bE9L/uUWk6EUSBKmljMRryWQBmaPkb1XgvrOMQIbyyF60tUvvipapQLPVh6hw== dependencies: just-compare "^2.3.0" diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Application.Contracts/Volo.Abp.SettingManagement.Application.Contracts.abppkg.analyze.json b/modules/setting-management/src/Volo.Abp.SettingManagement.Application.Contracts/Volo.Abp.SettingManagement.Application.Contracts.abppkg.analyze.json index f08e228750..a366802a26 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Application.Contracts/Volo.Abp.SettingManagement.Application.Contracts.abppkg.analyze.json +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Application.Contracts/Volo.Abp.SettingManagement.Application.Contracts.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Abp.SettingManagement.Application.Contracts", - "hash": "212ba33f01b4091ceedd07b742d142bb", + "hash": "", "contents": [ { "namespace": "Volo.Abp.SettingManagement", @@ -82,6 +82,13 @@ "contentType": "permission", "name": "SettingManagement.Emailing.Test", "summary": null + }, + { + "displayName": "Time zone", + "isEnabled": true, + "contentType": "permission", + "name": "SettingManagement.TimeZone", + "summary": null } ] } \ No newline at end of file diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Application/Volo.Abp.SettingManagement.Application.abppkg.analyze.json b/modules/setting-management/src/Volo.Abp.SettingManagement.Application/Volo.Abp.SettingManagement.Application.abppkg.analyze.json index 8476bfee4c..47160bc535 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Application/Volo.Abp.SettingManagement.Application.abppkg.analyze.json +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Application/Volo.Abp.SettingManagement.Application.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Abp.SettingManagement.Application", - "hash": "e101768281ffae14eab8cdfd970a3b0f", + "hash": "", "contents": [ { "namespace": "Volo.Abp.SettingManagement", @@ -24,6 +24,16 @@ "declaringAssemblyName": "Volo.Abp.Emailing", "namespace": "Volo.Abp.Emailing", "name": "AbpEmailingModule" + }, + { + "declaringAssemblyName": "Volo.Abp.Timing", + "namespace": "Volo.Abp.Timing", + "name": "AbpTimingModule" + }, + { + "declaringAssemblyName": "Volo.Abp.Users.Abstractions", + "namespace": "Volo.Abp.Users", + "name": "AbpUsersAbstractionModule" } ], "implementingInterfaces": [ @@ -141,6 +151,7 @@ "methods": [ { "returnType": "EmailSettingsDto", + "namespace": "Volo.Abp.SettingManagement", "name": "GetAsync", "summary": null, "isAsync": true, @@ -151,6 +162,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.SettingManagement", "name": "UpdateAsync", "summary": null, "isAsync": true, @@ -167,6 +179,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.SettingManagement", "name": "SendTestEmailAsync", "summary": null, "isAsync": true, @@ -185,6 +198,115 @@ "contentType": "applicationService", "name": "EmailSettingsAppService", "summary": null + }, + { + "namespace": "Volo.Abp.SettingManagement", + "baseClass": { + "name": "SettingManagementAppServiceBase", + "namespace": "Volo.Abp.SettingManagement", + "declaringAssemblyName": "Volo.Abp.SettingManagement.Application", + "fullName": "Volo.Abp.SettingManagement.SettingManagementAppServiceBase" + }, + "implementingInterfaces": [ + { + "name": "IApplicationService", + "namespace": "Volo.Abp.Application.Services", + "declaringAssemblyName": "Volo.Abp.Ddd.Application.Contracts", + "fullName": "Volo.Abp.Application.Services.IApplicationService" + }, + { + "name": "IRemoteService", + "namespace": "Volo.Abp", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.IRemoteService" + }, + { + "name": "IAvoidDuplicateCrossCuttingConcerns", + "namespace": "Volo.Abp.Aspects", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Aspects.IAvoidDuplicateCrossCuttingConcerns" + }, + { + "name": "IValidationEnabled", + "namespace": "Volo.Abp.Validation", + "declaringAssemblyName": "Volo.Abp.Validation", + "fullName": "Volo.Abp.Validation.IValidationEnabled" + }, + { + "name": "IUnitOfWorkEnabled", + "namespace": "Volo.Abp.Uow", + "declaringAssemblyName": "Volo.Abp.Uow", + "fullName": "Volo.Abp.Uow.IUnitOfWorkEnabled" + }, + { + "name": "IAuditingEnabled", + "namespace": "Volo.Abp.Auditing", + "declaringAssemblyName": "Volo.Abp.Auditing.Contracts", + "fullName": "Volo.Abp.Auditing.IAuditingEnabled" + }, + { + "name": "IGlobalFeatureCheckingEnabled", + "namespace": "Volo.Abp.GlobalFeatures", + "declaringAssemblyName": "Volo.Abp.GlobalFeatures", + "fullName": "Volo.Abp.GlobalFeatures.IGlobalFeatureCheckingEnabled" + }, + { + "name": "ITransientDependency", + "namespace": "Volo.Abp.DependencyInjection", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.DependencyInjection.ITransientDependency" + }, + { + "name": "ITimeZoneSettingsAppService", + "namespace": "Volo.Abp.SettingManagement", + "declaringAssemblyName": "Volo.Abp.SettingManagement.Application.Contracts", + "fullName": "Volo.Abp.SettingManagement.ITimeZoneSettingsAppService" + } + ], + "methods": [ + { + "returnType": "String", + "namespace": "Volo.Abp.SettingManagement", + "name": "GetAsync", + "summary": null, + "isAsync": true, + "isPublic": true, + "isPrivate": false, + "isStatic": false, + "parameters": [] + }, + { + "returnType": "List", + "namespace": "Volo.Abp.SettingManagement", + "name": "GetTimezonesAsync", + "summary": null, + "isAsync": true, + "isPublic": true, + "isPrivate": false, + "isStatic": false, + "parameters": [] + }, + { + "returnType": "Void", + "namespace": "Volo.Abp.SettingManagement", + "name": "UpdateAsync", + "summary": null, + "isAsync": true, + "isPublic": true, + "isPrivate": false, + "isStatic": false, + "parameters": [ + { + "type": "String", + "name": "timezone", + "isOptional": false + } + ] + } + ], + "contentType": "applicationService", + "name": "TimeZoneSettingsAppService", + "summary": null } ] } \ No newline at end of file diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Application/Volo/Abp/SettingManagement/EmailSettingsAppService.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Application/Volo/Abp/SettingManagement/EmailSettingsAppService.cs index 2d15cb09fb..9cc6aa5bd0 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Application/Volo/Abp/SettingManagement/EmailSettingsAppService.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Application/Volo/Abp/SettingManagement/EmailSettingsAppService.cs @@ -1,6 +1,7 @@ ï»żusing System; using System.Threading.Tasks; using Microsoft.AspNetCore.Authorization; +using Microsoft.Extensions.Logging; using Volo.Abp.Emailing; using Volo.Abp.MultiTenancy; using Volo.Abp.Features; @@ -68,7 +69,15 @@ public class EmailSettingsAppService : SettingManagementAppServiceBase, IEmailSe { await CheckFeatureAsync(); - await EmailSender.SendAsync(input.SenderEmailAddress, input.TargetEmailAddress, input.Subject, input.Body); + try + { + await EmailSender.SendAsync(input.SenderEmailAddress, input.TargetEmailAddress, input.Subject, input.Body); + } + catch (Exception e) + { + Logger.LogError("Error sending test email: " + e); + throw new UserFriendlyException(L["MailSendingFailed"]); + } } protected virtual async Task CheckFeatureAsync() diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.Server/Volo.Abp.SettingManagement.Blazor.Server.abppkg.analyze.json b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.Server/Volo.Abp.SettingManagement.Blazor.Server.abppkg.analyze.json new file mode 100644 index 0000000000..6854bbe6ab --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.Server/Volo.Abp.SettingManagement.Blazor.Server.abppkg.analyze.json @@ -0,0 +1,68 @@ +{ + "name": "Volo.Abp.SettingManagement.Blazor.Server", + "hash": "", + "contents": [ + { + "namespace": "Volo.Abp.SettingManagement.Blazor.Server", + "dependsOnModules": [ + { + "declaringAssemblyName": "Volo.Abp.SettingManagement.Blazor", + "namespace": "Volo.Abp.SettingManagement.Blazor", + "name": "AbpSettingManagementBlazorModule" + }, + { + "declaringAssemblyName": "Volo.Abp.AspNetCore.Components.Server.Theming", + "namespace": "Volo.Abp.AspNetCore.Components.Server.Theming", + "name": "AbpAspNetCoreComponentsServerThemingModule" + } + ], + "implementingInterfaces": [ + { + "name": "IAbpModule", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IAbpModule" + }, + { + "name": "IOnPreApplicationInitialization", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IOnPreApplicationInitialization" + }, + { + "name": "IOnApplicationInitialization", + "namespace": "Volo.Abp", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.IOnApplicationInitialization" + }, + { + "name": "IOnPostApplicationInitialization", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IOnPostApplicationInitialization" + }, + { + "name": "IOnApplicationShutdown", + "namespace": "Volo.Abp", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.IOnApplicationShutdown" + }, + { + "name": "IPreConfigureServices", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IPreConfigureServices" + }, + { + "name": "IPostConfigureServices", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IPostConfigureServices" + } + ], + "contentType": "abpModule", + "name": "AbpSettingManagementBlazorServerModule", + "summary": null + } + ] +} \ No newline at end of file diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Volo.Abp.SettingManagement.Blazor.abppkg.analyze.json b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Volo.Abp.SettingManagement.Blazor.abppkg.analyze.json new file mode 100644 index 0000000000..e9362aea97 --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Volo.Abp.SettingManagement.Blazor.abppkg.analyze.json @@ -0,0 +1,85 @@ +{ + "name": "Volo.Abp.SettingManagement.Blazor", + "hash": "", + "contents": [ + { + "namespace": "Volo.Abp.SettingManagement.Blazor", + "dependsOnModules": [ + { + "declaringAssemblyName": "Volo.Abp.AutoMapper", + "namespace": "Volo.Abp.AutoMapper", + "name": "AbpAutoMapperModule" + }, + { + "declaringAssemblyName": "Volo.Abp.AspNetCore.Components.Web.Theming", + "namespace": "Volo.Abp.AspNetCore.Components.Web.Theming", + "name": "AbpAspNetCoreComponentsWebThemingModule" + }, + { + "declaringAssemblyName": "Volo.Abp.SettingManagement.Application.Contracts", + "namespace": "Volo.Abp.SettingManagement", + "name": "AbpSettingManagementApplicationContractsModule" + } + ], + "implementingInterfaces": [ + { + "name": "IAbpModule", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IAbpModule" + }, + { + "name": "IOnPreApplicationInitialization", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IOnPreApplicationInitialization" + }, + { + "name": "IOnApplicationInitialization", + "namespace": "Volo.Abp", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.IOnApplicationInitialization" + }, + { + "name": "IOnPostApplicationInitialization", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IOnPostApplicationInitialization" + }, + { + "name": "IOnApplicationShutdown", + "namespace": "Volo.Abp", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.IOnApplicationShutdown" + }, + { + "name": "IPreConfigureServices", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IPreConfigureServices" + }, + { + "name": "IPostConfigureServices", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IPostConfigureServices" + } + ], + "contentType": "abpModule", + "name": "AbpSettingManagementBlazorModule", + "summary": null + }, + { + "namespace": "Volo.Abp.SettingManagement.Blazor.Pages.SettingManagement.TimeZoneSettingGroup", + "contentType": "webPage", + "name": "TimeZoneSettingGroupViewComponent", + "summary": null + }, + { + "namespace": "Volo.Abp.SettingManagement.Blazor.Pages.SettingManagement.EmailSettingGroup", + "contentType": "webPage", + "name": "EmailSettingGroupViewComponent", + "summary": null + } + ] +} \ No newline at end of file diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo.Abp.SettingManagement.Domain.Shared.abppkg.analyze.json b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo.Abp.SettingManagement.Domain.Shared.abppkg.analyze.json index 9879af1346..3fffa604d6 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo.Abp.SettingManagement.Domain.Shared.abppkg.analyze.json +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo.Abp.SettingManagement.Domain.Shared.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Abp.SettingManagement.Domain.Shared", - "hash": "2f93f4bc80c473a7680b5edd11fe138a", + "hash": "", "contents": [ { "namespace": "Volo.Abp.SettingManagement", @@ -84,7 +84,7 @@ "valueType": "ToggleStringValueType", "defaultValue": "false", "displayName": "Allow changing email settings.", - "description": null, + "description": "", "isAvailableToHost": false, "isVisibleToClients": true, "contentType": "feature", diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/ar.json b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/ar.json index ffddca67f0..0ca180a665 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/ar.json +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/ar.json @@ -15,6 +15,7 @@ "TestEmailSubject": "ۧ۟ŰȘۚۧ۱ Ű§Ù„ŰšŰ±ÙŠŰŻ Ű§Ù„Ű„Ù„ÙƒŰȘŰ±ÙˆÙ†ÙŠ {0}", "TestEmailBody": "ۧ۟ŰȘۚۧ۱ Ù†Ű” Ű±ŰłŰ§Ù„Ű© Ű§Ù„ŰšŰ±ÙŠŰŻ Ű§Ù„Ű„Ù„ÙƒŰȘŰ±ÙˆÙ†ÙŠ Ù‡Ù†Ű§", "SuccessfullySent": "ŰŁŰ±ŰłÙ„ŰȘ ŰšÙ†ŰŹŰ§Ű­", + "MailSendingFailed": "ÙŰŽÙ„ Ű„Ű±ŰłŰ§Ù„ Ű§Ù„ŰšŰ±ÙŠŰŻ ی ÙŠŰ±ŰŹÙ‰ Ű§Ù„ŰȘŰ­Ù‚Ù‚ من ŰȘكوين Ű§Ù„ŰšŰ±ÙŠŰŻ Ű§Ù„Ű„Ù„ÙƒŰȘŰ±ÙˆÙ†ÙŠ Ű§Ù„ŰźŰ§Ű” ŰšÙƒ ÙˆŰ§Ù„Ù…Ű­Ű§ÙˆÙ„Ű© Ù…Ű±Ű© ŰŁŰźŰ±Ù‰.", "Send": "ÙŠŰ±ŰłÙ„", "Menu:Emailing": "Ű„Ű±ŰłŰ§Ù„ ŰšŰ§Ù„ŰšŰ±ÙŠŰŻ Ű§Ù„Ű„Ù„ÙƒŰȘŰ±ÙˆÙ†ÙŠ", "Menu:TimeZone": "ÙˆŰ­ŰŻŰ© ŰČÙ…Ù†ÙŠŰ©", diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/cs.json b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/cs.json index db40a302ab..898fbfe841 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/cs.json +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/cs.json @@ -15,6 +15,7 @@ "TestEmailSubject": "TestovacĂ­ e-mail {0}", "TestEmailBody": "Test těla e-mailovĂ© zprĂĄvy zde", "SuccessfullySent": "Úspěơně odeslĂĄno", + "MailSendingFailed": "OdesĂ­lĂĄnĂ­ e-mailu se nezdaƙilo. Zkontrolujte konfiguraci e-mailu a zkuste to znovu.", "Send": "Poslat", "Menu:Emailing": "ZasĂ­lĂĄnĂ­ e-mailem", "Menu:TimeZone": "ČasovĂ© PĂĄsmo", 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 index 486208a35a..3653f69a92 100644 --- 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 @@ -15,6 +15,7 @@ "TestEmailSubject": "Test E-Mail {0}", "TestEmailBody": "Test E-Mail Nachricht hier eingeben", "SuccessfullySent": "Erfolgreich gesendet", + "MailSendingFailed": "E-Mail-Versand fehlgeschlagen. Bitte ĂŒberprĂŒfen Sie Ihre E-Mail-Konfiguration und versuchen Sie es erneut.", "Send": "Senden", "Menu:Emailing": "E-Mail", "Menu:TimeZone": "Zeitzone", diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/de.json b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/de.json index e908e08d2d..211100a71f 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/de.json +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/de.json @@ -15,6 +15,7 @@ "TestEmailSubject": "Test-E-Mail {0}", "TestEmailBody": "Testen Sie hier die E-Mail-Textnachricht", "SuccessfullySent": "Erfolgreich gesendet", + "MailSendingFailed": "E-Mail-Versand fehlgeschlagen. Bitte ĂŒberprĂŒfen Sie Ihre E-Mail-Konfiguration und versuchen Sie es erneut.", "Send": "Schicken", "Menu:Emailing": "E-Mail senden", "Menu:TimeZone": "Zeitzone", diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/el.json b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/el.json index a6a6cbf6af..29ec725ae5 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/el.json +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/el.json @@ -15,6 +15,7 @@ "TestEmailSubject": "ΔοÎșÎčΌαστÎčÎșό email {0}", "TestEmailBody": "ΔοÎșÎčΌαστÎčÎșό ÎșÎ”ÎŻÎŒÎ”ÎœÎż email ΔΎώ", "SuccessfullySent": "ÎŁÏ„ÎŹÎ»ÎžÎ·ÎșΔ ΌΔ ΔπÎčÏ„Ï…Ï‡ÎŻÎ±", + "MailSendingFailed": "Î‘Ï€ÎżÏ„Ï…Ï‡ÎŻÎ± Î±Ï€ÎżÏƒÏ„ÎżÎ»ÎźÏ‚ email. Î•Î»Î­ÎłÎŸÏ„Î” τη ÎŽÎčαΌόρφωση Ï„ÎżÏ… email σας ÎșαÎč ÎŽÎżÎșÎčÎŒÎŹÏƒÏ„Î” ÎŸÎ±ÎœÎŹ.", "Send": "Î‘Ï€ÎżÏƒÏ„ÎżÎ»Îź", "Menu:Emailing": "Î‘Ï€ÎżÏƒÏ„ÎżÎ»Îź email", "SmtpHost": "ΔÎčαÎșÎżÎŒÎčÏƒÏ„ÎźÏ‚", diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/en.json b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/en.json index 09d52cf468..7c672ee019 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/en.json +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/en.json @@ -15,6 +15,7 @@ "TestEmailSubject": "Test email {0}", "TestEmailBody": "Test email body message here", "SuccessfullySent": "Successfully sent", + "MailSendingFailed": "Mail sending failed, please check your email configuration and try again.", "Send": "Send", "Menu:Emailing": "Emailing", "Menu:TimeZone": "Time Zone", diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/es.json b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/es.json index f194b92c3c..75ed8ac019 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/es.json +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/es.json @@ -15,6 +15,7 @@ "TestEmailSubject": "Correo electrĂłnico de prueba {0}", "TestEmailBody": "Pruebe el cuerpo del mensaje de correo electrĂłnico aquĂ­", "SuccessfullySent": "Enviado exitosamente", + "MailSendingFailed": "Error al enviar el correo, por favor revise su configuraciĂłn de correo y vuelva a intentarlo.", "Send": "Enviar", "Menu:Emailing": "ConfiguraciĂłn", "Menu:TimeZone": "Zona Horaria", diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/fi.json b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/fi.json index 2d96634dd1..bedcaceb67 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/fi.json +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/fi.json @@ -15,6 +15,7 @@ "TestEmailSubject": "TestisĂ€hköposti {0}", "TestEmailBody": "Testaa sĂ€hköpostiviestiĂ€ tÀÀllĂ€", "SuccessfullySent": "LĂ€hetetty onnistuneesti", + "MailSendingFailed": "SĂ€hköpostin lĂ€hetys epĂ€onnistui. Tarkista sĂ€hköpostiasetuksesi ja yritĂ€ uudelleen.", "Send": "LĂ€hetĂ€", "Menu:Emailing": "SĂ€hköpostiviestit", "Menu:TimeZone": "Aikavyöhyke", diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/fr.json b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/fr.json index a9ed890fff..ec4af0e774 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/fr.json +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/fr.json @@ -15,6 +15,7 @@ "TestEmailSubject": "E-mail test {0}", "TestEmailBody": "Testez le corps du message ici", "SuccessfullySent": "EnvoyĂ© avec succĂšs", + "MailSendingFailed": "L'envoi de courrier a Ă©chouĂ©, veuillez vĂ©rifier votre configuration de courrier Ă©lectronique et rĂ©essayer.", "Send": "Envoyer", "Menu:Emailing": "Envoi par e-mail", "Menu:TimeZone": "Fuseau Horaire", diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/hi.json b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/hi.json index 276690e1d4..84ea888203 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/hi.json +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/hi.json @@ -15,6 +15,7 @@ "TestEmailSubject": "à€Șà€°à„€à€•à„à€·à€Ł à€ˆà€źà„‡à€Č {0}", "TestEmailBody": "à€Żà€čà€Ÿà€‚ à€ˆà€źà„‡à€Č à€Źà„‰à€Ąà„€ à€žà€‚à€Šà„‡à€¶ à€•à€Ÿ à€Șà€°à„€à€•à„à€·à€Ł à€•à€°à„‡à€‚", "SuccessfullySent": "à€žà€«à€Čà€€à€Ÿà€Șà„‚à€°à„à€”à€• à€­à„‡à€œà€Ÿ", + "MailSendingFailed": "à€źà„‡à€Č à€­à„‡à€œà€šà„‡ à€źà„‡à€‚ à€”à€żà€«à€Č, à€•à„ƒà€Șà€Żà€Ÿ à€…à€Șà€šà„€ à€ˆà€źà„‡à€Č à€”à€żà€šà„à€Żà€Ÿà€ž à€•à„€ à€œà€Ÿà€à€š à€•à€°à„‡à€‚ à€”à€° à€Șà„à€šà€ƒ à€Șà„à€°à€Żà€Ÿà€ž à€•à€°à„‡à€‚à„€", "Send": "à€­à„‡à€œà€šà€Ÿ", "Menu:Emailing": "à€ˆà€źà„‡à€Č à€žà„‡ à€­à„‡à€œà€šà€Ÿ", "Menu:TimeZone": "à€žà€źà€Ż à€•à„à€·à„‡à€€à„à€°", diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/hr.json b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/hr.json index 038d8f10b4..328bd37e74 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/hr.json +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/hr.json @@ -15,6 +15,7 @@ "TestEmailSubject": "Probna e-poĆĄta {0}", "TestEmailBody": "Testirajte tijelo poruke e-poĆĄte ovdje", "SuccessfullySent": "UspjeĆĄno poslano", + "MailSendingFailed": "Slanje e-poĆĄte nije uspjelo, provjerite konfiguraciju e-poĆĄte i pokuĆĄajte ponovo.", "Send": "Poslati", "Menu:Emailing": "Slanje e-poĆĄtom", "Menu:TimeZone": "Vremenska Zona", diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/hu.json b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/hu.json index b58a9315b2..bd1470a82b 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/hu.json +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/hu.json @@ -15,6 +15,7 @@ "TestEmailSubject": "Teszt e-mail {0}", "TestEmailBody": "Itt tesztelheti az e-mail törzsĂŒzenetĂ©t", "SuccessfullySent": "Sikeresen elkĂŒldve", + "MailSendingFailed": "Az e-mail kĂŒldĂ©se sikertelen, ellenƑrizze az e-mail konfigurĂĄciĂłjĂĄt, Ă©s prĂłbĂĄlja Ășjra.", "Send": "KĂŒld", "Menu:Emailing": "E-mailezĂ©s", "Menu:TimeZone": "IdƑzĂłna", diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/is.json b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/is.json index 96cc57b8b9..e00b26a892 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/is.json +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/is.json @@ -15,6 +15,7 @@ "TestEmailSubject": "PrĂłfunartölvupĂłstur {0}", "TestEmailBody": "PrĂłfaðu meginmĂĄl tölvupĂłsts hĂ©r", "SuccessfullySent": "TĂłkst sent", + "MailSendingFailed": "TölvupĂłstur sendist ekki. Athugaðu tölvupĂłst stillingar ĂŸĂ­nar og reyndu aftur.", "Send": "Senda", "Menu:Emailing": "Senda tölvupĂłst", "Menu:TimeZone": "TĂ­mabelti", diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/it.json b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/it.json index 4b85d89552..5d68f59a0c 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/it.json +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/it.json @@ -15,6 +15,7 @@ "TestEmailSubject": "Prova l'e-mail {0}", "TestEmailBody": "Prova il corpo del messaggio email qui", "SuccessfullySent": "Inviato con successo", + "MailSendingFailed": "Invio della posta fallito, controlla la tua configurazione email e riprova.", "Send": "Inviare", "Menu:Emailing": "Invio di e-mail", "Menu:TimeZone": "Fuso Orario", diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/nl.json b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/nl.json index 4cba0f5c21..bf8467dc9d 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/nl.json +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/nl.json @@ -15,6 +15,7 @@ "TestEmailSubject": "Test-e-mail {0}", "TestEmailBody": "Test hier het hoofdbericht van de e-mail", "SuccessfullySent": "Succesvol verzonden", + "MailSendingFailed": "E-mail verzenden mislukt. Controleer uw e-mailconfiguratie en probeer het opnieuw.", "Send": "Versturen", "Menu:Emailing": "E-mail", "Menu:TimeZone": "Tijdzone", diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/pl-PL.json b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/pl-PL.json index c1d2af54dd..5880daaf3c 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/pl-PL.json +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/pl-PL.json @@ -15,6 +15,7 @@ "TestEmailSubject": "Testowy e-mail {0}", "TestEmailBody": "Tutaj przetestuj treƛć wiadomoƛci e-mail", "SuccessfullySent": "Pomyƛlnie wysƂane", + "MailSendingFailed": "WysyƂanie e-maila nie powiodƂo się. SprawdĆș konfigurację e-maila i sprĂłbuj ponownie.", "Send": "WysƂać", "Menu:Emailing": "WysyƂanie e-maili", "Menu:TimeZone": "Strefa Czasowa", diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/pt-BR.json b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/pt-BR.json index 6ea5d05c1d..1075ef4282 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/pt-BR.json +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/pt-BR.json @@ -15,6 +15,7 @@ "TestEmailSubject": "E-mail teste {0}", "TestEmailBody": "Corpo de e-mail de teste aqui", "SuccessfullySent": "Enviado com sucesso", + "MailSendingFailed": "Falha no envio de e-mail, verifique sua configuração de e-mail e tente novamente.", "Send": "Enviar", "Menu:Emailing": "Enviando por e-mail", "Menu:TimeZone": "Fuso HorĂĄrio", diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/ro-RO.json b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/ro-RO.json index a3b10ffb4d..7e52d92a0e 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/ro-RO.json +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/ro-RO.json @@ -15,6 +15,7 @@ "TestEmailSubject": "E-mail de testare {0}", "TestEmailBody": "Testați corpul mesajului de e-mail aici", "SuccessfullySent": "Trimis cu succes", + "MailSendingFailed": "Trimiterea e-mailului a eșuat. Verificați configurația e-mailului și Ăźncercați din nou.", "Send": "Trimite", "Menu:Emailing": "Emailing", "Menu:TimeZone": "Fus Orar", diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/ru.json b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/ru.json index 2b60f7981a..bceff4b9b0 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/ru.json +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/ru.json @@ -15,6 +15,7 @@ "TestEmailSubject": "ĐąĐ”ŃŃ‚ĐŸĐČĐŸĐ” ĐżĐžŃŃŒĐŒĐŸ {0}", "TestEmailBody": "ĐŸŃ€ĐŸĐČĐ”Ń€ŃŒŃ‚Đ” тДĐșст ŃĐŸĐŸĐ±Ń‰Đ”ĐœĐžŃ ŃĐ»Đ”ĐșŃ‚Ń€ĐŸĐœĐœĐŸĐč ĐżĐŸŃ‡Ń‚Ń‹ Đ·ĐŽĐ”ŃŃŒ", "SuccessfullySent": "ĐŁŃĐżĐ”ŃˆĐœĐŸ ĐŸŃ‚ĐżŃ€Đ°ĐČĐ»Đ”ĐœĐŸ", + "MailSendingFailed": "ĐĐ” ŃƒĐŽĐ°Đ»ĐŸŃŃŒ ĐŸŃ‚ĐżŃ€Đ°ĐČоть ĐżĐžŃŃŒĐŒĐŸ. ĐŸĐŸĐ¶Đ°Đ»ŃƒĐčста, ĐżŃ€ĐŸĐČĐ”Ń€ŃŒŃ‚Đ” ĐœĐ°ŃŃ‚Ń€ĐŸĐčĐșĐž ŃĐ»Đ”ĐșŃ‚Ń€ĐŸĐœĐœĐŸĐč ĐżĐŸŃ‡Ń‚Ń‹ Đž ĐżĐŸĐČŃ‚ĐŸŃ€ĐžŃ‚Đ” ĐżĐŸĐżŃ‹Ń‚Đșу.", "Send": "ОтпраĐČĐ»ŃŃ‚ŃŒ", "Menu:Emailing": "ОтпраĐČĐșа ĐżĐŸ ŃĐ»Đ”ĐșŃ‚Ń€ĐŸĐœĐœĐŸĐč ĐżĐŸŃ‡Ń‚Đ”", "Menu:TimeZone": "Đ§Đ°ŃĐŸĐČĐŸĐč ĐżĐŸŃŃ", diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/sk.json b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/sk.json index 962f6de4e9..4facd0d356 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/sk.json +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/sk.json @@ -15,6 +15,7 @@ "TestEmailSubject": "TestovacĂ­ e-mail {0}", "TestEmailBody": "Tu otestujte telo e-mailu", "SuccessfullySent": "ÚspeĆĄne odoslanĂ©", + "MailSendingFailed": "Odoslanie emailu zlyhalo. Skontrolujte konfigurĂĄciu emailu a skĂșste to znova.", "Send": "OdoslaĆ„", "Menu:Emailing": "Posielanie emailov", "Menu:TimeZone": "ČasovĂ© PĂĄsmo", diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/sl.json b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/sl.json index 6f3faabfee..64f6e69cce 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/sl.json +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/sl.json @@ -15,6 +15,7 @@ "TestEmailSubject": "Preskusno e-poĆĄtno sporočilo {0}", "TestEmailBody": "Tukaj preizkusite telo e-poĆĄtnega sporočila", "SuccessfullySent": "UspeĆĄno poslano", + "MailSendingFailed": "PoĆĄiljanje e-poĆĄte ni uspelo, preverite konfiguracijo e-poĆĄte in poskusite znova.", "Send": "PoĆĄlji", "Menu:Emailing": "PoĆĄiljanje po e-poĆĄti", "Menu:TimeZone": "Časovni Pas", diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/sv.json b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/sv.json new file mode 100644 index 0000000000..0cb4b2aafa --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/sv.json @@ -0,0 +1,38 @@ +{ + "culture": "sv", + "texts": { + "Settings": "InstĂ€llningar", + "SavedSuccessfully": "Sparades framgĂ„ngsrikt", + "Permission:SettingManagement": "Hantering av instĂ€llningar", + "Permission:Emailing": "E-post", + "Permission:EmailingTest": "Test av e-post", + "Permission:TimeZone": "Tidszon", + "SendTestEmail": "Skicka testmejl", + "SenderEmailAddress": "E-postadress till avsĂ€ndaren", + "TargetEmailAddress": "E-postadress för mĂ„lgruppen", + "Subject": "Ämne", + "Body": "Kropp", + "TestEmailSubject": "Testa e-post {0}", + "TestEmailBody": "Testa e-postmeddelandets brödtext hĂ€r", + "SuccessfullySent": "FramgĂ„ngsrikt skickat", + "Send": "Skicka", + "Menu:Emailing": "E-post", + "Menu:TimeZone": "Tidszon", + "DisplayName:Timezone": "Tidszon", + "TimezoneHelpText": "Denna instĂ€llning anvĂ€nds för applikationsomfattande eller hyresgĂ€stbaserad.", + "SmtpHost": "VĂ€rd", + "SmtpPort": "Port", + "SmtpUserName": "AnvĂ€ndarens namn", + "SmtpPassword": "Lösenord", + "SmtpDomain": "DomĂ€n", + "SmtpEnableSsl": "Aktivera ssl", + "SmtpUseDefaultCredentials": "AnvĂ€nda standardautentiseringsuppgifter", + "DefaultFromAddress": "Standard frĂ„n adress", + "DefaultFromDisplayName": "Standard frĂ„n visningsnamn", + "Feature:SettingManagementGroup": "Hantering av instĂ€llningar", + "Feature:SettingManagementEnable": "Aktivera hantering av instĂ€llningar", + "Feature:SettingManagementEnableDescription": "Aktivera instĂ€llningshanteringssystem i applikationen.", + "Feature:AllowChangingEmailSettings": "TillĂ„t Ă€ndring av e-postinstĂ€llningar.", + "Feature:AllowChangingEmailSettingsDescription": "TillĂ„t Ă€ndring av e-postinstĂ€llningar." + } +} \ No newline at end of file diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/tr.json b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/tr.json index 2042c4ec6a..50f5fccbd2 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/tr.json +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/tr.json @@ -15,6 +15,7 @@ "TestEmailSubject": "Test email {0}", "TestEmailBody": "E-posta gövdesi mesajını burada test edin", "SuccessfullySent": "Baßarıyla gönderildi", + "MailSendingFailed": "E-posta gönderme baßarısız, lĂŒtfen e-posta yapılandırmanızı kontrol edin ve tekrar deneyin.", "Send": "Gönder", "Menu:Emailing": "Email", "Menu:TimeZone": "Zaman Dilimi", diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/vi.json b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/vi.json index d843b37714..f553ed7876 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/vi.json +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/vi.json @@ -15,6 +15,7 @@ "TestEmailSubject": "Kiểm tra email {0}", "TestEmailBody": "Kiểm tra nội dung email táșĄi đñy", "SuccessfullySent": "Đã gá»­i thĂ nh cĂŽng", + "MailSendingFailed": "Gá»­i email tháș„t báșĄi. Vui lĂČng kiểm tra cáș„u hĂŹnh email cá»§a báșĄn vĂ  thá»­ láșĄi.", "Send": "Gá»­i", "Menu:Emailing": "Gá»­i email", "Menu:TimeZone": "MĂși Giờ", diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/zh-Hans.json b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/zh-Hans.json index a01cd3bc14..13219450a6 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/zh-Hans.json +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/zh-Hans.json @@ -15,6 +15,7 @@ "TestEmailSubject": "æ”‹èŻ•é‚źä»¶ {0}", "TestEmailBody": "æ”‹èŻ•é‚źä»¶ć†…ćźč", "SuccessfullySent": "ć‘é€æˆćŠŸ", + "MailSendingFailed": "é‚źä»¶ć‘é€ć€±èŽ„ïŒŒèŻ·æŁ€æŸ„æ‚šçš„ç””ć­é‚źä»¶é…çœźćč¶é‡èŻ•ă€‚", "Send": "揑送", "Menu:Emailing": "邟件", "Menu:TimeZone": "时ćŒș", diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/zh-Hant.json b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/zh-Hant.json index fe219f36e9..958a94528d 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/zh-Hant.json +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/zh-Hant.json @@ -15,6 +15,7 @@ "TestEmailSubject": "æžŹè©Šéƒ”ä»¶ {0}", "TestEmailBody": "æžŹè©Šéƒ”ä»¶ć…§ćźč", "SuccessfullySent": "æˆćŠŸç™Œé€", + "MailSendingFailed": "éƒ”ä»¶ç™Œé€ć€±æ•—,請æȘ࿟„äœ çš„éƒ”ä»¶é…çœźäžŠé‡è©Š.", "Send": "癌送", "Menu:Emailing": "俥矱", "Menu:TimeZone": "æ™‚ć€", diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo.Abp.SettingManagement.Domain.abppkg.analyze.json b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo.Abp.SettingManagement.Domain.abppkg.analyze.json index 1b8fbc33ea..c3b545a078 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo.Abp.SettingManagement.Domain.abppkg.analyze.json +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo.Abp.SettingManagement.Domain.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Abp.SettingManagement.Domain", - "hash": "3fb2486bb7c8da0747093a314bde80a6", + "hash": "", "contents": [ { "namespace": "Volo.Abp.SettingManagement", @@ -110,6 +110,7 @@ "methods": [ { "returnType": "String", + "namespace": "Volo.Abp.SettingManagement", "name": "ToString", "summary": null, "isAsync": false, @@ -149,6 +150,212 @@ "name": "Setting", "summary": null }, + { + "baseClass": { + "name": "BasicAggregateRoot", + "namespace": "Volo.Abp.Domain.Entities", + "declaringAssemblyName": "Volo.Abp.Ddd.Domain", + "fullName": "Volo.Abp.Domain.Entities.BasicAggregateRoot" + }, + "implementingInterfaces": [ + { + "name": "IEntity", + "namespace": "Volo.Abp.Domain.Entities", + "declaringAssemblyName": "Volo.Abp.Ddd.Domain", + "fullName": "Volo.Abp.Domain.Entities.IEntity" + }, + { + "name": "IEntity", + "namespace": "Volo.Abp.Domain.Entities", + "declaringAssemblyName": "Volo.Abp.Ddd.Domain", + "fullName": "Volo.Abp.Domain.Entities.IEntity" + }, + { + "name": "IAggregateRoot", + "namespace": "Volo.Abp.Domain.Entities", + "declaringAssemblyName": "Volo.Abp.Ddd.Domain", + "fullName": "Volo.Abp.Domain.Entities.IAggregateRoot" + }, + { + "name": "IAggregateRoot", + "namespace": "Volo.Abp.Domain.Entities", + "declaringAssemblyName": "Volo.Abp.Ddd.Domain", + "fullName": "Volo.Abp.Domain.Entities.IAggregateRoot" + }, + { + "name": "IGeneratesDomainEvents", + "namespace": "Volo.Abp.Domain.Entities", + "declaringAssemblyName": "Volo.Abp.Ddd.Domain", + "fullName": "Volo.Abp.Domain.Entities.IGeneratesDomainEvents" + }, + { + "name": "IHasExtraProperties", + "namespace": "Volo.Abp.Data", + "declaringAssemblyName": "Volo.Abp.ObjectExtending", + "fullName": "Volo.Abp.Data.IHasExtraProperties" + } + ], + "methods": [ + { + "returnType": "Boolean", + "namespace": "Volo.Abp.SettingManagement", + "name": "HasSameData", + "summary": null, + "isAsync": false, + "isPublic": true, + "isPrivate": false, + "isStatic": false, + "parameters": [ + { + "type": "SettingDefinitionRecord", + "name": "otherRecord", + "isOptional": false + } + ] + }, + { + "returnType": "Void", + "namespace": "Volo.Abp.SettingManagement", + "name": "Patch", + "summary": null, + "isAsync": false, + "isPublic": true, + "isPrivate": false, + "isStatic": false, + "parameters": [ + { + "type": "SettingDefinitionRecord", + "name": "otherRecord", + "isOptional": false + } + ] + } + ], + "collectionProperties": {}, + "navigationProperties": {}, + "namespace": "Volo.Abp.SettingManagement", + "primaryKeyType": "Guid", + "properties": [ + { + "type": "System.String", + "name": "Name", + "summary": "Unique name of the setting." + }, + { + "type": "System.String", + "name": "DisplayName", + "summary": null + }, + { + "type": "System.String", + "name": "Description", + "summary": null + }, + { + "type": "System.String", + "name": "DefaultValue", + "summary": "Default value of the setting." + }, + { + "type": "System.Boolean", + "name": "IsVisibleToClients", + "summary": "Can clients see this setting and it's value.\r\n It maybe dangerous for some settings to be visible to clients (such as an email server password).\r\n Default: false." + }, + { + "type": "System.String", + "name": "Providers", + "summary": "Comma separated list of provider names." + }, + { + "type": "System.Boolean", + "name": "IsInherited", + "summary": "Is this setting inherited from parent scopes.\r\n Default: True." + }, + { + "type": "System.Boolean", + "name": "IsEncrypted", + "summary": "Is this setting stored as encrypted in the data source.\r\n Default: False." + }, + { + "type": "Volo.Abp.Data.ExtraPropertyDictionary", + "name": "ExtraProperties", + "summary": null + } + ], + "contentType": "aggregateRoot", + "name": "SettingDefinitionRecord", + "summary": null + }, + { + "namespace": "Volo.Abp.SettingManagement", + "entityAnalyzeModel": { + "namespace": "Volo.Abp.SettingManagement", + "primaryKeyType": "Guid", + "properties": [], + "contentType": "entity", + "name": "SettingDefinitionRecord", + "summary": null + }, + "implementingInterfaces": [ + { + "name": "IBasicRepository", + "namespace": "Volo.Abp.Domain.Repositories", + "declaringAssemblyName": "Volo.Abp.Ddd.Domain", + "fullName": "Volo.Abp.Domain.Repositories.IBasicRepository" + }, + { + "name": "IBasicRepository", + "namespace": "Volo.Abp.Domain.Repositories", + "declaringAssemblyName": "Volo.Abp.Ddd.Domain", + "fullName": "Volo.Abp.Domain.Repositories.IBasicRepository" + }, + { + "name": "IReadOnlyBasicRepository", + "namespace": "Volo.Abp.Domain.Repositories", + "declaringAssemblyName": "Volo.Abp.Ddd.Domain", + "fullName": "Volo.Abp.Domain.Repositories.IReadOnlyBasicRepository" + }, + { + "name": "IRepository", + "namespace": "Volo.Abp.Domain.Repositories", + "declaringAssemblyName": "Volo.Abp.Ddd.Domain", + "fullName": "Volo.Abp.Domain.Repositories.IRepository" + }, + { + "name": "IReadOnlyBasicRepository", + "namespace": "Volo.Abp.Domain.Repositories", + "declaringAssemblyName": "Volo.Abp.Ddd.Domain", + "fullName": "Volo.Abp.Domain.Repositories.IReadOnlyBasicRepository" + } + ], + "methods": [ + { + "returnType": "SettingDefinitionRecord", + "namespace": "Volo.Abp.SettingManagement", + "name": "FindByNameAsync", + "summary": null, + "isAsync": true, + "isPublic": true, + "isPrivate": false, + "isStatic": false, + "parameters": [ + { + "type": "String", + "name": "name", + "isOptional": false + }, + { + "type": "CancellationToken", + "name": "cancellationToken", + "isOptional": true + } + ] + } + ], + "contentType": "repositoryInterface", + "name": "ISettingDefinitionRecordRepository", + "summary": null + }, { "namespace": "Volo.Abp.SettingManagement", "entityAnalyzeModel": { @@ -194,6 +401,7 @@ "methods": [ { "returnType": "Setting", + "namespace": "Volo.Abp.SettingManagement", "name": "FindAsync", "summary": null, "isAsync": true, @@ -225,6 +433,7 @@ }, { "returnType": "List", + "namespace": "Volo.Abp.SettingManagement", "name": "GetListAsync", "summary": null, "isAsync": true, @@ -251,6 +460,7 @@ }, { "returnType": "List", + "namespace": "Volo.Abp.SettingManagement", "name": "GetListAsync", "summary": null, "isAsync": true, diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/DynamicSettingDefinitionStoreInMemoryCache.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/DynamicSettingDefinitionStoreInMemoryCache.cs index e682e7a085..ca46f58a65 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/DynamicSettingDefinitionStoreInMemoryCache.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/DynamicSettingDefinitionStoreInMemoryCache.cs @@ -41,6 +41,11 @@ public class DynamicSettingDefinitionStoreInMemoryCache : IDynamicSettingDefinit record.IsInherited, record.IsEncrypted); + if (!record.Providers.IsNullOrWhiteSpace()) + { + settingDefinition.Providers.AddRange(record.Providers.Split(',')); + } + foreach (var property in record.ExtraProperties) { settingDefinition.WithProperty(property.Key, property.Value); diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.EntityFrameworkCore/Volo.Abp.SettingManagement.EntityFrameworkCore.abppkg.analyze.json b/modules/setting-management/src/Volo.Abp.SettingManagement.EntityFrameworkCore/Volo.Abp.SettingManagement.EntityFrameworkCore.abppkg.analyze.json index 6289a82aab..82d123d7cf 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.EntityFrameworkCore/Volo.Abp.SettingManagement.EntityFrameworkCore.abppkg.analyze.json +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.EntityFrameworkCore/Volo.Abp.SettingManagement.EntityFrameworkCore.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Abp.SettingManagement.EntityFrameworkCore", - "hash": "05cb2df7469683b6e1c25cce3b82f5fc", + "hash": "", "contents": [ { "namespace": "Volo.Abp.SettingManagement.EntityFrameworkCore", @@ -67,15 +67,27 @@ { "namespace": "Volo.Abp.SettingManagement.EntityFrameworkCore", "connectionStringName": "AbpSettingManagement", - "databaseTables": [ + "databaseTables": [], + "replacedDbContexts": [], + "modelBuilderExtensionMethods": [ { - "entityFullName": "Volo.Abp.SettingManagement.Setting", - "contentType": "databaseTable", - "name": "AbpSettings", - "summary": null + "returnType": "Void", + "namespace": "Volo.Abp.SettingManagement.EntityFrameworkCore", + "name": "ConfigureSettingManagement", + "summary": null, + "isAsync": false, + "isPublic": true, + "isPrivate": false, + "isStatic": true, + "parameters": [ + { + "type": "ModelBuilder", + "name": "builder", + "isOptional": false + } + ] } ], - "replacedDbContexts": [], "implementingInterfaces": [ { "name": "IInfrastructure", @@ -131,6 +143,12 @@ "declaringAssemblyName": "Volo.Abp.EntityFrameworkCore", "fullName": "Volo.Abp.EntityFrameworkCore.IEfCoreDbContext" }, + { + "name": "IAbpEfCoreDbFunctionContext", + "namespace": "Volo.Abp.EntityFrameworkCore.GlobalFilters", + "declaringAssemblyName": "Volo.Abp.EntityFrameworkCore", + "fullName": "Volo.Abp.EntityFrameworkCore.GlobalFilters.IAbpEfCoreDbFunctionContext" + }, { "name": "ITransientDependency", "namespace": "Volo.Abp.DependencyInjection", diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.HttpApi.Client/Volo.Abp.SettingManagement.HttpApi.Client.abppkg.analyze.json b/modules/setting-management/src/Volo.Abp.SettingManagement.HttpApi.Client/Volo.Abp.SettingManagement.HttpApi.Client.abppkg.analyze.json index 874c264584..a65ff634f1 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.HttpApi.Client/Volo.Abp.SettingManagement.HttpApi.Client.abppkg.analyze.json +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.HttpApi.Client/Volo.Abp.SettingManagement.HttpApi.Client.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Abp.SettingManagement.HttpApi.Client", - "hash": "e808131c7d2271d8fe47b855225c6226", + "hash": "", "contents": [ { "namespace": "Volo.Abp.SettingManagement", diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.HttpApi/Volo.Abp.SettingManagement.HttpApi.abppkg.analyze.json b/modules/setting-management/src/Volo.Abp.SettingManagement.HttpApi/Volo.Abp.SettingManagement.HttpApi.abppkg.analyze.json index 11ee7889e6..c448c0450e 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.HttpApi/Volo.Abp.SettingManagement.HttpApi.abppkg.analyze.json +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.HttpApi/Volo.Abp.SettingManagement.HttpApi.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Abp.SettingManagement.HttpApi", - "hash": "c1ea0544950c8b5fb8fa33c66533554b", + "hash": "", "contents": [ { "namespace": "Volo.Abp.SettingManagement", @@ -63,6 +63,76 @@ "contentType": "abpModule", "name": "AbpSettingManagementHttpApiModule", "summary": null + }, + { + "apis": [ + { + "path": "api/setting-management/emailing", + "method": "GET", + "groupName": "EmailSettings", + "responseType": "Volo.Abp.SettingManagement.EmailSettingsDto", + "responseTypeAsJson": "{\r\n \"smtpHost\": \"string\",\r\n \"smtpPort\": 0,\r\n \"smtpUserName\": \"string\",\r\n \"smtpPassword\": \"string\",\r\n \"smtpDomain\": \"string\",\r\n \"smtpEnableSsl\": false,\r\n \"smtpUseDefaultCredentials\": false,\r\n \"defaultFromAddress\": \"string\",\r\n \"defaultFromDisplayName\": \"string\"\r\n}", + "parameterDescriptions": [] + }, + { + "path": "api/setting-management/emailing", + "method": "POST", + "groupName": "EmailSettings", + "responseType": "System.Void", + "responseTypeAsJson": "", + "parameterDescriptions": [ + { + "name": "input", + "type": "UpdateEmailSettingsDto" + } + ] + }, + { + "path": "api/setting-management/emailing/send-test-email", + "method": "POST", + "groupName": "EmailSettings", + "responseType": "System.Void", + "responseTypeAsJson": "", + "parameterDescriptions": [ + { + "name": "input", + "type": "SendTestEmailInput" + } + ] + }, + { + "path": "api/setting-management/timezone", + "method": "GET", + "groupName": "TimeZoneSettings", + "responseType": "System.String", + "responseTypeAsJson": "\"string\"", + "parameterDescriptions": [] + }, + { + "path": "api/setting-management/timezone/timezones", + "method": "GET", + "groupName": "TimeZoneSettings", + "responseType": "System.Collections.Generic.List`1[Volo.Abp.NameValue]", + "responseTypeAsJson": "[\r\n {\r\n \"name\": \"string\",\r\n \"value\": \"string\"\r\n }\r\n]", + "parameterDescriptions": [] + }, + { + "path": "api/setting-management/timezone", + "method": "POST", + "groupName": "TimeZoneSettings", + "responseType": "System.Void", + "responseTypeAsJson": "", + "parameterDescriptions": [ + { + "name": "timezone", + "type": "String" + } + ] + } + ], + "contentType": "httpApi", + "name": "Defined Http Apis", + "summary": null } ] } \ No newline at end of file diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.MongoDB/Volo.Abp.SettingManagement.MongoDB.abppkg.analyze.json b/modules/setting-management/src/Volo.Abp.SettingManagement.MongoDB/Volo.Abp.SettingManagement.MongoDB.abppkg.analyze.json index e96ca54b0e..c2d39b1a14 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.MongoDB/Volo.Abp.SettingManagement.MongoDB.abppkg.analyze.json +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.MongoDB/Volo.Abp.SettingManagement.MongoDB.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Abp.SettingManagement.MongoDB", - "hash": "3171fe44d81aa843b693ea20310d7ada", + "hash": "", "contents": [ { "namespace": "Volo.Abp.SettingManagement.MongoDB", @@ -71,7 +71,13 @@ { "entityFullName": "Volo.Abp.SettingManagement.Setting", "contentType": "databaseCollection", - "name": "AbpSettings", + "name": "Settings", + "summary": null + }, + { + "entityFullName": "Volo.Abp.SettingManagement.SettingDefinitionRecord", + "contentType": "databaseCollection", + "name": "SettingDefinitionRecords", "summary": null } ], diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Volo.Abp.SettingManagement.Web.abppkg.analyze.json b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Volo.Abp.SettingManagement.Web.abppkg.analyze.json index 1ecad9fea9..79035880e2 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Volo.Abp.SettingManagement.Web.abppkg.analyze.json +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Volo.Abp.SettingManagement.Web.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Abp.SettingManagement.Web", - "hash": "535a8e561ef369beac7b706d17493489", + "hash": "", "contents": [ { "namespace": "Volo.Abp.SettingManagement.Web", @@ -73,6 +73,18 @@ "contentType": "abpModule", "name": "AbpSettingManagementWebModule", "summary": null + }, + { + "namespace": "Volo.Abp.SettingManagement.Web.Pages.SettingManagement", + "contentType": "webPage", + "name": "IndexModel", + "summary": null + }, + { + "namespace": "Volo.Abp.SettingManagement.Web.Pages.SettingManagement.Components.EmailSettingGroup", + "contentType": "webPage", + "name": "SendTestEmailModal", + "summary": null } ] } \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo.Abp.TenantManagement.Application.Contracts.abppkg.analyze.json b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo.Abp.TenantManagement.Application.Contracts.abppkg.analyze.json index b04a748fb6..23e71f33a6 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo.Abp.TenantManagement.Application.Contracts.abppkg.analyze.json +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo.Abp.TenantManagement.Application.Contracts.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Abp.TenantManagement.Application.Contracts", - "hash": "e1f3dac6048d2ca6284ea045f63842a6", + "hash": "", "contents": [ { "namespace": "Volo.Abp.TenantManagement", diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application/Volo.Abp.TenantManagement.Application.abppkg.analyze.json b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application/Volo.Abp.TenantManagement.Application.abppkg.analyze.json index df4860923c..00ccf9c37a 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application/Volo.Abp.TenantManagement.Application.abppkg.analyze.json +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application/Volo.Abp.TenantManagement.Application.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Abp.TenantManagement.Application", - "hash": "688edf873e866db07c39a080b1d040f4", + "hash": "", "contents": [ { "namespace": "Volo.Abp.TenantManagement", @@ -178,6 +178,7 @@ "methods": [ { "returnType": "TenantDto", + "namespace": "Volo.Abp.TenantManagement", "name": "GetAsync", "summary": null, "isAsync": true, @@ -194,6 +195,7 @@ }, { "returnType": "PagedResultDto", + "namespace": "Volo.Abp.TenantManagement", "name": "GetListAsync", "summary": null, "isAsync": true, @@ -210,6 +212,7 @@ }, { "returnType": "TenantDto", + "namespace": "Volo.Abp.TenantManagement", "name": "CreateAsync", "summary": null, "isAsync": true, @@ -226,6 +229,7 @@ }, { "returnType": "TenantDto", + "namespace": "Volo.Abp.TenantManagement", "name": "UpdateAsync", "summary": null, "isAsync": true, @@ -247,6 +251,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.TenantManagement", "name": "DeleteAsync", "summary": null, "isAsync": true, @@ -263,6 +268,7 @@ }, { "returnType": "String", + "namespace": "Volo.Abp.TenantManagement", "name": "GetDefaultConnectionStringAsync", "summary": null, "isAsync": true, @@ -279,6 +285,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.TenantManagement", "name": "UpdateDefaultConnectionStringAsync", "summary": null, "isAsync": true, @@ -300,6 +307,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.TenantManagement", "name": "DeleteDefaultConnectionStringAsync", "summary": null, "isAsync": true, diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor.Server/Volo.Abp.TenantManagement.Blazor.Server.abppkg.analyze.json b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor.Server/Volo.Abp.TenantManagement.Blazor.Server.abppkg.analyze.json index fe0a801b11..f51c1b20fd 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor.Server/Volo.Abp.TenantManagement.Blazor.Server.abppkg.analyze.json +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor.Server/Volo.Abp.TenantManagement.Blazor.Server.abppkg.analyze.json @@ -1,11 +1,20 @@ { "name": "Volo.Abp.TenantManagement.Blazor.Server", - "hash": "3cee9d89359b00bd39be9e09f6036218", + "hash": "", "contents": [ { "namespace": "Volo.Abp.TenantManagement.Blazor.Server", "dependsOnModules": [ - + { + "declaringAssemblyName": "Volo.Abp.TenantManagement.Blazor", + "namespace": "Volo.Abp.TenantManagement.Blazor", + "name": "AbpTenantManagementBlazorModule" + }, + { + "declaringAssemblyName": "Volo.Abp.FeatureManagement.Blazor.Server", + "namespace": "Volo.Abp.FeatureManagement.Blazor.Server", + "name": "AbpFeatureManagementBlazorServerModule" + } ], "implementingInterfaces": [ { 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 ee1f339d5d..cea9267f00 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 @@ -87,7 +87,7 @@ public partial class TenantManagement Clicked = async (data) => { var tenant = data.As(); - await FeatureManagementModal.OpenAsync(FeatureProviderName, tenant.Id.ToString()); + await FeatureManagementModal.OpenAsync(FeatureProviderName, tenant.Id.ToString(), tenant.Name); } }, new EntityAction diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Volo.Abp.TenantManagement.Blazor.abppkg.analyze.json b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Volo.Abp.TenantManagement.Blazor.abppkg.analyze.json new file mode 100644 index 0000000000..908261e0c3 --- /dev/null +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Volo.Abp.TenantManagement.Blazor.abppkg.analyze.json @@ -0,0 +1,79 @@ +{ + "name": "Volo.Abp.TenantManagement.Blazor", + "hash": "", + "contents": [ + { + "namespace": "Volo.Abp.TenantManagement.Blazor", + "dependsOnModules": [ + { + "declaringAssemblyName": "Volo.Abp.AutoMapper", + "namespace": "Volo.Abp.AutoMapper", + "name": "AbpAutoMapperModule" + }, + { + "declaringAssemblyName": "Volo.Abp.TenantManagement.Application.Contracts", + "namespace": "Volo.Abp.TenantManagement", + "name": "AbpTenantManagementApplicationContractsModule" + }, + { + "declaringAssemblyName": "Volo.Abp.FeatureManagement.Blazor", + "namespace": "Volo.Abp.FeatureManagement.Blazor", + "name": "AbpFeatureManagementBlazorModule" + } + ], + "implementingInterfaces": [ + { + "name": "IAbpModule", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IAbpModule" + }, + { + "name": "IOnPreApplicationInitialization", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IOnPreApplicationInitialization" + }, + { + "name": "IOnApplicationInitialization", + "namespace": "Volo.Abp", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.IOnApplicationInitialization" + }, + { + "name": "IOnPostApplicationInitialization", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IOnPostApplicationInitialization" + }, + { + "name": "IOnApplicationShutdown", + "namespace": "Volo.Abp", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.IOnApplicationShutdown" + }, + { + "name": "IPreConfigureServices", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IPreConfigureServices" + }, + { + "name": "IPostConfigureServices", + "namespace": "Volo.Abp.Modularity", + "declaringAssemblyName": "Volo.Abp.Core", + "fullName": "Volo.Abp.Modularity.IPostConfigureServices" + } + ], + "contentType": "abpModule", + "name": "AbpTenantManagementBlazorModule", + "summary": null + }, + { + "namespace": "Volo.Abp.TenantManagement.Blazor.Pages.TenantManagement", + "contentType": "webPage", + "name": "TenantManagement", + "summary": null + } + ] +} \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo.Abp.TenantManagement.Domain.Shared.abppkg.analyze.json b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo.Abp.TenantManagement.Domain.Shared.abppkg.analyze.json index bc7b75e6db..1492d48c29 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo.Abp.TenantManagement.Domain.Shared.abppkg.analyze.json +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo.Abp.TenantManagement.Domain.Shared.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Abp.TenantManagement.Domain.Shared", - "hash": "3f7377330e647dfcc3894752e2f60b77", + "hash": "", "contents": [ { "namespace": "Volo.Abp.TenantManagement", diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/sv.json b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/sv.json new file mode 100644 index 0000000000..f112b05001 --- /dev/null +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/sv.json @@ -0,0 +1,23 @@ +{ + "culture": "sv", + "texts": { + "Volo.Abp.TenantManagement:DuplicateTenantName": "HyresgĂ€stens namn finns redan: {Namn}", + "Menu:TenantManagement": "Förvaltning av hyresgĂ€ster", + "Tenants": "HyresgĂ€ster", + "NewTenant": "Ny hyresgĂ€st", + "TenantName": "HyresgĂ€stens namn", + "DisplayName:TenantName": "HyresgĂ€stens namn", + "TenantDeletionConfirmationMessage": "HyresgĂ€st '{0}' kommer att raderas. Kan du bekrĂ€fta det?", + "ConnectionStrings": "AnslutningsstrĂ€ngar", + "DisplayName:DefaultConnectionString": "Standard anslutningsstrĂ€ng", + "DisplayName:UseSharedDatabase": "AnvĂ€nd den delade databasen", + "Permission:TenantManagement": "Förvaltning av hyresgĂ€ster", + "Permission:Create": "Skapa", + "Permission:Edit": "Redigera", + "Permission:Delete": "Radera", + "Permission:ManageConnectionStrings": "Hantera anslutningsstrĂ€ngar", + "Permission:ManageFeatures": "Hantera funktioner", + "DisplayName:AdminEmailAddress": "Admin E-postadress", + "DisplayName:AdminPassword": "Lösenord för administratör" + } +} \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/Volo.Abp.TenantManagement.Domain.abppkg.analyze.json b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/Volo.Abp.TenantManagement.Domain.abppkg.analyze.json index 08b8c1320d..aeb603a65d 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/Volo.Abp.TenantManagement.Domain.abppkg.analyze.json +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/Volo.Abp.TenantManagement.Domain.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Abp.TenantManagement.Domain", - "hash": "3cee9d89359b00bd39be9e09f6036218", + "hash": "", "contents": [ { "namespace": "Volo.Abp.TenantManagement", @@ -217,11 +217,18 @@ "namespace": "Volo.Abp", "declaringAssemblyName": "Volo.Abp.Core", "fullName": "Volo.Abp.ISoftDelete" + }, + { + "name": "IHasEntityVersion", + "namespace": "Volo.Abp.Auditing", + "declaringAssemblyName": "Volo.Abp.Auditing.Contracts", + "fullName": "Volo.Abp.Auditing.IHasEntityVersion" } ], "methods": [ { "returnType": "String", + "namespace": "Volo.Abp.TenantManagement", "name": "FindDefaultConnectionString", "summary": null, "isAsync": false, @@ -232,6 +239,7 @@ }, { "returnType": "String", + "namespace": "Volo.Abp.TenantManagement", "name": "FindConnectionString", "summary": null, "isAsync": false, @@ -248,6 +256,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.TenantManagement", "name": "SetDefaultConnectionString", "summary": null, "isAsync": false, @@ -264,6 +273,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.TenantManagement", "name": "SetConnectionString", "summary": null, "isAsync": false, @@ -285,6 +295,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.TenantManagement", "name": "RemoveDefaultConnectionString", "summary": null, "isAsync": false, @@ -295,6 +306,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.TenantManagement", "name": "RemoveConnectionString", "summary": null, "isAsync": false, @@ -327,6 +339,16 @@ "name": "Name", "summary": null }, + { + "type": "System.String", + "name": "NormalizedName", + "summary": null + }, + { + "type": "System.Int32", + "name": "EntityVersion", + "summary": null + }, { "type": "System.Collections.Generic.List`1[Volo.Abp.TenantManagement.TenantConnectionString]", "name": "ConnectionStrings", @@ -348,6 +370,7 @@ "methods": [ { "returnType": "Tenant", + "namespace": "Volo.Abp.TenantManagement", "name": "CreateAsync", "summary": null, "isAsync": true, @@ -364,6 +387,7 @@ }, { "returnType": "Void", + "namespace": "Volo.Abp.TenantManagement", "name": "ChangeNameAsync", "summary": null, "isAsync": true, @@ -453,6 +477,7 @@ "methods": [ { "returnType": "Tenant", + "namespace": "Volo.Abp.TenantManagement", "name": "FindByNameAsync", "summary": null, "isAsync": true, @@ -462,7 +487,7 @@ "parameters": [ { "type": "String", - "name": "name", + "name": "normalizedName", "isOptional": false }, { @@ -479,6 +504,7 @@ }, { "returnType": "Tenant", + "namespace": "Volo.Abp.TenantManagement", "name": "FindByName", "summary": null, "isAsync": false, @@ -488,7 +514,7 @@ "parameters": [ { "type": "String", - "name": "name", + "name": "normalizedName", "isOptional": false }, { @@ -500,6 +526,7 @@ }, { "returnType": "Tenant", + "namespace": "Volo.Abp.TenantManagement", "name": "FindById", "summary": null, "isAsync": false, @@ -521,6 +548,7 @@ }, { "returnType": "List", + "namespace": "Volo.Abp.TenantManagement", "name": "GetListAsync", "summary": null, "isAsync": true, @@ -562,6 +590,7 @@ }, { "returnType": "Int64", + "namespace": "Volo.Abp.TenantManagement", "name": "GetCountAsync", "summary": null, "isAsync": true, diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.EntityFrameworkCore/Volo.Abp.TenantManagement.EntityFrameworkCore.abppkg.analyze.json b/modules/tenant-management/src/Volo.Abp.TenantManagement.EntityFrameworkCore/Volo.Abp.TenantManagement.EntityFrameworkCore.abppkg.analyze.json index 45f69efbd7..9fa4137df7 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.EntityFrameworkCore/Volo.Abp.TenantManagement.EntityFrameworkCore.abppkg.analyze.json +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.EntityFrameworkCore/Volo.Abp.TenantManagement.EntityFrameworkCore.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Abp.TenantManagement.EntityFrameworkCore", - "hash": "eb61591475ebf7d3ac246f0c25e300ce", + "hash": "", "contents": [ { "namespace": "Volo.Abp.TenantManagement.EntityFrameworkCore", @@ -67,21 +67,27 @@ { "namespace": "Volo.Abp.TenantManagement.EntityFrameworkCore", "connectionStringName": "AbpTenantManagement", - "databaseTables": [ - { - "entityFullName": "Volo.Abp.TenantManagement.Tenant", - "contentType": "databaseTable", - "name": "AbpTenants", - "summary": null - }, + "databaseTables": [], + "replacedDbContexts": [], + "modelBuilderExtensionMethods": [ { - "entityFullName": "Volo.Abp.TenantManagement.TenantConnectionString", - "contentType": "databaseTable", - "name": "AbpTenantConnectionStrings", - "summary": null + "returnType": "Void", + "namespace": "Volo.Abp.TenantManagement.EntityFrameworkCore", + "name": "ConfigureTenantManagement", + "summary": null, + "isAsync": false, + "isPublic": true, + "isPrivate": false, + "isStatic": true, + "parameters": [ + { + "type": "ModelBuilder", + "name": "builder", + "isOptional": false + } + ] } ], - "replacedDbContexts": [], "implementingInterfaces": [ { "name": "IInfrastructure", @@ -137,6 +143,12 @@ "declaringAssemblyName": "Volo.Abp.EntityFrameworkCore", "fullName": "Volo.Abp.EntityFrameworkCore.IEfCoreDbContext" }, + { + "name": "IAbpEfCoreDbFunctionContext", + "namespace": "Volo.Abp.EntityFrameworkCore.GlobalFilters", + "declaringAssemblyName": "Volo.Abp.EntityFrameworkCore", + "fullName": "Volo.Abp.EntityFrameworkCore.GlobalFilters.IAbpEfCoreDbFunctionContext" + }, { "name": "ITransientDependency", "namespace": "Volo.Abp.DependencyInjection", diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.HttpApi.Client/Volo.Abp.TenantManagement.HttpApi.Client.abppkg.analyze.json b/modules/tenant-management/src/Volo.Abp.TenantManagement.HttpApi.Client/Volo.Abp.TenantManagement.HttpApi.Client.abppkg.analyze.json index 99ab6efc48..cecbad39d3 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.HttpApi.Client/Volo.Abp.TenantManagement.HttpApi.Client.abppkg.analyze.json +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.HttpApi.Client/Volo.Abp.TenantManagement.HttpApi.Client.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Abp.TenantManagement.HttpApi.Client", - "hash": "480c1662d374db4e0c6a8cb9de911f2b", + "hash": "", "contents": [ { "namespace": "Volo.Abp.TenantManagement", diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.HttpApi/Volo.Abp.TenantManagement.HttpApi.abppkg.analyze.json b/modules/tenant-management/src/Volo.Abp.TenantManagement.HttpApi/Volo.Abp.TenantManagement.HttpApi.abppkg.analyze.json index dff20d2597..43cb2a091f 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.HttpApi/Volo.Abp.TenantManagement.HttpApi.abppkg.analyze.json +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.HttpApi/Volo.Abp.TenantManagement.HttpApi.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Abp.TenantManagement.HttpApi", - "hash": "ac5f94dc37adf0b83aaf38cb220ee0f1", + "hash": "", "contents": [ { "namespace": "Volo.Abp.TenantManagement", @@ -68,6 +68,137 @@ "contentType": "abpModule", "name": "AbpTenantManagementHttpApiModule", "summary": null + }, + { + "apis": [ + { + "path": "api/multi-tenancy/tenants/{id}", + "method": "GET", + "groupName": "Tenant", + "responseType": "Volo.Abp.TenantManagement.TenantDto", + "responseTypeAsJson": "", + "parameterDescriptions": [ + { + "name": "id", + "type": "Guid" + } + ] + }, + { + "path": "api/multi-tenancy/tenants", + "method": "GET", + "groupName": "Tenant", + "responseType": "Volo.Abp.Application.Dtos.PagedResultDto`1[Volo.Abp.TenantManagement.TenantDto]", + "responseTypeAsJson": "", + "parameterDescriptions": [ + { + "name": "Filter", + "type": "String" + }, + { + "name": "Sorting", + "type": "String" + }, + { + "name": "SkipCount", + "type": "Int32" + }, + { + "name": "MaxResultCount", + "type": "Int32" + } + ] + }, + { + "path": "api/multi-tenancy/tenants", + "method": "POST", + "groupName": "Tenant", + "responseType": "Volo.Abp.TenantManagement.TenantDto", + "responseTypeAsJson": "", + "parameterDescriptions": [ + { + "name": "input", + "type": "TenantCreateDto" + } + ] + }, + { + "path": "api/multi-tenancy/tenants/{id}", + "method": "PUT", + "groupName": "Tenant", + "responseType": "Volo.Abp.TenantManagement.TenantDto", + "responseTypeAsJson": "", + "parameterDescriptions": [ + { + "name": "id", + "type": "Guid" + }, + { + "name": "input", + "type": "TenantUpdateDto" + } + ] + }, + { + "path": "api/multi-tenancy/tenants/{id}", + "method": "DELETE", + "groupName": "Tenant", + "responseType": "System.Void", + "responseTypeAsJson": "", + "parameterDescriptions": [ + { + "name": "id", + "type": "Guid" + } + ] + }, + { + "path": "api/multi-tenancy/tenants/{id}/default-connection-string", + "method": "GET", + "groupName": "Tenant", + "responseType": "System.String", + "responseTypeAsJson": "\"string\"", + "parameterDescriptions": [ + { + "name": "id", + "type": "Guid" + } + ] + }, + { + "path": "api/multi-tenancy/tenants/{id}/default-connection-string", + "method": "PUT", + "groupName": "Tenant", + "responseType": "System.Void", + "responseTypeAsJson": "", + "parameterDescriptions": [ + { + "name": "id", + "type": "Guid" + }, + { + "name": "defaultConnectionString", + "type": "String" + } + ] + }, + { + "path": "api/multi-tenancy/tenants/{id}/default-connection-string", + "method": "DELETE", + "groupName": "Tenant", + "responseType": "System.Void", + "responseTypeAsJson": "", + "parameterDescriptions": [ + { + "name": "id", + "type": "Guid" + } + ] + } + ], + "contentType": "httpApi", + "name": "Defined Http Apis", + "summary": null } ] } \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.MongoDB/Volo.Abp.TenantManagement.MongoDB.abppkg.analyze.json b/modules/tenant-management/src/Volo.Abp.TenantManagement.MongoDB/Volo.Abp.TenantManagement.MongoDB.abppkg.analyze.json index c64187c410..8568728f30 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.MongoDB/Volo.Abp.TenantManagement.MongoDB.abppkg.analyze.json +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.MongoDB/Volo.Abp.TenantManagement.MongoDB.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Abp.TenantManagement.MongoDB", - "hash": "c1aa3fe8ddd85fb93f1c2d76eddb273a", + "hash": "", "contents": [ { "namespace": "Volo.Abp.TenantManagement.MongoDB", @@ -71,7 +71,7 @@ { "entityFullName": "Volo.Abp.TenantManagement.Tenant", "contentType": "databaseCollection", - "name": "AbpTenants", + "name": "Tenants", "summary": null } ], diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/Index.js b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/Index.js index f202494dd4..b573ada9d7 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/Index.js +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/Index.js @@ -38,6 +38,7 @@ _featuresModal.open({ providerName: 'T', providerKey: data.record.id, + providerKeyDisplayName: data.record.name, }); }, }, diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Volo.Abp.TenantManagement.Web.abppkg.analyze.json b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Volo.Abp.TenantManagement.Web.abppkg.analyze.json index 533ac19881..d605081e6d 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Volo.Abp.TenantManagement.Web.abppkg.analyze.json +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Volo.Abp.TenantManagement.Web.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Abp.TenantManagement.Web", - "hash": "2870a361082a3b19907bdf95db3a74a8", + "hash": "", "contents": [ { "namespace": "Volo.Abp.TenantManagement.Web", @@ -73,6 +73,24 @@ "contentType": "abpModule", "name": "AbpTenantManagementWebModule", "summary": null + }, + { + "namespace": "Volo.Abp.TenantManagement.Web.Pages.TenantManagement.Tenants", + "contentType": "webPage", + "name": "CreateModalModel", + "summary": null + }, + { + "namespace": "Volo.Abp.TenantManagement.Web.Pages.TenantManagement.Tenants", + "contentType": "webPage", + "name": "EditModalModel", + "summary": null + }, + { + "namespace": "Volo.Abp.TenantManagement.Web.Pages.TenantManagement.Tenants", + "contentType": "webPage", + "name": "IndexModel", + "summary": null } ] } \ No newline at end of file diff --git a/modules/users/src/Volo.Abp.Users.Domain.Shared/Volo.Abp.Users.Domain.Shared.abppkg.analyze.json b/modules/users/src/Volo.Abp.Users.Domain.Shared/Volo.Abp.Users.Domain.Shared.abppkg.analyze.json index c01961d614..f001d30c53 100644 --- a/modules/users/src/Volo.Abp.Users.Domain.Shared/Volo.Abp.Users.Domain.Shared.abppkg.analyze.json +++ b/modules/users/src/Volo.Abp.Users.Domain.Shared/Volo.Abp.Users.Domain.Shared.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Abp.Users.Domain.Shared", - "hash": "f13b103d9a1de0a275ce797073c6311a", + "hash": "", "contents": [ { "namespace": "Volo.Abp.Users", diff --git a/modules/users/src/Volo.Abp.Users.Domain/Volo.Abp.Users.Domain.abppkg.analyze.json b/modules/users/src/Volo.Abp.Users.Domain/Volo.Abp.Users.Domain.abppkg.analyze.json index 9f37a4213d..d836422562 100644 --- a/modules/users/src/Volo.Abp.Users.Domain/Volo.Abp.Users.Domain.abppkg.analyze.json +++ b/modules/users/src/Volo.Abp.Users.Domain/Volo.Abp.Users.Domain.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Abp.Users.Domain", - "hash": "72e2b3b29257e18485fa49e93d4cfa67", + "hash": "", "contents": [ { "namespace": "Volo.Abp.Users", diff --git a/modules/users/src/Volo.Abp.Users.EntityFrameworkCore/Volo.Abp.Users.EntityFrameworkCore.abppkg.analyze.json b/modules/users/src/Volo.Abp.Users.EntityFrameworkCore/Volo.Abp.Users.EntityFrameworkCore.abppkg.analyze.json index bfd574aa77..d6daa7b3e7 100644 --- a/modules/users/src/Volo.Abp.Users.EntityFrameworkCore/Volo.Abp.Users.EntityFrameworkCore.abppkg.analyze.json +++ b/modules/users/src/Volo.Abp.Users.EntityFrameworkCore/Volo.Abp.Users.EntityFrameworkCore.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Abp.Users.EntityFrameworkCore", - "hash": "65424b5b14baadc11902735eda05d600", + "hash": "", "contents": [ { "namespace": "Volo.Abp.Users.EntityFrameworkCore", diff --git a/modules/users/src/Volo.Abp.Users.MongoDB/Volo.Abp.Users.MongoDB.abppkg.analyze.json b/modules/users/src/Volo.Abp.Users.MongoDB/Volo.Abp.Users.MongoDB.abppkg.analyze.json index 0eb90d3bbc..79dd021405 100644 --- a/modules/users/src/Volo.Abp.Users.MongoDB/Volo.Abp.Users.MongoDB.abppkg.analyze.json +++ b/modules/users/src/Volo.Abp.Users.MongoDB/Volo.Abp.Users.MongoDB.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Abp.Users.MongoDB", - "hash": "9c292e59ebd9d93e0caa335c86132208", + "hash": "", "contents": [ { "namespace": "Volo.Abp.Users.MongoDB", diff --git a/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/package.json b/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/package.json index c5c2e942e4..1579c94398 100644 --- a/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/package.json +++ b/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/package.json @@ -3,7 +3,7 @@ "version": "1.0.0", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "~8.3.0-rc.1", - "@abp/virtual-file-explorer": "~8.3.0-rc.1" + "@abp/aspnetcore.mvc.ui.theme.basic": "~8.3.0", + "@abp/virtual-file-explorer": "~8.3.0" } } diff --git a/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/yarn.lock b/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/yarn.lock index 74e03fc6ac..4d83a17c81 100644 --- a/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/yarn.lock +++ b/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/yarn.lock @@ -2,221 +2,221 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-8.3.0-rc.1.tgz#7254b66019b99ac8a29385c1bb2c9c658a167bc7" - integrity sha512-uMgO1VQgDOW9tMq9gl6idsBZZcL/voeMp0wkBTRORQHg0E+SyA8z0yQrg5S8hU/7zRwoZPm3K9R/Peu71jNTgQ== - dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~8.3.0-rc.1" - -"@abp/aspnetcore.mvc.ui.theme.shared@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-8.3.0-rc.1.tgz#cec5ca6c5a5f61a361425b9d55711beb0db4eb81" - integrity sha512-qLAzDwiQvRB8xDs6bkeZ4YLMUuTb6Dz/GmWT61dSMUAhRCTPqPi6aWnt9fiM99HbkP7APLPb7d+o5ho6FoktNQ== - dependencies: - "@abp/aspnetcore.mvc.ui" "~8.3.0-rc.1" - "@abp/bootstrap" "~8.3.0-rc.1" - "@abp/bootstrap-datepicker" "~8.3.0-rc.1" - "@abp/bootstrap-daterangepicker" "~8.3.0-rc.1" - "@abp/datatables.net-bs5" "~8.3.0-rc.1" - "@abp/font-awesome" "~8.3.0-rc.1" - "@abp/jquery-form" "~8.3.0-rc.1" - "@abp/jquery-validation-unobtrusive" "~8.3.0-rc.1" - "@abp/lodash" "~8.3.0-rc.1" - "@abp/luxon" "~8.3.0-rc.1" - "@abp/malihu-custom-scrollbar-plugin" "~8.3.0-rc.1" - "@abp/moment" "~8.3.0-rc.1" - "@abp/select2" "~8.3.0-rc.1" - "@abp/sweetalert2" "~8.3.0-rc.1" - "@abp/timeago" "~8.3.0-rc.1" - "@abp/toastr" "~8.3.0-rc.1" - -"@abp/aspnetcore.mvc.ui@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-8.3.0-rc.1.tgz#7329e4878e64277dfed88eef5e9d1715d1af925f" - integrity sha512-NPWrtJ+Il+SI0oPQ5gc1Lc9vfPZvHbe0d/5y5qGIdwKY1F5txIyRGesc0najOLIUe7Z66AInyfNuNeoaFNR0fg== +"@abp/aspnetcore.mvc.ui.theme.basic@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-8.3.0.tgz#a2d17eb5da2c3abfad4bcc842cfcda0e58a130a4" + integrity sha512-T2dg7WlvNSrwTCfy5wk4gqiJ/15kIjMGM4wLXIJcMYn60yGY/YeX6Q4A3R/qJzfl4JdgW5rt3GpdKv86y/ADXg== + dependencies: + "@abp/aspnetcore.mvc.ui.theme.shared" "~8.3.0" + +"@abp/aspnetcore.mvc.ui.theme.shared@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-8.3.0.tgz#5d6bb5181a62770e9cb967980b77e75c115c5ed7" + integrity sha512-o/0eh8jLS+YJiseTKzzioUz0vNnMFzyoz+mkyA4PlO1gqw2JFhzPhTBZ3cuyV9QlxUfEA8dWAkqAUX6vqiHwkw== + dependencies: + "@abp/aspnetcore.mvc.ui" "~8.3.0" + "@abp/bootstrap" "~8.3.0" + "@abp/bootstrap-datepicker" "~8.3.0" + "@abp/bootstrap-daterangepicker" "~8.3.0" + "@abp/datatables.net-bs5" "~8.3.0" + "@abp/font-awesome" "~8.3.0" + "@abp/jquery-form" "~8.3.0" + "@abp/jquery-validation-unobtrusive" "~8.3.0" + "@abp/lodash" "~8.3.0" + "@abp/luxon" "~8.3.0" + "@abp/malihu-custom-scrollbar-plugin" "~8.3.0" + "@abp/moment" "~8.3.0" + "@abp/select2" "~8.3.0" + "@abp/sweetalert2" "~8.3.0" + "@abp/timeago" "~8.3.0" + "@abp/toastr" "~8.3.0" + +"@abp/aspnetcore.mvc.ui@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-8.3.0.tgz#d7ba0539bfcc6661a347dea7f952489010b3e816" + integrity sha512-OxgZhLKiXGFYYpNJ5O/IbhinsniiBPv9586e+1Soar0GckCMIIegJxnJb1Bo1O75blrcK2cIU6LqjRT1FXt2Lw== dependencies: ansi-colors "^4.1.3" -"@abp/bootstrap-datepicker@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-8.3.0-rc.1.tgz#d3bcb5f0063df631ad45c7f822195fc4e5c5b4e2" - integrity sha512-oqbwh9dz8XNfh+eZou8GvcEUYA1J0qr3ABA1r72DJZ/nzfLQX7pUO8NkkaDLpVwrly64rfOlxV4LT7g5muoAsw== +"@abp/bootstrap-datepicker@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-8.3.0.tgz#8c1bf9efec37b671d8f28b8b1e89c1ac66684267" + integrity sha512-KCwMtm7x+cnKPeNMzhjDJUce0stwu4e57ibmvA6sMf1tmj+yB256O4E2hIDDohiT3vP/zV8HVHX6uATlcmGC9w== dependencies: bootstrap-datepicker "^1.10.0" -"@abp/bootstrap-daterangepicker@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-8.3.0-rc.1.tgz#33958a1806a070db4fb01eb40a0897bfd16cf1f5" - integrity sha512-egtnxhRMCu56RV2bIRBLLTly2Y4W/2jwl9el+9Stjc8IN91j2UL5E4t5qn3zI3vXvVX4w5vP+TthQj0grFK0/Q== +"@abp/bootstrap-daterangepicker@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-8.3.0.tgz#2b8ed978333502677916f88cbb3e1d1b1c8a3a17" + integrity sha512-uQSfuCQogl4BujdqvtdAoSE+z32ci8FT5+i3gLfpqbgTaxvY/Kv5NxAUH5/1sjnuAE7SMWO+eVvI3V0pXgQohg== dependencies: bootstrap-daterangepicker "^3.1.0" -"@abp/bootstrap@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-8.3.0-rc.1.tgz#3ca994e4c003d056024dcd533221461cccd14f2a" - integrity sha512-xrs0JOYFEPzi3V6s9d3SCj0CxY06bBmFUK5aETgKUiXBXa4vU2YoNbnrCtDUvV+mn517FRuA/j3RaFkTWYg48g== +"@abp/bootstrap@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-8.3.0.tgz#96d6ea7e6ac30f6e34e495a4224f56f7b2a1a7a3" + integrity sha512-5AmdTtakmWhZmHrb7ibvvf+KwF9OGadpAe7Kv9mNEE02K2qkp7Xw4r5o/bgVl7YfLC1FA6GZZXrV2s2t0gjHtg== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" bootstrap "^5.3.3" -"@abp/clipboard@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-8.3.0-rc.1.tgz#65c6cd6672fc248097659908edd4a9fe92664475" - integrity sha512-CVyO/8BK2WnegwrEvBJCNcbkI5l31U/pZBn7DBUGpiawlLiyYZOtGFUgu4sIUTEfyaRdLiCIPd0eMzDPKMVTgA== +"@abp/clipboard@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-8.3.0.tgz#1b171e533f768cf42c8fc0c9c67fac1c636fee8c" + integrity sha512-T0O4OaMxLLYztAxyvEc3onEOpGHB/C8/jDcvJwd7mgpLoi9zXVfHwpnzkx/egfNJMzp49STD6Jc+jACi8Uq+CQ== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" clipboard "^2.0.11" -"@abp/core@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-8.3.0-rc.1.tgz#771c7ecd27319201a8236f0bc6b5601188059325" - integrity sha512-IB8Baa3LIv3XYja6iBw6VSnITGcRseGyY8wBNEXRiB+ni21Bv//NMyohdOot6G+HlnHlrB7kFeCX+gWu+LuYkg== +"@abp/core@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-8.3.0.tgz#3a68f5a9549efcc3e13500e301f2576751b51445" + integrity sha512-zrxnZi4qij/Y4AZWaXuPqs3Dd7gBtU/onX7FkYxLgQDxYBfx+84QAnPRNRFKMWaD/wKbTUB0wA66U3t2aiQX9Q== dependencies: - "@abp/utils" "~8.3.0-rc.1" + "@abp/utils" "~8.3.0" -"@abp/datatables.net-bs5@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-8.3.0-rc.1.tgz#b53dc353f485952439ea10035df0851d520efe96" - integrity sha512-89wpkG6u1YBR98OmuEbvs4VdR5n8L4n3Z8GiHwuKr2FpEOx7cAXYKsx/8ifmICMLPiMIvFrtOEBrrv5ZKANsAA== +"@abp/datatables.net-bs5@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-8.3.0.tgz#21822ae4912a561afe9112925185aece03fcd0eb" + integrity sha512-GOGYSSHp3iPUDFRX2Y3C0wkiCOJDuYuK/zUSzQLNpOvBMZO+I/oWBcZM+qkVowIzsoRlAGV9+CVV2B/B05qidA== dependencies: - "@abp/datatables.net" "~8.3.0-rc.1" + "@abp/datatables.net" "~8.3.0" datatables.net-bs5 "^2.0.8" -"@abp/datatables.net@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-8.3.0-rc.1.tgz#bb70608994c4a52bd15331f76af718353c843f94" - integrity sha512-G42D6W0Xb8NIQxJWGpcxLOjbZ4CHtrm9oBG5+GfVmQEPGfl8r+DYdrYDAkysDg483s+48POH7NC3L1LOlxlqRg== +"@abp/datatables.net@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-8.3.0.tgz#ff697758ce9309ba8311f23aec921c4722588c8b" + integrity sha512-4dIdv7eN1tVouOUrlF+MIdg8zQpecyH61waqLgy1q5jMZQivrTSFZ7UWMG3WVOAYjw5zSUZHZPbzA+ttnaOPkg== dependencies: - "@abp/jquery" "~8.3.0-rc.1" + "@abp/jquery" "~8.3.0" datatables.net "^2.0.8" -"@abp/font-awesome@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-8.3.0-rc.1.tgz#ea05d7e08395b1894eefe6f912ae0534fd75e69a" - integrity sha512-GN1xZ76RzQC3aqU2m19vYsyfESCeoSsp8AtvilmeqsjlzhuLLdQ6UWSxMqRqE22TCWRXbA/d/7IAb12TB1mawg== +"@abp/font-awesome@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-8.3.0.tgz#9e4e9adc08dfca52c0a07d1608c5e5662675a4c9" + integrity sha512-NRxvM/dzvQC2Cj/F5i07XB/i6IVTmXcO9sOq6TWosWib0wGaPxRbCSjy8QUAYSD1QYaVQ30XMb3XXImaMGyd8A== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" "@fortawesome/fontawesome-free" "^6.5.2" -"@abp/jquery-form@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-8.3.0-rc.1.tgz#21025048f44028a5cb1ced7414cb48af00e91bff" - integrity sha512-mVZzEJKbhiYmXK2yZRZAJwO5e7C2N0lj8ueOYPiFG6h4UKLbKPHQdIrkapyc88VirrELe1hnhJJbQ56dsQWeyg== +"@abp/jquery-form@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-8.3.0.tgz#fa2ad2fedbe3d3528ee94cbbd4f94d48f0cb5e4d" + integrity sha512-olP9FmpNVTbOIewsVua0moHVYXw4Sl3chFbvTDLG6vRBohLSjllUXfgY3UEIVWR1PCqnAg+iEJZl9NHB9iOLBg== dependencies: - "@abp/jquery" "~8.3.0-rc.1" + "@abp/jquery" "~8.3.0" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-8.3.0-rc.1.tgz#63042715391ca63f273874ff66fca4b20330d31b" - integrity sha512-EKQf733+HS9bIVQhMgAHYZfCY663GqNv8KUcCIuQOHPt5DWU49ygYhawkcYIzUKd2Gy9+ZtyWLkWmoBxTnwlmw== +"@abp/jquery-validation-unobtrusive@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-8.3.0.tgz#0992cdd33170df83c79aa3371038c0b30e451521" + integrity sha512-9hidjq8x8sTnP5O3K2b2x9NpxvPd9WB03ENR6OfvM89kfSmQapSvBZTlCu80YK9NaQJ6MLQRLYOCuc3GHcj3EQ== dependencies: - "@abp/jquery-validation" "~8.3.0-rc.1" + "@abp/jquery-validation" "~8.3.0" jquery-validation-unobtrusive "^4.0.0" -"@abp/jquery-validation@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-8.3.0-rc.1.tgz#8c82189ba7c3614f7306c2bf958b3717a6a4e702" - integrity sha512-Fr8AI//7iV743S6bw4ixE5qOu+af3HfZSivQJnYVVTbR/75gPqI/xRe6u/k82TJIBM7IaspQ4QdruMuvnJyBpQ== +"@abp/jquery-validation@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-8.3.0.tgz#bd6a72c6d86f116abe3b5d2adf3752bdbbcca887" + integrity sha512-6l5BZSa3N0Fou6Se7MfUSnI2dD4SYhZ2V988bgPJQ6p37XBOZ2OAj7LEIf5FSjtUzXjao/6/vqjkPNYreNikig== dependencies: - "@abp/jquery" "~8.3.0-rc.1" + "@abp/jquery" "~8.3.0" jquery-validation "^1.20.1" -"@abp/jquery@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-8.3.0-rc.1.tgz#a181c6749d58690b3265705959d8c818296896f3" - integrity sha512-fXs35cDLAw66irfHsFIWD41RKzpLABkULLoMwxfB76nOVPdV7qlWrXoI2O/du3xhCqBqHR4fS8xjwE6kFvkdLQ== +"@abp/jquery@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-8.3.0.tgz#9be5ef2f769680226e6a1a981026590caf3b57ef" + integrity sha512-GsFY+n3EtS6B0pAoKd+xMnt5Dzi5bHvIbhLgDgfQfOBzAy3twGRWsPQ3nkuXXm8TppwujMNowU1oiLKPPm0AOA== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" jquery "~3.7.1" -"@abp/lodash@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-8.3.0-rc.1.tgz#32f8805031f73b9d5bdc338afe49739c4ebc3ce9" - integrity sha512-UBGlG5+tFpyAPMuwpkY7K/g21c+d3Aq3HbFmcIilUEIsJ+yJqj95xhRh6t/LSwJCo5ntdSCgVC85q0kD0fQlQA== +"@abp/lodash@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-8.3.0.tgz#f5a0a496c999886f2d6999067bfac2e1f0c3969c" + integrity sha512-BiAsONbKR/RKG3WjRaMWVmhNe1ELEsykVq+ogG1Rhk3kwPbvze3TS8k2p0Lu/RC41/BmDUmJ5abg1pUMwkRT8w== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" lodash "^4.17.21" -"@abp/luxon@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-8.3.0-rc.1.tgz#df19773212502336c2caf6a8806b7647748f8f81" - integrity sha512-1oPx0tGyFi58T0yv/pdqJpcIRWU6ej5Sv28fRgz3J6tHam3hVPtKJPK9Ajvn6+MNVDLuMUczgVtfWEOvO2Kqrg== +"@abp/luxon@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-8.3.0.tgz#7dd3f756be1605506e26f7ac76b80cc082a12d07" + integrity sha512-8gdI5BtXkVp0sFg89QVDe8AvgQ7Qfq4JCqz2PMrKPSATR3H8GD6BCaEYpRp6CNTCjVrQjGZdzKgUyea1D3dHbw== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" luxon "^3.4.4" -"@abp/malihu-custom-scrollbar-plugin@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-8.3.0-rc.1.tgz#b57086d708082ce45e1917aeca8c92029ebd805d" - integrity sha512-4sa5e07EPW9IM7eQbvKtk78gd/bESYhTsl+BeWSKeqjj5wwwPYf4GIEvfJM7JVnhYwh1IPYDEkTv9QNYLczXKQ== +"@abp/malihu-custom-scrollbar-plugin@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-8.3.0.tgz#c88c132c3402bbb02054ca7d446051950f87a817" + integrity sha512-nd/mb6LJa6fMxal8PGcIjIRIoZ/UHCd01WDC9YI2H4wGCGx0CA0JyHso5oc/OEzJhUL8ujO/vYm9uLb7YahPtA== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/moment@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-8.3.0-rc.1.tgz#0ba9d64ca6d7b454af7aaa63e54be267f333e1fe" - integrity sha512-YbVEDg3m+D5KMcTCBEnor/tFgmk9IeL4pF/oChYQGXLeyohY7vfmK68owAnEDN61nCRXng9xykiZu2bLq829WA== +"@abp/moment@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-8.3.0.tgz#8e4f7a523ab76ef9e4cd96a399560bad38d38d1a" + integrity sha512-LywSsKuQ2GN/Btmle6CcTKa811zbvUWdC+RLQA792K9HyBs6LvN0qRRluEQZgplairRgh2pDOg8tdFlUERkv2w== dependencies: moment "^2.30.1" -"@abp/prismjs@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-8.3.0-rc.1.tgz#82f98db7e3a5e5e535ecb0452c84a5fda57b5801" - integrity sha512-kvO7fU9KfXNK44mL9QDtGuDD3ebiXTd5nKNxgrsneHhYsdNiWwXzqWpZlfs7t9nqSydLzqWkQZ7we01GoxeQ/g== +"@abp/prismjs@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-8.3.0.tgz#0c87c63294d1452ed7152083d2fb6e70aa3aeae6" + integrity sha512-3wpwbqqlGRfQSLcBP+Qb2TKOoVGZVYYwOP6dP3So9ev8J5gFMDEizH9zLwRVHYrrsZZP8/etYnyZ0hn7ewuI5Q== dependencies: - "@abp/clipboard" "~8.3.0-rc.1" - "@abp/core" "~8.3.0-rc.1" + "@abp/clipboard" "~8.3.0" + "@abp/core" "~8.3.0" prismjs "^1.29.0" -"@abp/select2@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-8.3.0-rc.1.tgz#3eb932e05987cc1e13f72decc9ae70d47801bf7d" - integrity sha512-lZuJLiFcOEVj6cTPAA7ZfhE3v1LyivmMt8Tt7Dpvgybx2PDN1NtfLce2BCKb0MvsaTlfJMSK0ZLu3JpxCQ+Q/A== +"@abp/select2@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-8.3.0.tgz#ef4742fcd345394767f46180f61c6cabbd0b3867" + integrity sha512-bdLt2+ImxxpiZl4HGbYJpdDROQUT7/Z/+8A+6oJNacq3lNekdvufLYgTMxKru6zTbnd9j3HFKMOTE1eRjb9Xqg== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" select2 "^4.0.13" -"@abp/sweetalert2@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-8.3.0-rc.1.tgz#66d8b9ce287a71474ce37c217cd800e150a86138" - integrity sha512-b6dZbc5/nYrUz5s+lAgi561XnsASa0ZJOn6f5W2Oakm9ULzqFndapKx5f+zHeJaNArpeGDh50AjQ+lcGGw83zQ== +"@abp/sweetalert2@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-8.3.0.tgz#a63020d57e44f7940817287d3d9676288bfb85aa" + integrity sha512-ooqPM4Z2v2scnMo5l8ycTmp6t/sW4sCsvIkJ4TyM876WLQJaZxJdOao4RQWuU+dVFr9zg8cOwqLH4q7UEiO6ww== dependencies: - "@abp/core" "~8.3.0-rc.1" + "@abp/core" "~8.3.0" sweetalert2 "^11.3.6" -"@abp/timeago@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-8.3.0-rc.1.tgz#d795b9cccb190f5d42f242727ac447fe03c30db3" - integrity sha512-yJCA7PHmAxFxIvPq03iSx3LbIiDQls4AiVBO75103LEGokRUG9bg+iPA7GLkPpfNbnNgEJ7N7Gw6RQzMNRLCpA== +"@abp/timeago@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-8.3.0.tgz#b3b8d6927bf170f77af848bc1925e5ef6835bd55" + integrity sha512-Dd6xaUoF9Bp4F9WJnTsFBqY+Gt++UR7UmLvBZL/dvthkeNCu2I8MUsmshkUUjY0lIXpjZwefUOuyupQrgHXPMg== dependencies: - "@abp/jquery" "~8.3.0-rc.1" + "@abp/jquery" "~8.3.0" timeago "^1.6.7" -"@abp/toastr@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-8.3.0-rc.1.tgz#82c7f6566e604c2cf31555da3f9b0898df8a5541" - integrity sha512-0nBM4nEvDlANVulk7EKoB4Lk/1fH+UgzPOyUOyemQZAWHgPhIpa4z5yiLkCeOxN1hu/CBEe+Jo7qJblsj+v7kQ== +"@abp/toastr@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-8.3.0.tgz#e68a2bd8f731e79034594bc2c736f7c66b3df1af" + integrity sha512-aWK/RaX/FmcEKhJLjsw1A0K2c04m2fRJkmo9NwzBCSscy6Msw9IMkqNWLiFDThMU8/qKzq7wq3Vmk/C0IpeAwA== dependencies: - "@abp/jquery" "~8.3.0-rc.1" + "@abp/jquery" "~8.3.0" toastr "^2.1.4" -"@abp/utils@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-8.3.0-rc.1.tgz#7db324059f8f9c64fbb5d5a6f0c2384896ca1928" - integrity sha512-Eg4Lwv4DEDr5mfG/8ghwMPdphywZBZIxWTJCZnCWngDQ9fEn/bnYuL1WkvbVvKd10A6030wHEJXFJj2OuNdi3Q== +"@abp/utils@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-8.3.0.tgz#96ae9266ad4d833fd9d723acef7fc85fabf618d9" + integrity sha512-w/XAqza4Z8wBWRoj5uPNKbd1/bE9L/uUWk6EUSBKmljMRryWQBmaPkb1XgvrOMQIbyyF60tUvvipapQLPVh6hw== dependencies: just-compare "^2.3.0" -"@abp/virtual-file-explorer@~8.3.0-rc.1": - version "8.3.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/virtual-file-explorer/-/virtual-file-explorer-8.3.0-rc.1.tgz#f8bd1192c0e711e2d1a43c70030969e8b5537e8d" - integrity sha512-x3KgCehwYN7skNa6BTxU70mYjjF6gV8ekMZKrNoBXwA4GaIK4UiXd5+c8MQ0Smkg+kr+kgpZC33YPwGAnTozbQ== +"@abp/virtual-file-explorer@~8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@abp/virtual-file-explorer/-/virtual-file-explorer-8.3.0.tgz#44572a5251274db27e740c627d6f6169bb54d1fb" + integrity sha512-UEMeSOfpLTwEhFvmDd8+/CoBslC3n15w51Fnmz/RH007Z4M5BQvt//uTNzEV2trOn/MtAL+bf9X+Ij3Qu6JQvg== dependencies: - "@abp/clipboard" "~8.3.0-rc.1" - "@abp/prismjs" "~8.3.0-rc.1" + "@abp/clipboard" "~8.3.0" + "@abp/prismjs" "~8.3.0" "@fortawesome/fontawesome-free@^6.5.2": version "6.6.0" diff --git a/modules/virtual-file-explorer/src/Volo.Abp.VirtualFileExplorer.Web/Localization/Resources/sv.json b/modules/virtual-file-explorer/src/Volo.Abp.VirtualFileExplorer.Web/Localization/Resources/sv.json new file mode 100644 index 0000000000..84e3bf8dde --- /dev/null +++ b/modules/virtual-file-explorer/src/Volo.Abp.VirtualFileExplorer.Web/Localization/Resources/sv.json @@ -0,0 +1,14 @@ +{ + "culture": "sv", + "texts": { + "VirtualFileExplorer": "Virtuell filutforskare", + "VirtualFileType": "Virtuell filtyp", + "Menu:VirtualFileExplorer": "Virtuell filutforskare", + "LastUpdateTime": "Senaste uppdateringstid", + "VirtualFileName": "Virtuellt filnamn", + "FileContent": "Filens innehĂ„ll", + "Size": "Storlek", + "BackToRoot": "Tillbaka till roten", + "EmptyFileInfoList": "Det finns inga virtuella filer" + } +} \ No newline at end of file diff --git a/modules/virtual-file-explorer/src/Volo.Abp.VirtualFileExplorer.Web/Volo.Abp.VirtualFileExplorer.Web.abppkg.analyze.json b/modules/virtual-file-explorer/src/Volo.Abp.VirtualFileExplorer.Web/Volo.Abp.VirtualFileExplorer.Web.abppkg.analyze.json index b5f54bbc17..8665e359e5 100644 --- a/modules/virtual-file-explorer/src/Volo.Abp.VirtualFileExplorer.Web/Volo.Abp.VirtualFileExplorer.Web.abppkg.analyze.json +++ b/modules/virtual-file-explorer/src/Volo.Abp.VirtualFileExplorer.Web/Volo.Abp.VirtualFileExplorer.Web.abppkg.analyze.json @@ -1,6 +1,6 @@ { "name": "Volo.Abp.VirtualFileExplorer.Web", - "hash": "f1492ce429d5cb7008824a7ebb1fb435", + "hash": "", "contents": [ { "namespace": "Volo.Abp.VirtualFileExplorer.Web", @@ -63,6 +63,12 @@ "contentType": "abpModule", "name": "AbpVirtualFileExplorerWebModule", "summary": null + }, + { + "namespace": "Volo.Abp.VirtualFileExplorer.Web.Pages.VirtualFileExplorer", + "contentType": "webPage", + "name": "IndexModel", + "summary": null } ] } \ No newline at end of file diff --git a/npm/lerna.json b/npm/lerna.json index 4826f8a1c2..7ee07a5e0a 100644 --- a/npm/lerna.json +++ b/npm/lerna.json @@ -1,5 +1,5 @@ { - "version": "8.3.0-rc.1", + "version": "8.3.0", "packages": [ "packs/*" ], diff --git a/npm/ng-packs/.eslintrc.json b/npm/ng-packs/.eslintrc.json index 8649f90b2d..e532db22cc 100644 --- a/npm/ng-packs/.eslintrc.json +++ b/npm/ng-packs/.eslintrc.json @@ -31,14 +31,18 @@ "@typescript-eslint/no-explicit-any": "off", "@typescript-eslint/no-namespace": "off", "@typescript-eslint/no-empty-function": ["warn"], - "@typescript-eslint/no-empty-interface": ["warn"] - + "@typescript-eslint/no-empty-interface": ["warn"], + "@typescript-eslint/no-extra-semi": "error", + "no-extra-semi": "off" } }, { "files": ["*.js", "*.jsx"], "extends": ["plugin:@nx/javascript"], - "rules": {} + "rules": { + "@typescript-eslint/no-extra-semi": "error", + "no-extra-semi": "off" + } }, { "files": "*.json", diff --git a/npm/ng-packs/.prettierignore b/npm/ng-packs/.prettierignore index 1d94f2ad3d..ab9e6cdaa7 100644 --- a/npm/ng-packs/.prettierignore +++ b/npm/ng-packs/.prettierignore @@ -8,4 +8,5 @@ /scripts /tools /source-code-requirements -/.nx/cache \ No newline at end of file +/.nx/cache +/.nx/workspace-data \ No newline at end of file diff --git a/npm/ng-packs/migrations.json b/npm/ng-packs/migrations.json index 8e84624df1..c7f89c3394 100644 --- a/npm/ng-packs/migrations.json +++ b/npm/ng-packs/migrations.json @@ -1,56 +1,84 @@ { "migrations": [ { - "version": "18.1.0-beta.3", - "description": "Moves affected.defaultBase to defaultBase in `nx.json`", - "implementation": "./src/migrations/update-17-2-0/move-default-base", + "cli": "nx", + "version": "19.2.0-beta.2", + "description": "Updates the default workspace data directory to .nx/workspace-data", + "implementation": "./src/migrations/update-19-2-0/move-workspace-data-directory", + "package": "nx", + "name": "19-2-0-move-graph-cache-directory" + }, + { + "cli": "nx", + "version": "19.2.2-beta.0", + "description": "Updates the nx wrapper.", + "implementation": "./src/migrations/update-17-3-0/update-nxw", + "package": "nx", + "name": "19-2-2-update-nx-wrapper" + }, + { + "version": "19.2.4-beta.0", + "description": "Set project name in nx.json explicitly", + "implementation": "./src/migrations/update-19-2-4/set-project-name", + "x-repair-skip": true, "package": "nx", - "name": "move-default-base-to-nx-json-root" + "name": "19-2-4-set-project-name" }, { "cli": "nx", - "version": "18.1.0-beta.3", - "description": "Update to Cypress ^13.6.6 if the workspace is using Cypress v13 to ensure workspaces don't use v13.6.5 which has an issue when verifying Cypress.", - "implementation": "./src/migrations/update-18-1-0/update-cypress-version-13-6-6", - "package": "@nx/cypress", - "name": "update-cypress-version-13-6-6" + "version": "19.1.0-beta.6", + "description": "Migrate no-extra-semi rules into user config, out of nx extendable configs", + "implementation": "./src/migrations/update-19-1-0-migrate-no-extra-semi/migrate-no-extra-semi", + "package": "@nx/eslint-plugin", + "name": "update-19-1-0-rename-no-extra-semi" }, { "cli": "nx", - "version": "18.1.0-beta.1", - "requires": { - "@angular/core": ">=17.2.0" - }, - "description": "Update the @angular/cli package version to ~17.2.0.", - "factory": "./src/migrations/update-18-1-0/update-angular-cli", + "version": "19.1.0-beta.2", + "requires": { "@angular/core": ">=18.0.0" }, + "description": "Update the @angular/cli package version to ~18.0.0.", + "factory": "./src/migrations/update-19-1-0/update-angular-cli", "package": "@nx/angular", - "name": "update-angular-cli-version-17-2-0" + "name": "update-angular-cli-version-18-0-0" }, { "cli": "nx", - "version": "18.1.1-beta.0", - "description": "Ensure targetDefaults inputs for task hashing when '@nx/angular:webpack-browser' is used are correct for Module Federation.", - "factory": "./src/migrations/update-18-1-1/fix-target-defaults-inputs", + "version": "19.2.1-beta.0", + "requires": { "@angular-eslint/eslint-plugin": ">=18.0.0" }, + "description": "Installs the '@typescript-eslint/utils' package when having installed '@angular-eslint/eslint-plugin' or '@angular-eslint/eslint-plugin-template' with version >=18.0.0.", + "factory": "./src/migrations/update-19-2-1/add-typescript-eslint-utils", "package": "@nx/angular", - "name": "fix-target-defaults-for-webpack-browser" + "name": "add-typescript-eslint-utils" }, { "cli": "nx", - "version": "18.2.0-beta.0", - "requires": { - "@angular/core": ">=17.3.0" - }, - "description": "Update the @angular/cli package version to ~17.3.0.", - "factory": "./src/migrations/update-18-2-0/update-angular-cli", + "version": "19.5.0-beta.1", + "requires": { "@angular/core": ">=18.1.0" }, + "description": "Update the @angular/cli package version to ~18.1.0.", + "factory": "./src/migrations/update-19-5-0/update-angular-cli", "package": "@nx/angular", - "name": "update-angular-cli-version-17-3-0" + "name": "update-angular-cli-version-18-1-0" }, { - "version": "17.3.0", + "version": "18.0.0", "description": "Updates two-way bindings that have an invalid expression to use the longform expression instead.", "factory": "./migrations/invalid-two-way-bindings/bundle", "package": "@angular/core", "name": "invalid-two-way-bindings" + }, + { + "version": "18.0.0", + "description": "Replace deprecated HTTP related modules with provider functions", + "factory": "./migrations/http-providers/bundle", + "package": "@angular/core", + "name": "migration-http-providers" + }, + { + "version": "18.1.0", + "description": "Updates calls to afterRender with an explicit phase to the new API", + "factory": "./migrations/after-render-phase/bundle", + "package": "@angular/core", + "name": "migration-after-render-phase" } ] } diff --git a/npm/ng-packs/package.json b/npm/ng-packs/package.json index 694e07af4a..5392dd31a1 100644 --- a/npm/ng-packs/package.json +++ b/npm/ng-packs/package.json @@ -44,51 +44,52 @@ }, "private": true, "devDependencies": { - "@abp/ng.theme.lepton-x": "~3.2.0", - "@abp/utils": "~8.3.0-rc.1", - "@angular-devkit/build-angular": "~17.3.0", - "@angular-devkit/core": "~17.3.0", - "@angular-devkit/schematics": "~17.3.0", - "@angular-devkit/schematics-cli": "~17.3.0", - "@angular-eslint/eslint-plugin": "~17.3.0", - "@angular-eslint/eslint-plugin-template": "~17.3.0", - "@angular-eslint/template-parser": "~17.3.0", - "@angular/animations": "~17.3.0", - "@angular/cli": "~17.3.0", - "@angular/common": "~17.3.0", - "@angular/compiler": "~17.3.0", - "@angular/compiler-cli": "~17.3.0", - "@angular/core": "~17.3.0", - "@angular/forms": "~17.3.0", - "@angular/language-service": "~17.3.0", - "@angular/localize": "~17.3.0", - "@angular/platform-browser": "~17.3.0", - "@angular/platform-browser-dynamic": "~17.3.0", - "@angular/router": "~17.3.0", + "@abp/ng.theme.lepton-x": "~3.3.0", + "@abp/utils": "~8.3.0", + "@angular-devkit/build-angular": "~18.1.0", + "@angular-devkit/core": "~18.1.0", + "@angular-devkit/schematics": "~18.1.0", + "@angular-devkit/schematics-cli": "~18.1.0", + "@angular-eslint/eslint-plugin": "~18.1.0", + "@angular-eslint/eslint-plugin-template": "~18.1.0", + "@angular-eslint/template-parser": "~18.1.0", + "@angular/animations": "~18.1.0", + "@angular/cli": "~18.1.0", + "@angular/common": "~18.1.0", + "@angular/compiler": "~18.1.0", + "@angular/compiler-cli": "~18.1.0", + "@angular/core": "~18.1.0", + "@angular/forms": "~18.1.0", + "@angular/language-service": "~18.1.0", + "@angular/localize": "~18.1.0", + "@angular/platform-browser": "~18.1.0", + "@angular/platform-browser-dynamic": "~18.1.0", + "@angular/router": "~18.1.0", "@fortawesome/fontawesome-free": "^6.0.0", - "@ng-bootstrap/ng-bootstrap": "~16.0.0", + "@ng-bootstrap/ng-bootstrap": "~17.0.0", "@ngneat/spectator": "^16.0.0", "@ngx-validate/core": "^0.2.0", - "@nx/angular": "~19.0.0", - "@nx/cypress": "~19.0.0", - "@nx/devkit": "~19.0.0", - "@nx/eslint": "~19.0.0", - "@nx/eslint-plugin": "~19.0.0", - "@nx/jest": "~19.0.0", - "@nx/js": "~19.0.0", - "@nx/plugin": "~19.0.0", - "@nx/workspace": "~19.0.0", + "@nx/angular": "~19.5.0", + "@nx/cypress": "~19.5.0", + "@nx/devkit": "~19.5.0", + "@nx/eslint": "~19.5.0", + "@nx/eslint-plugin": "~19.5.0", + "@nx/jest": "~19.5.0", + "@nx/js": "~19.5.0", + "@nx/plugin": "~19.5.0", + "@nx/workspace": "~19.5.0", "@popperjs/core": "~2.11.0", - "@schematics/angular": "~17.3.0", - "@swc-node/register": "1.6.8", + "@schematics/angular": "~18.1.0", + "@swc-node/register": "1.9.2", "@swc/cli": "0.3.12", - "@swc/core": "1.3.94", - "@swc/helpers": "0.5.3", + "@swc/core": "~1.5.0", + "@swc/helpers": "~0.5.0", "@swimlane/ngx-datatable": "^20.0.0", "@types/jest": "29.4.4", "@types/node": "^20.0.0", - "@typescript-eslint/eslint-plugin": "6.13.2", - "@typescript-eslint/parser": "6.13.2", + "@typescript-eslint/eslint-plugin": "7.16.0", + "@typescript-eslint/parser": "7.16.0", + "@typescript-eslint/utils": "^7.16.0", "angular-oauth2-oidc": "^17.0.0", "autoprefixer": "^10.0.0", "bootstrap": "^5.0.0", @@ -96,23 +97,23 @@ "chart.js": "^4.0.0", "cypress": "^7.0.0", "dotenv": "10.0.0", - "eslint": "8.57.0", + "eslint": "^8.0.0", "eslint-config-prettier": "9.0.0", "eslint-plugin-cypress": "^2.10.3", "got": "^11.0.0", "jest": "^29.0.0", "jest-canvas-mock": "^2.0.0", "jest-environment-jsdom": "^29.0.0", - "jest-preset-angular": "14.0.3", + "jest-preset-angular": "14.1.1", "jsonc-eslint-parser": "^2.0.0", "jsonc-parser": "^2.0.0", "just-clone": "^6.0.0", "just-compare": "^2.0.0", "lerna": "^4.0.0", "lint-staged": "^13.0.0", - "ng-packagr": "~17.3.0", + "ng-packagr": "~18.1.0", "ng-zorro-antd": "^17.0.0", - "nx": "~19.0.0", + "nx": "~19.5.0", "perfect-scrollbar": "^1.0.0", "postcss": "^8.0.0", "postcss-import": "14.1.0", @@ -124,10 +125,10 @@ "should-quote": "^1.0.0", "ts-jest": "29.1.0", "ts-node": "10.9.1", - "ts-toolbelt": "6.15.4", + "ts-toolbelt": "^9.0.0", "tslib": "^2.0.0", "tslint": "~6.1.0", - "typescript": "~5.3.0", + "typescript": "~5.5.0", "zone.js": "~0.14.0" }, "lint-staged": { diff --git a/npm/ng-packs/packages/account-core/package.json b/npm/ng-packs/packages/account-core/package.json index 57269bf2bf..3ad5145166 100644 --- a/npm/ng-packs/packages/account-core/package.json +++ b/npm/ng-packs/packages/account-core/package.json @@ -1,14 +1,14 @@ { "name": "@abp/ng.account.core", - "version": "8.3.0-rc.1", + "version": "8.3.0", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.core": "~8.3.0-rc.1", - "@abp/ng.theme.shared": "~8.3.0-rc.1", + "@abp/ng.core": "~8.3.0", + "@abp/ng.theme.shared": "~8.3.0", "tslib": "^2.0.0" }, "publishConfig": { diff --git a/npm/ng-packs/packages/account/config/src/providers/route.provider.ts b/npm/ng-packs/packages/account/config/src/providers/route.provider.ts index 6b2f016c66..2708d1d2f7 100644 --- a/npm/ng-packs/packages/account/config/src/providers/route.provider.ts +++ b/npm/ng-packs/packages/account/config/src/providers/route.provider.ts @@ -14,6 +14,8 @@ export function configureRoutes(routes: RoutesService) { name: eAccountRouteNames.Account, invisible: true, layout: eLayoutType.account, + breadcrumbText: eAccountRouteNames.Account, + iconClass: 'bi bi-person-fill-gear', order: 1, }, { @@ -33,6 +35,8 @@ export function configureRoutes(routes: RoutesService) { name: eAccountRouteNames.ManageProfile, parentName: eAccountRouteNames.Account, layout: eLayoutType.application, + breadcrumbText: 'AbpAccount::Manage', + iconClass: 'bi bi-kanban-fill', order: 3, }, { diff --git a/npm/ng-packs/packages/account/package.json b/npm/ng-packs/packages/account/package.json index fe15e9c5df..a8b2ac221d 100644 --- a/npm/ng-packs/packages/account/package.json +++ b/npm/ng-packs/packages/account/package.json @@ -1,14 +1,14 @@ { "name": "@abp/ng.account", - "version": "8.3.0-rc.1", + "version": "8.3.0", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.account.core": "~8.3.0-rc.1", - "@abp/ng.theme.shared": "~8.3.0-rc.1", + "@abp/ng.account.core": "~8.3.0", + "@abp/ng.theme.shared": "~8.3.0", "tslib": "^2.0.0" }, "publishConfig": { diff --git a/npm/ng-packs/packages/components/extensible/README.md b/npm/ng-packs/packages/components/extensible/README.md deleted file mode 100644 index 7a14a85f7c..0000000000 --- a/npm/ng-packs/packages/components/extensible/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# @abp/ng.components/extensible - -Secondary entry point of `@abp/ng.components`. It can be used by importing from `@abp/ng.components/extensible`. diff --git a/npm/ng-packs/packages/components/extensible/src/lib/components/date-time-picker/extensible-date-time-picker.component.ts b/npm/ng-packs/packages/components/extensible/src/lib/components/date-time-picker/extensible-date-time-picker.component.ts index e6f7881ca2..0976820506 100644 --- a/npm/ng-packs/packages/components/extensible/src/lib/components/date-time-picker/extensible-date-time-picker.component.ts +++ b/npm/ng-packs/packages/components/extensible/src/lib/components/date-time-picker/extensible-date-time-picker.component.ts @@ -2,11 +2,13 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, + inject, Input, Optional, SkipSelf, ViewChild, } from '@angular/core'; +import { CommonModule } from '@angular/common'; import { ControlContainer, ReactiveFormsModule } from '@angular/forms'; import { NgbDateAdapter, @@ -16,15 +18,21 @@ import { NgbTimepicker, NgbTimepickerModule, } from '@ng-bootstrap/ng-bootstrap'; +import { NgxValidateCoreModule } from '@ngx-validate/core'; +import { DateTimeAdapter } from '@abp/ng.theme.shared'; import { FormProp } from '../../models/form-props'; import { selfFactory } from '../../utils/factory.util'; -import { DateTimeAdapter } from '@abp/ng.theme.shared'; -import { CommonModule } from '@angular/common'; @Component({ exportAs: 'abpExtensibleDateTimePicker', standalone: true, - imports: [CommonModule, NgbDatepickerModule, ReactiveFormsModule, NgbTimepickerModule], + imports: [ + CommonModule, + ReactiveFormsModule, + NgbDatepickerModule, + NgbTimepickerModule, + NgxValidateCoreModule, + ], selector: 'abp-extensible-date-time-picker', template: ` ) => text$ ? text$.pipe( - debounceTime(300), - distinctUntilChanged(), - switchMap(text => this.prop?.options?.(this.data, text) || of([])), - ) + debounceTime(300), + distinctUntilChanged(), + switchMap(text => this.prop?.options?.(this.data, text) || of([])), + ) : of([]); typeaheadFormatter = (option: ABP.Option) => option.key; diff --git a/npm/ng-packs/packages/components/extensible/src/lib/models/actions.ts b/npm/ng-packs/packages/components/extensible/src/lib/models/actions.ts index 07e3c0b91e..57a8e26bf0 100644 --- a/npm/ng-packs/packages/components/extensible/src/lib/models/actions.ts +++ b/npm/ng-packs/packages/components/extensible/src/lib/models/actions.ts @@ -1,6 +1,5 @@ import { LinkedList } from '@abp/utils'; import { InjectFlags, InjectionToken, InjectOptions, Type } from '@angular/core'; -import { O } from 'ts-toolbelt'; export abstract class ActionList> extends LinkedList {} @@ -22,7 +21,7 @@ export abstract class ActionData { } } -export type ReadonlyActionData = O.Readonly, 'data'>>; +export type ReadonlyActionData = Readonly, 'data'>>; export abstract class Action { constructor( diff --git a/npm/ng-packs/packages/components/extensible/src/lib/models/entity-actions.ts b/npm/ng-packs/packages/components/extensible/src/lib/models/entity-actions.ts index eb103cb1bd..1de7a5e76e 100644 --- a/npm/ng-packs/packages/components/extensible/src/lib/models/entity-actions.ts +++ b/npm/ng-packs/packages/components/extensible/src/lib/models/entity-actions.ts @@ -1,5 +1,4 @@ import { Type } from '@angular/core'; -import { O } from 'ts-toolbelt'; import { Action, ActionContributorCallback, @@ -9,6 +8,7 @@ import { ActionsFactory, } from './actions'; import { FormPropTooltip } from './form-props'; +import { FilteredWithOptions, PartialWithOptions } from '../utils/model.utils'; export class EntityActionList extends ActionList> {} @@ -47,10 +47,9 @@ export class EntityAction extends Action { } } -export type EntityActionOptions = O.Optional< - O.Writable>, - 'permission' | 'visible' | 'icon' ->; +type OptionalKeys = 'permission' | 'visible' | 'icon'; +export type EntityActionOptions = PartialWithOptions, OptionalKeys> & + FilteredWithOptions, OptionalKeys>; export type EntityActionDefaults = Record[]>; export type EntityActionContributorCallback = ActionContributorCallback< diff --git a/npm/ng-packs/packages/components/extensible/src/lib/models/entity-props.ts b/npm/ng-packs/packages/components/extensible/src/lib/models/entity-props.ts index 7692457cd8..8964bd9090 100644 --- a/npm/ng-packs/packages/components/extensible/src/lib/models/entity-props.ts +++ b/npm/ng-packs/packages/components/extensible/src/lib/models/entity-props.ts @@ -1,7 +1,6 @@ import { ABP, escapeHtmlChars } from '@abp/ng.core'; import { InjectFlags, InjectOptions, InjectionToken, Type } from '@angular/core'; import { Observable, of } from 'rxjs'; -import { O } from 'ts-toolbelt'; import { ActionCallback } from './actions'; import { Prop, @@ -13,6 +12,7 @@ import { PropsFactory, } from './props'; import { FormPropTooltip } from './form-props'; +import { FilteredWithOptions, PartialWithOptions } from '../utils/model.utils'; export class EntityPropList extends PropList> {} @@ -71,8 +71,7 @@ export class EntityProp extends Prop { } } -export type EntityPropOptions = O.Optional< - O.Writable>, +type OptionalKeys = | 'permission' | 'visible' | 'columnVisible' @@ -83,8 +82,9 @@ export type EntityPropOptions = O.Optional< | 'valueResolver' | 'action' | 'component' - | 'enumList' ->; + | 'enumList'; +export type EntityPropOptions = PartialWithOptions, OptionalKeys> & + FilteredWithOptions, OptionalKeys>; export type EntityPropDefaults = Record[]>; export type EntityPropContributorCallback = PropContributorCallback>; diff --git a/npm/ng-packs/packages/components/extensible/src/lib/models/form-props.ts b/npm/ng-packs/packages/components/extensible/src/lib/models/form-props.ts index c1b8cacbe2..f99aa01623 100644 --- a/npm/ng-packs/packages/components/extensible/src/lib/models/form-props.ts +++ b/npm/ng-packs/packages/components/extensible/src/lib/models/form-props.ts @@ -2,7 +2,6 @@ import { ABP } from '@abp/ng.core'; import { Injector, Type } from '@angular/core'; import { AsyncValidatorFn, ValidatorFn } from '@angular/forms'; import { Observable } from 'rxjs'; -import { O } from 'ts-toolbelt'; import { Prop, PropCallback, @@ -15,6 +14,7 @@ import { Props, PropsFactory, } from './props'; +import { FilteredWithOptions, PartialWithOptions } from '../utils/model.utils'; export class FormPropList extends PropList> {} @@ -131,8 +131,7 @@ export class FormPropData extends PropData { } } -export type FormPropOptions = O.Optional< - O.Writable>, +type OptionalKeys = | 'permission' | 'visible' | 'displayName' @@ -147,8 +146,9 @@ export type FormPropOptions = O.Optional< | 'id' | 'displayTextResolver' | 'formText' - | 'tooltip' ->; + | 'tooltip'; +export type FormPropOptions = PartialWithOptions, OptionalKeys> & + FilteredWithOptions, OptionalKeys>; export type CreateFormPropDefaults = Record[]>; export type CreateFormPropContributorCallback = PropContributorCallback>; diff --git a/npm/ng-packs/packages/components/extensible/src/lib/models/props.ts b/npm/ng-packs/packages/components/extensible/src/lib/models/props.ts index 2c88bd9939..7b1e2b7949 100644 --- a/npm/ng-packs/packages/components/extensible/src/lib/models/props.ts +++ b/npm/ng-packs/packages/components/extensible/src/lib/models/props.ts @@ -1,6 +1,5 @@ import { LinkedList } from '@abp/utils'; import { InjectFlags, InjectionToken, InjectOptions, Type } from '@angular/core'; -import { O } from 'ts-toolbelt'; import { ePropType } from '../enums/props.enum'; import { FormPropTooltip } from './form-props'; @@ -24,7 +23,7 @@ export abstract class PropData { } } -export type ReadonlyPropData = O.Readonly, 'data'>>; +export type ReadonlyPropData = Readonly, 'data'>>; export abstract class Prop { constructor( diff --git a/npm/ng-packs/packages/components/extensible/src/lib/models/toolbar-actions.ts b/npm/ng-packs/packages/components/extensible/src/lib/models/toolbar-actions.ts index 02b26a8173..676b839bfd 100644 --- a/npm/ng-packs/packages/components/extensible/src/lib/models/toolbar-actions.ts +++ b/npm/ng-packs/packages/components/extensible/src/lib/models/toolbar-actions.ts @@ -1,5 +1,4 @@ import { Injector, Type } from '@angular/core'; -import { O } from 'ts-toolbelt'; import { Action, ActionContributorCallback, @@ -10,6 +9,7 @@ import { ActionsFactory, ReadonlyActionData, } from './actions'; +import { FilteredWithOptions, PartialWithOptions } from '../utils/model.utils'; export class ToolbarActionList extends ActionList> {} @@ -61,15 +61,19 @@ export class ToolbarComponent extends Action { } } -export type ToolbarActionOptions = O.Optional< - O.Writable>, - 'permission' | 'visible' | 'icon' | 'btnClass' ->; - -export type ToolbarComponentOptions = O.Optional< - O.Writable>, - 'permission' | 'visible' | 'action' ->; +type OptionalActionKeys = 'permission' | 'visible' | 'icon' | 'btnClass'; +export type ToolbarActionOptions = PartialWithOptions< + ToolbarAction, + OptionalActionKeys +> & + FilteredWithOptions, OptionalActionKeys>; + +type OptionalComponentKeys = 'permission' | 'visible' | 'action'; +export type ToolbarComponentOptions = PartialWithOptions< + ToolbarComponent, + OptionalComponentKeys +> & + FilteredWithOptions, OptionalComponentKeys>; export type ToolbarActionDefault = ToolbarAction | ToolbarComponent; diff --git a/npm/ng-packs/packages/components/extensible/src/lib/utils/form-props.util.ts b/npm/ng-packs/packages/components/extensible/src/lib/utils/form-props.util.ts index ab7c669d47..75b8487b31 100644 --- a/npm/ng-packs/packages/components/extensible/src/lib/utils/form-props.util.ts +++ b/npm/ng-packs/packages/components/extensible/src/lib/utils/form-props.util.ts @@ -1,10 +1,10 @@ import { UntypedFormControl, UntypedFormGroup } from '@angular/forms'; -import { DateTimeAdapter,DateAdapter,TimeAdapter } from '@abp/ng.theme.shared'; +import { DateTimeAdapter, DateAdapter, TimeAdapter } from '@abp/ng.theme.shared'; import { EXTRA_PROPERTIES_KEY } from '../constants/extra-properties'; import { ePropType } from '../enums/props.enum'; -import { FormPropList } from "../models/form-props"; -import { PropData } from "../models/props"; +import { FormPropList } from '../models/form-props'; +import { PropData } from '../models/props'; import { ExtensionsService } from '../services/extensions.service'; import { EXTENSIONS_IDENTIFIER } from '../tokens/extensions.token'; diff --git a/npm/ng-packs/packages/components/extensible/src/lib/utils/model.utils.ts b/npm/ng-packs/packages/components/extensible/src/lib/utils/model.utils.ts new file mode 100644 index 0000000000..c7b7c6426a --- /dev/null +++ b/npm/ng-packs/packages/components/extensible/src/lib/utils/model.utils.ts @@ -0,0 +1,2 @@ +export type PartialWithOptions = Partial>; +export type FilteredWithOptions = Omit; diff --git a/npm/ng-packs/packages/components/extensible/src/lib/utils/props.util.ts b/npm/ng-packs/packages/components/extensible/src/lib/utils/props.util.ts index 24360dccc1..7207858036 100644 --- a/npm/ng-packs/packages/components/extensible/src/lib/utils/props.util.ts +++ b/npm/ng-packs/packages/components/extensible/src/lib/utils/props.util.ts @@ -47,26 +47,29 @@ export function mergeWithDefaultProps>( ); }); } -type InferredPropDefaults = F extends EntityPropsFactory - ? EntityPropDefaults - : F extends CreateFormPropsFactory - ? CreateFormPropDefaults - : F extends EditFormPropsFactory - ? EditFormPropDefaults - : never; +type InferredPropDefaults = + F extends EntityPropsFactory + ? EntityPropDefaults + : F extends CreateFormPropsFactory + ? CreateFormPropDefaults + : F extends EditFormPropsFactory + ? EditFormPropDefaults + : never; -type InferredPropContributorCallbacks = F extends EntityPropsFactory - ? EntityPropContributorCallbacks - : F extends CreateFormPropsFactory - ? CreateFormPropContributorCallbacks - : F extends EditFormPropsFactory - ? EditFormPropContributorCallbacks - : never; +type InferredPropContributorCallbacks = + F extends EntityPropsFactory + ? EntityPropContributorCallbacks + : F extends CreateFormPropsFactory + ? CreateFormPropContributorCallbacks + : F extends EditFormPropsFactory + ? EditFormPropContributorCallbacks + : never; -type InferredProps = F extends EntityPropsFactory - ? EntityProps - : F extends CreateFormPropsFactory - ? FormProps - : F extends EditFormPropsFactory - ? FormProps - : never; +type InferredProps = + F extends EntityPropsFactory + ? EntityProps + : F extends CreateFormPropsFactory + ? FormProps + : F extends EditFormPropsFactory + ? FormProps + : never; diff --git a/npm/ng-packs/packages/components/extensible/src/lib/utils/typeahead.util.ts b/npm/ng-packs/packages/components/extensible/src/lib/utils/typeahead.util.ts index eec592ad0c..baf41aacdb 100644 --- a/npm/ng-packs/packages/components/extensible/src/lib/utils/typeahead.util.ts +++ b/npm/ng-packs/packages/components/extensible/src/lib/utils/typeahead.util.ts @@ -39,10 +39,10 @@ export function createTypeaheadOptions( } export function getTypeaheadType(lookup: ExtensionPropertyUiLookupDto, name: string) { - if (!!lookup.url) { - return ePropType.Typeahead; - } else { + if (!lookup.url) { return name.endsWith(TYPEAHEAD_TEXT_SUFFIX) ? ePropType.Hidden : undefined; + } else { + return ePropType.Typeahead; } } diff --git a/npm/ng-packs/packages/components/extensible/src/public-api.ts b/npm/ng-packs/packages/components/extensible/src/public-api.ts index abcc3a1a0c..35e4696d49 100644 --- a/npm/ng-packs/packages/components/extensible/src/public-api.ts +++ b/npm/ng-packs/packages/components/extensible/src/public-api.ts @@ -62,8 +62,9 @@ export * from './lib/pipes/create-injector.pipe'; export * from './lib/services/extensions.service'; export * from './lib/tokens/extensions.token'; export * from './lib/tokens/extensible-form-view-provider.token'; - export * from './lib/utils/actions.util'; +export * from './lib/utils/actions.util'; export * from './lib/utils/form-props.util'; export * from './lib/utils/props.util'; export * from './lib/utils/state.util'; +export * from './lib/utils/model.utils'; export * from './lib/extensible.module'; diff --git a/npm/ng-packs/packages/components/package.json b/npm/ng-packs/packages/components/package.json index 26382072ab..c160b8a7a9 100644 --- a/npm/ng-packs/packages/components/package.json +++ b/npm/ng-packs/packages/components/package.json @@ -1,14 +1,14 @@ { "name": "@abp/ng.components", - "version": "8.3.0-rc.1", + "version": "8.3.0", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "peerDependencies": { - "@abp/ng.core": ">=8.3.0-rc.1", - "@abp/ng.theme.shared": ">=8.3.0-rc.1" + "@abp/ng.core": ">=8.3.0", + "@abp/ng.theme.shared": ">=8.3.0" }, "dependencies": { "chart.js": "^3.5.1", diff --git a/npm/ng-packs/packages/core/package.json b/npm/ng-packs/packages/core/package.json index cbce846954..d359ae4e3b 100644 --- a/npm/ng-packs/packages/core/package.json +++ b/npm/ng-packs/packages/core/package.json @@ -1,16 +1,16 @@ { "name": "@abp/ng.core", - "version": "8.3.0-rc.1", + "version": "8.3.0", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/utils": "~8.3.0-rc.1", + "@abp/utils": "~8.3.0", "just-clone": "^6.0.0", "just-compare": "^2.0.0", - "ts-toolbelt": "6.15.4", + "ts-toolbelt": "^9.0.0", "tslib": "^2.0.0" }, "publishConfig": { diff --git a/npm/ng-packs/packages/core/src/lib/core.module.ts b/npm/ng-packs/packages/core/src/lib/core.module.ts index 30c09c4c0c..83881a5246 100644 --- a/npm/ng-packs/packages/core/src/lib/core.module.ts +++ b/npm/ng-packs/packages/core/src/lib/core.module.ts @@ -1,5 +1,9 @@ import { CommonModule } from '@angular/common'; -import { HttpClientModule, HttpClientXsrfModule } from '@angular/common/http'; +import { + provideHttpClient, + withInterceptorsFromDi, + withXsrfConfiguration, +} from '@angular/common/http'; import { ModuleWithProviders, NgModule } from '@angular/core'; import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { RouterModule } from '@angular/router'; @@ -46,7 +50,6 @@ const standaloneDirectives = [ @NgModule({ exports: [ CommonModule, - HttpClientModule, FormsModule, ReactiveFormsModule, RouterModule, @@ -65,7 +68,6 @@ const standaloneDirectives = [ ], imports: [ CommonModule, - HttpClientModule, FormsModule, ReactiveFormsModule, RouterModule, @@ -84,7 +86,7 @@ const standaloneDirectives = [ ShortTimePipe, ShortDatePipe, ], - providers: [LocalizationPipe], + providers: [LocalizationPipe, provideHttpClient(withInterceptorsFromDi())], }) export class BaseCoreModule {} @@ -94,13 +96,14 @@ export class BaseCoreModule {} */ @NgModule({ exports: [BaseCoreModule, LocalizationModule], - imports: [ - BaseCoreModule, - LocalizationModule, - HttpClientXsrfModule.withOptions({ - cookieName: 'XSRF-TOKEN', - headerName: 'RequestVerificationToken', - }), + imports: [BaseCoreModule, LocalizationModule], + providers: [ + provideHttpClient( + withXsrfConfiguration({ + cookieName: 'XSRF-TOKEN', + headerName: 'RequestVerificationToken', + }), + ), ], }) export class RootCoreModule {} diff --git a/npm/ng-packs/packages/core/src/lib/models/environment.ts b/npm/ng-packs/packages/core/src/lib/models/environment.ts index 78a9294525..c67d4a687e 100644 --- a/npm/ng-packs/packages/core/src/lib/models/environment.ts +++ b/npm/ng-packs/packages/core/src/lib/models/environment.ts @@ -20,7 +20,7 @@ export interface ApplicationInfo { export interface HasAdditional { [key: string]: string; } -export interface ApiConfig extends Partial{ +export interface ApiConfig extends Partial { url: string; rootNamespace?: string; } diff --git a/npm/ng-packs/packages/core/src/lib/utils/generator-utils.ts b/npm/ng-packs/packages/core/src/lib/utils/generator-utils.ts index ed58ba97ef..5c75da0db0 100644 --- a/npm/ng-packs/packages/core/src/lib/utils/generator-utils.ts +++ b/npm/ng-packs/packages/core/src/lib/utils/generator-utils.ts @@ -1,3 +1,7 @@ +import { Injector } from '@angular/core'; +import { ABP } from '../models'; +import { ConfigStateService } from '../services'; + export function uuid(a?: any): string { return a ? (a ^ ((Math.random() * 16) >> (a / 4))).toString(16) @@ -16,7 +20,11 @@ export function generateHash(value: string): number { return hashed; } -export function generatePassword(length = 8) { +export function generatePassword(injector?: Injector, length = 8) { + if (injector) { + length = getRequiredPasswordLength(injector); + } + length = Math.min(Math.max(4, length), 128); const lowers = 'abcdefghjkmnpqrstuvwxyz'; @@ -39,3 +47,9 @@ export function generatePassword(length = 8) { return password.sort(() => 0.5 - Math.random()).join(''); } + +function getRequiredPasswordLength(injector: Injector) { + const configState = injector.get(ConfigStateService); + const passwordRules: ABP.Dictionary = configState.getSettings('Identity.Password'); + return Number(passwordRules['Abp.Identity.Password.RequiredLength']) || 8; +} diff --git a/npm/ng-packs/packages/feature-management/package.json b/npm/ng-packs/packages/feature-management/package.json index f680d72ae2..c0eb03d2c0 100644 --- a/npm/ng-packs/packages/feature-management/package.json +++ b/npm/ng-packs/packages/feature-management/package.json @@ -1,13 +1,13 @@ { "name": "@abp/ng.feature-management", - "version": "8.3.0-rc.1", + "version": "8.3.0", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.theme.shared": "~8.3.0-rc.1", + "@abp/ng.theme.shared": "~8.3.0", "tslib": "^2.0.0" }, "publishConfig": { diff --git a/npm/ng-packs/packages/generators/package.json b/npm/ng-packs/packages/generators/package.json index e07cb75756..28b79e08e7 100644 --- a/npm/ng-packs/packages/generators/package.json +++ b/npm/ng-packs/packages/generators/package.json @@ -1,6 +1,6 @@ { "name": "@abp/nx.generators", - "version": "8.3.0-rc.1", + "version": "8.3.0", "homepage": "https://abp.io", "generators": "./generators.json", "type": "commonjs", diff --git a/npm/ng-packs/packages/identity/package.json b/npm/ng-packs/packages/identity/package.json index 815b302d5d..cd2617105d 100644 --- a/npm/ng-packs/packages/identity/package.json +++ b/npm/ng-packs/packages/identity/package.json @@ -1,15 +1,15 @@ { "name": "@abp/ng.identity", - "version": "8.3.0-rc.1", + "version": "8.3.0", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.components": "~8.3.0-rc.1", - "@abp/ng.permission-management": "~8.3.0-rc.1", - "@abp/ng.theme.shared": "~8.3.0-rc.1", + "@abp/ng.components": "~8.3.0", + "@abp/ng.permission-management": "~8.3.0", + "@abp/ng.theme.shared": "~8.3.0", "tslib": "^2.0.0" }, "publishConfig": { diff --git a/npm/ng-packs/packages/oauth/package.json b/npm/ng-packs/packages/oauth/package.json index d49b559306..89b8ed1ad7 100644 --- a/npm/ng-packs/packages/oauth/package.json +++ b/npm/ng-packs/packages/oauth/package.json @@ -1,14 +1,14 @@ { "name": "@abp/ng.oauth", - "version": "8.3.0-rc.1", + "version": "8.3.0", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.core": "~8.3.0-rc.1", - "@abp/utils": "~8.3.0-rc.1", + "@abp/ng.core": "~8.3.0", + "@abp/utils": "~8.3.0", "angular-oauth2-oidc": "^17.0.0", "just-clone": "^6.0.0", "just-compare": "^2.0.0", diff --git a/npm/ng-packs/packages/permission-management/package.json b/npm/ng-packs/packages/permission-management/package.json index 5f6697d958..862c04870e 100644 --- a/npm/ng-packs/packages/permission-management/package.json +++ b/npm/ng-packs/packages/permission-management/package.json @@ -1,13 +1,13 @@ { "name": "@abp/ng.permission-management", - "version": "8.3.0-rc.1", + "version": "8.3.0", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.theme.shared": "~8.3.0-rc.1", + "@abp/ng.theme.shared": "~8.3.0", "tslib": "^2.0.0" }, "publishConfig": { diff --git a/npm/ng-packs/packages/permission-management/src/lib/components/permission-management.component.ts b/npm/ng-packs/packages/permission-management/src/lib/components/permission-management.component.ts index 8503a2bd81..8ad2fd2320 100644 --- a/npm/ng-packs/packages/permission-management/src/lib/components/permission-management.component.ts +++ b/npm/ng-packs/packages/permission-management/src/lib/components/permission-management.component.ts @@ -171,58 +171,74 @@ export class PermissionManagementComponent } onClickCheckbox(clickedPermission: PermissionGrantInfoDto) { - if ( - clickedPermission.isGranted && - this.isGrantedByOtherProviderName(clickedPermission.grantedProviders) - ) + const { isGranted, grantedProviders } = clickedPermission; + if (isGranted && this.isGrantedByOtherProviderName(grantedProviders)) { return; + } + this.setSelectedGroup(this.selectedGroup); setTimeout(() => { - this.permissions = this.permissions.map(per => { - if (clickedPermission.name === per.name) { - return { ...per, isGranted: !per.isGranted }; - } else if (clickedPermission.name === per.parentName && clickedPermission.isGranted) { - return { ...per, isGranted: false }; - } else if (clickedPermission.parentName === per.name && !clickedPermission.isGranted) { - return { ...per, isGranted: true }; - } - return per; - }); + this.updatePermissionStatus(clickedPermission); this.updateSelectedGroupPermissions(clickedPermission); + this.setParentClicked(clickedPermission); this.setTabCheckboxState(); this.setGrantCheckboxState(); - this.setParentClicked(clickedPermission); }, 0); } - setParentClicked(clickedPermissions: PermissionGrantInfoDto) { - let childPermissionGrantedCount = 0; - let parentPermission: PermissionGrantInfoDto; + updatePermissionStatus(clickedPermission: PermissionGrantInfoDto) { + this.permissions = this.permissions.map(permission => { + const isExactMatch = clickedPermission.name == permission.name; + const isParentOfPermission = clickedPermission.parentName === permission.name; + const isChildOfPermission = clickedPermission.name === permission.parentName; + + if (isExactMatch) { + return { ...permission, isGranted: !permission.isGranted }; + } + + if (isChildOfPermission && permission.isGranted) { + return { ...permission, isGranted: false }; + } + + if (isParentOfPermission && !permission.isGranted) { + return { ...permission, isGranted: true }; + } + + return permission; + }); + } + + setParentClicked(clickedPermission: PermissionGrantInfoDto) { + if (clickedPermission.parentName) { + const parentPermissions = findParentPermissions(this.permissions, clickedPermission); + if (parentPermissions.length > 0) { + const parentNames = new Set(parentPermissions.map(parent => parent.name)); - if (clickedPermissions.parentName) { - this.permissions.forEach(per => { - if (per.name === clickedPermissions.parentName) { - parentPermission = per; - } - }); - this.permissions.forEach(per => { - if (parentPermission.name === per.parentName) { - per.isGranted && childPermissionGrantedCount++; - } - }); - if (childPermissionGrantedCount === 1 && !parentPermission.isGranted) { this.permissions = this.permissions.map(per => { - if (per.name === parentPermission.name) { - per.isGranted = true; + let updatedIsGranted = per.isGranted; + + if (per.parentName === clickedPermission.name && !clickedPermission.isGranted) { + updatedIsGranted = false; + } + + if (parentNames.has(per.name)) { + updatedIsGranted = true; } - return per; + + return { ...per, isGranted: updatedIsGranted }; }); } return; } + this.permissions = this.permissions.map(per => { - if (per.parentName === clickedPermissions.name) { - per.isGranted = false; + const parents = findParentPermissions(this.permissions, per); + if (parents.length > 0) { + const rootParent = parents[parents.length - 1]; + + if (rootParent.name === clickedPermission.name && !rootParent.isGranted) { + return { ...per, isGranted: false }; + } } return per; }); @@ -238,13 +254,13 @@ export class PermissionManagementComponent } setTabCheckboxState() { - const selectableGroupPermissions = this.selectedGroupPermissions.filter(per => + const selectablePermissions = this.permissions.filter(per => per.grantedProviders.every(p => p.providerName === this.providerName), ); - const selectedPermissions = selectableGroupPermissions.filter(per => per.isGranted); + const selectedPermissions = selectablePermissions.filter(per => per.isGranted); const element = document.querySelector('#select-all-in-this-tabs') as any; - if (selectedPermissions.length === selectableGroupPermissions.length) { + if (selectedPermissions.length === selectablePermissions.length) { element.indeterminate = false; this.selectThisTab = true; } else if (selectedPermissions.length === 0) { @@ -387,6 +403,26 @@ export class PermissionManagementComponent } } +function findParentPermissions( + permissions: PermissionGrantInfoDto[], + permission: PermissionGrantInfoDto, +): PermissionGrantInfoDto[] { + const permissionMap = new Map(permissions.map(p => [p.name, p])); + let currentPermission = permissionMap.get(permission.name) ?? null; + const parentPermissions: PermissionGrantInfoDto[] = []; + + while (currentPermission && currentPermission.parentName) { + const parentPermission = permissionMap.get(currentPermission.parentName); + if (!parentPermission) { + break; + } + parentPermissions.push(parentPermission); + currentPermission = parentPermission; + } + + return parentPermissions; +} + function findMargin( permissions: PermissionGrantInfoDto[], permission: PermissionGrantInfoDto, diff --git a/npm/ng-packs/packages/schematics/.eslintrc.json b/npm/ng-packs/packages/schematics/.eslintrc.json index 15e5145560..a291bd52a8 100644 --- a/npm/ng-packs/packages/schematics/.eslintrc.json +++ b/npm/ng-packs/packages/schematics/.eslintrc.json @@ -29,13 +29,18 @@ "extends": ["plugin:@nx/typescript"], "rules": { "@typescript-eslint/no-non-null-assertion": "off", - "@typescript-eslint/no-empty-function": ["warn"] + "@typescript-eslint/no-empty-function": ["warn"], + "@typescript-eslint/no-extra-semi": "error", + "no-extra-semi": "off" } }, { "files": ["*.js", "*.jsx"], "extends": ["plugin:@nx/javascript"], - "rules": {} + "rules": { + "@typescript-eslint/no-extra-semi": "error", + "no-extra-semi": "off" + } }, { "files": ["*.html"], diff --git a/npm/ng-packs/packages/schematics/package.json b/npm/ng-packs/packages/schematics/package.json index 853ade2c71..edc2aadf71 100644 --- a/npm/ng-packs/packages/schematics/package.json +++ b/npm/ng-packs/packages/schematics/package.json @@ -1,19 +1,19 @@ { "name": "@abp/ng.schematics", - "version": "8.3.0-rc.1", + "version": "8.3.0", "author": "", "schematics": "./collection.json", "dependencies": { - "@angular-devkit/core": "~16.2.0", - "@angular-devkit/schematics": "~16.2.0", - "@angular/cli": "~16.2.0", + "@angular-devkit/core": "~18.1.0", + "@angular-devkit/schematics": "~18.1.0", + "@angular/cli": "~18.1.0", "got": "^11.5.2", "jsonc-parser": "^2.3.0", "should-quote": "^1.0.0", "typescript": "5.0.4" }, "devDependencies": { - "@schematics/angular": "~16.2.0", + "@schematics/angular": "~18.1.0", "@types/jest": "29.4.4", "@types/node": "20.2.5", "jest": "29.4.3", diff --git a/npm/ng-packs/packages/schematics/src/commands/change-theme/style-map.ts b/npm/ng-packs/packages/schematics/src/commands/change-theme/style-map.ts index 0b9f724e57..4bf4300a2b 100644 --- a/npm/ng-packs/packages/schematics/src/commands/change-theme/style-map.ts +++ b/npm/ng-packs/packages/schematics/src/commands/change-theme/style-map.ts @@ -196,6 +196,11 @@ styleMap.set(ThemeOptionsEnum.LeptonX, [ inject: true, bundleName: 'bootstrap-icons', }, + { + input: 'node_modules/ng-zorro-antd/tree/style/index.min.css', + inject: false, + bundleName: 'ng-zorro-antd-tree', + }, ]); styleMap.set(ThemeOptionsEnum.LeptonXLite, [ { diff --git a/npm/ng-packs/packages/setting-management/package.json b/npm/ng-packs/packages/setting-management/package.json index 7df44f7c0d..2e04e52d72 100644 --- a/npm/ng-packs/packages/setting-management/package.json +++ b/npm/ng-packs/packages/setting-management/package.json @@ -1,14 +1,14 @@ { "name": "@abp/ng.setting-management", - "version": "8.3.0-rc.1", + "version": "8.3.0", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.components": "~8.3.0-rc.1", - "@abp/ng.theme.shared": "~8.3.0-rc.1", + "@abp/ng.components": "~8.3.0", + "@abp/ng.theme.shared": "~8.3.0", "tslib": "^2.0.0" }, "publishConfig": { diff --git a/npm/ng-packs/packages/tenant-management/package.json b/npm/ng-packs/packages/tenant-management/package.json index 8452ab67b5..d4923aac88 100644 --- a/npm/ng-packs/packages/tenant-management/package.json +++ b/npm/ng-packs/packages/tenant-management/package.json @@ -1,14 +1,14 @@ { "name": "@abp/ng.tenant-management", - "version": "8.3.0-rc.1", + "version": "8.3.0", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.feature-management": "~8.3.0-rc.1", - "@abp/ng.theme.shared": "~8.3.0-rc.1", + "@abp/ng.feature-management": "~8.3.0", + "@abp/ng.theme.shared": "~8.3.0", "tslib": "^2.0.0" }, "publishConfig": { diff --git a/npm/ng-packs/packages/theme-basic/package.json b/npm/ng-packs/packages/theme-basic/package.json index 37a0449ac4..4685fdff0f 100644 --- a/npm/ng-packs/packages/theme-basic/package.json +++ b/npm/ng-packs/packages/theme-basic/package.json @@ -1,14 +1,14 @@ { "name": "@abp/ng.theme.basic", - "version": "8.3.0-rc.1", + "version": "8.3.0", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.account.core": "~8.3.0-rc.1", - "@abp/ng.theme.shared": "~8.3.0-rc.1", + "@abp/ng.account.core": "~8.3.0", + "@abp/ng.theme.shared": "~8.3.0", "tslib": "^2.0.0" }, "publishConfig": { diff --git a/npm/ng-packs/packages/theme-basic/src/lib/components/nav-items/current-user.component.html b/npm/ng-packs/packages/theme-basic/src/lib/components/nav-items/current-user.component.html index 2559e52161..0da02b7fe3 100644 --- a/npm/ng-packs/packages/theme-basic/src/lib/components/nav-items/current-user.component.html +++ b/npm/ng-packs/packages/theme-basic/src/lib/components/nav-items/current-user.component.html @@ -56,9 +56,7 @@ } @else { - - {{ - 'AbpAccount::Login' | abpLocalization - }} - + + {{ 'AbpAccount::Login' | abpLocalization }} + } diff --git a/npm/ng-packs/packages/theme-shared/package.json b/npm/ng-packs/packages/theme-shared/package.json index e3584aef35..73ae5ab3fa 100644 --- a/npm/ng-packs/packages/theme-shared/package.json +++ b/npm/ng-packs/packages/theme-shared/package.json @@ -1,13 +1,13 @@ { "name": "@abp/ng.theme.shared", - "version": "8.3.0-rc.1", + "version": "8.3.0", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.core": "~8.3.0-rc.1", + "@abp/ng.core": "~8.3.0", "@fortawesome/fontawesome-free": "^5.15.4", "@ng-bootstrap/ng-bootstrap": "~16.0.0", "@ngx-validate/core": "^0.2.0", diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.html b/npm/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.html index 0f123fdadd..74e4f72a0a 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.html +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.html @@ -1,11 +1,11 @@
- +
@if (toast.options?.closable) { }
diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.scss b/npm/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.scss index b4966c310d..b4be48fb95 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.scss +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.scss @@ -14,35 +14,39 @@ $toastClass: abp-toast; .#{$toastClass} { display: grid; - grid-template-columns: 50px 1fr; - gap: 10px; + grid-template-columns: 35px 1fr; + gap: 5px; margin: 5px 0; - padding: 10px; - border-radius: 0px; + padding: 7px; width: 350px; user-select: none; box-shadow: 0 0 10px -5px rgba(#000, 0.4); z-index: 9999; + color: #fff; + border-radius: 8px; + font-size: 14px; + box-shadow: 0 0 20px 0 rgba(76, 87, 125, 0.02); + @include fillColor(#f0f0f0, #000); opacity: 1; &.#{$toastClass}-success { - @include fillColor(#51a351, #fff); + @include fillColor(#4fbf67, #fff); } &.#{$toastClass}-info { - @include fillColor(#2f96b4, #fff); + @include fillColor(#438aa7, #fff); } &.#{$toastClass}-warning { - @include fillColor(#f89406, #fff); + @include fillColor(#ff9f38, #fff); } &.#{$toastClass}-error { - @include fillColor(#bd362f, #fff); + @include fillColor(#c00d49, #fff); } .#{$toastClass}-icon { display: flex; align-items: center; justify-content: center; .icon { - font-size: 36px; + font-size: 32px; } } .#{$toastClass}-content { @@ -51,6 +55,8 @@ $toastClass: abp-toast; align-self: center; flex-direction: column; word-break: break-word; + padding-bottom: 2px; + .#{$toastClass}-close-button { position: absolute; top: 0; @@ -61,7 +67,7 @@ $toastClass: abp-toast; margin: 0; padding: 0px 5px 0 0; width: 25px; - height: 25px; + height: 100%; border: none; border-radius: 50%; background: transparent; diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.ts index 4d842df02a..b528d490a4 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.ts @@ -18,22 +18,22 @@ export class ToastComponent implements OnInit { get iconClass(): string { const { iconClass } = this.toast.options || {}; - + if (iconClass) { return iconClass; } switch (this.toast.severity) { case 'success': - return 'fa-check-circle'; + return 'bi-check'; case 'info': - return 'fa-info-circle'; + return 'bi-info-circle'; case 'warning': - return 'fa-exclamation-triangle'; + return 'bi-exclamation-triangle'; case 'error': - return 'fa-times-circle'; + return 'bi-shield-exclamation'; default: - return 'fa-exclamation-circle'; + return 'bi-exclamation-triangle'; } } diff --git a/npm/packs/anchor-js/package.json b/npm/packs/anchor-js/package.json index e779e6ac5e..fd89d404e0 100644 --- a/npm/packs/anchor-js/package.json +++ b/npm/packs/anchor-js/package.json @@ -1,11 +1,11 @@ { - "version": "8.3.0-rc.1", + "version": "8.3.0", "name": "@abp/anchor-js", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~8.3.0-rc.1", + "@abp/core": "~8.3.0", "anchor-js": "^5.0.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/aspnetcore.components.server.basictheme/package.json b/npm/packs/aspnetcore.components.server.basictheme/package.json index 8a13d0ef61..0012af2931 100644 --- a/npm/packs/aspnetcore.components.server.basictheme/package.json +++ b/npm/packs/aspnetcore.components.server.basictheme/package.json @@ -1,11 +1,11 @@ { - "version": "8.3.0-rc.1", + "version": "8.3.0", "name": "@abp/aspnetcore.components.server.basictheme", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/aspnetcore.components.server.theming": "~8.3.0-rc.1" + "@abp/aspnetcore.components.server.theming": "~8.3.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", "homepage": "https://abp.io", diff --git a/npm/packs/aspnetcore.components.server.theming/package.json b/npm/packs/aspnetcore.components.server.theming/package.json index e9992d9366..33703c8b11 100644 --- a/npm/packs/aspnetcore.components.server.theming/package.json +++ b/npm/packs/aspnetcore.components.server.theming/package.json @@ -1,12 +1,12 @@ { - "version": "8.3.0-rc.1", + "version": "8.3.0", "name": "@abp/aspnetcore.components.server.theming", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/bootstrap": "~8.3.0-rc.1", - "@abp/font-awesome": "~8.3.0-rc.1" + "@abp/bootstrap": "~8.3.0", + "@abp/font-awesome": "~8.3.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", "homepage": "https://abp.io", diff --git a/npm/packs/aspnetcore.mvc.ui.theme.basic/package.json b/npm/packs/aspnetcore.mvc.ui.theme.basic/package.json index 218b4f6768..3f07ddc20a 100644 --- a/npm/packs/aspnetcore.mvc.ui.theme.basic/package.json +++ b/npm/packs/aspnetcore.mvc.ui.theme.basic/package.json @@ -1,5 +1,5 @@ { - "version": "8.3.0-rc.1", + "version": "8.3.0", "name": "@abp/aspnetcore.mvc.ui.theme.basic", "repository": { "type": "git", @@ -10,7 +10,7 @@ "access": "public" }, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.shared": "~8.3.0-rc.1" + "@abp/aspnetcore.mvc.ui.theme.shared": "~8.3.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", "homepage": "https://abp.io", diff --git a/npm/packs/aspnetcore.mvc.ui.theme.shared/package.json b/npm/packs/aspnetcore.mvc.ui.theme.shared/package.json index 14ab233449..a413a66478 100644 --- a/npm/packs/aspnetcore.mvc.ui.theme.shared/package.json +++ b/npm/packs/aspnetcore.mvc.ui.theme.shared/package.json @@ -1,5 +1,5 @@ { - "version": "8.3.0-rc.1", + "version": "8.3.0", "name": "@abp/aspnetcore.mvc.ui.theme.shared", "repository": { "type": "git", @@ -10,22 +10,22 @@ "access": "public" }, "dependencies": { - "@abp/aspnetcore.mvc.ui": "~8.3.0-rc.1", - "@abp/bootstrap": "~8.3.0-rc.1", - "@abp/bootstrap-datepicker": "~8.3.0-rc.1", - "@abp/bootstrap-daterangepicker": "~8.3.0-rc.1", - "@abp/datatables.net-bs5": "~8.3.0-rc.1", - "@abp/font-awesome": "~8.3.0-rc.1", - "@abp/jquery-form": "~8.3.0-rc.1", - "@abp/jquery-validation-unobtrusive": "~8.3.0-rc.1", - "@abp/lodash": "~8.3.0-rc.1", - "@abp/luxon": "~8.3.0-rc.1", - "@abp/malihu-custom-scrollbar-plugin": "~8.3.0-rc.1", - "@abp/moment": "~8.3.0-rc.1", - "@abp/select2": "~8.3.0-rc.1", - "@abp/sweetalert2": "~8.3.0-rc.1", - "@abp/timeago": "~8.3.0-rc.1", - "@abp/toastr": "~8.3.0-rc.1" + "@abp/aspnetcore.mvc.ui": "~8.3.0", + "@abp/bootstrap": "~8.3.0", + "@abp/bootstrap-datepicker": "~8.3.0", + "@abp/bootstrap-daterangepicker": "~8.3.0", + "@abp/datatables.net-bs5": "~8.3.0", + "@abp/font-awesome": "~8.3.0", + "@abp/jquery-form": "~8.3.0", + "@abp/jquery-validation-unobtrusive": "~8.3.0", + "@abp/lodash": "~8.3.0", + "@abp/luxon": "~8.3.0", + "@abp/malihu-custom-scrollbar-plugin": "~8.3.0", + "@abp/moment": "~8.3.0", + "@abp/select2": "~8.3.0", + "@abp/sweetalert2": "~8.3.0", + "@abp/timeago": "~8.3.0", + "@abp/toastr": "~8.3.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", "homepage": "https://abp.io", diff --git a/npm/packs/aspnetcore.mvc.ui/package-lock.json b/npm/packs/aspnetcore.mvc.ui/package-lock.json index d4f43717ea..7f2e9dafab 100644 --- a/npm/packs/aspnetcore.mvc.ui/package-lock.json +++ b/npm/packs/aspnetcore.mvc.ui/package-lock.json @@ -1,6 +1,6 @@ { "name": "@abp/aspnetcore.mvc.ui", - "version": "8.3.0-rc.1", + "version": "8.3.0", "lockfileVersion": 1, "requires": true, "packages": { diff --git a/npm/packs/aspnetcore.mvc.ui/package.json b/npm/packs/aspnetcore.mvc.ui/package.json index 92d0d801cb..65e95b0e54 100644 --- a/npm/packs/aspnetcore.mvc.ui/package.json +++ b/npm/packs/aspnetcore.mvc.ui/package.json @@ -1,5 +1,5 @@ { - "version": "8.3.0-rc.1", + "version": "8.3.0", "name": "@abp/aspnetcore.mvc.ui", "repository": { "type": "git", diff --git a/npm/packs/blogging/package.json b/npm/packs/blogging/package.json index cfdc253ade..2ef191542f 100644 --- a/npm/packs/blogging/package.json +++ b/npm/packs/blogging/package.json @@ -1,14 +1,14 @@ { - "version": "8.3.0-rc.1", + "version": "8.3.0", "name": "@abp/blogging", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.shared": "~8.3.0-rc.1", - "@abp/owl.carousel": "~8.3.0-rc.1", - "@abp/prismjs": "~8.3.0-rc.1", - "@abp/tui-editor": "~8.3.0-rc.1" + "@abp/aspnetcore.mvc.ui.theme.shared": "~8.3.0", + "@abp/owl.carousel": "~8.3.0", + "@abp/prismjs": "~8.3.0", + "@abp/tui-editor": "~8.3.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", "homepage": "https://abp.io", diff --git a/npm/packs/bootstrap-datepicker/package.json b/npm/packs/bootstrap-datepicker/package.json index 40fe4b5f89..ca23ca04c7 100644 --- a/npm/packs/bootstrap-datepicker/package.json +++ b/npm/packs/bootstrap-datepicker/package.json @@ -1,5 +1,5 @@ { - "version": "8.3.0-rc.1", + "version": "8.3.0", "name": "@abp/bootstrap-datepicker", "repository": { "type": "git", diff --git a/npm/packs/bootstrap-daterangepicker/abp.resourcemapping.js b/npm/packs/bootstrap-daterangepicker/abp.resourcemapping.js index 13782bb12a..b82d1e94b3 100644 --- a/npm/packs/bootstrap-daterangepicker/abp.resourcemapping.js +++ b/npm/packs/bootstrap-daterangepicker/abp.resourcemapping.js @@ -1,6 +1,6 @@ module.exports = { mappings: { - "@node_modules/bootstrap-daterangepicker/daterangepicker.js": "@libs/bootstrap-daterangepicker/", + "@node_modules/@abp/bootstrap-daterangepicker/src/daterangepicker.js": "@libs/bootstrap-daterangepicker/", "@node_modules/bootstrap-daterangepicker/daterangepicker.css": "@libs/bootstrap-daterangepicker/", } } \ No newline at end of file diff --git a/npm/packs/bootstrap-daterangepicker/package.json b/npm/packs/bootstrap-daterangepicker/package.json index b2ec2177eb..4c21c29f88 100644 --- a/npm/packs/bootstrap-daterangepicker/package.json +++ b/npm/packs/bootstrap-daterangepicker/package.json @@ -1,5 +1,5 @@ { - "version": "8.3.0-rc.1", + "version": "8.3.0", "name": "@abp/bootstrap-daterangepicker", "repository": { "type": "git", diff --git a/npm/packs/bootstrap-daterangepicker/src/daterangepicker.js b/npm/packs/bootstrap-daterangepicker/src/daterangepicker.js new file mode 100644 index 0000000000..6a49382f5b --- /dev/null +++ b/npm/packs/bootstrap-daterangepicker/src/daterangepicker.js @@ -0,0 +1,1576 @@ +/** +* @version: 3.1 +* @author: Dan Grossman http://www.dangrossman.info/ +* @copyright: Copyright (c) 2012-2019 Dan Grossman. All rights reserved. +* @license: Licensed under the MIT license. See http://www.opensource.org/licenses/mit-license.php +* @website: http://www.daterangepicker.com/ +*/ +// Following the UMD template https://github.com/umdjs/umd/blob/master/templates/returnExportsGlobal.js +(function (root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Make globaly available as well + define(['moment', 'jquery'], function (moment, jquery) { + if (!jquery.fn) jquery.fn = {}; // webpack server rendering + if (typeof moment !== 'function' && moment.hasOwnProperty('default')) moment = moment['default'] + return factory(moment, jquery); + }); + } else if (typeof module === 'object' && module.exports) { + // Node / Browserify + //isomorphic issue + var jQuery = (typeof window != 'undefined') ? window.jQuery : undefined; + if (!jQuery) { + jQuery = require('jquery'); + if (!jQuery.fn) jQuery.fn = {}; + } + var moment = (typeof window != 'undefined' && typeof window.moment != 'undefined') ? window.moment : require('moment'); + module.exports = factory(moment, jQuery); + } else { + // Browser globals + root.daterangepicker = factory(root.moment, root.jQuery); + } +}(this, function(moment, $) { + var DateRangePicker = function(element, options, cb) { + + //default settings for options + this.parentEl = 'body'; + this.element = $(element); + this.startDate = moment().startOf('day'); + this.endDate = moment().endOf('day'); + this.minDate = false; + this.maxDate = false; + this.maxSpan = false; + this.autoApply = false; + this.singleDatePicker = false; + this.showDropdowns = false; + this.minYear = moment().subtract(100, 'year').format('YYYY'); + this.maxYear = moment().add(100, 'year').format('YYYY'); + this.showWeekNumbers = false; + this.showISOWeekNumbers = false; + this.showCustomRangeLabel = true; + this.timePicker = false; + this.timePicker24Hour = false; + this.timePickerIncrement = 1; + this.timePickerSeconds = false; + this.linkedCalendars = true; + this.autoUpdateInput = true; + this.alwaysShowCalendars = false; + this.ranges = {}; + + this.opens = 'right'; + if (this.element.hasClass('pull-right')) + this.opens = 'left'; + + this.drops = 'down'; + if (this.element.hasClass('dropup')) + this.drops = 'up'; + + this.buttonClasses = 'btn btn-sm'; + this.applyButtonClasses = 'btn-primary'; + this.cancelButtonClasses = 'btn-default'; + + this.locale = { + direction: 'ltr', + format: moment.localeData().longDateFormat('L'), + separator: ' - ', + applyLabel: 'Apply', + cancelLabel: 'Cancel', + weekLabel: 'W', + customRangeLabel: 'Custom Range', + daysOfWeek: moment.weekdaysMin(), + monthNames: moment.monthsShort(), + firstDay: moment.localeData().firstDayOfWeek() + }; + + this.callback = function() { }; + + //some state information + this.isShowing = false; + this.leftCalendar = {}; + this.rightCalendar = {}; + + //custom options from user + if (typeof options !== 'object' || options === null) + options = {}; + + //allow setting options with data attributes + //data-api options will be overwritten with custom javascript options + options = $.extend(this.element.data(), options); + + //html template for the picker UI + if (typeof options.template !== 'string' && !(options.template instanceof $)) + options.template = + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '' + + '' + + ' ' + + '
' + + '
'; + + this.parentEl = (options.parentEl && $(options.parentEl).length) ? $(options.parentEl) : $(this.parentEl); + this.container = $(options.template).appendTo(this.parentEl); + + // + // handle all the possible options overriding defaults + // + + if (typeof options.locale === 'object') { + + if (typeof options.locale.direction === 'string') + this.locale.direction = options.locale.direction; + + if (typeof options.locale.format === 'string') + this.locale.format = options.locale.format; + + if (typeof options.locale.separator === 'string') + this.locale.separator = options.locale.separator; + + if (typeof options.locale.daysOfWeek === 'object') + this.locale.daysOfWeek = options.locale.daysOfWeek.slice(); + + if (typeof options.locale.monthNames === 'object') + this.locale.monthNames = options.locale.monthNames.slice(); + + if (typeof options.locale.firstDay === 'number') + this.locale.firstDay = options.locale.firstDay; + + if (typeof options.locale.applyLabel === 'string') + this.locale.applyLabel = options.locale.applyLabel; + + if (typeof options.locale.cancelLabel === 'string') + this.locale.cancelLabel = options.locale.cancelLabel; + + if (typeof options.locale.weekLabel === 'string') + this.locale.weekLabel = options.locale.weekLabel; + + if (typeof options.locale.customRangeLabel === 'string'){ + //Support unicode chars in the custom range name. + var elem = document.createElement('textarea'); + elem.innerHTML = options.locale.customRangeLabel; + var rangeHtml = elem.value; + this.locale.customRangeLabel = rangeHtml; + } + } + this.container.addClass(this.locale.direction); + + if (typeof options.startDate === 'string') + this.startDate = moment(options.startDate, this.locale.format); + + if (typeof options.endDate === 'string') + this.endDate = moment(options.endDate, this.locale.format); + + if (typeof options.minDate === 'string') + this.minDate = moment(options.minDate, this.locale.format); + + if (typeof options.maxDate === 'string') + this.maxDate = moment(options.maxDate, this.locale.format); + + if (typeof options.startDate === 'object') + this.startDate = moment(options.startDate); + + if (typeof options.endDate === 'object') + this.endDate = moment(options.endDate); + + if (typeof options.minDate === 'object') + this.minDate = moment(options.minDate); + + if (typeof options.maxDate === 'object') + this.maxDate = moment(options.maxDate); + + // sanity check for bad options + if (this.minDate && this.startDate.isBefore(this.minDate)) + this.startDate = this.minDate.clone(); + + // sanity check for bad options + if (this.maxDate && this.endDate.isAfter(this.maxDate)) + this.endDate = this.maxDate.clone(); + + if (typeof options.applyButtonClasses === 'string') + this.applyButtonClasses = options.applyButtonClasses; + + if (typeof options.applyClass === 'string') //backwards compat + this.applyButtonClasses = options.applyClass; + + if (typeof options.cancelButtonClasses === 'string') + this.cancelButtonClasses = options.cancelButtonClasses; + + if (typeof options.cancelClass === 'string') //backwards compat + this.cancelButtonClasses = options.cancelClass; + + if (typeof options.maxSpan === 'object') + this.maxSpan = options.maxSpan; + + if (typeof options.dateLimit === 'object') //backwards compat + this.maxSpan = options.dateLimit; + + if (typeof options.opens === 'string') + this.opens = options.opens; + + if (typeof options.drops === 'string') + this.drops = options.drops; + + if (typeof options.showWeekNumbers === 'boolean') + this.showWeekNumbers = options.showWeekNumbers; + + if (typeof options.showISOWeekNumbers === 'boolean') + this.showISOWeekNumbers = options.showISOWeekNumbers; + + if (typeof options.buttonClasses === 'string') + this.buttonClasses = options.buttonClasses; + + if (typeof options.buttonClasses === 'object') + this.buttonClasses = options.buttonClasses.join(' '); + + if (typeof options.showDropdowns === 'boolean') + this.showDropdowns = options.showDropdowns; + + if (typeof options.minYear === 'number') + this.minYear = options.minYear; + + if (typeof options.maxYear === 'number') + this.maxYear = options.maxYear; + + if (typeof options.showCustomRangeLabel === 'boolean') + this.showCustomRangeLabel = options.showCustomRangeLabel; + + if (typeof options.singleDatePicker === 'boolean') { + this.singleDatePicker = options.singleDatePicker; + if (this.singleDatePicker) + this.endDate = this.startDate.clone(); + } + + if (typeof options.timePicker === 'boolean') + this.timePicker = options.timePicker; + + if (typeof options.timePickerSeconds === 'boolean') + this.timePickerSeconds = options.timePickerSeconds; + + if (typeof options.timePickerIncrement === 'number') + this.timePickerIncrement = options.timePickerIncrement; + + if (typeof options.timePicker24Hour === 'boolean') + this.timePicker24Hour = options.timePicker24Hour; + + if (typeof options.autoApply === 'boolean') + this.autoApply = options.autoApply; + + if (typeof options.autoUpdateInput === 'boolean') + this.autoUpdateInput = options.autoUpdateInput; + + if (typeof options.linkedCalendars === 'boolean') + this.linkedCalendars = options.linkedCalendars; + + if (typeof options.isInvalidDate === 'function') + this.isInvalidDate = options.isInvalidDate; + + if (typeof options.isCustomDate === 'function') + this.isCustomDate = options.isCustomDate; + + if (typeof options.alwaysShowCalendars === 'boolean') + this.alwaysShowCalendars = options.alwaysShowCalendars; + + // update day names order to firstDay + if (this.locale.firstDay != 0) { + var iterator = this.locale.firstDay; + while (iterator > 0) { + this.locale.daysOfWeek.push(this.locale.daysOfWeek.shift()); + iterator--; + } + } + + var start, end, range; + + //if no start/end dates set, check if an input element contains initial values + if (typeof options.startDate === 'undefined' && typeof options.endDate === 'undefined') { + if ($(this.element).is(':text')) { + var val = $(this.element).val(), + split = val.split(this.locale.separator); + + start = end = null; + + if (split.length == 2) { + start = moment(split[0], this.locale.format); + end = moment(split[1], this.locale.format); + } else if (this.singleDatePicker && val !== "") { + start = moment(val, this.locale.format); + end = moment(val, this.locale.format); + } + if (start !== null && end !== null) { + this.setStartDate(start.startOf('day')); + this.setEndDate(end.startOf('day')); + } + } + } + + if (typeof options.ranges === 'object') { + for (range in options.ranges) { + + if (typeof options.ranges[range][0] === 'string') + start = moment(options.ranges[range][0], this.locale.format); + else + start = moment(options.ranges[range][0]); + + if (typeof options.ranges[range][1] === 'string') + end = moment(options.ranges[range][1], this.locale.format); + else + end = moment(options.ranges[range][1]); + + // If the start or end date exceed those allowed by the minDate or maxSpan + // options, shorten the range to the allowable period. + if (this.minDate && start.isBefore(this.minDate)) + start = this.minDate.clone(); + + var maxDate = this.maxDate; + if (this.maxSpan && maxDate && start.clone().add(this.maxSpan).isAfter(maxDate)) + maxDate = start.clone().add(this.maxSpan); + if (maxDate && end.isAfter(maxDate)) + end = maxDate.clone(); + + // If the end of the range is before the minimum or the start of the range is + // after the maximum, don't display this range option at all. + if ((this.minDate && end.isBefore(this.minDate, this.timepicker ? 'minute' : 'day')) + || (maxDate && start.isAfter(maxDate, this.timepicker ? 'minute' : 'day'))) + continue; + + //Support unicode chars in the range names. + var elem = document.createElement('textarea'); + elem.innerHTML = range; + var rangeHtml = elem.value; + + this.ranges[rangeHtml] = [start, end]; + } + + var list = '
    '; + for (range in this.ranges) { + list += '
  • ' + range + '
  • '; + } + if (this.showCustomRangeLabel) { + list += '
  • ' + this.locale.customRangeLabel + '
  • '; + } + list += '
'; + this.container.find('.ranges').prepend(list); + } + + if (typeof cb === 'function') { + this.callback = cb; + } + + if (!this.timePicker) { + this.startDate = this.startDate.startOf('day'); + this.endDate = this.endDate.endOf('day'); + this.container.find('.calendar-time').hide(); + } + + if (this.autoApply) { + this.container.addClass('auto-apply'); + } + + if (typeof options.ranges === 'object') + this.container.addClass('show-ranges'); + + if (this.singleDatePicker) { + this.container.addClass('single'); + this.container.find('.drp-calendar.left').addClass('single'); + this.container.find('.drp-calendar.left').show(); + this.container.find('.drp-calendar.right').hide(); + + } + + if ((typeof options.ranges === 'undefined' && !this.singleDatePicker) || this.alwaysShowCalendars) { + this.container.addClass('show-calendar'); + } + + this.container.addClass('opens' + this.opens); + + //apply CSS classes and labels to buttons + this.container.find('.applyBtn, .cancelBtn').addClass(this.buttonClasses); + if (this.applyButtonClasses.length) + this.container.find('.applyBtn').addClass(this.applyButtonClasses); + if (this.cancelButtonClasses.length) + this.container.find('.cancelBtn').addClass(this.cancelButtonClasses); + this.container.find('.applyBtn').html(this.locale.applyLabel); + this.container.find('.cancelBtn').html(this.locale.cancelLabel); + + // + // event listeners + // + + this.container.find('.drp-calendar') + .on('click.daterangepicker', '.prev', $.proxy(this.clickPrev, this)) + .on('click.daterangepicker', '.next', $.proxy(this.clickNext, this)) + .on('mousedown.daterangepicker', 'td.available', $.proxy(this.clickDate, this)) + .on('mouseenter.daterangepicker', 'td.available', $.proxy(this.hoverDate, this)) + .on('change.daterangepicker', 'select.yearselect', $.proxy(this.monthOrYearChanged, this)) + .on('change.daterangepicker', 'select.monthselect', $.proxy(this.monthOrYearChanged, this)) + .on('change.daterangepicker', 'select.hourselect,select.minuteselect,select.secondselect,select.ampmselect', $.proxy(this.timeChanged, this)); + + this.container.find('.ranges') + .on('click.daterangepicker', 'li', $.proxy(this.clickRange, this)); + + this.container.find('.drp-buttons') + .on('click.daterangepicker', 'button.applyBtn', $.proxy(this.clickApply, this)) + .on('click.daterangepicker', 'button.cancelBtn', $.proxy(this.clickCancel, this)); + + if (this.element.is('input') || this.element.is('button')) { + this.element.on({ + 'click.daterangepicker': $.proxy(this.show, this), + 'focus.daterangepicker': $.proxy(this.show, this), + 'keyup.daterangepicker': $.proxy(this.elementChanged, this), + 'keydown.daterangepicker': $.proxy(this.keydown, this) //IE 11 compatibility + }); + } else { + this.element.on('click.daterangepicker', $.proxy(this.toggle, this)); + this.element.on('keydown.daterangepicker', $.proxy(this.toggle, this)); + } + + // + // if attached to a text input, set the initial value + // + + this.updateElement(); + + }; + + DateRangePicker.prototype = { + + constructor: DateRangePicker, + + setStartDate: function(startDate) { + if (typeof startDate === 'string') + this.startDate = moment(startDate, this.locale.format); + + if (typeof startDate === 'object') + this.startDate = moment(startDate); + + if (!this.timePicker) + this.startDate = this.startDate.startOf('day'); + + if (this.timePicker && this.timePickerIncrement) + this.startDate.minute(Math.round(this.startDate.minute() / this.timePickerIncrement) * this.timePickerIncrement); + + if (this.minDate && this.startDate.isBefore(this.minDate)) { + this.startDate = this.minDate.clone(); + if (this.timePicker && this.timePickerIncrement) + this.startDate.minute(Math.round(this.startDate.minute() / this.timePickerIncrement) * this.timePickerIncrement); + } + + if (this.maxDate && this.startDate.isAfter(this.maxDate)) { + this.startDate = this.maxDate.clone(); + if (this.timePicker && this.timePickerIncrement) + this.startDate.minute(Math.floor(this.startDate.minute() / this.timePickerIncrement) * this.timePickerIncrement); + } + + if (!this.isShowing) + this.updateElement(); + + this.updateMonthsInView(); + }, + + setEndDate: function(endDate) { + if (typeof endDate === 'string') + this.endDate = moment(endDate, this.locale.format); + + if (typeof endDate === 'object') + this.endDate = moment(endDate); + + if (!this.timePicker) + this.endDate = this.endDate.endOf('day'); + + if (this.timePicker && this.timePickerIncrement) + this.endDate.minute(Math.round(this.endDate.minute() / this.timePickerIncrement) * this.timePickerIncrement); + + if (this.endDate.isBefore(this.startDate)) + this.endDate = this.startDate.clone(); + + if (this.maxDate && this.endDate.isAfter(this.maxDate)) + this.endDate = this.maxDate.clone(); + + if (this.maxSpan && this.startDate.clone().add(this.maxSpan).isBefore(this.endDate)) + this.endDate = this.startDate.clone().add(this.maxSpan); + + this.previousRightTime = this.endDate.clone(); + + this.container.find('.drp-selected').html(this.startDate.format(this.locale.format) + this.locale.separator + this.endDate.format(this.locale.format)); + + if (!this.isShowing) + this.updateElement(); + + this.updateMonthsInView(); + }, + + isInvalidDate: function() { + return false; + }, + + isCustomDate: function() { + return false; + }, + + updateView: function() { + if (this.timePicker) { + this.renderTimePicker('left'); + this.renderTimePicker('right'); + if (!this.endDate) { + this.container.find('.right .calendar-time select').prop('disabled', true).addClass('disabled'); + } else { + this.container.find('.right .calendar-time select').prop('disabled', false).removeClass('disabled'); + } + } + if (this.endDate) + this.container.find('.drp-selected').html(this.startDate.format(this.locale.format) + this.locale.separator + this.endDate.format(this.locale.format)); + this.updateMonthsInView(); + this.updateCalendars(); + this.updateFormInputs(); + }, + + updateMonthsInView: function() { + if (this.endDate) { + + //if both dates are visible already, do nothing + if (!this.singleDatePicker && this.leftCalendar.month && this.rightCalendar.month && + (this.startDate.format('YYYY-MM') == this.leftCalendar.month.format('YYYY-MM') || this.startDate.format('YYYY-MM') == this.rightCalendar.month.format('YYYY-MM')) + && + (this.endDate.format('YYYY-MM') == this.leftCalendar.month.format('YYYY-MM') || this.endDate.format('YYYY-MM') == this.rightCalendar.month.format('YYYY-MM')) + ) { + return; + } + + this.leftCalendar.month = this.startDate.clone().date(2); + if (!this.linkedCalendars && (this.endDate.month() != this.startDate.month() || this.endDate.year() != this.startDate.year())) { + this.rightCalendar.month = this.endDate.clone().date(2); + } else { + this.rightCalendar.month = this.startDate.clone().date(2).add(1, 'month'); + } + + } else { + if (this.leftCalendar.month.format('YYYY-MM') != this.startDate.format('YYYY-MM') && this.rightCalendar.month.format('YYYY-MM') != this.startDate.format('YYYY-MM')) { + this.leftCalendar.month = this.startDate.clone().date(2); + this.rightCalendar.month = this.startDate.clone().date(2).add(1, 'month'); + } + } + if (this.maxDate && this.linkedCalendars && !this.singleDatePicker && this.rightCalendar.month > this.maxDate) { + this.rightCalendar.month = this.maxDate.clone().date(2); + this.leftCalendar.month = this.maxDate.clone().date(2).subtract(1, 'month'); + } + }, + + updateCalendars: function() { + + if (this.timePicker) { + var hour, minute, second; + if (this.endDate) { + hour = parseInt(this.container.find('.left .hourselect').val(), 10); + minute = parseInt(this.container.find('.left .minuteselect').val(), 10); + if (isNaN(minute)) { + minute = parseInt(this.container.find('.left .minuteselect option:last').val(), 10); + } + second = this.timePickerSeconds ? parseInt(this.container.find('.left .secondselect').val(), 10) : 0; + if (!this.timePicker24Hour) { + var ampm = this.container.find('.left .ampmselect').val(); + if (ampm === 'PM' && hour < 12) + hour += 12; + if (ampm === 'AM' && hour === 12) + hour = 0; + } + } else { + hour = parseInt(this.container.find('.right .hourselect').val(), 10); + minute = parseInt(this.container.find('.right .minuteselect').val(), 10); + if (isNaN(minute)) { + minute = parseInt(this.container.find('.right .minuteselect option:last').val(), 10); + } + second = this.timePickerSeconds ? parseInt(this.container.find('.right .secondselect').val(), 10) : 0; + if (!this.timePicker24Hour) { + var ampm = this.container.find('.right .ampmselect').val(); + if (ampm === 'PM' && hour < 12) + hour += 12; + if (ampm === 'AM' && hour === 12) + hour = 0; + } + } + this.leftCalendar.month.hour(hour).minute(minute).second(second); + this.rightCalendar.month.hour(hour).minute(minute).second(second); + } + + this.renderCalendar('left'); + this.renderCalendar('right'); + + //highlight any predefined range matching the current start and end dates + this.container.find('.ranges li').removeClass('active'); + if (this.endDate == null) return; + + this.calculateChosenLabel(); + }, + + renderCalendar: function(side) { + + // + // Build the matrix of dates that will populate the calendar + // + + var calendar = side == 'left' ? this.leftCalendar : this.rightCalendar; + var month = calendar.month.month(); + var year = calendar.month.year(); + var hour = calendar.month.hour(); + var minute = calendar.month.minute(); + var second = calendar.month.second(); + var daysInMonth = moment([year, month]).daysInMonth(); + var firstDay = moment([year, month, 1]); + var lastDay = moment([year, month, daysInMonth]); + var lastMonth = moment(firstDay).subtract(1, 'month').month(); + var lastYear = moment(firstDay).subtract(1, 'month').year(); + var daysInLastMonth = moment([lastYear, lastMonth]).daysInMonth(); + var dayOfWeek = firstDay.day(); + + //initialize a 6 rows x 7 columns array for the calendar + var calendar = []; + calendar.firstDay = firstDay; + calendar.lastDay = lastDay; + + for (var i = 0; i < 6; i++) { + calendar[i] = []; + } + + //populate the calendar with date objects + var startDay = daysInLastMonth - dayOfWeek + this.locale.firstDay + 1; + if (startDay > daysInLastMonth) + startDay -= 7; + + if (dayOfWeek == this.locale.firstDay) + startDay = daysInLastMonth - 6; + + var curDate = moment([lastYear, lastMonth, startDay, 12, minute, second]); + + var col, row; + for (var i = 0, col = 0, row = 0; i < 42; i++, col++, curDate = moment(curDate).add(24, 'hour')) { + if (i > 0 && col % 7 === 0) { + col = 0; + row++; + } + calendar[row][col] = curDate.clone().hour(hour).minute(minute).second(second); + curDate.hour(12); + + if (this.minDate && calendar[row][col].format('YYYY-MM-DD') == this.minDate.format('YYYY-MM-DD') && calendar[row][col].isBefore(this.minDate) && side == 'left') { + calendar[row][col] = this.minDate.clone(); + } + + if (this.maxDate && calendar[row][col].format('YYYY-MM-DD') == this.maxDate.format('YYYY-MM-DD') && calendar[row][col].isAfter(this.maxDate) && side == 'right') { + calendar[row][col] = this.maxDate.clone(); + } + + } + + //make the calendar object available to hoverDate/clickDate + if (side == 'left') { + this.leftCalendar.calendar = calendar; + } else { + this.rightCalendar.calendar = calendar; + } + + // + // Display the calendar + // + + var minDate = side == 'left' ? this.minDate : this.startDate; + var maxDate = this.maxDate; + var selected = side == 'left' ? this.startDate : this.endDate; + var arrow = this.locale.direction == 'ltr' ? {left: 'chevron-left', right: 'chevron-right'} : {left: 'chevron-right', right: 'chevron-left'}; + + var html = ''; + html += ''; + html += ''; + + // add empty cell for week number + if (this.showWeekNumbers || this.showISOWeekNumbers) + html += ''; + + if ((!minDate || minDate.isBefore(calendar.firstDay)) && (!this.linkedCalendars || side == 'left')) { + html += ''; + } else { + html += ''; + } + + var dateHtml = this.locale.monthNames[calendar[1][1].month()] + calendar[1][1].format(" YYYY"); + + if (this.showDropdowns) { + var currentMonth = calendar[1][1].month(); + var currentYear = calendar[1][1].year(); + var maxYear = (maxDate && maxDate.year()) || (this.maxYear); + var minYear = (minDate && minDate.year()) || (this.minYear); + var inMinYear = currentYear == minYear; + var inMaxYear = currentYear == maxYear; + + var monthHtml = '"; + + var yearHtml = ''; + + dateHtml = monthHtml + yearHtml; + } + + html += ''; + if ((!maxDate || maxDate.isAfter(calendar.lastDay)) && (!this.linkedCalendars || side == 'right' || this.singleDatePicker)) { + html += ''; + } else { + html += ''; + } + + html += ''; + html += ''; + + // add week number label + if (this.showWeekNumbers || this.showISOWeekNumbers) + html += ''; + + $.each(this.locale.daysOfWeek, function(index, dayOfWeek) { + html += ''; + }); + + html += ''; + html += ''; + html += ''; + + //adjust maxDate to reflect the maxSpan setting in order to + //grey out end dates beyond the maxSpan + if (this.endDate == null && this.maxSpan) { + var maxLimit = this.startDate.clone().add(this.maxSpan).endOf('day'); + if (!maxDate || maxLimit.isBefore(maxDate)) { + maxDate = maxLimit; + } + } + + for (var row = 0; row < 6; row++) { + html += ''; + + // add week number + if (this.showWeekNumbers) + html += ''; + else if (this.showISOWeekNumbers) + html += ''; + + for (var col = 0; col < 7; col++) { + + var classes = []; + + //highlight today's date + if (calendar[row][col].isSame(new Date(), "day")) + classes.push('today'); + + //highlight weekends + if (calendar[row][col].isoWeekday() > 5) + classes.push('weekend'); + + //grey out the dates in other months displayed at beginning and end of this calendar + if (calendar[row][col].month() != calendar[1][1].month()) + classes.push('off', 'ends'); + + //don't allow selection of dates before the minimum date + if (this.minDate && calendar[row][col].isBefore(this.minDate, 'day')) + classes.push('off', 'disabled'); + + //don't allow selection of dates after the maximum date + if (maxDate && calendar[row][col].isAfter(maxDate, 'day')) + classes.push('off', 'disabled'); + + //don't allow selection of date if a custom function decides it's invalid + if (this.isInvalidDate(calendar[row][col])) + classes.push('off', 'disabled'); + + //highlight the currently selected start date + if (calendar[row][col].format('YYYY-MM-DD') == this.startDate.format('YYYY-MM-DD')) + classes.push('active', 'start-date'); + + //highlight the currently selected end date + if (this.endDate != null && calendar[row][col].format('YYYY-MM-DD') == this.endDate.format('YYYY-MM-DD')) + classes.push('active', 'end-date'); + + //highlight dates in-between the selected dates + if (this.endDate != null && calendar[row][col] > this.startDate && calendar[row][col] < this.endDate) + classes.push('in-range'); + + //apply custom classes for this date + var isCustom = this.isCustomDate(calendar[row][col]); + if (isCustom !== false) { + if (typeof isCustom === 'string') + classes.push(isCustom); + else + Array.prototype.push.apply(classes, isCustom); + } + + var cname = '', disabled = false; + for (var i = 0; i < classes.length; i++) { + cname += classes[i] + ' '; + if (classes[i] == 'disabled') + disabled = true; + } + if (!disabled) + cname += 'available'; + + html += ''; + + } + html += ''; + } + + html += ''; + html += '
' + dateHtml + '
' + this.locale.weekLabel + '' + dayOfWeek + '
' + calendar[row][0].week() + '' + calendar[row][0].isoWeek() + '' + calendar[row][col].date() + '
'; + + this.container.find('.drp-calendar.' + side + ' .calendar-table').html(html); + + }, + + renderTimePicker: function(side) { + + // Don't bother updating the time picker if it's currently disabled + // because an end date hasn't been clicked yet + if (side == 'right' && !this.endDate) return; + + var html, selected, minDate, maxDate = this.maxDate; + + if (this.maxSpan && (!this.maxDate || this.startDate.clone().add(this.maxSpan).isBefore(this.maxDate))) + maxDate = this.startDate.clone().add(this.maxSpan); + + if (side == 'left') { + selected = this.startDate.clone(); + minDate = this.minDate; + } else if (side == 'right') { + selected = this.endDate.clone(); + minDate = this.startDate; + + //Preserve the time already selected + var timeSelector = this.container.find('.drp-calendar.right .calendar-time'); + if (timeSelector.html() != '') { + + selected.hour(!isNaN(selected.hour()) ? selected.hour() : timeSelector.find('.hourselect option:selected').val()); + selected.minute(!isNaN(selected.minute()) ? selected.minute() : timeSelector.find('.minuteselect option:selected').val()); + selected.second(!isNaN(selected.second()) ? selected.second() : timeSelector.find('.secondselect option:selected').val()); + + if (!this.timePicker24Hour) { + var ampm = timeSelector.find('.ampmselect option:selected').val(); + if (ampm === 'PM' && selected.hour() < 12) + selected.hour(selected.hour() + 12); + if (ampm === 'AM' && selected.hour() === 12) + selected.hour(0); + } + + } + + if (selected.isBefore(this.startDate)) + selected = this.startDate.clone(); + + if (maxDate && selected.isAfter(maxDate)) + selected = maxDate.clone(); + + } + + // + // hours + // + + + html = ' '; + + // + // minutes + // + + html += ': '; + + // + // seconds + // + + if (this.timePickerSeconds) { + html += ': '; + } + + // + // AM/PM + // + + if (!this.timePicker24Hour) { + html += ''; + } + + this.container.find('.drp-calendar.' + side + ' .calendar-time').html(html); + + }, + + updateFormInputs: function() { + + if (this.singleDatePicker || (this.endDate && (this.startDate.isBefore(this.endDate) || this.startDate.isSame(this.endDate)))) { + this.container.find('button.applyBtn').prop('disabled', false); + } else { + this.container.find('button.applyBtn').prop('disabled', true); + } + + }, + + move: function() { + var parentOffset = { top: 0, left: 0 }, + containerTop, + drops = this.drops; + + var parentRightEdge = $(window).width(); + if (!this.parentEl.is('body')) { + parentOffset = { + top: this.parentEl.offset().top - this.parentEl.scrollTop(), + left: this.parentEl.offset().left - this.parentEl.scrollLeft() + }; + parentRightEdge = this.parentEl[0].clientWidth + this.parentEl.offset().left; + } + + switch (drops) { + case 'auto': + containerTop = this.element.offset().top + this.element.outerHeight() - parentOffset.top; + if (containerTop + this.container.outerHeight() >= this.parentEl[0].scrollHeight) { + containerTop = this.element.offset().top - this.container.outerHeight() - parentOffset.top; + drops = 'up'; + } + break; + case 'up': + containerTop = this.element.offset().top - this.container.outerHeight() - parentOffset.top; + break; + default: + containerTop = this.element.offset().top + this.element.outerHeight() - parentOffset.top; + break; + } + + // Force the container to it's actual width + this.container.css({ + top: 0, + left: 0, + right: 'auto' + }); + var containerWidth = this.container.outerWidth(); + + this.container.toggleClass('drop-up', drops == 'up'); + + if (this.opens == 'left') { + var containerRight = parentRightEdge - this.element.offset().left - this.element.outerWidth(); + if (containerWidth + containerRight > $(window).width()) { + this.container.css({ + top: containerTop, + right: 'auto', + left: 9 + }); + } else { + this.container.css({ + top: containerTop, + right: containerRight, + left: 'auto' + }); + } + } else if (this.opens == 'center') { + var containerLeft = this.element.offset().left - parentOffset.left + this.element.outerWidth() / 2 + - containerWidth / 2; + if (containerLeft < 0) { + this.container.css({ + top: containerTop, + right: 'auto', + left: 9 + }); + } else if (containerLeft + containerWidth > $(window).width()) { + this.container.css({ + top: containerTop, + left: 'auto', + right: 0 + }); + } else { + this.container.css({ + top: containerTop, + left: containerLeft, + right: 'auto' + }); + } + } else { + var containerLeft = this.element.offset().left - parentOffset.left; + if (containerLeft + containerWidth > $(window).width()) { + this.container.css({ + top: containerTop, + left: 'auto', + right: 0 + }); + } else { + this.container.css({ + top: containerTop, + left: containerLeft, + right: 'auto' + }); + } + } + }, + + show: function(e) { + if (this.isShowing) return; + + // Create a click proxy that is private to this instance of datepicker, for unbinding + this._outsideClickProxy = $.proxy(function(e) { this.outsideClick(e); }, this); + + // Bind global datepicker mousedown for hiding and + $(document) + .on('mousedown.daterangepicker', this._outsideClickProxy) + // also support mobile devices + .on('touchend.daterangepicker', this._outsideClickProxy) + // also explicitly play nice with Bootstrap dropdowns, which stopPropagation when clicking them + .on('click.daterangepicker', '[data-toggle=dropdown]', this._outsideClickProxy) + // and also close when focus changes to outside the picker (eg. tabbing between controls) + .on('focusin.daterangepicker', this._outsideClickProxy); + + // Reposition the picker if the window is resized while it's open + $(window).on('resize.daterangepicker', $.proxy(function(e) { this.move(e); }, this)); + + this.oldStartDate = this.startDate.clone(); + this.oldEndDate = this.endDate.clone(); + this.previousRightTime = this.endDate.clone(); + + this.updateView(); + this.container.show(); + this.move(); + this.element.trigger('show.daterangepicker', this); + this.isShowing = true; + }, + + hide: function(e) { + if (!this.isShowing) return; + + //incomplete date selection, revert to last values + if (!this.endDate) { + this.startDate = this.oldStartDate.clone(); + this.endDate = this.oldEndDate.clone(); + } + + //if a new date range was selected, invoke the user callback function + if (!this.startDate.isSame(this.oldStartDate) || !this.endDate.isSame(this.oldEndDate)) + this.callback(this.startDate.clone(), this.endDate.clone(), this.chosenLabel); + + //if picker is attached to a text input, update it + this.updateElement(); + + $(document).off('.daterangepicker'); + $(window).off('.daterangepicker'); + this.container.hide(); + this.element.trigger('hide.daterangepicker', this); + this.isShowing = false; + }, + + toggle: function(e) { + if (this.isShowing) { + this.hide(); + } else { + this.show(); + } + }, + + outsideClick: function(e) { + var target = $(e.target); + // if the page is clicked anywhere except within the daterangerpicker/button + // itself then call this.hide() + if ( + // ie modal dialog fix + e.type == "focusin" || + target.closest(this.element).length || + target.closest(this.container).length || + target.closest('.calendar-table').length + ) return; + this.hide(); + this.element.trigger('outsideClick.daterangepicker', this); + }, + + showCalendars: function() { + this.container.addClass('show-calendar'); + this.move(); + this.element.trigger('showCalendar.daterangepicker', this); + }, + + hideCalendars: function() { + this.container.removeClass('show-calendar'); + this.element.trigger('hideCalendar.daterangepicker', this); + }, + + clickRange: function(e) { + var label = e.target.getAttribute('data-range-key'); + this.chosenLabel = label; + if (label == this.locale.customRangeLabel) { + this.showCalendars(); + } else { + var dates = this.ranges[label]; + this.startDate = dates[0]; + this.endDate = dates[1]; + + if (!this.timePicker) { + this.startDate.startOf('day'); + this.endDate.endOf('day'); + } + + if (!this.alwaysShowCalendars) + this.hideCalendars(); + this.clickApply(); + } + }, + + clickPrev: function(e) { + var cal = $(e.target).parents('.drp-calendar'); + if (cal.hasClass('left')) { + this.leftCalendar.month.subtract(1, 'month'); + if (this.linkedCalendars) + this.rightCalendar.month.subtract(1, 'month'); + } else { + this.rightCalendar.month.subtract(1, 'month'); + } + this.updateCalendars(); + }, + + clickNext: function(e) { + var cal = $(e.target).parents('.drp-calendar'); + if (cal.hasClass('left')) { + this.leftCalendar.month.add(1, 'month'); + } else { + this.rightCalendar.month.add(1, 'month'); + if (this.linkedCalendars) + this.leftCalendar.month.add(1, 'month'); + } + this.updateCalendars(); + }, + + hoverDate: function(e) { + + //ignore dates that can't be selected + if (!$(e.target).hasClass('available')) return; + + var title = $(e.target).attr('data-title'); + var row = title.substr(1, 1); + var col = title.substr(3, 1); + var cal = $(e.target).parents('.drp-calendar'); + var date = cal.hasClass('left') ? this.leftCalendar.calendar[row][col] : this.rightCalendar.calendar[row][col]; + + //highlight the dates between the start date and the date being hovered as a potential end date + var leftCalendar = this.leftCalendar; + var rightCalendar = this.rightCalendar; + var startDate = this.startDate; + if (!this.endDate) { + this.container.find('.drp-calendar tbody td').each(function(index, el) { + + //skip week numbers, only look at dates + if ($(el).hasClass('week')) return; + + var title = $(el).attr('data-title'); + var row = title.substr(1, 1); + var col = title.substr(3, 1); + var cal = $(el).parents('.drp-calendar'); + var dt = cal.hasClass('left') ? leftCalendar.calendar[row][col] : rightCalendar.calendar[row][col]; + + if ((dt.isAfter(startDate) && dt.isBefore(date)) || dt.isSame(date, 'day')) { + $(el).addClass('in-range'); + } else { + $(el).removeClass('in-range'); + } + + }); + } + + }, + + clickDate: function(e) { + + if (!$(e.target).hasClass('available')) return; + + var title = $(e.target).attr('data-title'); + var row = title.substr(1, 1); + var col = title.substr(3, 1); + var cal = $(e.target).parents('.drp-calendar'); + var date = cal.hasClass('left') ? this.leftCalendar.calendar[row][col] : this.rightCalendar.calendar[row][col]; + + // + // this function needs to do a few things: + // * alternate between selecting a start and end date for the range, + // * if the time picker is enabled, apply the hour/minute/second from the select boxes to the clicked date + // * if autoapply is enabled, and an end date was chosen, apply the selection + // * if single date picker mode, and time picker isn't enabled, apply the selection immediately + // * if one of the inputs above the calendars was focused, cancel that manual input + // + + if (this.endDate || date.isBefore(this.startDate, 'day')) { //picking start + if (this.timePicker) { + var hour = parseInt(this.container.find('.left .hourselect').val(), 10); + if (!this.timePicker24Hour) { + var ampm = this.container.find('.left .ampmselect').val(); + if (ampm === 'PM' && hour < 12) + hour += 12; + if (ampm === 'AM' && hour === 12) + hour = 0; + } + var minute = parseInt(this.container.find('.left .minuteselect').val(), 10); + if (isNaN(minute)) { + minute = parseInt(this.container.find('.left .minuteselect option:last').val(), 10); + } + var second = this.timePickerSeconds ? parseInt(this.container.find('.left .secondselect').val(), 10) : 0; + date = date.clone().hour(hour).minute(minute).second(second); + } + this.endDate = null; + this.setStartDate(date.clone()); + } else if (!this.endDate && date.isBefore(this.startDate)) { + //special case: clicking the same date for start/end, + //but the time of the end date is before the start date + this.setEndDate(this.startDate.clone()); + } else { // picking end + if (this.timePicker) { + var hour = parseInt(this.container.find('.right .hourselect').val(), 10); + if (!this.timePicker24Hour) { + var ampm = this.container.find('.right .ampmselect').val(); + if (ampm === 'PM' && hour < 12) + hour += 12; + if (ampm === 'AM' && hour === 12) + hour = 0; + } + var minute = parseInt(this.container.find('.right .minuteselect').val(), 10); + if (isNaN(minute)) { + minute = parseInt(this.container.find('.right .minuteselect option:last').val(), 10); + } + var second = this.timePickerSeconds ? parseInt(this.container.find('.right .secondselect').val(), 10) : 0; + date = date.clone().hour(hour).minute(minute).second(second); + } + this.setEndDate(date.clone()); + if (this.autoApply) { + this.calculateChosenLabel(); + this.clickApply(); + } + } + + if (this.singleDatePicker) { + this.setEndDate(this.startDate); + if (this.autoApply) + this.clickApply(); + } + + this.updateView(); + + //This is to cancel the blur event handler if the mouse was in one of the inputs + e.stopPropagation(); + + }, + + calculateChosenLabel: function () { + var customRange = true; + var i = 0; + for (var range in this.ranges) { + if (this.timePicker) { + var format = this.timePickerSeconds ? "YYYY-MM-DD HH:mm:ss" : "YYYY-MM-DD HH:mm"; + //ignore times when comparing dates if time picker seconds is not enabled + if (this.startDate.format(format) == this.ranges[range][0].format(format) && this.endDate.format(format) == this.ranges[range][1].format(format)) { + customRange = false; + this.chosenLabel = this.container.find('.ranges li:eq(' + i + ')').addClass('active').attr('data-range-key'); + break; + } + } else { + //ignore times when comparing dates if time picker is not enabled + if (this.startDate.format('YYYY-MM-DD') == this.ranges[range][0].format('YYYY-MM-DD') && this.endDate.format('YYYY-MM-DD') == this.ranges[range][1].format('YYYY-MM-DD')) { + customRange = false; + this.chosenLabel = this.container.find('.ranges li:eq(' + i + ')').addClass('active').attr('data-range-key'); + break; + } + } + i++; + } + if (customRange) { + if (this.showCustomRangeLabel) { + this.chosenLabel = this.container.find('.ranges li:last').addClass('active').attr('data-range-key'); + } else { + this.chosenLabel = null; + } + this.showCalendars(); + } + }, + + clickApply: function(e) { + this.hide(); + this.element.trigger('apply.daterangepicker', this); + }, + + clickCancel: function(e) { + this.startDate = this.oldStartDate; + this.endDate = this.oldEndDate; + this.hide(); + this.element.trigger('cancel.daterangepicker', this); + }, + + monthOrYearChanged: function(e) { + var isLeft = $(e.target).closest('.drp-calendar').hasClass('left'), + leftOrRight = isLeft ? 'left' : 'right', + cal = this.container.find('.drp-calendar.'+leftOrRight); + + // Month must be Number for new moment versions + var month = parseInt(cal.find('.monthselect').val(), 10); + var year = cal.find('.yearselect').val(); + + if (!isLeft) { + if (year < this.startDate.year() || (year == this.startDate.year() && month < this.startDate.month())) { + month = this.startDate.month(); + year = this.startDate.year(); + } + } + + if (this.minDate) { + if (year < this.minDate.year() || (year == this.minDate.year() && month < this.minDate.month())) { + month = this.minDate.month(); + year = this.minDate.year(); + } + } + + if (this.maxDate) { + if (year > this.maxDate.year() || (year == this.maxDate.year() && month > this.maxDate.month())) { + month = this.maxDate.month(); + year = this.maxDate.year(); + } + } + + if (isLeft) { + this.leftCalendar.month.month(month).year(year); + if (this.linkedCalendars) + this.rightCalendar.month = this.leftCalendar.month.clone().add(1, 'month'); + } else { + this.rightCalendar.month.month(month).year(year); + if (this.linkedCalendars) + this.leftCalendar.month = this.rightCalendar.month.clone().subtract(1, 'month'); + } + this.updateCalendars(); + }, + + timeChanged: function(e) { + + var cal = $(e.target).closest('.drp-calendar'), + isLeft = cal.hasClass('left'); + + var hour = parseInt(cal.find('.hourselect').val(), 10); + var minute = parseInt(cal.find('.minuteselect').val(), 10); + if (isNaN(minute)) { + minute = parseInt(cal.find('.minuteselect option:last').val(), 10); + } + var second = this.timePickerSeconds ? parseInt(cal.find('.secondselect').val(), 10) : 0; + + if (!this.timePicker24Hour) { + var ampm = cal.find('.ampmselect').val(); + if (ampm === 'PM' && hour < 12) + hour += 12; + if (ampm === 'AM' && hour === 12) + hour = 0; + } + + if (isLeft) { + var start = this.startDate.clone(); + start.hour(hour); + start.minute(minute); + start.second(second); + this.setStartDate(start); + if (this.singleDatePicker) { + this.endDate = this.startDate.clone(); + } else if (this.endDate && this.endDate.format('YYYY-MM-DD') == start.format('YYYY-MM-DD') && this.endDate.isBefore(start)) { + this.setEndDate(start.clone()); + } + } else if (this.endDate) { + var end = this.endDate.clone(); + end.hour(hour); + end.minute(minute); + end.second(second); + this.setEndDate(end); + } + + //update the calendars so all clickable dates reflect the new time component + this.updateCalendars(); + + //update the form inputs above the calendars with the new time + this.updateFormInputs(); + + //re-render the time pickers because changing one selection can affect what's enabled in another + this.renderTimePicker('left'); + this.renderTimePicker('right'); + + if(this.autoApply) { + this.element.trigger('apply.daterangepicker', this); + } + }, + + elementChanged: function() { + if (!this.element.is('input')) return; + if (!this.element.val().length) return; + + var dateString = this.element.val().split(this.locale.separator), + start = null, + end = null; + + if (dateString.length === 2) { + start = moment(dateString[0], this.locale.format); + end = moment(dateString[1], this.locale.format); + } + + if (this.singleDatePicker || start === null || end === null) { + start = moment(this.element.val(), this.locale.format); + end = start; + } + + if (!start.isValid() || !end.isValid()) return; + + this.setStartDate(start); + this.setEndDate(end); + this.updateView(); + }, + + keydown: function(e) { + //hide on tab or enter + if ((e.keyCode === 9) || (e.keyCode === 13)) { + this.hide(); + } + + //hide on esc and prevent propagation + if (e.keyCode === 27) { + e.preventDefault(); + e.stopPropagation(); + + this.hide(); + } + }, + + updateElement: function() { + if (this.element.is('input') && this.autoUpdateInput) { + var newValue = this.startDate.format(this.locale.format); + if (!this.singleDatePicker) { + newValue += this.locale.separator + this.endDate.format(this.locale.format); + } + if (newValue !== this.element.val()) { + this.element.val(newValue).trigger('change'); + } + } + }, + + remove: function() { + this.container.remove(); + this.element.off('.daterangepicker'); + this.element.removeData(); + } + + }; + + $.fn.daterangepicker = function(options, callback) { + var implementOptions = $.extend(true, {}, $.fn.daterangepicker.defaultOptions, options); + this.each(function() { + var el = $(this); + if (el.data('daterangepicker')) + el.data('daterangepicker').remove(); + el.data('daterangepicker', new DateRangePicker(el, implementOptions, callback)); + }); + return this; + }; + + return DateRangePicker; + +})); diff --git a/npm/packs/bootstrap/package.json b/npm/packs/bootstrap/package.json index 17771253f3..3f33c9d6a4 100644 --- a/npm/packs/bootstrap/package.json +++ b/npm/packs/bootstrap/package.json @@ -1,5 +1,5 @@ { - "version": "8.3.0-rc.1", + "version": "8.3.0", "name": "@abp/bootstrap", "repository": { "type": "git", @@ -10,7 +10,7 @@ "access": "public" }, "dependencies": { - "@abp/core": "~8.3.0-rc.1", + "@abp/core": "~8.3.0", "bootstrap": "^5.3.3" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/chart.js/package.json b/npm/packs/chart.js/package.json index 21cbb3b5ed..540b145fba 100644 --- a/npm/packs/chart.js/package.json +++ b/npm/packs/chart.js/package.json @@ -1,5 +1,5 @@ { - "version": "8.3.0-rc.1", + "version": "8.3.0", "name": "@abp/chart.js", "publishConfig": { "access": "public" diff --git a/npm/packs/clipboard/package.json b/npm/packs/clipboard/package.json index 03e2f76df5..647f1aa46c 100644 --- a/npm/packs/clipboard/package.json +++ b/npm/packs/clipboard/package.json @@ -1,11 +1,11 @@ { - "version": "8.3.0-rc.1", + "version": "8.3.0", "name": "@abp/clipboard", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~8.3.0-rc.1", + "@abp/core": "~8.3.0", "clipboard": "^2.0.11" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/cms-kit.admin/package.json b/npm/packs/cms-kit.admin/package.json index fc78ba2238..80f1fa2736 100644 --- a/npm/packs/cms-kit.admin/package.json +++ b/npm/packs/cms-kit.admin/package.json @@ -1,16 +1,16 @@ { - "version": "8.3.0-rc.1", + "version": "8.3.0", "name": "@abp/cms-kit.admin", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/codemirror": "~8.3.0-rc.1", - "@abp/jstree": "~8.3.0-rc.1", - "@abp/markdown-it": "~8.3.0-rc.1", - "@abp/slugify": "~8.3.0-rc.1", - "@abp/tui-editor": "~8.3.0-rc.1", - "@abp/uppy": "~8.3.0-rc.1" + "@abp/codemirror": "~8.3.0", + "@abp/jstree": "~8.3.0", + "@abp/markdown-it": "~8.3.0", + "@abp/slugify": "~8.3.0", + "@abp/tui-editor": "~8.3.0", + "@abp/uppy": "~8.3.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", "homepage": "https://abp.io", diff --git a/npm/packs/cms-kit.public/package.json b/npm/packs/cms-kit.public/package.json index 268db6ead4..bd1e2c0bd5 100644 --- a/npm/packs/cms-kit.public/package.json +++ b/npm/packs/cms-kit.public/package.json @@ -1,12 +1,12 @@ { - "version": "8.3.0-rc.1", + "version": "8.3.0", "name": "@abp/cms-kit.public", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/highlight.js": "~8.3.0-rc.1", - "@abp/star-rating-svg": "~8.3.0-rc.1" + "@abp/highlight.js": "~8.3.0", + "@abp/star-rating-svg": "~8.3.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", "homepage": "https://abp.io", diff --git a/npm/packs/cms-kit/package.json b/npm/packs/cms-kit/package.json index cba6bda075..4a51bb35a5 100644 --- a/npm/packs/cms-kit/package.json +++ b/npm/packs/cms-kit/package.json @@ -1,12 +1,12 @@ { - "version": "8.3.0-rc.1", + "version": "8.3.0", "name": "@abp/cms-kit", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/cms-kit.admin": "~8.3.0-rc.1", - "@abp/cms-kit.public": "~8.3.0-rc.1" + "@abp/cms-kit.admin": "~8.3.0", + "@abp/cms-kit.public": "~8.3.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", "homepage": "https://abp.io", diff --git a/npm/packs/codemirror/package.json b/npm/packs/codemirror/package.json index 396750df3f..a9c78e009a 100644 --- a/npm/packs/codemirror/package.json +++ b/npm/packs/codemirror/package.json @@ -1,11 +1,11 @@ { - "version": "8.3.0-rc.1", + "version": "8.3.0", "name": "@abp/codemirror", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~8.3.0-rc.1", + "@abp/core": "~8.3.0", "codemirror": "^6.0.1" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/core/package.json b/npm/packs/core/package.json index fcd3c685bd..2aa9201d27 100644 --- a/npm/packs/core/package.json +++ b/npm/packs/core/package.json @@ -1,5 +1,5 @@ { - "version": "8.3.0-rc.1", + "version": "8.3.0", "name": "@abp/core", "repository": { "type": "git", @@ -10,7 +10,7 @@ "access": "public" }, "dependencies": { - "@abp/utils": "~8.3.0-rc.1" + "@abp/utils": "~8.3.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", "homepage": "https://abp.io", diff --git a/npm/packs/cropperjs/package.json b/npm/packs/cropperjs/package.json index fc3dd4b512..f96c0e2610 100644 --- a/npm/packs/cropperjs/package.json +++ b/npm/packs/cropperjs/package.json @@ -1,11 +1,11 @@ { - "version": "8.3.0-rc.1", + "version": "8.3.0", "name": "@abp/cropperjs", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~8.3.0-rc.1", + "@abp/core": "~8.3.0", "cropperjs": "^1.6.2" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/datatables.net-bs4/package.json b/npm/packs/datatables.net-bs4/package.json index 3c2e603b17..a3fc1c5423 100644 --- a/npm/packs/datatables.net-bs4/package.json +++ b/npm/packs/datatables.net-bs4/package.json @@ -1,5 +1,5 @@ { - "version": "8.3.0-rc.1", + "version": "8.3.0", "name": "@abp/datatables.net-bs4", "repository": { "type": "git", @@ -10,7 +10,7 @@ "access": "public" }, "dependencies": { - "@abp/datatables.net": "~8.3.0-rc.1", + "@abp/datatables.net": "~8.3.0", "datatables.net-bs4": "^2.0.8" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/datatables.net-bs5/package.json b/npm/packs/datatables.net-bs5/package.json index 0647d9a9dc..d4d5e9a279 100644 --- a/npm/packs/datatables.net-bs5/package.json +++ b/npm/packs/datatables.net-bs5/package.json @@ -1,11 +1,11 @@ { - "version": "8.3.0-rc.1", + "version": "8.3.0", "name": "@abp/datatables.net-bs5", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/datatables.net": "~8.3.0-rc.1", + "@abp/datatables.net": "~8.3.0", "datatables.net-bs5": "^2.0.8" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/datatables.net/package.json b/npm/packs/datatables.net/package.json index 1aad93d5b1..68324d0f9d 100644 --- a/npm/packs/datatables.net/package.json +++ b/npm/packs/datatables.net/package.json @@ -1,5 +1,5 @@ { - "version": "8.3.0-rc.1", + "version": "8.3.0", "name": "@abp/datatables.net", "repository": { "type": "git", @@ -10,7 +10,7 @@ "access": "public" }, "dependencies": { - "@abp/jquery": "~8.3.0-rc.1", + "@abp/jquery": "~8.3.0", "datatables.net": "^2.0.8" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/docs/package.json b/npm/packs/docs/package.json index 2d01c16913..36d50dea63 100644 --- a/npm/packs/docs/package.json +++ b/npm/packs/docs/package.json @@ -1,15 +1,15 @@ { - "version": "8.3.0-rc.1", + "version": "8.3.0", "name": "@abp/docs", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/anchor-js": "~8.3.0-rc.1", - "@abp/clipboard": "~8.3.0-rc.1", - "@abp/malihu-custom-scrollbar-plugin": "~8.3.0-rc.1", - "@abp/popper.js": "~8.3.0-rc.1", - "@abp/prismjs": "~8.3.0-rc.1" + "@abp/anchor-js": "~8.3.0", + "@abp/clipboard": "~8.3.0", + "@abp/malihu-custom-scrollbar-plugin": "~8.3.0", + "@abp/popper.js": "~8.3.0", + "@abp/prismjs": "~8.3.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", "homepage": "https://abp.io", diff --git a/npm/packs/flag-icon-css/package.json b/npm/packs/flag-icon-css/package.json index dee7ba93a9..a191804b85 100644 --- a/npm/packs/flag-icon-css/package.json +++ b/npm/packs/flag-icon-css/package.json @@ -1,5 +1,5 @@ { - "version": "8.3.0-rc.1", + "version": "8.3.0", "name": "@abp/flag-icon-css", "publishConfig": { "access": "public" diff --git a/npm/packs/flag-icons/package.json b/npm/packs/flag-icons/package.json index 6a6e98874b..900dc2df88 100644 --- a/npm/packs/flag-icons/package.json +++ b/npm/packs/flag-icons/package.json @@ -1,5 +1,5 @@ { - "version": "8.3.0-rc.1", + "version": "8.3.0", "name": "@abp/flag-icons", "publishConfig": { "access": "public" diff --git a/npm/packs/font-awesome/package.json b/npm/packs/font-awesome/package.json index c537e2c64c..82a85c21e9 100644 --- a/npm/packs/font-awesome/package.json +++ b/npm/packs/font-awesome/package.json @@ -1,5 +1,5 @@ { - "version": "8.3.0-rc.1", + "version": "8.3.0", "name": "@abp/font-awesome", "repository": { "type": "git", @@ -10,7 +10,7 @@ "access": "public" }, "dependencies": { - "@abp/core": "~8.3.0-rc.1", + "@abp/core": "~8.3.0", "@fortawesome/fontawesome-free": "^6.5.2" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/highlight.js/package.json b/npm/packs/highlight.js/package.json index 4441bb0acd..904dfc6554 100644 --- a/npm/packs/highlight.js/package.json +++ b/npm/packs/highlight.js/package.json @@ -1,11 +1,11 @@ { - "version": "8.3.0-rc.1", + "version": "8.3.0", "name": "@abp/highlight.js", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~8.3.0-rc.1", + "@abp/core": "~8.3.0", "@highlightjs/cdn-assets": "~11.9.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/jquery-form/package.json b/npm/packs/jquery-form/package.json index c71266e24c..36a3a1dcea 100644 --- a/npm/packs/jquery-form/package.json +++ b/npm/packs/jquery-form/package.json @@ -1,5 +1,5 @@ { - "version": "8.3.0-rc.1", + "version": "8.3.0", "name": "@abp/jquery-form", "repository": { "type": "git", @@ -10,7 +10,7 @@ "access": "public" }, "dependencies": { - "@abp/jquery": "~8.3.0-rc.1", + "@abp/jquery": "~8.3.0", "jquery-form": "^4.3.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/jquery-validation-unobtrusive/package.json b/npm/packs/jquery-validation-unobtrusive/package.json index b6176d234f..ace2ea9270 100644 --- a/npm/packs/jquery-validation-unobtrusive/package.json +++ b/npm/packs/jquery-validation-unobtrusive/package.json @@ -1,5 +1,5 @@ { - "version": "8.3.0-rc.1", + "version": "8.3.0", "name": "@abp/jquery-validation-unobtrusive", "repository": { "type": "git", @@ -10,7 +10,7 @@ "access": "public" }, "dependencies": { - "@abp/jquery-validation": "~8.3.0-rc.1", + "@abp/jquery-validation": "~8.3.0", "jquery-validation-unobtrusive": "^4.0.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/jquery-validation/package.json b/npm/packs/jquery-validation/package.json index e0886b5090..4aef5ae19f 100644 --- a/npm/packs/jquery-validation/package.json +++ b/npm/packs/jquery-validation/package.json @@ -1,5 +1,5 @@ { - "version": "8.3.0-rc.1", + "version": "8.3.0", "name": "@abp/jquery-validation", "repository": { "type": "git", @@ -10,7 +10,7 @@ "access": "public" }, "dependencies": { - "@abp/jquery": "~8.3.0-rc.1", + "@abp/jquery": "~8.3.0", "jquery-validation": "^1.20.1" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/jquery/package.json b/npm/packs/jquery/package.json index 28dd5badf0..8774c94075 100644 --- a/npm/packs/jquery/package.json +++ b/npm/packs/jquery/package.json @@ -1,5 +1,5 @@ { - "version": "8.3.0-rc.1", + "version": "8.3.0", "name": "@abp/jquery", "repository": { "type": "git", @@ -10,7 +10,7 @@ "access": "public" }, "dependencies": { - "@abp/core": "~8.3.0-rc.1", + "@abp/core": "~8.3.0", "jquery": "~3.7.1" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/jstree/package.json b/npm/packs/jstree/package.json index c0344bbbaa..4923ca3fdb 100644 --- a/npm/packs/jstree/package.json +++ b/npm/packs/jstree/package.json @@ -1,11 +1,11 @@ { - "version": "8.3.0-rc.1", + "version": "8.3.0", "name": "@abp/jstree", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/jquery": "~8.3.0-rc.1", + "@abp/jquery": "~8.3.0", "jstree": "^3.3.16" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/lodash/package.json b/npm/packs/lodash/package.json index 874d50f959..4f3a512eff 100644 --- a/npm/packs/lodash/package.json +++ b/npm/packs/lodash/package.json @@ -1,5 +1,5 @@ { - "version": "8.3.0-rc.1", + "version": "8.3.0", "name": "@abp/lodash", "repository": { "type": "git", @@ -10,7 +10,7 @@ "access": "public" }, "dependencies": { - "@abp/core": "~8.3.0-rc.1", + "@abp/core": "~8.3.0", "lodash": "^4.17.21" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/luxon/package.json b/npm/packs/luxon/package.json index 908036675b..a7255dd2ad 100644 --- a/npm/packs/luxon/package.json +++ b/npm/packs/luxon/package.json @@ -1,5 +1,5 @@ { - "version": "8.3.0-rc.1", + "version": "8.3.0", "name": "@abp/luxon", "repository": { "type": "git", @@ -10,7 +10,7 @@ "access": "public" }, "dependencies": { - "@abp/core": "~8.3.0-rc.1", + "@abp/core": "~8.3.0", "luxon": "^3.4.4" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/malihu-custom-scrollbar-plugin/package.json b/npm/packs/malihu-custom-scrollbar-plugin/package.json index 69b1256a6c..2103a1040f 100644 --- a/npm/packs/malihu-custom-scrollbar-plugin/package.json +++ b/npm/packs/malihu-custom-scrollbar-plugin/package.json @@ -1,5 +1,5 @@ { - "version": "8.3.0-rc.1", + "version": "8.3.0", "name": "@abp/malihu-custom-scrollbar-plugin", "repository": { "type": "git", @@ -10,7 +10,7 @@ "access": "public" }, "dependencies": { - "@abp/core": "~8.3.0-rc.1", + "@abp/core": "~8.3.0", "malihu-custom-scrollbar-plugin": "^3.1.5" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/markdown-it/package.json b/npm/packs/markdown-it/package.json index 54a582f708..4146b4b7e5 100644 --- a/npm/packs/markdown-it/package.json +++ b/npm/packs/markdown-it/package.json @@ -1,11 +1,11 @@ { - "version": "8.3.0-rc.1", + "version": "8.3.0", "name": "@abp/markdown-it", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~8.3.0-rc.1", + "@abp/core": "~8.3.0", "markdown-it": "^14.1.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/moment/package.json b/npm/packs/moment/package.json index 2668e9365d..5f906b4cd9 100644 --- a/npm/packs/moment/package.json +++ b/npm/packs/moment/package.json @@ -1,5 +1,5 @@ { - "version": "8.3.0-rc.1", + "version": "8.3.0", "name": "@abp/moment", "repository": { "type": "git", diff --git a/npm/packs/owl.carousel/package.json b/npm/packs/owl.carousel/package.json index 534de4e962..0b667ecb41 100644 --- a/npm/packs/owl.carousel/package.json +++ b/npm/packs/owl.carousel/package.json @@ -1,11 +1,11 @@ { - "version": "8.3.0-rc.1", + "version": "8.3.0", "name": "@abp/owl.carousel", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~8.3.0-rc.1", + "@abp/core": "~8.3.0", "owl.carousel": "^2.3.4" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/popper.js/package.json b/npm/packs/popper.js/package.json index 9df70ee2c9..fa1a86b6a6 100644 --- a/npm/packs/popper.js/package.json +++ b/npm/packs/popper.js/package.json @@ -1,11 +1,11 @@ { - "version": "8.3.0-rc.1", + "version": "8.3.0", "name": "@abp/popper.js", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~8.3.0-rc.1", + "@abp/core": "~8.3.0", "@popperjs/core": "^2.11.8" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/prismjs/package.json b/npm/packs/prismjs/package.json index 6b3289d007..af5671f7f5 100644 --- a/npm/packs/prismjs/package.json +++ b/npm/packs/prismjs/package.json @@ -1,12 +1,12 @@ { - "version": "8.3.0-rc.1", + "version": "8.3.0", "name": "@abp/prismjs", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/clipboard": "~8.3.0-rc.1", - "@abp/core": "~8.3.0-rc.1", + "@abp/clipboard": "~8.3.0", + "@abp/core": "~8.3.0", "prismjs": "^1.29.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/qrcode/package.json b/npm/packs/qrcode/package.json index da70c99390..0725fff12d 100644 --- a/npm/packs/qrcode/package.json +++ b/npm/packs/qrcode/package.json @@ -1,5 +1,5 @@ { - "version": "8.3.0-rc.1", + "version": "8.3.0", "name": "@abp/qrcode", "repository": { "type": "git", @@ -10,7 +10,7 @@ "access": "public" }, "dependencies": { - "@abp/core": "~8.3.0-rc.1" + "@abp/core": "~8.3.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", "homepage": "https://abp.io", diff --git a/npm/packs/select2/package.json b/npm/packs/select2/package.json index bac730f6ee..4af92ff2e9 100644 --- a/npm/packs/select2/package.json +++ b/npm/packs/select2/package.json @@ -1,5 +1,5 @@ { - "version": "8.3.0-rc.1", + "version": "8.3.0", "name": "@abp/select2", "repository": { "type": "git", @@ -10,7 +10,7 @@ "access": "public" }, "dependencies": { - "@abp/core": "~8.3.0-rc.1", + "@abp/core": "~8.3.0", "select2": "^4.0.13" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/signalr/package.json b/npm/packs/signalr/package.json index ab34be8a62..8c9363b193 100644 --- a/npm/packs/signalr/package.json +++ b/npm/packs/signalr/package.json @@ -1,11 +1,11 @@ { - "version": "8.3.0-rc.1", + "version": "8.3.0", "name": "@abp/signalr", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~8.3.0-rc.1", + "@abp/core": "~8.3.0", "@microsoft/signalr": "~8.0.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/slugify/package.json b/npm/packs/slugify/package.json index 00b0f83690..e03b21ac8b 100644 --- a/npm/packs/slugify/package.json +++ b/npm/packs/slugify/package.json @@ -1,5 +1,5 @@ { - "version": "8.3.0-rc.1", + "version": "8.3.0", "name": "@abp/slugify", "publishConfig": { "access": "public" diff --git a/npm/packs/star-rating-svg/package.json b/npm/packs/star-rating-svg/package.json index 4bdfc7326c..d3651a533e 100644 --- a/npm/packs/star-rating-svg/package.json +++ b/npm/packs/star-rating-svg/package.json @@ -1,11 +1,11 @@ { - "version": "8.3.0-rc.1", + "version": "8.3.0", "name": "@abp/star-rating-svg", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/jquery": "~8.3.0-rc.1", + "@abp/jquery": "~8.3.0", "star-rating-svg": "^3.5.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/sweetalert2/package.json b/npm/packs/sweetalert2/package.json index d9471e6794..4b315f3e78 100644 --- a/npm/packs/sweetalert2/package.json +++ b/npm/packs/sweetalert2/package.json @@ -1,5 +1,5 @@ { - "version": "8.3.0-rc.1", + "version": "8.3.0", "name": "@abp/sweetalert2", "publishConfig": { "access": "public" @@ -10,7 +10,7 @@ "directory": "npm/packs/sweetalert2" }, "dependencies": { - "@abp/core": "~8.3.0-rc.1", + "@abp/core": "~8.3.0", "sweetalert2": "^11.3.6" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/timeago/package.json b/npm/packs/timeago/package.json index d62f46161e..861af9ca6f 100644 --- a/npm/packs/timeago/package.json +++ b/npm/packs/timeago/package.json @@ -1,5 +1,5 @@ { - "version": "8.3.0-rc.1", + "version": "8.3.0", "name": "@abp/timeago", "repository": { "type": "git", @@ -10,7 +10,7 @@ "access": "public" }, "dependencies": { - "@abp/jquery": "~8.3.0-rc.1", + "@abp/jquery": "~8.3.0", "timeago": "^1.6.7" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/toastr/package.json b/npm/packs/toastr/package.json index a3c2fffc98..b789d4f922 100644 --- a/npm/packs/toastr/package.json +++ b/npm/packs/toastr/package.json @@ -1,5 +1,5 @@ { - "version": "8.3.0-rc.1", + "version": "8.3.0", "name": "@abp/toastr", "repository": { "type": "git", @@ -10,7 +10,7 @@ "access": "public" }, "dependencies": { - "@abp/jquery": "~8.3.0-rc.1", + "@abp/jquery": "~8.3.0", "toastr": "^2.1.4" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/tui-editor/package.json b/npm/packs/tui-editor/package.json index edcd952afa..2c0ce92334 100644 --- a/npm/packs/tui-editor/package.json +++ b/npm/packs/tui-editor/package.json @@ -1,12 +1,12 @@ { - "version": "8.3.0-rc.1", + "version": "8.3.0", "name": "@abp/tui-editor", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/jquery": "~8.3.0-rc.1", - "@abp/prismjs": "~8.3.0-rc.1" + "@abp/jquery": "~8.3.0", + "@abp/prismjs": "~8.3.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", "homepage": "https://abp.io", diff --git a/npm/packs/uppy/package.json b/npm/packs/uppy/package.json index aa6a9f4137..e93dafc93c 100644 --- a/npm/packs/uppy/package.json +++ b/npm/packs/uppy/package.json @@ -1,11 +1,11 @@ { - "version": "8.3.0-rc.1", + "version": "8.3.0", "name": "@abp/uppy", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~8.3.0-rc.1", + "@abp/core": "~8.3.0", "uppy": "^3.27.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/utils/package.json b/npm/packs/utils/package.json index 8bcaf38b09..cc1530084d 100644 --- a/npm/packs/utils/package.json +++ b/npm/packs/utils/package.json @@ -1,6 +1,6 @@ { "name": "@abp/utils", - "version": "8.3.0-rc.1", + "version": "8.3.0", "scripts": { "prepublishOnly": "yarn install --ignore-scripts && node prepublish.js", "ng": "ng", diff --git a/npm/packs/vee-validate/package.json b/npm/packs/vee-validate/package.json index 1a97be3bf7..697d06f2a6 100644 --- a/npm/packs/vee-validate/package.json +++ b/npm/packs/vee-validate/package.json @@ -1,11 +1,11 @@ { - "version": "8.3.0-rc.1", + "version": "8.3.0", "name": "@abp/vee-validate", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/vue": "~8.3.0-rc.1", + "@abp/vue": "~8.3.0", "vee-validate": "~3.4.4" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/virtual-file-explorer/package.json b/npm/packs/virtual-file-explorer/package.json index 72e476e6f8..9a4a36dc12 100644 --- a/npm/packs/virtual-file-explorer/package.json +++ b/npm/packs/virtual-file-explorer/package.json @@ -1,12 +1,12 @@ { - "version": "8.3.0-rc.1", + "version": "8.3.0", "name": "@abp/virtual-file-explorer", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/clipboard": "~8.3.0-rc.1", - "@abp/prismjs": "~8.3.0-rc.1" + "@abp/clipboard": "~8.3.0", + "@abp/prismjs": "~8.3.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", "homepage": "https://abp.io", diff --git a/npm/packs/vue/package.json b/npm/packs/vue/package.json index 2ad62c5336..b3855eb41c 100644 --- a/npm/packs/vue/package.json +++ b/npm/packs/vue/package.json @@ -1,5 +1,5 @@ { - "version": "8.3.0-rc.1", + "version": "8.3.0", "name": "@abp/vue", "publishConfig": { "access": "public" diff --git a/npm/packs/zxcvbn/package.json b/npm/packs/zxcvbn/package.json index 194a2e19e5..c531c64056 100644 --- a/npm/packs/zxcvbn/package.json +++ b/npm/packs/zxcvbn/package.json @@ -1,11 +1,11 @@ { - "version": "8.3.0-rc.1", + "version": "8.3.0", "name": "@abp/zxcvbn", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~8.3.0-rc.1", + "@abp/core": "~8.3.0", "zxcvbn": "^4.4.2" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/nupkg/common.ps1 b/nupkg/common.ps1 index 9f014cd526..860644dc4b 100644 --- a/nupkg/common.ps1 +++ b/nupkg/common.ps1 @@ -152,6 +152,7 @@ $projects = ( "framework/src/Volo.Abp.BlobStoring.Azure", "framework/src/Volo.Abp.BlobStoring.Minio", "framework/src/Volo.Abp.BlobStoring.Aws", + "framework/src/Volo.Abp.BlobStoring.Google", "framework/src/Volo.Abp.Caching", "framework/src/Volo.Abp.Caching.StackExchangeRedis", "framework/src/Volo.Abp.Castle.Core", @@ -265,8 +266,8 @@ $projects = ( "modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared", "modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore", "modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB", - # "modules/audit-logging/src/Volo.Abp.AuditLogging.Installer", - # "source-code/Volo.Abp.AuditLogging.SourceCode", + "modules/audit-logging/src/Volo.Abp.AuditLogging.Installer", + "source-code/Volo.Abp.AuditLogging.SourceCode", # modules/background-jobs "modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain", diff --git a/source-code/Volo.Abp.Account.SourceCode/Volo.Abp.Account.SourceCode.zip b/source-code/Volo.Abp.Account.SourceCode/Volo.Abp.Account.SourceCode.zip index 02b74f1b50..19272c5597 100644 Binary files a/source-code/Volo.Abp.Account.SourceCode/Volo.Abp.Account.SourceCode.zip and b/source-code/Volo.Abp.Account.SourceCode/Volo.Abp.Account.SourceCode.zip differ diff --git a/source-code/Volo.Abp.AuditLogging.SourceCode/Volo.Abp.AuditLogging.SourceCode.zip b/source-code/Volo.Abp.AuditLogging.SourceCode/Volo.Abp.AuditLogging.SourceCode.zip index 29c68392c8..64afbfd122 100644 Binary files a/source-code/Volo.Abp.AuditLogging.SourceCode/Volo.Abp.AuditLogging.SourceCode.zip and b/source-code/Volo.Abp.AuditLogging.SourceCode/Volo.Abp.AuditLogging.SourceCode.zip differ diff --git a/source-code/Volo.Abp.BackgroundJobs.SourceCode/Volo.Abp.BackgroundJobs.SourceCode.zip b/source-code/Volo.Abp.BackgroundJobs.SourceCode/Volo.Abp.BackgroundJobs.SourceCode.zip index 280d7fe960..659f337333 100644 Binary files a/source-code/Volo.Abp.BackgroundJobs.SourceCode/Volo.Abp.BackgroundJobs.SourceCode.zip and b/source-code/Volo.Abp.BackgroundJobs.SourceCode/Volo.Abp.BackgroundJobs.SourceCode.zip differ diff --git a/source-code/Volo.Abp.BasicTheme.SourceCode/Volo.Abp.BasicTheme.SourceCode.zip b/source-code/Volo.Abp.BasicTheme.SourceCode/Volo.Abp.BasicTheme.SourceCode.zip index 90090480b0..bcbf997168 100644 Binary files a/source-code/Volo.Abp.BasicTheme.SourceCode/Volo.Abp.BasicTheme.SourceCode.zip and b/source-code/Volo.Abp.BasicTheme.SourceCode/Volo.Abp.BasicTheme.SourceCode.zip differ diff --git a/source-code/Volo.Abp.BlobStoring.Database.SourceCode/Volo.Abp.BlobStoring.Database.SourceCode.zip b/source-code/Volo.Abp.BlobStoring.Database.SourceCode/Volo.Abp.BlobStoring.Database.SourceCode.zip index 1c62512f4b..015404c21b 100644 Binary files a/source-code/Volo.Abp.BlobStoring.Database.SourceCode/Volo.Abp.BlobStoring.Database.SourceCode.zip and b/source-code/Volo.Abp.BlobStoring.Database.SourceCode/Volo.Abp.BlobStoring.Database.SourceCode.zip differ diff --git a/source-code/Volo.Abp.FeatureManagement.SourceCode/Volo.Abp.FeatureManagement.SourceCode.zip b/source-code/Volo.Abp.FeatureManagement.SourceCode/Volo.Abp.FeatureManagement.SourceCode.zip index 5de297ef28..8e6bf05779 100644 Binary files a/source-code/Volo.Abp.FeatureManagement.SourceCode/Volo.Abp.FeatureManagement.SourceCode.zip and b/source-code/Volo.Abp.FeatureManagement.SourceCode/Volo.Abp.FeatureManagement.SourceCode.zip differ diff --git a/source-code/Volo.Abp.Identity.SourceCode/Volo.Abp.Identity.SourceCode.zip b/source-code/Volo.Abp.Identity.SourceCode/Volo.Abp.Identity.SourceCode.zip index 0c81a32650..870d2fc5a9 100644 Binary files a/source-code/Volo.Abp.Identity.SourceCode/Volo.Abp.Identity.SourceCode.zip and b/source-code/Volo.Abp.Identity.SourceCode/Volo.Abp.Identity.SourceCode.zip differ diff --git a/source-code/Volo.Abp.IdentityServer.SourceCode/Volo.Abp.IdentityServer.SourceCode.zip b/source-code/Volo.Abp.IdentityServer.SourceCode/Volo.Abp.IdentityServer.SourceCode.zip index 52e8398e5c..87d165f0ec 100644 Binary files a/source-code/Volo.Abp.IdentityServer.SourceCode/Volo.Abp.IdentityServer.SourceCode.zip and b/source-code/Volo.Abp.IdentityServer.SourceCode/Volo.Abp.IdentityServer.SourceCode.zip differ diff --git a/source-code/Volo.Abp.OpenIddict.SourceCode/Volo.Abp.OpenIddict.SourceCode.zip b/source-code/Volo.Abp.OpenIddict.SourceCode/Volo.Abp.OpenIddict.SourceCode.zip index 81bc6591f0..4fdc4696c7 100644 Binary files a/source-code/Volo.Abp.OpenIddict.SourceCode/Volo.Abp.OpenIddict.SourceCode.zip and b/source-code/Volo.Abp.OpenIddict.SourceCode/Volo.Abp.OpenIddict.SourceCode.zip differ diff --git a/source-code/Volo.Abp.PermissionManagement.SourceCode/Volo.Abp.PermissionManagement.SourceCode.zip b/source-code/Volo.Abp.PermissionManagement.SourceCode/Volo.Abp.PermissionManagement.SourceCode.zip index 45126aa0cd..2f3c13813e 100644 Binary files a/source-code/Volo.Abp.PermissionManagement.SourceCode/Volo.Abp.PermissionManagement.SourceCode.zip and b/source-code/Volo.Abp.PermissionManagement.SourceCode/Volo.Abp.PermissionManagement.SourceCode.zip differ diff --git a/source-code/Volo.Abp.SettingManagement.SourceCode/Volo.Abp.SettingManagement.SourceCode.zip b/source-code/Volo.Abp.SettingManagement.SourceCode/Volo.Abp.SettingManagement.SourceCode.zip index 8cc8c94249..110a32644c 100644 Binary files a/source-code/Volo.Abp.SettingManagement.SourceCode/Volo.Abp.SettingManagement.SourceCode.zip and b/source-code/Volo.Abp.SettingManagement.SourceCode/Volo.Abp.SettingManagement.SourceCode.zip differ diff --git a/source-code/Volo.Abp.TenantManagement.SourceCode/Volo.Abp.TenantManagement.SourceCode.zip b/source-code/Volo.Abp.TenantManagement.SourceCode/Volo.Abp.TenantManagement.SourceCode.zip index d3b5b30483..a809fb5866 100644 Binary files a/source-code/Volo.Abp.TenantManagement.SourceCode/Volo.Abp.TenantManagement.SourceCode.zip and b/source-code/Volo.Abp.TenantManagement.SourceCode/Volo.Abp.TenantManagement.SourceCode.zip differ diff --git a/source-code/Volo.Abp.Users.SourceCode/Volo.Abp.Users.SourceCode.zip b/source-code/Volo.Abp.Users.SourceCode/Volo.Abp.Users.SourceCode.zip index 2f414f7916..f2080d9ce3 100644 Binary files a/source-code/Volo.Abp.Users.SourceCode/Volo.Abp.Users.SourceCode.zip and b/source-code/Volo.Abp.Users.SourceCode/Volo.Abp.Users.SourceCode.zip differ diff --git a/source-code/Volo.Abp.VirtualFileExplorer.SourceCode/Volo.Abp.VirtualFileExplorer.SourceCode.zip b/source-code/Volo.Abp.VirtualFileExplorer.SourceCode/Volo.Abp.VirtualFileExplorer.SourceCode.zip index f2cfc89290..f48f14e513 100644 Binary files a/source-code/Volo.Abp.VirtualFileExplorer.SourceCode/Volo.Abp.VirtualFileExplorer.SourceCode.zip and b/source-code/Volo.Abp.VirtualFileExplorer.SourceCode/Volo.Abp.VirtualFileExplorer.SourceCode.zip differ diff --git a/source-code/Volo.Blogging.SourceCode/Volo.Blogging.SourceCode.zip b/source-code/Volo.Blogging.SourceCode/Volo.Blogging.SourceCode.zip index 61b43961ec..759829b4b4 100644 Binary files a/source-code/Volo.Blogging.SourceCode/Volo.Blogging.SourceCode.zip and b/source-code/Volo.Blogging.SourceCode/Volo.Blogging.SourceCode.zip differ diff --git a/source-code/Volo.ClientSimulation.SourceCode/Volo.ClientSimulation.SourceCode.zip b/source-code/Volo.ClientSimulation.SourceCode/Volo.ClientSimulation.SourceCode.zip index 0bb46ff2c8..68193f472d 100644 Binary files a/source-code/Volo.ClientSimulation.SourceCode/Volo.ClientSimulation.SourceCode.zip and b/source-code/Volo.ClientSimulation.SourceCode/Volo.ClientSimulation.SourceCode.zip differ diff --git a/source-code/Volo.CmsKit.SourceCode/Volo.CmsKit.SourceCode.zip b/source-code/Volo.CmsKit.SourceCode/Volo.CmsKit.SourceCode.zip index 7acf9af12c..ef907dc0fc 100644 Binary files a/source-code/Volo.CmsKit.SourceCode/Volo.CmsKit.SourceCode.zip and b/source-code/Volo.CmsKit.SourceCode/Volo.CmsKit.SourceCode.zip differ diff --git a/source-code/Volo.Docs.SourceCode/Volo.Docs.SourceCode.zip b/source-code/Volo.Docs.SourceCode/Volo.Docs.SourceCode.zip index 43c2e6e230..3142b5a37a 100644 Binary files a/source-code/Volo.Docs.SourceCode/Volo.Docs.SourceCode.zip and b/source-code/Volo.Docs.SourceCode/Volo.Docs.SourceCode.zip differ diff --git a/templates/app-nolayers/angular/package.json b/templates/app-nolayers/angular/package.json index e39918da48..169dea7ea5 100644 --- a/templates/app-nolayers/angular/package.json +++ b/templates/app-nolayers/angular/package.json @@ -12,51 +12,51 @@ }, "private": true, "dependencies": { - "@abp/ng.account": "~8.3.0-rc.1", - "@abp/ng.components": "~8.3.0-rc.1", - "@abp/ng.core": "~8.3.0-rc.1", - "@abp/ng.oauth": "~8.3.0-rc.1", - "@abp/ng.identity": "~8.3.0-rc.1", - "@abp/ng.setting-management": "~8.3.0-rc.1", - "@abp/ng.tenant-management": "~8.3.0-rc.1", - "@abp/ng.theme.shared": "~8.3.0-rc.1", - "@abp/ng.theme.lepton-x": "~3.3.0-rc.1", - "@angular/animations": "~17.3.0", - "@angular/common": "~17.3.0", - "@angular/compiler": "~17.3.0", - "@angular/core": "~17.3.0", - "@angular/forms": "~17.3.0", - "@angular/localize": "~17.3.0", - "@angular/platform-browser": "~17.3.0", - "@angular/platform-browser-dynamic": "~17.3.0", - "@angular/router": "~17.3.0", + "@abp/ng.account": "~8.3.0", + "@abp/ng.components": "~8.3.0", + "@abp/ng.core": "~8.3.0", + "@abp/ng.identity": "~8.3.0", + "@abp/ng.oauth": "~8.3.0", + "@abp/ng.setting-management": "~8.3.0", + "@abp/ng.tenant-management": "~8.3.0", + "@abp/ng.theme.lepton-x": "~3.3.0", + "@abp/ng.theme.shared": "~8.3.0", + "@angular/animations": "~18.1.0", + "@angular/common": "~18.1.0", + "@angular/compiler": "~18.1.0", + "@angular/core": "~18.1.0", + "@angular/forms": "~18.1.0", + "@angular/localize": "~18.1.0", + "@angular/platform-browser": "~18.1.0", + "@angular/platform-browser-dynamic": "~18.1.0", + "@angular/router": "~18.1.0", "bootstrap-icons": "~1.8.0", "rxjs": "~7.8.0", "tslib": "^2.0.0", "zone.js": "~0.14.0" }, "devDependencies": { - "@abp/ng.schematics": "~8.3.0-rc.1", - "@angular-devkit/build-angular": "~17.3.0", - "@angular-eslint/builder": "~17.3.0", - "@angular-eslint/eslint-plugin": "~17.3.0", - "@angular-eslint/eslint-plugin-template": "~17.3.0", - "@angular-eslint/schematics": "~17.3.0", - "@angular-eslint/template-parser": "~17.3.0", - "@angular/cli": "~17.3.0", - "@angular/compiler-cli": "~17.3.0", - "@angular/language-service": "~17.3.0", + "@abp/ng.schematics": "~8.3.0", + "@angular-devkit/build-angular": "~18.1.0", + "@angular-eslint/builder": "~18.1.0", + "@angular-eslint/eslint-plugin": "~18.1.0", + "@angular-eslint/eslint-plugin-template": "~18.1.0", + "@angular-eslint/schematics": "~18.1.0", + "@angular-eslint/template-parser": "~18.1.0", + "@angular/cli": "~18.1.0", + "@angular/compiler-cli": "~18.1.0", + "@angular/language-service": "~18.1.0", "@types/jasmine": "~3.6.0", "@types/node": "^12.11.1", - "@typescript-eslint/eslint-plugin": "6.9.1", - "@typescript-eslint/parser": "6.9.1", - "eslint": "^8.23.0", + "@typescript-eslint/eslint-plugin": "7.16.0", + "@typescript-eslint/parser": "7.16.0", + "eslint": "^8.0.0", "jasmine-core": "~4.0.0", "karma": "~6.3.0", "karma-chrome-launcher": "~3.1.0", "karma-coverage": "~2.1.0", "karma-jasmine": "~4.0.0", "karma-jasmine-html-reporter": "^1.7.0", - "typescript": "~5.3.0" + "typescript": "~5.5.0" } } diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/Localization/MyProjectName/sv.json b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/Localization/MyProjectName/sv.json new file mode 100644 index 0000000000..f9502a88d4 --- /dev/null +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/Localization/MyProjectName/sv.json @@ -0,0 +1,9 @@ +{ + "culture": "sv", + "texts": { + "AppName": "MittProjektNamn", + "Welcome_Title": "VÀlkommen", + "Welcome_Text": "Detta Àr en minimalistisk startmall för applikationer i ett lager för ABP-ramverket.", + "Menu:Home": "Hem" + } +} \ No newline at end of file diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/package.json b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/package.json index 32c701a5f1..e2c26387ff 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/package.json +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/package.json @@ -3,7 +3,7 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.components.server.leptonxlitetheme": "~3.3.0-rc.1", - "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~3.3.0-rc.1" + "@abp/aspnetcore.components.server.leptonxlitetheme": "~3.3.0", + "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~3.3.0" } } diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Localization/MyProjectName/sv.json b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Localization/MyProjectName/sv.json new file mode 100644 index 0000000000..f9502a88d4 --- /dev/null +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Localization/MyProjectName/sv.json @@ -0,0 +1,9 @@ +{ + "culture": "sv", + "texts": { + "AppName": "MittProjektNamn", + "Welcome_Title": "VÀlkommen", + "Welcome_Text": "Detta Àr en minimalistisk startmall för applikationer i ett lager för ABP-ramverket.", + "Menu:Home": "Hem" + } +} \ No newline at end of file diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/package.json b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/package.json index 1f95942a79..c6901f62c8 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/package.json +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/package.json @@ -3,7 +3,7 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~3.3.0-rc.1", - "@abp/aspnetcore.components.server.leptonxlitetheme": "~3.3.0-rc.1" + "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~3.3.0", + "@abp/aspnetcore.components.server.leptonxlitetheme": "~3.3.0" } } diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server.Mongo/package.json b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server.Mongo/package.json index d7c3ba3af3..2d93d3d4d5 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server.Mongo/package.json +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server.Mongo/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~3.3.0-rc.1" + "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~3.3.0" } } diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/package.json b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/package.json index d7c3ba3af3..2d93d3d4d5 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/package.json +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~3.3.0-rc.1" + "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~3.3.0" } } diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Shared/Localization/MyProjectName/sv.json b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Shared/Localization/MyProjectName/sv.json new file mode 100644 index 0000000000..f9502a88d4 --- /dev/null +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Shared/Localization/MyProjectName/sv.json @@ -0,0 +1,9 @@ +{ + "culture": "sv", + "texts": { + "AppName": "MittProjektNamn", + "Welcome_Title": "VÀlkommen", + "Welcome_Text": "Detta Àr en minimalistisk startmall för applikationer i ett lager för ABP-ramverket.", + "Menu:Home": "Hem" + } +} \ No newline at end of file diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host.Mongo/Localization/MyProjectName/sv.json b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host.Mongo/Localization/MyProjectName/sv.json new file mode 100644 index 0000000000..f9502a88d4 --- /dev/null +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host.Mongo/Localization/MyProjectName/sv.json @@ -0,0 +1,9 @@ +{ + "culture": "sv", + "texts": { + "AppName": "MittProjektNamn", + "Welcome_Title": "VÀlkommen", + "Welcome_Text": "Detta Àr en minimalistisk startmall för applikationer i ett lager för ABP-ramverket.", + "Menu:Home": "Hem" + } +} \ No newline at end of file diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host.Mongo/package.json b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host.Mongo/package.json index d7c3ba3af3..2d93d3d4d5 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host.Mongo/package.json +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host.Mongo/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~3.3.0-rc.1" + "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~3.3.0" } } diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/Localization/MyProjectName/sv.json b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/Localization/MyProjectName/sv.json new file mode 100644 index 0000000000..f9502a88d4 --- /dev/null +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/Localization/MyProjectName/sv.json @@ -0,0 +1,9 @@ +{ + "culture": "sv", + "texts": { + "AppName": "MittProjektNamn", + "Welcome_Title": "VÀlkommen", + "Welcome_Text": "Detta Àr en minimalistisk startmall för applikationer i ett lager för ABP-ramverket.", + "Menu:Home": "Hem" + } +} \ No newline at end of file diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/package.json b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/package.json index d7c3ba3af3..2d93d3d4d5 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/package.json +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~3.3.0-rc.1" + "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~3.3.0" } } diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc.Mongo/Localization/MyProjectName/sv.json b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc.Mongo/Localization/MyProjectName/sv.json new file mode 100644 index 0000000000..f9502a88d4 --- /dev/null +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc.Mongo/Localization/MyProjectName/sv.json @@ -0,0 +1,9 @@ +{ + "culture": "sv", + "texts": { + "AppName": "MittProjektNamn", + "Welcome_Title": "VÀlkommen", + "Welcome_Text": "Detta Àr en minimalistisk startmall för applikationer i ett lager för ABP-ramverket.", + "Menu:Home": "Hem" + } +} \ No newline at end of file diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc.Mongo/package.json b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc.Mongo/package.json index d7c3ba3af3..2d93d3d4d5 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc.Mongo/package.json +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc.Mongo/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~3.3.0-rc.1" + "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~3.3.0" } } diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/Localization/MyProjectName/sv.json b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/Localization/MyProjectName/sv.json new file mode 100644 index 0000000000..8d93ff9f71 --- /dev/null +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/Localization/MyProjectName/sv.json @@ -0,0 +1,8 @@ +{ + "culture": "sv", + "texts": { + "AppName": "MittProjektNamn", + "Welcome_Text": "Detta Àr en minimalistisk startmall för applikationer i ett lager för ABP-ramverket.", + "Menu:Home": "Hem" + } +} \ No newline at end of file diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/package.json b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/package.json index d7c3ba3af3..2d93d3d4d5 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/package.json +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~3.3.0-rc.1" + "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~3.3.0" } } diff --git a/templates/app/angular/package.json b/templates/app/angular/package.json index 0fc4890e2b..169dea7ea5 100644 --- a/templates/app/angular/package.json +++ b/templates/app/angular/package.json @@ -12,51 +12,51 @@ }, "private": true, "dependencies": { - "@abp/ng.account": "~8.3.0-rc.1", - "@abp/ng.components": "~8.3.0-rc.1", - "@abp/ng.core": "~8.3.0-rc.1", - "@abp/ng.identity": "~8.3.0-rc.1", - "@abp/ng.oauth": "~8.3.0-rc.1", - "@abp/ng.setting-management": "~8.3.0-rc.1", - "@abp/ng.tenant-management": "~8.3.0-rc.1", - "@abp/ng.theme.lepton-x": "~3.3.0-rc.1", - "@abp/ng.theme.shared": "~8.3.0-rc.1", - "@angular/animations": "~17.3.0", - "@angular/common": "~17.3.0", - "@angular/compiler": "~17.3.0", - "@angular/core": "~17.3.0", - "@angular/forms": "~17.3.0", - "@angular/localize": "~17.3.0", - "@angular/platform-browser": "~17.3.0", - "@angular/platform-browser-dynamic": "~17.3.0", - "@angular/router": "~17.3.0", + "@abp/ng.account": "~8.3.0", + "@abp/ng.components": "~8.3.0", + "@abp/ng.core": "~8.3.0", + "@abp/ng.identity": "~8.3.0", + "@abp/ng.oauth": "~8.3.0", + "@abp/ng.setting-management": "~8.3.0", + "@abp/ng.tenant-management": "~8.3.0", + "@abp/ng.theme.lepton-x": "~3.3.0", + "@abp/ng.theme.shared": "~8.3.0", + "@angular/animations": "~18.1.0", + "@angular/common": "~18.1.0", + "@angular/compiler": "~18.1.0", + "@angular/core": "~18.1.0", + "@angular/forms": "~18.1.0", + "@angular/localize": "~18.1.0", + "@angular/platform-browser": "~18.1.0", + "@angular/platform-browser-dynamic": "~18.1.0", + "@angular/router": "~18.1.0", "bootstrap-icons": "~1.8.0", "rxjs": "~7.8.0", "tslib": "^2.0.0", "zone.js": "~0.14.0" }, "devDependencies": { - "@abp/ng.schematics": "~8.3.0-rc.1", - "@angular-devkit/build-angular": "~17.3.0", - "@angular-eslint/builder": "~17.3.0", - "@angular-eslint/eslint-plugin": "~17.3.0", - "@angular-eslint/eslint-plugin-template": "~17.3.0", - "@angular-eslint/schematics": "~17.3.0", - "@angular-eslint/template-parser": "~17.3.0", - "@angular/cli": "~17.3.0", - "@angular/compiler-cli": "~17.3.0", - "@angular/language-service": "~17.3.0", + "@abp/ng.schematics": "~8.3.0", + "@angular-devkit/build-angular": "~18.1.0", + "@angular-eslint/builder": "~18.1.0", + "@angular-eslint/eslint-plugin": "~18.1.0", + "@angular-eslint/eslint-plugin-template": "~18.1.0", + "@angular-eslint/schematics": "~18.1.0", + "@angular-eslint/template-parser": "~18.1.0", + "@angular/cli": "~18.1.0", + "@angular/compiler-cli": "~18.1.0", + "@angular/language-service": "~18.1.0", "@types/jasmine": "~3.6.0", "@types/node": "^12.11.1", - "@typescript-eslint/eslint-plugin": "6.9.1", - "@typescript-eslint/parser": "6.9.1", - "eslint": "^8.23.0", + "@typescript-eslint/eslint-plugin": "7.16.0", + "@typescript-eslint/parser": "7.16.0", + "eslint": "^8.0.0", "jasmine-core": "~4.0.0", "karma": "~6.3.0", "karma-chrome-launcher": "~3.1.0", "karma-coverage": "~2.1.0", "karma-jasmine": "~4.0.0", "karma-jasmine-html-reporter": "^1.7.0", - "typescript": "~5.3.0" + "typescript": "~5.5.0" } } diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.AuthServer/package.json b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.AuthServer/package.json index 196c60162e..2a1a50dcab 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.AuthServer/package.json +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.AuthServer/package.json @@ -3,6 +3,6 @@ "name": "my-app-authserver", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~3.3.0-rc.1" + "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~3.3.0" } } diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/package.json b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/package.json index 1f95942a79..c6901f62c8 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/package.json +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/package.json @@ -3,7 +3,7 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~3.3.0-rc.1", - "@abp/aspnetcore.components.server.leptonxlitetheme": "~3.3.0-rc.1" + "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~3.3.0", + "@abp/aspnetcore.components.server.leptonxlitetheme": "~3.3.0" } } diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/package.json b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/package.json index 1f95942a79..c6901f62c8 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/package.json +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/package.json @@ -3,7 +3,7 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~3.3.0-rc.1", - "@abp/aspnetcore.components.server.leptonxlitetheme": "~3.3.0-rc.1" + "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~3.3.0", + "@abp/aspnetcore.components.server.leptonxlitetheme": "~3.3.0" } } diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp.Tiered/package.json b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp.Tiered/package.json index 1f95942a79..c6901f62c8 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp.Tiered/package.json +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp.Tiered/package.json @@ -3,7 +3,7 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~3.3.0-rc.1", - "@abp/aspnetcore.components.server.leptonxlitetheme": "~3.3.0-rc.1" + "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~3.3.0", + "@abp/aspnetcore.components.server.leptonxlitetheme": "~3.3.0" } } diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp/package.json b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp/package.json index 1f95942a79..c6901f62c8 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp/package.json +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp/package.json @@ -3,7 +3,7 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~3.3.0-rc.1", - "@abp/aspnetcore.components.server.leptonxlitetheme": "~3.3.0-rc.1" + "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~3.3.0", + "@abp/aspnetcore.components.server.leptonxlitetheme": "~3.3.0" } } diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/sv.json b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/sv.json new file mode 100644 index 0000000000..bd1eae44a5 --- /dev/null +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/sv.json @@ -0,0 +1,9 @@ +{ + "culture": "sv", + "texts": { + "AppName": "MittProjektNamn", + "Menu:Home": "Hem", + "Welcome": "VÀlkommen", + "LongWelcomeMessage": "VÀlkommen till applikationen. Detta Àr ett startup-projekt baserat pÄ ABP-ramverket. För mer information, besök abp.io." + } +} \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/package.json b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/package.json index d7c3ba3af3..2d93d3d4d5 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/package.json +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~3.3.0-rc.1" + "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~3.3.0" } } diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/package.json b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/package.json index d7c3ba3af3..2d93d3d4d5 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/package.json +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~3.3.0-rc.1" + "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~3.3.0" } } diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/package.json b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/package.json index d7c3ba3af3..2d93d3d4d5 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/package.json +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~3.3.0-rc.1" + "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~3.3.0" } } diff --git a/templates/module/angular/package.json b/templates/module/angular/package.json index de7ab6fc3b..13ec8b0b1b 100644 --- a/templates/module/angular/package.json +++ b/templates/module/angular/package.json @@ -13,44 +13,44 @@ }, "private": true, "dependencies": { - "@abp/ng.account": "~8.3.0-rc.1", - "@abp/ng.components": "~8.3.0-rc.1", - "@abp/ng.core": "~8.3.0-rc.1", - "@abp/ng.identity": "~8.3.0-rc.1", - "@abp/ng.oauth": "~8.3.0-rc.1", - "@abp/ng.setting-management": "~8.3.0-rc.1", - "@abp/ng.tenant-management": "~8.3.0-rc.1", - "@abp/ng.theme.basic": "~8.3.0-rc.1", - "@abp/ng.theme.shared": "~8.3.0-rc.1", - "@angular/animations": "~17.3.0", - "@angular/common": "~17.3.0", - "@angular/compiler": "~17.3.0", - "@angular/core": "~17.3.0", - "@angular/forms": "~17.3.0", - "@angular/localize": "~17.3.0", - "@angular/platform-browser": "~17.3.0", - "@angular/platform-browser-dynamic": "~17.3.0", - "@angular/router": "~17.3.0", + "@abp/ng.account": "~8.3.0", + "@abp/ng.components": "~8.3.0", + "@abp/ng.core": "~8.3.0", + "@abp/ng.identity": "~8.3.0", + "@abp/ng.oauth": "~8.3.0", + "@abp/ng.setting-management": "~8.3.0", + "@abp/ng.tenant-management": "~8.3.0", + "@abp/ng.theme.basic": "~8.3.0", + "@abp/ng.theme.shared": "~8.3.0", + "@angular/animations": "~18.1.0", + "@angular/common": "~18.1.0", + "@angular/compiler": "~18.1.0", + "@angular/core": "~18.1.0", + "@angular/forms": "~18.1.0", + "@angular/localize": "~18.1.0", + "@angular/platform-browser": "~18.1.0", + "@angular/platform-browser-dynamic": "~18.1.0", + "@angular/router": "~18.1.0", "rxjs": "~7.8.0", - "tslib": "^2.1.0", + "tslib": "^2.0.0", "zone.js": "~0.14.0" }, "devDependencies": { - "@abp/ng.schematics": "~8.3.0-rc.1", - "@angular-devkit/build-angular": "~17.3.0", - "@angular-eslint/builder": "~17.3.0", - "@angular-eslint/eslint-plugin": "~17.3.0", - "@angular-eslint/eslint-plugin-template": "~17.3.0", - "@angular-eslint/schematics": "~17.3.0", - "@angular-eslint/template-parser": "~17.3.0", - "@angular/cli": "~17.3.0", - "@angular/compiler-cli": "~17.3.0", - "@angular/language-service": "~17.3.0", + "@abp/ng.schematics": "~8.3.0", + "@angular-devkit/build-angular": "~18.1.0", + "@angular-eslint/builder": "~18.1.0", + "@angular-eslint/eslint-plugin": "~18.1.0", + "@angular-eslint/eslint-plugin-template": "~18.1.0", + "@angular-eslint/schematics": "~18.1.0", + "@angular-eslint/template-parser": "~18.1.0", + "@angular/cli": "~18.1.0", + "@angular/compiler-cli": "~18.1.0", + "@angular/language-service": "~18.1.0", "@types/jasmine": "~3.6.0", "@types/node": "^12.11.1", - "@typescript-eslint/eslint-plugin": "6.9.1", - "@typescript-eslint/parser": "6.9.1", - "eslint": "^8.23.0", + "@typescript-eslint/eslint-plugin": "7.16.0", + "@typescript-eslint/parser": "7.16.0", + "eslint": "^8.0.0", "jasmine-core": "~4.0.0", "karma": "~6.3.0", "karma-chrome-launcher": "~3.1.0", @@ -59,6 +59,6 @@ "karma-jasmine-html-reporter": "^1.7.0", "ng-packagr": "~17.3.0", "symlink": "^2.0.0", - "typescript": "~5.3.0" + "typescript": "~5.5.0" } } diff --git a/templates/module/angular/projects/my-project-name/package.json b/templates/module/angular/projects/my-project-name/package.json index 7a08aa8062..6c95bc92b2 100644 --- a/templates/module/angular/projects/my-project-name/package.json +++ b/templates/module/angular/projects/my-project-name/package.json @@ -2,10 +2,10 @@ "name": "@my-company-name/my-project-name", "version": "0.0.1", "peerDependencies": { - "@angular/common": ">=14", - "@angular/core": ">=14", - "@abp/ng.core": ">=8.3.0-rc.1", - "@abp/ng.theme.shared": ">=8.3.0-rc.1" + "@angular/common": "~18.1.0", + "@angular/core": "~18.1.0", + "@abp/ng.core": "~8.3.0", + "@abp/ng.theme.shared": "~8.3.0" }, "dependencies": { "tslib": "^2.1.0" diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.AuthServer/package.json b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.AuthServer/package.json index ee448f3eb6..ace84a4cf2 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.AuthServer/package.json +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.AuthServer/package.json @@ -3,6 +3,6 @@ "name": "my-app-authserver", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "~8.3.0-rc.1" + "@abp/aspnetcore.mvc.ui.theme.basic": "~8.3.0" } } diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/package.json b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/package.json index caac8c1c5f..08805b20e8 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/package.json +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/package.json @@ -3,7 +3,7 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "~8.3.0-rc.1", - "@abp/aspnetcore.components.server.basictheme": "~8.3.0-rc.1" + "@abp/aspnetcore.mvc.ui.theme.basic": "~8.3.0", + "@abp/aspnetcore.components.server.basictheme": "~8.3.0" } } diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/package.json b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/package.json index 01201f86ab..7dad1fc3e2 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/package.json +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "~8.3.0-rc.1" + "@abp/aspnetcore.mvc.ui.theme.basic": "~8.3.0" } } diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/package.json b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/package.json index 01201f86ab..7dad1fc3e2 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/package.json +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "~8.3.0-rc.1" + "@abp/aspnetcore.mvc.ui.theme.basic": "~8.3.0" } } diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/sv.json b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/sv.json new file mode 100644 index 0000000000..a03ced4e7a --- /dev/null +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/sv.json @@ -0,0 +1,7 @@ +{ + "culture": "sv", + "texts": { + "MyAccount": "Mitt konto", + "SamplePageMessage": "En exempelsida för modulen MyProjectName" + } +} \ No newline at end of file