From 418d7a8abdec8cc3c02d4ae9b2fc631b03eaa02b Mon Sep 17 00:00:00 2001 From: Peter Donker Date: Fri, 22 Aug 2025 15:13:02 +0200 Subject: [PATCH 001/199] Rip out the CDF Nuget package --- .../DotNetNuke.Web.Client/packages.config | 1 - DNN Platform/DotNetNuke.Web/packages.config | 1 - DNN Platform/Library/packages.config | 1 - .../DNNConnect.CKE/packages.config | 1 - .../DNNConnect.CKE/web.config | 23 ------------------- DNN Platform/Website/packages.config | 1 - DNN Platform/Website/web.config | 23 ------------------- .../Library/Dnn.PersonaBar.UI/packages.config | 1 - 8 files changed, 52 deletions(-) diff --git a/DNN Platform/DotNetNuke.Web.Client/packages.config b/DNN Platform/DotNetNuke.Web.Client/packages.config index 3a9bbb1430d..6ac84f6ef3b 100644 --- a/DNN Platform/DotNetNuke.Web.Client/packages.config +++ b/DNN Platform/DotNetNuke.Web.Client/packages.config @@ -1,6 +1,5 @@  - diff --git a/DNN Platform/DotNetNuke.Web/packages.config b/DNN Platform/DotNetNuke.Web/packages.config index ec66704fe07..d80ce1140d8 100644 --- a/DNN Platform/DotNetNuke.Web/packages.config +++ b/DNN Platform/DotNetNuke.Web/packages.config @@ -1,6 +1,5 @@  - diff --git a/DNN Platform/Library/packages.config b/DNN Platform/Library/packages.config index 602eabb0579..bf31aa1f3c8 100644 --- a/DNN Platform/Library/packages.config +++ b/DNN Platform/Library/packages.config @@ -1,7 +1,6 @@  - diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/packages.config b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/packages.config index 06fad45a17c..86683e94dcf 100644 --- a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/packages.config +++ b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/packages.config @@ -1,6 +1,5 @@  - diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/web.config b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/web.config index 00abb78ab74..ce1ea19b280 100644 --- a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/web.config +++ b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/web.config @@ -8,22 +8,8 @@ --> - -
- - - - - - - - - - - - @@ -91,16 +77,7 @@ - - - - - - - - - \ No newline at end of file diff --git a/DNN Platform/Website/packages.config b/DNN Platform/Website/packages.config index 2519399f783..9faf64aac64 100644 --- a/DNN Platform/Website/packages.config +++ b/DNN Platform/Website/packages.config @@ -1,6 +1,5 @@  - diff --git a/DNN Platform/Website/web.config b/DNN Platform/Website/web.config index 1143bea0377..41704cdbf4e 100644 --- a/DNN Platform/Website/web.config +++ b/DNN Platform/Website/web.config @@ -1,22 +1,13 @@  - -
- - - - - - - @@ -106,20 +97,6 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Dnn.AdminExperience/Library/Dnn.PersonaBar.UI/packages.config b/Dnn.AdminExperience/Library/Dnn.PersonaBar.UI/packages.config index a800a056224..8e312f39247 100644 --- a/Dnn.AdminExperience/Library/Dnn.PersonaBar.UI/packages.config +++ b/Dnn.AdminExperience/Library/Dnn.PersonaBar.UI/packages.config @@ -1,6 +1,5 @@  - From 35e9fb6583389926d39719f134c32d8a42911007 Mon Sep 17 00:00:00 2001 From: Peter Donker Date: Fri, 29 Aug 2025 10:24:59 +0200 Subject: [PATCH 002/199] First code changes - waiting for feedback on questions posed in the community --- .../ClientResources/CrossOrigin.cs | 18 ++ .../ClientResources/FetchPriority.cs | 18 ++ .../ClientResources/FileOrder.cs | 103 ++++++++++++ .../IClientResourcesController.cs | 157 ++++++++++++++++++ .../ClientResources/PathNameAlias.cs | 15 ++ .../ClientResources/ReferrerPolicy.cs | 36 ++++ .../ClientResources/StandardPriorities.cs | 22 +++ .../ClientResourcesController.cs | 12 ++ ...tNetNuke.Web.Client.ResourceManager.csproj | 11 ++ .../Models/FileInclude.cs | 29 ++++ .../Models/ScriptInclude.cs | 26 +++ .../Models/StylesheetInclude.cs | 12 ++ .../Startup.cs | 18 ++ .../ClientResourceManager.cs | 3 - .../Controls/ClientResourceExclude.cs | 3 - .../Controls/ClientResourceInclude.cs | 2 - .../Controls/ClientResourceLoader.cs | 4 - .../Controls/ClientResourcePath.cs | 2 - .../Controls/ClientResourcePathCollection.cs | 2 - .../Controls/DnnCssExclude.cs | 2 - .../Controls/DnnCssInclude.cs | 2 - .../Controls/DnnHtmlInclude.cs | 2 - .../Controls/DnnJsInclude.cs | 2 - DNN_Platform.sln | 27 +++ 24 files changed, 504 insertions(+), 24 deletions(-) create mode 100644 DNN Platform/DotNetNuke.Abstractions/ClientResources/CrossOrigin.cs create mode 100644 DNN Platform/DotNetNuke.Abstractions/ClientResources/FetchPriority.cs create mode 100644 DNN Platform/DotNetNuke.Abstractions/ClientResources/FileOrder.cs create mode 100644 DNN Platform/DotNetNuke.Abstractions/ClientResources/IClientResourcesController.cs create mode 100644 DNN Platform/DotNetNuke.Abstractions/ClientResources/PathNameAlias.cs create mode 100644 DNN Platform/DotNetNuke.Abstractions/ClientResources/ReferrerPolicy.cs create mode 100644 DNN Platform/DotNetNuke.Abstractions/ClientResources/StandardPriorities.cs create mode 100644 DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourcesController.cs create mode 100644 DNN Platform/DotNetNuke.Web.Client.ResourceManager/DotNetNuke.Web.Client.ResourceManager.csproj create mode 100644 DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/FileInclude.cs create mode 100644 DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ScriptInclude.cs create mode 100644 DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/StylesheetInclude.cs create mode 100644 DNN Platform/DotNetNuke.Web.Client.ResourceManager/Startup.cs diff --git a/DNN Platform/DotNetNuke.Abstractions/ClientResources/CrossOrigin.cs b/DNN Platform/DotNetNuke.Abstractions/ClientResources/CrossOrigin.cs new file mode 100644 index 00000000000..c3d38e67314 --- /dev/null +++ b/DNN Platform/DotNetNuke.Abstractions/ClientResources/CrossOrigin.cs @@ -0,0 +1,18 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information +namespace DotNetNuke.Abstractions.ClientResources +{ + /// Defines the CORS settings to use when including a script or stylesheet from a different origin. + public enum CrossOrigin + { + /// No CORS setting is specified. + None, + + /// Anonymous CORS request. + Anonymous, + + /// Credentials CORS request. + UseCredentials, + } +} diff --git a/DNN Platform/DotNetNuke.Abstractions/ClientResources/FetchPriority.cs b/DNN Platform/DotNetNuke.Abstractions/ClientResources/FetchPriority.cs new file mode 100644 index 00000000000..ed744a201f9 --- /dev/null +++ b/DNN Platform/DotNetNuke.Abstractions/ClientResources/FetchPriority.cs @@ -0,0 +1,18 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information +namespace DotNetNuke.Abstractions.ClientResources +{ + /// Defines the fetch priority for a resource. + public enum FetchPriority + { + /// Default fetch priority. + Auto = 0, + + /// High fetch priority. + High = 1, + + /// Low fetch priority. + Low = 2, + } +} diff --git a/DNN Platform/DotNetNuke.Abstractions/ClientResources/FileOrder.cs b/DNN Platform/DotNetNuke.Abstractions/ClientResources/FileOrder.cs new file mode 100644 index 00000000000..1d0d39f3896 --- /dev/null +++ b/DNN Platform/DotNetNuke.Abstractions/ClientResources/FileOrder.cs @@ -0,0 +1,103 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information +namespace DotNetNuke.Abstractions.ClientResources +{ + using System.Diagnostics.CodeAnalysis; + + /// Contains enumerations that define the relative loading order of both JavaScript and CSS files within the framework's registration system. + public class FileOrder + { + /// Defines load order of key JavaScript files within the framework. + public enum Js + { + /// The default priority (100) indicates that the ordering will be done based on the order in which the registrations are made. + DefaultPriority = 100, + + /// jQuery (CDN or local file) has the priority of 5. + [SuppressMessage("StyleCop.CSharp.NamingRules", "SA1300:ElementMustBeginWithUpperCaseLetter", Justification = "Breaking Change")] + + // ReSharper disable once InconsistentNaming + jQuery = 5, + + /// jQuery Migrate file has the priority of 6, it should appear just after jquery. + [SuppressMessage("StyleCop.CSharp.NamingRules", "SA1300:ElementMustBeginWithUpperCaseLetter", Justification = "Breaking Change")] + + // ReSharper disable once InconsistentNaming + jQueryMigrate = 6, + + /// jQuery UI (CDN or local file) has the priority of 10. + [SuppressMessage("StyleCop.CSharp.NamingRules", "SA1300:ElementMustBeginWithUpperCaseLetter", Justification = "Breaking Change")] + + // ReSharper disable once InconsistentNaming + jQueryUI = 10, + + /// /js/dnn.xml.js has the priority of 15. + DnnXml = 15, + + /// /js/dnn.xml.jsparser.js has the priority of 20. + DnnXmlJsParser = 20, + + /// /js/dnn.xmlhttp.js has the priority of 25. + DnnXmlHttp = 25, + + /// /js/dnn.xmlhttp.jsxmlhttprequest.js has the pririty of 30. + DnnXmlHttpJsXmlHttpRequest = 30, + + /// /js/dnn.dom.positioning.js has the priority of 35. + DnnDomPositioning = 35, + + /// /js/dnn.controls.js has the priority of 40. + DnnControls = 40, + + /// /js/dnn.controls.labeledit.js has the priority of 45. + DnnControlsLabelEdit = 45, + + /// /js/dnn.modalpopup.js has the priority of 50. + DnnModalPopup = 50, + + /// jQuery Hover Intent JS File has the priority of 55. + HoverIntent = 55, + } + + /// Defines load order of key CSS files within the framework. + public enum Css + { + /// The default priority (100) indicates that the ordering will be done based on the order in which the registrations are made. + DefaultPriority = 100, + + /// The default.css file has a priority of 5. + DefaultCss = 5, + + /// The admin.css file has a priority of 6. + AdminCss = 6, + + /// The feature.css file has a priority of 7. + FeatureCss = 7, + + /// The ie.css file has a priority of 8. + IeCss = 8, + + /// Module CSS files have a priority of 10. + ModuleCss = 10, + + /// Resources CSS files have a priority of 12. + ResourceCss = 12, + + /// Skin CSS files have a priority of 15. + SkinCss = 15, + + /// Specific skin control's CSS files have a priority of 20. + SpecificSkinCss = 20, + + /// Container CSS files have a priority of 25. + ContainerCss = 25, + + /// Specific container control's CSS files have a priority of 30. + SpecificContainerCss = 30, + + /// The portal.css file has a priority of 35. + PortalCss = 35, + } + } +} diff --git a/DNN Platform/DotNetNuke.Abstractions/ClientResources/IClientResourcesController.cs b/DNN Platform/DotNetNuke.Abstractions/ClientResources/IClientResourcesController.cs new file mode 100644 index 00000000000..daca0c54efe --- /dev/null +++ b/DNN Platform/DotNetNuke.Abstractions/ClientResources/IClientResourcesController.cs @@ -0,0 +1,157 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information +namespace DotNetNuke.Abstractions.ClientResources; + +using System.Collections.Generic; + +/// Provides an interface for managing client resources. +public interface IClientResourcesController +{ + /// Registers a stylesheet that has an admin level priority. + /// The path to the CSS stylesheet. + void RegisterAdminStylesheet(string filePath); + + /// Registers the default.css stylesheet. + /// The path to the CSS stylesheet. + void RegisterDefaultStylesheet(string filePath); + + /// Registers a stylesheet for a specific feature. + /// The path to the CSS stylesheet. + void RegisterFeatureStylesheet(string filePath); + + /// Requests that a CSS file be registered on the client browser. + /// The relative file path to the CSS resource. + void RegisterStyleSheet(string filePath); + + /// Requests that a CSS file be registered on the client browser. + /// The relative file path to the CSS resource. + /// A dictionary of HTML attributes to use for the link tag. The key being the attribute name and the value its value. + void RegisterStyleSheet(string filePath, IDictionary htmlAttributes); + + /// Requests that a CSS file be registered on the client browser. Defaults to rendering in the page header. + /// The relative file path to the CSS resource. + /// The relative priority in which the file should be loaded. + void RegisterStyleSheet(string filePath, int priority); + + /// Requests that a CSS file be registered on the client browser. Defaults to rendering in the page header. + /// The relative file path to the CSS resource. + /// The relative priority in which the file should be loaded. + /// A dictionary of HTML attributes to use for the link tag. The key being the attribute name and the value its value. + void RegisterStyleSheet(string filePath, int priority, IDictionary htmlAttributes); + + /// Requests that a CSS file be registered on the client browser. Defaults to rendering in the page header. + /// The relative file path to the CSS resource. + /// The relative priority in which the file should be loaded. + void RegisterStyleSheet(string filePath, FileOrder.Css priority); + + /// Requests that a CSS file be registered on the client browser. Defaults to rendering in the page header. + /// The relative file path to the CSS resource. + /// The relative priority in which the file should be loaded. + /// A dictionary of HTML attributes to use for the link tag. The key being the attribute name and the value its value. + void RegisterStyleSheet(string filePath, FileOrder.Css priority, IDictionary htmlAttributes); + + /// Requests that a CSS file be registered on the client browser. Allows for overriding the default provider. + /// The relative file path to the CSS resource. + /// The relative priority in which the file should be loaded. + /// The provider name to be used to render the css file on the page. + void RegisterStyleSheet(string filePath, int priority, string provider); + + /// Requests that a CSS file be registered on the client browser. Allows for overriding the default provider. + /// The relative file path to the CSS resource. + /// The relative priority in which the file should be loaded. + /// The provider name to be used to render the css file on the page. + /// A dictionary of HTML attributes to use for the link tag. The key being the attribute name and the value its value. + void RegisterStyleSheet(string filePath, int priority, string provider, IDictionary htmlAttributes); + + /// Requests that a CSS file be registered on the client browser. Allows for overriding the default provider. + /// The relative file path to the CSS resource. + /// The relative priority in which the file should be loaded. + /// The provider name to be used to render the css file on the page. + /// Name of framework like Bootstrap, Angular, etc. + /// Version number of framework. + void RegisterStyleSheet(string filePath, int priority, string provider, string name, string version); + + /// Requests that a CSS file be registered on the client browser. Allows for overriding the default provider. + /// The relative file path to the CSS resource. + /// The relative priority in which the file should be loaded. + /// The provider name to be used to render the css file on the page. + /// Name of framework like Bootstrap, Angular, etc. + /// Version number of framework. + /// A dictionary of HTML attributes to use for the link tag. The key being the attribute name and the value its value. + void RegisterStyleSheet(string filePath, int priority, string provider, string name, string version, IDictionary htmlAttributes); + + /// Requests that a JavaScript file be registered on the client browser. + /// The relative file path to the JavaScript resource. + void RegisterScript(string filePath); + + /// Requests that a JavaScript file be registered on the client browser. + /// The relative file path to the JavaScript resource. + /// A dictionary of HTML attributes to use for the script tag. The key being the attribute name and the value its value. + void RegisterScript(string filePath, IDictionary htmlAttributes); + + /// Requests that a JavaScript file be registered on the client browser. + /// The relative file path to the JavaScript resource. + /// The relative priority in which the file should be loaded. + void RegisterScript(string filePath, int priority); + + /// Requests that a JavaScript file be registered on the client browser. + /// The relative file path to the JavaScript resource. + /// The relative priority in which the file should be loaded. + /// A dictionary of HTML attributes to use for the script tag. The key being the attribute name and the value its value. + void RegisterScript(string filePath, int priority, IDictionary htmlAttributes); + + /// Requests that a JavaScript file be registered on the client browser. + /// The relative file path to the JavaScript resource. + /// The relative priority in which the file should be loaded. + void RegisterScript(string filePath, FileOrder.Js priority); + + /// Requests that a JavaScript file be registered on the client browser. + /// The relative file path to the JavaScript resource. + /// The relative priority in which the file should be loaded. + /// A dictionary of HTML attributes to use for the script tag. The key being the attribute name and the value its value. + void RegisterScript(string filePath, FileOrder.Js priority, IDictionary htmlAttributes); + + /// Requests that a JavaScript file be registered on the client browser. + /// The relative file path to the JavaScript resource. + /// The relative priority in which the file should be loaded. + /// The name of the provider responsible for rendering the script output. + void RegisterScript(string filePath, FileOrder.Js priority, string provider); + + /// Requests that a JavaScript file be registered on the client browser. + /// The relative file path to the JavaScript resource. + /// The relative priority in which the file should be loaded. + /// The name of the provider responsible for rendering the script output. + /// A dictionary of HTML attributes to use for the script tag. The key being the attribute name and the value its value. + void RegisterScript(string filePath, FileOrder.Js priority, string provider, IDictionary htmlAttributes); + + /// Requests that a JavaScript file be registered on the client browser. + /// The relative file path to the JavaScript resource. + /// The relative priority in which the file should be loaded. + /// The name of the provider responsible for rendering the script output. + void RegisterScript(string filePath, int priority, string provider); + + /// Requests that a JavaScript file be registered on the client browser. + /// The relative file path to the JavaScript resource. + /// The relative priority in which the file should be loaded. + /// The name of the provider responsible for rendering the script output. + /// A dictionary of HTML attributes to use for the script tag. The key being the attribute name and the value its value. + void RegisterScript(string filePath, int priority, string provider, IDictionary htmlAttributes); + + /// Requests that a JavaScript file be registered on the client browser. + /// The relative file path to the JavaScript resource. + /// The relative priority in which the file should be loaded. + /// The name of the provider responsible for rendering the script output. + /// Name of framework like Bootstrap, Angular, etc. + /// Version number of framework. + void RegisterScript(string filePath, int priority, string provider, string name, string version); + + /// Requests that a JavaScript file be registered on the client browser. + /// The relative file path to the JavaScript resource. + /// The relative priority in which the file should be loaded. + /// The name of the provider responsible for rendering the script output. + /// Name of framework like Bootstrap, Angular, etc. + /// Version number of framework. + /// A dictionary of HTML attributes to use for the script tag. The key being the attribute name and the value its value. + void RegisterScript(string filePath, int priority, string provider, string name, string version, IDictionary htmlAttributes); +} diff --git a/DNN Platform/DotNetNuke.Abstractions/ClientResources/PathNameAlias.cs b/DNN Platform/DotNetNuke.Abstractions/ClientResources/PathNameAlias.cs new file mode 100644 index 00000000000..689f83d2e1e --- /dev/null +++ b/DNN Platform/DotNetNuke.Abstractions/ClientResources/PathNameAlias.cs @@ -0,0 +1,15 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information +namespace DotNetNuke.Abstractions.ClientResources +{ + /// Contains constants for the supported PathNameAlias values within the framework's registration system. + public class PathNameAlias + { + /// The path to the current skin. + public const string SkinPath = "SkinPath"; + + /// ~/Resources/Shared/Scripts/ + public const string SharedScripts = "SharedScripts"; + } +} diff --git a/DNN Platform/DotNetNuke.Abstractions/ClientResources/ReferrerPolicy.cs b/DNN Platform/DotNetNuke.Abstractions/ClientResources/ReferrerPolicy.cs new file mode 100644 index 00000000000..8e8f299e0f9 --- /dev/null +++ b/DNN Platform/DotNetNuke.Abstractions/ClientResources/ReferrerPolicy.cs @@ -0,0 +1,36 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information +namespace DotNetNuke.Abstractions.ClientResources +{ + /// Defines the referrer policy to use when including a script or stylesheet. + public enum ReferrerPolicy + { + /// No referrer policy is specified. + None, + + /// Referrer will not be sent. + NoReferrer, + + /// Referrer will not be sent when navigating from HTTPS to HTTP, but will be sent to the same protocol level (e.g. HTTPS→HTTPS) or to a more secure protocol (e.g. HTTP→HTTPS). + NoReferrerWhenDowngrade, + + /// Referrer will be sent with same-origin requests, but cross-origin requests will contain only the origin of the document as the referrer. + Origin, + + /// Referrer will be sent with same-origin requests, but cross-origin requests will contain only the origin of the document as the referrer when the protocol security level stays the same (e.g. HTTPS→HTTPS), but will contain no referrer information when navigating from HTTPS to HTTP. + OriginWhenCrossOrigin, + + /// Referrer will be sent with same-origin requests, but cross-origin requests will contain no referrer information. + SameOrigin, + + /// Referrer will be sent with same-origin requests, but cross-origin requests will contain only the origin of the document as the referrer when the protocol security level stays the same (e.g. HTTPS→HTTPS), but will contain no referrer information when navigating from HTTPS to HTTP or to a less secure protocol. + StrictOrigin, + + /// Referrer will be sent with same-origin requests, but cross-origin requests will contain no referrer information when navigating from HTTPS to HTTP or to a less secure protocol, and will contain only the origin of the document as the referrer when the protocol security level stays the same (e.g. HTTPS→HTTPS). + StrictOriginWhenCrossOrigin, + + /// Referrer will be sent with all requests, including cross-origin requests. + UnsafeUrl, + } +} diff --git a/DNN Platform/DotNetNuke.Abstractions/ClientResources/StandardPriorities.cs b/DNN Platform/DotNetNuke.Abstractions/ClientResources/StandardPriorities.cs new file mode 100644 index 00000000000..9ed53533db8 --- /dev/null +++ b/DNN Platform/DotNetNuke.Abstractions/ClientResources/StandardPriorities.cs @@ -0,0 +1,22 @@ +namespace DotNetNuke.Abstractions.ClientResources +{ + public static class StandardPriorities + { + /// + /// If a priority is not set, the default will be 100. + /// + /// + /// This will generally mean that if a developer doesn't specify a priority it will come after all other dependencies that + /// have unless the priority is explicitly set above 100. + /// + public const int DefaultPriority = 100; + + /// + /// If a group is not set, the default will be 100. + /// + /// + /// Unless a group is specified, all dependencies will go into the same, default, group. + /// + public const int DefaultGroup = 100; + } +} diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourcesController.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourcesController.cs new file mode 100644 index 00000000000..fc97902e642 --- /dev/null +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourcesController.cs @@ -0,0 +1,12 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information +namespace DotNetNuke.Web.Client.ResourceManager +{ + using DotNetNuke.Abstractions.ClientResources; + + /// + public class ClientResourcesController : IClientResourcesController + { + } +} diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/DotNetNuke.Web.Client.ResourceManager.csproj b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/DotNetNuke.Web.Client.ResourceManager.csproj new file mode 100644 index 00000000000..cf2c8397386 --- /dev/null +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/DotNetNuke.Web.Client.ResourceManager.csproj @@ -0,0 +1,11 @@ + + + + netstandard2.0 + + + + + + + diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/FileInclude.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/FileInclude.cs new file mode 100644 index 00000000000..88719cd5d4b --- /dev/null +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/FileInclude.cs @@ -0,0 +1,29 @@ +namespace DotNetNuke.Web.Client.ResourceManager.Models +{ + using System.Collections.Generic; + using DotNetNuke.Abstractions.ClientResources; + + internal class FileInclude + { + public string FilePath { get; set; } + public string PathNameAlias { get; set; } + public int Priority { get; set; } + public string Provider { get; set; } + public string Name { get; set; } + public string Version { get; set; } + public bool ForceVersion { get; set; } + public CrossOrigin CrossOrigin { get; set; } = CrossOrigin.None; + public FetchPriority FetchPriority { get; set; } = FetchPriority.Auto; + public ReferrerPolicy ReferrerPolicy { get; set; } = ReferrerPolicy.None; + public bool Preload { get; set; } = false; + public bool Blocking { get; set; } = false; + + /// + /// Contains inline metadata — a base64-encoded cryptographic hash of the resource (file) you're telling the browser to fetch. + /// The browser can use this to verify that the fetched resource has been delivered without unexpected manipulation. + /// + public string Integrity { get; set; } = ""; + + public Dictionary Attributes { get; set; } = new Dictionary(); + } +} diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ScriptInclude.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ScriptInclude.cs new file mode 100644 index 00000000000..a0343ef2134 --- /dev/null +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ScriptInclude.cs @@ -0,0 +1,26 @@ +namespace DotNetNuke.Web.Client.ResourceManager.Models +{ + internal class ScriptInclude : FileInclude + { + /// + /// For classic scripts, if the async attribute is present, then the classic script will be fetched in parallel to parsing and evaluated as soon as it is available. + /// For module scripts, if the async attribute is present then the scripts and all their dependencies will be fetched in parallel to parsing and evaluated as soon as they are available. + /// If the attribute is specified with the defer attribute, the element will act as if only the async attribute is specified. + /// + public bool Async { get; set; } + + /// + /// This Boolean attribute is set to indicate to a browser that the script is meant to be executed after the document has been parsed, but before firing DOMContentLoaded event. + /// Scripts with the defer attribute will prevent the DOMContentLoaded event from firing until the script has loaded and finished evaluating. + /// Scripts with the defer attribute will execute in the order in which they appear in the document. + /// If the attribute is specified with the async attribute, the element will act as if only the async attribute is specified. + /// + public bool Defer { get; set; } + + /// + /// This Boolean attribute is set to indicate that the script should not be executed in browsers that support ES modules — in effect, + /// this can be used to serve fallback scripts to older browsers that do not support modular JavaScript code. + /// + public bool NoModule { get; set; } + } +} diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/StylesheetInclude.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/StylesheetInclude.cs new file mode 100644 index 00000000000..53ab9dc0c3b --- /dev/null +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/StylesheetInclude.cs @@ -0,0 +1,12 @@ +namespace DotNetNuke.Web.Client.ResourceManager.Models +{ + internal class StylesheetInclude : FileInclude + { + /// + /// Indicates whether the described stylesheet should be loaded and applied to the document. + /// If disabled is specified in the HTML when it is loaded, the stylesheet will not be loaded during page load. + /// Instead, the stylesheet will be loaded on-demand, if and when the disabled attribute is changed to false or removed. + /// + public bool Disabled { get; set; } = false; + } +} diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Startup.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Startup.cs new file mode 100644 index 00000000000..2471f25beac --- /dev/null +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Startup.cs @@ -0,0 +1,18 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information +namespace DotNetNuke.Web.Client.ResourceManager +{ + using DotNetNuke.Abstractions.ClientResources; + using DotNetNuke.DependencyInjection; + using Microsoft.Extensions.DependencyInjection; + + /// + public class Startup : IDnnStartup + { + public void ConfigureServices(IServiceCollection services) + { + services.AddTransient(); + } + } +} diff --git a/DNN Platform/DotNetNuke.Web.Client/ClientResourceManager.cs b/DNN Platform/DotNetNuke.Web.Client/ClientResourceManager.cs index 503456df0fb..343e13e4a03 100644 --- a/DNN Platform/DotNetNuke.Web.Client/ClientResourceManager.cs +++ b/DNN Platform/DotNetNuke.Web.Client/ClientResourceManager.cs @@ -14,9 +14,6 @@ namespace DotNetNuke.Web.Client.ClientResourceManagement using System.Web.UI; using System.Xml; - using ClientDependency.Core; - using ClientDependency.Core.CompositeFiles.Providers; - using ClientDependency.Core.Config; using DotNetNuke.Instrumentation; using DotNetNuke.Internal.SourceGenerators; diff --git a/DNN Platform/DotNetNuke.Web.Client/Controls/ClientResourceExclude.cs b/DNN Platform/DotNetNuke.Web.Client/Controls/ClientResourceExclude.cs index 2a275935da5..583c4b63217 100644 --- a/DNN Platform/DotNetNuke.Web.Client/Controls/ClientResourceExclude.cs +++ b/DNN Platform/DotNetNuke.Web.Client/Controls/ClientResourceExclude.cs @@ -7,9 +7,6 @@ namespace DotNetNuke.Web.Client.Controls using System; using System.Web.UI; - using ClientDependency.Core; - using ClientDependency.Core.Controls; - public abstract class ClientResourceExclude : Control { public string Name { get; set; } diff --git a/DNN Platform/DotNetNuke.Web.Client/Controls/ClientResourceInclude.cs b/DNN Platform/DotNetNuke.Web.Client/Controls/ClientResourceInclude.cs index 06b37e03c22..9ea518933b5 100644 --- a/DNN Platform/DotNetNuke.Web.Client/Controls/ClientResourceInclude.cs +++ b/DNN Platform/DotNetNuke.Web.Client/Controls/ClientResourceInclude.cs @@ -4,8 +4,6 @@ namespace DotNetNuke.Web.Client.ClientResourceManagement { - using ClientDependency.Core.Controls; - /// Represents an included client resource. public class ClientResourceInclude : ClientDependencyInclude { diff --git a/DNN Platform/DotNetNuke.Web.Client/Controls/ClientResourceLoader.cs b/DNN Platform/DotNetNuke.Web.Client/Controls/ClientResourceLoader.cs index eb050444619..344aacdf29d 100644 --- a/DNN Platform/DotNetNuke.Web.Client/Controls/ClientResourceLoader.cs +++ b/DNN Platform/DotNetNuke.Web.Client/Controls/ClientResourceLoader.cs @@ -4,11 +4,7 @@ namespace DotNetNuke.Web.Client.ClientResourceManagement { - using System; using System.Web; - using System.Web.UI; - - using ClientDependency.Core.Controls; /// The central control with which all client resources are registered. public class ClientResourceLoader : ClientDependencyLoader diff --git a/DNN Platform/DotNetNuke.Web.Client/Controls/ClientResourcePath.cs b/DNN Platform/DotNetNuke.Web.Client/Controls/ClientResourcePath.cs index 4c0caf60f27..d93859b5d43 100644 --- a/DNN Platform/DotNetNuke.Web.Client/Controls/ClientResourcePath.cs +++ b/DNN Platform/DotNetNuke.Web.Client/Controls/ClientResourcePath.cs @@ -4,8 +4,6 @@ namespace DotNetNuke.Web.Client.ClientResourceManagement { - using ClientDependency.Core.Controls; - /// Defines the path to a client resource. public class ClientResourcePath : ClientDependencyPath { diff --git a/DNN Platform/DotNetNuke.Web.Client/Controls/ClientResourcePathCollection.cs b/DNN Platform/DotNetNuke.Web.Client/Controls/ClientResourcePathCollection.cs index f943a51473f..b088bc14e23 100644 --- a/DNN Platform/DotNetNuke.Web.Client/Controls/ClientResourcePathCollection.cs +++ b/DNN Platform/DotNetNuke.Web.Client/Controls/ClientResourcePathCollection.cs @@ -4,8 +4,6 @@ namespace DotNetNuke.Web.Client.ClientResourceManagement { - using ClientDependency.Core.Controls; - /// Represents a collection of client resource paths. public class ClientResourcePathCollection : ClientDependencyPathCollection { diff --git a/DNN Platform/DotNetNuke.Web.Client/Controls/DnnCssExclude.cs b/DNN Platform/DotNetNuke.Web.Client/Controls/DnnCssExclude.cs index 87338376f0f..5451779a994 100644 --- a/DNN Platform/DotNetNuke.Web.Client/Controls/DnnCssExclude.cs +++ b/DNN Platform/DotNetNuke.Web.Client/Controls/DnnCssExclude.cs @@ -4,8 +4,6 @@ namespace DotNetNuke.Web.Client.ClientResourceManagement { - using DotNetNuke.Web.Client.Controls; - public class DnnCssExclude : ClientResourceExclude { public DnnCssExclude() diff --git a/DNN Platform/DotNetNuke.Web.Client/Controls/DnnCssInclude.cs b/DNN Platform/DotNetNuke.Web.Client/Controls/DnnCssInclude.cs index 6568221acc2..2c1e951b07d 100644 --- a/DNN Platform/DotNetNuke.Web.Client/Controls/DnnCssInclude.cs +++ b/DNN Platform/DotNetNuke.Web.Client/Controls/DnnCssInclude.cs @@ -6,8 +6,6 @@ namespace DotNetNuke.Web.Client.ClientResourceManagement { using System.Web.UI; - using ClientDependency.Core.Controls; - /// Registers a CSS resource. public class DnnCssInclude : CssInclude { diff --git a/DNN Platform/DotNetNuke.Web.Client/Controls/DnnHtmlInclude.cs b/DNN Platform/DotNetNuke.Web.Client/Controls/DnnHtmlInclude.cs index 0ba10c65c6b..5d8876e6784 100644 --- a/DNN Platform/DotNetNuke.Web.Client/Controls/DnnHtmlInclude.cs +++ b/DNN Platform/DotNetNuke.Web.Client/Controls/DnnHtmlInclude.cs @@ -4,8 +4,6 @@ namespace DotNetNuke.Web.Client.ClientResourceManagement { - using ClientDependency.Core.Controls; - /// Allows for registration of CSS and JavaScript resources. public class DnnHtmlInclude : HtmlInclude { diff --git a/DNN Platform/DotNetNuke.Web.Client/Controls/DnnJsInclude.cs b/DNN Platform/DotNetNuke.Web.Client/Controls/DnnJsInclude.cs index 49bab29ffa9..b291cc2296b 100644 --- a/DNN Platform/DotNetNuke.Web.Client/Controls/DnnJsInclude.cs +++ b/DNN Platform/DotNetNuke.Web.Client/Controls/DnnJsInclude.cs @@ -6,8 +6,6 @@ namespace DotNetNuke.Web.Client.ClientResourceManagement { using System.Web.UI; - using ClientDependency.Core.Controls; - /// Registers a JavaScript resource. public class DnnJsInclude : JsInclude { diff --git a/DNN_Platform.sln b/DNN_Platform.sln index 0825e83f101..b55c61312da 100644 --- a/DNN_Platform.sln +++ b/DNN_Platform.sln @@ -676,6 +676,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Dnn.Skins.Aperture", "DNN P EndProject Project("{54A90642-561A-4BB1-A94E-469ADEE60C69}") = "Dnn.ClientSide", "DNN Platform\Dnn.ClientSide\Dnn.ClientSide.esproj", "{549CCB04-6321-4E6B-88C1-06FAC574D061}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DotNetNuke.Web.Client.ResourceManager", "DNN Platform\DotNetNuke.Web.Client.ResourceManager\DotNetNuke.Web.Client.ResourceManager.csproj", "{039BAFBD-E2DB-40C4-B565-C27467D9B5E1}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Cloud_Debug|Any CPU = Cloud_Debug|Any CPU @@ -2396,6 +2398,30 @@ Global {549CCB04-6321-4E6B-88C1-06FAC574D061}.Release-Net45|x86.ActiveCfg = Release|Any CPU {549CCB04-6321-4E6B-88C1-06FAC574D061}.Release-Net45|x86.Build.0 = Release|Any CPU {549CCB04-6321-4E6B-88C1-06FAC574D061}.Release-Net45|x86.Deploy.0 = Release|Any CPU + {039BAFBD-E2DB-40C4-B565-C27467D9B5E1}.Cloud_Debug|Any CPU.ActiveCfg = Release|Any CPU + {039BAFBD-E2DB-40C4-B565-C27467D9B5E1}.Cloud_Debug|Any CPU.Build.0 = Release|Any CPU + {039BAFBD-E2DB-40C4-B565-C27467D9B5E1}.Cloud_Debug|x86.ActiveCfg = Release|Any CPU + {039BAFBD-E2DB-40C4-B565-C27467D9B5E1}.Cloud_Debug|x86.Build.0 = Release|Any CPU + {039BAFBD-E2DB-40C4-B565-C27467D9B5E1}.Cloud_Release|Any CPU.ActiveCfg = Release|Any CPU + {039BAFBD-E2DB-40C4-B565-C27467D9B5E1}.Cloud_Release|Any CPU.Build.0 = Release|Any CPU + {039BAFBD-E2DB-40C4-B565-C27467D9B5E1}.Cloud_Release|x86.ActiveCfg = Release|Any CPU + {039BAFBD-E2DB-40C4-B565-C27467D9B5E1}.Cloud_Release|x86.Build.0 = Release|Any CPU + {039BAFBD-E2DB-40C4-B565-C27467D9B5E1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {039BAFBD-E2DB-40C4-B565-C27467D9B5E1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {039BAFBD-E2DB-40C4-B565-C27467D9B5E1}.Debug|x86.ActiveCfg = Debug|Any CPU + {039BAFBD-E2DB-40C4-B565-C27467D9B5E1}.Debug|x86.Build.0 = Debug|Any CPU + {039BAFBD-E2DB-40C4-B565-C27467D9B5E1}.Debug-Net45|Any CPU.ActiveCfg = Debug|Any CPU + {039BAFBD-E2DB-40C4-B565-C27467D9B5E1}.Debug-Net45|Any CPU.Build.0 = Debug|Any CPU + {039BAFBD-E2DB-40C4-B565-C27467D9B5E1}.Debug-Net45|x86.ActiveCfg = Debug|Any CPU + {039BAFBD-E2DB-40C4-B565-C27467D9B5E1}.Debug-Net45|x86.Build.0 = Debug|Any CPU + {039BAFBD-E2DB-40C4-B565-C27467D9B5E1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {039BAFBD-E2DB-40C4-B565-C27467D9B5E1}.Release|Any CPU.Build.0 = Release|Any CPU + {039BAFBD-E2DB-40C4-B565-C27467D9B5E1}.Release|x86.ActiveCfg = Release|Any CPU + {039BAFBD-E2DB-40C4-B565-C27467D9B5E1}.Release|x86.Build.0 = Release|Any CPU + {039BAFBD-E2DB-40C4-B565-C27467D9B5E1}.Release-Net45|Any CPU.ActiveCfg = Release|Any CPU + {039BAFBD-E2DB-40C4-B565-C27467D9B5E1}.Release-Net45|Any CPU.Build.0 = Release|Any CPU + {039BAFBD-E2DB-40C4-B565-C27467D9B5E1}.Release-Net45|x86.ActiveCfg = Release|Any CPU + {039BAFBD-E2DB-40C4-B565-C27467D9B5E1}.Release-Net45|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -2538,6 +2564,7 @@ Global {4FBA4C58-559B-4CD2-9926-CDA3498FE20E} = {FBD3B3FB-C9A6-43D2-8FE7-6A0A19DF0D0C} {9F20422E-76EB-4B24-B721-B1CAF17407F4} = {04F3856F-18A5-4916-A0EB-D3CFE0858443} {549CCB04-6321-4E6B-88C1-06FAC574D061} = {29273BE6-1AA8-4970-98A0-41BFFEEDA67B} + {039BAFBD-E2DB-40C4-B565-C27467D9B5E1} = {1DFA65CE-5978-49F9-83BA-CFBD0C7A1814} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {46B6A641-57EB-4B19-B199-23E6FC2AB40B} From 7ede1b052ff379f2158d16e42f86d69a7db0f7d8 Mon Sep 17 00:00:00 2001 From: Peter Donker Date: Wed, 3 Sep 2025 14:15:28 +0200 Subject: [PATCH 003/199] First outlines of a new CDF --- .../IClientResourcesController.cs | 207 +++++------------- .../ClientResources/ILinkResource.cs | 16 ++ .../ClientResources/IResource.cs | 89 ++++++++ .../ClientResources/IScriptResource.cs | 32 +++ .../ClientResources/PathNameAlias.cs | 8 +- .../ClientResources/StandardPriorities.cs | 33 ++- .../ClientResourcesController.cs | 63 ++++++ .../LinkResourceExtensions.cs | 15 ++ .../Models/FileInclude.cs | 2 +- .../Models/LinkResource.cs | 20 ++ .../Models/ScriptInclude.cs | 26 --- .../Models/ScriptResource.cs | 25 +++ .../Models/StylesheetInclude.cs | 12 - .../ScriptResourceExtensions.cs | 15 ++ 14 files changed, 355 insertions(+), 208 deletions(-) create mode 100644 DNN Platform/DotNetNuke.Abstractions/ClientResources/ILinkResource.cs create mode 100644 DNN Platform/DotNetNuke.Abstractions/ClientResources/IResource.cs create mode 100644 DNN Platform/DotNetNuke.Abstractions/ClientResources/IScriptResource.cs create mode 100644 DNN Platform/DotNetNuke.Web.Client.ResourceManager/LinkResourceExtensions.cs create mode 100644 DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/LinkResource.cs delete mode 100644 DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ScriptInclude.cs create mode 100644 DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ScriptResource.cs delete mode 100644 DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/StylesheetInclude.cs create mode 100644 DNN Platform/DotNetNuke.Web.Client.ResourceManager/ScriptResourceExtensions.cs diff --git a/DNN Platform/DotNetNuke.Abstractions/ClientResources/IClientResourcesController.cs b/DNN Platform/DotNetNuke.Abstractions/ClientResources/IClientResourcesController.cs index daca0c54efe..0e801f35400 100644 --- a/DNN Platform/DotNetNuke.Abstractions/ClientResources/IClientResourcesController.cs +++ b/DNN Platform/DotNetNuke.Abstractions/ClientResources/IClientResourcesController.cs @@ -3,155 +3,66 @@ // See the LICENSE file in the project root for more information namespace DotNetNuke.Abstractions.ClientResources; -using System.Collections.Generic; - /// Provides an interface for managing client resources. public interface IClientResourcesController { - /// Registers a stylesheet that has an admin level priority. - /// The path to the CSS stylesheet. - void RegisterAdminStylesheet(string filePath); - - /// Registers the default.css stylesheet. - /// The path to the CSS stylesheet. - void RegisterDefaultStylesheet(string filePath); - - /// Registers a stylesheet for a specific feature. - /// The path to the CSS stylesheet. - void RegisterFeatureStylesheet(string filePath); - - /// Requests that a CSS file be registered on the client browser. - /// The relative file path to the CSS resource. - void RegisterStyleSheet(string filePath); - - /// Requests that a CSS file be registered on the client browser. - /// The relative file path to the CSS resource. - /// A dictionary of HTML attributes to use for the link tag. The key being the attribute name and the value its value. - void RegisterStyleSheet(string filePath, IDictionary htmlAttributes); - - /// Requests that a CSS file be registered on the client browser. Defaults to rendering in the page header. - /// The relative file path to the CSS resource. - /// The relative priority in which the file should be loaded. - void RegisterStyleSheet(string filePath, int priority); - - /// Requests that a CSS file be registered on the client browser. Defaults to rendering in the page header. - /// The relative file path to the CSS resource. - /// The relative priority in which the file should be loaded. - /// A dictionary of HTML attributes to use for the link tag. The key being the attribute name and the value its value. - void RegisterStyleSheet(string filePath, int priority, IDictionary htmlAttributes); - - /// Requests that a CSS file be registered on the client browser. Defaults to rendering in the page header. - /// The relative file path to the CSS resource. - /// The relative priority in which the file should be loaded. - void RegisterStyleSheet(string filePath, FileOrder.Css priority); - - /// Requests that a CSS file be registered on the client browser. Defaults to rendering in the page header. - /// The relative file path to the CSS resource. - /// The relative priority in which the file should be loaded. - /// A dictionary of HTML attributes to use for the link tag. The key being the attribute name and the value its value. - void RegisterStyleSheet(string filePath, FileOrder.Css priority, IDictionary htmlAttributes); - - /// Requests that a CSS file be registered on the client browser. Allows for overriding the default provider. - /// The relative file path to the CSS resource. - /// The relative priority in which the file should be loaded. - /// The provider name to be used to render the css file on the page. - void RegisterStyleSheet(string filePath, int priority, string provider); - - /// Requests that a CSS file be registered on the client browser. Allows for overriding the default provider. - /// The relative file path to the CSS resource. - /// The relative priority in which the file should be loaded. - /// The provider name to be used to render the css file on the page. - /// A dictionary of HTML attributes to use for the link tag. The key being the attribute name and the value its value. - void RegisterStyleSheet(string filePath, int priority, string provider, IDictionary htmlAttributes); - - /// Requests that a CSS file be registered on the client browser. Allows for overriding the default provider. - /// The relative file path to the CSS resource. - /// The relative priority in which the file should be loaded. - /// The provider name to be used to render the css file on the page. - /// Name of framework like Bootstrap, Angular, etc. - /// Version number of framework. - void RegisterStyleSheet(string filePath, int priority, string provider, string name, string version); - - /// Requests that a CSS file be registered on the client browser. Allows for overriding the default provider. - /// The relative file path to the CSS resource. - /// The relative priority in which the file should be loaded. - /// The provider name to be used to render the css file on the page. - /// Name of framework like Bootstrap, Angular, etc. - /// Version number of framework. - /// A dictionary of HTML attributes to use for the link tag. The key being the attribute name and the value its value. - void RegisterStyleSheet(string filePath, int priority, string provider, string name, string version, IDictionary htmlAttributes); - - /// Requests that a JavaScript file be registered on the client browser. - /// The relative file path to the JavaScript resource. - void RegisterScript(string filePath); - - /// Requests that a JavaScript file be registered on the client browser. - /// The relative file path to the JavaScript resource. - /// A dictionary of HTML attributes to use for the script tag. The key being the attribute name and the value its value. - void RegisterScript(string filePath, IDictionary htmlAttributes); - - /// Requests that a JavaScript file be registered on the client browser. - /// The relative file path to the JavaScript resource. - /// The relative priority in which the file should be loaded. - void RegisterScript(string filePath, int priority); - - /// Requests that a JavaScript file be registered on the client browser. - /// The relative file path to the JavaScript resource. - /// The relative priority in which the file should be loaded. - /// A dictionary of HTML attributes to use for the script tag. The key being the attribute name and the value its value. - void RegisterScript(string filePath, int priority, IDictionary htmlAttributes); - - /// Requests that a JavaScript file be registered on the client browser. - /// The relative file path to the JavaScript resource. - /// The relative priority in which the file should be loaded. - void RegisterScript(string filePath, FileOrder.Js priority); - - /// Requests that a JavaScript file be registered on the client browser. - /// The relative file path to the JavaScript resource. - /// The relative priority in which the file should be loaded. - /// A dictionary of HTML attributes to use for the script tag. The key being the attribute name and the value its value. - void RegisterScript(string filePath, FileOrder.Js priority, IDictionary htmlAttributes); - - /// Requests that a JavaScript file be registered on the client browser. - /// The relative file path to the JavaScript resource. - /// The relative priority in which the file should be loaded. - /// The name of the provider responsible for rendering the script output. - void RegisterScript(string filePath, FileOrder.Js priority, string provider); - - /// Requests that a JavaScript file be registered on the client browser. - /// The relative file path to the JavaScript resource. - /// The relative priority in which the file should be loaded. - /// The name of the provider responsible for rendering the script output. - /// A dictionary of HTML attributes to use for the script tag. The key being the attribute name and the value its value. - void RegisterScript(string filePath, FileOrder.Js priority, string provider, IDictionary htmlAttributes); - - /// Requests that a JavaScript file be registered on the client browser. - /// The relative file path to the JavaScript resource. - /// The relative priority in which the file should be loaded. - /// The name of the provider responsible for rendering the script output. - void RegisterScript(string filePath, int priority, string provider); - - /// Requests that a JavaScript file be registered on the client browser. - /// The relative file path to the JavaScript resource. - /// The relative priority in which the file should be loaded. - /// The name of the provider responsible for rendering the script output. - /// A dictionary of HTML attributes to use for the script tag. The key being the attribute name and the value its value. - void RegisterScript(string filePath, int priority, string provider, IDictionary htmlAttributes); - - /// Requests that a JavaScript file be registered on the client browser. - /// The relative file path to the JavaScript resource. - /// The relative priority in which the file should be loaded. - /// The name of the provider responsible for rendering the script output. - /// Name of framework like Bootstrap, Angular, etc. - /// Version number of framework. - void RegisterScript(string filePath, int priority, string provider, string name, string version); - - /// Requests that a JavaScript file be registered on the client browser. - /// The relative file path to the JavaScript resource. - /// The relative priority in which the file should be loaded. - /// The name of the provider responsible for rendering the script output. - /// Name of framework like Bootstrap, Angular, etc. - /// Version number of framework. - /// A dictionary of HTML attributes to use for the script tag. The key being the attribute name and the value its value. - void RegisterScript(string filePath, int priority, string provider, string name, string version, IDictionary htmlAttributes); + /// + /// Adds a link resource to the client resources controller. + /// + /// The to add. + void AddLink(ILinkResource link); + + /// + /// Adds a script resource to the client resources controller. + /// + /// The to add. + void AddScript(IScriptResource script); + + /// + /// Creates a new link resource. + /// + /// An instance representing the created link resource. + ILinkResource CreateLink(); + + /// + /// Create a new script resource. + /// + /// An instance representing the created script resource. + IScriptResource CreateScript(); + + /// + /// Registers a link resource by its path. + /// + /// The path to the link resource to register. + void RegisterLink(string linkPath); + + /// + /// Registers a script resource by its path. + /// + /// The path to the script resource to register. + void RegisterScript(string scriptPath); + + /// + /// Removes a link resource by its name. + /// + /// The name of the link resource to remove. + void RemoveLinkByName(string linkName); + + /// + /// Removes a link resource by its path. + /// + /// The path of the link resource to remove. + void RemoveLinkByPath(string linkPath); + + /// + /// Removes a script resource by its name. + /// + /// The name of the script resource to remove. + void RemoveScriptByName(string scriptName); + + /// + /// Removes a script resource by its path. + /// + /// The path of the script resource to remove. + void RemoveScriptByPath(string scriptPath); } diff --git a/DNN Platform/DotNetNuke.Abstractions/ClientResources/ILinkResource.cs b/DNN Platform/DotNetNuke.Abstractions/ClientResources/ILinkResource.cs new file mode 100644 index 00000000000..b4c374252f9 --- /dev/null +++ b/DNN Platform/DotNetNuke.Abstractions/ClientResources/ILinkResource.cs @@ -0,0 +1,16 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information +namespace DotNetNuke.Abstractions.ClientResources; + +/// Marker interface for link resources. +public interface ILinkResource : IResource +{ + /// + /// Gets or sets a value indicating whether the disabled attribute should be added to the link element. + /// Indicates whether the described stylesheet should be loaded and applied to the document. + /// If disabled is specified in the HTML when it is loaded, the stylesheet will not be loaded during page load. + /// Instead, the stylesheet will be loaded on-demand, if and when the disabled attribute is changed to false or removed. + /// + public bool Disabled { get; set; } +} diff --git a/DNN Platform/DotNetNuke.Abstractions/ClientResources/IResource.cs b/DNN Platform/DotNetNuke.Abstractions/ClientResources/IResource.cs new file mode 100644 index 00000000000..009f8998447 --- /dev/null +++ b/DNN Platform/DotNetNuke.Abstractions/ClientResources/IResource.cs @@ -0,0 +1,89 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information +namespace DotNetNuke.Abstractions.ClientResources; + +using System.Collections.Generic; + +/// +/// Represents a client resource that can be registered with the application. +/// +public interface IResource +{ + /// + /// Gets or sets the file path of the client resource. + /// + string FilePath { get; set; } + + /// + /// Gets or sets the path name alias for the client resource. + /// + string PathNameAlias { get; set; } + + /// + /// Gets or sets the priority of the client resource. + /// + int Priority { get; set; } + + /// + /// Gets or sets the provider of the client resource. + /// + string Provider { get; set; } + + /// + /// Gets or sets the name of the client resource. + /// + string Name { get; set; } + + /// + /// Gets or sets the version of the client resource. + /// + string Version { get; set; } + + /// + /// Gets or sets a value indicating whether to force the version of the client resource. + /// + bool ForceVersion { get; set; } + + /// + /// Gets or sets the cross-origin policy for the client resource. + /// + CrossOrigin CrossOrigin { get; set; } + + /// + /// Gets or sets the fetch priority for the client resource. + /// + FetchPriority FetchPriority { get; set; } + + /// + /// Gets or sets the referrer policy for the client resource. + /// + ReferrerPolicy ReferrerPolicy { get; set; } + + /// + /// Gets or sets a value indicating whether the client resource should be preloaded. + /// + bool Preload { get; set; } + + /// + /// Gets or sets a value indicating whether the client resource is blocking. + /// + bool Blocking { get; set; } + + /// + /// Gets or sets the integrity attribute for the client resource. + /// Contains inline metadata — a base64-encoded cryptographic hash of the resource (file) you're telling the browser to fetch. + /// The browser can use this to verify that the fetched resource has been delivered without unexpected manipulation. + /// + string Integrity { get; set; } + + /// + /// Gets or sets additional attributes for the client resource. + /// + Dictionary Attributes { get; set; } + + /// + /// Registers the client resource. + /// + void Register(); +} diff --git a/DNN Platform/DotNetNuke.Abstractions/ClientResources/IScriptResource.cs b/DNN Platform/DotNetNuke.Abstractions/ClientResources/IScriptResource.cs new file mode 100644 index 00000000000..95c80a7d42d --- /dev/null +++ b/DNN Platform/DotNetNuke.Abstractions/ClientResources/IScriptResource.cs @@ -0,0 +1,32 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information +namespace DotNetNuke.Abstractions.ClientResources; + +/// Marker interface for script resources. +public interface IScriptResource : IResource +{ + /// + /// Gets or sets a value indicating whether the async attribute should be added to the script element. + /// For classic scripts, if the async attribute is present, then the classic script will be fetched in parallel to parsing and evaluated as soon as it is available. + /// For module scripts, if the async attribute is present then the scripts and all their dependencies will be fetched in parallel to parsing and evaluated as soon as they are available. + /// If the attribute is specified with the defer attribute, the element will act as if only the async attribute is specified. + /// + bool Async { get; set; } + + /// + /// Gets or sets a value indicating whether the defer attribute should be added to the script element. + /// This Boolean attribute is set to indicate to a browser that the script is meant to be executed after the document has been parsed, but before firing DOMContentLoaded event. + /// Scripts with the defer attribute will prevent the DOMContentLoaded event from firing until the script has loaded and finished evaluating. + /// Scripts with the defer attribute will execute in the order in which they appear in the document. + /// If the attribute is specified with the async attribute, the element will act as if only the async attribute is specified. + /// + bool Defer { get; set; } + + /// + /// Gets or sets a value indicating whether the noModule attribute should be added to the script element. + /// This Boolean attribute is set to indicate that the script should not be executed in browsers that support ES modules — in effect, + /// this can be used to serve fallback scripts to older browsers that do not support modular JavaScript code. + /// + bool NoModule { get; set; } +} diff --git a/DNN Platform/DotNetNuke.Abstractions/ClientResources/PathNameAlias.cs b/DNN Platform/DotNetNuke.Abstractions/ClientResources/PathNameAlias.cs index 689f83d2e1e..d9ac31b1162 100644 --- a/DNN Platform/DotNetNuke.Abstractions/ClientResources/PathNameAlias.cs +++ b/DNN Platform/DotNetNuke.Abstractions/ClientResources/PathNameAlias.cs @@ -6,10 +6,14 @@ namespace DotNetNuke.Abstractions.ClientResources /// Contains constants for the supported PathNameAlias values within the framework's registration system. public class PathNameAlias { - /// The path to the current skin. + /// + /// The path to the current skin. + /// public const string SkinPath = "SkinPath"; - /// ~/Resources/Shared/Scripts/ + /// + /// Path relative to ~/Resources/Shared/Scripts/. + /// public const string SharedScripts = "SharedScripts"; } } diff --git a/DNN Platform/DotNetNuke.Abstractions/ClientResources/StandardPriorities.cs b/DNN Platform/DotNetNuke.Abstractions/ClientResources/StandardPriorities.cs index 9ed53533db8..ca0a02b3b37 100644 --- a/DNN Platform/DotNetNuke.Abstractions/ClientResources/StandardPriorities.cs +++ b/DNN Platform/DotNetNuke.Abstractions/ClientResources/StandardPriorities.cs @@ -1,22 +1,17 @@ namespace DotNetNuke.Abstractions.ClientResources { - public static class StandardPriorities - { - /// - /// If a priority is not set, the default will be 100. - /// - /// - /// This will generally mean that if a developer doesn't specify a priority it will come after all other dependencies that - /// have unless the priority is explicitly set above 100. - /// - public const int DefaultPriority = 100; - - /// - /// If a group is not set, the default will be 100. - /// - /// - /// Unless a group is specified, all dependencies will go into the same, default, group. - /// - public const int DefaultGroup = 100; - } + /// + /// Provides standard default values for client resource priorities and groups. + /// + public static class StandardPriorities + { + /// + /// If a priority is not set, the default will be 100. + /// + /// + /// This will generally mean that if a developer doesn't specify a priority it will come after all other dependencies that + /// have unless the priority is explicitly set above 100. + /// + public const int DefaultPriority = 100; + } } diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourcesController.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourcesController.cs index fc97902e642..bd76c3573f5 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourcesController.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourcesController.cs @@ -3,10 +3,73 @@ // See the LICENSE file in the project root for more information namespace DotNetNuke.Web.Client.ResourceManager { + using System.Collections.Generic; using DotNetNuke.Abstractions.ClientResources; /// public class ClientResourcesController : IClientResourcesController { + private List Links { get; set; } = new List(); + private List Scripts { get; set; } = new List(); + + /// + public void AddLink(ILinkResource link) + { + Links.Add(link); + } + + /// + public void AddScript(IScriptResource script) + { + Scripts.Add(script); + } + + /// + public ILinkResource CreateLink() + { + return new Models.LinkResource(this); + } + + /// + public IScriptResource CreateScript() + { + return new Models.ScriptResource(this); + } + + /// + public void RegisterLink(string linkPath) + { + this.CreateLink().FromSrc(linkPath).Register(); + } + + /// + public void RegisterScript(string scriptPath) + { + this.CreateScript().FromSrc(scriptPath).Register(); + } + + /// + public void RemoveLinkByName(string linkName) + { + this.Links.RemoveAll(l => l.Name == linkName); + } + + /// + public void RemoveLinkByPath(string linkPath) + { + this.Links.RemoveAll(l => l.FilePath == linkPath); + } + + /// + public void RemoveScriptByName(string scriptName) + { + this.Scripts.RemoveAll(s => s.Name == scriptName); + } + + /// + public void RemoveScriptByPath(string scriptPath) + { + this.Scripts.RemoveAll(s => s.FilePath == scriptPath); + } } } diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/LinkResourceExtensions.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/LinkResourceExtensions.cs new file mode 100644 index 00000000000..9053c4e4524 --- /dev/null +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/LinkResourceExtensions.cs @@ -0,0 +1,15 @@ +using System; +using DotNetNuke.Abstractions.ClientResources; + +namespace DotNetNuke.Web.Client.ResourceManager +{ + public static class LinkResourceExtensions + { + public static ILinkResource FromSrc(this ILinkResource input, string scriptSrc) + { + if (input == null) throw new ArgumentNullException(nameof(input)); + input.FilePath = scriptSrc; + return input; + } + } +} diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/FileInclude.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/FileInclude.cs index 88719cd5d4b..e68b60589d4 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/FileInclude.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/FileInclude.cs @@ -3,7 +3,7 @@ using System.Collections.Generic; using DotNetNuke.Abstractions.ClientResources; - internal class FileInclude + public class FileInclude { public string FilePath { get; set; } public string PathNameAlias { get; set; } diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/LinkResource.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/LinkResource.cs new file mode 100644 index 00000000000..72aaa7e0c72 --- /dev/null +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/LinkResource.cs @@ -0,0 +1,20 @@ +using DotNetNuke.Abstractions.ClientResources; + +namespace DotNetNuke.Web.Client.ResourceManager.Models +{ + public class LinkResource : FileInclude, ILinkResource + { + private readonly IClientResourcesController _clientResourcesController; + public LinkResource(IClientResourcesController clientResourcesController) + { + this._clientResourcesController = clientResourcesController; + } + + public bool Disabled { get; set; } + + public void Register() + { + this._clientResourcesController.AddLink(this); + } + } +} diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ScriptInclude.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ScriptInclude.cs deleted file mode 100644 index a0343ef2134..00000000000 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ScriptInclude.cs +++ /dev/null @@ -1,26 +0,0 @@ -namespace DotNetNuke.Web.Client.ResourceManager.Models -{ - internal class ScriptInclude : FileInclude - { - /// - /// For classic scripts, if the async attribute is present, then the classic script will be fetched in parallel to parsing and evaluated as soon as it is available. - /// For module scripts, if the async attribute is present then the scripts and all their dependencies will be fetched in parallel to parsing and evaluated as soon as they are available. - /// If the attribute is specified with the defer attribute, the element will act as if only the async attribute is specified. - /// - public bool Async { get; set; } - - /// - /// This Boolean attribute is set to indicate to a browser that the script is meant to be executed after the document has been parsed, but before firing DOMContentLoaded event. - /// Scripts with the defer attribute will prevent the DOMContentLoaded event from firing until the script has loaded and finished evaluating. - /// Scripts with the defer attribute will execute in the order in which they appear in the document. - /// If the attribute is specified with the async attribute, the element will act as if only the async attribute is specified. - /// - public bool Defer { get; set; } - - /// - /// This Boolean attribute is set to indicate that the script should not be executed in browsers that support ES modules — in effect, - /// this can be used to serve fallback scripts to older browsers that do not support modular JavaScript code. - /// - public bool NoModule { get; set; } - } -} diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ScriptResource.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ScriptResource.cs new file mode 100644 index 00000000000..5778762fe1b --- /dev/null +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ScriptResource.cs @@ -0,0 +1,25 @@ +using DotNetNuke.Abstractions.ClientResources; + +namespace DotNetNuke.Web.Client.ResourceManager.Models +{ + public class ScriptResource : FileInclude, IScriptResource + { + private readonly IClientResourcesController _clientResourcesController; + + public bool Async { get; set; } = false; + + public bool Defer { get; set; } = false; + + public bool NoModule { get; set; } = false; + + public ScriptResource(IClientResourcesController clientResourcesController) + { + this._clientResourcesController = clientResourcesController; + } + + public void Register() + { + this._clientResourcesController.AddScript(this); + } + } +} diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/StylesheetInclude.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/StylesheetInclude.cs deleted file mode 100644 index 53ab9dc0c3b..00000000000 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/StylesheetInclude.cs +++ /dev/null @@ -1,12 +0,0 @@ -namespace DotNetNuke.Web.Client.ResourceManager.Models -{ - internal class StylesheetInclude : FileInclude - { - /// - /// Indicates whether the described stylesheet should be loaded and applied to the document. - /// If disabled is specified in the HTML when it is loaded, the stylesheet will not be loaded during page load. - /// Instead, the stylesheet will be loaded on-demand, if and when the disabled attribute is changed to false or removed. - /// - public bool Disabled { get; set; } = false; - } -} diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ScriptResourceExtensions.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ScriptResourceExtensions.cs new file mode 100644 index 00000000000..d9368efc31d --- /dev/null +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ScriptResourceExtensions.cs @@ -0,0 +1,15 @@ +using System; +using DotNetNuke.Abstractions.ClientResources; + +namespace DotNetNuke.Web.Client.ResourceManager +{ + public static class ScriptResourceExtensions + { + public static IScriptResource FromSrc(this IScriptResource input, string scriptSrc) + { + if (input == null) throw new ArgumentNullException(nameof(input)); + input.FilePath = scriptSrc; + return input; + } + } +} From 88f086f8f5f383b824dc4b0b7d5ce8e511691b73 Mon Sep 17 00:00:00 2001 From: Peter Donker Date: Thu, 4 Sep 2025 12:10:01 +0200 Subject: [PATCH 004/199] Fleshing out the internals of the new CDF --- .../IClientResourcesController.cs | 21 +++- .../ClientResources/IResource.cs | 16 +++ .../ClientResources/PathNameAlias.cs | 5 + .../ClientResources/ResourceType.cs | 25 ++++ .../ClientResourcesController.cs | 112 ++++++++++++++++-- 5 files changed, 169 insertions(+), 10 deletions(-) create mode 100644 DNN Platform/DotNetNuke.Abstractions/ClientResources/ResourceType.cs diff --git a/DNN Platform/DotNetNuke.Abstractions/ClientResources/IClientResourcesController.cs b/DNN Platform/DotNetNuke.Abstractions/ClientResources/IClientResourcesController.cs index 0e801f35400..cc46cdddded 100644 --- a/DNN Platform/DotNetNuke.Abstractions/ClientResources/IClientResourcesController.cs +++ b/DNN Platform/DotNetNuke.Abstractions/ClientResources/IClientResourcesController.cs @@ -36,6 +36,13 @@ public interface IClientResourcesController /// The path to the link resource to register. void RegisterLink(string linkPath); + /// + /// Registers a path name alias for resolving resource paths. + /// + /// The path name alias. + /// The resolved path corresponding to the alias. + void RegisterPathNameAlias(string pathNameAlias, string resolvedPath); + /// /// Registers a script resource by its path. /// @@ -52,7 +59,8 @@ public interface IClientResourcesController /// Removes a link resource by its path. /// /// The path of the link resource to remove. - void RemoveLinkByPath(string linkPath); + /// The name alias for the path to remove. + void RemoveLinkByPath(string linkPath, string pathNameAlias); /// /// Removes a script resource by its name. @@ -64,5 +72,14 @@ public interface IClientResourcesController /// Removes a script resource by its path. /// /// The path of the script resource to remove. - void RemoveScriptByPath(string scriptPath); + /// The name alias for the path to remove. + void RemoveScriptByPath(string scriptPath, string pathNameAlias); + + /// + /// Renders the dependencies for the specified resource type and provider. + /// + /// The type of resource to render dependencies for. + /// The provider to use for rendering dependencies. + /// A string containing the rendered dependencies. + string RenderDependencies(ResourceType resourceType, string provider); } diff --git a/DNN Platform/DotNetNuke.Abstractions/ClientResources/IResource.cs b/DNN Platform/DotNetNuke.Abstractions/ClientResources/IResource.cs index 009f8998447..d35b86467c4 100644 --- a/DNN Platform/DotNetNuke.Abstractions/ClientResources/IResource.cs +++ b/DNN Platform/DotNetNuke.Abstractions/ClientResources/IResource.cs @@ -20,6 +20,16 @@ public interface IResource /// string PathNameAlias { get; set; } + /// + /// Gets or sets the resolved full src path. + /// + string Src { get; set; } + + /// + /// Gets or sets the lowered src path to facilitate lookup. + /// + string Key { get; set; } + /// /// Gets or sets the priority of the client resource. /// @@ -86,4 +96,10 @@ public interface IResource /// Registers the client resource. /// void Register(); + + /// + /// Renders the client resource as a string. + /// + /// Returns a HTML string. + string Render(); } diff --git a/DNN Platform/DotNetNuke.Abstractions/ClientResources/PathNameAlias.cs b/DNN Platform/DotNetNuke.Abstractions/ClientResources/PathNameAlias.cs index d9ac31b1162..9eea0a3edac 100644 --- a/DNN Platform/DotNetNuke.Abstractions/ClientResources/PathNameAlias.cs +++ b/DNN Platform/DotNetNuke.Abstractions/ClientResources/PathNameAlias.cs @@ -6,6 +6,11 @@ namespace DotNetNuke.Abstractions.ClientResources /// Contains constants for the supported PathNameAlias values within the framework's registration system. public class PathNameAlias { + /// + /// Root path of the DNN installation. + /// + public const string Default = ""; + /// /// The path to the current skin. /// diff --git a/DNN Platform/DotNetNuke.Abstractions/ClientResources/ResourceType.cs b/DNN Platform/DotNetNuke.Abstractions/ClientResources/ResourceType.cs new file mode 100644 index 00000000000..d9f362aef80 --- /dev/null +++ b/DNN Platform/DotNetNuke.Abstractions/ClientResources/ResourceType.cs @@ -0,0 +1,25 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information +namespace DotNetNuke.Abstractions.ClientResources; + +/// +/// Specifies the type of client resource. +/// +public enum ResourceType +{ + /// + /// Represents all resource types. + /// + All, + + /// + /// Represents a script resource type. + /// + Script, + + /// + /// Represents a link resource type such as a CSS file. + /// + Link, +} diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourcesController.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourcesController.cs index bd76c3573f5..ea043b0535f 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourcesController.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourcesController.cs @@ -4,6 +4,7 @@ namespace DotNetNuke.Web.Client.ResourceManager { using System.Collections.Generic; + using System.Linq; using DotNetNuke.Abstractions.ClientResources; /// @@ -11,17 +12,18 @@ public class ClientResourcesController : IClientResourcesController { private List Links { get; set; } = new List(); private List Scripts { get; set; } = new List(); + private Dictionary PathNameAliases { get; set; } = new Dictionary(); /// public void AddLink(ILinkResource link) { - Links.Add(link); + this.Links = this.AddResource(this.Links, link); } /// public void AddScript(IScriptResource script) { - Scripts.Add(script); + this.Scripts = this.AddResource(this.Scripts, script); } /// @@ -42,6 +44,12 @@ public void RegisterLink(string linkPath) this.CreateLink().FromSrc(linkPath).Register(); } + /// + public void RegisterPathNameAlias(string pathNameAlias, string resolvedPath) + { + this.PathNameAliases[pathNameAlias.ToLowerInvariant()] = resolvedPath; + } + /// public void RegisterScript(string scriptPath) { @@ -51,25 +59,113 @@ public void RegisterScript(string scriptPath) /// public void RemoveLinkByName(string linkName) { - this.Links.RemoveAll(l => l.Name == linkName); + this.Links.RemoveAll(l => l.Name.ToLowerInvariant() == linkName.ToLowerInvariant()); } /// - public void RemoveLinkByPath(string linkPath) + public void RemoveLinkByPath(string linkPath, string pathNameAlias) { - this.Links.RemoveAll(l => l.FilePath == linkPath); + var key = this.ResolvePath(linkPath, pathNameAlias).ToLowerInvariant(); + this.Links.RemoveAll(l => l.Key == key); } /// public void RemoveScriptByName(string scriptName) { - this.Scripts.RemoveAll(s => s.Name == scriptName); + this.Scripts.RemoveAll(s => s.Name.ToLowerInvariant() == scriptName.ToLowerInvariant()); + } + + /// + public void RemoveScriptByPath(string scriptPath, string pathNameAlias) + { + var key = this.ResolvePath(scriptPath, pathNameAlias).ToLowerInvariant(); + this.Scripts.RemoveAll(s => s.Key == key); } /// - public void RemoveScriptByPath(string scriptPath) + public string RenderDependencies(ResourceType resourceType, string provider) + { + var sortedList = new List(); + if (resourceType == ResourceType.Link || resourceType == ResourceType.All) + { + foreach (var link in this.Links.OrderBy(l => l.Priority)) + { + sortedList.Add(link.Render()); + } + } + if (resourceType == ResourceType.Script || resourceType == ResourceType.All) + { + foreach (var script in this.Scripts.OrderBy(s => s.Priority)) + { + sortedList.Add(script.Render()); + } + } + return string.Join("", sortedList); + } + + + private List AddResource(List resources, T resource) where T : IResource + { + resource.Src = this.ResolvePath(resource.FilePath, resource.PathNameAlias); + resource.Key = resource.Src.ToLowerInvariant(); + resources.RemoveAll(l => l.Key == resource.Key); // remove any existing link with the same key (i.e. exactly the same resolved path) + if (!string.IsNullOrEmpty(resource.Name)) + { + // if a resource with the same name and force version is already present we ignore this one + if (resources.Exists(l => l.Name.ToLowerInvariant() == resource.Name.ToLowerInvariant() && l.ForceVersion)) + { + return resources; + } + + // If we are forcing the version, we need to remove any existing link with the same name + if (resource.ForceVersion) + { + resources.RemoveAll(l => l.Name.ToLowerInvariant() == resource.Name.ToLowerInvariant()); + } + + // If we have a version, we need to remove any existing link with the same name and a lower version + if (!string.IsNullOrEmpty(resource.Version)) + { + resources.RemoveAll(l => l.Name.ToLowerInvariant() == resource.Name.ToLowerInvariant() && string.Compare(l.Version, resource.Version, System.StringComparison.InvariantCultureIgnoreCase) < 0); + // If we have an existing link with the same name and a higher version, we do not add this link + if (resources.Exists(l => l.Name.ToLowerInvariant() == resource.Name.ToLowerInvariant() && string.Compare(l.Version, resource.Version, System.StringComparison.InvariantCultureIgnoreCase) >= 0)) + { + return resources; + } + } + } + resources.Add(resource); + return resources; + } + + private string ResolvePathNameAlias(string pathNameAlias) + { + if (string.IsNullOrEmpty(pathNameAlias)) + { + return string.Empty; + } + if (this.PathNameAliases.TryGetValue(pathNameAlias.ToLowerInvariant(), out var alias)) + { + return alias; + } + return string.Empty; + } + + private string ResolvePath(string filePath, string pathNameAlias) { - this.Scripts.RemoveAll(s => s.FilePath == scriptPath); + if (string.IsNullOrEmpty(filePath)) + { + return filePath; + } + if (filePath.ToLowerInvariant().StartsWith("http")) + { + // Path is already fully qualified + return filePath; + } + // Path is a relative path to the application root and pathNameAlias + filePath = filePath.Replace("\\", "/").TrimStart('~', '/'); + var root = this.ResolvePathNameAlias(pathNameAlias); + return $"{root}/{filePath}"; } } } From fea032f78bcf5e076e34085719ad1c49294f7a74 Mon Sep 17 00:00:00 2001 From: Peter Donker Date: Fri, 5 Sep 2025 18:46:25 +0200 Subject: [PATCH 005/199] Make link specific. So it's now stylesheet or font. Complete various classes to include all the required methods. --- .../IClientResourcesController.cs | 61 ++- .../ClientResources/IFontResource.cs | 9 + .../ClientResources/IResource.cs | 8 +- .../ClientResources/IScriptResource.cs | 9 + ...LinkResource.cs => IStylesheetResource.cs} | 4 +- .../ClientResources/ResourceType.cs | 9 +- .../ClientResourcesController.cs | 59 ++- .../GenericResourceExtensions.cs | 98 ++++ .../Models/FileInclude.cs | 88 +++- .../Models/FontResource.cs | 42 ++ .../Models/LinkResource.cs | 20 - .../Models/ScriptResource.cs | 34 ++ .../Models/StylesheetResource.cs | 48 ++ .../ScriptResourceExtensions.cs | 25 +- ...ons.cs => StylesheetResourceExtensions.cs} | 6 +- DNN Platform/Website/Default.aspx.designer.cs | 456 +++++++++--------- 16 files changed, 684 insertions(+), 292 deletions(-) create mode 100644 DNN Platform/DotNetNuke.Abstractions/ClientResources/IFontResource.cs rename DNN Platform/DotNetNuke.Abstractions/ClientResources/{ILinkResource.cs => IStylesheetResource.cs} (87%) create mode 100644 DNN Platform/DotNetNuke.Web.Client.ResourceManager/GenericResourceExtensions.cs create mode 100644 DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/FontResource.cs delete mode 100644 DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/LinkResource.cs create mode 100644 DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/StylesheetResource.cs rename DNN Platform/DotNetNuke.Web.Client.ResourceManager/{LinkResourceExtensions.cs => StylesheetResourceExtensions.cs} (59%) diff --git a/DNN Platform/DotNetNuke.Abstractions/ClientResources/IClientResourcesController.cs b/DNN Platform/DotNetNuke.Abstractions/ClientResources/IClientResourcesController.cs index cc46cdddded..bb881c7cf89 100644 --- a/DNN Platform/DotNetNuke.Abstractions/ClientResources/IClientResourcesController.cs +++ b/DNN Platform/DotNetNuke.Abstractions/ClientResources/IClientResourcesController.cs @@ -7,10 +7,10 @@ namespace DotNetNuke.Abstractions.ClientResources; public interface IClientResourcesController { /// - /// Adds a link resource to the client resources controller. + /// Adds a font resource to the client resources controller. /// - /// The to add. - void AddLink(ILinkResource link); + /// The to add. + void AddFont(IFontResource font); /// /// Adds a script resource to the client resources controller. @@ -19,10 +19,16 @@ public interface IClientResourcesController void AddScript(IScriptResource script); /// - /// Creates a new link resource. + /// Adds a stylesheet resource to the client resources controller. /// - /// An instance representing the created link resource. - ILinkResource CreateLink(); + /// The to add. + void AddStylesheet(IStylesheetResource stylesheet); + + /// + /// Create a new font resource. + /// + /// An instance representing the created font resource. + IFontResource CreateFont(); /// /// Create a new script resource. @@ -31,10 +37,16 @@ public interface IClientResourcesController IScriptResource CreateScript(); /// - /// Registers a link resource by its path. + /// Creates a new stylesheet resource. + /// + /// An instance representing the created stylesheet resource. + IStylesheetResource CreateStylesheet(); + + /// + /// Registers a font resource by its path. /// - /// The path to the link resource to register. - void RegisterLink(string linkPath); + /// The path to the font resource to register. + void RegisterFont(string fontPath); /// /// Registers a path name alias for resolving resource paths. @@ -50,17 +62,23 @@ public interface IClientResourcesController void RegisterScript(string scriptPath); /// - /// Removes a link resource by its name. + /// Registers a stylesheet resource by its path. + /// + /// The path to the stylesheet resource to register. + void RegisterStylesheet(string stylesheetPath); + + /// + /// Removes a font resource by its name. /// - /// The name of the link resource to remove. - void RemoveLinkByName(string linkName); + /// The name of the font resource to remove. + void RemoveFontByName(string fontName); /// - /// Removes a link resource by its path. + /// Removes a font resource by its path. /// - /// The path of the link resource to remove. + /// The path of the font resource to remove. /// The name alias for the path to remove. - void RemoveLinkByPath(string linkPath, string pathNameAlias); + void RemoveFontByPath(string fontPath, string pathNameAlias); /// /// Removes a script resource by its name. @@ -75,6 +93,19 @@ public interface IClientResourcesController /// The name alias for the path to remove. void RemoveScriptByPath(string scriptPath, string pathNameAlias); + /// + /// Removes a stylesheet resource by its name. + /// + /// The name of the stylesheet resource to remove. + void RemoveStylesheetByName(string stylesheetName); + + /// + /// Removes a stylesheet resource by its path. + /// + /// The path of the stylesheet resource to remove. + /// The name alias for the path to remove. + void RemoveStylesheetByPath(string stylesheetPath, string pathNameAlias); + /// /// Renders the dependencies for the specified resource type and provider. /// diff --git a/DNN Platform/DotNetNuke.Abstractions/ClientResources/IFontResource.cs b/DNN Platform/DotNetNuke.Abstractions/ClientResources/IFontResource.cs new file mode 100644 index 00000000000..a2408ab29e8 --- /dev/null +++ b/DNN Platform/DotNetNuke.Abstractions/ClientResources/IFontResource.cs @@ -0,0 +1,9 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information +namespace DotNetNuke.Abstractions.ClientResources; + +/// Marker interface for font resources. +public interface IFontResource : IResource +{ +} diff --git a/DNN Platform/DotNetNuke.Abstractions/ClientResources/IResource.cs b/DNN Platform/DotNetNuke.Abstractions/ClientResources/IResource.cs index d35b86467c4..2f3c28dd120 100644 --- a/DNN Platform/DotNetNuke.Abstractions/ClientResources/IResource.cs +++ b/DNN Platform/DotNetNuke.Abstractions/ClientResources/IResource.cs @@ -71,14 +71,14 @@ public interface IResource ReferrerPolicy ReferrerPolicy { get; set; } /// - /// Gets or sets a value indicating whether the client resource should be preloaded. + /// Gets or sets a value indicating whether the client resource is blocking. /// - bool Preload { get; set; } + bool Blocking { get; set; } /// - /// Gets or sets a value indicating whether the client resource is blocking. + /// Gets or sets a value indicating whether the client resource should be preloaded. /// - bool Blocking { get; set; } + bool Preload { get; set; } /// /// Gets or sets the integrity attribute for the client resource. diff --git a/DNN Platform/DotNetNuke.Abstractions/ClientResources/IScriptResource.cs b/DNN Platform/DotNetNuke.Abstractions/ClientResources/IScriptResource.cs index 95c80a7d42d..d73a3671c9b 100644 --- a/DNN Platform/DotNetNuke.Abstractions/ClientResources/IScriptResource.cs +++ b/DNN Platform/DotNetNuke.Abstractions/ClientResources/IScriptResource.cs @@ -29,4 +29,13 @@ public interface IScriptResource : IResource /// this can be used to serve fallback scripts to older browsers that do not support modular JavaScript code. /// bool NoModule { get; set; } + + /// + /// Gets or sets a value indicating the type of script element. + /// The value of this attribute indicates the type of data represented by the script, and will be one of the following: + /// - Empty string or "text/javascript" (default): classic script. + /// - "module": module script. + /// - "importmap": import map. + /// + string Type { get; set; } } diff --git a/DNN Platform/DotNetNuke.Abstractions/ClientResources/ILinkResource.cs b/DNN Platform/DotNetNuke.Abstractions/ClientResources/IStylesheetResource.cs similarity index 87% rename from DNN Platform/DotNetNuke.Abstractions/ClientResources/ILinkResource.cs rename to DNN Platform/DotNetNuke.Abstractions/ClientResources/IStylesheetResource.cs index b4c374252f9..77eb47d79b3 100644 --- a/DNN Platform/DotNetNuke.Abstractions/ClientResources/ILinkResource.cs +++ b/DNN Platform/DotNetNuke.Abstractions/ClientResources/IStylesheetResource.cs @@ -3,8 +3,8 @@ // See the LICENSE file in the project root for more information namespace DotNetNuke.Abstractions.ClientResources; -/// Marker interface for link resources. -public interface ILinkResource : IResource +/// Marker interface for stylesheet resources. +public interface IStylesheetResource : IResource { /// /// Gets or sets a value indicating whether the disabled attribute should be added to the link element. diff --git a/DNN Platform/DotNetNuke.Abstractions/ClientResources/ResourceType.cs b/DNN Platform/DotNetNuke.Abstractions/ClientResources/ResourceType.cs index d9f362aef80..7a1b74508e0 100644 --- a/DNN Platform/DotNetNuke.Abstractions/ClientResources/ResourceType.cs +++ b/DNN Platform/DotNetNuke.Abstractions/ClientResources/ResourceType.cs @@ -13,13 +13,18 @@ public enum ResourceType /// All, + /// + /// Represents a font resource type. + /// + Font, + /// /// Represents a script resource type. /// Script, /// - /// Represents a link resource type such as a CSS file. + /// Represents a stylesheet resource type. /// - Link, + Stylesheet, } diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourcesController.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourcesController.cs index ea043b0535f..df89227d3a1 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourcesController.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourcesController.cs @@ -10,14 +10,15 @@ namespace DotNetNuke.Web.Client.ResourceManager /// public class ClientResourcesController : IClientResourcesController { - private List Links { get; set; } = new List(); + private List Fonts { get; set; } = new List(); private List Scripts { get; set; } = new List(); + private List Stylesheets { get; set; } = new List(); private Dictionary PathNameAliases { get; set; } = new Dictionary(); /// - public void AddLink(ILinkResource link) + public void AddFont(IFontResource font) { - this.Links = this.AddResource(this.Links, link); + this.Fonts = this.AddResource(this.Fonts, font); } /// @@ -27,9 +28,15 @@ public void AddScript(IScriptResource script) } /// - public ILinkResource CreateLink() + public void AddStylesheet(IStylesheetResource stylesheet) { - return new Models.LinkResource(this); + this.Stylesheets = this.AddResource(this.Stylesheets, stylesheet); + } + + /// + public IFontResource CreateFont() + { + throw new System.NotImplementedException(); } /// @@ -39,9 +46,15 @@ public IScriptResource CreateScript() } /// - public void RegisterLink(string linkPath) + public IStylesheetResource CreateStylesheet() + { + return new Models.StylesheetResource(this); + } + + /// + public void RegisterFont(string fontPath) { - this.CreateLink().FromSrc(linkPath).Register(); + throw new System.NotImplementedException(); } /// @@ -57,16 +70,21 @@ public void RegisterScript(string scriptPath) } /// - public void RemoveLinkByName(string linkName) + public void RegisterStylesheet(string stylesheetPath) + { + this.CreateStylesheet().FromSrc(stylesheetPath).Register(); + } + + /// + public void RemoveFontByName(string fontName) { - this.Links.RemoveAll(l => l.Name.ToLowerInvariant() == linkName.ToLowerInvariant()); + throw new System.NotImplementedException(); } /// - public void RemoveLinkByPath(string linkPath, string pathNameAlias) + public void RemoveFontByPath(string fontPath, string pathNameAlias) { - var key = this.ResolvePath(linkPath, pathNameAlias).ToLowerInvariant(); - this.Links.RemoveAll(l => l.Key == key); + throw new System.NotImplementedException(); } /// @@ -82,13 +100,26 @@ public void RemoveScriptByPath(string scriptPath, string pathNameAlias) this.Scripts.RemoveAll(s => s.Key == key); } + /// + public void RemoveStylesheetByName(string stylesheetName) + { + this.Stylesheets.RemoveAll(l => l.Name.ToLowerInvariant() == stylesheetName.ToLowerInvariant()); + } + + /// + public void RemoveStylesheetByPath(string stylesheetPath, string pathNameAlias) + { + var key = this.ResolvePath(stylesheetPath, pathNameAlias).ToLowerInvariant(); + this.Stylesheets.RemoveAll(l => l.Key == key); + } + /// public string RenderDependencies(ResourceType resourceType, string provider) { var sortedList = new List(); - if (resourceType == ResourceType.Link || resourceType == ResourceType.All) + if (resourceType == ResourceType.Stylesheet || resourceType == ResourceType.All) { - foreach (var link in this.Links.OrderBy(l => l.Priority)) + foreach (var link in this.Stylesheets.OrderBy(l => l.Priority)) { sortedList.Add(link.Render()); } diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/GenericResourceExtensions.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/GenericResourceExtensions.cs new file mode 100644 index 00000000000..57e5d4aa22c --- /dev/null +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/GenericResourceExtensions.cs @@ -0,0 +1,98 @@ +using System; +using DotNetNuke.Abstractions.ClientResources; + +namespace DotNetNuke.Web.Client.ResourceManager +{ + public static class GenericResourceExtensions + { + public static T FromSrc(this T input, string scriptSrc) where T : IResource + { + if (input == null) throw new ArgumentNullException(nameof(input)); + input.FilePath = scriptSrc; + return input; + } + + public static T SetPriority(this T input, int priority) where T : IResource + { + if (input == null) throw new ArgumentNullException(nameof(input)); + input.Priority = priority; + return input; + } + + public static T SetNameAndVersion(this T input, string name, string version, bool forceVersion) where T : IResource + { + if (input == null) throw new ArgumentNullException(nameof(input)); + input.Name = name; + input.Version = version; + input.ForceVersion = forceVersion; + return input; + } + + public static T SetProvider(this T input, string provider) where T : IResource + { + if (input == null) throw new ArgumentNullException(nameof(input)); + input.Provider = provider; + return input; + } + + public static T SetPreload(this T input) where T : IResource + { + if (input == null) throw new ArgumentNullException(nameof(input)); + input.Preload = true; + return input; + } + + public static T SetBlocking(this T input) where T : IResource + { + if (input == null) throw new ArgumentNullException(nameof(input)); + input.Blocking = true; + return input; + } + + public static T SetIntegrity(this T input, string hash) where T : IResource + { + if (input == null) throw new ArgumentNullException(nameof(input)); + input.Integrity = hash; + return input; + } + + public static T SetCrossOrigin(this T input, CrossOrigin crossOrigin) where T : IResource + { + if (input == null) throw new ArgumentNullException(nameof(input)); + input.CrossOrigin = crossOrigin; + return input; + } + + public static T SetFetchPriority(this T input, FetchPriority fetchPriority) where T : IResource + { + if (input == null) throw new ArgumentNullException(nameof(input)); + input.FetchPriority = fetchPriority; + return input; + } + + public static T SetReferrerPolicy(this T input, ReferrerPolicy referrerPolicy) where T : IResource + { + if (input == null) throw new ArgumentNullException(nameof(input)); + input.ReferrerPolicy = referrerPolicy; + return input; + } + + public static T AddAttribute(this T input, string attributeName, string attributeValue) where T : IResource + { + if (input == null) throw new ArgumentNullException(nameof(input)); + if (!string.IsNullOrEmpty(attributeName) && !string.IsNullOrEmpty(attributeValue)) + { + if (input.Attributes.ContainsKey(attributeName)) + { + input.Attributes[attributeName] = attributeValue; + } + else + { + input.Attributes.Add(attributeName, attributeValue); + } + } + return input; + } + + } +} diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/FileInclude.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/FileInclude.cs index e68b60589d4..2c6c5c8b97e 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/FileInclude.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/FileInclude.cs @@ -16,14 +16,98 @@ public class FileInclude public FetchPriority FetchPriority { get; set; } = FetchPriority.Auto; public ReferrerPolicy ReferrerPolicy { get; set; } = ReferrerPolicy.None; public bool Preload { get; set; } = false; - public bool Blocking { get; set; } = false; /// - /// Contains inline metadata — a base64-encoded cryptographic hash of the resource (file) you're telling the browser to fetch. + /// Contains inline metadata — a base64-encoded cryptographic hash of the resource (file) you're telling the browser to fetch. /// The browser can use this to verify that the fetched resource has been delivered without unexpected manipulation. /// public string Integrity { get; set; } = ""; + public bool Blocking { get; set; } = false; + public Dictionary Attributes { get; set; } = new Dictionary(); + + protected string RenderBlocking() + { + if (this.Blocking) + { + return " blocking=\"render\""; + } + return string.Empty; + } + + protected string RenderCrossOriginAttribute() + { + if (this.CrossOrigin != CrossOrigin.None) + { + var crossOrigin = "anonymous"; + if (this.CrossOrigin == CrossOrigin.UseCredentials) + { + crossOrigin = "use-credentials"; + } + return $" crossorigin=\"{crossOrigin}\""; + } + return string.Empty; + } + + protected string RenderFetchPriority() + { + if (this.FetchPriority != FetchPriority.Auto) + { + var fetchPriority = "low"; + if (this.FetchPriority == FetchPriority.High) + { + fetchPriority = "high"; + } + return $" fetchpriority=\"{fetchPriority}\""; + } + return string.Empty; + } + + protected string RenderIntegrity() + { + if (!string.IsNullOrEmpty(this.Integrity)) + { + return $" integrity=\"{this.Integrity}\""; + } + return string.Empty; + } + + protected string RenderReferrerPolicy() + { + if (this.ReferrerPolicy != ReferrerPolicy.None) + { + switch (this.ReferrerPolicy) + { + case ReferrerPolicy.NoReferrer: + return " referrerpolicy=\"no-referrer\""; + case ReferrerPolicy.NoReferrerWhenDowngrade: + return " referrerpolicy=\"no-referrer-when-downgrade\""; + case ReferrerPolicy.Origin: + return " referrerpolicy=\"origin\""; + case ReferrerPolicy.OriginWhenCrossOrigin: + return " referrerpolicy=\"origin-when-cross-origin\""; + case ReferrerPolicy.SameOrigin: + return " referrerpolicy=\"same-origin\""; + case ReferrerPolicy.StrictOrigin: + return " referrerpolicy=\"strict-origin\""; + case ReferrerPolicy.StrictOriginWhenCrossOrigin: + return " referrerpolicy=\"strict-origin-when-cross-origin\""; + case ReferrerPolicy.UnsafeUrl: + return " referrerpolicy=\"unsafe-url\""; + } + } + return string.Empty; + } + + protected string RenderAttributes() + { + var htmlString = string.Empty; + foreach (var attribute in this.Attributes) + { + htmlString += $" {attribute.Key}=\"{attribute.Value}\""; + } + return htmlString; + } } } diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/FontResource.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/FontResource.cs new file mode 100644 index 00000000000..e303f50310a --- /dev/null +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/FontResource.cs @@ -0,0 +1,42 @@ +using DotNetNuke.Abstractions.ClientResources; + +namespace DotNetNuke.Web.Client.ResourceManager.Models +{ + public class FontResource : FileInclude, IFontResource + { + private readonly IClientResourcesController _clientResourcesController; + public FontResource(IClientResourcesController clientResourcesController) + { + this._clientResourcesController = clientResourcesController; + } + + public string Src { get; set; } + public string Key { get; set; } + + public void Register() + { + this._clientResourcesController.AddFont(this); + } + + public string Render() + { + var htmlString = " - /// skinDocType control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.Literal skinDocType; - - /// - /// attributeList control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.Literal attributeList; - - /// - /// Head control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.HtmlControls.HtmlHead Head; - - /// - /// metaPanel control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.PlaceHolder metaPanel; - - /// - /// MetaRefresh control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.HtmlControls.HtmlMeta MetaRefresh; - - /// - /// MetaDescription control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected new global::System.Web.UI.HtmlControls.HtmlMeta MetaDescription; - - /// - /// MetaKeywords control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected new global::System.Web.UI.HtmlControls.HtmlMeta MetaKeywords; - - /// - /// MetaCopyright control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.HtmlControls.HtmlMeta MetaCopyright; - - /// - /// MetaGenerator control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.HtmlControls.HtmlMeta MetaGenerator; - - /// - /// MetaAuthor control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.HtmlControls.HtmlMeta MetaAuthor; - - /// - /// MetaRobots control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.HtmlControls.HtmlMeta MetaRobots; - - /// - /// ClientDependencyHeadCss control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.PlaceHolder ClientDependencyHeadCss; - - /// - /// ClientDependencyHeadJs control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.PlaceHolder ClientDependencyHeadJs; - - /// - /// CSS control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.PlaceHolder CSS; - - /// - /// SCRIPTS control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.PlaceHolder SCRIPTS; - - /// - /// Body control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.HtmlControls.HtmlGenericControl Body; - - /// - /// Form control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected new global::DotNetNuke.Common.Controls.Form Form; - - /// - /// BodySCRIPTS control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.PlaceHolder BodySCRIPTS; - - /// - /// SkinError control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.Label SkinError; - - /// - /// SkinPlaceHolder control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.PlaceHolder SkinPlaceHolder; - - /// - /// ScrollTop control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.HtmlControls.HtmlInputHidden ScrollTop; - - /// - /// __dnnVariable control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.HtmlControls.HtmlInputHidden @__dnnVariable; - - /// - /// ClientResourcesFormBottom control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.PlaceHolder ClientResourcesFormBottom; - - /// - /// ClientResourceIncludes control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.PlaceHolder ClientResourceIncludes; - - /// - /// ClientResourceLoader control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::DotNetNuke.Web.Client.ClientResourceManagement.ClientResourceLoader ClientResourceLoader; - } + public partial class DefaultPage + { + + /// + /// skinDocType control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Literal skinDocType; + + /// + /// attributeList control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Literal attributeList; + + /// + /// Head control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.HtmlControls.HtmlHead Head; + + /// + /// metaPanel control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.PlaceHolder metaPanel; + + /// + /// MetaRefresh control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.HtmlControls.HtmlMeta MetaRefresh; + + /// + /// MetaDescription control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.HtmlControls.HtmlMeta MetaDescription; + + /// + /// MetaKeywords control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.HtmlControls.HtmlMeta MetaKeywords; + + /// + /// MetaCopyright control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.HtmlControls.HtmlMeta MetaCopyright; + + /// + /// MetaGenerator control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.HtmlControls.HtmlMeta MetaGenerator; + + /// + /// MetaAuthor control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.HtmlControls.HtmlMeta MetaAuthor; + + /// + /// MetaRobots control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.HtmlControls.HtmlMeta MetaRobots; + + /// + /// ClientDependencyHeadCss control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.PlaceHolder ClientDependencyHeadCss; + + /// + /// ClientDependencyHeadJs control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.PlaceHolder ClientDependencyHeadJs; + + /// + /// CSS control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.PlaceHolder CSS; + + /// + /// SCRIPTS control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.PlaceHolder SCRIPTS; + + /// + /// Body control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.HtmlControls.HtmlGenericControl Body; + + /// + /// Form control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::DotNetNuke.Common.Controls.Form Form; + + /// + /// BodySCRIPTS control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.PlaceHolder BodySCRIPTS; + + /// + /// SkinError control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Label SkinError; + + /// + /// SkinPlaceHolder control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.PlaceHolder SkinPlaceHolder; + + /// + /// ScrollTop control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.HtmlControls.HtmlInputHidden ScrollTop; + + /// + /// __dnnVariable control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.HtmlControls.HtmlInputHidden @__dnnVariable; + + /// + /// ClientResourcesFormBottom control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.PlaceHolder ClientResourcesFormBottom; + + /// + /// ClientResourceIncludes control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.PlaceHolder ClientResourceIncludes; + + /// + /// ClientResourceLoader control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::DotNetNuke.Web.Client.ClientResourceManagement.ClientResourceLoader ClientResourceLoader; + } } From bb3acb45a82664128823c45acd2ddcb6e159407c Mon Sep 17 00:00:00 2001 From: Peter Donker Date: Thu, 11 Sep 2025 23:39:01 +0200 Subject: [PATCH 006/199] Further work to flesh out new CDF and wire the old code to the new --- .../ClientResources/IResource.cs | 2 +- .../ClientResources/IScriptResource.cs | 2 +- .../ClientResources/StandardPriorities.cs | 8 +- .../ClientResourcesController.cs | 35 ++- .../GenericResourceExtensions.cs | 8 + .../DotNetNuke.Web.Client/Cdf/BasicFile.cs | 33 ++ .../Cdf/ClientDependencyType.cs | 14 + .../Controls/ClientResourceExclude.cs | 85 ++--- .../Controls/ClientResourceInclude.cs | 101 +++++- .../Controls/ClientResourceLoader.cs | 297 ++++++++++-------- .../Controls/ClientResourcePath.cs | 4 +- .../Controls/ClientResourcePathCollection.cs | 6 +- .../Controls/DnnCssExclude.cs | 16 +- .../Controls/DnnCssInclude.cs | 19 +- .../Controls/DnnHtmlInclude.cs | 174 +++++++++- .../Controls/DnnJsExclude.cs | 31 +- .../Controls/DnnJsInclude.cs | 15 +- .../Controls/DnnResources.cs | 33 ++ .../DotNetNuke.Web.Client.csproj | 15 +- .../Providers/DnnBodyProvider.cs | 161 ---------- .../DnnCompositeFileProcessingProvider.cs | 95 ------ .../Providers/DnnFileRegistrationProvider.cs | 29 -- .../Providers/DnnFormBottomProvider.cs | 138 -------- .../Providers/DnnPageHeaderProvider.cs | 148 --------- DNN Platform/Website/Default.aspx | 7 +- DNN Platform/Website/Default.aspx.designer.cs | 21 +- 26 files changed, 677 insertions(+), 820 deletions(-) create mode 100644 DNN Platform/DotNetNuke.Web.Client/Cdf/BasicFile.cs create mode 100644 DNN Platform/DotNetNuke.Web.Client/Cdf/ClientDependencyType.cs create mode 100644 DNN Platform/DotNetNuke.Web.Client/Controls/DnnResources.cs delete mode 100644 DNN Platform/DotNetNuke.Web.Client/Providers/DnnBodyProvider.cs delete mode 100644 DNN Platform/DotNetNuke.Web.Client/Providers/DnnCompositeFileProcessingProvider.cs delete mode 100644 DNN Platform/DotNetNuke.Web.Client/Providers/DnnFileRegistrationProvider.cs delete mode 100644 DNN Platform/DotNetNuke.Web.Client/Providers/DnnFormBottomProvider.cs delete mode 100644 DNN Platform/DotNetNuke.Web.Client/Providers/DnnPageHeaderProvider.cs diff --git a/DNN Platform/DotNetNuke.Abstractions/ClientResources/IResource.cs b/DNN Platform/DotNetNuke.Abstractions/ClientResources/IResource.cs index 2f3c28dd120..b7e57c91037 100644 --- a/DNN Platform/DotNetNuke.Abstractions/ClientResources/IResource.cs +++ b/DNN Platform/DotNetNuke.Abstractions/ClientResources/IResource.cs @@ -82,7 +82,7 @@ public interface IResource /// /// Gets or sets the integrity attribute for the client resource. - /// Contains inline metadata — a base64-encoded cryptographic hash of the resource (file) you're telling the browser to fetch. + /// Contains inline metadata — a base64-encoded cryptographic hash of the resource (file) you're telling the browser to fetch. /// The browser can use this to verify that the fetched resource has been delivered without unexpected manipulation. /// string Integrity { get; set; } diff --git a/DNN Platform/DotNetNuke.Abstractions/ClientResources/IScriptResource.cs b/DNN Platform/DotNetNuke.Abstractions/ClientResources/IScriptResource.cs index d73a3671c9b..86031fa3016 100644 --- a/DNN Platform/DotNetNuke.Abstractions/ClientResources/IScriptResource.cs +++ b/DNN Platform/DotNetNuke.Abstractions/ClientResources/IScriptResource.cs @@ -25,7 +25,7 @@ public interface IScriptResource : IResource /// /// Gets or sets a value indicating whether the noModule attribute should be added to the script element. - /// This Boolean attribute is set to indicate that the script should not be executed in browsers that support ES modules — in effect, + /// This Boolean attribute is set to indicate that the script should not be executed in browsers that support ES modules — in effect, /// this can be used to serve fallback scripts to older browsers that do not support modular JavaScript code. /// bool NoModule { get; set; } diff --git a/DNN Platform/DotNetNuke.Abstractions/ClientResources/StandardPriorities.cs b/DNN Platform/DotNetNuke.Abstractions/ClientResources/StandardPriorities.cs index ca0a02b3b37..adf91dfaf20 100644 --- a/DNN Platform/DotNetNuke.Abstractions/ClientResources/StandardPriorities.cs +++ b/DNN Platform/DotNetNuke.Abstractions/ClientResources/StandardPriorities.cs @@ -1,4 +1,8 @@ -namespace DotNetNuke.Abstractions.ClientResources +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information + +namespace DotNetNuke.Abstractions.ClientResources { /// /// Provides standard default values for client resource priorities and groups. @@ -9,7 +13,7 @@ public static class StandardPriorities /// If a priority is not set, the default will be 100. /// /// - /// This will generally mean that if a developer doesn't specify a priority it will come after all other dependencies that + /// This will generally mean that if a developer doesn't specify a priority it will come after all other dependencies that /// have unless the priority is explicitly set above 100. /// public const int DefaultPriority = 100; diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourcesController.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourcesController.cs index df89227d3a1..e64880f0edd 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourcesController.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourcesController.cs @@ -14,6 +14,9 @@ public class ClientResourcesController : IClientResourcesController private List Scripts { get; set; } = new List(); private List Stylesheets { get; set; } = new List(); private Dictionary PathNameAliases { get; set; } = new Dictionary(); + private List FontsToExclude { get; set; } = new List(); + private List ScriptsToExclude { get; set; } = new List(); + private List StylesheetsToExclude { get; set; } = new List(); /// public void AddFont(IFontResource font) @@ -36,7 +39,7 @@ public void AddStylesheet(IStylesheetResource stylesheet) /// public IFontResource CreateFont() { - throw new System.NotImplementedException(); + return new Models.FontResource(this); } /// @@ -54,7 +57,7 @@ public IStylesheetResource CreateStylesheet() /// public void RegisterFont(string fontPath) { - throw new System.NotImplementedException(); + this.CreateFont().FromSrc(fontPath).Register(); } /// @@ -78,55 +81,63 @@ public void RegisterStylesheet(string stylesheetPath) /// public void RemoveFontByName(string fontName) { - throw new System.NotImplementedException(); + this.FontsToExclude.Add(fontName.ToLowerInvariant()); } /// public void RemoveFontByPath(string fontPath, string pathNameAlias) { - throw new System.NotImplementedException(); + var fullPath = this.ResolvePath(fontPath, pathNameAlias).ToLowerInvariant(); + this.FontsToExclude.Add(fullPath.ToLowerInvariant()); } /// public void RemoveScriptByName(string scriptName) { - this.Scripts.RemoveAll(s => s.Name.ToLowerInvariant() == scriptName.ToLowerInvariant()); + this.ScriptsToExclude.Add(scriptName.ToLowerInvariant()); } /// public void RemoveScriptByPath(string scriptPath, string pathNameAlias) { - var key = this.ResolvePath(scriptPath, pathNameAlias).ToLowerInvariant(); - this.Scripts.RemoveAll(s => s.Key == key); + var fullPath = this.ResolvePath(scriptPath, pathNameAlias).ToLowerInvariant(); + this.ScriptsToExclude.Add(fullPath.ToLowerInvariant()); } /// public void RemoveStylesheetByName(string stylesheetName) { - this.Stylesheets.RemoveAll(l => l.Name.ToLowerInvariant() == stylesheetName.ToLowerInvariant()); + this.StylesheetsToExclude.Add(stylesheetName.ToLowerInvariant()); } /// public void RemoveStylesheetByPath(string stylesheetPath, string pathNameAlias) { - var key = this.ResolvePath(stylesheetPath, pathNameAlias).ToLowerInvariant(); - this.Stylesheets.RemoveAll(l => l.Key == key); + var fullPath = this.ResolvePath(stylesheetPath, pathNameAlias).ToLowerInvariant(); + this.StylesheetsToExclude.Add(fullPath.ToLowerInvariant()); } /// public string RenderDependencies(ResourceType resourceType, string provider) { var sortedList = new List(); + if (resourceType == ResourceType.Font || resourceType == ResourceType.All) + { + foreach (var link in this.Fonts.Where(s => !this.FontsToExclude.Contains(s.Name.ToLowerInvariant())).OrderBy(l => l.Priority)) + { + sortedList.Add(link.Render()); + } + } if (resourceType == ResourceType.Stylesheet || resourceType == ResourceType.All) { - foreach (var link in this.Stylesheets.OrderBy(l => l.Priority)) + foreach (var link in this.Stylesheets.Where(s => !this.StylesheetsToExclude.Contains(s.Name.ToLowerInvariant())).OrderBy(l => l.Priority)) { sortedList.Add(link.Render()); } } if (resourceType == ResourceType.Script || resourceType == ResourceType.All) { - foreach (var script in this.Scripts.OrderBy(s => s.Priority)) + foreach (var script in this.Scripts.Where(s => !this.ScriptsToExclude.Contains(s.Name.ToLowerInvariant())).OrderBy(s => s.Priority)) { sortedList.Add(script.Render()); } diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/GenericResourceExtensions.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/GenericResourceExtensions.cs index 57e5d4aa22c..0cb20b8e2c3 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/GenericResourceExtensions.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/GenericResourceExtensions.cs @@ -12,6 +12,14 @@ public static T FromSrc(this T input, string scriptSrc) where T : IResource return input; } + public static T FromSrc(this T input, string scriptSrc, string pathNameAlias) where T : IResource + { + if (input == null) throw new ArgumentNullException(nameof(input)); + input.FilePath = scriptSrc; + input.PathNameAlias = pathNameAlias; + return input; + } + public static T SetPriority(this T input, int priority) where T : IResource { if (input == null) throw new ArgumentNullException(nameof(input)); diff --git a/DNN Platform/DotNetNuke.Web.Client/Cdf/BasicFile.cs b/DNN Platform/DotNetNuke.Web.Client/Cdf/BasicFile.cs new file mode 100644 index 00000000000..29df9daaf94 --- /dev/null +++ b/DNN Platform/DotNetNuke.Web.Client/Cdf/BasicFile.cs @@ -0,0 +1,33 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace DotNetNuke.Web.Client.Cdf +{ + internal class BasicFile + { + public BasicFile(ClientDependencyType type) + { + DependencyType = type; + HtmlAttributes = new Dictionary(); + Priority = 100; + Group = 100; + Name = ""; + Version = ""; + ForceVersion = false; + } + + public string FilePath { get; set; } + public ClientDependencyType DependencyType { get; private set; } + public int Priority { get; set; } + public int Group { get; set; } + public string PathNameAlias { get; set; } + public string ForceProvider { get; set; } + public IDictionary HtmlAttributes { get; private set; } + public string Name { get; set; } + public string Version { get; set; } + public bool ForceVersion { get; set; } + } +} diff --git a/DNN Platform/DotNetNuke.Web.Client/Cdf/ClientDependencyType.cs b/DNN Platform/DotNetNuke.Web.Client/Cdf/ClientDependencyType.cs new file mode 100644 index 00000000000..9f258334d1f --- /dev/null +++ b/DNN Platform/DotNetNuke.Web.Client/Cdf/ClientDependencyType.cs @@ -0,0 +1,14 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information + +namespace DotNetNuke.Web.Client.Cdf +{ + /// + /// The type of client file + /// + public enum ClientDependencyType + { + Javascript, Css + } +} diff --git a/DNN Platform/DotNetNuke.Web.Client/Controls/ClientResourceExclude.cs b/DNN Platform/DotNetNuke.Web.Client/Controls/ClientResourceExclude.cs index 583c4b63217..c1e5dd81d00 100644 --- a/DNN Platform/DotNetNuke.Web.Client/Controls/ClientResourceExclude.cs +++ b/DNN Platform/DotNetNuke.Web.Client/Controls/ClientResourceExclude.cs @@ -2,44 +2,53 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information -namespace DotNetNuke.Web.Client.Controls -{ - using System; - using System.Web.UI; +namespace DotNetNuke.Web.Client.Controls +{ + using System; + using System.Web.UI; - public abstract class ClientResourceExclude : Control - { - public string Name { get; set; } - + using DotNetNuke.Abstractions.ClientResources; + using DotNetNuke.Web.Client.Cdf; + + /// + /// Represents a control that excludes a client resource from being included in the page. + /// + public abstract class ClientResourceExclude : Control + { + private readonly IClientResourcesController clientResourcesController; + + /// + /// Initializes a new instance of the class. + /// + /// The client resources controller. + protected ClientResourceExclude(IClientResourcesController clientResourcesController) + { + this.clientResourcesController = clientResourcesController; + } + + /// + /// Gets or sets the name of the client resource to exclude. + /// + public string Name { get; set; } + + /// + /// Gets the dependency type of the client resource to exclude. + /// public ClientDependencyType DependencyType { get; internal set; } - /// - protected override void OnPreRender(EventArgs e) - { - base.OnPreRender(e); - var loader = this.Page.FindControl("ClientResourceIncludes"); - this.Name = this.Name.ToLowerInvariant(); - - if (loader != null) - { - ClientDependencyInclude ctlToRemove = null; - if (!string.IsNullOrEmpty(this.Name)) - { - foreach (ClientDependencyInclude ctl in loader.Controls) - { - if (ctl.Name.ToLowerInvariant() == this.Name && ctl.DependencyType == this.DependencyType) - { - ctlToRemove = ctl; - break; - } - } - } - - if (ctlToRemove != null) - { - loader.Controls.Remove(ctlToRemove); - } - } - } - } -} + protected override void OnInit(EventArgs e) + { + switch (this.DependencyType) + { + case ClientDependencyType.Css: + this.clientResourcesController.RemoveStylesheetByName(this.Name); + break; + case ClientDependencyType.Javascript: + this.clientResourcesController.RemoveScriptByName(this.Name); + break; + default: + throw new ArgumentOutOfRangeException(); + } + } + } +} diff --git a/DNN Platform/DotNetNuke.Web.Client/Controls/ClientResourceInclude.cs b/DNN Platform/DotNetNuke.Web.Client/Controls/ClientResourceInclude.cs index 9ea518933b5..f944449894e 100644 --- a/DNN Platform/DotNetNuke.Web.Client/Controls/ClientResourceInclude.cs +++ b/DNN Platform/DotNetNuke.Web.Client/Controls/ClientResourceInclude.cs @@ -2,10 +2,101 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information -namespace DotNetNuke.Web.Client.ClientResourceManagement -{ - /// Represents an included client resource. - public class ClientResourceInclude : ClientDependencyInclude +namespace DotNetNuke.Web.Client.ClientResourceManagement +{ + using System; + using System.Web.UI; + + using DotNetNuke.Abstractions.ClientResources; + using DotNetNuke.Web.Client.Cdf; + using DotNetNuke.Web.Client.ResourceManager; + + /// Represents an included client resource. + public abstract class ClientResourceInclude : Control { + private readonly IClientResourcesController clientResourcesController; + + /// + /// Initializes a new instance of the class. + /// + /// The client resources controller. + protected ClientResourceInclude(IClientResourcesController clientResourcesController) + { + this.clientResourcesController = clientResourcesController; + } + + /// + /// Gets the type of client dependency for this resource (e.g., Javascript or Css). + /// + public ClientDependencyType DependencyType { get; internal set; } + + /// + /// Gets or sets the file path for the client resource to be included. + /// + public string FilePath { get; set; } + + /// + /// Gets or sets the path name alias for the client resource. + /// + public string PathNameAlias { get; set; } + + /// + /// Gets or sets the priority for the client resource. Resources with lower priority values are included before those with higher values. + /// + public int Priority { get; set; } + + /// + /// Gets or sets the group for the client resource. Resources in the same group are processed together. + /// + public int Group { get; set; } + + /// + /// Gets or sets the name of the script (e.g. jQuery, Bootstrap, Angular, etc.). + /// + public string Name { get; set; } + + /// + /// Gets or sets the version of this resource if it is a named resource. Note this field is only used when is specified. + /// + public string Version { get; set; } + + /// + /// Gets or sets a value indicating whether to force this version to be used. Meant for skin designers that wish to override choices made by module developers or the framework. + /// + public bool ForceVersion { get; set; } + + /// + /// Gets or sets the provider to force for this resource. This can be empty and will use default provider. + /// If specified, it must match a provider registered in the Client Resource Management configuration. + /// + public string ForceProvider { get; set; } + + /// + /// Gets or sets a value indicating whether to add the HTML tag for this resource to the page output. + /// + public bool AddTag { get; set; } + + protected override void OnInit(EventArgs e) + { + switch (this.DependencyType) + { + case ClientDependencyType.Css: + this.clientResourcesController.CreateStylesheet() + .FromSrc(this.FilePath, this.PathNameAlias) + .SetNameAndVersion(this.Name, this.Version, this.ForceVersion) + .SetProvider(this.ForceProvider) + .SetPriority(this.Priority) + .Register(); + break; + case ClientDependencyType.Javascript: + this.clientResourcesController.CreateScript() + .FromSrc(this.FilePath, this.PathNameAlias) + .SetNameAndVersion(this.Name, this.Version, this.ForceVersion) + .SetProvider(this.ForceProvider) + .SetPriority(this.Priority) + .Register(); + break; + } + } } -} +} diff --git a/DNN Platform/DotNetNuke.Web.Client/Controls/ClientResourceLoader.cs b/DNN Platform/DotNetNuke.Web.Client/Controls/ClientResourceLoader.cs index 344aacdf29d..303ecf54720 100644 --- a/DNN Platform/DotNetNuke.Web.Client/Controls/ClientResourceLoader.cs +++ b/DNN Platform/DotNetNuke.Web.Client/Controls/ClientResourceLoader.cs @@ -2,134 +2,175 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information -namespace DotNetNuke.Web.Client.ClientResourceManagement -{ - using System.Web; - - /// The central control with which all client resources are registered. - public class ClientResourceLoader : ClientDependencyLoader - { - private bool AsyncPostBackHandlerEnabled - { - get - { - return HttpContext.Current != null - && HttpContext.Current.Items.Contains("AsyncPostBackHandlerEnabled"); - } +namespace DotNetNuke.Web.Client.ClientResourceManagement +{ + using System.Web; + using System.Web.UI; + + using DotNetNuke.Abstractions.ClientResources; + + /// The central control with which all client resources are registered. + [ParseChildren(typeof(ClientResourcePath), ChildrenAsProperties = true)] + public class ClientResourceLoader : Control + { + private readonly IClientResourcesController clientResourcesController; + +#pragma warning disable IDE0290 + /// + /// Initializes a new instance of the class. + /// + /// The client resources controller to use for resource registration. + public ClientResourceLoader(IClientResourcesController clientResourcesController) + { + this.clientResourcesController = clientResourcesController; + this.Paths = new ClientResourcePathCollection(); + } +#pragma warning restore IDE0290 + + [PersistenceMode(PersistenceMode.InnerProperty)] + public ClientResourcePathCollection Paths { get; private set; } + + private bool AsyncPostBackHandlerEnabled + { + get + { + return HttpContext.Current != null + && HttpContext.Current.Items.Contains("AsyncPostBackHandlerEnabled"); + } + } + + protected override void OnInit(System.EventArgs e) + { + if (this.AsyncPostBackHandlerEnabled && ScriptManager.GetCurrent(this.Page) == null) + { + throw new System.Exception("The ClientResourceLoader control requires a ScriptManager on the page when AsyncPostBackHandlerEnabled is true."); + } + + base.OnInit(e); + } + + protected override void OnLoad(System.EventArgs e) + { + foreach (var path in this.Paths) + { + this.clientResourcesController.RegisterPathNameAlias(path.Name, path.Path); + } + + base.OnLoad(e); } /// - protected override void OnPreRender(System.EventArgs e) - { - foreach (var path in this.Paths) - { - path.Name = path.Name.ToLowerInvariant(); - } - - if (this.AsyncPostBackHandlerEnabled) - { - const string handlerScript = @" -var loadScriptInSingleMode = function(){ - var s = document.createElement( 'script' ); - s.type = 'text/javascript'; - s.src = window.dnnLoadScriptsInAjaxMode[0]; - s.onload = window.dnnLoadScriptsInAjaxModeComplete; - s.onerror = window.dnnLoadScriptsInAjaxModeComplete; - document.body.appendChild(s); -}; - -var loadScriptInMultipleMode = function(){ - for(var i = 0; i < window.dnnLoadScriptsInAjaxMode.length; i++){ - var s = document.createElement( 'script' ); - s.type = 'text/javascript'; - s.src = window.dnnLoadScriptsInAjaxMode[i]; - s.onload = window.dnnLoadScriptsInAjaxModeComplete; - s.onerror = window.dnnLoadScriptsInAjaxModeComplete; - document.body.appendChild(s); - } -}; - -var isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') > -1; - -(function($){ -Sys.WebForms.PageRequestManager.getInstance().add_pageLoading(function (sender, args){ - var dataItems = args.get_dataItems(); - for(var item in dataItems){ - if(item.indexOf('$crm_') > -1){ - var content = dataItems[item]; - //check whether script already register to page. - if(typeof window.dnnLoadScriptsInAjaxMode === 'undefined'){ - window.dnnLoadScriptsInAjaxMode = []; - } - var scripts = content.match(/<\/script>/gi); - if(scripts && scripts.length > 0){ - for(var i = 0; i < scripts.length; i++){ - var src = scripts[i].match(/src=""(.+?)""/i)[1]; - if($('script[src=""' + src + '""]').length == 0){ - window.dnnLoadScriptsInAjaxMode.push(src); - } - } - } - - var styles = content.match(/]+?>/gi); - if(styles && styles.length > 0){ - for(var i = 0; i < styles.length; i++){ - var src = styles[i].match(/href=""(.+?)""/i)[1]; - if($('link[href=""' + src + '""]').length == 0){ - $(document.body).append(styles[i]); - } - } - } - } - } - - if(window.dnnLoadScriptsInAjaxMode.length > 0){ - window.loadingScriptsInAsyncRequest = true; - if(isFirefox || window['forceLoadScriptsInSingleMode'] === true){ - loadScriptInSingleMode(); - } else { - loadScriptInMultipleMode(); - } - } -}); - -if(typeof window.dnnLoadScriptsInAjaxModeComplete == 'undefined'){ - window.dnnLoadScriptsInAjaxModeComplete = function(){ - var src = $(this).attr('src'); - if(typeof window.dnnLoadScriptsInAjaxMode !== 'undefined'){ - for(var i = 0; i < window.dnnLoadScriptsInAjaxMode.length; i++){ - if(window.dnnLoadScriptsInAjaxMode[i] == src){ - window.dnnLoadScriptsInAjaxMode.splice(i, 1); - break; - } - } - if(window.dnnLoadScriptsInAjaxMode.length == 0){ - window.loadingScriptsInAsyncRequest = false; - $(window).trigger('dnnScriptLoadComplete'); - }else if(isFirefox || window['forceLoadScriptsInSingleMode'] === true){ - loadScriptInSingleMode(); - } - } - } -} - -var originalScriptLoad = Sys._ScriptLoader.getInstance().loadScripts; -Sys._ScriptLoader.getInstance().loadScripts = function(){ - var self = this, args = arguments; - if(window.loadingScriptsInAsyncRequest === true){ - $(window).one('dnnScriptLoadComplete', function(){ - originalScriptLoad.apply(self, args); - }); - } else { - originalScriptLoad.apply(self, args); - } -}; -}(jQuery)); -"; - this.Page.ClientScript.RegisterStartupScript(this.GetType(), "CRMHandler", handlerScript, true); - } - - base.OnPreRender(e); - } - } -} + protected override void OnPreRender(System.EventArgs e) + { + foreach (var path in this.Paths) + { + path.Name = path.Name.ToLowerInvariant(); + } + + if (this.AsyncPostBackHandlerEnabled) + { + const string handlerScript = @" +var loadScriptInSingleMode = function(){ + var s = document.createElement( 'script' ); + s.type = 'text/javascript'; + s.src = window.dnnLoadScriptsInAjaxMode[0]; + s.onload = window.dnnLoadScriptsInAjaxModeComplete; + s.onerror = window.dnnLoadScriptsInAjaxModeComplete; + document.body.appendChild(s); +}; + +var loadScriptInMultipleMode = function(){ + for(var i = 0; i < window.dnnLoadScriptsInAjaxMode.length; i++){ + var s = document.createElement( 'script' ); + s.type = 'text/javascript'; + s.src = window.dnnLoadScriptsInAjaxMode[i]; + s.onload = window.dnnLoadScriptsInAjaxModeComplete; + s.onerror = window.dnnLoadScriptsInAjaxModeComplete; + document.body.appendChild(s); + } +}; + +var isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') > -1; + +(function($){ +Sys.WebForms.PageRequestManager.getInstance().add_pageLoading(function (sender, args){ + var dataItems = args.get_dataItems(); + for(var item in dataItems){ + if(item.indexOf('$crm_') > -1){ + var content = dataItems[item]; + //check whether script already register to page. + if(typeof window.dnnLoadScriptsInAjaxMode === 'undefined'){ + window.dnnLoadScriptsInAjaxMode = []; + } + var scripts = content.match(/<\/script>/gi); + if(scripts && scripts.length > 0){ + for(var i = 0; i < scripts.length; i++){ + var src = scripts[i].match(/src=""(.+?)""/i)[1]; + if($('script[src=""' + src + '""]').length == 0){ + window.dnnLoadScriptsInAjaxMode.push(src); + } + } + } + + var styles = content.match(/]+?>/gi); + if(styles && styles.length > 0){ + for(var i = 0; i < styles.length; i++){ + var src = styles[i].match(/href=""(.+?)""/i)[1]; + if($('link[href=""' + src + '""]').length == 0){ + $(document.body).append(styles[i]); + } + } + } + } + } + + if(window.dnnLoadScriptsInAjaxMode.length > 0){ + window.loadingScriptsInAsyncRequest = true; + if(isFirefox || window['forceLoadScriptsInSingleMode'] === true){ + loadScriptInSingleMode(); + } else { + loadScriptInMultipleMode(); + } + } +}); + +if(typeof window.dnnLoadScriptsInAjaxModeComplete == 'undefined'){ + window.dnnLoadScriptsInAjaxModeComplete = function(){ + var src = $(this).attr('src'); + if(typeof window.dnnLoadScriptsInAjaxMode !== 'undefined'){ + for(var i = 0; i < window.dnnLoadScriptsInAjaxMode.length; i++){ + if(window.dnnLoadScriptsInAjaxMode[i] == src){ + window.dnnLoadScriptsInAjaxMode.splice(i, 1); + break; + } + } + if(window.dnnLoadScriptsInAjaxMode.length == 0){ + window.loadingScriptsInAsyncRequest = false; + $(window).trigger('dnnScriptLoadComplete'); + }else if(isFirefox || window['forceLoadScriptsInSingleMode'] === true){ + loadScriptInSingleMode(); + } + } + } +} + +var originalScriptLoad = Sys._ScriptLoader.getInstance().loadScripts; +Sys._ScriptLoader.getInstance().loadScripts = function(){ + var self = this, args = arguments; + if(window.loadingScriptsInAsyncRequest === true){ + $(window).one('dnnScriptLoadComplete', function(){ + originalScriptLoad.apply(self, args); + }); + } else { + originalScriptLoad.apply(self, args); + } +}; +}(jQuery)); +"; + this.Page.ClientScript.RegisterStartupScript(this.GetType(), "CRMHandler", handlerScript, true); + } + + base.OnPreRender(e); + } + } +} diff --git a/DNN Platform/DotNetNuke.Web.Client/Controls/ClientResourcePath.cs b/DNN Platform/DotNetNuke.Web.Client/Controls/ClientResourcePath.cs index d93859b5d43..129f8050e72 100644 --- a/DNN Platform/DotNetNuke.Web.Client/Controls/ClientResourcePath.cs +++ b/DNN Platform/DotNetNuke.Web.Client/Controls/ClientResourcePath.cs @@ -5,7 +5,9 @@ namespace DotNetNuke.Web.Client.ClientResourceManagement { /// Defines the path to a client resource. - public class ClientResourcePath : ClientDependencyPath + public class ClientResourcePath { + public string Name { get; set; } + public string Path { get; set; } } } diff --git a/DNN Platform/DotNetNuke.Web.Client/Controls/ClientResourcePathCollection.cs b/DNN Platform/DotNetNuke.Web.Client/Controls/ClientResourcePathCollection.cs index b088bc14e23..2b77ef2ae38 100644 --- a/DNN Platform/DotNetNuke.Web.Client/Controls/ClientResourcePathCollection.cs +++ b/DNN Platform/DotNetNuke.Web.Client/Controls/ClientResourcePathCollection.cs @@ -3,9 +3,11 @@ // See the LICENSE file in the project root for more information namespace DotNetNuke.Web.Client.ClientResourceManagement -{ +{ + using System.Collections.Generic; + /// Represents a collection of client resource paths. - public class ClientResourcePathCollection : ClientDependencyPathCollection + public class ClientResourcePathCollection : List { } } diff --git a/DNN Platform/DotNetNuke.Web.Client/Controls/DnnCssExclude.cs b/DNN Platform/DotNetNuke.Web.Client/Controls/DnnCssExclude.cs index 5451779a994..c8781e8c5ae 100644 --- a/DNN Platform/DotNetNuke.Web.Client/Controls/DnnCssExclude.cs +++ b/DNN Platform/DotNetNuke.Web.Client/Controls/DnnCssExclude.cs @@ -3,12 +3,22 @@ // See the LICENSE file in the project root for more information namespace DotNetNuke.Web.Client.ClientResourceManagement -{ +{ + using DotNetNuke.Abstractions.ClientResources; + using DotNetNuke.Web.Client.Cdf; + using DotNetNuke.Web.Client.Controls; + + /// Excludes a CSS resource. public class DnnCssExclude : ClientResourceExclude { - public DnnCssExclude() + /// + /// Initializes a new instance of the class. + /// + /// The controller used to manage client resources. + public DnnCssExclude(IClientResourcesController clientResourcesController) + : base(clientResourcesController) { - this.DependencyType = ClientDependency.Core.ClientDependencyType.Css; + this.DependencyType = ClientDependencyType.Css; } } } diff --git a/DNN Platform/DotNetNuke.Web.Client/Controls/DnnCssInclude.cs b/DNN Platform/DotNetNuke.Web.Client/Controls/DnnCssInclude.cs index 2c1e951b07d..27e8b8b7734 100644 --- a/DNN Platform/DotNetNuke.Web.Client/Controls/DnnCssInclude.cs +++ b/DNN Platform/DotNetNuke.Web.Client/Controls/DnnCssInclude.cs @@ -4,13 +4,19 @@ namespace DotNetNuke.Web.Client.ClientResourceManagement { - using System.Web.UI; + using System.Web.UI; + + using DotNetNuke.Abstractions.ClientResources; /// Registers a CSS resource. - public class DnnCssInclude : CssInclude + public class DnnCssInclude : ClientResourceInclude { - /// Initializes a new instance of the class. - public DnnCssInclude() + /// + /// Initializes a new instance of the class. + /// + /// The client resources controller. + public DnnCssInclude(IClientResourcesController clientResourcesController) + : base(clientResourcesController) { this.ForceProvider = ClientResourceManager.DefaultCssProvider; } @@ -18,9 +24,8 @@ public DnnCssInclude() /// protected override void OnLoad(System.EventArgs e) { - base.OnLoad(e); - this.PathNameAlias = this.PathNameAlias.ToLowerInvariant(); + base.OnLoad(e); } /// @@ -28,7 +33,7 @@ protected override void Render(HtmlTextWriter writer) { if (this.AddTag || this.Context.IsDebuggingEnabled) { - writer.Write("", this.DependencyType, this.FilePath, this.ForceProvider, this.Priority); + writer.Write("", this.FilePath, this.ForceProvider, this.Priority); } } } diff --git a/DNN Platform/DotNetNuke.Web.Client/Controls/DnnHtmlInclude.cs b/DNN Platform/DotNetNuke.Web.Client/Controls/DnnHtmlInclude.cs index 5d8876e6784..cbfb7b56489 100644 --- a/DNN Platform/DotNetNuke.Web.Client/Controls/DnnHtmlInclude.cs +++ b/DNN Platform/DotNetNuke.Web.Client/Controls/DnnHtmlInclude.cs @@ -2,10 +2,174 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information -namespace DotNetNuke.Web.Client.ClientResourceManagement -{ - /// Allows for registration of CSS and JavaScript resources. - public class DnnHtmlInclude : HtmlInclude +namespace DotNetNuke.Web.Client.ClientResourceManagement +{ + using System; + using System.Collections.Generic; + using System.Linq; + using System.Text.RegularExpressions; + using System.Web.UI.WebControls; + + using DotNetNuke.Abstractions.ClientResources; + using DotNetNuke.Web.Client.Cdf; + using DotNetNuke.Web.Client.ResourceManager; + + /// Allows for registration of CSS and JavaScript resources. + public class DnnHtmlInclude : Literal { + public const string TagPattern = @"<{0}((\s+\w+(\s*=\s*(?:"".*?""|'.*?'|[^'"">\s]+))?)+\s*|\s*)/?>"; + public const string AttributePattern = @"{0}(\s*=\s*(?:""(?.*?)""|'(?.*?)'|(?[^'"">\s]+)))"; + + private const string MatchAllAttributes = "(\\S+)=[\"']?((?:.(?![\"']?\\s+(?:\\S+)=|[>\"']))+.)[\"']?"; + + private static readonly Regex LinkTagRegex = new Regex(string.Format(TagPattern, "link"), RegexOptions.IgnoreCase | RegexOptions.CultureInvariant | RegexOptions.Compiled); + private static readonly Regex ScriptTagRegex = new Regex(string.Format(TagPattern, "script"), RegexOptions.IgnoreCase | RegexOptions.CultureInvariant | RegexOptions.Compiled); + + private readonly IClientResourcesController clientResourcesController; + + public DnnHtmlInclude(IClientResourcesController clientResourcesController) + { + this.clientResourcesController = clientResourcesController; + } + + /// + /// Gets or sets the provider to force for this resource include. + /// + public string ForceProvider { get; set; } + + /// + /// Gets or sets the priority for this resource include. + /// + public int Priority { get; set; } = 100; + + /// + /// Gets or sets the group for this resource include. + /// + public int Group { get; set; } = 100; + + protected override void OnInit(EventArgs e) + { + base.OnInit(e); + this.RegisterIncludes(this.Text); + this.Text = string.Empty; + } + + private void RegisterIncludes(string innerHtml) + { + this.RegisterIncludes(this.GetIncludes(innerHtml, ClientDependencyType.Css), ClientDependencyType.Css); + this.RegisterIncludes(this.GetIncludes(innerHtml, ClientDependencyType.Javascript), ClientDependencyType.Javascript); + } + + private void RegisterIncludes(IEnumerable files, ClientDependencyType dependencyType) + { + foreach (var file in files) + { + switch (dependencyType) + { + case ClientDependencyType.Css: + var styleSheet = this.clientResourcesController.CreateStylesheet() + .FromSrc(file.FilePath) + .SetProvider(file.ForceProvider) + .SetPriority(file.Priority); + foreach (var a in file.HtmlAttributes) + { + styleSheet.AddAttribute(a.Key, a.Value); + } + + styleSheet.Register(); + break; + case ClientDependencyType.Javascript: + var script = this.clientResourcesController.CreateScript() + .FromSrc(file.FilePath) + .SetProvider(file.ForceProvider) + .SetPriority(file.Priority); + foreach (var a in file.HtmlAttributes) + { + script.AddAttribute(a.Key, a.Value); + } + + script.Register(); + break; + } + } + } + + private IEnumerable GetIncludes(string innerHtml, ClientDependencyType dependencyType) + { + Regex tagRegex; + string sourceAttribute, mime; + if (dependencyType == ClientDependencyType.Css) + { + tagRegex = LinkTagRegex; + sourceAttribute = "href"; + mime = "text/css"; + } + else + { + tagRegex = ScriptTagRegex; + sourceAttribute = "src"; + mime = null; + } + + var files = new List(); + foreach (Match match in tagRegex.Matches(innerHtml)) + { + var allAttributes = Regex.Matches(match.Value, MatchAllAttributes, RegexOptions.IgnoreCase | RegexOptions.CultureInvariant) + .Cast() + .ToArray(); + + var type = allAttributes.FirstOrDefault(x => + { + if (x.Groups.Count < 3) + { + return false; + } + + return x.Groups[1].Value == "type"; + }); + + var href = allAttributes.FirstOrDefault(x => + { + if (x.Groups.Count < 3) + { + return false; + } + + return x.Groups[1].Value == sourceAttribute; + }); + + if (href == null || (type == null && mime != null) || (type != null && mime != null && type.Groups[2].Value != mime)) + { + continue; + } + + var attributes = allAttributes.Where(x => + { + if (x.Groups.Count < 3) + { + return false; + } + + return x.Groups[1].Value != sourceAttribute && x.Groups[1].Value != "type"; + }).ToDictionary(x => x.Groups[1].Value, x => x.Groups[2].Value); + + var file = new BasicFile(dependencyType) + { + FilePath = href.Groups[2].Value, + Group = this.Group, + Priority = this.Priority, + ForceProvider = this.ForceProvider, + }; + + foreach (var a in attributes) + { + file.HtmlAttributes.Add(a.Key, a.Value); + } + + files.Add(file); + } + + return files; + } } -} +} diff --git a/DNN Platform/DotNetNuke.Web.Client/Controls/DnnJsExclude.cs b/DNN Platform/DotNetNuke.Web.Client/Controls/DnnJsExclude.cs index 0be98660bc0..9d2fc5e9c47 100644 --- a/DNN Platform/DotNetNuke.Web.Client/Controls/DnnJsExclude.cs +++ b/DNN Platform/DotNetNuke.Web.Client/Controls/DnnJsExclude.cs @@ -2,16 +2,25 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information -namespace DotNetNuke.Web.Client.ClientResourceManagement -{ - using DotNetNuke.Web.Client.Controls; +namespace DotNetNuke.Web.Client.ClientResourceManagement +{ + using DotNetNuke.Abstractions.ClientResources; + using DotNetNuke.Web.Client.Cdf; + using DotNetNuke.Web.Client.Controls; - public class DnnJsExclude : ClientResourceExclude + /// + /// Represents a control that excludes JavaScript client resources from being loaded. + /// + public class DnnJsExclude : ClientResourceExclude { - /// Initializes a new instance of the class. - public DnnJsExclude() - { - this.DependencyType = ClientDependency.Core.ClientDependencyType.Javascript; - } - } -} + /// + /// Initializes a new instance of the class. + /// + /// The controller used to manage client resources. + public DnnJsExclude(IClientResourcesController clientResourcesController) + : base(clientResourcesController) + { + this.DependencyType = ClientDependencyType.Javascript; + } + } +} diff --git a/DNN Platform/DotNetNuke.Web.Client/Controls/DnnJsInclude.cs b/DNN Platform/DotNetNuke.Web.Client/Controls/DnnJsInclude.cs index b291cc2296b..8bedb08488c 100644 --- a/DNN Platform/DotNetNuke.Web.Client/Controls/DnnJsInclude.cs +++ b/DNN Platform/DotNetNuke.Web.Client/Controls/DnnJsInclude.cs @@ -4,16 +4,20 @@ namespace DotNetNuke.Web.Client.ClientResourceManagement { - using System.Web.UI; + using System.Web.UI; + + using DotNetNuke.Abstractions.ClientResources; /// Registers a JavaScript resource. - public class DnnJsInclude : JsInclude + public class DnnJsInclude : ClientResourceInclude { /// /// Initializes a new instance of the class. /// Sets up default settings for the control. /// - public DnnJsInclude() + /// The client resources controller. + public DnnJsInclude(IClientResourcesController clientResourcesController) + : base(clientResourcesController) { this.ForceProvider = ClientResourceManager.DefaultJsProvider; } @@ -21,9 +25,8 @@ public DnnJsInclude() /// protected override void OnLoad(System.EventArgs e) { - base.OnLoad(e); - this.PathNameAlias = this.PathNameAlias.ToLowerInvariant(); + base.OnLoad(e); } /// @@ -31,7 +34,7 @@ protected override void Render(HtmlTextWriter writer) { if (this.AddTag || this.Context.IsDebuggingEnabled) { - writer.Write("", this.DependencyType, this.FilePath, this.ForceProvider, this.Priority); + writer.Write("", this.FilePath, this.ForceProvider, this.Priority); } } } diff --git a/DNN Platform/DotNetNuke.Web.Client/Controls/DnnResources.cs b/DNN Platform/DotNetNuke.Web.Client/Controls/DnnResources.cs new file mode 100644 index 00000000000..ae2bc6750e0 --- /dev/null +++ b/DNN Platform/DotNetNuke.Web.Client/Controls/DnnResources.cs @@ -0,0 +1,33 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information + +namespace DotNetNuke.Web.Client.ClientResourceManagement +{ + using System.Web.UI; + using System.Web.UI.WebControls; + + using DotNetNuke.Abstractions.ClientResources; + + public class DnnResources : Literal + { + private readonly IClientResourcesController clientResourcesController; + + public DnnResources(IClientResourcesController clientResourcesController) + { + this.clientResourcesController = clientResourcesController; + } + + public string Provider { get; set; } + + protected override void OnInit(System.EventArgs e) + { + base.OnInit(e); + } + + protected override void Render(HtmlTextWriter writer) + { + base.Render(writer); + } + } +} diff --git a/DNN Platform/DotNetNuke.Web.Client/DotNetNuke.Web.Client.csproj b/DNN Platform/DotNetNuke.Web.Client/DotNetNuke.Web.Client.csproj index d07e440cafc..9ad9005862e 100644 --- a/DNN Platform/DotNetNuke.Web.Client/DotNetNuke.Web.Client.csproj +++ b/DNN Platform/DotNetNuke.Web.Client/DotNetNuke.Web.Client.csproj @@ -50,9 +50,6 @@ SA1600 - - ..\..\packages\Dnn.ClientDependency.1.10.0\lib\net48\ClientDependency.Core.dll - False ..\DotNetNuke.Instrumentation\bin\DotNetNuke.Instrumentation.dll @@ -81,10 +78,13 @@ SolutionInfo.cs + + + @@ -96,11 +96,6 @@ - - - - - @@ -121,6 +116,10 @@ {6928a9b1-f88a-4581-a132-d3eb38669bb0} DotNetNuke.Abstractions + + {039bafbd-e2db-40c4-b565-c27467d9b5e1} + DotNetNuke.Web.Client.ResourceManager + diff --git a/DNN Platform/DotNetNuke.Web.Client/Providers/DnnBodyProvider.cs b/DNN Platform/DotNetNuke.Web.Client/Providers/DnnBodyProvider.cs deleted file mode 100644 index ba98a164daf..00000000000 --- a/DNN Platform/DotNetNuke.Web.Client/Providers/DnnBodyProvider.cs +++ /dev/null @@ -1,161 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. -// See the LICENSE file in the project root for more information - -namespace DotNetNuke.Web.Client.Providers -{ - using System; - using System.Collections.Generic; - using System.Linq; - using System.Text; - using System.Web; - using System.Web.UI; - using System.Web.UI.HtmlControls; - - using ClientDependency.Core; - using ClientDependency.Core.Config; - using ClientDependency.Core.FileRegistration.Providers; - - /// Registers resources at the top of the body on default.aspx. - public class DnnBodyProvider : DnnFileRegistrationProvider - { - /// The name of the provider. - public const string DefaultName = "DnnBodyProvider"; - - /// The name of the placeholder in which the controls will be rendered. - public const string DnnBodyPlaceHolderName = "BodySCRIPTS"; - - /// Initializes the provider. - /// The friendly name of the provider. - /// A collection of the name/value pairs representing the provider-specific attributes specified in the configuration for this provider. - /// The name of the provider is null. - /// The name of the provider has a length of zero. - /// An attempt is made to call on a provider after the provider has already been initialized. - /// - public override void Initialize(string name, System.Collections.Specialized.NameValueCollection config) - { - // Assign the provider a default name if it doesn't have one - if (string.IsNullOrEmpty(name)) - { - name = DefaultName; - } - - base.Initialize(name, config); - } - - /// - protected override string RenderJsDependencies(IEnumerable jsDependencies, HttpContextBase http, IDictionary htmlAttributes) - { - if (!jsDependencies.Any()) - { - return string.Empty; - } - - var sb = new StringBuilder(); - - if (http.IsDebuggingEnabled || !this.EnableCompositeFiles) - { - foreach (var dependency in jsDependencies) - { - sb.Append(this.RenderSingleJsFile(dependency.FilePath, htmlAttributes)); - } - } - else - { - var comp = ClientDependencySettings.Instance.DefaultCompositeFileProcessingProvider.ProcessCompositeList(jsDependencies, ClientDependencyType.Javascript, http); - foreach (var s in comp) - { - sb.Append(this.RenderSingleJsFile(s, htmlAttributes)); - } - } - - return sb.ToString(); - } - - /// - protected override string RenderSingleJsFile(string js, IDictionary htmlAttributes) - { - return string.Format(HtmlEmbedContants.ScriptEmbedWithSource, js, htmlAttributes.ToHtmlAttributes()); - } - - /// - protected override string RenderCssDependencies(IEnumerable cssDependencies, HttpContextBase http, IDictionary htmlAttributes) - { - if (!cssDependencies.Any()) - { - return string.Empty; - } - - var sb = new StringBuilder(); - - if (http.IsDebuggingEnabled || !this.EnableCompositeFiles) - { - foreach (var dependency in cssDependencies) - { - sb.Append(this.RenderSingleCssFile(dependency.FilePath, htmlAttributes)); - } - } - else - { - var comp = ClientDependencySettings.Instance.DefaultCompositeFileProcessingProvider.ProcessCompositeList(cssDependencies, ClientDependencyType.Css, http); - foreach (var s in comp) - { - sb.Append(this.RenderSingleCssFile(s, htmlAttributes)); - } - } - - return sb.ToString(); - } - - /// - protected override string RenderSingleCssFile(string css, IDictionary htmlAttributes) - { - return string.Format(HtmlEmbedContants.CssEmbedWithSource, css, htmlAttributes.ToHtmlAttributes()); - } - - /// Registers the dependencies in the body of default.aspx. - /// The HTTP context. - /// The HTML markup to request JavaScript dependencies. - /// The HTML markup to request CSS dependencies. - /// - /// For some reason ampersands that aren't html escaped are not compliant to HTML standards when they exist in 'link' or 'script' tags in URLs, - /// we need to replace the ampersands with & . This is only required for this one w3c compliancy, the URL itself is a valid URL. - /// - /// - protected override void RegisterDependencies(HttpContextBase http, string js, string css) - { - if (!(http.CurrentHandler is Page)) - { - throw new InvalidOperationException("The current HttpHandler in a WebFormsFileRegistrationProvider must be of type Page"); - } - - var page = (Page)http.CurrentHandler; - - if (page.Header == null) - { - throw new NullReferenceException("DnnBodyProvider requires a runat='server' tag in the page's header tag"); - } - - var jsScriptBlock = new LiteralControl(js.Replace("&", "&")); - var cssStyleBlock = new LiteralControl(css.Replace("&", "&")); - - var holderControl = page.FindControl(DnnBodyPlaceHolderName); - holderControl.Controls.Add(jsScriptBlock); - holderControl.Controls.Add(cssStyleBlock); - - var form = (HtmlForm)page.FindControl("Form"); - if (form != null) - { - form.Controls.Remove(holderControl); - form.Controls.AddAt(0, holderControl); - } - - var scriptManager = ScriptManager.GetCurrent(page); - if (scriptManager != null && scriptManager.IsInAsyncPostBack) - { - holderControl.ID = "$crm_" + holderControl.ID; - scriptManager.RegisterDataItem(holderControl, string.Format("{0}{1}", jsScriptBlock.Text, cssStyleBlock.Text)); - } - } - } -} diff --git a/DNN Platform/DotNetNuke.Web.Client/Providers/DnnCompositeFileProcessingProvider.cs b/DNN Platform/DotNetNuke.Web.Client/Providers/DnnCompositeFileProcessingProvider.cs deleted file mode 100644 index 991b73a46b1..00000000000 --- a/DNN Platform/DotNetNuke.Web.Client/Providers/DnnCompositeFileProcessingProvider.cs +++ /dev/null @@ -1,95 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. -// See the LICENSE file in the project root for more information - -namespace DotNetNuke.Web.Client.Providers -{ - using System; - using System.IO; - - using ClientDependency.Core; - using ClientDependency.Core.CompositeFiles; - using ClientDependency.Core.CompositeFiles.Providers; - - /// A provider for combining, minifying, compressing and saving composite scripts/css files. - public class DnnCompositeFileProcessingProvider : CompositeFileProcessingProvider - { - private readonly ClientResourceSettings clientResourceSettings = new ClientResourceSettings(); - - private bool MinifyCss - { - get - { - var enableCssMinification = this.clientResourceSettings.EnableCssMinification(); - return enableCssMinification.HasValue ? enableCssMinification.Value : this.EnableCssMinify; - } - } - - private bool MinifyJs - { - get - { - var enableJsMinification = this.clientResourceSettings.EnableJsMinification(); - return enableJsMinification.HasValue ? enableJsMinification.Value : this.EnableJsMinify; - } - } - - /// - public override string MinifyFile(Stream fileStream, ClientDependencyType type) - { - Func streamToString = stream => - { - if (!stream.CanRead) - { - throw new InvalidOperationException("Cannot read input stream"); - } - - if (stream.CanSeek) - { - stream.Position = 0; - } - - var reader = new StreamReader(stream); - return reader.ReadToEnd(); - }; - - switch (type) - { - case ClientDependencyType.Css: - return this.MinifyCss ? CssHelper.MinifyCss(fileStream) : streamToString(fileStream); - case ClientDependencyType.Javascript: - return this.MinifyJs ? JSMin.CompressJS(fileStream) : streamToString(fileStream); - default: - return streamToString(fileStream); - } - } - - /// - public override string MinifyFile(string fileContents, ClientDependencyType type) - { - switch (type) - { - case ClientDependencyType.Css: - return this.MinifyCss ? CssHelper.MinifyCss(fileContents) : fileContents; - case ClientDependencyType.Javascript: - { - if (!this.MinifyJs) - { - return fileContents; - } - - using (var ms = new MemoryStream()) - using (var writer = new StreamWriter(ms)) - { - writer.Write(fileContents); - writer.Flush(); - return JSMin.CompressJS(ms); - } - } - - default: - return fileContents; - } - } - } -} diff --git a/DNN Platform/DotNetNuke.Web.Client/Providers/DnnFileRegistrationProvider.cs b/DNN Platform/DotNetNuke.Web.Client/Providers/DnnFileRegistrationProvider.cs deleted file mode 100644 index 9c9e0063ab7..00000000000 --- a/DNN Platform/DotNetNuke.Web.Client/Providers/DnnFileRegistrationProvider.cs +++ /dev/null @@ -1,29 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. -// See the LICENSE file in the project root for more information - -namespace DotNetNuke.Web.Client.Providers -{ - using System; - - using ClientDependency.Core.Config; - using ClientDependency.Core.FileRegistration.Providers; - - public abstract class DnnFileRegistrationProvider : WebFormsFileRegistrationProvider - { - private readonly ClientResourceSettings dnnSettingsHelper = new ClientResourceSettings(); - - /// - /// Gets a value indicating whether checks if the composite files option is set for the current portal (DNN site settings). - /// If not enabled at the portal level it defers to the core CDF setting (web.config). - /// - public override bool EnableCompositeFiles - { - get - { - var settingsVersion = this.dnnSettingsHelper.AreCompositeFilesEnabled(); - return settingsVersion.HasValue ? settingsVersion.Value : base.EnableCompositeFiles; - } - } - } -} diff --git a/DNN Platform/DotNetNuke.Web.Client/Providers/DnnFormBottomProvider.cs b/DNN Platform/DotNetNuke.Web.Client/Providers/DnnFormBottomProvider.cs deleted file mode 100644 index bab8889e613..00000000000 --- a/DNN Platform/DotNetNuke.Web.Client/Providers/DnnFormBottomProvider.cs +++ /dev/null @@ -1,138 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. -// See the LICENSE file in the project root for more information - -namespace DotNetNuke.Web.Client.Providers -{ - using System; - using System.Collections.Generic; - using System.Linq; - using System.Text; - using System.Web; - using System.Web.UI; - - using ClientDependency.Core; - using ClientDependency.Core.Config; - using ClientDependency.Core.FileRegistration.Providers; - - /// Registers resources at the top of the body on default.aspx. - public class DnnFormBottomProvider : DnnFileRegistrationProvider - { - /// The default name of the provider. - public const string DefaultName = "DnnFormBottomProvider"; - - /// The name of the placeholder in which the controls will be rendered. - public const string DnnFormBottomPlaceHolderName = "ClientResourcesFormBottom"; - - /// - public override void Initialize(string name, System.Collections.Specialized.NameValueCollection config) - { - // Assign the provider a default name if it doesn't have one - if (string.IsNullOrEmpty(name)) - { - name = DefaultName; - } - - base.Initialize(name, config); - } - - /// - protected override string RenderJsDependencies(IEnumerable jsDependencies, HttpContextBase http, IDictionary htmlAttributes) - { - if (!jsDependencies.Any()) - { - return string.Empty; - } - - var sb = new StringBuilder(); - - if (http.IsDebuggingEnabled || !this.EnableCompositeFiles) - { - foreach (var dependency in jsDependencies) - { - sb.Append(this.RenderSingleJsFile(dependency.FilePath, htmlAttributes)); - } - } - else - { - var comp = ClientDependencySettings.Instance.DefaultCompositeFileProcessingProvider.ProcessCompositeList(jsDependencies, ClientDependencyType.Javascript, http); - foreach (var s in comp) - { - sb.Append(this.RenderSingleJsFile(s, htmlAttributes)); - } - } - - return sb.ToString(); - } - - /// - protected override string RenderSingleJsFile(string js, IDictionary htmlAttributes) - { - return string.Format(HtmlEmbedContants.ScriptEmbedWithSource, js, htmlAttributes.ToHtmlAttributes()); - } - - /// - protected override string RenderCssDependencies(IEnumerable cssDependencies, HttpContextBase http, IDictionary htmlAttributes) - { - if (!cssDependencies.Any()) - { - return string.Empty; - } - - var sb = new StringBuilder(); - - if (http.IsDebuggingEnabled || !this.EnableCompositeFiles) - { - foreach (var dependency in cssDependencies) - { - sb.Append(this.RenderSingleCssFile(dependency.FilePath, htmlAttributes)); - } - } - else - { - var comp = ClientDependencySettings.Instance.DefaultCompositeFileProcessingProvider.ProcessCompositeList(cssDependencies, ClientDependencyType.Css, http); - foreach (var s in comp) - { - sb.Append(this.RenderSingleCssFile(s, htmlAttributes)); - } - } - - return sb.ToString(); - } - - /// - protected override string RenderSingleCssFile(string css, IDictionary htmlAttributes) - { - return string.Format(HtmlEmbedContants.CssEmbedWithSource, css, htmlAttributes.ToHtmlAttributes()); - } - - /// Registers the dependencies in the body of default.aspx. - /// The HTTP context. - /// The HTML markup to request JavaScript dependencies. - /// The HTML markup to request CSS dependencies. - /// - /// For some reason ampersands that aren't html escaped are not compliant to HTML standards when they exist in 'link' or 'script' tags in URLs, - /// we need to replace the ampersands with & . This is only required for this one w3c compliancy, the URL itself is a valid URL. - /// - /// - protected override void RegisterDependencies(HttpContextBase http, string js, string css) - { - if (!(http.CurrentHandler is Page)) - { - throw new InvalidOperationException("The current HttpHandler in a WebFormsFileRegistrationProvider must be of type Page"); - } - - var page = (Page)http.CurrentHandler; - - if (page.Header == null) - { - throw new NullReferenceException("DnnFormBottomProvider requires a runat='server' tag in the page's header tag"); - } - - var jsScriptBlock = new LiteralControl(js.Replace("&", "&")); - var cssStyleBlock = new LiteralControl(css.Replace("&", "&")); - page.FindControl(DnnFormBottomPlaceHolderName).Controls.Add(jsScriptBlock); - page.FindControl(DnnFormBottomPlaceHolderName).Controls.Add(cssStyleBlock); - } - } -} diff --git a/DNN Platform/DotNetNuke.Web.Client/Providers/DnnPageHeaderProvider.cs b/DNN Platform/DotNetNuke.Web.Client/Providers/DnnPageHeaderProvider.cs deleted file mode 100644 index 36fad26db2f..00000000000 --- a/DNN Platform/DotNetNuke.Web.Client/Providers/DnnPageHeaderProvider.cs +++ /dev/null @@ -1,148 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. -// See the LICENSE file in the project root for more information - -namespace DotNetNuke.Web.Client.Providers -{ - using System; - using System.Collections.Generic; - using System.Linq; - using System.Text; - using System.Web; - using System.Web.UI; - - using ClientDependency.Core; - using ClientDependency.Core.Config; - using ClientDependency.Core.FileRegistration.Providers; - - /// Registers resources at the top of the body on default.aspx. - public class DnnPageHeaderProvider : DnnFileRegistrationProvider - { - /// The default name of the provider. - public const string DefaultName = "DnnPageHeaderProvider"; - - /// The name of the placeholder in which the controls will be rendered. - public const string CssPlaceHolderName = "ClientDependencyHeadCss"; - - public const string JsPlaceHolderName = "ClientDependencyHeadJs"; - - /// - public override void Initialize(string name, System.Collections.Specialized.NameValueCollection config) - { - // Assign the provider a default name if it doesn't have one - if (string.IsNullOrEmpty(name)) - { - name = DefaultName; - } - - base.Initialize(name, config); - } - - /// - protected override string RenderJsDependencies(IEnumerable jsDependencies, HttpContextBase http, IDictionary htmlAttributes) - { - if (!jsDependencies.Any()) - { - return string.Empty; - } - - var sb = new StringBuilder(); - - if (http.IsDebuggingEnabled || !this.EnableCompositeFiles) - { - foreach (var dependency in jsDependencies) - { - sb.Append(this.RenderSingleJsFile(dependency.FilePath, htmlAttributes)); - } - } - else - { - var comp = ClientDependencySettings.Instance.DefaultCompositeFileProcessingProvider.ProcessCompositeList(jsDependencies, ClientDependencyType.Javascript, http); - foreach (var s in comp) - { - sb.Append(this.RenderSingleJsFile(s, htmlAttributes)); - } - } - - return sb.ToString(); - } - - /// - protected override string RenderSingleJsFile(string js, IDictionary htmlAttributes) - { - return string.Format(HtmlEmbedContants.ScriptEmbedWithSource, js, htmlAttributes.ToHtmlAttributes()); - } - - /// - protected override string RenderCssDependencies(IEnumerable cssDependencies, HttpContextBase http, IDictionary htmlAttributes) - { - if (!cssDependencies.Any()) - { - return string.Empty; - } - - var sb = new StringBuilder(); - - if (http.IsDebuggingEnabled || !this.EnableCompositeFiles) - { - foreach (var dependency in cssDependencies) - { - sb.Append(this.RenderSingleCssFile(dependency.FilePath, htmlAttributes)); - } - } - else - { - var comp = ClientDependencySettings.Instance.DefaultCompositeFileProcessingProvider.ProcessCompositeList(cssDependencies, ClientDependencyType.Css, http); - foreach (var s in comp) - { - sb.Append(this.RenderSingleCssFile(s, htmlAttributes)); - } - } - - return sb.ToString(); - } - - /// - protected override string RenderSingleCssFile(string css, IDictionary htmlAttributes) - { - return string.Format(HtmlEmbedContants.CssEmbedWithSource, css, htmlAttributes.ToHtmlAttributes()); - } - - /// Registers the dependencies in the body of default.aspx. - /// The HTTP context. - /// The HTML markup to request JavaScript dependencies. - /// The HTML markup to request CSS dependencies. - /// - /// For some reason ampersands that aren't html escaped are not compliant to HTML standards when they exist in 'link' or 'script' tags in URLs, - /// we need to replace the ampersands with & . This is only required for this one w3c compliancy, the URL itself is a valid URL. - /// - /// - protected override void RegisterDependencies(HttpContextBase http, string js, string css) - { - if (!(http.CurrentHandler is Page)) - { - throw new InvalidOperationException("The current HttpHandler in a WebFormsFileRegistrationProvider must be of type Page"); - } - - var page = (Page)http.CurrentHandler; - - if (page.Header == null) - { - throw new NullReferenceException("DnnPageHeaderProvider requires a runat='server' tag in the page's header tag"); - } - - var jsScriptBlock = new LiteralControl(js.Replace("&", "&")); - var cssStyleBlock = new LiteralControl(css.Replace("&", "&")); - page.FindControl(JsPlaceHolderName).Controls.Add(jsScriptBlock); - page.FindControl(CssPlaceHolderName).Controls.Add(cssStyleBlock); - - var scriptManager = ScriptManager.GetCurrent(page); - if (scriptManager != null && scriptManager.IsInAsyncPostBack) - { - var jsHolder = page.FindControl(JsPlaceHolderName); - jsHolder.ID = "$crm_" + jsHolder.ID; - scriptManager.RegisterDataItem(jsHolder, string.Format("{0}{1}", jsScriptBlock.Text, cssStyleBlock.Text)); - } - } - } -} diff --git a/DNN Platform/Website/Default.aspx b/DNN Platform/Website/Default.aspx index 4666be4424b..740c6251aad 100644 --- a/DNN Platform/Website/Default.aspx +++ b/DNN Platform/Website/Default.aspx @@ -13,20 +13,19 @@ - - + - + - + diff --git a/DNN Platform/Website/Default.aspx.designer.cs b/DNN Platform/Website/Default.aspx.designer.cs index e11f09cb31b..f225ded5e47 100644 --- a/DNN Platform/Website/Default.aspx.designer.cs +++ b/DNN Platform/Website/Default.aspx.designer.cs @@ -114,22 +114,13 @@ public partial class DefaultPage protected global::System.Web.UI.HtmlControls.HtmlMeta MetaRobots; /// - /// ClientDependencyHeadCss control. + /// DnnResourcesPageHeader control. /// /// /// Auto-generated field. /// To modify move field declaration from designer file to code-behind file. /// - protected global::System.Web.UI.WebControls.PlaceHolder ClientDependencyHeadCss; - - /// - /// ClientDependencyHeadJs control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.PlaceHolder ClientDependencyHeadJs; + protected global::DotNetNuke.Web.Client.ClientResourceManagement.DnnResources DnnResourcesPageHeader; /// /// CSS control. @@ -168,13 +159,13 @@ public partial class DefaultPage protected global::DotNetNuke.Common.Controls.Form Form; /// - /// BodySCRIPTS control. + /// DnnResourcesBody control. /// /// /// Auto-generated field. /// To modify move field declaration from designer file to code-behind file. /// - protected global::System.Web.UI.WebControls.PlaceHolder BodySCRIPTS; + protected global::DotNetNuke.Web.Client.ClientResourceManagement.DnnResources DnnResourcesBody; /// /// SkinError control. @@ -213,13 +204,13 @@ public partial class DefaultPage protected global::System.Web.UI.HtmlControls.HtmlInputHidden @__dnnVariable; /// - /// ClientResourcesFormBottom control. + /// DnnResourcesFormBottom control. /// /// /// Auto-generated field. /// To modify move field declaration from designer file to code-behind file. /// - protected global::System.Web.UI.WebControls.PlaceHolder ClientResourcesFormBottom; + protected global::DotNetNuke.Web.Client.ClientResourceManagement.DnnResources DnnResourcesFormBottom; /// /// ClientResourceIncludes control. From 50d35496aa2495281dfbb066d45a83b3a0785d1f Mon Sep 17 00:00:00 2001 From: Brian Dukes Date: Fri, 12 Sep 2025 08:24:24 -0500 Subject: [PATCH 007/199] Get IClientResourcesController from request scope (#117) --- .../ClientResourceManager.cs | 72 ++++++++++--------- 1 file changed, 40 insertions(+), 32 deletions(-) diff --git a/DNN Platform/DotNetNuke.Web.Client/ClientResourceManager.cs b/DNN Platform/DotNetNuke.Web.Client/ClientResourceManager.cs index 343e13e4a03..6086275cf6e 100644 --- a/DNN Platform/DotNetNuke.Web.Client/ClientResourceManager.cs +++ b/DNN Platform/DotNetNuke.Web.Client/ClientResourceManager.cs @@ -6,6 +6,7 @@ namespace DotNetNuke.Web.Client.ClientResourceManagement { using System; + using System.Collections; using System.Collections.Generic; using System.IO; using System.Threading; @@ -14,8 +15,12 @@ namespace DotNetNuke.Web.Client.ClientResourceManagement using System.Web.UI; using System.Xml; + using DotNetNuke.Abstractions.ClientResources; using DotNetNuke.Instrumentation; using DotNetNuke.Internal.SourceGenerators; + using DotNetNuke.Web.Client.ResourceManager; + + using Microsoft.Extensions.DependencyInjection; /// Provides the ability to request that client resources (JavaScript and CSS) be loaded on the client browser. public partial class ClientResourceManager @@ -292,16 +297,21 @@ public static void RegisterScript( string version, IDictionary htmlAttributes) { - var include = new DnnJsInclude { ForceProvider = provider, Priority = priority, FilePath = filePath, Name = name, Version = version, }; - if (htmlAttributes != null) + var controller = GetClientResourcesController(page); + var script = controller.CreateScript() + .FromSrc(filePath) + .SetPriority(priority) + .SetProvider(provider) + .SetNameAndVersion(name, version, false); + if (htmlAttributes is not null) { foreach (var attribute in htmlAttributes) { - include.HtmlAttributes[attribute.Key] = attribute.Value; + script = script.AddAttribute(attribute.Key, attribute.Value); } } - page.FindControl("ClientResourceIncludes")?.Controls.Add(include); + script.Register(); } /// Requests that a CSS file be registered on the client browser. @@ -402,40 +412,21 @@ public static void RegisterStyleSheet(Page page, string filePath, int priority, /// A dictionary of HTML attributes to use for the link tag. The key being the attribute name and the value its value. public static void RegisterStyleSheet(Page page, string filePath, int priority, string provider, string name, string version, IDictionary htmlAttributes) { - var fileExists = false; - - // Some "legacy URLs" could be using their own query string versioning scheme (and we've forced them to use the new API through re-routing PageBase.RegisterStyleSheet - // Ensure that physical CSS files with query strings have their query strings removed - // Ignore absolute urls, they will not exist locally - if (!Uri.TryCreate(filePath, UriKind.Absolute, out _) && filePath.Contains(".css?")) - { - var filePathSansQueryString = RemoveQueryString(filePath); - if (File.Exists(page.Server.MapPath(filePathSansQueryString))) - { - fileExists = true; - filePath = filePathSansQueryString; - } - } - else if (filePath.Contains("WebResource.axd")) - { - fileExists = true; - } - - if (!fileExists && !FileExists(page, filePath)) - { - return; - } - - var include = new DnnCssInclude { ForceProvider = provider, Priority = priority, FilePath = filePath, Name = name, Version = version }; - if (htmlAttributes != null) + var controller = GetClientResourcesController(page); + var stylesheet = controller.CreateStylesheet() + .FromSrc(filePath) + .SetPriority(priority) + .SetProvider(provider) + .SetNameAndVersion(name, version, false); + if (htmlAttributes is not null) { foreach (var attribute in htmlAttributes) { - include.HtmlAttributes[attribute.Key] = attribute.Value; + stylesheet = stylesheet.AddAttribute(attribute.Key, attribute.Value); } } - page.FindControl("ClientResourceIncludes")?.Controls.Add(include); + stylesheet.Register(); } /// Clear the default composite files so that it can be generated next time. @@ -541,5 +532,22 @@ private static string RemoveQueryString(string filePath) var queryStringPosition = filePath.IndexOf("?", StringComparison.Ordinal); return queryStringPosition != -1 ? filePath.Substring(0, queryStringPosition) : filePath; } + + private static IClientResourcesController GetClientResourcesController(Page page) + { + var serviceProvider = GetCurrentServiceProvider(page.Request.RequestContext.HttpContext); + return serviceProvider.GetRequiredService(); + } + + private static IServiceProvider GetCurrentServiceProvider(HttpContextBase context) + { + return GetScope(context.Items).ServiceProvider; + + // Copy of DotNetNuke.Common.Extensions.HttpContextDependencyInjectionExtensions.GetScope + static IServiceScope GetScope(IDictionary httpContextItems) + { + return httpContextItems[typeof(IServiceScope)] as IServiceScope; + } + } } } From a0816b023bbc0436840cfd4da62c5e94c6e93b3e Mon Sep 17 00:00:00 2001 From: Peter Donker Date: Fri, 12 Sep 2025 15:55:26 +0200 Subject: [PATCH 008/199] DotNetNuke.Web.Client now builds --- .../DotNetNuke.Web.Client/Cdf/BasicFile.cs | 33 ++++++--- .../Cdf/ClientDependencyType.cs | 12 ++- .../ClientResourceManager.cs | 73 +------------------ .../Controls/ClientResourceInclude.cs | 2 +- .../Controls/ClientResourcePath.cs | 1 + 5 files changed, 35 insertions(+), 86 deletions(-) diff --git a/DNN Platform/DotNetNuke.Web.Client/Cdf/BasicFile.cs b/DNN Platform/DotNetNuke.Web.Client/Cdf/BasicFile.cs index 29df9daaf94..ece44f20efe 100644 --- a/DNN Platform/DotNetNuke.Web.Client/Cdf/BasicFile.cs +++ b/DNN Platform/DotNetNuke.Web.Client/Cdf/BasicFile.cs @@ -1,33 +1,42 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information namespace DotNetNuke.Web.Client.Cdf { + using System.Collections.Generic; + internal class BasicFile { public BasicFile(ClientDependencyType type) { - DependencyType = type; - HtmlAttributes = new Dictionary(); - Priority = 100; - Group = 100; - Name = ""; - Version = ""; - ForceVersion = false; + this.DependencyType = type; + this.HtmlAttributes = new Dictionary(); + this.Priority = 100; + this.Group = 100; + this.Name = string.Empty; + this.Version = string.Empty; + this.ForceVersion = false; } public string FilePath { get; set; } + public ClientDependencyType DependencyType { get; private set; } + public int Priority { get; set; } + public int Group { get; set; } + public string PathNameAlias { get; set; } + public string ForceProvider { get; set; } + public IDictionary HtmlAttributes { get; private set; } + public string Name { get; set; } + public string Version { get; set; } + public bool ForceVersion { get; set; } } } diff --git a/DNN Platform/DotNetNuke.Web.Client/Cdf/ClientDependencyType.cs b/DNN Platform/DotNetNuke.Web.Client/Cdf/ClientDependencyType.cs index 9f258334d1f..caf7f3619b5 100644 --- a/DNN Platform/DotNetNuke.Web.Client/Cdf/ClientDependencyType.cs +++ b/DNN Platform/DotNetNuke.Web.Client/Cdf/ClientDependencyType.cs @@ -5,10 +5,18 @@ namespace DotNetNuke.Web.Client.Cdf { /// - /// The type of client file + /// The type of client file. /// public enum ClientDependencyType { - Javascript, Css + /// + /// Represents a JavaScript client file. + /// + Javascript, + + /// + /// Represents a CSS client file. + /// + Css, } } diff --git a/DNN Platform/DotNetNuke.Web.Client/ClientResourceManager.cs b/DNN Platform/DotNetNuke.Web.Client/ClientResourceManager.cs index 6086275cf6e..f328bd144b1 100644 --- a/DNN Platform/DotNetNuke.Web.Client/ClientResourceManager.cs +++ b/DNN Platform/DotNetNuke.Web.Client/ClientResourceManager.cs @@ -8,7 +8,6 @@ namespace DotNetNuke.Web.Client.ClientResourceManagement using System; using System.Collections; using System.Collections.Generic; - using System.IO; using System.Threading; using System.Web; using System.Web.Hosting; @@ -319,7 +318,7 @@ public static void RegisterScript( /// The relative file path to the CSS resource. public static void RegisterStyleSheet(Page page, string filePath) { - RegisterStyleSheet(page, filePath, Constants.DefaultPriority, DefaultCssProvider, htmlAttributes: null); + RegisterStyleSheet(page, filePath, (int)FileOrder.Css.DefaultPriority, DefaultCssProvider, htmlAttributes: null); } /// Requests that a CSS file be registered on the client browser. @@ -328,7 +327,7 @@ public static void RegisterStyleSheet(Page page, string filePath) /// A dictionary of HTML attributes to use for the link tag. The key being the attribute name and the value its value. public static void RegisterStyleSheet(Page page, string filePath, IDictionary htmlAttributes) { - RegisterStyleSheet(page, filePath, Constants.DefaultPriority, DefaultCssProvider, htmlAttributes); + RegisterStyleSheet(page, filePath, (int)FileOrder.Css.DefaultPriority, DefaultCssProvider, htmlAttributes); } /// Requests that a CSS file be registered on the client browser. Defaults to rendering in the page header. @@ -432,30 +431,6 @@ public static void RegisterStyleSheet(Page page, string filePath, int priority, /// Clear the default composite files so that it can be generated next time. public static void ClearCache() { - var provider = ClientDependencySettings.Instance.DefaultCompositeFileProcessingProvider; - if (!(provider is CompositeFileProcessingProvider)) - { - return; - } - - try - { - var folder = provider.CompositeFilePath; - if (!folder.Exists) - { - return; - } - - var files = folder.GetFiles("*.cd?"); - foreach (var file in files) - { - file.Delete(); - } - } - catch (Exception ex) - { - Logger.Error(ex); - } } /// Clears the cache used for file existence. @@ -489,50 +464,6 @@ public static void EnableAsyncPostBackHandler() } } - private static bool FileExists(Page page, string filePath) - { - // remove query string for the file exists check, won't impact the absoluteness, so just do it either way. - filePath = RemoveQueryString(filePath); - var cacheKey = filePath.ToLowerInvariant(); - - // cache css file paths - if (!FileExistsCache.ContainsKey(cacheKey)) - { - // apply lock after IF, locking is more expensive than worst case scenario (check disk twice) - LockFileExistsCache.EnterWriteLock(); - try - { - FileExistsCache[cacheKey] = IsAbsoluteUrl(filePath) || File.Exists(page.Server.MapPath(filePath)); - } - finally - { - LockFileExistsCache.ExitWriteLock(); - } - } - - // return if file exists from cache - LockFileExistsCache.EnterReadLock(); - try - { - return FileExistsCache[cacheKey]; - } - finally - { - LockFileExistsCache.ExitReadLock(); - } - } - - private static bool IsAbsoluteUrl(string url) - { - return Uri.TryCreate(url, UriKind.Absolute, out _); - } - - private static string RemoveQueryString(string filePath) - { - var queryStringPosition = filePath.IndexOf("?", StringComparison.Ordinal); - return queryStringPosition != -1 ? filePath.Substring(0, queryStringPosition) : filePath; - } - private static IClientResourcesController GetClientResourcesController(Page page) { var serviceProvider = GetCurrentServiceProvider(page.Request.RequestContext.HttpContext); diff --git a/DNN Platform/DotNetNuke.Web.Client/Controls/ClientResourceInclude.cs b/DNN Platform/DotNetNuke.Web.Client/Controls/ClientResourceInclude.cs index f944449894e..bf0d87abb66 100644 --- a/DNN Platform/DotNetNuke.Web.Client/Controls/ClientResourceInclude.cs +++ b/DNN Platform/DotNetNuke.Web.Client/Controls/ClientResourceInclude.cs @@ -66,7 +66,7 @@ protected ClientResourceInclude(IClientResourcesController clientResourcesContro public bool ForceVersion { get; set; } /// - /// Gets or sets the provider to force for this resource. This can be empty and will use default provider. + /// Gets or sets the provider to force for this resource. This can be empty and will use default provider. /// If specified, it must match a provider registered in the Client Resource Management configuration. /// public string ForceProvider { get; set; } diff --git a/DNN Platform/DotNetNuke.Web.Client/Controls/ClientResourcePath.cs b/DNN Platform/DotNetNuke.Web.Client/Controls/ClientResourcePath.cs index 129f8050e72..d332735f78a 100644 --- a/DNN Platform/DotNetNuke.Web.Client/Controls/ClientResourcePath.cs +++ b/DNN Platform/DotNetNuke.Web.Client/Controls/ClientResourcePath.cs @@ -8,6 +8,7 @@ namespace DotNetNuke.Web.Client.ClientResourceManagement public class ClientResourcePath { public string Name { get; set; } + public string Path { get; set; } } } From 051b838fa49e21f3229d112d096a2a2a70a90603 Mon Sep 17 00:00:00 2001 From: Peter Donker Date: Fri, 12 Sep 2025 16:58:21 +0200 Subject: [PATCH 009/199] Repairing broken code --- .../DotNetNuke.Web.Client/Cdf/CssMediaType.cs | 27 ++++++++ .../ClientResourceManager.cs | 26 ++++---- .../DotNetNuke.Web.Client.csproj | 1 + .../UI/WebControls/DnnFormEditor.cs | 3 +- .../DotNetNuke.WebUtility.vbproj | 6 ++ .../Common/Utilities/CryptographyUtils.cs | 62 +++++++++++++++++++ .../Website/admin/Skins/DnnCssExclude.ascx.cs | 3 - .../Website/admin/Skins/DnnCssInclude.ascx.cs | 5 +- .../Website/admin/Skins/DnnJsExclude.ascx.cs | 3 - .../Website/admin/Skins/DnnJsInclude.ascx.cs | 4 -- 10 files changed, 111 insertions(+), 29 deletions(-) create mode 100644 DNN Platform/DotNetNuke.Web.Client/Cdf/CssMediaType.cs diff --git a/DNN Platform/DotNetNuke.Web.Client/Cdf/CssMediaType.cs b/DNN Platform/DotNetNuke.Web.Client/Cdf/CssMediaType.cs new file mode 100644 index 00000000000..74e59e37043 --- /dev/null +++ b/DNN Platform/DotNetNuke.Web.Client/Cdf/CssMediaType.cs @@ -0,0 +1,27 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information + +namespace DotNetNuke.Web.Client.Cdf +{ + /// + /// Specifies the CSS media types that can be used. + /// + public enum CssMediaType + { + /// + /// Applies to all media types. + /// + All, + + /// + /// Applies to computer screens. + /// + Screen, + + /// + /// Applies to printers. + /// + Print, + } +} diff --git a/DNN Platform/DotNetNuke.Web.Client/ClientResourceManager.cs b/DNN Platform/DotNetNuke.Web.Client/ClientResourceManager.cs index f328bd144b1..e389f90e3f2 100644 --- a/DNN Platform/DotNetNuke.Web.Client/ClientResourceManager.cs +++ b/DNN Platform/DotNetNuke.Web.Client/ClientResourceManager.cs @@ -138,7 +138,7 @@ public static bool IsInstalled() /// The path to the CSS stylesheet. public static void RegisterAdminStylesheet(Page page, string filePath) { - RegisterStyleSheet(page, filePath, FileOrder.Css.AdminCss); + RegisterStyleSheet(page, filePath, Client.FileOrder.Css.AdminCss); } /// Registers the default.css stylesheet. @@ -146,7 +146,7 @@ public static void RegisterAdminStylesheet(Page page, string filePath) /// The path to the CSS stylesheet. public static void RegisterDefaultStylesheet(Page page, string filePath) { - RegisterStyleSheet(page, filePath, (int)FileOrder.Css.DefaultCss, DefaultCssProvider, "dnndefault", "10.0.0"); + RegisterStyleSheet(page, filePath, (int)Client.FileOrder.Css.DefaultCss, DefaultCssProvider, "dnndefault", "10.0.0"); } /// Registers a stylesheet for a specific feature. @@ -154,7 +154,7 @@ public static void RegisterDefaultStylesheet(Page page, string filePath) /// The path to the CSS stylesheet. public static void RegisterFeatureStylesheet(Page page, string filePath) { - RegisterStyleSheet(page, filePath, FileOrder.Css.FeatureCss); + RegisterStyleSheet(page, filePath, Client.FileOrder.Css.FeatureCss); } /// Registers a stylesheet specific for Internet Explorer. @@ -166,7 +166,7 @@ public static partial void RegisterIEStylesheet(Page page, string filePath) var browser = HttpContext.Current.Request.Browser; if (browser.Browser == "Internet Explorer" || browser.Browser == "IE") { - RegisterStyleSheet(page, filePath, FileOrder.Css.IeCss); + RegisterStyleSheet(page, filePath, Client.FileOrder.Css.IeCss); } } @@ -184,7 +184,7 @@ public static void RegisterScript(Page page, string filePath) /// A dictionary of HTML attributes to use for the script tag. The key being the attribute name and the value its value. public static void RegisterScript(Page page, string filePath, IDictionary htmlAttributes) { - RegisterScript(page, filePath, FileOrder.Js.DefaultPriority, htmlAttributes); + RegisterScript(page, filePath, Client.FileOrder.Js.DefaultPriority, htmlAttributes); } /// Requests that a JavaScript file be registered on the client browser. @@ -210,7 +210,7 @@ public static void RegisterScript(Page page, string filePath, int priority, IDic /// The current page. Used to get a reference to the client resource loader. /// The relative file path to the JavaScript resource. /// The relative priority in which the file should be loaded. - public static void RegisterScript(Page page, string filePath, FileOrder.Js priority) + public static void RegisterScript(Page page, string filePath, Client.FileOrder.Js priority) { RegisterScript(page, filePath, priority, htmlAttributes: null); } @@ -220,7 +220,7 @@ public static void RegisterScript(Page page, string filePath, FileOrder.Js prior /// The relative file path to the JavaScript resource. /// The relative priority in which the file should be loaded. /// A dictionary of HTML attributes to use for the script tag. The key being the attribute name and the value its value. - public static void RegisterScript(Page page, string filePath, FileOrder.Js priority, IDictionary htmlAttributes) + public static void RegisterScript(Page page, string filePath, Client.FileOrder.Js priority, IDictionary htmlAttributes) { RegisterScript(page, filePath, (int)priority, DefaultJsProvider, htmlAttributes); } @@ -230,7 +230,7 @@ public static void RegisterScript(Page page, string filePath, FileOrder.Js prior /// The relative file path to the JavaScript resource. /// The relative priority in which the file should be loaded. /// The name of the provider responsible for rendering the script output. - public static void RegisterScript(Page page, string filePath, FileOrder.Js priority, string provider) + public static void RegisterScript(Page page, string filePath, Client.FileOrder.Js priority, string provider) { RegisterScript(page, filePath, priority, provider, htmlAttributes: null); } @@ -241,7 +241,7 @@ public static void RegisterScript(Page page, string filePath, FileOrder.Js prior /// The relative priority in which the file should be loaded. /// The name of the provider responsible for rendering the script output. /// /// A dictionary of HTML attributes to use for the script tag. The key being the attribute name and the value its value. - public static void RegisterScript(Page page, string filePath, FileOrder.Js priority, string provider, IDictionary htmlAttributes) + public static void RegisterScript(Page page, string filePath, Client.FileOrder.Js priority, string provider, IDictionary htmlAttributes) { RegisterScript(page, filePath, (int)priority, provider, htmlAttributes); } @@ -318,7 +318,7 @@ public static void RegisterScript( /// The relative file path to the CSS resource. public static void RegisterStyleSheet(Page page, string filePath) { - RegisterStyleSheet(page, filePath, (int)FileOrder.Css.DefaultPriority, DefaultCssProvider, htmlAttributes: null); + RegisterStyleSheet(page, filePath, (int)Client.FileOrder.Css.DefaultPriority, DefaultCssProvider, htmlAttributes: null); } /// Requests that a CSS file be registered on the client browser. @@ -327,7 +327,7 @@ public static void RegisterStyleSheet(Page page, string filePath) /// A dictionary of HTML attributes to use for the link tag. The key being the attribute name and the value its value. public static void RegisterStyleSheet(Page page, string filePath, IDictionary htmlAttributes) { - RegisterStyleSheet(page, filePath, (int)FileOrder.Css.DefaultPriority, DefaultCssProvider, htmlAttributes); + RegisterStyleSheet(page, filePath, (int)Client.FileOrder.Css.DefaultPriority, DefaultCssProvider, htmlAttributes); } /// Requests that a CSS file be registered on the client browser. Defaults to rendering in the page header. @@ -353,7 +353,7 @@ public static void RegisterStyleSheet(Page page, string filePath, int priority, /// The current page. Used to get a reference to the client resource loader. /// The relative file path to the CSS resource. /// The relative priority in which the file should be loaded. - public static void RegisterStyleSheet(Page page, string filePath, FileOrder.Css priority) + public static void RegisterStyleSheet(Page page, string filePath, Client.FileOrder.Css priority) { RegisterStyleSheet(page, filePath, (int)priority, DefaultCssProvider, htmlAttributes: null); } @@ -363,7 +363,7 @@ public static void RegisterStyleSheet(Page page, string filePath, FileOrder.Css /// The relative file path to the CSS resource. /// The relative priority in which the file should be loaded. /// A dictionary of HTML attributes to use for the link tag. The key being the attribute name and the value its value. - public static void RegisterStyleSheet(Page page, string filePath, FileOrder.Css priority, IDictionary htmlAttributes) + public static void RegisterStyleSheet(Page page, string filePath, Client.FileOrder.Css priority, IDictionary htmlAttributes) { RegisterStyleSheet(page, filePath, (int)priority, DefaultCssProvider, htmlAttributes); } diff --git a/DNN Platform/DotNetNuke.Web.Client/DotNetNuke.Web.Client.csproj b/DNN Platform/DotNetNuke.Web.Client/DotNetNuke.Web.Client.csproj index 9ad9005862e..8706e6b2ae2 100644 --- a/DNN Platform/DotNetNuke.Web.Client/DotNetNuke.Web.Client.csproj +++ b/DNN Platform/DotNetNuke.Web.Client/DotNetNuke.Web.Client.csproj @@ -80,6 +80,7 @@ + diff --git a/DNN Platform/DotNetNuke.Web/UI/WebControls/DnnFormEditor.cs b/DNN Platform/DotNetNuke.Web/UI/WebControls/DnnFormEditor.cs index 8cb80a90715..ab117f12ff1 100644 --- a/DNN Platform/DotNetNuke.Web/UI/WebControls/DnnFormEditor.cs +++ b/DNN Platform/DotNetNuke.Web/UI/WebControls/DnnFormEditor.cs @@ -10,10 +10,9 @@ namespace DotNetNuke.Web.UI.WebControls using System.Web.UI; using System.Web.UI.WebControls; - using ClientDependency.Core; + using DotNetNuke.Common.Utilities; using DotNetNuke.Entities.Host; using DotNetNuke.Framework.JavaScriptLibraries; - using DotNetNuke.Internal.SourceGenerators; using DotNetNuke.Services.Localization; /// A web control for editing a form. diff --git a/DNN Platform/DotNetNuke.WebUtility/DotNetNuke.WebUtility.vbproj b/DNN Platform/DotNetNuke.WebUtility/DotNetNuke.WebUtility.vbproj index 7caafaf3d9b..642c1f1233a 100644 --- a/DNN Platform/DotNetNuke.WebUtility/DotNetNuke.WebUtility.vbproj +++ b/DNN Platform/DotNetNuke.WebUtility/DotNetNuke.WebUtility.vbproj @@ -173,6 +173,12 @@ + + + {6928A9B1-F88A-4581-A132-D3EB38669BB0} + DotNetNuke.Abstractions + + diff --git a/DNN Platform/Library/Common/Utilities/CryptographyUtils.cs b/DNN Platform/Library/Common/Utilities/CryptographyUtils.cs index 7372cddc3b7..4e16068ac52 100644 --- a/DNN Platform/Library/Common/Utilities/CryptographyUtils.cs +++ b/DNN Platform/Library/Common/Utilities/CryptographyUtils.cs @@ -4,7 +4,9 @@ namespace DotNetNuke.Common.Utilities { + using System; using System.Security.Cryptography; + using System.Text; /// CryptographyUtils is a Utility class that provides Cryptography Utility constants. public static class CryptographyUtils @@ -44,5 +46,65 @@ public static SHA512 CreateSHA512() { return SHA512.Create(CryptoConfig.AllowOnlyFipsAlgorithms ? SHA512CryptoServiceProvider : SHA512Cng); } + + public static string GenerateHash(this string str) + { + try + { + return CryptoConfig.AllowOnlyFipsAlgorithms + ? str.GenerateSha256Hash() + : str.GenerateMd5(); + } + catch (Exception) + { + return str.GenerateMd5(); + } + } + + public static string GenerateSha256Hash(this string str) + { + return str.GenerateHash(CreateSHA256()); + } + + public static string GenerateMd5(this string str) + { + return str.GenerateHash("MD5"); + } + + public static string GenerateHash(this string str, string hashType) + { + var hasher = HashAlgorithm.Create(hashType); + if (hasher == null) + { + throw new InvalidOperationException("No hashing type found by name " + hashType); + } + + return str.GenerateHash(hasher); + } + + public static string GenerateHash(this string str, HashAlgorithm hasher) + { + using (hasher) + { + // convert our string into byte array + var byteArray = Encoding.UTF8.GetBytes(str); + + // get the hashed values created by our SHA1CryptoServiceProvider + var hashedByteArray = hasher.ComputeHash(byteArray); + + // create a StringBuilder object + var stringBuilder = new StringBuilder(); + + // loop to each each byte + foreach (var b in hashedByteArray) + { + // append it to our StringBuilder + stringBuilder.Append(b.ToString("x2").ToLowerInvariant()); + } + + // return the hashed value + return stringBuilder.ToString(); + } + } } } diff --git a/DNN Platform/Website/admin/Skins/DnnCssExclude.ascx.cs b/DNN Platform/Website/admin/Skins/DnnCssExclude.ascx.cs index c0e0d5dd1dd..167776c1258 100644 --- a/DNN Platform/Website/admin/Skins/DnnCssExclude.ascx.cs +++ b/DNN Platform/Website/admin/Skins/DnnCssExclude.ascx.cs @@ -5,9 +5,6 @@ namespace DotNetNuke.UI.Skins.Controls { using System; - using ClientDependency.Core; - using ClientDependency.Core.Controls; - /// A control which causes CSS to no longer be included on the page. public partial class DnnCssExclude : SkinObjectBase { diff --git a/DNN Platform/Website/admin/Skins/DnnCssInclude.ascx.cs b/DNN Platform/Website/admin/Skins/DnnCssInclude.ascx.cs index 90a97e9b631..9550205a589 100644 --- a/DNN Platform/Website/admin/Skins/DnnCssInclude.ascx.cs +++ b/DNN Platform/Website/admin/Skins/DnnCssInclude.ascx.cs @@ -5,8 +5,7 @@ namespace DotNetNuke.UI.Skins.Controls { using System; - using ClientDependency.Core; - using ClientDependency.Core.Controls; + using DotNetNuke.Web.Client.Cdf; /// A control which causes CSS to be included on the page. public partial class DnnCssInclude : SkinObjectBase @@ -36,9 +35,7 @@ protected override void OnLoad(EventArgs e) { base.OnLoad(e); this.ctlInclude.AddTag = this.AddTag; - this.ctlInclude.CssMedia = this.CssMedia; this.ctlInclude.FilePath = this.FilePath; - this.ctlInclude.ForceBundle = this.ForceBundle; this.ctlInclude.ForceProvider = this.ForceProvider; this.ctlInclude.ForceVersion = this.ForceVersion; this.ctlInclude.Name = this.Name; diff --git a/DNN Platform/Website/admin/Skins/DnnJsExclude.ascx.cs b/DNN Platform/Website/admin/Skins/DnnJsExclude.ascx.cs index 9f43f0bb233..f8148ef1313 100644 --- a/DNN Platform/Website/admin/Skins/DnnJsExclude.ascx.cs +++ b/DNN Platform/Website/admin/Skins/DnnJsExclude.ascx.cs @@ -5,9 +5,6 @@ namespace DotNetNuke.UI.Skins.Controls { using System; - using ClientDependency.Core; - using ClientDependency.Core.Controls; - /// A control which causes JavaScript to no longer be included on the page. public partial class DnnJsExclude : SkinObjectBase { diff --git a/DNN Platform/Website/admin/Skins/DnnJsInclude.ascx.cs b/DNN Platform/Website/admin/Skins/DnnJsInclude.ascx.cs index c9a61f8be80..b5ee3fdae90 100644 --- a/DNN Platform/Website/admin/Skins/DnnJsInclude.ascx.cs +++ b/DNN Platform/Website/admin/Skins/DnnJsInclude.ascx.cs @@ -5,9 +5,6 @@ namespace DotNetNuke.UI.Skins.Controls { using System; - using ClientDependency.Core; - using ClientDependency.Core.Controls; - /// A control which causes JavaScript to be included on the page. public partial class DnnJsInclude : SkinObjectBase { @@ -35,7 +32,6 @@ protected override void OnLoad(EventArgs e) base.OnLoad(e); this.ctlInclude.AddTag = this.AddTag; this.ctlInclude.FilePath = this.FilePath; - this.ctlInclude.ForceBundle = this.ForceBundle; this.ctlInclude.ForceProvider = this.ForceProvider; this.ctlInclude.ForceVersion = this.ForceVersion; this.ctlInclude.Name = this.Name; From 239e7eceb25defafe62a583790c6e6701650b8bf Mon Sep 17 00:00:00 2001 From: Peter Donker Date: Fri, 12 Sep 2025 17:49:59 +0200 Subject: [PATCH 010/199] Revert changes in default.aspx --- DNN Platform/Website/Default.aspx | 7 +- DNN Platform/Website/Default.aspx.designer.cs | 447 +++++++++--------- 2 files changed, 232 insertions(+), 222 deletions(-) diff --git a/DNN Platform/Website/Default.aspx b/DNN Platform/Website/Default.aspx index 740c6251aad..4666be4424b 100644 --- a/DNN Platform/Website/Default.aspx +++ b/DNN Platform/Website/Default.aspx @@ -13,19 +13,20 @@ - + + - + - + diff --git a/DNN Platform/Website/Default.aspx.designer.cs b/DNN Platform/Website/Default.aspx.designer.cs index f225ded5e47..ff9f8a29bb2 100644 --- a/DNN Platform/Website/Default.aspx.designer.cs +++ b/DNN Platform/Website/Default.aspx.designer.cs @@ -11,223 +11,232 @@ namespace DotNetNuke.Framework { - public partial class DefaultPage - { - - /// - /// skinDocType control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.Literal skinDocType; - - /// - /// attributeList control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.Literal attributeList; - - /// - /// Head control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.HtmlControls.HtmlHead Head; - - /// - /// metaPanel control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.PlaceHolder metaPanel; - - /// - /// MetaRefresh control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.HtmlControls.HtmlMeta MetaRefresh; - - /// - /// MetaDescription control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.HtmlControls.HtmlMeta MetaDescription; - - /// - /// MetaKeywords control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.HtmlControls.HtmlMeta MetaKeywords; - - /// - /// MetaCopyright control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.HtmlControls.HtmlMeta MetaCopyright; - - /// - /// MetaGenerator control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.HtmlControls.HtmlMeta MetaGenerator; - - /// - /// MetaAuthor control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.HtmlControls.HtmlMeta MetaAuthor; - - /// - /// MetaRobots control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.HtmlControls.HtmlMeta MetaRobots; - - /// - /// DnnResourcesPageHeader control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::DotNetNuke.Web.Client.ClientResourceManagement.DnnResources DnnResourcesPageHeader; - - /// - /// CSS control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.PlaceHolder CSS; - - /// - /// SCRIPTS control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.PlaceHolder SCRIPTS; - - /// - /// Body control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.HtmlControls.HtmlGenericControl Body; - - /// - /// Form control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::DotNetNuke.Common.Controls.Form Form; - - /// - /// DnnResourcesBody control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::DotNetNuke.Web.Client.ClientResourceManagement.DnnResources DnnResourcesBody; - - /// - /// SkinError control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.Label SkinError; - - /// - /// SkinPlaceHolder control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.PlaceHolder SkinPlaceHolder; - - /// - /// ScrollTop control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.HtmlControls.HtmlInputHidden ScrollTop; - - /// - /// __dnnVariable control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.HtmlControls.HtmlInputHidden @__dnnVariable; - - /// - /// DnnResourcesFormBottom control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::DotNetNuke.Web.Client.ClientResourceManagement.DnnResources DnnResourcesFormBottom; - - /// - /// ClientResourceIncludes control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.PlaceHolder ClientResourceIncludes; - - /// - /// ClientResourceLoader control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::DotNetNuke.Web.Client.ClientResourceManagement.ClientResourceLoader ClientResourceLoader; - } + public partial class DefaultPage + { + + /// + /// skinDocType control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Literal skinDocType; + + /// + /// attributeList control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Literal attributeList; + + /// + /// Head control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.HtmlControls.HtmlHead Head; + + /// + /// metaPanel control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.PlaceHolder metaPanel; + + /// + /// MetaRefresh control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.HtmlControls.HtmlMeta MetaRefresh; + + /// + /// MetaDescription control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected new global::System.Web.UI.HtmlControls.HtmlMeta MetaDescription; + + /// + /// MetaKeywords control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected new global::System.Web.UI.HtmlControls.HtmlMeta MetaKeywords; + + /// + /// MetaCopyright control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.HtmlControls.HtmlMeta MetaCopyright; + + /// + /// MetaGenerator control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.HtmlControls.HtmlMeta MetaGenerator; + + /// + /// MetaAuthor control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.HtmlControls.HtmlMeta MetaAuthor; + + /// + /// MetaRobots control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.HtmlControls.HtmlMeta MetaRobots; + + /// + /// ClientDependencyHeadCss control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.PlaceHolder ClientDependencyHeadCss; + + /// + /// ClientDependencyHeadJs control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.PlaceHolder ClientDependencyHeadJs; + + /// + /// CSS control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.PlaceHolder CSS; + + /// + /// SCRIPTS control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.PlaceHolder SCRIPTS; + + /// + /// Body control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.HtmlControls.HtmlGenericControl Body; + + /// + /// Form control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected new global::DotNetNuke.Common.Controls.Form Form; + + /// + /// BodySCRIPTS control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.PlaceHolder BodySCRIPTS; + + /// + /// SkinError control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Label SkinError; + + /// + /// SkinPlaceHolder control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.PlaceHolder SkinPlaceHolder; + + /// + /// ScrollTop control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.HtmlControls.HtmlInputHidden ScrollTop; + + /// + /// __dnnVariable control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.HtmlControls.HtmlInputHidden @__dnnVariable; + + /// + /// ClientResourcesFormBottom control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.PlaceHolder ClientResourcesFormBottom; + + /// + /// ClientResourceIncludes control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.PlaceHolder ClientResourceIncludes; + + /// + /// ClientResourceLoader control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::DotNetNuke.Web.Client.ClientResourceManagement.ClientResourceLoader ClientResourceLoader; + } } From 4e09bc5262167cb26438cb75c77897381e9d13cf Mon Sep 17 00:00:00 2001 From: Peter Donker Date: Fri, 12 Sep 2025 19:25:09 +0200 Subject: [PATCH 011/199] More code fixes --- .../Controls/ClientResourcePath.cs | 30 +- .../Controls/DnnResources.cs | 1 + DNN Platform/Skins/Aperture/package.json | 2 +- DNN Platform/Website/Default.aspx | 3 + DNN Platform/Website/Default.aspx.designer.cs | 475 +++++++++--------- DNN Platform/Website/development.config | 21 - DNN Platform/Website/release.config | 21 - 7 files changed, 285 insertions(+), 268 deletions(-) diff --git a/DNN Platform/DotNetNuke.Web.Client/Controls/ClientResourcePath.cs b/DNN Platform/DotNetNuke.Web.Client/Controls/ClientResourcePath.cs index d332735f78a..d77150c0b5f 100644 --- a/DNN Platform/DotNetNuke.Web.Client/Controls/ClientResourcePath.cs +++ b/DNN Platform/DotNetNuke.Web.Client/Controls/ClientResourcePath.cs @@ -3,12 +3,40 @@ // See the LICENSE file in the project root for more information namespace DotNetNuke.Web.Client.ClientResourceManagement -{ +{ + using System; + using System.Web.UI; + /// Defines the path to a client resource. public class ClientResourcePath { + public event EventHandler DataBinding; + public string Name { get; set; } public string Path { get; set; } + + public ClientResourceLoader Parent { get; internal set; } + + public Control BindingContainer + { + get + { + return this.Parent; + } + } + + public void DataBind() + { + this.OnDataBinding(new EventArgs()); + } + + protected void OnDataBinding(EventArgs e) + { + if (this.DataBinding != null) + { + this.DataBinding(this, e); + } + } } } diff --git a/DNN Platform/DotNetNuke.Web.Client/Controls/DnnResources.cs b/DNN Platform/DotNetNuke.Web.Client/Controls/DnnResources.cs index ae2bc6750e0..57fb57824bd 100644 --- a/DNN Platform/DotNetNuke.Web.Client/Controls/DnnResources.cs +++ b/DNN Platform/DotNetNuke.Web.Client/Controls/DnnResources.cs @@ -28,6 +28,7 @@ protected override void OnInit(System.EventArgs e) protected override void Render(HtmlTextWriter writer) { base.Render(writer); + writer.Write(this.clientResourcesController.RenderDependencies(ResourceType.All, this.Provider)); } } } diff --git a/DNN Platform/Skins/Aperture/package.json b/DNN Platform/Skins/Aperture/package.json index 24ffef32f72..2b4f7d94486 100644 --- a/DNN Platform/Skins/Aperture/package.json +++ b/DNN Platform/Skins/Aperture/package.json @@ -1,6 +1,6 @@ { "name": "aperture", - "version": "10.1.0", + "version": "10.1.1", "description": "Default theme for DNN 10.", "main": "src/scripts/main.ts", "author": "DNN Community", diff --git a/DNN Platform/Website/Default.aspx b/DNN Platform/Website/Default.aspx index 4666be4424b..b49e542d527 100644 --- a/DNN Platform/Website/Default.aspx +++ b/DNN Platform/Website/Default.aspx @@ -13,6 +13,7 @@ + @@ -21,12 +22,14 @@ + + diff --git a/DNN Platform/Website/Default.aspx.designer.cs b/DNN Platform/Website/Default.aspx.designer.cs index ff9f8a29bb2..6b9176a6112 100644 --- a/DNN Platform/Website/Default.aspx.designer.cs +++ b/DNN Platform/Website/Default.aspx.designer.cs @@ -11,232 +11,259 @@ namespace DotNetNuke.Framework { - public partial class DefaultPage - { - - /// - /// skinDocType control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.Literal skinDocType; - - /// - /// attributeList control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.Literal attributeList; - - /// - /// Head control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.HtmlControls.HtmlHead Head; - - /// - /// metaPanel control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.PlaceHolder metaPanel; - - /// - /// MetaRefresh control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.HtmlControls.HtmlMeta MetaRefresh; - - /// - /// MetaDescription control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// + public partial class DefaultPage + { + + /// + /// skinDocType control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Literal skinDocType; + + /// + /// attributeList control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Literal attributeList; + + /// + /// Head control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.HtmlControls.HtmlHead Head; + + /// + /// metaPanel control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.PlaceHolder metaPanel; + + /// + /// MetaRefresh control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.HtmlControls.HtmlMeta MetaRefresh; + + /// + /// MetaDescription control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// protected new global::System.Web.UI.HtmlControls.HtmlMeta MetaDescription; - /// - /// MetaKeywords control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// + /// + /// MetaKeywords control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// protected new global::System.Web.UI.HtmlControls.HtmlMeta MetaKeywords; - /// - /// MetaCopyright control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.HtmlControls.HtmlMeta MetaCopyright; - - /// - /// MetaGenerator control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.HtmlControls.HtmlMeta MetaGenerator; - - /// - /// MetaAuthor control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.HtmlControls.HtmlMeta MetaAuthor; - - /// - /// MetaRobots control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.HtmlControls.HtmlMeta MetaRobots; - - /// - /// ClientDependencyHeadCss control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.PlaceHolder ClientDependencyHeadCss; - - /// - /// ClientDependencyHeadJs control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.PlaceHolder ClientDependencyHeadJs; - - /// - /// CSS control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.PlaceHolder CSS; - - /// - /// SCRIPTS control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.PlaceHolder SCRIPTS; - - /// - /// Body control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.HtmlControls.HtmlGenericControl Body; - - /// - /// Form control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected new global::DotNetNuke.Common.Controls.Form Form; - - /// - /// BodySCRIPTS control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.PlaceHolder BodySCRIPTS; - - /// - /// SkinError control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.Label SkinError; - - /// - /// SkinPlaceHolder control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.PlaceHolder SkinPlaceHolder; - - /// - /// ScrollTop control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.HtmlControls.HtmlInputHidden ScrollTop; - - /// - /// __dnnVariable control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.HtmlControls.HtmlInputHidden @__dnnVariable; - - /// - /// ClientResourcesFormBottom control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.PlaceHolder ClientResourcesFormBottom; - - /// - /// ClientResourceIncludes control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.PlaceHolder ClientResourceIncludes; - - /// - /// ClientResourceLoader control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::DotNetNuke.Web.Client.ClientResourceManagement.ClientResourceLoader ClientResourceLoader; - } + /// + /// MetaCopyright control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.HtmlControls.HtmlMeta MetaCopyright; + + /// + /// MetaGenerator control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.HtmlControls.HtmlMeta MetaGenerator; + + /// + /// MetaAuthor control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.HtmlControls.HtmlMeta MetaAuthor; + + /// + /// MetaRobots control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.HtmlControls.HtmlMeta MetaRobots; + + /// + /// DnnResources1 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::DotNetNuke.Web.Client.ClientResourceManagement.DnnResources DnnResources1; + + /// + /// ClientDependencyHeadCss control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.PlaceHolder ClientDependencyHeadCss; + + /// + /// ClientDependencyHeadJs control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.PlaceHolder ClientDependencyHeadJs; + + /// + /// CSS control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.PlaceHolder CSS; + + /// + /// SCRIPTS control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.PlaceHolder SCRIPTS; + + /// + /// Body control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.HtmlControls.HtmlGenericControl Body; + + /// + /// Form control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected new global::DotNetNuke.Common.Controls.Form Form; + + /// + /// DnnResources2 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::DotNetNuke.Web.Client.ClientResourceManagement.DnnResources DnnResources2; + + /// + /// BodySCRIPTS control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.PlaceHolder BodySCRIPTS; + + /// + /// SkinError control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Label SkinError; + + /// + /// SkinPlaceHolder control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.PlaceHolder SkinPlaceHolder; + + /// + /// ScrollTop control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.HtmlControls.HtmlInputHidden ScrollTop; + + /// + /// __dnnVariable control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.HtmlControls.HtmlInputHidden @__dnnVariable; + + /// + /// ClientResourcesFormBottom control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.PlaceHolder ClientResourcesFormBottom; + + /// + /// DnnResources3 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::DotNetNuke.Web.Client.ClientResourceManagement.DnnResources DnnResources3; + + /// + /// ClientResourceIncludes control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.PlaceHolder ClientResourceIncludes; + + /// + /// ClientResourceLoader control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::DotNetNuke.Web.Client.ClientResourceManagement.ClientResourceLoader ClientResourceLoader; + } } diff --git a/DNN Platform/Website/development.config b/DNN Platform/Website/development.config index 403a7fa6603..034fdff3aa6 100644 --- a/DNN Platform/Website/development.config +++ b/DNN Platform/Website/development.config @@ -439,25 +439,4 @@ - - - - - - - - - - - - - - - - - - - diff --git a/DNN Platform/Website/release.config b/DNN Platform/Website/release.config index 632121896e1..39e6ef1aaf4 100644 --- a/DNN Platform/Website/release.config +++ b/DNN Platform/Website/release.config @@ -436,25 +436,4 @@ - - - - - - - - - - - - - - - - - - - From 03a86a9b00fe8c93e5695b419ae4a486c1ad7fe6 Mon Sep 17 00:00:00 2001 From: Peter Donker Date: Sat, 13 Sep 2025 23:38:40 +0200 Subject: [PATCH 012/199] Register resource paths in default.aspx code behind instead of control. Fix issues with new CRM. --- .../ClientResourcesController.cs | 6 +-- .../Models/FileInclude.cs | 13 ++++++- .../Models/ScriptResource.cs | 2 +- .../Startup.cs | 2 +- .../Controls/DnnCssInclude.cs | 4 +- .../Controls/DnnJsInclude.cs | 4 +- DNN Platform/Website/Default.aspx | 6 --- DNN Platform/Website/Default.aspx.cs | 39 ++++++++++++------- DNN Platform/Website/Default.aspx.designer.cs | 13 +------ 9 files changed, 50 insertions(+), 39 deletions(-) diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourcesController.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourcesController.cs index e64880f0edd..2a8285e0d72 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourcesController.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourcesController.cs @@ -123,21 +123,21 @@ public string RenderDependencies(ResourceType resourceType, string provider) var sortedList = new List(); if (resourceType == ResourceType.Font || resourceType == ResourceType.All) { - foreach (var link in this.Fonts.Where(s => !this.FontsToExclude.Contains(s.Name.ToLowerInvariant())).OrderBy(l => l.Priority)) + foreach (var link in this.Fonts.Where(s => s.Provider == provider && !this.FontsToExclude.Contains(s.Name.ToLowerInvariant())).OrderBy(l => l.Priority)) { sortedList.Add(link.Render()); } } if (resourceType == ResourceType.Stylesheet || resourceType == ResourceType.All) { - foreach (var link in this.Stylesheets.Where(s => !this.StylesheetsToExclude.Contains(s.Name.ToLowerInvariant())).OrderBy(l => l.Priority)) + foreach (var link in this.Stylesheets.Where(s => s.Provider == provider && !this.StylesheetsToExclude.Contains(s.Name.ToLowerInvariant())).OrderBy(l => l.Priority)) { sortedList.Add(link.Render()); } } if (resourceType == ResourceType.Script || resourceType == ResourceType.All) { - foreach (var script in this.Scripts.Where(s => !this.ScriptsToExclude.Contains(s.Name.ToLowerInvariant())).OrderBy(s => s.Priority)) + foreach (var script in this.Scripts.Where(s => s.Provider == provider && !this.ScriptsToExclude.Contains(s.Name.ToLowerInvariant())).OrderBy(s => s.Priority)) { sortedList.Add(script.Render()); } diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/FileInclude.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/FileInclude.cs index 2c6c5c8b97e..aa69a64a7a4 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/FileInclude.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/FileInclude.cs @@ -5,11 +5,20 @@ public class FileInclude { + private string name; + public string FilePath { get; set; } public string PathNameAlias { get; set; } public int Priority { get; set; } - public string Provider { get; set; } - public string Name { get; set; } + public string Provider { get; set; } = "DnnPageHeaderProvider"; + public string Name + { + get + { + return string.IsNullOrEmpty(name) ? this.FilePath : name; + } + set => name = value; + } public string Version { get; set; } public bool ForceVersion { get; set; } public CrossOrigin CrossOrigin { get; set; } = CrossOrigin.None; diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ScriptResource.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ScriptResource.cs index caf43df3f61..f43d4247083 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ScriptResource.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ScriptResource.cs @@ -52,7 +52,7 @@ public string Render() htmlString += this.RenderIntegrity(); htmlString += this.RenderReferrerPolicy(); htmlString += this.RenderAttributes(); - htmlString += " />"; + htmlString += " type=\"text/javascript\">"; return htmlString; } } diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Startup.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Startup.cs index 2471f25beac..c2dd9fb26ef 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Startup.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Startup.cs @@ -12,7 +12,7 @@ public class Startup : IDnnStartup { public void ConfigureServices(IServiceCollection services) { - services.AddTransient(); + services.AddScoped(); } } } diff --git a/DNN Platform/DotNetNuke.Web.Client/Controls/DnnCssInclude.cs b/DNN Platform/DotNetNuke.Web.Client/Controls/DnnCssInclude.cs index 27e8b8b7734..13dc3c32503 100644 --- a/DNN Platform/DotNetNuke.Web.Client/Controls/DnnCssInclude.cs +++ b/DNN Platform/DotNetNuke.Web.Client/Controls/DnnCssInclude.cs @@ -7,6 +7,7 @@ namespace DotNetNuke.Web.Client.ClientResourceManagement using System.Web.UI; using DotNetNuke.Abstractions.ClientResources; + using DotNetNuke.Web.Client.Cdf; /// Registers a CSS resource. public class DnnCssInclude : ClientResourceInclude @@ -18,7 +19,8 @@ public class DnnCssInclude : ClientResourceInclude public DnnCssInclude(IClientResourcesController clientResourcesController) : base(clientResourcesController) { - this.ForceProvider = ClientResourceManager.DefaultCssProvider; + this.ForceProvider = ClientResourceManager.DefaultCssProvider; + this.DependencyType = ClientDependencyType.Css; } /// diff --git a/DNN Platform/DotNetNuke.Web.Client/Controls/DnnJsInclude.cs b/DNN Platform/DotNetNuke.Web.Client/Controls/DnnJsInclude.cs index 8bedb08488c..8989e79489c 100644 --- a/DNN Platform/DotNetNuke.Web.Client/Controls/DnnJsInclude.cs +++ b/DNN Platform/DotNetNuke.Web.Client/Controls/DnnJsInclude.cs @@ -7,6 +7,7 @@ namespace DotNetNuke.Web.Client.ClientResourceManagement using System.Web.UI; using DotNetNuke.Abstractions.ClientResources; + using DotNetNuke.Web.Client.Cdf; /// Registers a JavaScript resource. public class DnnJsInclude : ClientResourceInclude @@ -19,7 +20,8 @@ public class DnnJsInclude : ClientResourceInclude public DnnJsInclude(IClientResourcesController clientResourcesController) : base(clientResourcesController) { - this.ForceProvider = ClientResourceManager.DefaultJsProvider; + this.ForceProvider = ClientResourceManager.DefaultJsProvider; + this.DependencyType = ClientDependencyType.Javascript; } /// diff --git a/DNN Platform/Website/Default.aspx b/DNN Platform/Website/Default.aspx index b49e542d527..13059d2be88 100644 --- a/DNN Platform/Website/Default.aspx +++ b/DNN Platform/Website/Default.aspx @@ -32,11 +32,5 @@ - - - - - - diff --git a/DNN Platform/Website/Default.aspx.cs b/DNN Platform/Website/Default.aspx.cs index 4a6df5cda09..9f6bb5e7fdf 100644 --- a/DNN Platform/Website/Default.aspx.cs +++ b/DNN Platform/Website/Default.aspx.cs @@ -16,6 +16,7 @@ namespace DotNetNuke.Framework using DotNetNuke.Abstractions; using DotNetNuke.Abstractions.Application; + using DotNetNuke.Abstractions.ClientResources; using DotNetNuke.Abstractions.Logging; using DotNetNuke.Abstractions.Portals; using DotNetNuke.Common.Utilities; @@ -59,11 +60,12 @@ public partial class DefaultPage : CDefault, IClientAPICallbackEventHandler private readonly IHostSettingsService hostSettingsService; private readonly IEventLogger eventLogger; private readonly IPortalSettingsController portalSettingsController; + private readonly IClientResourcesController clientResourcesController; /// Initializes a new instance of the class. [Obsolete("Deprecated in DotNetNuke 10.0.2. Please use overload with INavigationManager. Scheduled removal in v12.0.0.")] public DefaultPage() - : this(null, null, null, null, null, null, null, null, null) + : this(null, null, null, null, null, null, null, null, null, null) { } @@ -77,7 +79,18 @@ public DefaultPage() /// The event logger. /// The portal controller. /// The portal settings controller. - public DefaultPage(INavigationManager navigationManager, IApplicationInfo appInfo, IApplicationStatusInfo appStatus, IModuleControlPipeline moduleControlPipeline, IHostSettings hostSettings, IHostSettingsService hostSettingsService, IEventLogger eventLogger, IPortalController portalController, IPortalSettingsController portalSettingsController) + /// The client resources controller. + public DefaultPage( + INavigationManager navigationManager, + IApplicationInfo appInfo, + IApplicationStatusInfo appStatus, + IModuleControlPipeline moduleControlPipeline, + IHostSettings hostSettings, + IHostSettingsService hostSettingsService, + IEventLogger eventLogger, + IPortalController portalController, + IPortalSettingsController portalSettingsController, + IClientResourcesController clientResourcesController) : base(portalController, appStatus, hostSettings) { this.NavigationManager = navigationManager ?? Globals.GetCurrentServiceProvider().GetRequiredService(); @@ -88,6 +101,7 @@ public DefaultPage(INavigationManager navigationManager, IApplicationInfo appInf this.hostSettingsService = hostSettingsService ?? Globals.GetCurrentServiceProvider().GetRequiredService(); this.eventLogger = eventLogger ?? Globals.GetCurrentServiceProvider().GetRequiredService(); this.portalSettingsController = portalSettingsController ?? Globals.GetCurrentServiceProvider().GetRequiredService(); + this.clientResourcesController = clientResourcesController ?? Globals.GetCurrentServiceProvider().GetRequiredService(); } public string CurrentSkinPath => ((PortalSettings)HttpContext.Current.Items["PortalSettings"]).ActiveTab.SkinPath; @@ -214,9 +228,8 @@ protected override void OnInit(EventArgs e) var ctlSkin = this.GetSkin(); - // DataBind common paths for the client resource loader - this.ClientResourceLoader.DataBind(); - this.ClientResourceLoader.PreRender += (sender, args) => JavaScript.Register(this.hostSettings, this.hostSettingsService, this.appStatus, this.eventLogger, this.PortalSettings, this.Page); + this.clientResourcesController.RegisterPathNameAlias("SkinPath", this.CurrentSkinPath); + this.clientResourcesController.RegisterPathNameAlias("SharedScripts", "~/Resources/Shared/Scripts/"); // check for and read skin package level doctype this.SetSkinDoctype(); @@ -286,13 +299,13 @@ protected override void OnInit(EventArgs e) // add CSS links ClientResourceManager.RegisterDefaultStylesheet(this, string.Concat(Globals.ApplicationPath, "/Resources/Shared/stylesheets/dnndefault/10.0.0/default.css")); - ClientResourceManager.RegisterStyleSheet(this, string.Concat(ctlSkin.SkinPath, "skin.css"), FileOrder.Css.SkinCss); - ClientResourceManager.RegisterStyleSheet(this, ctlSkin.SkinSrc.Replace(".ascx", ".css"), FileOrder.Css.SpecificSkinCss); + ClientResourceManager.RegisterStyleSheet(this, string.Concat(ctlSkin.SkinPath, "skin.css"), Web.Client.FileOrder.Css.SkinCss); + ClientResourceManager.RegisterStyleSheet(this, ctlSkin.SkinSrc.Replace(".ascx", ".css"), Web.Client.FileOrder.Css.SpecificSkinCss); // add skin to page this.SkinPlaceHolder.Controls.Add(ctlSkin); - ClientResourceManager.RegisterStyleSheet(this, string.Concat(this.PortalSettings.HomeDirectory, "portal.css"), FileOrder.Css.PortalCss); + ClientResourceManager.RegisterStyleSheet(this, string.Concat(this.PortalSettings.HomeDirectory, "portal.css"), Web.Client.FileOrder.Css.PortalCss); // add Favicon this.ManageFavicon(); @@ -621,7 +634,7 @@ private void InitializePage() // register css variables var cssVariablesStyleSheet = this.GetCssVariablesStylesheet(); - ClientResourceManager.RegisterStyleSheet(this, cssVariablesStyleSheet, FileOrder.Css.DefaultCss); + ClientResourceManager.RegisterStyleSheet(this, cssVariablesStyleSheet, Web.Client.FileOrder.Css.DefaultCss); // register the custom stylesheet of current page if (this.PortalSettings.ActiveTab.TabSettings.ContainsKey("CustomStylesheet") && !string.IsNullOrEmpty(this.PortalSettings.ActiveTab.TabSettings["CustomStylesheet"].ToString())) @@ -648,9 +661,9 @@ private void InitializePage() ClientAPI.RegisterClientVariable(this, "cc_message", Localization.GetString("cc_message", Localization.GlobalResourceFile), true); ClientAPI.RegisterClientVariable(this, "cc_dismiss", Localization.GetString("cc_dismiss", Localization.GlobalResourceFile), true); ClientAPI.RegisterClientVariable(this, "cc_link", Localization.GetString("cc_link", Localization.GlobalResourceFile), true); - ClientResourceManager.RegisterScript(this.Page, "~/Resources/Shared/Components/CookieConsent/cookieconsent.min.js", FileOrder.Js.DnnControls); - ClientResourceManager.RegisterStyleSheet(this.Page, "~/Resources/Shared/Components/CookieConsent/cookieconsent.min.css", FileOrder.Css.ResourceCss); - ClientResourceManager.RegisterScript(this.Page, "~/js/dnn.cookieconsent.js", FileOrder.Js.DefaultPriority); + ClientResourceManager.RegisterScript(this.Page, "~/Resources/Shared/Components/CookieConsent/cookieconsent.min.js", Web.Client.FileOrder.Js.DnnControls); + ClientResourceManager.RegisterStyleSheet(this.Page, "~/Resources/Shared/Components/CookieConsent/cookieconsent.min.css", Web.Client.FileOrder.Css.ResourceCss); + ClientResourceManager.RegisterScript(this.Page, "~/js/dnn.cookieconsent.js", Web.Client.FileOrder.Js.DefaultPriority); } } @@ -720,7 +733,7 @@ private void LoadPopupScriptsIfNeeded() var popupFilePath = HttpContext.Current.IsDebuggingEnabled ? "~/js/Debug/dnn.modalpopup.js" : "~/js/dnn.modalpopup.js"; - ClientResourceManager.RegisterScript(this, popupFilePath, FileOrder.Js.DnnModalPopup); + ClientResourceManager.RegisterScript(this, popupFilePath, Web.Client.FileOrder.Js.DnnModalPopup); } } diff --git a/DNN Platform/Website/Default.aspx.designer.cs b/DNN Platform/Website/Default.aspx.designer.cs index 6b9176a6112..dac0fac4fcd 100644 --- a/DNN Platform/Website/Default.aspx.designer.cs +++ b/DNN Platform/Website/Default.aspx.designer.cs @@ -66,7 +66,7 @@ public partial class DefaultPage /// Auto-generated field. /// To modify move field declaration from designer file to code-behind file. /// - protected new global::System.Web.UI.HtmlControls.HtmlMeta MetaDescription; + protected new global::System.Web.UI.HtmlControls.HtmlMeta MetaDescription; /// /// MetaKeywords control. @@ -75,7 +75,7 @@ public partial class DefaultPage /// Auto-generated field. /// To modify move field declaration from designer file to code-behind file. /// - protected new global::System.Web.UI.HtmlControls.HtmlMeta MetaKeywords; + protected new global::System.Web.UI.HtmlControls.HtmlMeta MetaKeywords; /// /// MetaCopyright control. @@ -256,14 +256,5 @@ public partial class DefaultPage /// To modify move field declaration from designer file to code-behind file. /// protected global::System.Web.UI.WebControls.PlaceHolder ClientResourceIncludes; - - /// - /// ClientResourceLoader control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::DotNetNuke.Web.Client.ClientResourceManagement.ClientResourceLoader ClientResourceLoader; } } From 748af359534bda7aa1646a5d88996999f3f44e54 Mon Sep 17 00:00:00 2001 From: Peter Donker Date: Sun, 14 Sep 2025 10:52:29 +0200 Subject: [PATCH 013/199] Working personabar --- .../ClientResourceProviders.cs | 33 +++++++++++++++++++ .../JavaScriptLibraries/JavaScript.cs | 7 ++-- DNN Platform/Website/Default.aspx.cs | 2 ++ 3 files changed, 38 insertions(+), 4 deletions(-) create mode 100644 DNN Platform/DotNetNuke.Abstractions/ClientResources/ClientResourceProviders.cs diff --git a/DNN Platform/DotNetNuke.Abstractions/ClientResources/ClientResourceProviders.cs b/DNN Platform/DotNetNuke.Abstractions/ClientResources/ClientResourceProviders.cs new file mode 100644 index 00000000000..e8da0d8205c --- /dev/null +++ b/DNN Platform/DotNetNuke.Abstractions/ClientResources/ClientResourceProviders.cs @@ -0,0 +1,33 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information + +namespace DotNetNuke.Abstractions.ClientResources +{ + /// + /// Contains constants for the supported Client Resource Providers within the framework's registration system. + /// These values determine where a resource gets injected in the page. + /// + public class ClientResourceProviders + { + /// + /// In the page header. + /// + public const string Default = ""; + + /// + /// In the page header. + /// + public const string DnnPageHeaderProvider = "DnnPageHeaderProvider"; + + /// + /// In the page body at the top of the main form (when using webforms). + /// + public const string DnnBodyProvider = "DnnBodyProvider"; + + /// + /// In the page body at the bottom of the main form (when using webforms). + /// + public const string DnnFormBottomProvider = "DnnFormBottomProvider"; + } +} diff --git a/DNN Platform/Library/Framework/JavaScriptLibraries/JavaScript.cs b/DNN Platform/Library/Framework/JavaScriptLibraries/JavaScript.cs index 76e541932a0..8e96229678d 100644 --- a/DNN Platform/Library/Framework/JavaScriptLibraries/JavaScript.cs +++ b/DNN Platform/Library/Framework/JavaScriptLibraries/JavaScript.cs @@ -25,7 +25,6 @@ namespace DotNetNuke.Framework.JavaScriptLibraries using DotNetNuke.UI.Utilities; using DotNetNuke.Web.Client; using DotNetNuke.Web.Client.ClientResourceManagement; - using Microsoft.Extensions.DependencyInjection; using Globals = DotNetNuke.Common.Globals; @@ -539,11 +538,11 @@ private static string GetScriptLocation(JavaScriptLibrary js) switch (js.PreferredScriptLocation) { case ScriptLocation.PageHead: - return "DnnPageHeaderProvider"; + return Abstractions.ClientResources.ClientResourceProviders.DnnPageHeaderProvider; case ScriptLocation.BodyBottom: - return "DnnFormBottomProvider"; + return Abstractions.ClientResources.ClientResourceProviders.DnnFormBottomProvider; case ScriptLocation.BodyTop: - return "DnnBodyProvider"; + return Abstractions.ClientResources.ClientResourceProviders.DnnBodyProvider; } return string.Empty; diff --git a/DNN Platform/Website/Default.aspx.cs b/DNN Platform/Website/Default.aspx.cs index 9f6bb5e7fdf..db76295a796 100644 --- a/DNN Platform/Website/Default.aspx.cs +++ b/DNN Platform/Website/Default.aspx.cs @@ -346,6 +346,8 @@ protected override void OnPreRender(EventArgs evt) { base.OnPreRender(evt); + JavaScript.Register(this.hostSettings, this.hostSettingsService, this.appStatus, this.eventLogger, this.PortalSettings, this.Page); + // Set the Head tags this.metaPanel.Visible = !UrlUtils.InPopUp(); if (!UrlUtils.InPopUp()) From f7a65aa0550e9a61e4d14bbc06f019ff7bfc9c93 Mon Sep 17 00:00:00 2001 From: Peter Donker Date: Mon, 15 Sep 2025 09:03:42 +0200 Subject: [PATCH 014/199] Add support for CDN and CRM version --- .../ClientResources/IResource.cs | 14 +++++++--- .../ClientResourcesController.cs | 18 +++++++++---- .../GenericResourceExtensions.cs | 7 +++++ .../Models/FontResource.cs | 9 +++---- .../{FileInclude.cs => ResourceBase.cs} | 27 +++++++++++++++++-- .../Models/ScriptResource.cs | 9 +++---- .../Models/StylesheetResource.cs | 8 +++--- 7 files changed, 67 insertions(+), 25 deletions(-) rename DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/{FileInclude.cs => ResourceBase.cs} (84%) diff --git a/DNN Platform/DotNetNuke.Abstractions/ClientResources/IResource.cs b/DNN Platform/DotNetNuke.Abstractions/ClientResources/IResource.cs index b7e57c91037..c254c789a1e 100644 --- a/DNN Platform/DotNetNuke.Abstractions/ClientResources/IResource.cs +++ b/DNN Platform/DotNetNuke.Abstractions/ClientResources/IResource.cs @@ -21,15 +21,21 @@ public interface IResource string PathNameAlias { get; set; } /// - /// Gets or sets the resolved full src path. + /// Gets or sets the resolved full path. /// - string Src { get; set; } + string ResolvedPath { get; set; } /// /// Gets or sets the lowered src path to facilitate lookup. /// string Key { get; set; } + /// + /// Gets or sets the CDN url to be used if host settings specify CDN should be used. + /// Note, if you only wish to use an external path, then use the FilePath property. + /// + string CdnUrl { get; set; } + /// /// Gets or sets the priority of the client resource. /// @@ -100,6 +106,8 @@ public interface IResource /// /// Renders the client resource as a string. /// + /// The current CRM version. + /// Whether to use the CDN url if available. /// Returns a HTML string. - string Render(); + string Render(int crmVersion, bool useCdn); } diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourcesController.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourcesController.cs index 2a8285e0d72..41429197d24 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourcesController.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourcesController.cs @@ -5,11 +5,13 @@ namespace DotNetNuke.Web.Client.ResourceManager { using System.Collections.Generic; using System.Linq; + using DotNetNuke.Abstractions.Application; using DotNetNuke.Abstractions.ClientResources; /// public class ClientResourcesController : IClientResourcesController { + private readonly IHostSettings hostSettings; private List Fonts { get; set; } = new List(); private List Scripts { get; set; } = new List(); private List Stylesheets { get; set; } = new List(); @@ -18,6 +20,12 @@ public class ClientResourcesController : IClientResourcesController private List ScriptsToExclude { get; set; } = new List(); private List StylesheetsToExclude { get; set; } = new List(); + /// Initializes a new instance of the class. + public ClientResourcesController(IHostSettings hostSettings) + { + this.hostSettings = hostSettings; + } + /// public void AddFont(IFontResource font) { @@ -125,21 +133,21 @@ public string RenderDependencies(ResourceType resourceType, string provider) { foreach (var link in this.Fonts.Where(s => s.Provider == provider && !this.FontsToExclude.Contains(s.Name.ToLowerInvariant())).OrderBy(l => l.Priority)) { - sortedList.Add(link.Render()); + sortedList.Add(link.Render(hostSettings.CrmVersion, hostSettings.CdnEnabled)); } } if (resourceType == ResourceType.Stylesheet || resourceType == ResourceType.All) { foreach (var link in this.Stylesheets.Where(s => s.Provider == provider && !this.StylesheetsToExclude.Contains(s.Name.ToLowerInvariant())).OrderBy(l => l.Priority)) { - sortedList.Add(link.Render()); + sortedList.Add(link.Render(hostSettings.CrmVersion, hostSettings.CdnEnabled)); } } if (resourceType == ResourceType.Script || resourceType == ResourceType.All) { foreach (var script in this.Scripts.Where(s => s.Provider == provider && !this.ScriptsToExclude.Contains(s.Name.ToLowerInvariant())).OrderBy(s => s.Priority)) { - sortedList.Add(script.Render()); + sortedList.Add(script.Render(hostSettings.CrmVersion, hostSettings.CdnEnabled)); } } return string.Join("", sortedList); @@ -148,8 +156,8 @@ public string RenderDependencies(ResourceType resourceType, string provider) private List AddResource(List resources, T resource) where T : IResource { - resource.Src = this.ResolvePath(resource.FilePath, resource.PathNameAlias); - resource.Key = resource.Src.ToLowerInvariant(); + resource.ResolvedPath = this.ResolvePath(resource.FilePath, resource.PathNameAlias); + resource.Key = resource.ResolvedPath.ToLowerInvariant(); resources.RemoveAll(l => l.Key == resource.Key); // remove any existing link with the same key (i.e. exactly the same resolved path) if (!string.IsNullOrEmpty(resource.Name)) { diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/GenericResourceExtensions.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/GenericResourceExtensions.cs index 0cb20b8e2c3..6130d9ddc29 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/GenericResourceExtensions.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/GenericResourceExtensions.cs @@ -36,6 +36,13 @@ public static T SetNameAndVersion(this T input, string name, string version, return input; } + public static T SetCdnUrl(this T input, string cdnUrl) where T : IResource + { + if (input == null) throw new ArgumentNullException(nameof(input)); + input.CdnUrl = cdnUrl; + return input; + } + public static T SetProvider(this T input, string provider) where T : IResource { if (input == null) throw new ArgumentNullException(nameof(input)); diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/FontResource.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/FontResource.cs index e303f50310a..63d28a15950 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/FontResource.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/FontResource.cs @@ -2,7 +2,7 @@ namespace DotNetNuke.Web.Client.ResourceManager.Models { - public class FontResource : FileInclude, IFontResource + public class FontResource : ResourceBase, IFontResource { private readonly IClientResourcesController _clientResourcesController; public FontResource(IClientResourcesController clientResourcesController) @@ -10,18 +10,17 @@ public FontResource(IClientResourcesController clientResourcesController) this._clientResourcesController = clientResourcesController; } - public string Src { get; set; } - public string Key { get; set; } + public string ResolvedPath { get; set; } public void Register() { this._clientResourcesController.AddFont(this); } - public string Render() + public string Render(int crmVersion, bool useCdn) { var htmlString = " Date: Mon, 15 Sep 2025 21:46:59 +0200 Subject: [PATCH 015/199] Fixes --- .../Models/FontResource.cs | 2 - .../Models/ScriptResource.cs | 1 - .../Library/DotNetNuke.Library.csproj | 4 ++ .../JavaScriptLibraries/JavaScript.cs | 53 ++++++++++++++----- DNN Platform/Website/Default.aspx.cs | 2 - 5 files changed, 43 insertions(+), 19 deletions(-) diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/FontResource.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/FontResource.cs index 63d28a15950..579793c04d1 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/FontResource.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/FontResource.cs @@ -10,8 +10,6 @@ public FontResource(IClientResourcesController clientResourcesController) this._clientResourcesController = clientResourcesController; } - public string ResolvedPath { get; set; } - public void Register() { this._clientResourcesController.AddFont(this); diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ScriptResource.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ScriptResource.cs index c0f9a573dc6..8720336fbf3 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ScriptResource.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ScriptResource.cs @@ -12,7 +12,6 @@ public class ScriptResource : ResourceBase, IScriptResource public bool NoModule { get; set; } = false; public string Type { get; set; } = ""; - public string ResolvedPath { get; set; } public ScriptResource(IClientResourcesController clientResourcesController) { diff --git a/DNN Platform/Library/DotNetNuke.Library.csproj b/DNN Platform/Library/DotNetNuke.Library.csproj index 650546a4ae6..bc55aa72331 100644 --- a/DNN Platform/Library/DotNetNuke.Library.csproj +++ b/DNN Platform/Library/DotNetNuke.Library.csproj @@ -1938,6 +1938,10 @@ {04f77171-0634-46e0-a95e-d7477c88712e} DotNetNuke.Log4Net + + {039bafbd-e2db-40c4-b565-c27467d9b5e1} + DotNetNuke.Web.Client.ResourceManager + {537b45eb-2ec3-4849-bc6b-d761f43674a5} DotNetNuke.Web.Client diff --git a/DNN Platform/Library/Framework/JavaScriptLibraries/JavaScript.cs b/DNN Platform/Library/Framework/JavaScriptLibraries/JavaScript.cs index 8e96229678d..f34963d5296 100644 --- a/DNN Platform/Library/Framework/JavaScriptLibraries/JavaScript.cs +++ b/DNN Platform/Library/Framework/JavaScriptLibraries/JavaScript.cs @@ -4,6 +4,7 @@ namespace DotNetNuke.Framework.JavaScriptLibraries { using System; + using System.Collections; using System.Collections.Generic; using System.Globalization; using System.Linq; @@ -11,6 +12,7 @@ namespace DotNetNuke.Framework.JavaScriptLibraries using System.Web.UI; using DotNetNuke.Abstractions.Application; + using DotNetNuke.Abstractions.ClientResources; using DotNetNuke.Abstractions.Logging; using DotNetNuke.Abstractions.Portals; using DotNetNuke.Common; @@ -23,8 +25,8 @@ namespace DotNetNuke.Framework.JavaScriptLibraries using DotNetNuke.UI.Skins; using DotNetNuke.UI.Skins.Controls; using DotNetNuke.UI.Utilities; - using DotNetNuke.Web.Client; using DotNetNuke.Web.Client.ClientResourceManagement; + using DotNetNuke.Web.Client.ResourceManager; using Microsoft.Extensions.DependencyInjection; using Globals = DotNetNuke.Common.Globals; @@ -385,7 +387,7 @@ private static void RequestHighestVersionLibraryRegistration(IApplicationStatusI var library = GetHighestVersionLibrary(appStatus, jsname); if (library != null) { - AddItemRequest(library.JavaScriptLibraryID); + AddItemRequest(library, false); } else { @@ -404,7 +406,7 @@ private static bool RequestLooseVersionLibraryRegistration(IApplicationStatusInf .FirstOrDefault(isValidLibrary); if (library != null) { - AddItemRequest(library.JavaScriptLibraryID); + AddItemRequest(library, false); return true; } @@ -412,7 +414,7 @@ private static bool RequestLooseVersionLibraryRegistration(IApplicationStatusInf library = GetHighestVersionLibrary(appStatus, jsname); if (library != null) { - AddItemRequest(library.JavaScriptLibraryID); + AddItemRequest(library, false); LogCollision(eventLogger, portalSettings, $"Requested:{jsname}:{version}:{specific}.Resolved:{library.Version}"); return true; } @@ -425,7 +427,7 @@ private static void RequestSpecificVersionLibraryRegistration(IEventLogger event var library = JavaScriptLibraryController.Instance.GetLibrary(l => l.LibraryName.Equals(jsname, StringComparison.OrdinalIgnoreCase) && l.Version == version); if (library != null) { - AddItemRequest(library.JavaScriptLibraryID); + AddItemRequest(library, true); } else { @@ -434,9 +436,15 @@ private static void RequestSpecificVersionLibraryRegistration(IEventLogger event } } - private static void AddItemRequest(int javaScriptLibraryId) + private static void AddItemRequest(JavaScriptLibrary library, bool forceVersion) { - HttpContextSource.Current.Items[ScriptPrefix + javaScriptLibraryId] = true; + HttpContextSource.Current.Items[ScriptPrefix + library.JavaScriptLibraryID] = true; + var controller = GetClientResourcesController(HttpContextSource.Current); + controller.CreateScript() + .FromSrc(GetScriptPath(null, null, library.LibraryName)) + .SetNameAndVersion(library.LibraryName, library.Version.ToString(), forceVersion) + .SetProvider(GetScriptLocation(library)) + .Register(); } private static void AddPreInstallOrLegacyItemRequest(string jsl) @@ -551,8 +559,8 @@ private static string GetScriptLocation(JavaScriptLibrary js) private static IEnumerable GetScriptVersions(IApplicationStatusInfo appStatus) { var orderedScripts = (from object item in HttpContextSource.Current.Items.Keys - where item.ToString().StartsWith(ScriptPrefix) - select item.ToString().Substring(4)).ToList(); + where item.ToString().StartsWith(ScriptPrefix) + select item.ToString().Substring(4)).ToList(); orderedScripts.Sort(); var finalScripts = orderedScripts.ToList(); foreach (var libraryId in orderedScripts) @@ -652,15 +660,32 @@ private static int GetFileOrder(JavaScriptLibrary jsl) switch (jsl.LibraryName) { case CommonJs.jQuery: - return (int)FileOrder.Js.jQuery; + return (int)Abstractions.ClientResources.FileOrder.Js.jQuery; case CommonJs.jQueryMigrate: - return (int)FileOrder.Js.jQueryMigrate; + return (int)Abstractions.ClientResources.FileOrder.Js.jQueryMigrate; case CommonJs.jQueryUI: - return (int)FileOrder.Js.jQueryUI; + return (int)Abstractions.ClientResources.FileOrder.Js.jQueryUI; case CommonJs.HoverIntent: - return (int)FileOrder.Js.HoverIntent; + return (int)Abstractions.ClientResources.FileOrder.Js.HoverIntent; default: - return jsl.PackageID + (int)FileOrder.Js.DefaultPriority; + return jsl.PackageID + (int)Abstractions.ClientResources.FileOrder.Js.DefaultPriority; + } + } + + private static IClientResourcesController GetClientResourcesController(HttpContextBase context) + { + var serviceProvider = GetCurrentServiceProvider(context); + return serviceProvider.GetRequiredService(); + } + + private static IServiceProvider GetCurrentServiceProvider(HttpContextBase context) + { + return GetScope(context.Items).ServiceProvider; + + // Copy of DotNetNuke.Common.Extensions.HttpContextDependencyInjectionExtensions.GetScope + static IServiceScope GetScope(IDictionary httpContextItems) + { + return httpContextItems[typeof(IServiceScope)] as IServiceScope; } } } diff --git a/DNN Platform/Website/Default.aspx.cs b/DNN Platform/Website/Default.aspx.cs index db76295a796..9f6bb5e7fdf 100644 --- a/DNN Platform/Website/Default.aspx.cs +++ b/DNN Platform/Website/Default.aspx.cs @@ -346,8 +346,6 @@ protected override void OnPreRender(EventArgs evt) { base.OnPreRender(evt); - JavaScript.Register(this.hostSettings, this.hostSettingsService, this.appStatus, this.eventLogger, this.PortalSettings, this.Page); - // Set the Head tags this.metaPanel.Visible = !UrlUtils.InPopUp(); if (!UrlUtils.InPopUp()) From 380f187ab8e9274cff06adc9eef29b05398ad0e1 Mon Sep 17 00:00:00 2001 From: Peter Donker Date: Tue, 16 Sep 2025 22:53:27 +0200 Subject: [PATCH 016/199] More fixes --- .../Models/ResourceBase.cs | 2 +- DNN Platform/DotNetNuke.Web.Client/Controls/DnnResources.cs | 5 ----- .../Library/Framework/JavaScriptLibraries/JavaScript.cs | 1 + 3 files changed, 2 insertions(+), 6 deletions(-) diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ResourceBase.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ResourceBase.cs index f7180b728ea..86559f7535e 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ResourceBase.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ResourceBase.cs @@ -129,7 +129,7 @@ internal string GetVersionedPath(int crmVersion, bool useCdn) { path = this.CdnUrl; } - return path; + return $"{path}?cdv={crmVersion}"; } public void Register() diff --git a/DNN Platform/DotNetNuke.Web.Client/Controls/DnnResources.cs b/DNN Platform/DotNetNuke.Web.Client/Controls/DnnResources.cs index 57fb57824bd..379a034e2fc 100644 --- a/DNN Platform/DotNetNuke.Web.Client/Controls/DnnResources.cs +++ b/DNN Platform/DotNetNuke.Web.Client/Controls/DnnResources.cs @@ -20,11 +20,6 @@ public DnnResources(IClientResourcesController clientResourcesController) public string Provider { get; set; } - protected override void OnInit(System.EventArgs e) - { - base.OnInit(e); - } - protected override void Render(HtmlTextWriter writer) { base.Render(writer); diff --git a/DNN Platform/Library/Framework/JavaScriptLibraries/JavaScript.cs b/DNN Platform/Library/Framework/JavaScriptLibraries/JavaScript.cs index f34963d5296..acb8a9959ba 100644 --- a/DNN Platform/Library/Framework/JavaScriptLibraries/JavaScript.cs +++ b/DNN Platform/Library/Framework/JavaScriptLibraries/JavaScript.cs @@ -444,6 +444,7 @@ private static void AddItemRequest(JavaScriptLibrary library, bool forceVersion) .FromSrc(GetScriptPath(null, null, library.LibraryName)) .SetNameAndVersion(library.LibraryName, library.Version.ToString(), forceVersion) .SetProvider(GetScriptLocation(library)) + .SetPriority(GetFileOrder(library)) .Register(); } From efc3c3e0b61edd2fdcda2bb1d3ba973b8ea86c05 Mon Sep 17 00:00:00 2001 From: Peter Donker Date: Wed, 17 Sep 2025 20:45:44 +0200 Subject: [PATCH 017/199] Fixing issues with certain scripts not being registered --- .../DotNetNuke.Web.Client/Controls/DnnCssInclude.cs | 2 +- .../DotNetNuke.Web.Client/Controls/DnnJsInclude.cs | 2 +- .../Framework/JavaScriptLibraries/JavaScript.cs | 10 ++++++++++ .../admin/Menus/ModuleActions/ModuleActions.ascx.cs | 1 + 4 files changed, 13 insertions(+), 2 deletions(-) diff --git a/DNN Platform/DotNetNuke.Web.Client/Controls/DnnCssInclude.cs b/DNN Platform/DotNetNuke.Web.Client/Controls/DnnCssInclude.cs index 13dc3c32503..8696c7c999f 100644 --- a/DNN Platform/DotNetNuke.Web.Client/Controls/DnnCssInclude.cs +++ b/DNN Platform/DotNetNuke.Web.Client/Controls/DnnCssInclude.cs @@ -26,7 +26,7 @@ public DnnCssInclude(IClientResourcesController clientResourcesController) /// protected override void OnLoad(System.EventArgs e) { - this.PathNameAlias = this.PathNameAlias.ToLowerInvariant(); + this.PathNameAlias = string.IsNullOrEmpty(this.PathNameAlias) ? string.Empty : this.PathNameAlias.ToLowerInvariant(); base.OnLoad(e); } diff --git a/DNN Platform/DotNetNuke.Web.Client/Controls/DnnJsInclude.cs b/DNN Platform/DotNetNuke.Web.Client/Controls/DnnJsInclude.cs index 8989e79489c..9e089b7ed2f 100644 --- a/DNN Platform/DotNetNuke.Web.Client/Controls/DnnJsInclude.cs +++ b/DNN Platform/DotNetNuke.Web.Client/Controls/DnnJsInclude.cs @@ -27,7 +27,7 @@ public DnnJsInclude(IClientResourcesController clientResourcesController) /// protected override void OnLoad(System.EventArgs e) { - this.PathNameAlias = this.PathNameAlias.ToLowerInvariant(); + this.PathNameAlias = string.IsNullOrEmpty(this.PathNameAlias) ? string.Empty : this.PathNameAlias.ToLowerInvariant(); base.OnLoad(e); } diff --git a/DNN Platform/Library/Framework/JavaScriptLibraries/JavaScript.cs b/DNN Platform/Library/Framework/JavaScriptLibraries/JavaScript.cs index acb8a9959ba..a3e4233def7 100644 --- a/DNN Platform/Library/Framework/JavaScriptLibraries/JavaScript.cs +++ b/DNN Platform/Library/Framework/JavaScriptLibraries/JavaScript.cs @@ -141,11 +141,21 @@ public static void RequestRegistration(IApplicationStatusInfo appStatus, IEventL portalSettings ??= Globals.GetCurrentServiceProvider().GetRequiredService().GetCurrentSettings(); // handle case where script has no javascript library + // also handle known dependencies switch (jsname) { case CommonJs.jQuery: RequestRegistration(appStatus, eventLogger, portalSettings, CommonJs.jQueryMigrate); break; + case CommonJs.KnockoutMapping: + RequestRegistration(appStatus, eventLogger, portalSettings, CommonJs.Knockout); + break; + case CommonJs.DnnPlugins: + RequestRegistration(appStatus, eventLogger, portalSettings, CommonJs.jQueryUI); + break; + case CommonJs.jQueryUI: + RequestRegistration(appStatus, eventLogger, portalSettings, CommonJs.jQuery); + break; } RequestRegistration(appStatus, eventLogger, portalSettings, jsname, null, SpecificVersion.Latest); diff --git a/DNN Platform/Website/admin/Menus/ModuleActions/ModuleActions.ascx.cs b/DNN Platform/Website/admin/Menus/ModuleActions/ModuleActions.ascx.cs index fab1f611667..482978f02c0 100644 --- a/DNN Platform/Website/admin/Menus/ModuleActions/ModuleActions.ascx.cs +++ b/DNN Platform/Website/admin/Menus/ModuleActions/ModuleActions.ascx.cs @@ -101,6 +101,7 @@ protected override void OnInit(EventArgs e) this.actionButton.Click += this.ActionButton_Click; this.javaScript.RequestRegistration(CommonJs.DnnPlugins); + this.javaScript.RequestRegistration(CommonJs.HoverIntent); ClientResourceManager.RegisterStyleSheet(this.Page, "~/admin/menus/ModuleActions/ModuleActions.css", FileOrder.Css.ModuleCss); ClientResourceManager.RegisterStyleSheet(this.Page, "~/Resources/Shared/stylesheets/dnnicons/css/dnnicon.min.css", FileOrder.Css.ModuleCss); From c0798f79f23ec1a45759c396d4ff443ad4e7a8c9 Mon Sep 17 00:00:00 2001 From: Peter Donker Date: Thu, 25 Sep 2025 16:12:44 +0200 Subject: [PATCH 018/199] Implement the inbuilt dependency system for js libraries --- .../JavaScriptLibraries/JavaScript.cs | 23 +++++++++++-------- .../Menus/ModuleActions/ModuleActions.ascx.cs | 1 - 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/DNN Platform/Library/Framework/JavaScriptLibraries/JavaScript.cs b/DNN Platform/Library/Framework/JavaScriptLibraries/JavaScript.cs index a3e4233def7..4515d64b534 100644 --- a/DNN Platform/Library/Framework/JavaScriptLibraries/JavaScript.cs +++ b/DNN Platform/Library/Framework/JavaScriptLibraries/JavaScript.cs @@ -141,21 +141,11 @@ public static void RequestRegistration(IApplicationStatusInfo appStatus, IEventL portalSettings ??= Globals.GetCurrentServiceProvider().GetRequiredService().GetCurrentSettings(); // handle case where script has no javascript library - // also handle known dependencies switch (jsname) { case CommonJs.jQuery: RequestRegistration(appStatus, eventLogger, portalSettings, CommonJs.jQueryMigrate); break; - case CommonJs.KnockoutMapping: - RequestRegistration(appStatus, eventLogger, portalSettings, CommonJs.Knockout); - break; - case CommonJs.DnnPlugins: - RequestRegistration(appStatus, eventLogger, portalSettings, CommonJs.jQueryUI); - break; - case CommonJs.jQueryUI: - RequestRegistration(appStatus, eventLogger, portalSettings, CommonJs.jQuery); - break; } RequestRegistration(appStatus, eventLogger, portalSettings, jsname, null, SpecificVersion.Latest); @@ -456,6 +446,19 @@ private static void AddItemRequest(JavaScriptLibrary library, bool forceVersion) .SetProvider(GetScriptLocation(library)) .SetPriority(GetFileOrder(library)) .Register(); + var dependencies = GetAllDependencies(Globals.GetCurrentServiceProvider().GetRequiredService(), library); + foreach (var dependency in dependencies) + { + if (HttpContextSource.Current.Items[ScriptPrefix + dependency.JavaScriptLibraryID] == null) + { + controller.CreateScript() + .FromSrc(GetScriptPath(null, null, dependency.LibraryName)) + .SetNameAndVersion(dependency.LibraryName, dependency.Version.ToString(), false) + .SetProvider(GetScriptLocation(dependency)) + .SetPriority(GetFileOrder(dependency)) + .Register(); + } + } } private static void AddPreInstallOrLegacyItemRequest(string jsl) diff --git a/DNN Platform/Website/admin/Menus/ModuleActions/ModuleActions.ascx.cs b/DNN Platform/Website/admin/Menus/ModuleActions/ModuleActions.ascx.cs index 482978f02c0..fab1f611667 100644 --- a/DNN Platform/Website/admin/Menus/ModuleActions/ModuleActions.ascx.cs +++ b/DNN Platform/Website/admin/Menus/ModuleActions/ModuleActions.ascx.cs @@ -101,7 +101,6 @@ protected override void OnInit(EventArgs e) this.actionButton.Click += this.ActionButton_Click; this.javaScript.RequestRegistration(CommonJs.DnnPlugins); - this.javaScript.RequestRegistration(CommonJs.HoverIntent); ClientResourceManager.RegisterStyleSheet(this.Page, "~/admin/menus/ModuleActions/ModuleActions.css", FileOrder.Css.ModuleCss); ClientResourceManager.RegisterStyleSheet(this.Page, "~/Resources/Shared/stylesheets/dnnicons/css/dnnicon.min.css", FileOrder.Css.ModuleCss); From 95c7211ab819bc315c694f52074bcc107d913bf6 Mon Sep 17 00:00:00 2001 From: Peter Donker Date: Thu, 25 Sep 2025 20:03:22 +0200 Subject: [PATCH 019/199] Resolve issue with relative paths and virtual root directories --- .../IClientResourcesController.cs | 3 +- .../ClientResources/IResource.cs | 3 +- .../ClientResourcesController.cs | 36 ++++++++----------- .../Models/FontResource.cs | 4 +-- .../Models/ResourceBase.cs | 8 +++-- .../Models/ScriptResource.cs | 4 +-- .../Models/StylesheetResource.cs | 4 +-- .../Controls/DnnResources.cs | 4 ++- DNN Platform/Website/Default.aspx.cs | 9 +++-- 9 files changed, 40 insertions(+), 35 deletions(-) diff --git a/DNN Platform/DotNetNuke.Abstractions/ClientResources/IClientResourcesController.cs b/DNN Platform/DotNetNuke.Abstractions/ClientResources/IClientResourcesController.cs index bb881c7cf89..61d15ed34d2 100644 --- a/DNN Platform/DotNetNuke.Abstractions/ClientResources/IClientResourcesController.cs +++ b/DNN Platform/DotNetNuke.Abstractions/ClientResources/IClientResourcesController.cs @@ -111,6 +111,7 @@ public interface IClientResourcesController /// /// The type of resource to render dependencies for. /// The provider to use for rendering dependencies. + /// The application path to use for resolving resource paths. /// A string containing the rendered dependencies. - string RenderDependencies(ResourceType resourceType, string provider); + string RenderDependencies(ResourceType resourceType, string provider, string applicationPath); } diff --git a/DNN Platform/DotNetNuke.Abstractions/ClientResources/IResource.cs b/DNN Platform/DotNetNuke.Abstractions/ClientResources/IResource.cs index c254c789a1e..6abdb233b9e 100644 --- a/DNN Platform/DotNetNuke.Abstractions/ClientResources/IResource.cs +++ b/DNN Platform/DotNetNuke.Abstractions/ClientResources/IResource.cs @@ -108,6 +108,7 @@ public interface IResource /// /// The current CRM version. /// Whether to use the CDN url if available. + /// The application path to use for resolving relative paths. /// Returns a HTML string. - string Render(int crmVersion, bool useCdn); + string Render(int crmVersion, bool useCdn, string applicationPath); } diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourcesController.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourcesController.cs index 41429197d24..0a3a126d810 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourcesController.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourcesController.cs @@ -24,6 +24,7 @@ public class ClientResourcesController : IClientResourcesController public ClientResourcesController(IHostSettings hostSettings) { this.hostSettings = hostSettings; + this.RegisterPathNameAlias("SharedScripts", "~/Resources/Shared/Scripts/"); } /// @@ -126,28 +127,28 @@ public void RemoveStylesheetByPath(string stylesheetPath, string pathNameAlias) } /// - public string RenderDependencies(ResourceType resourceType, string provider) + public string RenderDependencies(ResourceType resourceType, string provider, string applicationPath) { var sortedList = new List(); if (resourceType == ResourceType.Font || resourceType == ResourceType.All) { foreach (var link in this.Fonts.Where(s => s.Provider == provider && !this.FontsToExclude.Contains(s.Name.ToLowerInvariant())).OrderBy(l => l.Priority)) { - sortedList.Add(link.Render(hostSettings.CrmVersion, hostSettings.CdnEnabled)); + sortedList.Add(link.Render(hostSettings.CrmVersion, hostSettings.CdnEnabled, applicationPath)); } } if (resourceType == ResourceType.Stylesheet || resourceType == ResourceType.All) { foreach (var link in this.Stylesheets.Where(s => s.Provider == provider && !this.StylesheetsToExclude.Contains(s.Name.ToLowerInvariant())).OrderBy(l => l.Priority)) { - sortedList.Add(link.Render(hostSettings.CrmVersion, hostSettings.CdnEnabled)); + sortedList.Add(link.Render(hostSettings.CrmVersion, hostSettings.CdnEnabled, applicationPath)); } } if (resourceType == ResourceType.Script || resourceType == ResourceType.All) { foreach (var script in this.Scripts.Where(s => s.Provider == provider && !this.ScriptsToExclude.Contains(s.Name.ToLowerInvariant())).OrderBy(s => s.Priority)) { - sortedList.Add(script.Render(hostSettings.CrmVersion, hostSettings.CdnEnabled)); + sortedList.Add(script.Render(hostSettings.CrmVersion, hostSettings.CdnEnabled, applicationPath)); } } return string.Join("", sortedList); @@ -188,19 +189,6 @@ private List AddResource(List resources, T resource) where T : IResourc return resources; } - private string ResolvePathNameAlias(string pathNameAlias) - { - if (string.IsNullOrEmpty(pathNameAlias)) - { - return string.Empty; - } - if (this.PathNameAliases.TryGetValue(pathNameAlias.ToLowerInvariant(), out var alias)) - { - return alias; - } - return string.Empty; - } - private string ResolvePath(string filePath, string pathNameAlias) { if (string.IsNullOrEmpty(filePath)) @@ -212,10 +200,16 @@ private string ResolvePath(string filePath, string pathNameAlias) // Path is already fully qualified return filePath; } - // Path is a relative path to the application root and pathNameAlias - filePath = filePath.Replace("\\", "/").TrimStart('~', '/'); - var root = this.ResolvePathNameAlias(pathNameAlias); - return $"{root}/{filePath}"; + // Path is either a relative path including the application path or a path starting with a tilde or a path relative to the path name alias + filePath = filePath.Replace("\\", "/"); + if (!string.IsNullOrEmpty(pathNameAlias)) + { + if (this.PathNameAliases.TryGetValue(pathNameAlias.ToLowerInvariant(), out var alias)) + { + return $"{alias}/{filePath.TrimStart('/')}"; + } + } + return filePath; } } } diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/FontResource.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/FontResource.cs index 579793c04d1..92b255b2c28 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/FontResource.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/FontResource.cs @@ -15,10 +15,10 @@ public void Register() this._clientResourcesController.AddFont(this); } - public string Render(int crmVersion, bool useCdn) + public string Render(int crmVersion, bool useCdn, string applicationPath) { var htmlString = "Initialize the Scrolltop html control which controls the open / closed nature of each module. @@ -421,6 +422,8 @@ private void InitializePage() // Configure the ActiveTab with Skin/Container information this.portalSettingsController.ConfigureActiveTab(this.PortalSettings); + this.clientResourcesController.RegisterPathNameAlias("SkinPath", this.CurrentSkinPath); + // redirect to a specific tab based on name if (!string.IsNullOrEmpty(this.Request.QueryString["tabname"])) { From 117347f45cda007201ea654858640302cc9825ed Mon Sep 17 00:00:00 2001 From: Peter Donker Date: Thu, 25 Sep 2025 20:14:41 +0200 Subject: [PATCH 020/199] And now fix for sites without virtual path --- .../Models/ResourceBase.cs | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ResourceBase.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ResourceBase.cs index c3f7fa48276..1183f2d777b 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ResourceBase.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ResourceBase.cs @@ -125,9 +125,16 @@ protected string RenderAttributes() internal string GetVersionedPath(int crmVersion, bool useCdn, string applicationPath) { var path = this.ResolvedPath; - if (path.StartsWith("~") && !string.IsNullOrEmpty(applicationPath)) + if (path.StartsWith("~")) { - path = path.Replace("~", applicationPath); + if (string.IsNullOrEmpty(applicationPath)) + { + path = path.TrimStart('~'); + } + else + { + path = path.Replace("~", applicationPath); + } } if (useCdn && !string.IsNullOrEmpty(this.CdnUrl)) { From 36f6d76c22859f30eb986c0907d3f8453089accf Mon Sep 17 00:00:00 2001 From: Peter Donker Date: Thu, 25 Sep 2025 22:16:36 +0200 Subject: [PATCH 021/199] Reintroduce file exists filter for stylesheets in the old ClientResourceManager --- .../ClientResourceManager.cs | 69 +++++++++++++++++++ 1 file changed, 69 insertions(+) diff --git a/DNN Platform/DotNetNuke.Web.Client/ClientResourceManager.cs b/DNN Platform/DotNetNuke.Web.Client/ClientResourceManager.cs index e389f90e3f2..a0e7737f3fe 100644 --- a/DNN Platform/DotNetNuke.Web.Client/ClientResourceManager.cs +++ b/DNN Platform/DotNetNuke.Web.Client/ClientResourceManager.cs @@ -8,6 +8,7 @@ namespace DotNetNuke.Web.Client.ClientResourceManagement using System; using System.Collections; using System.Collections.Generic; + using System.IO; using System.Threading; using System.Web; using System.Web.Hosting; @@ -411,6 +412,30 @@ public static void RegisterStyleSheet(Page page, string filePath, int priority, /// A dictionary of HTML attributes to use for the link tag. The key being the attribute name and the value its value. public static void RegisterStyleSheet(Page page, string filePath, int priority, string provider, string name, string version, IDictionary htmlAttributes) { + var fileExists = false; + + // Some "legacy URLs" could be using their own query string versioning scheme (and we've forced them to use the new API through re-routing PageBase.RegisterStyleSheet + // Ensure that physical CSS files with query strings have their query strings removed + // Ignore absolute urls, they will not exist locally + if (!Uri.TryCreate(filePath, UriKind.Absolute, out _) && filePath.Contains(".css?")) + { + var filePathSansQueryString = RemoveQueryString(filePath); + if (File.Exists(page.Server.MapPath(filePathSansQueryString))) + { + fileExists = true; + filePath = filePathSansQueryString; + } + } + else if (filePath.Contains("WebResource.axd")) + { + fileExists = true; + } + + if (!fileExists && !FileExists(page, filePath)) + { + return; + } + var controller = GetClientResourcesController(page); var stylesheet = controller.CreateStylesheet() .FromSrc(filePath) @@ -464,6 +489,50 @@ public static void EnableAsyncPostBackHandler() } } + private static bool FileExists(Page page, string filePath) + { + // remove query string for the file exists check, won't impact the absoluteness, so just do it either way. + filePath = RemoveQueryString(filePath); + var cacheKey = filePath.ToLowerInvariant(); + + // cache css file paths + if (!FileExistsCache.ContainsKey(cacheKey)) + { + // apply lock after IF, locking is more expensive than worst case scenario (check disk twice) + LockFileExistsCache.EnterWriteLock(); + try + { + FileExistsCache[cacheKey] = IsAbsoluteUrl(filePath) || File.Exists(page.Server.MapPath(filePath)); + } + finally + { + LockFileExistsCache.ExitWriteLock(); + } + } + + // return if file exists from cache + LockFileExistsCache.EnterReadLock(); + try + { + return FileExistsCache[cacheKey]; + } + finally + { + LockFileExistsCache.ExitReadLock(); + } + } + + private static bool IsAbsoluteUrl(string url) + { + return Uri.TryCreate(url, UriKind.Absolute, out _); + } + + private static string RemoveQueryString(string filePath) + { + var queryStringPosition = filePath.IndexOf("?", StringComparison.Ordinal); + return queryStringPosition != -1 ? filePath.Substring(0, queryStringPosition) : filePath; + } + private static IClientResourcesController GetClientResourcesController(Page page) { var serviceProvider = GetCurrentServiceProvider(page.Request.RequestContext.HttpContext); From 52394568f44a0610d26510323fbfc7c17c41cd22 Mon Sep 17 00:00:00 2001 From: Peter Donker Date: Thu, 25 Sep 2025 22:17:19 +0200 Subject: [PATCH 022/199] Further tuning of path resolution --- .../Models/ResourceBase.cs | 21 +++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ResourceBase.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ResourceBase.cs index 1183f2d777b..7080fc7e803 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ResourceBase.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ResourceBase.cs @@ -125,22 +125,31 @@ protected string RenderAttributes() internal string GetVersionedPath(int crmVersion, bool useCdn, string applicationPath) { var path = this.ResolvedPath; - if (path.StartsWith("~")) + if (useCdn && !string.IsNullOrEmpty(this.CdnUrl)) + { + return this.CdnUrl; + } + else if (path.ToLowerInvariant().StartsWith("http")) + { + return path; + } + else if (path.StartsWith("~")) { if (string.IsNullOrEmpty(applicationPath)) { - path = path.TrimStart('~'); + return path.TrimStart('~'); } else { - path = path.Replace("~", applicationPath); + return path.Replace("~", applicationPath); } } - if (useCdn && !string.IsNullOrEmpty(this.CdnUrl)) + else if (path.StartsWith("/")) { - path = this.CdnUrl; + return $"{path}?cdv={crmVersion}"; } - return $"{path}?cdv={crmVersion}"; + + return $"{applicationPath}/{path}?cdv={crmVersion}"; } public void Register() From f84311021f57fe07bc0291e4430ee369d581fb2a Mon Sep 17 00:00:00 2001 From: Peter Donker Date: Thu, 25 Sep 2025 22:17:40 +0200 Subject: [PATCH 023/199] Build to common bin path --- .../DotNetNuke.Web.Client.ResourceManager.csproj | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/DotNetNuke.Web.Client.ResourceManager.csproj b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/DotNetNuke.Web.Client.ResourceManager.csproj index cf2c8397386..966cc6e33c3 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/DotNetNuke.Web.Client.ResourceManager.csproj +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/DotNetNuke.Web.Client.ResourceManager.csproj @@ -8,4 +8,9 @@ + + + + + From 65693ce8419e7e2676541785c92eba3840eb4262 Mon Sep 17 00:00:00 2001 From: Peter Donker Date: Thu, 25 Sep 2025 22:50:03 +0200 Subject: [PATCH 024/199] Doing the StyleCop thing --- .../ClientResourcesController.cs | 46 +++- ...tNetNuke.Web.Client.ResourceManager.csproj | 30 +++ .../GenericResourceExtensions.cs | 224 +++++++++++++++--- .../Models/FontResource.cs | 27 ++- .../Models/ResourceBase.cs | 171 +++++++++---- .../Models/ScriptResource.cs | 41 +++- .../Models/StylesheetResource.cs | 29 ++- .../ScriptResourceExtensions.cs | 57 ++++- .../Startup.cs | 2 + .../StylesheetResourceExtensions.cs | 23 +- 10 files changed, 529 insertions(+), 121 deletions(-) diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourcesController.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourcesController.cs index 0a3a126d810..299ea7bbd3d 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourcesController.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourcesController.cs @@ -1,10 +1,12 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information + namespace DotNetNuke.Web.Client.ResourceManager { using System.Collections.Generic; using System.Linq; + using DotNetNuke.Abstractions.Application; using DotNetNuke.Abstractions.ClientResources; @@ -12,20 +14,30 @@ namespace DotNetNuke.Web.Client.ResourceManager public class ClientResourcesController : IClientResourcesController { private readonly IHostSettings hostSettings; + + /// + /// Initializes a new instance of the class. + /// + /// The host settings. + public ClientResourcesController(IHostSettings hostSettings) + { + this.hostSettings = hostSettings; + this.RegisterPathNameAlias("SharedScripts", "~/Resources/Shared/Scripts/"); + } + private List Fonts { get; set; } = new List(); + private List Scripts { get; set; } = new List(); + private List Stylesheets { get; set; } = new List(); + private Dictionary PathNameAliases { get; set; } = new Dictionary(); + private List FontsToExclude { get; set; } = new List(); + private List ScriptsToExclude { get; set; } = new List(); - private List StylesheetsToExclude { get; set; } = new List(); - /// Initializes a new instance of the class. - public ClientResourcesController(IHostSettings hostSettings) - { - this.hostSettings = hostSettings; - this.RegisterPathNameAlias("SharedScripts", "~/Resources/Shared/Scripts/"); - } + private List StylesheetsToExclude { get; set; } = new List(); /// public void AddFont(IFontResource font) @@ -134,28 +146,31 @@ public string RenderDependencies(ResourceType resourceType, string provider, str { foreach (var link in this.Fonts.Where(s => s.Provider == provider && !this.FontsToExclude.Contains(s.Name.ToLowerInvariant())).OrderBy(l => l.Priority)) { - sortedList.Add(link.Render(hostSettings.CrmVersion, hostSettings.CdnEnabled, applicationPath)); + sortedList.Add(link.Render(this.hostSettings.CrmVersion, this.hostSettings.CdnEnabled, applicationPath)); } } + if (resourceType == ResourceType.Stylesheet || resourceType == ResourceType.All) { foreach (var link in this.Stylesheets.Where(s => s.Provider == provider && !this.StylesheetsToExclude.Contains(s.Name.ToLowerInvariant())).OrderBy(l => l.Priority)) { - sortedList.Add(link.Render(hostSettings.CrmVersion, hostSettings.CdnEnabled, applicationPath)); + sortedList.Add(link.Render(this.hostSettings.CrmVersion, this.hostSettings.CdnEnabled, applicationPath)); } } + if (resourceType == ResourceType.Script || resourceType == ResourceType.All) { foreach (var script in this.Scripts.Where(s => s.Provider == provider && !this.ScriptsToExclude.Contains(s.Name.ToLowerInvariant())).OrderBy(s => s.Priority)) { - sortedList.Add(script.Render(hostSettings.CrmVersion, hostSettings.CdnEnabled, applicationPath)); + sortedList.Add(script.Render(this.hostSettings.CrmVersion, this.hostSettings.CdnEnabled, applicationPath)); } } - return string.Join("", sortedList); - } + return string.Join(string.Empty, sortedList); + } - private List AddResource(List resources, T resource) where T : IResource + private List AddResource(List resources, T resource) + where T : IResource { resource.ResolvedPath = this.ResolvePath(resource.FilePath, resource.PathNameAlias); resource.Key = resource.ResolvedPath.ToLowerInvariant(); @@ -178,6 +193,7 @@ private List AddResource(List resources, T resource) where T : IResourc if (!string.IsNullOrEmpty(resource.Version)) { resources.RemoveAll(l => l.Name.ToLowerInvariant() == resource.Name.ToLowerInvariant() && string.Compare(l.Version, resource.Version, System.StringComparison.InvariantCultureIgnoreCase) < 0); + // If we have an existing link with the same name and a higher version, we do not add this link if (resources.Exists(l => l.Name.ToLowerInvariant() == resource.Name.ToLowerInvariant() && string.Compare(l.Version, resource.Version, System.StringComparison.InvariantCultureIgnoreCase) >= 0)) { @@ -185,6 +201,7 @@ private List AddResource(List resources, T resource) where T : IResourc } } } + resources.Add(resource); return resources; } @@ -195,11 +212,13 @@ private string ResolvePath(string filePath, string pathNameAlias) { return filePath; } + if (filePath.ToLowerInvariant().StartsWith("http")) { // Path is already fully qualified return filePath; } + // Path is either a relative path including the application path or a path starting with a tilde or a path relative to the path name alias filePath = filePath.Replace("\\", "/"); if (!string.IsNullOrEmpty(pathNameAlias)) @@ -209,6 +228,7 @@ private string ResolvePath(string filePath, string pathNameAlias) return $"{alias}/{filePath.TrimStart('/')}"; } } + return filePath; } } diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/DotNetNuke.Web.Client.ResourceManager.csproj b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/DotNetNuke.Web.Client.ResourceManager.csproj index 966cc6e33c3..8af06945c04 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/DotNetNuke.Web.Client.ResourceManager.csproj +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/DotNetNuke.Web.Client.ResourceManager.csproj @@ -2,12 +2,42 @@ netstandard2.0 + false + true + $(MSBuildProjectDirectory)\..\.. + bin/$(Configuration)/$(TargetFramework)/DotNetNuke.Web.Client.ResourceManager.xml + + true + latest + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + SolutionInfo.cs + + + + + + + diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/GenericResourceExtensions.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/GenericResourceExtensions.cs index 6130d9ddc29..cece7fed384 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/GenericResourceExtensions.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/GenericResourceExtensions.cs @@ -1,100 +1,266 @@ -using System; -using DotNetNuke.Abstractions.ClientResources; +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information namespace DotNetNuke.Web.Client.ResourceManager { + using System; + + using DotNetNuke.Abstractions.ClientResources; + + /// + /// Provides extension methods for to set various resource properties in a fluent manner. + /// public static class GenericResourceExtensions { - public static T FromSrc(this T input, string scriptSrc) where T : IResource + /// + /// Sets the source URL of the resource. + /// + /// The resource to set the source URL for. + /// The source URL to set. + /// The resource with the source URL set. + /// The type of resource, which must implement . + public static T FromSrc(this T input, string scriptSrc) + where T : IResource { - if (input == null) throw new ArgumentNullException(nameof(input)); + if (input == null) + { + throw new ArgumentNullException(nameof(input)); + } + input.FilePath = scriptSrc; return input; } - public static T FromSrc(this T input, string scriptSrc, string pathNameAlias) where T : IResource + /// + /// Sets the source URL and path alias of the resource. + /// + /// The resource to set the source URL and path alias for. + /// The source URL to set. + /// The path alias to set. + /// The resource with the source URL and path alias set. + /// The type of resource, which must implement . + public static T FromSrc(this T input, string scriptSrc, string pathNameAlias) + where T : IResource { - if (input == null) throw new ArgumentNullException(nameof(input)); + if (input == null) + { + throw new ArgumentNullException(nameof(input)); + } + input.FilePath = scriptSrc; input.PathNameAlias = pathNameAlias; return input; } - public static T SetPriority(this T input, int priority) where T : IResource + /// + /// Sets the priority of the resource. + /// + /// The resource to set the priority for. + /// The priority value to set. + /// The resource with the priority set. + /// The type of resource, which must implement . + public static T SetPriority(this T input, int priority) + where T : IResource { - if (input == null) throw new ArgumentNullException(nameof(input)); + if (input == null) + { + throw new ArgumentNullException(nameof(input)); + } + input.Priority = priority; return input; } - public static T SetNameAndVersion(this T input, string name, string version, bool forceVersion) where T : IResource + /// + /// Sets the name, version, and force version flag of the resource. + /// + /// The resource to set the name and version for. + /// The name to set. + /// The version to set. + /// Whether to force the version. + /// The resource with the name and version set. + /// The type of resource, which must implement . + public static T SetNameAndVersion(this T input, string name, string version, bool forceVersion) + where T : IResource { - if (input == null) throw new ArgumentNullException(nameof(input)); + if (input == null) + { + throw new ArgumentNullException(nameof(input)); + } + input.Name = name; input.Version = version; input.ForceVersion = forceVersion; return input; } - public static T SetCdnUrl(this T input, string cdnUrl) where T : IResource + /// + /// Sets the CDN URL of the resource. + /// + /// The resource to set the CDN URL for. + /// The CDN URL to set. + /// The resource with the CDN URL set. + /// The type of resource, which must implement . + public static T SetCdnUrl(this T input, string cdnUrl) + where T : IResource { - if (input == null) throw new ArgumentNullException(nameof(input)); + if (input == null) + { + throw new ArgumentNullException(nameof(input)); + } + input.CdnUrl = cdnUrl; return input; } - public static T SetProvider(this T input, string provider) where T : IResource + /// + /// Sets the provider of the resource. + /// + /// The resource to set the provider for. + /// The provider to set. + /// The resource with the provider set. + /// The type of resource, which must implement . + public static T SetProvider(this T input, string provider) + where T : IResource { - if (input == null) throw new ArgumentNullException(nameof(input)); + if (input == null) + { + throw new ArgumentNullException(nameof(input)); + } + input.Provider = provider; return input; } - public static T SetPreload(this T input) where T : IResource + /// + /// Marks the resource for preload. + /// + /// The resource to mark for preload. + /// The resource marked for preload. + /// The type of resource, which must implement . + public static T SetPreload(this T input) + where T : IResource { - if (input == null) throw new ArgumentNullException(nameof(input)); + if (input == null) + { + throw new ArgumentNullException(nameof(input)); + } + input.Preload = true; return input; } - public static T SetBlocking(this T input) where T : IResource + /// + /// Marks the resource as blocking. + /// + /// The resource to mark as blocking. + /// The resource marked as blocking. + /// The type of resource, which must implement . + public static T SetBlocking(this T input) + where T : IResource { - if (input == null) throw new ArgumentNullException(nameof(input)); + if (input == null) + { + throw new ArgumentNullException(nameof(input)); + } + input.Blocking = true; return input; } - public static T SetIntegrity(this T input, string hash) where T : IResource + /// + /// Sets the integrity hash of the resource. + /// + /// The resource to set the integrity hash for. + /// The integrity hash to set. + /// The resource with the integrity hash set. + /// The type of resource, which must implement . + public static T SetIntegrity(this T input, string hash) + where T : IResource { - if (input == null) throw new ArgumentNullException(nameof(input)); + if (input == null) + { + throw new ArgumentNullException(nameof(input)); + } + input.Integrity = hash; return input; } - public static T SetCrossOrigin(this T input, CrossOrigin crossOrigin) where T : IResource + /// + /// Sets the Cross-Origin attribute of the resource. + /// + /// The resource to set the Cross-Origin attribute for. + /// The Cross-Origin value to set. + /// The resource with the Cross-Origin attribute set. + /// The type of resource, which must implement . + public static T SetCrossOrigin(this T input, CrossOrigin crossOrigin) + where T : IResource { - if (input == null) throw new ArgumentNullException(nameof(input)); + if (input == null) + { + throw new ArgumentNullException(nameof(input)); + } + input.CrossOrigin = crossOrigin; return input; } - public static T SetFetchPriority(this T input, FetchPriority fetchPriority) where T : IResource + /// + /// Sets the fetch priority of the resource. + /// + /// The resource to set the fetch priority for. + /// The fetch priority to set. + /// The resource with the fetch priority set. + /// The type of resource, which must implement . + public static T SetFetchPriority(this T input, FetchPriority fetchPriority) + where T : IResource { - if (input == null) throw new ArgumentNullException(nameof(input)); + if (input == null) + { + throw new ArgumentNullException(nameof(input)); + } + input.FetchPriority = fetchPriority; return input; } - public static T SetReferrerPolicy(this T input, ReferrerPolicy referrerPolicy) where T : IResource + /// + /// Sets the referrer policy of the resource. + /// + /// The resource to set the referrer policy for. + /// The referrer policy to set. + /// The resource with the referrer policy set. + /// The type of resource, which must implement . + public static T SetReferrerPolicy(this T input, ReferrerPolicy referrerPolicy) + where T : IResource { - if (input == null) throw new ArgumentNullException(nameof(input)); + if (input == null) + { + throw new ArgumentNullException(nameof(input)); + } + input.ReferrerPolicy = referrerPolicy; return input; } - public static T AddAttribute(this T input, string attributeName, string attributeValue) where T : IResource + /// + /// Adds or updates an attribute of the resource. + /// + /// The resource to add or update the attribute for. + /// The name of the attribute to add or update. + /// The value of the attribute to add or update. + /// The resource with the attribute added or updated. + /// The type of resource, which must implement . + public static T AddAttribute(this T input, string attributeName, string attributeValue) + where T : IResource { - if (input == null) throw new ArgumentNullException(nameof(input)); + if (input == null) + { + throw new ArgumentNullException(nameof(input)); + } + if (!string.IsNullOrEmpty(attributeName) && !string.IsNullOrEmpty(attributeValue)) { if (input.Attributes.ContainsKey(attributeName)) @@ -106,8 +272,8 @@ public static T AddAttribute(this T input, string attributeName, string attri input.Attributes.Add(attributeName, attributeValue); } } + return input; } - } } diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/FontResource.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/FontResource.cs index 92b255b2c28..e2895abedd7 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/FontResource.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/FontResource.cs @@ -1,21 +1,35 @@ -using DotNetNuke.Abstractions.ClientResources; +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information namespace DotNetNuke.Web.Client.ResourceManager.Models { + using DotNetNuke.Abstractions.ClientResources; + + /// + /// Represents a font resource that can be registered and rendered for client use. + /// public class FontResource : ResourceBase, IFontResource { - private readonly IClientResourcesController _clientResourcesController; + private readonly IClientResourcesController clientResourcesController; + + /// + /// Initializes a new instance of the class. + /// + /// The client resources controller used to manage font resources. public FontResource(IClientResourcesController clientResourcesController) { - this._clientResourcesController = clientResourcesController; + this.clientResourcesController = clientResourcesController; } - public void Register() + /// + public new void Register() { - this._clientResourcesController.AddFont(this); + this.clientResourcesController.AddFont(this); } - public string Render(int crmVersion, bool useCdn, string applicationPath) + /// + public new string Render(int crmVersion, bool useCdn, string applicationPath) { var htmlString = " + /// Base class for all resource types. + /// public abstract class ResourceBase : IResource { private string name; + /// public string FilePath { get; set; } + + /// public string PathNameAlias { get; set; } + + /// public string ResolvedPath { get; set; } + + /// public string Key { get; set; } + + /// public string CdnUrl { get; set; } + + /// public int Priority { get; set; } + + /// public string Provider { get; set; } = ClientResourceProviders.DnnPageHeaderProvider; + + /// public string Name { get { - return string.IsNullOrEmpty(name) ? this.FilePath : name; + return string.IsNullOrEmpty(this.name) ? this.FilePath : this.name; } - set => name = value; + set => this.name = value; } + + /// public string Version { get; set; } + + /// public bool ForceVersion { get; set; } + + /// public CrossOrigin CrossOrigin { get; set; } = CrossOrigin.None; + + /// public FetchPriority FetchPriority { get; set; } = FetchPriority.Auto; + + /// public ReferrerPolicy ReferrerPolicy { get; set; } = ReferrerPolicy.None; + + /// public bool Preload { get; set; } = false; - /// - /// Contains inline metadata — a base64-encoded cryptographic hash of the resource (file) you're telling the browser to fetch. - /// The browser can use this to verify that the fetched resource has been delivered without unexpected manipulation. - /// - public string Integrity { get; set; } = ""; + /// + public string Integrity { get; set; } = string.Empty; + /// public bool Blocking { get; set; } = false; + /// public Dictionary Attributes { get; set; } = new Dictionary(); + /// + public void Register() + { + throw new System.NotImplementedException(); + } + + /// + public string Render(int crmVersion, bool useCdn, string applicationPath) + { + throw new System.NotImplementedException(); + } + + /// + /// Gets the versioned path. + /// + /// The CRM version. + /// Whether to use the CDN url if available. + /// The application path to use for resolving relative paths. + /// The versioned path. + internal string GetVersionedPath(int crmVersion, bool useCdn, string applicationPath) + { + var path = this.ResolvedPath; + if (useCdn && !string.IsNullOrEmpty(this.CdnUrl)) + { + return this.CdnUrl; + } + else if (path.ToLowerInvariant().StartsWith("http")) + { + return path; + } + else if (path.StartsWith("~")) + { + if (string.IsNullOrEmpty(applicationPath)) + { + return path.TrimStart('~'); + } + else + { + return path.Replace("~", applicationPath); + } + } + else if (path.StartsWith("/")) + { + return $"{path}?cdv={crmVersion}"; + } + + return $"{applicationPath}/{path}?cdv={crmVersion}"; + } + + /// + /// Renders the blocking attribute. + /// + /// The blocking attribute. protected string RenderBlocking() { if (this.Blocking) { return " blocking=\"render\""; } + return string.Empty; } + /// + /// Renders the cross origin attribute. + /// + /// The cross origin attribute. protected string RenderCrossOriginAttribute() { if (this.CrossOrigin != CrossOrigin.None) @@ -57,11 +149,17 @@ protected string RenderCrossOriginAttribute() { crossOrigin = "use-credentials"; } + return $" crossorigin=\"{crossOrigin}\""; } + return string.Empty; } + /// + /// Renders the fetch priority attribute. + /// + /// The fetch priority attribute. protected string RenderFetchPriority() { if (this.FetchPriority != FetchPriority.Auto) @@ -71,20 +169,31 @@ protected string RenderFetchPriority() { fetchPriority = "high"; } + return $" fetchpriority=\"{fetchPriority}\""; } + return string.Empty; } + /// + /// Renders the integrity attribute. + /// + /// The integrity attribute. protected string RenderIntegrity() { if (!string.IsNullOrEmpty(this.Integrity)) { return $" integrity=\"{this.Integrity}\""; } + return string.Empty; } + /// + /// Renders the referrer policy attribute. + /// + /// The referrer policy attribute. protected string RenderReferrerPolicy() { if (this.ReferrerPolicy != ReferrerPolicy.None) @@ -109,9 +218,14 @@ protected string RenderReferrerPolicy() return " referrerpolicy=\"unsafe-url\""; } } + return string.Empty; } + /// + /// Renders the attributes. + /// + /// The attributes. protected string RenderAttributes() { var htmlString = string.Empty; @@ -119,47 +233,8 @@ protected string RenderAttributes() { htmlString += $" {attribute.Key}=\"{attribute.Value}\""; } - return htmlString; - } - internal string GetVersionedPath(int crmVersion, bool useCdn, string applicationPath) - { - var path = this.ResolvedPath; - if (useCdn && !string.IsNullOrEmpty(this.CdnUrl)) - { - return this.CdnUrl; - } - else if (path.ToLowerInvariant().StartsWith("http")) - { - return path; - } - else if (path.StartsWith("~")) - { - if (string.IsNullOrEmpty(applicationPath)) - { - return path.TrimStart('~'); - } - else - { - return path.Replace("~", applicationPath); - } - } - else if (path.StartsWith("/")) - { - return $"{path}?cdv={crmVersion}"; - } - - return $"{applicationPath}/{path}?cdv={crmVersion}"; - } - - public void Register() - { - throw new System.NotImplementedException(); - } - - public string Render(int crmVersion, bool useCdn, string applicationPath) - { - throw new System.NotImplementedException(); + return htmlString; } } } diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ScriptResource.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ScriptResource.cs index 8c432d8e9b4..e9cf4b2f9b5 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ScriptResource.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ScriptResource.cs @@ -1,29 +1,47 @@ -using DotNetNuke.Abstractions.ClientResources; +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information namespace DotNetNuke.Web.Client.ResourceManager.Models { + using DotNetNuke.Abstractions.ClientResources; + + /// + /// Represents a script resource that can be registered and rendered in the client resources system. + /// public class ScriptResource : ResourceBase, IScriptResource { - private readonly IClientResourcesController _clientResourcesController; + private readonly IClientResourcesController clientResourcesController; + + /// + /// Initializes a new instance of the class. + /// + /// The client resources controller. + public ScriptResource(IClientResourcesController clientResourcesController) + { + this.clientResourcesController = clientResourcesController; + } + /// public bool Async { get; set; } = false; + /// public bool Defer { get; set; } = false; + /// public bool NoModule { get; set; } = false; - public string Type { get; set; } = ""; - public ScriptResource(IClientResourcesController clientResourcesController) - { - this._clientResourcesController = clientResourcesController; - } + /// + public string Type { get; set; } = string.Empty; - public void Register() + /// + public new void Register() { - this._clientResourcesController.AddScript(this); + this.clientResourcesController.AddScript(this); } - public string Render(int crmVersion, bool useCdn, string applicationPath) + /// + public new string Render(int crmVersion, bool useCdn, string applicationPath) { var htmlString = " + /// Represents a stylesheet resource that can be registered and rendered in the client resources controller. + /// public class StylesheetResource : ResourceBase, IStylesheetResource { - private readonly IClientResourcesController _clientResourcesController; + private readonly IClientResourcesController clientResourcesController; + + /// + /// Initializes a new instance of the class. + /// + /// The client resources controller used to register the stylesheet. public StylesheetResource(IClientResourcesController clientResourcesController) { - this._clientResourcesController = clientResourcesController; + this.clientResourcesController = clientResourcesController; } + /// public bool Disabled { get; set; } = false; - public void Register() + /// + public new void Register() { - this._clientResourcesController.AddStylesheet(this); + this.clientResourcesController.AddStylesheet(this); } - public string Render(int crmVersion, bool useCdn, string applicationPath) + /// + public new string Render(int crmVersion, bool useCdn, string applicationPath) { var htmlString = " + /// Provides extension methods for to set various script resource properties in a fluent manner. + /// public static class ScriptResourceExtensions { + /// + /// Sets the async attribute of the script resource. + /// + /// The script resource to set the async attribute for. + /// The script resource with the async attribute set. public static IScriptResource SetAsync(this IScriptResource input) { - if (input == null) throw new ArgumentNullException(nameof(input)); + if (input == null) + { + throw new ArgumentNullException(nameof(input)); + } + input.Async = true; return input; } + /// + /// Sets the defer attribute of the script resource. + /// + /// The script resource to set the defer attribute for. + /// The script resource with the defer attribute set. public static IScriptResource SetDefer(this IScriptResource input) { - if (input == null) throw new ArgumentNullException(nameof(input)); + if (input == null) + { + throw new ArgumentNullException(nameof(input)); + } + input.Defer = true; return input; } + /// + /// Sets the no module attribute of the script resource. + /// + /// The script resource to set the no module attribute for. + /// The script resource with the no module attribute set. public static IScriptResource SetNoModule(this IScriptResource input) { - if (input == null) throw new ArgumentNullException(nameof(input)); + if (input == null) + { + throw new ArgumentNullException(nameof(input)); + } + input.NoModule = true; return input; } + /// + /// Sets the type attribute of the script resource. + /// + /// The script resource to set the type attribute for. + /// The type attribute to set. + /// The script resource with the type attribute set. public static IScriptResource SetType(this IScriptResource input, string type) { - if (input == null) throw new ArgumentNullException(nameof(input)); + if (input == null) + { + throw new ArgumentNullException(nameof(input)); + } + input.Type = type; return input; } diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Startup.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Startup.cs index c2dd9fb26ef..ef93eba5913 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Startup.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Startup.cs @@ -1,6 +1,7 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information + namespace DotNetNuke.Web.Client.ResourceManager { using DotNetNuke.Abstractions.ClientResources; @@ -10,6 +11,7 @@ namespace DotNetNuke.Web.Client.ResourceManager /// public class Startup : IDnnStartup { + /// public void ConfigureServices(IServiceCollection services) { services.AddScoped(); diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/StylesheetResourceExtensions.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/StylesheetResourceExtensions.cs index 3a344a2602d..5b78ac76cb5 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/StylesheetResourceExtensions.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/StylesheetResourceExtensions.cs @@ -1,13 +1,30 @@ -using System; -using DotNetNuke.Abstractions.ClientResources; +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information namespace DotNetNuke.Web.Client.ResourceManager { + using System; + + using DotNetNuke.Abstractions.ClientResources; + + /// + /// Provides extension methods for to set various stylesheet resource properties in a fluent manner. + /// public static class StylesheetResourceExtensions { + /// + /// Sets the disabled attribute of the stylesheet resource. + /// + /// The stylesheet resource to set the disabled attribute for. + /// The stylesheet resource with the disabled attribute set. public static IStylesheetResource SetDisabled(this IStylesheetResource input) { - if (input == null) throw new ArgumentNullException(nameof(input)); + if (input == null) + { + throw new ArgumentNullException(nameof(input)); + } + input.Disabled = true; return input; } From 018dbeb690b2a5a032b60c7aea42929dbe355b72 Mon Sep 17 00:00:00 2001 From: Peter Donker Date: Fri, 26 Sep 2025 17:45:27 +0200 Subject: [PATCH 025/199] Bring back old file processing providers for the old CDF because they are in the web.config of existing sites. --- .../DotNetNuke.Web.Client.csproj | 8 + .../Providers/DnnBodyProvider.cs | 161 ++++++++++++++++++ .../DnnCompositeFileProcessingProvider.cs | 95 +++++++++++ .../Providers/DnnFileRegistrationProvider.cs | 29 ++++ .../Providers/DnnFormBottomProvider.cs | 138 +++++++++++++++ .../Providers/DnnPageHeaderProvider.cs | 148 ++++++++++++++++ 6 files changed, 579 insertions(+) create mode 100644 DNN Platform/DotNetNuke.Web.Client/Providers/DnnBodyProvider.cs create mode 100644 DNN Platform/DotNetNuke.Web.Client/Providers/DnnCompositeFileProcessingProvider.cs create mode 100644 DNN Platform/DotNetNuke.Web.Client/Providers/DnnFileRegistrationProvider.cs create mode 100644 DNN Platform/DotNetNuke.Web.Client/Providers/DnnFormBottomProvider.cs create mode 100644 DNN Platform/DotNetNuke.Web.Client/Providers/DnnPageHeaderProvider.cs diff --git a/DNN Platform/DotNetNuke.Web.Client/DotNetNuke.Web.Client.csproj b/DNN Platform/DotNetNuke.Web.Client/DotNetNuke.Web.Client.csproj index 8706e6b2ae2..57f9470a362 100644 --- a/DNN Platform/DotNetNuke.Web.Client/DotNetNuke.Web.Client.csproj +++ b/DNN Platform/DotNetNuke.Web.Client/DotNetNuke.Web.Client.csproj @@ -50,6 +50,9 @@ SA1600 + + ..\..\packages\Dnn.ClientDependency.1.10.0\lib\net48\ClientDependency.Core.dll + False ..\DotNetNuke.Instrumentation\bin\DotNetNuke.Instrumentation.dll @@ -97,6 +100,11 @@ + + + + + diff --git a/DNN Platform/DotNetNuke.Web.Client/Providers/DnnBodyProvider.cs b/DNN Platform/DotNetNuke.Web.Client/Providers/DnnBodyProvider.cs new file mode 100644 index 00000000000..2e8e2b6b091 --- /dev/null +++ b/DNN Platform/DotNetNuke.Web.Client/Providers/DnnBodyProvider.cs @@ -0,0 +1,161 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information + +namespace DotNetNuke.Web.Client.Providers +{ + using System; + using System.Collections.Generic; + using System.Linq; + using System.Text; + using System.Web; + using System.Web.UI; + using System.Web.UI.HtmlControls; + + using ClientDependency.Core; + using ClientDependency.Core.Config; + using ClientDependency.Core.FileRegistration.Providers; + + /// Registers resources at the top of the body on default.aspx. + public class DnnBodyProvider : DnnFileRegistrationProvider + { + /// The name of the provider. + public const string DefaultName = "DnnBodyProvider"; + + /// The name of the placeholder in which the controls will be rendered. + public const string DnnBodyPlaceHolderName = "BodySCRIPTS"; + + /// Initializes the provider. + /// The friendly name of the provider. + /// A collection of the name/value pairs representing the provider-specific attributes specified in the configuration for this provider. + /// The name of the provider is null. + /// The name of the provider has a length of zero. + /// An attempt is made to call on a provider after the provider has already been initialized. + /// + public override void Initialize(string name, System.Collections.Specialized.NameValueCollection config) + { + // Assign the provider a default name if it doesn't have one + if (string.IsNullOrEmpty(name)) + { + name = DefaultName; + } + + base.Initialize(name, config); + } + + /// + protected override string RenderJsDependencies(IEnumerable jsDependencies, HttpContextBase http, IDictionary htmlAttributes) + { + if (!jsDependencies.Any()) + { + return string.Empty; + } + + var sb = new StringBuilder(); + + if (http.IsDebuggingEnabled || !this.EnableCompositeFiles) + { + foreach (var dependency in jsDependencies) + { + sb.Append(this.RenderSingleJsFile(dependency.FilePath, htmlAttributes)); + } + } + else + { + var comp = ClientDependencySettings.Instance.DefaultCompositeFileProcessingProvider.ProcessCompositeList(jsDependencies, ClientDependencyType.Javascript, http); + foreach (var s in comp) + { + sb.Append(this.RenderSingleJsFile(s, htmlAttributes)); + } + } + + return sb.ToString(); + } + + /// + protected override string RenderSingleJsFile(string js, IDictionary htmlAttributes) + { + return string.Format(HtmlEmbedContants.ScriptEmbedWithSource, js, htmlAttributes.ToHtmlAttributes()); + } + + /// + protected override string RenderCssDependencies(IEnumerable cssDependencies, HttpContextBase http, IDictionary htmlAttributes) + { + if (!cssDependencies.Any()) + { + return string.Empty; + } + + var sb = new StringBuilder(); + + if (http.IsDebuggingEnabled || !this.EnableCompositeFiles) + { + foreach (var dependency in cssDependencies) + { + sb.Append(this.RenderSingleCssFile(dependency.FilePath, htmlAttributes)); + } + } + else + { + var comp = ClientDependencySettings.Instance.DefaultCompositeFileProcessingProvider.ProcessCompositeList(cssDependencies, ClientDependencyType.Css, http); + foreach (var s in comp) + { + sb.Append(this.RenderSingleCssFile(s, htmlAttributes)); + } + } + + return sb.ToString(); + } + + /// + protected override string RenderSingleCssFile(string css, IDictionary htmlAttributes) + { + return string.Format(HtmlEmbedContants.CssEmbedWithSource, css, htmlAttributes.ToHtmlAttributes()); + } + + /// Registers the dependencies in the body of default.aspx. + /// The HTTP context. + /// The HTML markup to request JavaScript dependencies. + /// The HTML markup to request CSS dependencies. + /// + /// For some reason ampersands that aren't html escaped are not compliant to HTML standards when they exist in 'link' or 'script' tags in URLs, + /// we need to replace the ampersands with & . This is only required for this one w3c compliancy, the URL itself is a valid URL. + /// + /// + protected override void RegisterDependencies(HttpContextBase http, string js, string css) + { + if (!(http.CurrentHandler is Page)) + { + throw new InvalidOperationException("The current HttpHandler in a WebFormsFileRegistrationProvider must be of type Page"); + } + + var page = (Page)http.CurrentHandler; + + if (page.Header == null) + { + throw new NullReferenceException("DnnBodyProvider requires a runat='server' tag in the page's header tag"); + } + + var jsScriptBlock = new LiteralControl(js.Replace("&", "&")); + var cssStyleBlock = new LiteralControl(css.Replace("&", "&")); + + var holderControl = page.FindControl(DnnBodyPlaceHolderName); + holderControl.Controls.Add(jsScriptBlock); + holderControl.Controls.Add(cssStyleBlock); + + var form = (HtmlForm)page.FindControl("Form"); + if (form != null) + { + form.Controls.Remove(holderControl); + form.Controls.AddAt(0, holderControl); + } + + var scriptManager = ScriptManager.GetCurrent(page); + if (scriptManager != null && scriptManager.IsInAsyncPostBack) + { + holderControl.ID = "$crm_" + holderControl.ID; + scriptManager.RegisterDataItem(holderControl, string.Format("{0}{1}", jsScriptBlock.Text, cssStyleBlock.Text)); + } + } + } +} diff --git a/DNN Platform/DotNetNuke.Web.Client/Providers/DnnCompositeFileProcessingProvider.cs b/DNN Platform/DotNetNuke.Web.Client/Providers/DnnCompositeFileProcessingProvider.cs new file mode 100644 index 00000000000..11b98877dfe --- /dev/null +++ b/DNN Platform/DotNetNuke.Web.Client/Providers/DnnCompositeFileProcessingProvider.cs @@ -0,0 +1,95 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information + +namespace DotNetNuke.Web.Client.Providers +{ + using System; + using System.IO; + + using ClientDependency.Core; + using ClientDependency.Core.CompositeFiles; + using ClientDependency.Core.CompositeFiles.Providers; + + /// A provider for combining, minifying, compressing and saving composite scripts/css files. + public class DnnCompositeFileProcessingProvider : CompositeFileProcessingProvider + { + private readonly ClientResourceSettings clientResourceSettings = new ClientResourceSettings(); + + private bool MinifyCss + { + get + { + var enableCssMinification = this.clientResourceSettings.EnableCssMinification(); + return enableCssMinification.HasValue ? enableCssMinification.Value : this.EnableCssMinify; + } + } + + private bool MinifyJs + { + get + { + var enableJsMinification = this.clientResourceSettings.EnableJsMinification(); + return enableJsMinification.HasValue ? enableJsMinification.Value : this.EnableJsMinify; + } + } + + /// + public override string MinifyFile(Stream fileStream, ClientDependencyType type) + { + Func streamToString = stream => + { + if (!stream.CanRead) + { + throw new InvalidOperationException("Cannot read input stream"); + } + + if (stream.CanSeek) + { + stream.Position = 0; + } + + var reader = new StreamReader(stream); + return reader.ReadToEnd(); + }; + + switch (type) + { + case ClientDependencyType.Css: + return this.MinifyCss ? CssHelper.MinifyCss(fileStream) : streamToString(fileStream); + case ClientDependencyType.Javascript: + return this.MinifyJs ? JSMin.CompressJS(fileStream) : streamToString(fileStream); + default: + return streamToString(fileStream); + } + } + + /// + public override string MinifyFile(string fileContents, ClientDependencyType type) + { + switch (type) + { + case ClientDependencyType.Css: + return this.MinifyCss ? CssHelper.MinifyCss(fileContents) : fileContents; + case ClientDependencyType.Javascript: + { + if (!this.MinifyJs) + { + return fileContents; + } + + using (var ms = new MemoryStream()) + using (var writer = new StreamWriter(ms)) + { + writer.Write(fileContents); + writer.Flush(); + return JSMin.CompressJS(ms); + } + } + + default: + return fileContents; + } + } + } +} diff --git a/DNN Platform/DotNetNuke.Web.Client/Providers/DnnFileRegistrationProvider.cs b/DNN Platform/DotNetNuke.Web.Client/Providers/DnnFileRegistrationProvider.cs new file mode 100644 index 00000000000..de36f6a489e --- /dev/null +++ b/DNN Platform/DotNetNuke.Web.Client/Providers/DnnFileRegistrationProvider.cs @@ -0,0 +1,29 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information + +namespace DotNetNuke.Web.Client.Providers +{ + using System; + + using ClientDependency.Core.Config; + using ClientDependency.Core.FileRegistration.Providers; + + public abstract class DnnFileRegistrationProvider : WebFormsFileRegistrationProvider + { + private readonly ClientResourceSettings dnnSettingsHelper = new ClientResourceSettings(); + + /// + /// Gets a value indicating whether checks if the composite files option is set for the current portal (DNN site settings). + /// If not enabled at the portal level it defers to the core CDF setting (web.config). + /// + public override bool EnableCompositeFiles + { + get + { + var settingsVersion = this.dnnSettingsHelper.AreCompositeFilesEnabled(); + return settingsVersion.HasValue ? settingsVersion.Value : base.EnableCompositeFiles; + } + } + } +} diff --git a/DNN Platform/DotNetNuke.Web.Client/Providers/DnnFormBottomProvider.cs b/DNN Platform/DotNetNuke.Web.Client/Providers/DnnFormBottomProvider.cs new file mode 100644 index 00000000000..42ef9e2ef30 --- /dev/null +++ b/DNN Platform/DotNetNuke.Web.Client/Providers/DnnFormBottomProvider.cs @@ -0,0 +1,138 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information + +namespace DotNetNuke.Web.Client.Providers +{ + using System; + using System.Collections.Generic; + using System.Linq; + using System.Text; + using System.Web; + using System.Web.UI; + + using ClientDependency.Core; + using ClientDependency.Core.Config; + using ClientDependency.Core.FileRegistration.Providers; + + /// Registers resources at the top of the body on default.aspx. + public class DnnFormBottomProvider : DnnFileRegistrationProvider + { + /// The default name of the provider. + public const string DefaultName = "DnnFormBottomProvider"; + + /// The name of the placeholder in which the controls will be rendered. + public const string DnnFormBottomPlaceHolderName = "ClientResourcesFormBottom"; + + /// + public override void Initialize(string name, System.Collections.Specialized.NameValueCollection config) + { + // Assign the provider a default name if it doesn't have one + if (string.IsNullOrEmpty(name)) + { + name = DefaultName; + } + + base.Initialize(name, config); + } + + /// + protected override string RenderJsDependencies(IEnumerable jsDependencies, HttpContextBase http, IDictionary htmlAttributes) + { + if (!jsDependencies.Any()) + { + return string.Empty; + } + + var sb = new StringBuilder(); + + if (http.IsDebuggingEnabled || !this.EnableCompositeFiles) + { + foreach (var dependency in jsDependencies) + { + sb.Append(this.RenderSingleJsFile(dependency.FilePath, htmlAttributes)); + } + } + else + { + var comp = ClientDependencySettings.Instance.DefaultCompositeFileProcessingProvider.ProcessCompositeList(jsDependencies, ClientDependencyType.Javascript, http); + foreach (var s in comp) + { + sb.Append(this.RenderSingleJsFile(s, htmlAttributes)); + } + } + + return sb.ToString(); + } + + /// + protected override string RenderSingleJsFile(string js, IDictionary htmlAttributes) + { + return string.Format(HtmlEmbedContants.ScriptEmbedWithSource, js, htmlAttributes.ToHtmlAttributes()); + } + + /// + protected override string RenderCssDependencies(IEnumerable cssDependencies, HttpContextBase http, IDictionary htmlAttributes) + { + if (!cssDependencies.Any()) + { + return string.Empty; + } + + var sb = new StringBuilder(); + + if (http.IsDebuggingEnabled || !this.EnableCompositeFiles) + { + foreach (var dependency in cssDependencies) + { + sb.Append(this.RenderSingleCssFile(dependency.FilePath, htmlAttributes)); + } + } + else + { + var comp = ClientDependencySettings.Instance.DefaultCompositeFileProcessingProvider.ProcessCompositeList(cssDependencies, ClientDependencyType.Css, http); + foreach (var s in comp) + { + sb.Append(this.RenderSingleCssFile(s, htmlAttributes)); + } + } + + return sb.ToString(); + } + + /// + protected override string RenderSingleCssFile(string css, IDictionary htmlAttributes) + { + return string.Format(HtmlEmbedContants.CssEmbedWithSource, css, htmlAttributes.ToHtmlAttributes()); + } + + /// Registers the dependencies in the body of default.aspx. + /// The HTTP context. + /// The HTML markup to request JavaScript dependencies. + /// The HTML markup to request CSS dependencies. + /// + /// For some reason ampersands that aren't html escaped are not compliant to HTML standards when they exist in 'link' or 'script' tags in URLs, + /// we need to replace the ampersands with & . This is only required for this one w3c compliancy, the URL itself is a valid URL. + /// + /// + protected override void RegisterDependencies(HttpContextBase http, string js, string css) + { + if (!(http.CurrentHandler is Page)) + { + throw new InvalidOperationException("The current HttpHandler in a WebFormsFileRegistrationProvider must be of type Page"); + } + + var page = (Page)http.CurrentHandler; + + if (page.Header == null) + { + throw new NullReferenceException("DnnFormBottomProvider requires a runat='server' tag in the page's header tag"); + } + + var jsScriptBlock = new LiteralControl(js.Replace("&", "&")); + var cssStyleBlock = new LiteralControl(css.Replace("&", "&")); + page.FindControl(DnnFormBottomPlaceHolderName).Controls.Add(jsScriptBlock); + page.FindControl(DnnFormBottomPlaceHolderName).Controls.Add(cssStyleBlock); + } + } +} diff --git a/DNN Platform/DotNetNuke.Web.Client/Providers/DnnPageHeaderProvider.cs b/DNN Platform/DotNetNuke.Web.Client/Providers/DnnPageHeaderProvider.cs new file mode 100644 index 00000000000..36fad26db2f --- /dev/null +++ b/DNN Platform/DotNetNuke.Web.Client/Providers/DnnPageHeaderProvider.cs @@ -0,0 +1,148 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information + +namespace DotNetNuke.Web.Client.Providers +{ + using System; + using System.Collections.Generic; + using System.Linq; + using System.Text; + using System.Web; + using System.Web.UI; + + using ClientDependency.Core; + using ClientDependency.Core.Config; + using ClientDependency.Core.FileRegistration.Providers; + + /// Registers resources at the top of the body on default.aspx. + public class DnnPageHeaderProvider : DnnFileRegistrationProvider + { + /// The default name of the provider. + public const string DefaultName = "DnnPageHeaderProvider"; + + /// The name of the placeholder in which the controls will be rendered. + public const string CssPlaceHolderName = "ClientDependencyHeadCss"; + + public const string JsPlaceHolderName = "ClientDependencyHeadJs"; + + /// + public override void Initialize(string name, System.Collections.Specialized.NameValueCollection config) + { + // Assign the provider a default name if it doesn't have one + if (string.IsNullOrEmpty(name)) + { + name = DefaultName; + } + + base.Initialize(name, config); + } + + /// + protected override string RenderJsDependencies(IEnumerable jsDependencies, HttpContextBase http, IDictionary htmlAttributes) + { + if (!jsDependencies.Any()) + { + return string.Empty; + } + + var sb = new StringBuilder(); + + if (http.IsDebuggingEnabled || !this.EnableCompositeFiles) + { + foreach (var dependency in jsDependencies) + { + sb.Append(this.RenderSingleJsFile(dependency.FilePath, htmlAttributes)); + } + } + else + { + var comp = ClientDependencySettings.Instance.DefaultCompositeFileProcessingProvider.ProcessCompositeList(jsDependencies, ClientDependencyType.Javascript, http); + foreach (var s in comp) + { + sb.Append(this.RenderSingleJsFile(s, htmlAttributes)); + } + } + + return sb.ToString(); + } + + /// + protected override string RenderSingleJsFile(string js, IDictionary htmlAttributes) + { + return string.Format(HtmlEmbedContants.ScriptEmbedWithSource, js, htmlAttributes.ToHtmlAttributes()); + } + + /// + protected override string RenderCssDependencies(IEnumerable cssDependencies, HttpContextBase http, IDictionary htmlAttributes) + { + if (!cssDependencies.Any()) + { + return string.Empty; + } + + var sb = new StringBuilder(); + + if (http.IsDebuggingEnabled || !this.EnableCompositeFiles) + { + foreach (var dependency in cssDependencies) + { + sb.Append(this.RenderSingleCssFile(dependency.FilePath, htmlAttributes)); + } + } + else + { + var comp = ClientDependencySettings.Instance.DefaultCompositeFileProcessingProvider.ProcessCompositeList(cssDependencies, ClientDependencyType.Css, http); + foreach (var s in comp) + { + sb.Append(this.RenderSingleCssFile(s, htmlAttributes)); + } + } + + return sb.ToString(); + } + + /// + protected override string RenderSingleCssFile(string css, IDictionary htmlAttributes) + { + return string.Format(HtmlEmbedContants.CssEmbedWithSource, css, htmlAttributes.ToHtmlAttributes()); + } + + /// Registers the dependencies in the body of default.aspx. + /// The HTTP context. + /// The HTML markup to request JavaScript dependencies. + /// The HTML markup to request CSS dependencies. + /// + /// For some reason ampersands that aren't html escaped are not compliant to HTML standards when they exist in 'link' or 'script' tags in URLs, + /// we need to replace the ampersands with & . This is only required for this one w3c compliancy, the URL itself is a valid URL. + /// + /// + protected override void RegisterDependencies(HttpContextBase http, string js, string css) + { + if (!(http.CurrentHandler is Page)) + { + throw new InvalidOperationException("The current HttpHandler in a WebFormsFileRegistrationProvider must be of type Page"); + } + + var page = (Page)http.CurrentHandler; + + if (page.Header == null) + { + throw new NullReferenceException("DnnPageHeaderProvider requires a runat='server' tag in the page's header tag"); + } + + var jsScriptBlock = new LiteralControl(js.Replace("&", "&")); + var cssStyleBlock = new LiteralControl(css.Replace("&", "&")); + page.FindControl(JsPlaceHolderName).Controls.Add(jsScriptBlock); + page.FindControl(CssPlaceHolderName).Controls.Add(cssStyleBlock); + + var scriptManager = ScriptManager.GetCurrent(page); + if (scriptManager != null && scriptManager.IsInAsyncPostBack) + { + var jsHolder = page.FindControl(JsPlaceHolderName); + jsHolder.ID = "$crm_" + jsHolder.ID; + scriptManager.RegisterDataItem(jsHolder, string.Format("{0}{1}", jsScriptBlock.Text, cssStyleBlock.Text)); + } + } + } +} From 18688721a1be97b36d0e6a5abfccccb387a8cc7e Mon Sep 17 00:00:00 2001 From: Peter Donker Date: Sun, 28 Sep 2025 16:17:56 +0200 Subject: [PATCH 026/199] Implement install and upgrade logic for the old clientdependency --- .../ClientResourceManager.cs | 61 +++++++++++++++++++ .../Internals/Steps/InstallDatabaseStep.cs | 3 +- .../Library/Services/Upgrade/Upgrade.cs | 6 +- DNN Platform/Website/Install/Install.aspx.cs | 6 -- .../Website/Install/InstallWizard.aspx.cs | 9 --- 5 files changed, 67 insertions(+), 18 deletions(-) diff --git a/DNN Platform/DotNetNuke.Web.Client/ClientResourceManager.cs b/DNN Platform/DotNetNuke.Web.Client/ClientResourceManager.cs index a0e7737f3fe..981c9422d28 100644 --- a/DNN Platform/DotNetNuke.Web.Client/ClientResourceManager.cs +++ b/DNN Platform/DotNetNuke.Web.Client/ClientResourceManager.cs @@ -118,6 +118,67 @@ public static void AddConfiguration() xmlDoc.Save(configPath); } + public static void RemoveConfiguration() + { + Logger.Info("Removing ClientDependency from web.config"); + + var configPath = HostingEnvironment.MapPath("~/web.config"); + if (string.IsNullOrEmpty(configPath)) + { + return; + } + + var xmlDoc = new XmlDocument { XmlResolver = null }; + xmlDoc.Load(configPath); + + // Config Sections + var sectionsConfig = xmlDoc.DocumentElement?.SelectSingleNode("configSections"); + if (sectionsConfig != null) + { + var clientDependencySectionConfig = sectionsConfig.SelectSingleNode("section[@name='clientDependency']"); + if (clientDependencySectionConfig != null) + { + Logger.Info("Removing configSections/clientDependency"); + sectionsConfig.RemoveChild(clientDependencySectionConfig); + } + } + + // Module Config + var systemWebServerModulesConfig = xmlDoc.DocumentElement?.SelectSingleNode("system.webServer/modules"); + if (systemWebServerModulesConfig != null) + { + var moduleConfig = systemWebServerModulesConfig.SelectSingleNode("add[@name=\"ClientDependencyModule\"]"); + if (moduleConfig != null) + { + Logger.Info("Removing system.webServer/modules/ClientDependencyModule"); + systemWebServerModulesConfig.RemoveChild(moduleConfig); + } + } + + // Handler Config + var systemWebServerHandlersConfig = xmlDoc.DocumentElement?.SelectSingleNode("system.webServer/handlers"); + if (systemWebServerHandlersConfig != null) + { + var handlerConfig = systemWebServerHandlersConfig.SelectSingleNode("add[@name=\"ClientDependencyHandler\"]"); + if (handlerConfig != null) + { + Logger.Info("Removing system.webServer/handlers/ClientDependencyHandler"); + systemWebServerHandlersConfig.RemoveChild(handlerConfig); + } + } + + // ClientDependency Config + var clientDependencyConfig = xmlDoc.DocumentElement?.SelectSingleNode("clientDependency"); + if (clientDependencyConfig != null) + { + Logger.Info("Removing clientDependency"); + xmlDoc.DocumentElement?.RemoveChild(clientDependencyConfig); + } + + // Save Config + xmlDoc.Save(configPath); + } + /// Checks if ClientDependency is installed. /// A value indicating whether the ClientDependency provider is installed. public static bool IsInstalled() diff --git a/DNN Platform/Library/Services/Upgrade/Internals/Steps/InstallDatabaseStep.cs b/DNN Platform/Library/Services/Upgrade/Internals/Steps/InstallDatabaseStep.cs index c3b0d006e41..ea5609848ed 100644 --- a/DNN Platform/Library/Services/Upgrade/Internals/Steps/InstallDatabaseStep.cs +++ b/DNN Platform/Library/Services/Upgrade/Internals/Steps/InstallDatabaseStep.cs @@ -136,8 +136,9 @@ public override void Execute() } this.Percentage += percentForMiniStep; - } + } + Web.Client.ClientResourceManagement.ClientResourceManager.RemoveConfiguration(); this.Percentage = percentForEachStep * counter++; // Step 5 - Delete files which are no longer used diff --git a/DNN Platform/Library/Services/Upgrade/Upgrade.cs b/DNN Platform/Library/Services/Upgrade/Upgrade.cs index 4a58019df27..28a740cece3 100644 --- a/DNN Platform/Library/Services/Upgrade/Upgrade.cs +++ b/DNN Platform/Library/Services/Upgrade/Upgrade.cs @@ -24,7 +24,6 @@ namespace DotNetNuke.Services.Upgrade using DotNetNuke.Common.Utilities; using DotNetNuke.Data; using DotNetNuke.Entities.Controllers; - using DotNetNuke.Entities.Host; using DotNetNuke.Entities.Modules; using DotNetNuke.Entities.Modules.Definitions; using DotNetNuke.Entities.Portals; @@ -46,7 +45,7 @@ namespace DotNetNuke.Services.Upgrade using DotNetNuke.Services.Upgrade.InternalController.Steps; using DotNetNuke.Services.Upgrade.Internals; using DotNetNuke.Services.Upgrade.Internals.Steps; - + using DotNetNuke.Web.Client.ClientResourceManagement; using Microsoft.Extensions.DependencyInjection; using Assembly = System.Reflection.Assembly; @@ -1612,6 +1611,9 @@ public static void UpgradeDNN(string providerPath, Version dataBaseVersion) UpdateConfig(providerPath, ver, true); } + // Removing ClientDependency Resources config from web.config + ClientResourceManager.RemoveConfiguration(); + DataProvider.Instance().SetCorePackageVersions(); // perform general application upgrades diff --git a/DNN Platform/Website/Install/Install.aspx.cs b/DNN Platform/Website/Install/Install.aspx.cs index 144dc807a0b..beb584ce5b5 100644 --- a/DNN Platform/Website/Install/Install.aspx.cs +++ b/DNN Platform/Website/Install/Install.aspx.cs @@ -279,12 +279,6 @@ private void InstallApplication() Localization.RemoveLanguageFromPortal(0, locale.LanguageId, true); } - // Adding ClientDependency Resources config to web.config - if (!ClientResourceManager.IsInstalled()) - { - ClientResourceManager.AddConfiguration(); - } - var installVersion = DataProvider.Instance().GetInstallVersion(); string strError = Config.UpdateInstallVersion(this.appStatus, installVersion); diff --git a/DNN Platform/Website/Install/InstallWizard.aspx.cs b/DNN Platform/Website/Install/InstallWizard.aspx.cs index bddd6382bc7..27d3a198e23 100644 --- a/DNN Platform/Website/Install/InstallWizard.aspx.cs +++ b/DNN Platform/Website/Install/InstallWizard.aspx.cs @@ -697,15 +697,6 @@ protected override void OnLoad(EventArgs e) return; } - // Adding ClientDependency Resources config to web.config - if (!ClientResourceManager.IsInstalled() && ValidatePermissions().Item1) - { - ClientResourceManager.AddConfiguration(); - this.Response.Redirect(this.Request.RawUrl); - - // TODO - this may cause infinite loop - } - // Ensure connection strings are in synch var synchConnectionString = new SynchConnectionStringStep(); synchConnectionString.Execute(); From 2152d637bdf45e641a6ee24f9968cc897388f891 Mon Sep 17 00:00:00 2001 From: Peter Donker Date: Sun, 28 Sep 2025 22:20:22 +0200 Subject: [PATCH 027/199] Trying to deprecate the ClientResourceManager --- .../Dnn.Modules.Console/ViewConsole.ascx.cs | 12 +- .../ClientResourceProviders.cs | 10 + .../IClientResourcesController.cs | 18 -- .../ClientResourcesController.cs | 18 -- .../ClientResourceManager.cs | 1 + .../Controls/DnnCssInclude.cs | 2 +- .../Controls/DnnJsInclude.cs | 2 +- .../DotNetNuke.WebUtility/ClientAPI.vb | 58 +++--- .../DotNetNuke.WebUtility.vbproj | 10 + .../Library/DotNetNuke.Library.csproj | 2 + .../Library/Properties/AssemblyInfo.cs | 1 + .../ClientDependency/DependencyController.cs | 34 ++++ .../Services/ClientDependency/Extensions.cs | 172 ++++++++++++++++++ .../Library/UI/Containers/Container.cs | 23 ++- .../CoreMessaging/Subscriptions.ascx.cs | 20 +- .../Modules/CoreMessaging/View.ascx.cs | 14 +- DNN Platform/Website/Default.aspx.cs | 30 +-- .../Admin/SearchResults/SearchResults.ascx.cs | 18 +- .../Admin/Security/Password.ascx.cs | 21 ++- .../Admin/Security/Register.ascx.cs | 18 +- .../Admin/Security/User.ascx.cs | 23 ++- .../Website/DotNetNuke.Website.csproj | 4 + .../Menus/ModuleActions/ModuleActions.ascx.cs | 19 +- .../admin/Security/PasswordReset.ascx.cs | 21 ++- .../Website/admin/Skins/Search.ascx.cs | 20 +- .../Website/admin/Skins/Toast.ascx.cs | 13 +- .../UserControls/PersonaBarContainer.ascx.cs | 15 +- 27 files changed, 437 insertions(+), 162 deletions(-) create mode 100644 DNN Platform/Library/Services/ClientDependency/DependencyController.cs create mode 100644 DNN Platform/Library/Services/ClientDependency/Extensions.cs diff --git a/DNN Platform/Admin Modules/Dnn.Modules.Console/ViewConsole.ascx.cs b/DNN Platform/Admin Modules/Dnn.Modules.Console/ViewConsole.ascx.cs index e97bd8efda7..e786d477b14 100644 --- a/DNN Platform/Admin Modules/Dnn.Modules.Console/ViewConsole.ascx.cs +++ b/DNN Platform/Admin Modules/Dnn.Modules.Console/ViewConsole.ascx.cs @@ -14,6 +14,7 @@ namespace Dnn.Modules.Console using Dnn.Modules.Console.Components; using DotNetNuke.Abstractions; + using DotNetNuke.Abstractions.ClientResources; using DotNetNuke.Common.Utilities; using DotNetNuke.Entities.Modules; using DotNetNuke.Entities.Tabs; @@ -22,10 +23,10 @@ namespace Dnn.Modules.Console using DotNetNuke.Instrumentation; using DotNetNuke.Security.Permissions; using DotNetNuke.Security.Roles; + using DotNetNuke.Services.ClientDependency; using DotNetNuke.Services.Exceptions; using DotNetNuke.Services.Localization; using DotNetNuke.Services.Personalization; - using DotNetNuke.Web.Client.ClientResourceManagement; using Microsoft.Extensions.DependencyInjection; /// Implements the module view logic. @@ -34,6 +35,7 @@ public partial class ViewConsole : PortalModuleBase private static readonly ILog Logger = LoggerSource.Instance.GetLogger(typeof(ViewConsole)); private readonly INavigationManager navigationManager; private readonly IJavaScriptLibraryHelper javaScript; + private readonly IClientResourcesController clientResourcesController; private string defaultSize = string.Empty; private string defaultView = string.Empty; @@ -42,17 +44,19 @@ public partial class ViewConsole : PortalModuleBase /// Initializes a new instance of the class. public ViewConsole() - : this(null, null) + : this(null, null, null) { } /// Initializes a new instance of the class. /// The navigation manager. /// The JavaScript library helper. - public ViewConsole(INavigationManager navigationManager, IJavaScriptLibraryHelper javaScript) + /// The client resources controller. + public ViewConsole(INavigationManager navigationManager, IJavaScriptLibraryHelper javaScript, IClientResourcesController clientResourcesController) { this.navigationManager = navigationManager ?? this.DependencyProvider.GetRequiredService(); this.javaScript = javaScript ?? this.DependencyProvider.GetRequiredService(); + this.clientResourcesController = clientResourcesController ?? this.DependencyProvider.GetRequiredService(); } /// Gets a value indicating whether the module settings allow size change. @@ -213,7 +217,7 @@ protected override void OnInit(EventArgs e) { this.javaScript.RequestRegistration(CommonJs.jQuery); - ClientResourceManager.RegisterScript(this.Page, "~/desktopmodules/admin/console/scripts/jquery.console.js"); + this.clientResourcesController.RegisterScript("~/desktopmodules/admin/console/scripts/jquery.console.js"); this.DetailView.ItemDataBound += this.RepeaterItemDataBound; diff --git a/DNN Platform/DotNetNuke.Abstractions/ClientResources/ClientResourceProviders.cs b/DNN Platform/DotNetNuke.Abstractions/ClientResources/ClientResourceProviders.cs index e8da0d8205c..a79323d62f2 100644 --- a/DNN Platform/DotNetNuke.Abstractions/ClientResources/ClientResourceProviders.cs +++ b/DNN Platform/DotNetNuke.Abstractions/ClientResources/ClientResourceProviders.cs @@ -29,5 +29,15 @@ public class ClientResourceProviders /// In the page body at the bottom of the main form (when using webforms). /// public const string DnnFormBottomProvider = "DnnFormBottomProvider"; + + /// + /// The default css provider. + /// + public const string DefaultCssProvider = "DnnPageHeaderProvider"; + + /// + /// The default javascript provider. + /// + public const string DefaultJsProvider = "DnnBodyProvider"; } } diff --git a/DNN Platform/DotNetNuke.Abstractions/ClientResources/IClientResourcesController.cs b/DNN Platform/DotNetNuke.Abstractions/ClientResources/IClientResourcesController.cs index 61d15ed34d2..0965187c9fc 100644 --- a/DNN Platform/DotNetNuke.Abstractions/ClientResources/IClientResourcesController.cs +++ b/DNN Platform/DotNetNuke.Abstractions/ClientResources/IClientResourcesController.cs @@ -42,12 +42,6 @@ public interface IClientResourcesController /// An instance representing the created stylesheet resource. IStylesheetResource CreateStylesheet(); - /// - /// Registers a font resource by its path. - /// - /// The path to the font resource to register. - void RegisterFont(string fontPath); - /// /// Registers a path name alias for resolving resource paths. /// @@ -55,18 +49,6 @@ public interface IClientResourcesController /// The resolved path corresponding to the alias. void RegisterPathNameAlias(string pathNameAlias, string resolvedPath); - /// - /// Registers a script resource by its path. - /// - /// The path to the script resource to register. - void RegisterScript(string scriptPath); - - /// - /// Registers a stylesheet resource by its path. - /// - /// The path to the stylesheet resource to register. - void RegisterStylesheet(string stylesheetPath); - /// /// Removes a font resource by its name. /// diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourcesController.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourcesController.cs index 299ea7bbd3d..9303228af4b 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourcesController.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourcesController.cs @@ -75,30 +75,12 @@ public IStylesheetResource CreateStylesheet() return new Models.StylesheetResource(this); } - /// - public void RegisterFont(string fontPath) - { - this.CreateFont().FromSrc(fontPath).Register(); - } - /// public void RegisterPathNameAlias(string pathNameAlias, string resolvedPath) { this.PathNameAliases[pathNameAlias.ToLowerInvariant()] = resolvedPath; } - /// - public void RegisterScript(string scriptPath) - { - this.CreateScript().FromSrc(scriptPath).Register(); - } - - /// - public void RegisterStylesheet(string stylesheetPath) - { - this.CreateStylesheet().FromSrc(stylesheetPath).Register(); - } - /// public void RemoveFontByName(string fontName) { diff --git a/DNN Platform/DotNetNuke.Web.Client/ClientResourceManager.cs b/DNN Platform/DotNetNuke.Web.Client/ClientResourceManager.cs index 981c9422d28..fec304de72b 100644 --- a/DNN Platform/DotNetNuke.Web.Client/ClientResourceManager.cs +++ b/DNN Platform/DotNetNuke.Web.Client/ClientResourceManager.cs @@ -23,6 +23,7 @@ namespace DotNetNuke.Web.Client.ClientResourceManagement using Microsoft.Extensions.DependencyInjection; /// Provides the ability to request that client resources (JavaScript and CSS) be loaded on the client browser. + [Obsolete("Deprecated in DotNetNuke 10.2.0. Please use IClientResourcesController instead. Scheduled removal in v12.0.0.")] public partial class ClientResourceManager { /// The default css provider. diff --git a/DNN Platform/DotNetNuke.Web.Client/Controls/DnnCssInclude.cs b/DNN Platform/DotNetNuke.Web.Client/Controls/DnnCssInclude.cs index 8696c7c999f..e1749b9b32f 100644 --- a/DNN Platform/DotNetNuke.Web.Client/Controls/DnnCssInclude.cs +++ b/DNN Platform/DotNetNuke.Web.Client/Controls/DnnCssInclude.cs @@ -19,7 +19,7 @@ public class DnnCssInclude : ClientResourceInclude public DnnCssInclude(IClientResourcesController clientResourcesController) : base(clientResourcesController) { - this.ForceProvider = ClientResourceManager.DefaultCssProvider; + this.ForceProvider = ClientResourceProviders.DefaultCssProvider; this.DependencyType = ClientDependencyType.Css; } diff --git a/DNN Platform/DotNetNuke.Web.Client/Controls/DnnJsInclude.cs b/DNN Platform/DotNetNuke.Web.Client/Controls/DnnJsInclude.cs index 9e089b7ed2f..73373b1191d 100644 --- a/DNN Platform/DotNetNuke.Web.Client/Controls/DnnJsInclude.cs +++ b/DNN Platform/DotNetNuke.Web.Client/Controls/DnnJsInclude.cs @@ -20,7 +20,7 @@ public class DnnJsInclude : ClientResourceInclude public DnnJsInclude(IClientResourcesController clientResourcesController) : base(clientResourcesController) { - this.ForceProvider = ClientResourceManager.DefaultJsProvider; + this.ForceProvider = ClientResourceProviders.DefaultJsProvider; this.DependencyType = ClientDependencyType.Javascript; } diff --git a/DNN Platform/DotNetNuke.WebUtility/ClientAPI.vb b/DNN Platform/DotNetNuke.WebUtility/ClientAPI.vb index 2065f1e85e0..36965e2f720 100644 --- a/DNN Platform/DotNetNuke.WebUtility/ClientAPI.vb +++ b/DNN Platform/DotNetNuke.WebUtility/ClientAPI.vb @@ -1,16 +1,17 @@ ' Copyright (c) .NET Foundation. All rights reserved. ' Licensed under the MIT License. See LICENSE file in the project root for full license information. +Imports System.Collections.Generic +Imports System.Globalization +Imports System.Reflection Imports System.Web Imports System.Web.UI Imports System.Web.UI.HtmlControls Imports System.Web.UI.WebControls -Imports System.Reflection -Imports System.Globalization -Imports System.Collections.Generic -Imports System.Text.RegularExpressions -Imports DotNetNuke.Web.Client -Imports DotNetNuke.Web.Client.ClientResourceManagement + +Imports DotNetNuke.Abstractions.ClientResources +Imports DotNetNuke.Web.Client.ResourceManager +Imports Microsoft.Extensions.DependencyInjection Namespace DotNetNuke.UI.Utilities @@ -663,6 +664,7 @@ Namespace DotNetNuke.UI.Utilities ''' ''' ----------------------------------------------------------------------------- Public Shared Sub RegisterClientReference(ByVal objPage As Page, ByVal eRef As ClientNamespaceReferences) + Dim controller As IClientResourcesController = GetClientResourcesController(objPage) Select Case eRef Case ClientNamespaceReferences.dnn If Not IsClientScriptBlockRegistered(objPage, "dnn.js") Then @@ -679,26 +681,26 @@ Namespace DotNetNuke.UI.Utilities Case ClientNamespaceReferences.dnn_dom RegisterClientReference(objPage, ClientNamespaceReferences.dnn) Case ClientNamespaceReferences.dnn_dom_positioning - RegisterClientReference(objPage, ClientNamespaceReferences.dnn) - ClientResourceManager.RegisterScript(objPage, ScriptPath & "dnn.dom.positioning.js") + RegisterClientReference(objPage, ClientNamespaceReferences.dnn) + controller.CreateScript().FromSrc(ScriptPath & "dnn.dom.positioning.js").Register() Case ClientNamespaceReferences.dnn_xml - RegisterClientReference(objPage, ClientNamespaceReferences.dnn) - ClientResourceManager.RegisterScript(objPage, ScriptPath & "dnn.xml.js", FileOrder.Js.DnnXml) + RegisterClientReference(objPage, ClientNamespaceReferences.dnn) + controller.CreateScript().FromSrc(ScriptPath & "dnn.xml.js").SetPriority(Abstractions.ClientResources.FileOrder.Js.DnnXml).Register() - If BrowserSupportsFunctionality(ClientFunctionality.XMLJS) Then - ClientResourceManager.RegisterScript(objPage, ScriptPath & "dnn.xml.jsparser.js", FileOrder.Js.DnnXmlJsParser) - End If + If BrowserSupportsFunctionality(ClientFunctionality.XMLJS) Then + controller.CreateScript().FromSrc(ScriptPath & "dnn.xml.jsparser.js").SetPriority(Abstractions.ClientResources.FileOrder.Js.DnnXmlJsParser).Register() + End If Case ClientNamespaceReferences.dnn_xmlhttp - RegisterClientReference(objPage, ClientNamespaceReferences.dnn) - ClientResourceManager.RegisterScript(objPage, ScriptPath & "dnn.xmlhttp.js", FileOrder.Js.DnnXmlHttp) + RegisterClientReference(objPage, ClientNamespaceReferences.dnn) + controller.CreateScript().FromSrc(ScriptPath & "dnn.xmlhttp.js").SetPriority(Abstractions.ClientResources.FileOrder.Js.DnnXmlHttp).Register() - If BrowserSupportsFunctionality(ClientFunctionality.XMLHTTPJS) Then - ClientResourceManager.RegisterScript(objPage, ScriptPath & "dnn.xmlhttp.jsxmlhttprequest.js", FileOrder.Js.DnnXmlHttpJsXmlHttpRequest) - End If + If BrowserSupportsFunctionality(ClientFunctionality.XMLHTTPJS) Then + controller.CreateScript().FromSrc(ScriptPath & "dnn.xmlhttp.jsxmlhttprequest.js").SetPriority(Abstractions.ClientResources.FileOrder.Js.DnnXmlHttpJsXmlHttpRequest).Register() + End If Case ClientNamespaceReferences.dnn_motion - RegisterClientReference(objPage, ClientNamespaceReferences.dnn_dom_positioning) - ClientResourceManager.RegisterScript(objPage, ScriptPath & "dnn.motion.js") + RegisterClientReference(objPage, ClientNamespaceReferences.dnn_dom_positioning) + controller.CreateScript().FromSrc(ScriptPath & "dnn.motion.js").Register() End Select End Sub @@ -860,7 +862,8 @@ Namespace DotNetNuke.UI.Utilities If BrowserSupportsFunctionality(ClientFunctionality.DHTML) Then RegisterClientReference(objPage, ClientNamespaceReferences.dnn_dom) - ClientResourceManager.RegisterScript(objPage, ScriptPath & "dnn.util.tablereorder.js") + Dim controller As IClientResourcesController = GetClientResourcesController(objPage) + controller.CreateScript().FromSrc(ScriptPath & "dnn.util.tablereorder.js").Register() AddAttribute(objButton, "onclick", "if (dnn.util.tableReorderMove(this," & CInt(blnUp) & ",'" & strKey & "')) return false;") Dim objParent As Control = objButton.Parent @@ -1085,6 +1088,19 @@ Namespace DotNetNuke.UI.Utilities #End Region + Friend Shared Function GetClientResourcesController(ByVal page As Page) As IClientResourcesController + Dim serviceProvider As IServiceProvider = GetCurrentServiceProvider(page.Request.RequestContext.HttpContext) + Return serviceProvider.GetRequiredService(Of IClientResourcesController)() + End Function + + Friend Shared Function GetCurrentServiceProvider(ByVal context As HttpContextBase) As IServiceProvider + Return GetScope(context.Items).ServiceProvider + End Function + + Friend Shared Function GetScope(ByVal httpContextItems As IDictionary) As IServiceScope + Return TryCast(httpContextItems(GetType(IServiceScope)), IServiceScope) + End Function + End Class Namespace Animation diff --git a/DNN Platform/DotNetNuke.WebUtility/DotNetNuke.WebUtility.vbproj b/DNN Platform/DotNetNuke.WebUtility/DotNetNuke.WebUtility.vbproj index 642c1f1233a..954d2167c0a 100644 --- a/DNN Platform/DotNetNuke.WebUtility/DotNetNuke.WebUtility.vbproj +++ b/DNN Platform/DotNetNuke.WebUtility/DotNetNuke.WebUtility.vbproj @@ -87,6 +87,12 @@ ..\DotNetNuke.Web.Client\bin\DotNetNuke.Web.Client.dll + + ..\..\packages\Microsoft.Extensions.DependencyInjection.8.0.0\lib\net462\Microsoft.Extensions.DependencyInjection.dll + + + ..\..\packages\Microsoft.Extensions.DependencyInjection.Abstractions.8.0.0\lib\net462\Microsoft.Extensions.DependencyInjection.Abstractions.dll + System @@ -178,6 +184,10 @@ {6928A9B1-F88A-4581-A132-D3EB38669BB0} DotNetNuke.Abstractions + + {039bafbd-e2db-40c4-b565-c27467d9b5e1} + DotNetNuke.Web.Client.ResourceManager + diff --git a/DNN Platform/Library/DotNetNuke.Library.csproj b/DNN Platform/Library/DotNetNuke.Library.csproj index bc55aa72331..98f4474201c 100644 --- a/DNN Platform/Library/DotNetNuke.Library.csproj +++ b/DNN Platform/Library/DotNetNuke.Library.csproj @@ -752,6 +752,8 @@ + + diff --git a/DNN Platform/Library/Properties/AssemblyInfo.cs b/DNN Platform/Library/Properties/AssemblyInfo.cs index d1a27d0f4fb..a92c00e65a9 100644 --- a/DNN Platform/Library/Properties/AssemblyInfo.cs +++ b/DNN Platform/Library/Properties/AssemblyInfo.cs @@ -48,6 +48,7 @@ [assembly: InternalsVisibleTo("DotNetNuke.Modules.Groups")] // Once Globals is refactored to Dependency Injection we should be able to remove this [assembly: InternalsVisibleTo("DotNetNuke.Modules.Journal")] // Once Globals is refactored to Dependency Injection we should be able to remove this [assembly: InternalsVisibleTo("DotNetNuke.Modules.RazorHost")] // Once Globals is refactored to Dependency Injection we should be able to remove this +[assembly: InternalsVisibleTo("DotNetNuke.Modules.CoreMessaging")] // Once Globals is refactored to Dependency Injection we should be able to remove this [assembly: InternalsVisibleTo("DotNetNuke.Website")] // Once Globals is refactored to Dependency Injection we should be able to remove this [assembly: InternalsVisibleTo("Dnn.PersonaBar.ConfigConsole.Tests")] // Once Globals is refactored to Dependency Injection we should be able to remove this [assembly: InternalsVisibleTo("Dnn.PersonaBar.Pages.Tests")] // Once Globals is refactored to Dependency Injection we should be able to remove this diff --git a/DNN Platform/Library/Services/ClientDependency/DependencyController.cs b/DNN Platform/Library/Services/ClientDependency/DependencyController.cs new file mode 100644 index 00000000000..022296a6af0 --- /dev/null +++ b/DNN Platform/Library/Services/ClientDependency/DependencyController.cs @@ -0,0 +1,34 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information + +namespace DotNetNuke.Services.ClientDependency +{ + using System; + using System.Collections; + using System.Web; + using System.Web.UI; + + using DotNetNuke.Abstractions.ClientResources; + using Microsoft.Extensions.DependencyInjection; + + internal class DependencyController + { + internal static IClientResourcesController GetClientResourcesController(Page page) + { + var serviceProvider = GetCurrentServiceProvider(page.Request.RequestContext.HttpContext); + return serviceProvider.GetRequiredService(); + } + + internal static IServiceProvider GetCurrentServiceProvider(HttpContextBase context) + { + return GetScope(context.Items).ServiceProvider; + + // Copy of DotNetNuke.Common.Extensions.HttpContextDependencyInjectionExtensions.GetScope + static IServiceScope GetScope(IDictionary httpContextItems) + { + return httpContextItems[typeof(IServiceScope)] as IServiceScope; + } + } + } +} diff --git a/DNN Platform/Library/Services/ClientDependency/Extensions.cs b/DNN Platform/Library/Services/ClientDependency/Extensions.cs new file mode 100644 index 00000000000..d0c174dee1e --- /dev/null +++ b/DNN Platform/Library/Services/ClientDependency/Extensions.cs @@ -0,0 +1,172 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information + +namespace DotNetNuke.Services.ClientDependency +{ + using System.Web; + + using DotNetNuke.Abstractions.ClientResources; + using DotNetNuke.Web.Client.ResourceManager; + + public static class Extensions + { + /// + /// Registers a font resource by its path. + /// + /// The to extend. + /// The path to the font resource to register. + /// Whether to check if the script already exists before registering. + public static void RegisterFont(this IClientResourcesController controller, string fontPath, bool checkIfExists = false) + { + if (controller == null) + { + throw new System.ArgumentNullException(nameof(controller)); + } + + if (string.IsNullOrEmpty(fontPath)) + { + throw new System.ArgumentException("Value cannot be null or empty.", nameof(fontPath)); + } + + if (checkIfExists) + { + var physicalPath = HttpContext.Current.Server.MapPath(fontPath); + if (!System.IO.File.Exists(physicalPath)) + { + return; + } + } + + controller.CreateFont().FromSrc(fontPath).Register(); + } + + /// + /// Registers a script resource by its path. + /// + /// The to extend. + /// The path to the script resource to register. + /// Whether to check if the script already exists before registering. + public static void RegisterScript(this IClientResourcesController controller, string scriptPath, bool checkIfExists = false) + { + if (controller == null) + { + throw new System.ArgumentNullException(nameof(controller)); + } + + if (string.IsNullOrEmpty(scriptPath)) + { + throw new System.ArgumentException("Value cannot be null or empty.", nameof(scriptPath)); + } + + if (checkIfExists) + { + var physicalPath = HttpContext.Current.Server.MapPath(scriptPath); + if (!System.IO.File.Exists(physicalPath)) + { + return; + } + } + + controller.CreateScript().FromSrc(scriptPath).Register(); + } + + /// + /// Registers a script resource by its path. + /// + /// The to extend. + /// The path to the script resource to register. + /// The priority for loading the script. + /// Whether to check if the script already exists before registering. + public static void RegisterScript(this IClientResourcesController controller, string scriptPath, FileOrder.Js priority, bool checkIfExists = false) + { + if (controller == null) + { + throw new System.ArgumentNullException(nameof(controller)); + } + + if (string.IsNullOrEmpty(scriptPath)) + { + throw new System.ArgumentException("Value cannot be null or empty.", nameof(scriptPath)); + } + + if (checkIfExists) + { + var physicalPath = HttpContext.Current.Server.MapPath(scriptPath); + if (!System.IO.File.Exists(physicalPath)) + { + return; + } + } + + controller.CreateScript() + .FromSrc(scriptPath) + .SetPriority((int)priority) + .Register(); + } + + /// + /// Registers a stylesheet resource by its path. + /// + /// The to extend. + /// The path to the stylesheet resource to register. + /// Whether to check if the script already exists before registering. + public static void RegisterStylesheet(this IClientResourcesController controller, string stylesheetPath, bool checkIfExists = false) + { + if (controller == null) + { + throw new System.ArgumentNullException(nameof(controller)); + } + + if (string.IsNullOrEmpty(stylesheetPath)) + { + throw new System.ArgumentException("Value cannot be null or empty.", nameof(stylesheetPath)); + } + + if (checkIfExists) + { + var physicalPath = HttpContext.Current.Server.MapPath(stylesheetPath); + if (!System.IO.File.Exists(physicalPath)) + { + return; + } + } + + controller.CreateStylesheet().FromSrc(stylesheetPath).Register(); + } + + /// + /// Registers a stylesheet resource by its path. + /// + /// The to extend. + /// The path to the stylesheet resource to register. + /// The priority for loading the stylesheet. + /// Whether to check if the script already exists before registering. + public static void RegisterStylesheet(this IClientResourcesController controller, string stylesheetPath, FileOrder.Css priority, bool checkIfExists = false) + { + if (controller == null) + { + throw new System.ArgumentNullException(nameof(controller)); + } + + if (string.IsNullOrEmpty(stylesheetPath)) + { + throw new System.ArgumentException("Value cannot be null or empty.", nameof(stylesheetPath)); + } + + if (checkIfExists) + { + var physicalPath = HttpContext.Current.Server.MapPath(stylesheetPath); + if (!System.IO.File.Exists(physicalPath)) + { + return; + } + } + + controller.CreateStylesheet() + .FromSrc(stylesheetPath) + .SetPriority((int)priority) + .Register(); + } + } +} diff --git a/DNN Platform/Library/UI/Containers/Container.cs b/DNN Platform/Library/UI/Containers/Container.cs index e48b888a125..77a55a8c9d4 100644 --- a/DNN Platform/Library/UI/Containers/Container.cs +++ b/DNN Platform/Library/UI/Containers/Container.cs @@ -9,6 +9,7 @@ namespace DotNetNuke.UI.Containers using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; + using DotNetNuke.Abstractions.ClientResources; using DotNetNuke.Application; using DotNetNuke.Collections.Internal; using DotNetNuke.Common; @@ -19,22 +20,30 @@ namespace DotNetNuke.UI.Containers using DotNetNuke.Framework.JavaScriptLibraries; using DotNetNuke.Instrumentation; using DotNetNuke.Security.Permissions; + using DotNetNuke.Services.ClientDependency; using DotNetNuke.Services.Localization; using DotNetNuke.UI.Containers.EventListeners; using DotNetNuke.UI.Modules; using DotNetNuke.UI.Skins; using DotNetNuke.UI.WebControls; - using DotNetNuke.Web.Client; - using DotNetNuke.Web.Client.ClientResourceManagement; + using Microsoft.Extensions.DependencyInjection; /// Container is the base for the Containers. public class Container : UserControl { private readonly ILog tracelLogger = LoggerSource.Instance.GetLogger("DNN.Trace"); + private readonly IClientResourcesController clientResourcesController; private HtmlContainerControl contentPane; private ModuleInfo moduleConfiguration; private ModuleHost moduleHost; + /// Initializes a new instance of the class. + /// The client resources controller. + public Container(IClientResourcesController clientResourcesController) + { + this.clientResourcesController = clientResourcesController ?? Globals.GetCurrentServiceProvider().GetRequiredService(); + } + /// Gets the ModuleControl object that this container is displaying. /// A ModuleHost object. public IModuleControl ModuleControl @@ -314,7 +323,7 @@ private void ProcessModule() this.ContentPane.Controls.Add(this.LoadControl(this.PortalSettings.DefaultModuleActionMenu)); // register admin.css - ClientResourceManager.RegisterAdminStylesheet(this.Page, Globals.HostPath + "admin.css"); + this.clientResourcesController.RegisterStylesheet(Globals.HostPath + "admin.css", FileOrder.Css.AdminCss, true); } // Process Module Header @@ -354,8 +363,8 @@ private void ProcessModule() /// private void ProcessStylesheets(bool includeModuleCss) { - ClientResourceManager.RegisterStyleSheet(this.Page, this.ContainerPath + "container.css", FileOrder.Css.ContainerCss); - ClientResourceManager.RegisterStyleSheet(this.Page, this.ContainerSrc.Replace(".ascx", ".css"), FileOrder.Css.SpecificContainerCss); + this.clientResourcesController.RegisterStylesheet(this.ContainerPath + "container.css", FileOrder.Css.ContainerCss, true); + this.clientResourcesController.RegisterStylesheet(this.ContainerSrc.Replace(".ascx", ".css"), FileOrder.Css.SpecificContainerCss, true); // process the base class module properties if (includeModuleCss) @@ -375,14 +384,14 @@ private void ProcessStylesheets(bool includeModuleCss) stylesheet = Globals.ApplicationPath + "/DesktopModules/" + folderName.Replace("\\", "/") + "/module.css"; } - ClientResourceManager.RegisterStyleSheet(this.Page, stylesheet, FileOrder.Css.ModuleCss); + this.clientResourcesController.RegisterStylesheet(stylesheet, FileOrder.Css.ModuleCss, true); } var ix = controlSrc.LastIndexOf("/", StringComparison.Ordinal); if (ix >= 0) { stylesheet = Globals.ApplicationPath + "/" + controlSrc.Substring(0, ix + 1) + "module.css"; - ClientResourceManager.RegisterStyleSheet(this.Page, stylesheet, FileOrder.Css.ModuleCss); + this.clientResourcesController.RegisterStylesheet(stylesheet, FileOrder.Css.ModuleCss, true); } } } diff --git a/DNN Platform/Modules/CoreMessaging/Subscriptions.ascx.cs b/DNN Platform/Modules/CoreMessaging/Subscriptions.ascx.cs index a7c7917eed9..176c0a61406 100644 --- a/DNN Platform/Modules/CoreMessaging/Subscriptions.ascx.cs +++ b/DNN Platform/Modules/CoreMessaging/Subscriptions.ascx.cs @@ -13,6 +13,7 @@ namespace DotNetNuke.Modules.CoreMessaging using System.Web.Configuration; using System.Web.UI; + using DotNetNuke.Abstractions.ClientResources; using DotNetNuke.Common; using DotNetNuke.Common.Utilities; using DotNetNuke.Entities.Modules; @@ -20,15 +21,24 @@ namespace DotNetNuke.Modules.CoreMessaging using DotNetNuke.Entities.Users; using DotNetNuke.Framework; using DotNetNuke.Services.Authentication; + using DotNetNuke.Services.ClientDependency; using DotNetNuke.Services.Localization; using DotNetNuke.Services.Social.Messaging; using DotNetNuke.UI.Modules; - using DotNetNuke.Web.Client.ClientResourceManagement; + using Microsoft.Extensions.DependencyInjection; /// Implementes the logic of the Subscription view. public partial class Subscriptions : UserControl { private const string SharedResources = "~/DesktopModules/CoreMessaging/App_LocalResources/SharedResources.resx"; + private readonly IClientResourcesController clientResourcesController; + + /// Initializes a new instance of the class. + /// The client resources controller. + public Subscriptions(IClientResourcesController clientResourcesController) + { + this.clientResourcesController = clientResourcesController ?? Globals.GetCurrentServiceProvider().GetRequiredService(); + } /// Gets or sets the module context. public ModuleInstanceContext ModuleContext { get; set; } @@ -80,10 +90,10 @@ protected override void OnLoad(EventArgs e) if (this.Request.IsAuthenticated) { - ClientResourceManager.RegisterScript(this.Page, "~/DesktopModules/CoreMessaging/Scripts/LocalizationController.js"); - ClientResourceManager.RegisterScript(this.Page, "~/DesktopModules/CoreMessaging/Scripts/SubscriptionsViewModel.js"); - ClientResourceManager.RegisterScript(this.Page, "~/DesktopModules/CoreMessaging/Scripts/Subscription.js"); - ClientResourceManager.RegisterStyleSheet(this.Page, "~/DesktopModules/CoreMessaging/subscriptions.css"); + this.clientResourcesController.RegisterScript("~/DesktopModules/CoreMessaging/Scripts/LocalizationController.js"); + this.clientResourcesController.RegisterScript("~/DesktopModules/CoreMessaging/Scripts/SubscriptionsViewModel.js"); + this.clientResourcesController.RegisterScript("~/DesktopModules/CoreMessaging/Scripts/Subscription.js"); + this.clientResourcesController.RegisterStylesheet("~/DesktopModules/CoreMessaging/subscriptions.css"); } else { diff --git a/DNN Platform/Modules/CoreMessaging/View.ascx.cs b/DNN Platform/Modules/CoreMessaging/View.ascx.cs index 8d2719d28ce..8d2108560f3 100644 --- a/DNN Platform/Modules/CoreMessaging/View.ascx.cs +++ b/DNN Platform/Modules/CoreMessaging/View.ascx.cs @@ -7,6 +7,7 @@ namespace DotNetNuke.Modules.CoreMessaging using System.Collections.Generic; using System.Web.UI; + using DotNetNuke.Abstractions.ClientResources; using DotNetNuke.Common; using DotNetNuke.Common.Utilities; using DotNetNuke.Entities.Modules; @@ -14,9 +15,9 @@ namespace DotNetNuke.Modules.CoreMessaging using DotNetNuke.Framework; using DotNetNuke.Framework.JavaScriptLibraries; using DotNetNuke.Security.Permissions; + using DotNetNuke.Services.ClientDependency; using DotNetNuke.Services.Localization; using DotNetNuke.UI.Skins.Controls; - using DotNetNuke.Web.Client.ClientResourceManagement; using Microsoft.Extensions.DependencyInjection; @@ -25,11 +26,12 @@ public partial class View : PortalModuleBase { private readonly IJavaScriptLibraryHelper javaScript; private readonly IPortalController portalController; + private readonly IClientResourcesController clientResourcesController; /// Initializes a new instance of the class. [Obsolete("Deprecated in DotNetNuke 10.0.2. Please use overload with IPortalController. Scheduled removal in v12.0.0.")] public View() - : this(null, null) + : this(null, null, null) { } @@ -37,17 +39,19 @@ public View() /// The JavaScript library helper. [Obsolete("Deprecated in DotNetNuke 10.0.2. Please use overload with IPortalController. Scheduled removal in v12.0.0.")] public View(IJavaScriptLibraryHelper javaScript) - : this(javaScript, null) + : this(javaScript, null, null) { } /// Initializes a new instance of the class. /// The JavaScript library helper. /// The portal controller. - public View(IJavaScriptLibraryHelper javaScript, IPortalController portalController) + /// The client resources controller. + public View(IJavaScriptLibraryHelper javaScript, IPortalController portalController, IClientResourcesController clientResourcesController) { this.javaScript = javaScript ?? this.DependencyProvider.GetRequiredService(); this.portalController = portalController ?? this.DependencyProvider.GetRequiredService(); + this.clientResourcesController = clientResourcesController ?? this.DependencyProvider.GetRequiredService(); } /// Gets the user id from the request parameters. @@ -106,7 +110,7 @@ protected override void OnInit(EventArgs e) ServicesFramework.Instance.RequestAjaxAntiForgerySupport(); this.javaScript.RequestRegistration(CommonJs.DnnPlugins); this.javaScript.RequestRegistration(CommonJs.Knockout); - ClientResourceManager.RegisterScript(this.Page, "~/DesktopModules/CoreMessaging/Scripts/CoreMessaging.js"); + this.clientResourcesController.RegisterScript("~/DesktopModules/CoreMessaging/Scripts/CoreMessaging.js"); this.javaScript.RequestRegistration(CommonJs.jQueryFileUpload); this.AddIe7StyleSheet(); diff --git a/DNN Platform/Website/Default.aspx.cs b/DNN Platform/Website/Default.aspx.cs index baff645e337..c6dd59bf066 100644 --- a/DNN Platform/Website/Default.aspx.cs +++ b/DNN Platform/Website/Default.aspx.cs @@ -26,6 +26,7 @@ namespace DotNetNuke.Framework using DotNetNuke.Framework.JavaScriptLibraries; using DotNetNuke.Instrumentation; using DotNetNuke.Security.Permissions; + using DotNetNuke.Services.ClientDependency; using DotNetNuke.Services.Exceptions; using DotNetNuke.Services.FileSystem; using DotNetNuke.Services.Installer.Blocker; @@ -37,8 +38,8 @@ namespace DotNetNuke.Framework using DotNetNuke.UI.Skins; using DotNetNuke.UI.Skins.Controls; using DotNetNuke.UI.Utilities; - using DotNetNuke.Web.Client; using DotNetNuke.Web.Client.ClientResourceManagement; + using DotNetNuke.Web.Client.ResourceManager; using Microsoft.Extensions.DependencyInjection; using DataCache = DotNetNuke.Common.Utilities.DataCache; @@ -295,14 +296,19 @@ protected override void OnInit(EventArgs e) } // add CSS links - ClientResourceManager.RegisterDefaultStylesheet(this, string.Concat(Globals.ApplicationPath, "/Resources/Shared/stylesheets/dnndefault/10.0.0/default.css")); - ClientResourceManager.RegisterStyleSheet(this, string.Concat(ctlSkin.SkinPath, "skin.css"), Web.Client.FileOrder.Css.SkinCss); - ClientResourceManager.RegisterStyleSheet(this, ctlSkin.SkinSrc.Replace(".ascx", ".css"), Web.Client.FileOrder.Css.SpecificSkinCss); + this.clientResourcesController.CreateStylesheet() + .FromSrc("~/Resources/Shared/stylesheets/dnndefault/10.0.0/default.css") + .SetNameAndVersion("dnndefault", "10.0.0", false) + .SetPriority((int)FileOrder.Css.DefaultCss) + .Register(); + + this.clientResourcesController.RegisterStylesheet(string.Concat(ctlSkin.SkinPath, "skin.css"), FileOrder.Css.SkinCss, true); + this.clientResourcesController.RegisterStylesheet(ctlSkin.SkinSrc.Replace(".ascx", ".css"), FileOrder.Css.SpecificSkinCss, true); // add skin to page this.SkinPlaceHolder.Controls.Add(ctlSkin); - ClientResourceManager.RegisterStyleSheet(this, string.Concat(this.PortalSettings.HomeDirectory, "portal.css"), Web.Client.FileOrder.Css.PortalCss); + this.clientResourcesController.RegisterStylesheet(string.Concat(this.PortalSettings.HomeDirectory, "portal.css"), FileOrder.Css.PortalCss, true); // add Favicon this.ManageFavicon(); @@ -637,7 +643,7 @@ private void InitializePage() // register css variables var cssVariablesStyleSheet = this.GetCssVariablesStylesheet(); - ClientResourceManager.RegisterStyleSheet(this, cssVariablesStyleSheet, Web.Client.FileOrder.Css.DefaultCss); + this.clientResourcesController.RegisterStylesheet(cssVariablesStyleSheet, FileOrder.Css.DefaultCss); // register the custom stylesheet of current page if (this.PortalSettings.ActiveTab.TabSettings.ContainsKey("CustomStylesheet") && !string.IsNullOrEmpty(this.PortalSettings.ActiveTab.TabSettings["CustomStylesheet"].ToString())) @@ -648,11 +654,11 @@ private void InitializePage() var stylesheetFile = this.GetPageStylesheetFileInfo(styleSheet); if (stylesheetFile != null) { - ClientResourceManager.RegisterStyleSheet(this, FileManager.Instance.GetUrl(stylesheetFile)); + this.clientResourcesController.RegisterStylesheet(FileManager.Instance.GetUrl(stylesheetFile)); } else { - ClientResourceManager.RegisterStyleSheet(this, styleSheet); + this.clientResourcesController.RegisterStylesheet(styleSheet); } } @@ -664,9 +670,9 @@ private void InitializePage() ClientAPI.RegisterClientVariable(this, "cc_message", Localization.GetString("cc_message", Localization.GlobalResourceFile), true); ClientAPI.RegisterClientVariable(this, "cc_dismiss", Localization.GetString("cc_dismiss", Localization.GlobalResourceFile), true); ClientAPI.RegisterClientVariable(this, "cc_link", Localization.GetString("cc_link", Localization.GlobalResourceFile), true); - ClientResourceManager.RegisterScript(this.Page, "~/Resources/Shared/Components/CookieConsent/cookieconsent.min.js", Web.Client.FileOrder.Js.DnnControls); - ClientResourceManager.RegisterStyleSheet(this.Page, "~/Resources/Shared/Components/CookieConsent/cookieconsent.min.css", Web.Client.FileOrder.Css.ResourceCss); - ClientResourceManager.RegisterScript(this.Page, "~/js/dnn.cookieconsent.js", Web.Client.FileOrder.Js.DefaultPriority); + this.clientResourcesController.RegisterScript("~/Resources/Shared/Components/CookieConsent/cookieconsent.min.js", FileOrder.Js.DnnControls); + this.clientResourcesController.RegisterStylesheet("~/Resources/Shared/Components/CookieConsent/cookieconsent.min.css", FileOrder.Css.ResourceCss); + this.clientResourcesController.RegisterStylesheet("~/js/dnn.cookieconsent.js"); } } @@ -736,7 +742,7 @@ private void LoadPopupScriptsIfNeeded() var popupFilePath = HttpContext.Current.IsDebuggingEnabled ? "~/js/Debug/dnn.modalpopup.js" : "~/js/dnn.modalpopup.js"; - ClientResourceManager.RegisterScript(this, popupFilePath, Web.Client.FileOrder.Js.DnnModalPopup); + this.clientResourcesController.RegisterScript(popupFilePath, FileOrder.Js.DnnModalPopup); } } diff --git a/DNN Platform/Website/DesktopModules/Admin/SearchResults/SearchResults.ascx.cs b/DNN Platform/Website/DesktopModules/Admin/SearchResults/SearchResults.ascx.cs index 80f6b0751e8..c2a6b6ac069 100644 --- a/DNN Platform/Website/DesktopModules/Admin/SearchResults/SearchResults.ascx.cs +++ b/DNN Platform/Website/DesktopModules/Admin/SearchResults/SearchResults.ascx.cs @@ -8,17 +8,16 @@ namespace DotNetNuke.Modules.SearchResults using System.Linq; using System.Text.RegularExpressions; using System.Threading; - using System.Web; using System.Web.UI.WebControls; + using DotNetNuke.Abstractions.ClientResources; using DotNetNuke.Common; using DotNetNuke.Entities.Modules; using DotNetNuke.Framework; using DotNetNuke.Framework.JavaScriptLibraries; + using DotNetNuke.Services.ClientDependency; using DotNetNuke.Services.Localization; using DotNetNuke.Services.Search.Internals; - using DotNetNuke.Web.Client; - using DotNetNuke.Web.Client.ClientResourceManagement; using Microsoft.Extensions.DependencyInjection; @@ -32,20 +31,23 @@ public partial class SearchResults : PortalModuleBase private const string MyFileName = "SearchResults.ascx"; private readonly IJavaScriptLibraryHelper javaScript; + private readonly IClientResourcesController clientResourcesController; private IList searchContentSources; private IList searchPortalIds; /// Initializes a new instance of the class. public SearchResults() - : this(null) + : this(null, null) { } /// Initializes a new instance of the class. /// The JavaScript library helper. - public SearchResults(IJavaScriptLibraryHelper javaScript) + /// The client resources controller. + public SearchResults(IJavaScriptLibraryHelper javaScript, IClientResourcesController clientResourcesController) { this.javaScript = javaScript ?? Globals.GetCurrentServiceProvider().GetRequiredService(); + this.clientResourcesController = clientResourcesController ?? Globals.GetCurrentServiceProvider().GetRequiredService(); } protected string SearchTerm @@ -360,9 +362,9 @@ protected override void OnLoad(EventArgs e) ServicesFramework.Instance.RequestAjaxAntiForgerySupport(); this.javaScript.RequestRegistration(CommonJs.DnnPlugins); - ClientResourceManager.RegisterScript(this.Page, "~/Resources/Shared/scripts/dnn.searchBox.js"); - ClientResourceManager.RegisterStyleSheet(this.Page, "~/Resources/Shared/stylesheets/dnn.searchBox.css", FileOrder.Css.ModuleCss); - ClientResourceManager.RegisterScript(this.Page, "~/DesktopModules/admin/SearchResults/dnn.searchResult.js"); + this.clientResourcesController.RegisterScript("~/Resources/Shared/scripts/dnn.searchBox.js"); + this.clientResourcesController.RegisterStylesheet("~/Resources/Shared/stylesheets/dnn.searchBox.css", Abstractions.ClientResources.FileOrder.Css.ModuleCss); + this.clientResourcesController.RegisterScript("~/DesktopModules/admin/SearchResults/dnn.searchResult.js"); this.CultureCode = Thread.CurrentThread.CurrentCulture.ToString(); diff --git a/DNN Platform/Website/DesktopModules/Admin/Security/Password.ascx.cs b/DNN Platform/Website/DesktopModules/Admin/Security/Password.ascx.cs index d7dc705df6b..5db9ff842f9 100644 --- a/DNN Platform/Website/DesktopModules/Admin/Security/Password.ascx.cs +++ b/DNN Platform/Website/DesktopModules/Admin/Security/Password.ascx.cs @@ -9,6 +9,7 @@ namespace DotNetNuke.Modules.Admin.Users using System.Web.UI; using DotNetNuke.Abstractions.Application; + using DotNetNuke.Abstractions.ClientResources; using DotNetNuke.Abstractions.Logging; using DotNetNuke.Common.Utilities; using DotNetNuke.Entities.Modules; @@ -17,12 +18,11 @@ namespace DotNetNuke.Modules.Admin.Users using DotNetNuke.Framework.JavaScriptLibraries; using DotNetNuke.Instrumentation; using DotNetNuke.Security.Membership; + using DotNetNuke.Services.ClientDependency; using DotNetNuke.Services.Localization; using DotNetNuke.Services.Log.EventLog; using DotNetNuke.Services.Mail; using DotNetNuke.UI.Skins.Controls; - using DotNetNuke.Web.Client; - using DotNetNuke.Web.Client.ClientResourceManagement; using DotNetNuke.Web.UI.WebControls; using Microsoft.Extensions.DependencyInjection; @@ -34,10 +34,11 @@ public partial class Password : UserModuleBase private readonly IEventLogger eventLogger; private readonly IHostSettings hostSettings; private readonly IJavaScriptLibraryHelper javaScript; + private readonly IClientResourcesController clientResourcesController; /// Initializes a new instance of the class. public Password() - : this(null, null, null) + : this(null, null, null, null) { } @@ -45,11 +46,13 @@ public Password() /// The event logger. /// The host settings. /// The JavaScript library helper. - public Password(IEventLogger eventLogger, IHostSettings hostSettings, IJavaScriptLibraryHelper javaScript) + /// The client resources controller. + public Password(IEventLogger eventLogger, IHostSettings hostSettings, IJavaScriptLibraryHelper javaScript, IClientResourcesController clientResourcesController) { this.eventLogger = eventLogger ?? Common.Globals.GetCurrentServiceProvider().GetRequiredService(); this.hostSettings = hostSettings ?? Common.Globals.GetCurrentServiceProvider().GetRequiredService(); this.javaScript = javaScript ?? Common.Globals.GetCurrentServiceProvider().GetRequiredService(); + this.clientResourcesController = clientResourcesController ?? Common.Globals.GetCurrentServiceProvider().GetRequiredService(); } /// A function which handles an event with . @@ -252,12 +255,12 @@ protected override void OnLoad(EventArgs e) /// protected override void OnPreRender(EventArgs e) { - ClientResourceManager.RegisterScript(this.Page, "~/Resources/Shared/scripts/dnn.jquery.extensions.js"); - ClientResourceManager.RegisterScript(this.Page, "~/Resources/Shared/scripts/dnn.jquery.tooltip.js"); - ClientResourceManager.RegisterScript(this.Page, "~/Resources/Shared/scripts/dnn.PasswordStrength.js"); - ClientResourceManager.RegisterScript(this.Page, "~/DesktopModules/Admin/Security/Scripts/dnn.PasswordComparer.js"); + this.clientResourcesController.RegisterScript("~/Resources/Shared/scripts/dnn.jquery.extensions.js"); + this.clientResourcesController.RegisterScript("~/Resources/Shared/scripts/dnn.jquery.tooltip.js"); + this.clientResourcesController.RegisterScript("~/Resources/Shared/scripts/dnn.PasswordStrength.js"); + this.clientResourcesController.RegisterScript("~/DesktopModules/Admin/Security/Scripts/dnn.PasswordComparer.js"); - ClientResourceManager.RegisterStyleSheet(this.Page, "~/Resources/Shared/stylesheets/dnn.PasswordStrength.css", FileOrder.Css.ResourceCss); + this.clientResourcesController.RegisterStylesheet("~/Resources/Shared/stylesheets/dnn.PasswordStrength.css", FileOrder.Css.ResourceCss); this.javaScript.RequestRegistration(CommonJs.DnnPlugins); diff --git a/DNN Platform/Website/DesktopModules/Admin/Security/Register.ascx.cs b/DNN Platform/Website/DesktopModules/Admin/Security/Register.ascx.cs index c0ec012e64a..69c72415558 100644 --- a/DNN Platform/Website/DesktopModules/Admin/Security/Register.ascx.cs +++ b/DNN Platform/Website/DesktopModules/Admin/Security/Register.ascx.cs @@ -16,6 +16,7 @@ namespace DotNetNuke.Modules.Admin.Users using DotNetNuke.Abstractions; using DotNetNuke.Abstractions.Application; + using DotNetNuke.Abstractions.ClientResources; using DotNetNuke.Common; using DotNetNuke.Common.Lists; using DotNetNuke.Common.Utilities; @@ -28,11 +29,11 @@ namespace DotNetNuke.Modules.Admin.Users using DotNetNuke.Security.Membership; using DotNetNuke.Security.Permissions; using DotNetNuke.Services.Authentication; + using DotNetNuke.Services.ClientDependency; using DotNetNuke.Services.Exceptions; using DotNetNuke.Services.Localization; using DotNetNuke.UI.Skins.Controls; using DotNetNuke.UI.WebControls; - using DotNetNuke.Web.Client.ClientResourceManagement; using DotNetNuke.Web.UI.WebControls; using Microsoft.Extensions.DependencyInjection; @@ -48,10 +49,11 @@ public partial class Register : UserUserControlBase private readonly IServiceProvider serviceProvider; private readonly IHostSettings hostSettings; private readonly IJavaScriptLibraryHelper javaScript; + private readonly IClientResourcesController clientResourcesController; /// Initializes a new instance of the class. public Register() - : this(null, null, null, null) + : this(null, null, null, null, null) { } @@ -59,7 +61,7 @@ public Register() /// The navigation manager. /// The service provider. public Register(INavigationManager navigationManager, IServiceProvider serviceProvider) - : this(navigationManager, serviceProvider, null, null) + : this(navigationManager, serviceProvider, null, null, null) { } @@ -68,12 +70,14 @@ public Register(INavigationManager navigationManager, IServiceProvider servicePr /// The service provider. /// The host settings. /// The JavaScript library helper. - public Register(INavigationManager navigationManager, IServiceProvider serviceProvider, IHostSettings hostSettings, IJavaScriptLibraryHelper javaScript) + /// The client resources controller. + public Register(INavigationManager navigationManager, IServiceProvider serviceProvider, IHostSettings hostSettings, IJavaScriptLibraryHelper javaScript, IClientResourcesController clientResourcesController) { this.serviceProvider = serviceProvider ?? Globals.GetCurrentServiceProvider(); this.navigationManager = navigationManager ?? this.serviceProvider.GetRequiredService(); this.hostSettings = hostSettings ?? this.serviceProvider.GetRequiredService(); this.javaScript = javaScript ?? this.serviceProvider.GetRequiredService(); + this.clientResourcesController = clientResourcesController ?? this.serviceProvider.GetRequiredService(); } protected string ExcludeTerms @@ -136,9 +140,9 @@ protected override void OnInit(EventArgs e) this.javaScript.RequestRegistration(CommonJs.DnnPlugins); - ClientResourceManager.RegisterScript(this.Page, "~/Resources/Shared/scripts/dnn.jquery.extensions.js"); - ClientResourceManager.RegisterScript(this.Page, "~/Resources/Shared/scripts/dnn.jquery.tooltip.js"); - ClientResourceManager.RegisterScript(this.Page, "~/DesktopModules/Admin/Security/Scripts/dnn.PasswordComparer.js"); + this.clientResourcesController.RegisterScript("~/Resources/Shared/scripts/dnn.jquery.extensions.js"); + this.clientResourcesController.RegisterScript("~/Resources/Shared/scripts/dnn.jquery.tooltip.js"); + this.clientResourcesController.RegisterScript("~/DesktopModules/Admin/Security/Scripts/dnn.PasswordComparer.js"); if (this.PortalSettings.Registration.RegistrationFormType == 0) { diff --git a/DNN Platform/Website/DesktopModules/Admin/Security/User.ascx.cs b/DNN Platform/Website/DesktopModules/Admin/Security/User.ascx.cs index c8d737d7189..3b9fedcba3e 100644 --- a/DNN Platform/Website/DesktopModules/Admin/Security/User.ascx.cs +++ b/DNN Platform/Website/DesktopModules/Admin/Security/User.ascx.cs @@ -9,6 +9,7 @@ namespace DotNetNuke.Modules.Admin.Users using System.Web.UI; using DotNetNuke.Abstractions.Application; + using DotNetNuke.Abstractions.ClientResources; using DotNetNuke.Common.Utilities; using DotNetNuke.Data; using DotNetNuke.Entities.Modules; @@ -17,10 +18,9 @@ namespace DotNetNuke.Modules.Admin.Users using DotNetNuke.Framework.JavaScriptLibraries; using DotNetNuke.Instrumentation; using DotNetNuke.Security.Membership; + using DotNetNuke.Services.ClientDependency; using DotNetNuke.Services.Localization; using DotNetNuke.UI.Utilities; - using DotNetNuke.Web.Client; - using DotNetNuke.Web.Client.ClientResourceManagement; using DotNetNuke.Web.UI.WebControls; using Microsoft.Extensions.DependencyInjection; @@ -36,11 +36,12 @@ public partial class User : UserUserControlBase private readonly IJavaScriptLibraryHelper javaScript; private readonly IPortalController portalController; private readonly DataProvider dataProvider; + private readonly IClientResourcesController clientResourcesController; /// Initializes a new instance of the class. [Obsolete("Deprecated in DotNetNuke 10.0.2. Please use overload with IPortalController. Scheduled removal in v12.0.0.")] public User() - : this(null, null, null, null) + : this(null, null, null, null, null) { } @@ -48,7 +49,7 @@ public User() /// The host settings. /// The JavaScript library helper. public User(IHostSettings hostSettings, IJavaScriptLibraryHelper javaScript) - : this(hostSettings, javaScript, null, null) + : this(hostSettings, javaScript, null, null, null) { } @@ -57,12 +58,14 @@ public User(IHostSettings hostSettings, IJavaScriptLibraryHelper javaScript) /// The JavaScript library helper. /// The portal controller. /// The data provider. - public User(IHostSettings hostSettings, IJavaScriptLibraryHelper javaScript, IPortalController portalController, DataProvider dataProvider) + /// The client resources controller. + public User(IHostSettings hostSettings, IJavaScriptLibraryHelper javaScript, IPortalController portalController, DataProvider dataProvider, IClientResourcesController clientResourcesController) { this.hostSettings = hostSettings ?? this.DependencyProvider.GetRequiredService(); this.javaScript = javaScript ?? this.DependencyProvider.GetRequiredService(); this.portalController = portalController ?? this.DependencyProvider.GetRequiredService(); this.dataProvider = dataProvider ?? this.DependencyProvider.GetRequiredService(); + this.clientResourcesController = clientResourcesController ?? this.DependencyProvider.GetRequiredService(); } /// Gets a value indicating whether the User is valid. @@ -283,12 +286,12 @@ protected override void OnLoad(EventArgs e) /// protected override void OnPreRender(EventArgs e) { - ClientResourceManager.RegisterScript(this.Page, "~/Resources/Shared/scripts/dnn.jquery.extensions.js"); - ClientResourceManager.RegisterScript(this.Page, "~/Resources/Shared/scripts/dnn.jquery.tooltip.js"); - ClientResourceManager.RegisterScript(this.Page, "~/Resources/Shared/scripts/dnn.PasswordStrength.js"); - ClientResourceManager.RegisterScript(this.Page, "~/DesktopModules/Admin/Security/Scripts/dnn.PasswordComparer.js"); + this.clientResourcesController.RegisterScript("~/Resources/Shared/scripts/dnn.jquery.extensions.js"); + this.clientResourcesController.RegisterScript("~/Resources/Shared/scripts/dnn.jquery.tooltip.js"); + this.clientResourcesController.RegisterScript("~/Resources/Shared/scripts/dnn.PasswordStrength.js"); + this.clientResourcesController.RegisterScript("~/DesktopModules/Admin/Security/Scripts/dnn.PasswordComparer.js"); - ClientResourceManager.RegisterStyleSheet(this.Page, "~/Resources/Shared/stylesheets/dnn.PasswordStrength.css", FileOrder.Css.ResourceCss); + this.clientResourcesController.RegisterStylesheet("~/Resources/Shared/stylesheets/dnn.PasswordStrength.css", FileOrder.Css.ResourceCss); this.javaScript.RequestRegistration(CommonJs.DnnPlugins); diff --git a/DNN Platform/Website/DotNetNuke.Website.csproj b/DNN Platform/Website/DotNetNuke.Website.csproj index b973d03d9ec..337454136d5 100644 --- a/DNN Platform/Website/DotNetNuke.Website.csproj +++ b/DNN Platform/Website/DotNetNuke.Website.csproj @@ -3376,6 +3376,10 @@ {1D5A98BD-F8E0-45F7-B26D-270D9023629D} DotNetNuke.Maintenance + + {039bafbd-e2db-40c4-b565-c27467d9b5e1} + DotNetNuke.Web.Client.ResourceManager + {03e3afa5-ddc9-48fb-a839-ad4282ce237e} DotNetNuke.Web.Client diff --git a/DNN Platform/Website/admin/Menus/ModuleActions/ModuleActions.ascx.cs b/DNN Platform/Website/admin/Menus/ModuleActions/ModuleActions.ascx.cs index fab1f611667..58a10245da1 100644 --- a/DNN Platform/Website/admin/Menus/ModuleActions/ModuleActions.ascx.cs +++ b/DNN Platform/Website/admin/Menus/ModuleActions/ModuleActions.ascx.cs @@ -15,6 +15,7 @@ namespace DotNetNuke.Admin.Containers using System.Web.Script.Serialization; using System.Web.UI; + using DotNetNuke.Abstractions.ClientResources; using DotNetNuke.Collections; using DotNetNuke.Common; using DotNetNuke.Entities.Modules; @@ -24,12 +25,11 @@ namespace DotNetNuke.Admin.Containers using DotNetNuke.Framework; using DotNetNuke.Framework.JavaScriptLibraries; using DotNetNuke.Security; + using DotNetNuke.Services.ClientDependency; using DotNetNuke.Services.Exceptions; using DotNetNuke.Services.Localization; using DotNetNuke.UI.Containers; using DotNetNuke.UI.Modules; - using DotNetNuke.Web.Client; - using DotNetNuke.Web.Client.ClientResourceManagement; using Microsoft.Extensions.DependencyInjection; @@ -39,20 +39,23 @@ public partial class ModuleActions : ActionBase private readonly List validIDs = new List(); private readonly IModuleControlPipeline moduleControlPipeline; private readonly IJavaScriptLibraryHelper javaScript; + private readonly IClientResourcesController clientResourcesController; /// Initializes a new instance of the class. public ModuleActions() - : this(null, null) + : this(null, null, null) { } /// Initializes a new instance of the class. /// The module control pipeline. /// The JavaScript library helper. - public ModuleActions(IModuleControlPipeline moduleControlPipeline, IJavaScriptLibraryHelper javaScript) + /// The client resources controller. + public ModuleActions(IModuleControlPipeline moduleControlPipeline, IJavaScriptLibraryHelper javaScript, IClientResourcesController clientResourcesController) { this.moduleControlPipeline = moduleControlPipeline ?? Globals.GetCurrentServiceProvider().GetRequiredService(); this.javaScript = javaScript ?? Globals.GetCurrentServiceProvider().GetRequiredService(); + this.clientResourcesController = clientResourcesController ?? Globals.GetCurrentServiceProvider().GetRequiredService(); } protected string AdminText @@ -102,9 +105,9 @@ protected override void OnInit(EventArgs e) this.javaScript.RequestRegistration(CommonJs.DnnPlugins); - ClientResourceManager.RegisterStyleSheet(this.Page, "~/admin/menus/ModuleActions/ModuleActions.css", FileOrder.Css.ModuleCss); - ClientResourceManager.RegisterStyleSheet(this.Page, "~/Resources/Shared/stylesheets/dnnicons/css/dnnicon.min.css", FileOrder.Css.ModuleCss); - ClientResourceManager.RegisterScript(this.Page, "~/admin/menus/ModuleActions/ModuleActions.js"); + this.clientResourcesController.RegisterStylesheet("~/admin/menus/ModuleActions/ModuleActions.css", FileOrder.Css.ModuleCss); + this.clientResourcesController.RegisterStylesheet("~/Resources/Shared/stylesheets/dnnicons/css/dnnicon.min.css", FileOrder.Css.ModuleCss); + this.clientResourcesController.RegisterScript("~/admin/menus/ModuleActions/ModuleActions.js"); ServicesFramework.Instance.RequestAjaxAntiForgerySupport(); } @@ -140,7 +143,7 @@ protected override void OnLoad(EventArgs e) ModuleController.Instance.UpdateModuleSetting(this.ModuleContext.ModuleId, "QS_FirstLoad", "False"); } - ClientResourceManager.RegisterScript(this.Page, "~/admin/menus/ModuleActions/dnnQuickSettings.js"); + this.clientResourcesController.RegisterScript("~/admin/menus/ModuleActions/dnnQuickSettings.js"); } if (this.ActionRoot.Visible) diff --git a/DNN Platform/Website/admin/Security/PasswordReset.ascx.cs b/DNN Platform/Website/admin/Security/PasswordReset.ascx.cs index 6d5d8d63e0e..057a8b4cd76 100644 --- a/DNN Platform/Website/admin/Security/PasswordReset.ascx.cs +++ b/DNN Platform/Website/admin/Security/PasswordReset.ascx.cs @@ -9,6 +9,7 @@ namespace DotNetNuke.Modules.Admin.Security using DotNetNuke.Abstractions; using DotNetNuke.Abstractions.Application; + using DotNetNuke.Abstractions.ClientResources; using DotNetNuke.Abstractions.Logging; using DotNetNuke.Common.Utilities; using DotNetNuke.Entities.Modules; @@ -17,12 +18,11 @@ namespace DotNetNuke.Modules.Admin.Security using DotNetNuke.Entities.Users.Membership; using DotNetNuke.Framework.JavaScriptLibraries; using DotNetNuke.Security.Membership; + using DotNetNuke.Services.ClientDependency; using DotNetNuke.Services.Localization; using DotNetNuke.Services.Log.EventLog; using DotNetNuke.Services.UserRequest; using DotNetNuke.UI.Skins.Controls; - using DotNetNuke.Web.Client; - using DotNetNuke.Web.Client.ClientResourceManagement; using DotNetNuke.Web.UI.WebControls; using Microsoft.Extensions.DependencyInjection; @@ -35,13 +35,14 @@ public partial class PasswordReset : UserModuleBase private readonly IHostSettings hostSettings; private readonly IJavaScriptLibraryHelper javaScript; private readonly IPortalController portalController; + private readonly IClientResourcesController clientResourcesController; private string ipAddress; /// Initializes a new instance of the class. [Obsolete("Deprecated in DotNetNuke 10.0.2. Please use overload with IPortalController. Scheduled removal in v12.0.0.")] public PasswordReset() - : this(null, null, null, null, null) + : this(null, null, null, null, null, null) { } @@ -51,13 +52,15 @@ public PasswordReset() /// The host settings. /// The JavaScript library helper. /// The portal controller. - public PasswordReset(INavigationManager navigationManager, IEventLogger eventLogger, IHostSettings hostSettings, IJavaScriptLibraryHelper javaScript, IPortalController portalController) + /// The client resources controller. + public PasswordReset(INavigationManager navigationManager, IEventLogger eventLogger, IHostSettings hostSettings, IJavaScriptLibraryHelper javaScript, IPortalController portalController, IClientResourcesController clientResourcesController) { this.navigationManager = navigationManager ?? this.DependencyProvider.GetRequiredService(); this.eventLogger = eventLogger ?? this.DependencyProvider.GetRequiredService(); this.hostSettings = hostSettings ?? this.DependencyProvider.GetRequiredService(); this.javaScript = javaScript ?? this.DependencyProvider.GetRequiredService(); this.portalController = portalController ?? this.DependencyProvider.GetRequiredService(); + this.clientResourcesController = clientResourcesController ?? this.DependencyProvider.GetRequiredService(); } private string ResetToken @@ -73,12 +76,12 @@ protected override void OnLoad(EventArgs e) this.ipAddress = UserRequestIPAddressController.Instance.GetUserRequestIPAddress(new HttpRequestWrapper(this.Request)); this.javaScript.RequestRegistration(CommonJs.DnnPlugins); - ClientResourceManager.RegisterScript(this.Page, "~/Resources/Shared/scripts/dnn.jquery.extensions.js"); - ClientResourceManager.RegisterScript(this.Page, "~/Resources/Shared/scripts/dnn.jquery.tooltip.js"); - ClientResourceManager.RegisterScript(this.Page, "~/Resources/Shared/scripts/dnn.PasswordStrength.js"); - ClientResourceManager.RegisterScript(this.Page, "~/DesktopModules/Admin/Security/Scripts/dnn.PasswordComparer.js"); + this.clientResourcesController.RegisterScript("~/Resources/Shared/scripts/dnn.jquery.extensions.js"); + this.clientResourcesController.RegisterScript("~/Resources/Shared/scripts/dnn.jquery.tooltip.js"); + this.clientResourcesController.RegisterScript("~/Resources/Shared/scripts/dnn.PasswordStrength.js"); + this.clientResourcesController.RegisterScript("~/DesktopModules/Admin/Security/Scripts/dnn.PasswordComparer.js"); - ClientResourceManager.RegisterStyleSheet(this.Page, "~/Resources/Shared/stylesheets/dnn.PasswordStrength.css", FileOrder.Css.ResourceCss); + this.clientResourcesController.RegisterStylesheet("~/Resources/Shared/stylesheets/dnn.PasswordStrength.css", FileOrder.Css.ResourceCss); if (this.PortalSettings.LoginTabId != -1 && this.PortalSettings.ActiveTab.TabID != this.PortalSettings.LoginTabId) { diff --git a/DNN Platform/Website/admin/Skins/Search.ascx.cs b/DNN Platform/Website/admin/Skins/Search.ascx.cs index 3aa26b0297b..6fa683a8fd7 100644 --- a/DNN Platform/Website/admin/Skins/Search.ascx.cs +++ b/DNN Platform/Website/admin/Skins/Search.ascx.cs @@ -9,16 +9,15 @@ namespace DotNetNuke.UI.Skins.Controls using System.Net; using DotNetNuke.Abstractions; - using DotNetNuke.Abstractions.Application; + using DotNetNuke.Abstractions.ClientResources; using DotNetNuke.Common.Utilities; - using DotNetNuke.Entities.Host; using DotNetNuke.Entities.Icons; using DotNetNuke.Entities.Modules; using DotNetNuke.Framework.JavaScriptLibraries; + using DotNetNuke.Services.ClientDependency; using DotNetNuke.Services.Localization; using DotNetNuke.UI.Utilities; - using DotNetNuke.Web.Client; - using DotNetNuke.Web.Client.ClientResourceManagement; + using DotNetNuke.Web.Client.ResourceManager; using Microsoft.Extensions.DependencyInjection; using Globals = DotNetNuke.Common.Globals; @@ -29,6 +28,7 @@ public partial class Search : SkinObjectBase private const string MyFileName = "Search.ascx"; private readonly INavigationManager navigationManager; + private readonly IClientResourcesController clientResourcesController; private bool enableWildSearch = true; private string siteIconURL; @@ -42,15 +42,17 @@ public partial class Search : SkinObjectBase /// Initializes a new instance of the class. public Search() - : this(null) + : this(null, null) { } /// Initializes a new instance of the class. /// The navigation manager. - public Search(INavigationManager navigationManager) + /// The client resources controller. + public Search(INavigationManager navigationManager, IClientResourcesController clientResourcesController) { this.navigationManager = navigationManager ?? Globals.GetCurrentServiceProvider().GetRequiredService(); + this.clientResourcesController = clientResourcesController ?? Globals.GetCurrentServiceProvider().GetRequiredService(); } public string SeeMoreText @@ -384,8 +386,8 @@ protected override void OnLoad(EventArgs e) base.OnLoad(e); Framework.ServicesFramework.Instance.RequestAjaxAntiForgerySupport(); - ClientResourceManager.RegisterStyleSheet(this.Page, "~/Resources/Search/SearchSkinObjectPreview.css", FileOrder.Css.ModuleCss); - ClientResourceManager.RegisterScript(this.Page, "~/Resources/Search/SearchSkinObjectPreview.js"); + this.clientResourcesController.RegisterStylesheet("~/Resources/Search/SearchSkinObjectPreview.css", FileOrder.Css.ModuleCss); + this.clientResourcesController.RegisterScript("~/Resources/Search/SearchSkinObjectPreview.js"); this.cmdSearch.Click += this.CmdSearchClick; this.cmdSearchNew.Click += this.CmdSearchNewClick; @@ -464,7 +466,7 @@ protected override void OnPreRender(EventArgs e) } JavaScript.RegisterClientReference(this.Page, ClientAPI.ClientNamespaceReferences.dnn); - ClientResourceManager.RegisterScript(this.Page, "~/Resources/Search/Search.js", FileOrder.Js.DefaultPriority, "DnnFormBottomProvider"); + this.clientResourcesController.CreateScript().FromSrc("~/Resources/Search/Search.js").SetPriority((int)FileOrder.Js.DefaultPriority).SetProvider(ClientResourceProviders.DnnFormBottomProvider).Register(); this.txtSearchNew.Attributes.Add("autocomplete", "off"); this.txtSearchNew.Attributes.Add("placeholder", this.PlaceHolderText); diff --git a/DNN Platform/Website/admin/Skins/Toast.ascx.cs b/DNN Platform/Website/admin/Skins/Toast.ascx.cs index a95dfae70b3..7a2f7c678c5 100644 --- a/DNN Platform/Website/admin/Skins/Toast.ascx.cs +++ b/DNN Platform/Website/admin/Skins/Toast.ascx.cs @@ -9,6 +9,7 @@ namespace DotNetNuke.UI.Skins.Controls using System.Xml; using DotNetNuke.Abstractions; + using DotNetNuke.Abstractions.ClientResources; using DotNetNuke.Common; using DotNetNuke.Common.Utilities; using DotNetNuke.Entities.Modules; @@ -17,8 +18,8 @@ namespace DotNetNuke.UI.Skins.Controls using DotNetNuke.Framework; using DotNetNuke.Framework.JavaScriptLibraries; using DotNetNuke.Instrumentation; + using DotNetNuke.Services.ClientDependency; using DotNetNuke.Services.Localization; - using DotNetNuke.Web.Client.ClientResourceManagement; using Microsoft.Extensions.DependencyInjection; /// A skin/theme object which allows the display of toast messages. @@ -30,16 +31,18 @@ public partial class Toast : SkinObjectBase private static readonly string ToastCacheKey = "DNN_Toast_Config"; private readonly INavigationManager navigationManager; private readonly IJavaScriptLibraryHelper javaScript; + private readonly IClientResourcesController clientResourcesController; public Toast() - : this(null, null) + : this(null, null, null) { } - public Toast(INavigationManager navigationManager, IJavaScriptLibraryHelper javaScript) + public Toast(INavigationManager navigationManager, IJavaScriptLibraryHelper javaScript, IClientResourcesController clientResourcesController) { this.navigationManager = navigationManager ?? Globals.GetCurrentServiceProvider().GetRequiredService(); this.javaScript = javaScript ?? Globals.GetCurrentServiceProvider().GetRequiredService(); + this.clientResourcesController = clientResourcesController ?? Globals.GetCurrentServiceProvider().GetRequiredService(); } protected string ServiceModuleName { get; private set; } @@ -80,8 +83,8 @@ protected override void OnLoad(EventArgs e) this.javaScript.RequestRegistration(CommonJs.jQueryUI); ServicesFramework.Instance.RequestAjaxAntiForgerySupport(); - ClientResourceManager.RegisterScript(this.Page, "~/Resources/Shared/components/Toast/jquery.toastmessage.js", DotNetNuke.Web.Client.FileOrder.Js.jQuery); - ClientResourceManager.RegisterStyleSheet(this.Page, "~/Resources/Shared/components/Toast/jquery.toastmessage.css", DotNetNuke.Web.Client.FileOrder.Css.DefaultCss); + this.clientResourcesController.RegisterScript("~/Resources/Shared/components/Toast/jquery.toastmessage.js", FileOrder.Js.jQuery); + this.clientResourcesController.RegisterStylesheet("~/Resources/Shared/components/Toast/jquery.toastmessage.css", FileOrder.Css.DefaultCss); this.InitializeConfig(); } diff --git a/Dnn.AdminExperience/Library/Dnn.PersonaBar.UI/admin/personaBar/UserControls/PersonaBarContainer.ascx.cs b/Dnn.AdminExperience/Library/Dnn.PersonaBar.UI/admin/personaBar/UserControls/PersonaBarContainer.ascx.cs index ad959f6b20f..f7307fb4c63 100644 --- a/Dnn.AdminExperience/Library/Dnn.PersonaBar.UI/admin/personaBar/UserControls/PersonaBarContainer.ascx.cs +++ b/Dnn.AdminExperience/Library/Dnn.PersonaBar.UI/admin/personaBar/UserControls/PersonaBarContainer.ascx.cs @@ -14,9 +14,11 @@ namespace Dnn.PersonaBar.UI.UserControls using Dnn.PersonaBar.Library.Controllers; using DotNetNuke.Abstractions.Application; + using DotNetNuke.Abstractions.ClientResources; using DotNetNuke.Entities.Users; using DotNetNuke.Framework; using DotNetNuke.Framework.JavaScriptLibraries; + using DotNetNuke.Services.ClientDependency; using DotNetNuke.UI.ControlPanels; using DotNetNuke.UI.Utilities; using DotNetNuke.Web.Client.ClientResourceManagement; @@ -34,10 +36,11 @@ public partial class PersonaBarContainer : ControlPanelBase private readonly IPersonaBarController personaBarController; private readonly IHostSettings hostSettings; private readonly IJavaScriptLibraryHelper javaScript; + private readonly IClientResourcesController clientResourcesController; /// Initializes a new instance of the class. public PersonaBarContainer() - : this(null, null, null, null) + : this(null, null, null, null, null) { } @@ -46,12 +49,14 @@ public PersonaBarContainer() /// The Persona Bar controller. /// The host settings. /// The JavaScript library helper. - public PersonaBarContainer(IPersonaBarContainer personaBarContainer, IPersonaBarController personaBarController, IHostSettings hostSettings, IJavaScriptLibraryHelper javaScript) + /// The client resources controller. + public PersonaBarContainer(IPersonaBarContainer personaBarContainer, IPersonaBarController personaBarController, IHostSettings hostSettings, IJavaScriptLibraryHelper javaScript, IClientResourcesController clientResourcesController) { this.personaBarContainer = personaBarContainer ?? Globals.GetCurrentServiceProvider().GetRequiredService(); this.personaBarController = personaBarController ?? Globals.GetCurrentServiceProvider().GetRequiredService(); this.hostSettings = hostSettings ?? Globals.GetCurrentServiceProvider().GetRequiredService(); this.javaScript = javaScript ?? Globals.GetCurrentServiceProvider().GetRequiredService(); + this.clientResourcesController = clientResourcesController ?? Globals.GetCurrentServiceProvider().GetRequiredService(); } /// Gets a JSON representation of . @@ -121,15 +126,15 @@ private bool InjectPersonaBar() ServicesFramework.Instance.RequestAjaxAntiForgerySupport(); - ClientResourceManager.RegisterScript(this.Page, "~/Resources/Shared/Components/Tokeninput/jquery.tokeninput.js"); - ClientResourceManager.RegisterStyleSheet(this.Page, "~/Resources/Shared/Components/Tokeninput/Themes/token-input-facebook.css"); + this.clientResourcesController.RegisterScript("~/Resources/Shared/Components/Tokeninput/jquery.tokeninput.js"); + this.clientResourcesController.RegisterStylesheet("~/Resources/Shared/Components/Tokeninput/Themes/token-input-facebook.css"); return true; } private void RegisterPersonaBarStyleSheet() { - ClientResourceManager.RegisterStyleSheet(this.Page, "~/DesktopModules/admin/Dnn.PersonaBar/css/personaBarContainer.css"); + this.clientResourcesController.RegisterStylesheet("~/DesktopModules/admin/Dnn.PersonaBar/css/personaBarContainer.css"); } private void RemovedAdminStyleSheet() From 181d6ac103cec31a371372195ac43714c7fc5950 Mon Sep 17 00:00:00 2001 From: Peter Donker Date: Sun, 28 Sep 2025 23:16:04 +0200 Subject: [PATCH 028/199] Fixes --- .../Models/FontResource.cs | 1 + .../Models/ResourceBase.cs | 4 ++-- .../Models/ScriptResource.cs | 2 ++ .../Models/StylesheetResource.cs | 2 ++ DNN Platform/DotNetNuke.WebUtility/ClientAPI.vb | 2 +- 5 files changed, 8 insertions(+), 3 deletions(-) diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/FontResource.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/FontResource.cs index e2895abedd7..b42d7b744d1 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/FontResource.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/FontResource.cs @@ -20,6 +20,7 @@ public class FontResource : ResourceBase, IFontResource public FontResource(IClientResourcesController clientResourcesController) { this.clientResourcesController = clientResourcesController; + this.Provider = ClientResourceProviders.DnnPageHeaderProvider; } /// diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ResourceBase.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ResourceBase.cs index 1ff4003c219..e17a0312866 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ResourceBase.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ResourceBase.cs @@ -107,11 +107,11 @@ internal string GetVersionedPath(int crmVersion, bool useCdn, string application { if (string.IsNullOrEmpty(applicationPath)) { - return path.TrimStart('~'); + return $"{path.TrimStart('~')}?cdv={crmVersion}"; } else { - return path.Replace("~", applicationPath); + return $"{path.Replace("~", applicationPath)}?cdv={crmVersion}"; } } else if (path.StartsWith("/")) diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ScriptResource.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ScriptResource.cs index e9cf4b2f9b5..3f6f5e38db2 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ScriptResource.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ScriptResource.cs @@ -20,6 +20,8 @@ public class ScriptResource : ResourceBase, IScriptResource public ScriptResource(IClientResourcesController clientResourcesController) { this.clientResourcesController = clientResourcesController; + this.Provider = ClientResourceProviders.DefaultJsProvider; + this.Priority = (int)FileOrder.Js.DefaultPriority; } /// diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/StylesheetResource.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/StylesheetResource.cs index ca3419a0f32..e800d7c10da 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/StylesheetResource.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/StylesheetResource.cs @@ -20,6 +20,8 @@ public class StylesheetResource : ResourceBase, IStylesheetResource public StylesheetResource(IClientResourcesController clientResourcesController) { this.clientResourcesController = clientResourcesController; + this.Provider = ClientResourceProviders.DefaultCssProvider; + this.Priority = (int)FileOrder.Css.DefaultPriority; } /// diff --git a/DNN Platform/DotNetNuke.WebUtility/ClientAPI.vb b/DNN Platform/DotNetNuke.WebUtility/ClientAPI.vb index 36965e2f720..7761dd0f938 100644 --- a/DNN Platform/DotNetNuke.WebUtility/ClientAPI.vb +++ b/DNN Platform/DotNetNuke.WebUtility/ClientAPI.vb @@ -682,7 +682,7 @@ Namespace DotNetNuke.UI.Utilities RegisterClientReference(objPage, ClientNamespaceReferences.dnn) Case ClientNamespaceReferences.dnn_dom_positioning RegisterClientReference(objPage, ClientNamespaceReferences.dnn) - controller.CreateScript().FromSrc(ScriptPath & "dnn.dom.positioning.js").Register() + controller.CreateScript().FromSrc(ScriptPath & "dnn.dom.positioning.js").SetPriority(Abstractions.ClientResources.FileOrder.Js.DnnDomPositioning).Register() Case ClientNamespaceReferences.dnn_xml RegisterClientReference(objPage, ClientNamespaceReferences.dnn) From 23705b3c6ca5b9c436a94039c95db80cd82d6f7b Mon Sep 17 00:00:00 2001 From: Peter Donker Date: Mon, 29 Sep 2025 17:46:28 +0200 Subject: [PATCH 029/199] Fix defaults and add obsoletion --- .../ClientResources/ClientResourceProviders.cs | 10 +++++----- .../ClientResources/FileOrder.cs | 2 ++ 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/DNN Platform/DotNetNuke.Abstractions/ClientResources/ClientResourceProviders.cs b/DNN Platform/DotNetNuke.Abstractions/ClientResources/ClientResourceProviders.cs index a79323d62f2..975f785645d 100644 --- a/DNN Platform/DotNetNuke.Abstractions/ClientResources/ClientResourceProviders.cs +++ b/DNN Platform/DotNetNuke.Abstractions/ClientResources/ClientResourceProviders.cs @@ -10,11 +10,6 @@ namespace DotNetNuke.Abstractions.ClientResources /// public class ClientResourceProviders { - /// - /// In the page header. - /// - public const string Default = ""; - /// /// In the page header. /// @@ -30,6 +25,11 @@ public class ClientResourceProviders /// public const string DnnFormBottomProvider = "DnnFormBottomProvider"; + /// + /// In the page header. + /// + public const string Default = "DnnPageHeaderProvider"; + /// /// The default css provider. /// diff --git a/DNN Platform/DotNetNuke.Abstractions/ClientResources/FileOrder.cs b/DNN Platform/DotNetNuke.Abstractions/ClientResources/FileOrder.cs index 1d0d39f3896..c2ed29eac24 100644 --- a/DNN Platform/DotNetNuke.Abstractions/ClientResources/FileOrder.cs +++ b/DNN Platform/DotNetNuke.Abstractions/ClientResources/FileOrder.cs @@ -3,6 +3,7 @@ // See the LICENSE file in the project root for more information namespace DotNetNuke.Abstractions.ClientResources { + using System; using System.Diagnostics.CodeAnalysis; /// Contains enumerations that define the relative loading order of both JavaScript and CSS files within the framework's registration system. @@ -76,6 +77,7 @@ public enum Css FeatureCss = 7, /// The ie.css file has a priority of 8. + [Obsolete("Deprecated in DotNetNuke 10.2.0. Scheduled removal in v12.0.0.")] IeCss = 8, /// Module CSS files have a priority of 10. From f776e495a5dcde0710547e690c98f3503e24fb1f Mon Sep 17 00:00:00 2001 From: Peter Donker Date: Mon, 29 Sep 2025 17:47:27 +0200 Subject: [PATCH 030/199] Add a layer between base resource and stylesheet and font resources to incorporate common link attributes --- .../ClientResources/IFontResource.cs | 2 +- .../ClientResources/ILinkResource.cs | 14 ++++++++ .../ClientResources/IResource.cs | 5 --- .../ClientResources/IStylesheetResource.cs | 2 +- .../GenericResourceExtensions.cs | 18 ---------- .../LinkResourceExtensions.cs | 34 +++++++++++++++++++ .../Models/FontResource.cs | 2 +- .../Models/LinkResource.cs | 17 ++++++++++ .../Models/ResourceBase.cs | 3 -- .../Models/StylesheetResource.cs | 2 +- 10 files changed, 69 insertions(+), 30 deletions(-) create mode 100644 DNN Platform/DotNetNuke.Abstractions/ClientResources/ILinkResource.cs create mode 100644 DNN Platform/DotNetNuke.Web.Client.ResourceManager/LinkResourceExtensions.cs create mode 100644 DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/LinkResource.cs diff --git a/DNN Platform/DotNetNuke.Abstractions/ClientResources/IFontResource.cs b/DNN Platform/DotNetNuke.Abstractions/ClientResources/IFontResource.cs index a2408ab29e8..f57208bbf6e 100644 --- a/DNN Platform/DotNetNuke.Abstractions/ClientResources/IFontResource.cs +++ b/DNN Platform/DotNetNuke.Abstractions/ClientResources/IFontResource.cs @@ -4,6 +4,6 @@ namespace DotNetNuke.Abstractions.ClientResources; /// Marker interface for font resources. -public interface IFontResource : IResource +public interface IFontResource : ILinkResource { } diff --git a/DNN Platform/DotNetNuke.Abstractions/ClientResources/ILinkResource.cs b/DNN Platform/DotNetNuke.Abstractions/ClientResources/ILinkResource.cs new file mode 100644 index 00000000000..611e9e579c0 --- /dev/null +++ b/DNN Platform/DotNetNuke.Abstractions/ClientResources/ILinkResource.cs @@ -0,0 +1,14 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information + +namespace DotNetNuke.Abstractions.ClientResources; + +/// Marker interface for resources that resolve to a link in html. +public interface ILinkResource : IResource +{ + /// + /// Gets or sets a value indicating whether the client resource should be preloaded. + /// + bool Preload { get; set; } +} diff --git a/DNN Platform/DotNetNuke.Abstractions/ClientResources/IResource.cs b/DNN Platform/DotNetNuke.Abstractions/ClientResources/IResource.cs index 6abdb233b9e..fde8bd9cf51 100644 --- a/DNN Platform/DotNetNuke.Abstractions/ClientResources/IResource.cs +++ b/DNN Platform/DotNetNuke.Abstractions/ClientResources/IResource.cs @@ -81,11 +81,6 @@ public interface IResource /// bool Blocking { get; set; } - /// - /// Gets or sets a value indicating whether the client resource should be preloaded. - /// - bool Preload { get; set; } - /// /// Gets or sets the integrity attribute for the client resource. /// Contains inline metadata — a base64-encoded cryptographic hash of the resource (file) you're telling the browser to fetch. diff --git a/DNN Platform/DotNetNuke.Abstractions/ClientResources/IStylesheetResource.cs b/DNN Platform/DotNetNuke.Abstractions/ClientResources/IStylesheetResource.cs index 77eb47d79b3..4cca6409a8f 100644 --- a/DNN Platform/DotNetNuke.Abstractions/ClientResources/IStylesheetResource.cs +++ b/DNN Platform/DotNetNuke.Abstractions/ClientResources/IStylesheetResource.cs @@ -4,7 +4,7 @@ namespace DotNetNuke.Abstractions.ClientResources; /// Marker interface for stylesheet resources. -public interface IStylesheetResource : IResource +public interface IStylesheetResource : ILinkResource { /// /// Gets or sets a value indicating whether the disabled attribute should be added to the link element. diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/GenericResourceExtensions.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/GenericResourceExtensions.cs index cece7fed384..104775dae72 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/GenericResourceExtensions.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/GenericResourceExtensions.cs @@ -133,24 +133,6 @@ public static T SetProvider(this T input, string provider) return input; } - /// - /// Marks the resource for preload. - /// - /// The resource to mark for preload. - /// The resource marked for preload. - /// The type of resource, which must implement . - public static T SetPreload(this T input) - where T : IResource - { - if (input == null) - { - throw new ArgumentNullException(nameof(input)); - } - - input.Preload = true; - return input; - } - /// /// Marks the resource as blocking. /// diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/LinkResourceExtensions.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/LinkResourceExtensions.cs new file mode 100644 index 00000000000..e1173a66116 --- /dev/null +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/LinkResourceExtensions.cs @@ -0,0 +1,34 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information + +namespace DotNetNuke.Web.Client.ResourceManager +{ + using System; + + using DotNetNuke.Abstractions.ClientResources; + + /// + /// Provides extension methods for to set various resource properties in a fluent manner. + /// + public static class LinkResourceExtensions + { + /// + /// Marks the resource for preload. + /// + /// The resource to mark for preload. + /// The resource marked for preload. + /// The type of resource, which must implement . + public static T SetPreload(this T input) + where T : ILinkResource + { + if (input == null) + { + throw new ArgumentNullException(nameof(input)); + } + + input.Preload = true; + return input; + } + } +} diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/FontResource.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/FontResource.cs index b42d7b744d1..07b7408dab1 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/FontResource.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/FontResource.cs @@ -9,7 +9,7 @@ namespace DotNetNuke.Web.Client.ResourceManager.Models /// /// Represents a font resource that can be registered and rendered for client use. /// - public class FontResource : ResourceBase, IFontResource + public class FontResource : LinkResource, IFontResource { private readonly IClientResourcesController clientResourcesController; diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/LinkResource.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/LinkResource.cs new file mode 100644 index 00000000000..20d7bdc380b --- /dev/null +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/LinkResource.cs @@ -0,0 +1,17 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information + +namespace DotNetNuke.Web.Client.ResourceManager.Models +{ + using DotNetNuke.Abstractions.ClientResources; + + /// + /// Base class for link resource types. + /// + public abstract class LinkResource : ResourceBase, ILinkResource + { + /// + public bool Preload { get; set; } = false; + } +} diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ResourceBase.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ResourceBase.cs index e17a0312866..b6f4552d7cc 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ResourceBase.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ResourceBase.cs @@ -61,9 +61,6 @@ public string Name /// public ReferrerPolicy ReferrerPolicy { get; set; } = ReferrerPolicy.None; - /// - public bool Preload { get; set; } = false; - /// public string Integrity { get; set; } = string.Empty; diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/StylesheetResource.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/StylesheetResource.cs index e800d7c10da..37cc344e0e8 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/StylesheetResource.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/StylesheetResource.cs @@ -9,7 +9,7 @@ namespace DotNetNuke.Web.Client.ResourceManager.Models /// /// Represents a stylesheet resource that can be registered and rendered in the client resources controller. /// - public class StylesheetResource : ResourceBase, IStylesheetResource + public class StylesheetResource : LinkResource, IStylesheetResource { private readonly IClientResourcesController clientResourcesController; From 802da6fb9f71a297a03183105dc6dc7207f41d06 Mon Sep 17 00:00:00 2001 From: Peter Donker Date: Mon, 29 Sep 2025 21:27:40 +0200 Subject: [PATCH 031/199] Add support for Mimetype --- .../ClientResources/IResource.cs | 5 +++ .../FontResourceExtensions.cs | 37 +++++++++++++++++++ .../Models/FontResource.cs | 1 + .../Models/ResourceBase.cs | 17 +++++++++ .../Models/ScriptResource.cs | 1 + .../Models/StylesheetResource.cs | 1 + 6 files changed, 62 insertions(+) create mode 100644 DNN Platform/DotNetNuke.Web.Client.ResourceManager/FontResourceExtensions.cs diff --git a/DNN Platform/DotNetNuke.Abstractions/ClientResources/IResource.cs b/DNN Platform/DotNetNuke.Abstractions/ClientResources/IResource.cs index fde8bd9cf51..a6a843c1d38 100644 --- a/DNN Platform/DotNetNuke.Abstractions/ClientResources/IResource.cs +++ b/DNN Platform/DotNetNuke.Abstractions/ClientResources/IResource.cs @@ -88,6 +88,11 @@ public interface IResource /// string Integrity { get; set; } + /// + /// Gets or sets the MIME type of the client resource. + /// + string MimeType { get; set; } + /// /// Gets or sets additional attributes for the client resource. /// diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/FontResourceExtensions.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/FontResourceExtensions.cs new file mode 100644 index 00000000000..9cafa4725de --- /dev/null +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/FontResourceExtensions.cs @@ -0,0 +1,37 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information + +namespace DotNetNuke.Web.Client.ResourceManager +{ + using System; + + using DotNetNuke.Abstractions.ClientResources; + + /// + /// Provides extension methods for to set various resource properties in a fluent manner. + /// + public static class FontResourceExtensions + { + /// + /// Sets the source URL of the resource. + /// + /// The resource to set the source URL for. + /// The source URL to set. + /// The MIME type of the resource. + /// The resource with the source URL set. + /// The type of resource, which must implement . + public static T FromSrc(this T input, string scriptSrc, string mimeType) + where T : IFontResource + { + if (input == null) + { + throw new ArgumentNullException(nameof(input)); + } + + input.FilePath = scriptSrc; + input.MimeType = mimeType; + return input; + } + } +} diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/FontResource.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/FontResource.cs index 07b7408dab1..cb47ae73e4f 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/FontResource.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/FontResource.cs @@ -43,6 +43,7 @@ public FontResource(IClientResourcesController clientResourcesController) htmlString += $" rel=\"font\""; } + htmlString += this.RenderMimeType(); htmlString += this.RenderCrossOriginAttribute(); htmlString += this.RenderFetchPriority(); htmlString += this.RenderIntegrity(); diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ResourceBase.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ResourceBase.cs index b6f4552d7cc..26b55a01b87 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ResourceBase.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ResourceBase.cs @@ -64,6 +64,9 @@ public string Name /// public string Integrity { get; set; } = string.Empty; + /// + public string MimeType { get; set; } = string.Empty; + /// public bool Blocking { get; set; } = false; @@ -219,6 +222,20 @@ protected string RenderReferrerPolicy() return string.Empty; } + /// + /// Renders the mimetype attribute. + /// + /// The mimetype attribute. + protected string RenderMimeType() + { + if (!string.IsNullOrEmpty(this.MimeType)) + { + return $" type=\"{this.MimeType}\""; + } + + return string.Empty; + } + /// /// Renders the attributes. /// diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ScriptResource.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ScriptResource.cs index 3f6f5e38db2..9cdf0bb3679 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ScriptResource.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ScriptResource.cs @@ -67,6 +67,7 @@ public ScriptResource(IClientResourcesController clientResourcesController) htmlString += $" type=\"{this.Type}\""; } + htmlString += this.RenderMimeType(); htmlString += this.RenderBlocking(); htmlString += this.RenderCrossOriginAttribute(); htmlString += this.RenderFetchPriority(); diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/StylesheetResource.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/StylesheetResource.cs index 37cc344e0e8..990fa5f22a4 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/StylesheetResource.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/StylesheetResource.cs @@ -52,6 +52,7 @@ public StylesheetResource(IClientResourcesController clientResourcesController) htmlString += " disabled"; } + htmlString += this.RenderMimeType(); htmlString += this.RenderBlocking(); htmlString += this.RenderCrossOriginAttribute(); htmlString += this.RenderFetchPriority(); From e87c6e2a988da118e5a287563ef6898e6a386724 Mon Sep 17 00:00:00 2001 From: Peter Donker Date: Mon, 29 Sep 2025 22:33:43 +0200 Subject: [PATCH 032/199] Change string concatenation to stringbuilder --- .../ClientResources/IResource.cs | 11 ++- .../ClientResources/IScriptResource.cs | 9 -- .../FontResourceExtensions.cs | 2 +- .../Models/FontResource.cs | 26 ++--- .../Models/ResourceBase.cs | 98 +++++++++---------- .../Models/ScriptResource.cs | 38 +++---- .../Models/StylesheetResource.cs | 30 +++--- 7 files changed, 102 insertions(+), 112 deletions(-) diff --git a/DNN Platform/DotNetNuke.Abstractions/ClientResources/IResource.cs b/DNN Platform/DotNetNuke.Abstractions/ClientResources/IResource.cs index a6a843c1d38..7020d36003a 100644 --- a/DNN Platform/DotNetNuke.Abstractions/ClientResources/IResource.cs +++ b/DNN Platform/DotNetNuke.Abstractions/ClientResources/IResource.cs @@ -89,9 +89,14 @@ public interface IResource string Integrity { get; set; } /// - /// Gets or sets the MIME type of the client resource. - /// - string MimeType { get; set; } + /// Gets or sets a value indicating the type of script or link element. + /// In the case of a link, this should be a mime type. + /// In the case of a script, the value of this attribute indicates the type of data represented by the script, and will be one of the following: + /// - Empty string or "text/javascript" (default): classic script. + /// - "module": module script. + /// - "importmap": import map. + /// + string Type { get; set; } /// /// Gets or sets additional attributes for the client resource. diff --git a/DNN Platform/DotNetNuke.Abstractions/ClientResources/IScriptResource.cs b/DNN Platform/DotNetNuke.Abstractions/ClientResources/IScriptResource.cs index 86031fa3016..604a22c5353 100644 --- a/DNN Platform/DotNetNuke.Abstractions/ClientResources/IScriptResource.cs +++ b/DNN Platform/DotNetNuke.Abstractions/ClientResources/IScriptResource.cs @@ -29,13 +29,4 @@ public interface IScriptResource : IResource /// this can be used to serve fallback scripts to older browsers that do not support modular JavaScript code. /// bool NoModule { get; set; } - - /// - /// Gets or sets a value indicating the type of script element. - /// The value of this attribute indicates the type of data represented by the script, and will be one of the following: - /// - Empty string or "text/javascript" (default): classic script. - /// - "module": module script. - /// - "importmap": import map. - /// - string Type { get; set; } } diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/FontResourceExtensions.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/FontResourceExtensions.cs index 9cafa4725de..288f3d49c1d 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/FontResourceExtensions.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/FontResourceExtensions.cs @@ -30,7 +30,7 @@ public static T FromSrc(this T input, string scriptSrc, string mimeType) } input.FilePath = scriptSrc; - input.MimeType = mimeType; + input.Type = mimeType; return input; } } diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/FontResource.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/FontResource.cs index cb47ae73e4f..c8fde746564 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/FontResource.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/FontResource.cs @@ -4,6 +4,8 @@ namespace DotNetNuke.Web.Client.ResourceManager.Models { + using System.Text; + using DotNetNuke.Abstractions.ClientResources; /// @@ -32,25 +34,25 @@ public FontResource(IClientResourcesController clientResourcesController) /// public new string Render(int crmVersion, bool useCdn, string applicationPath) { - var htmlString = ""); + return htmlString.ToString(); } } } diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ResourceBase.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ResourceBase.cs index 26b55a01b87..50a924ffb2b 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ResourceBase.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ResourceBase.cs @@ -5,6 +5,7 @@ namespace DotNetNuke.Web.Client.ResourceManager.Models { using System.Collections.Generic; + using System.Text; using DotNetNuke.Abstractions.ClientResources; @@ -65,7 +66,7 @@ public string Name public string Integrity { get; set; } = string.Empty; /// - public string MimeType { get; set; } = string.Empty; + public string Type { get; set; } = string.Empty; /// public bool Blocking { get; set; } = false; @@ -125,130 +126,125 @@ internal string GetVersionedPath(int crmVersion, bool useCdn, string application /// /// Renders the blocking attribute. /// - /// The blocking attribute. - protected string RenderBlocking() + /// The HTML string builder to append to. + protected void RenderBlocking(StringBuilder htmlString) { if (this.Blocking) { - return " blocking=\"render\""; + htmlString.Append(" blocking=\"render\""); } - - return string.Empty; } /// /// Renders the cross origin attribute. /// - /// The cross origin attribute. - protected string RenderCrossOriginAttribute() + /// The HTML string builder to append to. + protected void RenderCrossOriginAttribute(StringBuilder htmlString) { if (this.CrossOrigin != CrossOrigin.None) { - var crossOrigin = "anonymous"; if (this.CrossOrigin == CrossOrigin.UseCredentials) { - crossOrigin = "use-credentials"; + htmlString.Append($" crossorigin=\"use-credentials\""); + } + else + { + htmlString.Append($" crossorigin=\"anonymous\""); } - - return $" crossorigin=\"{crossOrigin}\""; } - - return string.Empty; } /// /// Renders the fetch priority attribute. /// - /// The fetch priority attribute. - protected string RenderFetchPriority() + /// The HTML string builder to append to. + protected void RenderFetchPriority(StringBuilder htmlString) { if (this.FetchPriority != FetchPriority.Auto) { - var fetchPriority = "low"; if (this.FetchPriority == FetchPriority.High) { - fetchPriority = "high"; + htmlString.Append($" fetchpriority=\"high\""); + } + else if (this.FetchPriority == FetchPriority.Low) + { + htmlString.Append($" fetchpriority=\"low\""); } - - return $" fetchpriority=\"{fetchPriority}\""; } - - return string.Empty; } /// /// Renders the integrity attribute. /// - /// The integrity attribute. - protected string RenderIntegrity() + /// The HTML string builder to append to. + protected void RenderIntegrity(StringBuilder htmlString) { if (!string.IsNullOrEmpty(this.Integrity)) { - return $" integrity=\"{this.Integrity}\""; + htmlString.Append($" integrity=\"{this.Integrity}\""); } - - return string.Empty; } /// /// Renders the referrer policy attribute. /// - /// The referrer policy attribute. - protected string RenderReferrerPolicy() + /// The HTML string builder to append to. + protected void RenderReferrerPolicy(StringBuilder htmlString) { if (this.ReferrerPolicy != ReferrerPolicy.None) { switch (this.ReferrerPolicy) { case ReferrerPolicy.NoReferrer: - return " referrerpolicy=\"no-referrer\""; + htmlString.Append(" referrerpolicy=\"no-referrer\""); + break; case ReferrerPolicy.NoReferrerWhenDowngrade: - return " referrerpolicy=\"no-referrer-when-downgrade\""; + htmlString.Append(" referrerpolicy=\"no-referrer-when-downgrade\""); + break; case ReferrerPolicy.Origin: - return " referrerpolicy=\"origin\""; + htmlString.Append(" referrerpolicy=\"origin\""); + break; case ReferrerPolicy.OriginWhenCrossOrigin: - return " referrerpolicy=\"origin-when-cross-origin\""; + htmlString.Append(" referrerpolicy=\"origin-when-cross-origin\""); + break; case ReferrerPolicy.SameOrigin: - return " referrerpolicy=\"same-origin\""; + htmlString.Append(" referrerpolicy=\"same-origin\""); + break; case ReferrerPolicy.StrictOrigin: - return " referrerpolicy=\"strict-origin\""; + htmlString.Append(" referrerpolicy=\"strict-origin\""); + break; case ReferrerPolicy.StrictOriginWhenCrossOrigin: - return " referrerpolicy=\"strict-origin-when-cross-origin\""; + htmlString.Append(" referrerpolicy=\"strict-origin-when-cross-origin\""); + break; case ReferrerPolicy.UnsafeUrl: - return " referrerpolicy=\"unsafe-url\""; + htmlString.Append(" referrerpolicy=\"unsafe-url\""); + break; } } - - return string.Empty; } /// /// Renders the mimetype attribute. /// - /// The mimetype attribute. - protected string RenderMimeType() + /// The HTML string builder to append to. + protected void RenderType(StringBuilder htmlString) { - if (!string.IsNullOrEmpty(this.MimeType)) + if (!string.IsNullOrEmpty(this.Type)) { - return $" type=\"{this.MimeType}\""; + htmlString.Append($" type=\"{this.Type}\""); } - - return string.Empty; } /// /// Renders the attributes. /// - /// The attributes. - protected string RenderAttributes() + /// The HTML string builder to append to. + protected void RenderAttributes(StringBuilder htmlString) { - var htmlString = string.Empty; foreach (var attribute in this.Attributes) { - htmlString += $" {attribute.Key}=\"{attribute.Value}\""; + htmlString.Append($" {attribute.Key}=\"{attribute.Value}\""); } - - return htmlString; } } } diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ScriptResource.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ScriptResource.cs index 9cdf0bb3679..7421dcdae88 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ScriptResource.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ScriptResource.cs @@ -4,6 +4,8 @@ namespace DotNetNuke.Web.Client.ResourceManager.Models { + using System.Text; + using DotNetNuke.Abstractions.ClientResources; /// @@ -33,9 +35,6 @@ public ScriptResource(IClientResourcesController clientResourcesController) /// public bool NoModule { get; set; } = false; - /// - public string Type { get; set; } = string.Empty; - /// public new void Register() { @@ -45,37 +44,32 @@ public ScriptResource(IClientResourcesController clientResourcesController) /// public new string Render(int crmVersion, bool useCdn, string applicationPath) { - var htmlString = ""; - return htmlString; + this.RenderType(htmlString); + this.RenderBlocking(htmlString); + this.RenderCrossOriginAttribute(htmlString); + this.RenderFetchPriority(htmlString); + this.RenderIntegrity(htmlString); + this.RenderReferrerPolicy(htmlString); + this.RenderAttributes(htmlString); + htmlString.Append(" type=\"text/javascript\">"); + return htmlString.ToString(); } } } diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/StylesheetResource.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/StylesheetResource.cs index 990fa5f22a4..dec5f6ac55e 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/StylesheetResource.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/StylesheetResource.cs @@ -4,6 +4,8 @@ namespace DotNetNuke.Web.Client.ResourceManager.Models { + using System.Text; + using DotNetNuke.Abstractions.ClientResources; /// @@ -36,31 +38,31 @@ public StylesheetResource(IClientResourcesController clientResourcesController) /// public new string Render(int crmVersion, bool useCdn, string applicationPath) { - var htmlString = ""); + return htmlString.ToString(); } } } From cbf47d1e955bb0f2cb0b80a8ef1bdf246ce34fde Mon Sep 17 00:00:00 2001 From: Peter Donker Date: Tue, 30 Sep 2025 10:19:49 +0200 Subject: [PATCH 033/199] Adjust naming of main controller to better comply with existing conventions --- .../Dnn.Modules.Console/ViewConsole.ascx.cs | 10 +++--- ...roller.cs => IClientResourceController.cs} | 2 +- ...troller.cs => ClientResourceController.cs} | 6 ++-- .../Models/FontResource.cs | 10 +++--- .../Models/ScriptResource.cs | 10 +++--- .../Models/StylesheetResource.cs | 10 +++--- .../Startup.cs | 2 +- .../ClientResourceManager.cs | 6 ++-- .../Controls/ClientResourceExclude.cs | 12 +++---- .../Controls/ClientResourceInclude.cs | 12 +++---- .../Controls/ClientResourceLoader.cs | 10 +++--- .../Controls/DnnCssExclude.cs | 6 ++-- .../Controls/DnnCssInclude.cs | 6 ++-- .../Controls/DnnHtmlInclude.cs | 10 +++--- .../Controls/DnnJsExclude.cs | 6 ++-- .../Controls/DnnJsInclude.cs | 6 ++-- .../Controls/DnnResources.cs | 8 ++--- .../DotNetNuke.WebUtility/ClientAPI.vb | 8 ++--- .../JavaScriptLibraries/JavaScript.cs | 4 +-- .../ClientDependency/DependencyController.cs | 4 +-- .../Services/ClientDependency/Extensions.cs | 20 ++++++------ .../Library/UI/Containers/Container.cs | 18 +++++------ .../CoreMessaging/Subscriptions.ascx.cs | 16 +++++----- .../Modules/CoreMessaging/View.ascx.cs | 10 +++--- DNN Platform/Website/Default.aspx.cs | 32 +++++++++---------- .../Admin/SearchResults/SearchResults.ascx.cs | 14 ++++---- .../Admin/Security/Password.ascx.cs | 18 +++++------ .../Admin/Security/Register.ascx.cs | 14 ++++---- .../Admin/Security/User.ascx.cs | 18 +++++------ .../Menus/ModuleActions/ModuleActions.ascx.cs | 16 +++++----- .../admin/Security/PasswordReset.ascx.cs | 18 +++++------ .../Website/admin/Skins/Search.ascx.cs | 14 ++++---- .../Website/admin/Skins/Toast.ascx.cs | 10 +++--- .../UserControls/PersonaBarContainer.ascx.cs | 14 ++++---- 34 files changed, 190 insertions(+), 190 deletions(-) rename DNN Platform/DotNetNuke.Abstractions/ClientResources/{IClientResourcesController.cs => IClientResourceController.cs} (98%) rename DNN Platform/DotNetNuke.Web.Client.ResourceManager/{ClientResourcesController.cs => ClientResourceController.cs} (98%) diff --git a/DNN Platform/Admin Modules/Dnn.Modules.Console/ViewConsole.ascx.cs b/DNN Platform/Admin Modules/Dnn.Modules.Console/ViewConsole.ascx.cs index e786d477b14..939c6b4b36e 100644 --- a/DNN Platform/Admin Modules/Dnn.Modules.Console/ViewConsole.ascx.cs +++ b/DNN Platform/Admin Modules/Dnn.Modules.Console/ViewConsole.ascx.cs @@ -35,7 +35,7 @@ public partial class ViewConsole : PortalModuleBase private static readonly ILog Logger = LoggerSource.Instance.GetLogger(typeof(ViewConsole)); private readonly INavigationManager navigationManager; private readonly IJavaScriptLibraryHelper javaScript; - private readonly IClientResourcesController clientResourcesController; + private readonly IClientResourceController clientResourceController; private string defaultSize = string.Empty; private string defaultView = string.Empty; @@ -51,12 +51,12 @@ public ViewConsole() /// Initializes a new instance of the class. /// The navigation manager. /// The JavaScript library helper. - /// The client resources controller. - public ViewConsole(INavigationManager navigationManager, IJavaScriptLibraryHelper javaScript, IClientResourcesController clientResourcesController) + /// The client resources controller. + public ViewConsole(INavigationManager navigationManager, IJavaScriptLibraryHelper javaScript, IClientResourceController clientResourceController) { this.navigationManager = navigationManager ?? this.DependencyProvider.GetRequiredService(); this.javaScript = javaScript ?? this.DependencyProvider.GetRequiredService(); - this.clientResourcesController = clientResourcesController ?? this.DependencyProvider.GetRequiredService(); + this.clientResourceController = clientResourceController ?? this.DependencyProvider.GetRequiredService(); } /// Gets a value indicating whether the module settings allow size change. @@ -217,7 +217,7 @@ protected override void OnInit(EventArgs e) { this.javaScript.RequestRegistration(CommonJs.jQuery); - this.clientResourcesController.RegisterScript("~/desktopmodules/admin/console/scripts/jquery.console.js"); + this.clientResourceController.RegisterScript("~/desktopmodules/admin/console/scripts/jquery.console.js"); this.DetailView.ItemDataBound += this.RepeaterItemDataBound; diff --git a/DNN Platform/DotNetNuke.Abstractions/ClientResources/IClientResourcesController.cs b/DNN Platform/DotNetNuke.Abstractions/ClientResources/IClientResourceController.cs similarity index 98% rename from DNN Platform/DotNetNuke.Abstractions/ClientResources/IClientResourcesController.cs rename to DNN Platform/DotNetNuke.Abstractions/ClientResources/IClientResourceController.cs index 0965187c9fc..4efb8a073d2 100644 --- a/DNN Platform/DotNetNuke.Abstractions/ClientResources/IClientResourcesController.cs +++ b/DNN Platform/DotNetNuke.Abstractions/ClientResources/IClientResourceController.cs @@ -4,7 +4,7 @@ namespace DotNetNuke.Abstractions.ClientResources; /// Provides an interface for managing client resources. -public interface IClientResourcesController +public interface IClientResourceController { /// /// Adds a font resource to the client resources controller. diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourcesController.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourceController.cs similarity index 98% rename from DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourcesController.cs rename to DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourceController.cs index 9303228af4b..93403dafd14 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourcesController.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourceController.cs @@ -11,15 +11,15 @@ namespace DotNetNuke.Web.Client.ResourceManager using DotNetNuke.Abstractions.ClientResources; /// - public class ClientResourcesController : IClientResourcesController + public class ClientResourceController : IClientResourceController { private readonly IHostSettings hostSettings; /// - /// Initializes a new instance of the class. + /// Initializes a new instance of the class. /// /// The host settings. - public ClientResourcesController(IHostSettings hostSettings) + public ClientResourceController(IHostSettings hostSettings) { this.hostSettings = hostSettings; this.RegisterPathNameAlias("SharedScripts", "~/Resources/Shared/Scripts/"); diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/FontResource.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/FontResource.cs index c8fde746564..d5593c8e229 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/FontResource.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/FontResource.cs @@ -13,22 +13,22 @@ namespace DotNetNuke.Web.Client.ResourceManager.Models /// public class FontResource : LinkResource, IFontResource { - private readonly IClientResourcesController clientResourcesController; + private readonly IClientResourceController clientResourceController; /// /// Initializes a new instance of the class. /// - /// The client resources controller used to manage font resources. - public FontResource(IClientResourcesController clientResourcesController) + /// The client resources controller used to manage font resources. + public FontResource(IClientResourceController clientResourceController) { - this.clientResourcesController = clientResourcesController; + this.clientResourceController = clientResourceController; this.Provider = ClientResourceProviders.DnnPageHeaderProvider; } /// public new void Register() { - this.clientResourcesController.AddFont(this); + this.clientResourceController.AddFont(this); } /// diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ScriptResource.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ScriptResource.cs index 7421dcdae88..278d860bb0a 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ScriptResource.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ScriptResource.cs @@ -13,15 +13,15 @@ namespace DotNetNuke.Web.Client.ResourceManager.Models /// public class ScriptResource : ResourceBase, IScriptResource { - private readonly IClientResourcesController clientResourcesController; + private readonly IClientResourceController clientResourceController; /// /// Initializes a new instance of the class. /// - /// The client resources controller. - public ScriptResource(IClientResourcesController clientResourcesController) + /// The client resources controller. + public ScriptResource(IClientResourceController clientResourceController) { - this.clientResourcesController = clientResourcesController; + this.clientResourceController = clientResourceController; this.Provider = ClientResourceProviders.DefaultJsProvider; this.Priority = (int)FileOrder.Js.DefaultPriority; } @@ -38,7 +38,7 @@ public ScriptResource(IClientResourcesController clientResourcesController) /// public new void Register() { - this.clientResourcesController.AddScript(this); + this.clientResourceController.AddScript(this); } /// diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/StylesheetResource.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/StylesheetResource.cs index dec5f6ac55e..fff3a26a5eb 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/StylesheetResource.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/StylesheetResource.cs @@ -13,15 +13,15 @@ namespace DotNetNuke.Web.Client.ResourceManager.Models /// public class StylesheetResource : LinkResource, IStylesheetResource { - private readonly IClientResourcesController clientResourcesController; + private readonly IClientResourceController clientResourceController; /// /// Initializes a new instance of the class. /// - /// The client resources controller used to register the stylesheet. - public StylesheetResource(IClientResourcesController clientResourcesController) + /// The client resources controller used to register the stylesheet. + public StylesheetResource(IClientResourceController clientResourceController) { - this.clientResourcesController = clientResourcesController; + this.clientResourceController = clientResourceController; this.Provider = ClientResourceProviders.DefaultCssProvider; this.Priority = (int)FileOrder.Css.DefaultPriority; } @@ -32,7 +32,7 @@ public StylesheetResource(IClientResourcesController clientResourcesController) /// public new void Register() { - this.clientResourcesController.AddStylesheet(this); + this.clientResourceController.AddStylesheet(this); } /// diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Startup.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Startup.cs index ef93eba5913..a072ca0498f 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Startup.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Startup.cs @@ -14,7 +14,7 @@ public class Startup : IDnnStartup /// public void ConfigureServices(IServiceCollection services) { - services.AddScoped(); + services.AddScoped(); } } } diff --git a/DNN Platform/DotNetNuke.Web.Client/ClientResourceManager.cs b/DNN Platform/DotNetNuke.Web.Client/ClientResourceManager.cs index fec304de72b..30c75e78f73 100644 --- a/DNN Platform/DotNetNuke.Web.Client/ClientResourceManager.cs +++ b/DNN Platform/DotNetNuke.Web.Client/ClientResourceManager.cs @@ -23,7 +23,7 @@ namespace DotNetNuke.Web.Client.ClientResourceManagement using Microsoft.Extensions.DependencyInjection; /// Provides the ability to request that client resources (JavaScript and CSS) be loaded on the client browser. - [Obsolete("Deprecated in DotNetNuke 10.2.0. Please use IClientResourcesController instead. Scheduled removal in v12.0.0.")] + [Obsolete("Deprecated in DotNetNuke 10.2.0. Please use IClientResourceController instead. Scheduled removal in v12.0.0.")] public partial class ClientResourceManager { /// The default css provider. @@ -595,10 +595,10 @@ private static string RemoveQueryString(string filePath) return queryStringPosition != -1 ? filePath.Substring(0, queryStringPosition) : filePath; } - private static IClientResourcesController GetClientResourcesController(Page page) + private static IClientResourceController GetClientResourcesController(Page page) { var serviceProvider = GetCurrentServiceProvider(page.Request.RequestContext.HttpContext); - return serviceProvider.GetRequiredService(); + return serviceProvider.GetRequiredService(); } private static IServiceProvider GetCurrentServiceProvider(HttpContextBase context) diff --git a/DNN Platform/DotNetNuke.Web.Client/Controls/ClientResourceExclude.cs b/DNN Platform/DotNetNuke.Web.Client/Controls/ClientResourceExclude.cs index c1e5dd81d00..a4bbc788814 100644 --- a/DNN Platform/DotNetNuke.Web.Client/Controls/ClientResourceExclude.cs +++ b/DNN Platform/DotNetNuke.Web.Client/Controls/ClientResourceExclude.cs @@ -15,15 +15,15 @@ namespace DotNetNuke.Web.Client.Controls /// public abstract class ClientResourceExclude : Control { - private readonly IClientResourcesController clientResourcesController; + private readonly IClientResourceController clientResourceController; /// /// Initializes a new instance of the class. /// - /// The client resources controller. - protected ClientResourceExclude(IClientResourcesController clientResourcesController) + /// The client resources controller. + protected ClientResourceExclude(IClientResourceController clientResourceController) { - this.clientResourcesController = clientResourcesController; + this.clientResourceController = clientResourceController; } /// @@ -41,10 +41,10 @@ protected override void OnInit(EventArgs e) switch (this.DependencyType) { case ClientDependencyType.Css: - this.clientResourcesController.RemoveStylesheetByName(this.Name); + this.clientResourceController.RemoveStylesheetByName(this.Name); break; case ClientDependencyType.Javascript: - this.clientResourcesController.RemoveScriptByName(this.Name); + this.clientResourceController.RemoveScriptByName(this.Name); break; default: throw new ArgumentOutOfRangeException(); diff --git a/DNN Platform/DotNetNuke.Web.Client/Controls/ClientResourceInclude.cs b/DNN Platform/DotNetNuke.Web.Client/Controls/ClientResourceInclude.cs index bf0d87abb66..00c5cf79b67 100644 --- a/DNN Platform/DotNetNuke.Web.Client/Controls/ClientResourceInclude.cs +++ b/DNN Platform/DotNetNuke.Web.Client/Controls/ClientResourceInclude.cs @@ -14,15 +14,15 @@ namespace DotNetNuke.Web.Client.ClientResourceManagement /// Represents an included client resource. public abstract class ClientResourceInclude : Control { - private readonly IClientResourcesController clientResourcesController; + private readonly IClientResourceController clientResourceController; /// /// Initializes a new instance of the class. /// - /// The client resources controller. - protected ClientResourceInclude(IClientResourcesController clientResourcesController) + /// The client resources controller. + protected ClientResourceInclude(IClientResourceController clientResourceController) { - this.clientResourcesController = clientResourcesController; + this.clientResourceController = clientResourceController; } /// @@ -81,7 +81,7 @@ protected override void OnInit(EventArgs e) switch (this.DependencyType) { case ClientDependencyType.Css: - this.clientResourcesController.CreateStylesheet() + this.clientResourceController.CreateStylesheet() .FromSrc(this.FilePath, this.PathNameAlias) .SetNameAndVersion(this.Name, this.Version, this.ForceVersion) .SetProvider(this.ForceProvider) @@ -89,7 +89,7 @@ protected override void OnInit(EventArgs e) .Register(); break; case ClientDependencyType.Javascript: - this.clientResourcesController.CreateScript() + this.clientResourceController.CreateScript() .FromSrc(this.FilePath, this.PathNameAlias) .SetNameAndVersion(this.Name, this.Version, this.ForceVersion) .SetProvider(this.ForceProvider) diff --git a/DNN Platform/DotNetNuke.Web.Client/Controls/ClientResourceLoader.cs b/DNN Platform/DotNetNuke.Web.Client/Controls/ClientResourceLoader.cs index 303ecf54720..b4d0c19eaef 100644 --- a/DNN Platform/DotNetNuke.Web.Client/Controls/ClientResourceLoader.cs +++ b/DNN Platform/DotNetNuke.Web.Client/Controls/ClientResourceLoader.cs @@ -13,16 +13,16 @@ namespace DotNetNuke.Web.Client.ClientResourceManagement [ParseChildren(typeof(ClientResourcePath), ChildrenAsProperties = true)] public class ClientResourceLoader : Control { - private readonly IClientResourcesController clientResourcesController; + private readonly IClientResourceController clientResourceController; #pragma warning disable IDE0290 /// /// Initializes a new instance of the class. /// - /// The client resources controller to use for resource registration. - public ClientResourceLoader(IClientResourcesController clientResourcesController) + /// The client resources controller to use for resource registration. + public ClientResourceLoader(IClientResourceController clientResourceController) { - this.clientResourcesController = clientResourcesController; + this.clientResourceController = clientResourceController; this.Paths = new ClientResourcePathCollection(); } #pragma warning restore IDE0290 @@ -53,7 +53,7 @@ protected override void OnLoad(System.EventArgs e) { foreach (var path in this.Paths) { - this.clientResourcesController.RegisterPathNameAlias(path.Name, path.Path); + this.clientResourceController.RegisterPathNameAlias(path.Name, path.Path); } base.OnLoad(e); diff --git a/DNN Platform/DotNetNuke.Web.Client/Controls/DnnCssExclude.cs b/DNN Platform/DotNetNuke.Web.Client/Controls/DnnCssExclude.cs index c8781e8c5ae..8cc63044afa 100644 --- a/DNN Platform/DotNetNuke.Web.Client/Controls/DnnCssExclude.cs +++ b/DNN Platform/DotNetNuke.Web.Client/Controls/DnnCssExclude.cs @@ -14,9 +14,9 @@ public class DnnCssExclude : ClientResourceExclude /// /// Initializes a new instance of the class. /// - /// The controller used to manage client resources. - public DnnCssExclude(IClientResourcesController clientResourcesController) - : base(clientResourcesController) + /// The controller used to manage client resources. + public DnnCssExclude(IClientResourceController clientResourceController) + : base(clientResourceController) { this.DependencyType = ClientDependencyType.Css; } diff --git a/DNN Platform/DotNetNuke.Web.Client/Controls/DnnCssInclude.cs b/DNN Platform/DotNetNuke.Web.Client/Controls/DnnCssInclude.cs index e1749b9b32f..b641edbbf00 100644 --- a/DNN Platform/DotNetNuke.Web.Client/Controls/DnnCssInclude.cs +++ b/DNN Platform/DotNetNuke.Web.Client/Controls/DnnCssInclude.cs @@ -15,9 +15,9 @@ public class DnnCssInclude : ClientResourceInclude /// /// Initializes a new instance of the class. /// - /// The client resources controller. - public DnnCssInclude(IClientResourcesController clientResourcesController) - : base(clientResourcesController) + /// The client resources controller. + public DnnCssInclude(IClientResourceController clientResourceController) + : base(clientResourceController) { this.ForceProvider = ClientResourceProviders.DefaultCssProvider; this.DependencyType = ClientDependencyType.Css; diff --git a/DNN Platform/DotNetNuke.Web.Client/Controls/DnnHtmlInclude.cs b/DNN Platform/DotNetNuke.Web.Client/Controls/DnnHtmlInclude.cs index cbfb7b56489..168b22f69f0 100644 --- a/DNN Platform/DotNetNuke.Web.Client/Controls/DnnHtmlInclude.cs +++ b/DNN Platform/DotNetNuke.Web.Client/Controls/DnnHtmlInclude.cs @@ -25,11 +25,11 @@ public class DnnHtmlInclude : Literal private static readonly Regex LinkTagRegex = new Regex(string.Format(TagPattern, "link"), RegexOptions.IgnoreCase | RegexOptions.CultureInvariant | RegexOptions.Compiled); private static readonly Regex ScriptTagRegex = new Regex(string.Format(TagPattern, "script"), RegexOptions.IgnoreCase | RegexOptions.CultureInvariant | RegexOptions.Compiled); - private readonly IClientResourcesController clientResourcesController; + private readonly IClientResourceController clientResourceController; - public DnnHtmlInclude(IClientResourcesController clientResourcesController) + public DnnHtmlInclude(IClientResourceController clientResourceController) { - this.clientResourcesController = clientResourcesController; + this.clientResourceController = clientResourceController; } /// @@ -67,7 +67,7 @@ private void RegisterIncludes(IEnumerable files, ClientDependencyType switch (dependencyType) { case ClientDependencyType.Css: - var styleSheet = this.clientResourcesController.CreateStylesheet() + var styleSheet = this.clientResourceController.CreateStylesheet() .FromSrc(file.FilePath) .SetProvider(file.ForceProvider) .SetPriority(file.Priority); @@ -79,7 +79,7 @@ private void RegisterIncludes(IEnumerable files, ClientDependencyType styleSheet.Register(); break; case ClientDependencyType.Javascript: - var script = this.clientResourcesController.CreateScript() + var script = this.clientResourceController.CreateScript() .FromSrc(file.FilePath) .SetProvider(file.ForceProvider) .SetPriority(file.Priority); diff --git a/DNN Platform/DotNetNuke.Web.Client/Controls/DnnJsExclude.cs b/DNN Platform/DotNetNuke.Web.Client/Controls/DnnJsExclude.cs index 9d2fc5e9c47..3ffb3808cc5 100644 --- a/DNN Platform/DotNetNuke.Web.Client/Controls/DnnJsExclude.cs +++ b/DNN Platform/DotNetNuke.Web.Client/Controls/DnnJsExclude.cs @@ -16,9 +16,9 @@ public class DnnJsExclude : ClientResourceExclude /// /// Initializes a new instance of the class. /// - /// The controller used to manage client resources. - public DnnJsExclude(IClientResourcesController clientResourcesController) - : base(clientResourcesController) + /// The controller used to manage client resources. + public DnnJsExclude(IClientResourceController clientResourceController) + : base(clientResourceController) { this.DependencyType = ClientDependencyType.Javascript; } diff --git a/DNN Platform/DotNetNuke.Web.Client/Controls/DnnJsInclude.cs b/DNN Platform/DotNetNuke.Web.Client/Controls/DnnJsInclude.cs index 73373b1191d..ae82adf7165 100644 --- a/DNN Platform/DotNetNuke.Web.Client/Controls/DnnJsInclude.cs +++ b/DNN Platform/DotNetNuke.Web.Client/Controls/DnnJsInclude.cs @@ -16,9 +16,9 @@ public class DnnJsInclude : ClientResourceInclude /// Initializes a new instance of the class. /// Sets up default settings for the control. /// - /// The client resources controller. - public DnnJsInclude(IClientResourcesController clientResourcesController) - : base(clientResourcesController) + /// The client resources controller. + public DnnJsInclude(IClientResourceController clientResourceController) + : base(clientResourceController) { this.ForceProvider = ClientResourceProviders.DefaultJsProvider; this.DependencyType = ClientDependencyType.Javascript; diff --git a/DNN Platform/DotNetNuke.Web.Client/Controls/DnnResources.cs b/DNN Platform/DotNetNuke.Web.Client/Controls/DnnResources.cs index c7bf80181c2..49930b31084 100644 --- a/DNN Platform/DotNetNuke.Web.Client/Controls/DnnResources.cs +++ b/DNN Platform/DotNetNuke.Web.Client/Controls/DnnResources.cs @@ -11,11 +11,11 @@ namespace DotNetNuke.Web.Client.ClientResourceManagement public class DnnResources : Literal { - private readonly IClientResourcesController clientResourcesController; + private readonly IClientResourceController clientResourceController; - public DnnResources(IClientResourcesController clientResourcesController) + public DnnResources(IClientResourceController clientResourceController) { - this.clientResourcesController = clientResourcesController; + this.clientResourceController = clientResourceController; } public string ApplicationPath { get; set; } @@ -25,7 +25,7 @@ public DnnResources(IClientResourcesController clientResourcesController) protected override void Render(HtmlTextWriter writer) { base.Render(writer); - writer.Write(this.clientResourcesController.RenderDependencies(ResourceType.All, this.Provider, this.ApplicationPath)); + writer.Write(this.clientResourceController.RenderDependencies(ResourceType.All, this.Provider, this.ApplicationPath)); } } } diff --git a/DNN Platform/DotNetNuke.WebUtility/ClientAPI.vb b/DNN Platform/DotNetNuke.WebUtility/ClientAPI.vb index 7761dd0f938..46ec0afcf18 100644 --- a/DNN Platform/DotNetNuke.WebUtility/ClientAPI.vb +++ b/DNN Platform/DotNetNuke.WebUtility/ClientAPI.vb @@ -664,7 +664,7 @@ Namespace DotNetNuke.UI.Utilities ''' ''' ----------------------------------------------------------------------------- Public Shared Sub RegisterClientReference(ByVal objPage As Page, ByVal eRef As ClientNamespaceReferences) - Dim controller As IClientResourcesController = GetClientResourcesController(objPage) + Dim controller As IClientResourceController = GetClientResourcesController(objPage) Select Case eRef Case ClientNamespaceReferences.dnn If Not IsClientScriptBlockRegistered(objPage, "dnn.js") Then @@ -862,7 +862,7 @@ Namespace DotNetNuke.UI.Utilities If BrowserSupportsFunctionality(ClientFunctionality.DHTML) Then RegisterClientReference(objPage, ClientNamespaceReferences.dnn_dom) - Dim controller As IClientResourcesController = GetClientResourcesController(objPage) + Dim controller As IClientResourceController = GetClientResourcesController(objPage) controller.CreateScript().FromSrc(ScriptPath & "dnn.util.tablereorder.js").Register() AddAttribute(objButton, "onclick", "if (dnn.util.tableReorderMove(this," & CInt(blnUp) & ",'" & strKey & "')) return false;") @@ -1088,9 +1088,9 @@ Namespace DotNetNuke.UI.Utilities #End Region - Friend Shared Function GetClientResourcesController(ByVal page As Page) As IClientResourcesController + Friend Shared Function GetClientResourcesController(ByVal page As Page) As IClientResourceController Dim serviceProvider As IServiceProvider = GetCurrentServiceProvider(page.Request.RequestContext.HttpContext) - Return serviceProvider.GetRequiredService(Of IClientResourcesController)() + Return serviceProvider.GetRequiredService(Of IClientResourceController)() End Function Friend Shared Function GetCurrentServiceProvider(ByVal context As HttpContextBase) As IServiceProvider diff --git a/DNN Platform/Library/Framework/JavaScriptLibraries/JavaScript.cs b/DNN Platform/Library/Framework/JavaScriptLibraries/JavaScript.cs index 4515d64b534..54baf59e994 100644 --- a/DNN Platform/Library/Framework/JavaScriptLibraries/JavaScript.cs +++ b/DNN Platform/Library/Framework/JavaScriptLibraries/JavaScript.cs @@ -686,10 +686,10 @@ private static int GetFileOrder(JavaScriptLibrary jsl) } } - private static IClientResourcesController GetClientResourcesController(HttpContextBase context) + private static IClientResourceController GetClientResourcesController(HttpContextBase context) { var serviceProvider = GetCurrentServiceProvider(context); - return serviceProvider.GetRequiredService(); + return serviceProvider.GetRequiredService(); } private static IServiceProvider GetCurrentServiceProvider(HttpContextBase context) diff --git a/DNN Platform/Library/Services/ClientDependency/DependencyController.cs b/DNN Platform/Library/Services/ClientDependency/DependencyController.cs index 022296a6af0..b9f41c37794 100644 --- a/DNN Platform/Library/Services/ClientDependency/DependencyController.cs +++ b/DNN Platform/Library/Services/ClientDependency/DependencyController.cs @@ -14,10 +14,10 @@ namespace DotNetNuke.Services.ClientDependency internal class DependencyController { - internal static IClientResourcesController GetClientResourcesController(Page page) + internal static IClientResourceController GetClientResourcesController(Page page) { var serviceProvider = GetCurrentServiceProvider(page.Request.RequestContext.HttpContext); - return serviceProvider.GetRequiredService(); + return serviceProvider.GetRequiredService(); } internal static IServiceProvider GetCurrentServiceProvider(HttpContextBase context) diff --git a/DNN Platform/Library/Services/ClientDependency/Extensions.cs b/DNN Platform/Library/Services/ClientDependency/Extensions.cs index d0c174dee1e..9f2a8ca92be 100644 --- a/DNN Platform/Library/Services/ClientDependency/Extensions.cs +++ b/DNN Platform/Library/Services/ClientDependency/Extensions.cs @@ -14,10 +14,10 @@ public static class Extensions /// /// Registers a font resource by its path. /// - /// The to extend. + /// The to extend. /// The path to the font resource to register. /// Whether to check if the script already exists before registering. - public static void RegisterFont(this IClientResourcesController controller, string fontPath, bool checkIfExists = false) + public static void RegisterFont(this IClientResourceController controller, string fontPath, bool checkIfExists = false) { if (controller == null) { @@ -44,10 +44,10 @@ public static void RegisterFont(this IClientResourcesController controller, stri /// /// Registers a script resource by its path. /// - /// The to extend. + /// The to extend. /// The path to the script resource to register. /// Whether to check if the script already exists before registering. - public static void RegisterScript(this IClientResourcesController controller, string scriptPath, bool checkIfExists = false) + public static void RegisterScript(this IClientResourceController controller, string scriptPath, bool checkIfExists = false) { if (controller == null) { @@ -74,11 +74,11 @@ public static void RegisterScript(this IClientResourcesController controller, st /// /// Registers a script resource by its path. /// - /// The to extend. + /// The to extend. /// The path to the script resource to register. /// The priority for loading the script. /// Whether to check if the script already exists before registering. - public static void RegisterScript(this IClientResourcesController controller, string scriptPath, FileOrder.Js priority, bool checkIfExists = false) + public static void RegisterScript(this IClientResourceController controller, string scriptPath, FileOrder.Js priority, bool checkIfExists = false) { if (controller == null) { @@ -108,10 +108,10 @@ public static void RegisterScript(this IClientResourcesController controller, st /// /// Registers a stylesheet resource by its path. /// - /// The to extend. + /// The to extend. /// The path to the stylesheet resource to register. /// Whether to check if the script already exists before registering. - public static void RegisterStylesheet(this IClientResourcesController controller, string stylesheetPath, bool checkIfExists = false) + public static void RegisterStylesheet(this IClientResourceController controller, string stylesheetPath, bool checkIfExists = false) { if (controller == null) { @@ -138,11 +138,11 @@ public static void RegisterStylesheet(this IClientResourcesController controller /// /// Registers a stylesheet resource by its path. /// - /// The to extend. + /// The to extend. /// The path to the stylesheet resource to register. /// The priority for loading the stylesheet. /// Whether to check if the script already exists before registering. - public static void RegisterStylesheet(this IClientResourcesController controller, string stylesheetPath, FileOrder.Css priority, bool checkIfExists = false) + public static void RegisterStylesheet(this IClientResourceController controller, string stylesheetPath, FileOrder.Css priority, bool checkIfExists = false) { if (controller == null) { diff --git a/DNN Platform/Library/UI/Containers/Container.cs b/DNN Platform/Library/UI/Containers/Container.cs index 77a55a8c9d4..9ee9ee8b5ca 100644 --- a/DNN Platform/Library/UI/Containers/Container.cs +++ b/DNN Platform/Library/UI/Containers/Container.cs @@ -32,16 +32,16 @@ namespace DotNetNuke.UI.Containers public class Container : UserControl { private readonly ILog tracelLogger = LoggerSource.Instance.GetLogger("DNN.Trace"); - private readonly IClientResourcesController clientResourcesController; + private readonly IClientResourceController clientResourceController; private HtmlContainerControl contentPane; private ModuleInfo moduleConfiguration; private ModuleHost moduleHost; /// Initializes a new instance of the class. - /// The client resources controller. - public Container(IClientResourcesController clientResourcesController) + /// The client resources controller. + public Container(IClientResourceController clientResourceController) { - this.clientResourcesController = clientResourcesController ?? Globals.GetCurrentServiceProvider().GetRequiredService(); + this.clientResourceController = clientResourceController ?? Globals.GetCurrentServiceProvider().GetRequiredService(); } /// Gets the ModuleControl object that this container is displaying. @@ -323,7 +323,7 @@ private void ProcessModule() this.ContentPane.Controls.Add(this.LoadControl(this.PortalSettings.DefaultModuleActionMenu)); // register admin.css - this.clientResourcesController.RegisterStylesheet(Globals.HostPath + "admin.css", FileOrder.Css.AdminCss, true); + this.clientResourceController.RegisterStylesheet(Globals.HostPath + "admin.css", FileOrder.Css.AdminCss, true); } // Process Module Header @@ -363,8 +363,8 @@ private void ProcessModule() /// private void ProcessStylesheets(bool includeModuleCss) { - this.clientResourcesController.RegisterStylesheet(this.ContainerPath + "container.css", FileOrder.Css.ContainerCss, true); - this.clientResourcesController.RegisterStylesheet(this.ContainerSrc.Replace(".ascx", ".css"), FileOrder.Css.SpecificContainerCss, true); + this.clientResourceController.RegisterStylesheet(this.ContainerPath + "container.css", FileOrder.Css.ContainerCss, true); + this.clientResourceController.RegisterStylesheet(this.ContainerSrc.Replace(".ascx", ".css"), FileOrder.Css.SpecificContainerCss, true); // process the base class module properties if (includeModuleCss) @@ -384,14 +384,14 @@ private void ProcessStylesheets(bool includeModuleCss) stylesheet = Globals.ApplicationPath + "/DesktopModules/" + folderName.Replace("\\", "/") + "/module.css"; } - this.clientResourcesController.RegisterStylesheet(stylesheet, FileOrder.Css.ModuleCss, true); + this.clientResourceController.RegisterStylesheet(stylesheet, FileOrder.Css.ModuleCss, true); } var ix = controlSrc.LastIndexOf("/", StringComparison.Ordinal); if (ix >= 0) { stylesheet = Globals.ApplicationPath + "/" + controlSrc.Substring(0, ix + 1) + "module.css"; - this.clientResourcesController.RegisterStylesheet(stylesheet, FileOrder.Css.ModuleCss, true); + this.clientResourceController.RegisterStylesheet(stylesheet, FileOrder.Css.ModuleCss, true); } } } diff --git a/DNN Platform/Modules/CoreMessaging/Subscriptions.ascx.cs b/DNN Platform/Modules/CoreMessaging/Subscriptions.ascx.cs index 176c0a61406..aaa5681285d 100644 --- a/DNN Platform/Modules/CoreMessaging/Subscriptions.ascx.cs +++ b/DNN Platform/Modules/CoreMessaging/Subscriptions.ascx.cs @@ -31,13 +31,13 @@ namespace DotNetNuke.Modules.CoreMessaging public partial class Subscriptions : UserControl { private const string SharedResources = "~/DesktopModules/CoreMessaging/App_LocalResources/SharedResources.resx"; - private readonly IClientResourcesController clientResourcesController; + private readonly IClientResourceController clientResourceController; /// Initializes a new instance of the class. - /// The client resources controller. - public Subscriptions(IClientResourcesController clientResourcesController) + /// The client resources controller. + public Subscriptions(IClientResourceController clientResourceController) { - this.clientResourcesController = clientResourcesController ?? Globals.GetCurrentServiceProvider().GetRequiredService(); + this.clientResourceController = clientResourceController ?? Globals.GetCurrentServiceProvider().GetRequiredService(); } /// Gets or sets the module context. @@ -90,10 +90,10 @@ protected override void OnLoad(EventArgs e) if (this.Request.IsAuthenticated) { - this.clientResourcesController.RegisterScript("~/DesktopModules/CoreMessaging/Scripts/LocalizationController.js"); - this.clientResourcesController.RegisterScript("~/DesktopModules/CoreMessaging/Scripts/SubscriptionsViewModel.js"); - this.clientResourcesController.RegisterScript("~/DesktopModules/CoreMessaging/Scripts/Subscription.js"); - this.clientResourcesController.RegisterStylesheet("~/DesktopModules/CoreMessaging/subscriptions.css"); + this.clientResourceController.RegisterScript("~/DesktopModules/CoreMessaging/Scripts/LocalizationController.js"); + this.clientResourceController.RegisterScript("~/DesktopModules/CoreMessaging/Scripts/SubscriptionsViewModel.js"); + this.clientResourceController.RegisterScript("~/DesktopModules/CoreMessaging/Scripts/Subscription.js"); + this.clientResourceController.RegisterStylesheet("~/DesktopModules/CoreMessaging/subscriptions.css"); } else { diff --git a/DNN Platform/Modules/CoreMessaging/View.ascx.cs b/DNN Platform/Modules/CoreMessaging/View.ascx.cs index 8d2108560f3..52a1d83889b 100644 --- a/DNN Platform/Modules/CoreMessaging/View.ascx.cs +++ b/DNN Platform/Modules/CoreMessaging/View.ascx.cs @@ -26,7 +26,7 @@ public partial class View : PortalModuleBase { private readonly IJavaScriptLibraryHelper javaScript; private readonly IPortalController portalController; - private readonly IClientResourcesController clientResourcesController; + private readonly IClientResourceController clientResourceController; /// Initializes a new instance of the class. [Obsolete("Deprecated in DotNetNuke 10.0.2. Please use overload with IPortalController. Scheduled removal in v12.0.0.")] @@ -46,12 +46,12 @@ public View(IJavaScriptLibraryHelper javaScript) /// Initializes a new instance of the class. /// The JavaScript library helper. /// The portal controller. - /// The client resources controller. - public View(IJavaScriptLibraryHelper javaScript, IPortalController portalController, IClientResourcesController clientResourcesController) + /// The client resources controller. + public View(IJavaScriptLibraryHelper javaScript, IPortalController portalController, IClientResourceController clientResourceController) { this.javaScript = javaScript ?? this.DependencyProvider.GetRequiredService(); this.portalController = portalController ?? this.DependencyProvider.GetRequiredService(); - this.clientResourcesController = clientResourcesController ?? this.DependencyProvider.GetRequiredService(); + this.clientResourceController = clientResourceController ?? this.DependencyProvider.GetRequiredService(); } /// Gets the user id from the request parameters. @@ -110,7 +110,7 @@ protected override void OnInit(EventArgs e) ServicesFramework.Instance.RequestAjaxAntiForgerySupport(); this.javaScript.RequestRegistration(CommonJs.DnnPlugins); this.javaScript.RequestRegistration(CommonJs.Knockout); - this.clientResourcesController.RegisterScript("~/DesktopModules/CoreMessaging/Scripts/CoreMessaging.js"); + this.clientResourceController.RegisterScript("~/DesktopModules/CoreMessaging/Scripts/CoreMessaging.js"); this.javaScript.RequestRegistration(CommonJs.jQueryFileUpload); this.AddIe7StyleSheet(); diff --git a/DNN Platform/Website/Default.aspx.cs b/DNN Platform/Website/Default.aspx.cs index c6dd59bf066..95a27ccda90 100644 --- a/DNN Platform/Website/Default.aspx.cs +++ b/DNN Platform/Website/Default.aspx.cs @@ -61,7 +61,7 @@ public partial class DefaultPage : CDefault, IClientAPICallbackEventHandler private readonly IHostSettingsService hostSettingsService; private readonly IEventLogger eventLogger; private readonly IPortalSettingsController portalSettingsController; - private readonly IClientResourcesController clientResourcesController; + private readonly IClientResourceController clientResourceController; /// Initializes a new instance of the class. [Obsolete("Deprecated in DotNetNuke 10.0.2. Please use overload with INavigationManager. Scheduled removal in v12.0.0.")] @@ -80,7 +80,7 @@ public DefaultPage() /// The event logger. /// The portal controller. /// The portal settings controller. - /// The client resources controller. + /// The client resources controller. public DefaultPage( INavigationManager navigationManager, IApplicationInfo appInfo, @@ -91,7 +91,7 @@ public DefaultPage( IEventLogger eventLogger, IPortalController portalController, IPortalSettingsController portalSettingsController, - IClientResourcesController clientResourcesController) + IClientResourceController clientResourceController) : base(portalController, appStatus, hostSettings) { this.NavigationManager = navigationManager ?? Globals.GetCurrentServiceProvider().GetRequiredService(); @@ -102,7 +102,7 @@ public DefaultPage( this.hostSettingsService = hostSettingsService ?? Globals.GetCurrentServiceProvider().GetRequiredService(); this.eventLogger = eventLogger ?? Globals.GetCurrentServiceProvider().GetRequiredService(); this.portalSettingsController = portalSettingsController ?? Globals.GetCurrentServiceProvider().GetRequiredService(); - this.clientResourcesController = clientResourcesController ?? Globals.GetCurrentServiceProvider().GetRequiredService(); + this.clientResourceController = clientResourceController ?? Globals.GetCurrentServiceProvider().GetRequiredService(); } public string CurrentSkinPath => ((PortalSettings)HttpContext.Current.Items["PortalSettings"]).ActiveTab.SkinPath; @@ -296,19 +296,19 @@ protected override void OnInit(EventArgs e) } // add CSS links - this.clientResourcesController.CreateStylesheet() + this.clientResourceController.CreateStylesheet() .FromSrc("~/Resources/Shared/stylesheets/dnndefault/10.0.0/default.css") .SetNameAndVersion("dnndefault", "10.0.0", false) .SetPriority((int)FileOrder.Css.DefaultCss) .Register(); - this.clientResourcesController.RegisterStylesheet(string.Concat(ctlSkin.SkinPath, "skin.css"), FileOrder.Css.SkinCss, true); - this.clientResourcesController.RegisterStylesheet(ctlSkin.SkinSrc.Replace(".ascx", ".css"), FileOrder.Css.SpecificSkinCss, true); + this.clientResourceController.RegisterStylesheet(string.Concat(ctlSkin.SkinPath, "skin.css"), FileOrder.Css.SkinCss, true); + this.clientResourceController.RegisterStylesheet(ctlSkin.SkinSrc.Replace(".ascx", ".css"), FileOrder.Css.SpecificSkinCss, true); // add skin to page this.SkinPlaceHolder.Controls.Add(ctlSkin); - this.clientResourcesController.RegisterStylesheet(string.Concat(this.PortalSettings.HomeDirectory, "portal.css"), FileOrder.Css.PortalCss, true); + this.clientResourceController.RegisterStylesheet(string.Concat(this.PortalSettings.HomeDirectory, "portal.css"), FileOrder.Css.PortalCss, true); // add Favicon this.ManageFavicon(); @@ -428,7 +428,7 @@ private void InitializePage() // Configure the ActiveTab with Skin/Container information this.portalSettingsController.ConfigureActiveTab(this.PortalSettings); - this.clientResourcesController.RegisterPathNameAlias("SkinPath", this.CurrentSkinPath); + this.clientResourceController.RegisterPathNameAlias("SkinPath", this.CurrentSkinPath); // redirect to a specific tab based on name if (!string.IsNullOrEmpty(this.Request.QueryString["tabname"])) @@ -643,7 +643,7 @@ private void InitializePage() // register css variables var cssVariablesStyleSheet = this.GetCssVariablesStylesheet(); - this.clientResourcesController.RegisterStylesheet(cssVariablesStyleSheet, FileOrder.Css.DefaultCss); + this.clientResourceController.RegisterStylesheet(cssVariablesStyleSheet, FileOrder.Css.DefaultCss); // register the custom stylesheet of current page if (this.PortalSettings.ActiveTab.TabSettings.ContainsKey("CustomStylesheet") && !string.IsNullOrEmpty(this.PortalSettings.ActiveTab.TabSettings["CustomStylesheet"].ToString())) @@ -654,11 +654,11 @@ private void InitializePage() var stylesheetFile = this.GetPageStylesheetFileInfo(styleSheet); if (stylesheetFile != null) { - this.clientResourcesController.RegisterStylesheet(FileManager.Instance.GetUrl(stylesheetFile)); + this.clientResourceController.RegisterStylesheet(FileManager.Instance.GetUrl(stylesheetFile)); } else { - this.clientResourcesController.RegisterStylesheet(styleSheet); + this.clientResourceController.RegisterStylesheet(styleSheet); } } @@ -670,9 +670,9 @@ private void InitializePage() ClientAPI.RegisterClientVariable(this, "cc_message", Localization.GetString("cc_message", Localization.GlobalResourceFile), true); ClientAPI.RegisterClientVariable(this, "cc_dismiss", Localization.GetString("cc_dismiss", Localization.GlobalResourceFile), true); ClientAPI.RegisterClientVariable(this, "cc_link", Localization.GetString("cc_link", Localization.GlobalResourceFile), true); - this.clientResourcesController.RegisterScript("~/Resources/Shared/Components/CookieConsent/cookieconsent.min.js", FileOrder.Js.DnnControls); - this.clientResourcesController.RegisterStylesheet("~/Resources/Shared/Components/CookieConsent/cookieconsent.min.css", FileOrder.Css.ResourceCss); - this.clientResourcesController.RegisterStylesheet("~/js/dnn.cookieconsent.js"); + this.clientResourceController.RegisterScript("~/Resources/Shared/Components/CookieConsent/cookieconsent.min.js", FileOrder.Js.DnnControls); + this.clientResourceController.RegisterStylesheet("~/Resources/Shared/Components/CookieConsent/cookieconsent.min.css", FileOrder.Css.ResourceCss); + this.clientResourceController.RegisterStylesheet("~/js/dnn.cookieconsent.js"); } } @@ -742,7 +742,7 @@ private void LoadPopupScriptsIfNeeded() var popupFilePath = HttpContext.Current.IsDebuggingEnabled ? "~/js/Debug/dnn.modalpopup.js" : "~/js/dnn.modalpopup.js"; - this.clientResourcesController.RegisterScript(popupFilePath, FileOrder.Js.DnnModalPopup); + this.clientResourceController.RegisterScript(popupFilePath, FileOrder.Js.DnnModalPopup); } } diff --git a/DNN Platform/Website/DesktopModules/Admin/SearchResults/SearchResults.ascx.cs b/DNN Platform/Website/DesktopModules/Admin/SearchResults/SearchResults.ascx.cs index c2a6b6ac069..4e369349c7b 100644 --- a/DNN Platform/Website/DesktopModules/Admin/SearchResults/SearchResults.ascx.cs +++ b/DNN Platform/Website/DesktopModules/Admin/SearchResults/SearchResults.ascx.cs @@ -31,7 +31,7 @@ public partial class SearchResults : PortalModuleBase private const string MyFileName = "SearchResults.ascx"; private readonly IJavaScriptLibraryHelper javaScript; - private readonly IClientResourcesController clientResourcesController; + private readonly IClientResourceController clientResourceController; private IList searchContentSources; private IList searchPortalIds; @@ -43,11 +43,11 @@ public SearchResults() /// Initializes a new instance of the class. /// The JavaScript library helper. - /// The client resources controller. - public SearchResults(IJavaScriptLibraryHelper javaScript, IClientResourcesController clientResourcesController) + /// The client resources controller. + public SearchResults(IJavaScriptLibraryHelper javaScript, IClientResourceController clientResourceController) { this.javaScript = javaScript ?? Globals.GetCurrentServiceProvider().GetRequiredService(); - this.clientResourcesController = clientResourcesController ?? Globals.GetCurrentServiceProvider().GetRequiredService(); + this.clientResourceController = clientResourceController ?? Globals.GetCurrentServiceProvider().GetRequiredService(); } protected string SearchTerm @@ -362,9 +362,9 @@ protected override void OnLoad(EventArgs e) ServicesFramework.Instance.RequestAjaxAntiForgerySupport(); this.javaScript.RequestRegistration(CommonJs.DnnPlugins); - this.clientResourcesController.RegisterScript("~/Resources/Shared/scripts/dnn.searchBox.js"); - this.clientResourcesController.RegisterStylesheet("~/Resources/Shared/stylesheets/dnn.searchBox.css", Abstractions.ClientResources.FileOrder.Css.ModuleCss); - this.clientResourcesController.RegisterScript("~/DesktopModules/admin/SearchResults/dnn.searchResult.js"); + this.clientResourceController.RegisterScript("~/Resources/Shared/scripts/dnn.searchBox.js"); + this.clientResourceController.RegisterStylesheet("~/Resources/Shared/stylesheets/dnn.searchBox.css", Abstractions.ClientResources.FileOrder.Css.ModuleCss); + this.clientResourceController.RegisterScript("~/DesktopModules/admin/SearchResults/dnn.searchResult.js"); this.CultureCode = Thread.CurrentThread.CurrentCulture.ToString(); diff --git a/DNN Platform/Website/DesktopModules/Admin/Security/Password.ascx.cs b/DNN Platform/Website/DesktopModules/Admin/Security/Password.ascx.cs index 5db9ff842f9..ea25d74f2ba 100644 --- a/DNN Platform/Website/DesktopModules/Admin/Security/Password.ascx.cs +++ b/DNN Platform/Website/DesktopModules/Admin/Security/Password.ascx.cs @@ -34,7 +34,7 @@ public partial class Password : UserModuleBase private readonly IEventLogger eventLogger; private readonly IHostSettings hostSettings; private readonly IJavaScriptLibraryHelper javaScript; - private readonly IClientResourcesController clientResourcesController; + private readonly IClientResourceController clientResourceController; /// Initializes a new instance of the class. public Password() @@ -46,13 +46,13 @@ public Password() /// The event logger. /// The host settings. /// The JavaScript library helper. - /// The client resources controller. - public Password(IEventLogger eventLogger, IHostSettings hostSettings, IJavaScriptLibraryHelper javaScript, IClientResourcesController clientResourcesController) + /// The client resources controller. + public Password(IEventLogger eventLogger, IHostSettings hostSettings, IJavaScriptLibraryHelper javaScript, IClientResourceController clientResourceController) { this.eventLogger = eventLogger ?? Common.Globals.GetCurrentServiceProvider().GetRequiredService(); this.hostSettings = hostSettings ?? Common.Globals.GetCurrentServiceProvider().GetRequiredService(); this.javaScript = javaScript ?? Common.Globals.GetCurrentServiceProvider().GetRequiredService(); - this.clientResourcesController = clientResourcesController ?? Common.Globals.GetCurrentServiceProvider().GetRequiredService(); + this.clientResourceController = clientResourceController ?? Common.Globals.GetCurrentServiceProvider().GetRequiredService(); } /// A function which handles an event with . @@ -255,12 +255,12 @@ protected override void OnLoad(EventArgs e) /// protected override void OnPreRender(EventArgs e) { - this.clientResourcesController.RegisterScript("~/Resources/Shared/scripts/dnn.jquery.extensions.js"); - this.clientResourcesController.RegisterScript("~/Resources/Shared/scripts/dnn.jquery.tooltip.js"); - this.clientResourcesController.RegisterScript("~/Resources/Shared/scripts/dnn.PasswordStrength.js"); - this.clientResourcesController.RegisterScript("~/DesktopModules/Admin/Security/Scripts/dnn.PasswordComparer.js"); + this.clientResourceController.RegisterScript("~/Resources/Shared/scripts/dnn.jquery.extensions.js"); + this.clientResourceController.RegisterScript("~/Resources/Shared/scripts/dnn.jquery.tooltip.js"); + this.clientResourceController.RegisterScript("~/Resources/Shared/scripts/dnn.PasswordStrength.js"); + this.clientResourceController.RegisterScript("~/DesktopModules/Admin/Security/Scripts/dnn.PasswordComparer.js"); - this.clientResourcesController.RegisterStylesheet("~/Resources/Shared/stylesheets/dnn.PasswordStrength.css", FileOrder.Css.ResourceCss); + this.clientResourceController.RegisterStylesheet("~/Resources/Shared/stylesheets/dnn.PasswordStrength.css", FileOrder.Css.ResourceCss); this.javaScript.RequestRegistration(CommonJs.DnnPlugins); diff --git a/DNN Platform/Website/DesktopModules/Admin/Security/Register.ascx.cs b/DNN Platform/Website/DesktopModules/Admin/Security/Register.ascx.cs index 69c72415558..d8e00a29fed 100644 --- a/DNN Platform/Website/DesktopModules/Admin/Security/Register.ascx.cs +++ b/DNN Platform/Website/DesktopModules/Admin/Security/Register.ascx.cs @@ -49,7 +49,7 @@ public partial class Register : UserUserControlBase private readonly IServiceProvider serviceProvider; private readonly IHostSettings hostSettings; private readonly IJavaScriptLibraryHelper javaScript; - private readonly IClientResourcesController clientResourcesController; + private readonly IClientResourceController clientResourceController; /// Initializes a new instance of the class. public Register() @@ -70,14 +70,14 @@ public Register(INavigationManager navigationManager, IServiceProvider servicePr /// The service provider. /// The host settings. /// The JavaScript library helper. - /// The client resources controller. - public Register(INavigationManager navigationManager, IServiceProvider serviceProvider, IHostSettings hostSettings, IJavaScriptLibraryHelper javaScript, IClientResourcesController clientResourcesController) + /// The client resources controller. + public Register(INavigationManager navigationManager, IServiceProvider serviceProvider, IHostSettings hostSettings, IJavaScriptLibraryHelper javaScript, IClientResourceController clientResourceController) { this.serviceProvider = serviceProvider ?? Globals.GetCurrentServiceProvider(); this.navigationManager = navigationManager ?? this.serviceProvider.GetRequiredService(); this.hostSettings = hostSettings ?? this.serviceProvider.GetRequiredService(); this.javaScript = javaScript ?? this.serviceProvider.GetRequiredService(); - this.clientResourcesController = clientResourcesController ?? this.serviceProvider.GetRequiredService(); + this.clientResourceController = clientResourceController ?? this.serviceProvider.GetRequiredService(); } protected string ExcludeTerms @@ -140,9 +140,9 @@ protected override void OnInit(EventArgs e) this.javaScript.RequestRegistration(CommonJs.DnnPlugins); - this.clientResourcesController.RegisterScript("~/Resources/Shared/scripts/dnn.jquery.extensions.js"); - this.clientResourcesController.RegisterScript("~/Resources/Shared/scripts/dnn.jquery.tooltip.js"); - this.clientResourcesController.RegisterScript("~/DesktopModules/Admin/Security/Scripts/dnn.PasswordComparer.js"); + this.clientResourceController.RegisterScript("~/Resources/Shared/scripts/dnn.jquery.extensions.js"); + this.clientResourceController.RegisterScript("~/Resources/Shared/scripts/dnn.jquery.tooltip.js"); + this.clientResourceController.RegisterScript("~/DesktopModules/Admin/Security/Scripts/dnn.PasswordComparer.js"); if (this.PortalSettings.Registration.RegistrationFormType == 0) { diff --git a/DNN Platform/Website/DesktopModules/Admin/Security/User.ascx.cs b/DNN Platform/Website/DesktopModules/Admin/Security/User.ascx.cs index 3b9fedcba3e..386081c7139 100644 --- a/DNN Platform/Website/DesktopModules/Admin/Security/User.ascx.cs +++ b/DNN Platform/Website/DesktopModules/Admin/Security/User.ascx.cs @@ -36,7 +36,7 @@ public partial class User : UserUserControlBase private readonly IJavaScriptLibraryHelper javaScript; private readonly IPortalController portalController; private readonly DataProvider dataProvider; - private readonly IClientResourcesController clientResourcesController; + private readonly IClientResourceController clientResourceController; /// Initializes a new instance of the class. [Obsolete("Deprecated in DotNetNuke 10.0.2. Please use overload with IPortalController. Scheduled removal in v12.0.0.")] @@ -58,14 +58,14 @@ public User(IHostSettings hostSettings, IJavaScriptLibraryHelper javaScript) /// The JavaScript library helper. /// The portal controller. /// The data provider. - /// The client resources controller. - public User(IHostSettings hostSettings, IJavaScriptLibraryHelper javaScript, IPortalController portalController, DataProvider dataProvider, IClientResourcesController clientResourcesController) + /// The client resources controller. + public User(IHostSettings hostSettings, IJavaScriptLibraryHelper javaScript, IPortalController portalController, DataProvider dataProvider, IClientResourceController clientResourceController) { this.hostSettings = hostSettings ?? this.DependencyProvider.GetRequiredService(); this.javaScript = javaScript ?? this.DependencyProvider.GetRequiredService(); this.portalController = portalController ?? this.DependencyProvider.GetRequiredService(); this.dataProvider = dataProvider ?? this.DependencyProvider.GetRequiredService(); - this.clientResourcesController = clientResourcesController ?? this.DependencyProvider.GetRequiredService(); + this.clientResourceController = clientResourceController ?? this.DependencyProvider.GetRequiredService(); } /// Gets a value indicating whether the User is valid. @@ -286,12 +286,12 @@ protected override void OnLoad(EventArgs e) /// protected override void OnPreRender(EventArgs e) { - this.clientResourcesController.RegisterScript("~/Resources/Shared/scripts/dnn.jquery.extensions.js"); - this.clientResourcesController.RegisterScript("~/Resources/Shared/scripts/dnn.jquery.tooltip.js"); - this.clientResourcesController.RegisterScript("~/Resources/Shared/scripts/dnn.PasswordStrength.js"); - this.clientResourcesController.RegisterScript("~/DesktopModules/Admin/Security/Scripts/dnn.PasswordComparer.js"); + this.clientResourceController.RegisterScript("~/Resources/Shared/scripts/dnn.jquery.extensions.js"); + this.clientResourceController.RegisterScript("~/Resources/Shared/scripts/dnn.jquery.tooltip.js"); + this.clientResourceController.RegisterScript("~/Resources/Shared/scripts/dnn.PasswordStrength.js"); + this.clientResourceController.RegisterScript("~/DesktopModules/Admin/Security/Scripts/dnn.PasswordComparer.js"); - this.clientResourcesController.RegisterStylesheet("~/Resources/Shared/stylesheets/dnn.PasswordStrength.css", FileOrder.Css.ResourceCss); + this.clientResourceController.RegisterStylesheet("~/Resources/Shared/stylesheets/dnn.PasswordStrength.css", FileOrder.Css.ResourceCss); this.javaScript.RequestRegistration(CommonJs.DnnPlugins); diff --git a/DNN Platform/Website/admin/Menus/ModuleActions/ModuleActions.ascx.cs b/DNN Platform/Website/admin/Menus/ModuleActions/ModuleActions.ascx.cs index 58a10245da1..cc928e8e3fc 100644 --- a/DNN Platform/Website/admin/Menus/ModuleActions/ModuleActions.ascx.cs +++ b/DNN Platform/Website/admin/Menus/ModuleActions/ModuleActions.ascx.cs @@ -39,7 +39,7 @@ public partial class ModuleActions : ActionBase private readonly List validIDs = new List(); private readonly IModuleControlPipeline moduleControlPipeline; private readonly IJavaScriptLibraryHelper javaScript; - private readonly IClientResourcesController clientResourcesController; + private readonly IClientResourceController clientResourceController; /// Initializes a new instance of the class. public ModuleActions() @@ -50,12 +50,12 @@ public ModuleActions() /// Initializes a new instance of the class. /// The module control pipeline. /// The JavaScript library helper. - /// The client resources controller. - public ModuleActions(IModuleControlPipeline moduleControlPipeline, IJavaScriptLibraryHelper javaScript, IClientResourcesController clientResourcesController) + /// The client resources controller. + public ModuleActions(IModuleControlPipeline moduleControlPipeline, IJavaScriptLibraryHelper javaScript, IClientResourceController clientResourceController) { this.moduleControlPipeline = moduleControlPipeline ?? Globals.GetCurrentServiceProvider().GetRequiredService(); this.javaScript = javaScript ?? Globals.GetCurrentServiceProvider().GetRequiredService(); - this.clientResourcesController = clientResourcesController ?? Globals.GetCurrentServiceProvider().GetRequiredService(); + this.clientResourceController = clientResourceController ?? Globals.GetCurrentServiceProvider().GetRequiredService(); } protected string AdminText @@ -105,9 +105,9 @@ protected override void OnInit(EventArgs e) this.javaScript.RequestRegistration(CommonJs.DnnPlugins); - this.clientResourcesController.RegisterStylesheet("~/admin/menus/ModuleActions/ModuleActions.css", FileOrder.Css.ModuleCss); - this.clientResourcesController.RegisterStylesheet("~/Resources/Shared/stylesheets/dnnicons/css/dnnicon.min.css", FileOrder.Css.ModuleCss); - this.clientResourcesController.RegisterScript("~/admin/menus/ModuleActions/ModuleActions.js"); + this.clientResourceController.RegisterStylesheet("~/admin/menus/ModuleActions/ModuleActions.css", FileOrder.Css.ModuleCss); + this.clientResourceController.RegisterStylesheet("~/Resources/Shared/stylesheets/dnnicons/css/dnnicon.min.css", FileOrder.Css.ModuleCss); + this.clientResourceController.RegisterScript("~/admin/menus/ModuleActions/ModuleActions.js"); ServicesFramework.Instance.RequestAjaxAntiForgerySupport(); } @@ -143,7 +143,7 @@ protected override void OnLoad(EventArgs e) ModuleController.Instance.UpdateModuleSetting(this.ModuleContext.ModuleId, "QS_FirstLoad", "False"); } - this.clientResourcesController.RegisterScript("~/admin/menus/ModuleActions/dnnQuickSettings.js"); + this.clientResourceController.RegisterScript("~/admin/menus/ModuleActions/dnnQuickSettings.js"); } if (this.ActionRoot.Visible) diff --git a/DNN Platform/Website/admin/Security/PasswordReset.ascx.cs b/DNN Platform/Website/admin/Security/PasswordReset.ascx.cs index 057a8b4cd76..38e29ce7a5c 100644 --- a/DNN Platform/Website/admin/Security/PasswordReset.ascx.cs +++ b/DNN Platform/Website/admin/Security/PasswordReset.ascx.cs @@ -35,7 +35,7 @@ public partial class PasswordReset : UserModuleBase private readonly IHostSettings hostSettings; private readonly IJavaScriptLibraryHelper javaScript; private readonly IPortalController portalController; - private readonly IClientResourcesController clientResourcesController; + private readonly IClientResourceController clientResourceController; private string ipAddress; @@ -52,15 +52,15 @@ public PasswordReset() /// The host settings. /// The JavaScript library helper. /// The portal controller. - /// The client resources controller. - public PasswordReset(INavigationManager navigationManager, IEventLogger eventLogger, IHostSettings hostSettings, IJavaScriptLibraryHelper javaScript, IPortalController portalController, IClientResourcesController clientResourcesController) + /// The client resources controller. + public PasswordReset(INavigationManager navigationManager, IEventLogger eventLogger, IHostSettings hostSettings, IJavaScriptLibraryHelper javaScript, IPortalController portalController, IClientResourceController clientResourceController) { this.navigationManager = navigationManager ?? this.DependencyProvider.GetRequiredService(); this.eventLogger = eventLogger ?? this.DependencyProvider.GetRequiredService(); this.hostSettings = hostSettings ?? this.DependencyProvider.GetRequiredService(); this.javaScript = javaScript ?? this.DependencyProvider.GetRequiredService(); this.portalController = portalController ?? this.DependencyProvider.GetRequiredService(); - this.clientResourcesController = clientResourcesController ?? this.DependencyProvider.GetRequiredService(); + this.clientResourceController = clientResourceController ?? this.DependencyProvider.GetRequiredService(); } private string ResetToken @@ -76,12 +76,12 @@ protected override void OnLoad(EventArgs e) this.ipAddress = UserRequestIPAddressController.Instance.GetUserRequestIPAddress(new HttpRequestWrapper(this.Request)); this.javaScript.RequestRegistration(CommonJs.DnnPlugins); - this.clientResourcesController.RegisterScript("~/Resources/Shared/scripts/dnn.jquery.extensions.js"); - this.clientResourcesController.RegisterScript("~/Resources/Shared/scripts/dnn.jquery.tooltip.js"); - this.clientResourcesController.RegisterScript("~/Resources/Shared/scripts/dnn.PasswordStrength.js"); - this.clientResourcesController.RegisterScript("~/DesktopModules/Admin/Security/Scripts/dnn.PasswordComparer.js"); + this.clientResourceController.RegisterScript("~/Resources/Shared/scripts/dnn.jquery.extensions.js"); + this.clientResourceController.RegisterScript("~/Resources/Shared/scripts/dnn.jquery.tooltip.js"); + this.clientResourceController.RegisterScript("~/Resources/Shared/scripts/dnn.PasswordStrength.js"); + this.clientResourceController.RegisterScript("~/DesktopModules/Admin/Security/Scripts/dnn.PasswordComparer.js"); - this.clientResourcesController.RegisterStylesheet("~/Resources/Shared/stylesheets/dnn.PasswordStrength.css", FileOrder.Css.ResourceCss); + this.clientResourceController.RegisterStylesheet("~/Resources/Shared/stylesheets/dnn.PasswordStrength.css", FileOrder.Css.ResourceCss); if (this.PortalSettings.LoginTabId != -1 && this.PortalSettings.ActiveTab.TabID != this.PortalSettings.LoginTabId) { diff --git a/DNN Platform/Website/admin/Skins/Search.ascx.cs b/DNN Platform/Website/admin/Skins/Search.ascx.cs index 6fa683a8fd7..33ce4537ec2 100644 --- a/DNN Platform/Website/admin/Skins/Search.ascx.cs +++ b/DNN Platform/Website/admin/Skins/Search.ascx.cs @@ -28,7 +28,7 @@ public partial class Search : SkinObjectBase private const string MyFileName = "Search.ascx"; private readonly INavigationManager navigationManager; - private readonly IClientResourcesController clientResourcesController; + private readonly IClientResourceController clientResourceController; private bool enableWildSearch = true; private string siteIconURL; @@ -48,11 +48,11 @@ public Search() /// Initializes a new instance of the class. /// The navigation manager. - /// The client resources controller. - public Search(INavigationManager navigationManager, IClientResourcesController clientResourcesController) + /// The client resources controller. + public Search(INavigationManager navigationManager, IClientResourceController clientResourceController) { this.navigationManager = navigationManager ?? Globals.GetCurrentServiceProvider().GetRequiredService(); - this.clientResourcesController = clientResourcesController ?? Globals.GetCurrentServiceProvider().GetRequiredService(); + this.clientResourceController = clientResourceController ?? Globals.GetCurrentServiceProvider().GetRequiredService(); } public string SeeMoreText @@ -386,8 +386,8 @@ protected override void OnLoad(EventArgs e) base.OnLoad(e); Framework.ServicesFramework.Instance.RequestAjaxAntiForgerySupport(); - this.clientResourcesController.RegisterStylesheet("~/Resources/Search/SearchSkinObjectPreview.css", FileOrder.Css.ModuleCss); - this.clientResourcesController.RegisterScript("~/Resources/Search/SearchSkinObjectPreview.js"); + this.clientResourceController.RegisterStylesheet("~/Resources/Search/SearchSkinObjectPreview.css", FileOrder.Css.ModuleCss); + this.clientResourceController.RegisterScript("~/Resources/Search/SearchSkinObjectPreview.js"); this.cmdSearch.Click += this.CmdSearchClick; this.cmdSearchNew.Click += this.CmdSearchNewClick; @@ -466,7 +466,7 @@ protected override void OnPreRender(EventArgs e) } JavaScript.RegisterClientReference(this.Page, ClientAPI.ClientNamespaceReferences.dnn); - this.clientResourcesController.CreateScript().FromSrc("~/Resources/Search/Search.js").SetPriority((int)FileOrder.Js.DefaultPriority).SetProvider(ClientResourceProviders.DnnFormBottomProvider).Register(); + this.clientResourceController.CreateScript().FromSrc("~/Resources/Search/Search.js").SetPriority((int)FileOrder.Js.DefaultPriority).SetProvider(ClientResourceProviders.DnnFormBottomProvider).Register(); this.txtSearchNew.Attributes.Add("autocomplete", "off"); this.txtSearchNew.Attributes.Add("placeholder", this.PlaceHolderText); diff --git a/DNN Platform/Website/admin/Skins/Toast.ascx.cs b/DNN Platform/Website/admin/Skins/Toast.ascx.cs index 7a2f7c678c5..550fc54c43d 100644 --- a/DNN Platform/Website/admin/Skins/Toast.ascx.cs +++ b/DNN Platform/Website/admin/Skins/Toast.ascx.cs @@ -31,18 +31,18 @@ public partial class Toast : SkinObjectBase private static readonly string ToastCacheKey = "DNN_Toast_Config"; private readonly INavigationManager navigationManager; private readonly IJavaScriptLibraryHelper javaScript; - private readonly IClientResourcesController clientResourcesController; + private readonly IClientResourceController clientResourceController; public Toast() : this(null, null, null) { } - public Toast(INavigationManager navigationManager, IJavaScriptLibraryHelper javaScript, IClientResourcesController clientResourcesController) + public Toast(INavigationManager navigationManager, IJavaScriptLibraryHelper javaScript, IClientResourceController clientResourceController) { this.navigationManager = navigationManager ?? Globals.GetCurrentServiceProvider().GetRequiredService(); this.javaScript = javaScript ?? Globals.GetCurrentServiceProvider().GetRequiredService(); - this.clientResourcesController = clientResourcesController ?? Globals.GetCurrentServiceProvider().GetRequiredService(); + this.clientResourceController = clientResourceController ?? Globals.GetCurrentServiceProvider().GetRequiredService(); } protected string ServiceModuleName { get; private set; } @@ -83,8 +83,8 @@ protected override void OnLoad(EventArgs e) this.javaScript.RequestRegistration(CommonJs.jQueryUI); ServicesFramework.Instance.RequestAjaxAntiForgerySupport(); - this.clientResourcesController.RegisterScript("~/Resources/Shared/components/Toast/jquery.toastmessage.js", FileOrder.Js.jQuery); - this.clientResourcesController.RegisterStylesheet("~/Resources/Shared/components/Toast/jquery.toastmessage.css", FileOrder.Css.DefaultCss); + this.clientResourceController.RegisterScript("~/Resources/Shared/components/Toast/jquery.toastmessage.js", FileOrder.Js.jQuery); + this.clientResourceController.RegisterStylesheet("~/Resources/Shared/components/Toast/jquery.toastmessage.css", FileOrder.Css.DefaultCss); this.InitializeConfig(); } diff --git a/Dnn.AdminExperience/Library/Dnn.PersonaBar.UI/admin/personaBar/UserControls/PersonaBarContainer.ascx.cs b/Dnn.AdminExperience/Library/Dnn.PersonaBar.UI/admin/personaBar/UserControls/PersonaBarContainer.ascx.cs index f7307fb4c63..cb842662ae0 100644 --- a/Dnn.AdminExperience/Library/Dnn.PersonaBar.UI/admin/personaBar/UserControls/PersonaBarContainer.ascx.cs +++ b/Dnn.AdminExperience/Library/Dnn.PersonaBar.UI/admin/personaBar/UserControls/PersonaBarContainer.ascx.cs @@ -36,7 +36,7 @@ public partial class PersonaBarContainer : ControlPanelBase private readonly IPersonaBarController personaBarController; private readonly IHostSettings hostSettings; private readonly IJavaScriptLibraryHelper javaScript; - private readonly IClientResourcesController clientResourcesController; + private readonly IClientResourceController clientResourceController; /// Initializes a new instance of the class. public PersonaBarContainer() @@ -49,14 +49,14 @@ public PersonaBarContainer() /// The Persona Bar controller. /// The host settings. /// The JavaScript library helper. - /// The client resources controller. - public PersonaBarContainer(IPersonaBarContainer personaBarContainer, IPersonaBarController personaBarController, IHostSettings hostSettings, IJavaScriptLibraryHelper javaScript, IClientResourcesController clientResourcesController) + /// The client resources controller. + public PersonaBarContainer(IPersonaBarContainer personaBarContainer, IPersonaBarController personaBarController, IHostSettings hostSettings, IJavaScriptLibraryHelper javaScript, IClientResourceController clientResourceController) { this.personaBarContainer = personaBarContainer ?? Globals.GetCurrentServiceProvider().GetRequiredService(); this.personaBarController = personaBarController ?? Globals.GetCurrentServiceProvider().GetRequiredService(); this.hostSettings = hostSettings ?? Globals.GetCurrentServiceProvider().GetRequiredService(); this.javaScript = javaScript ?? Globals.GetCurrentServiceProvider().GetRequiredService(); - this.clientResourcesController = clientResourcesController ?? Globals.GetCurrentServiceProvider().GetRequiredService(); + this.clientResourceController = clientResourceController ?? Globals.GetCurrentServiceProvider().GetRequiredService(); } /// Gets a JSON representation of . @@ -126,15 +126,15 @@ private bool InjectPersonaBar() ServicesFramework.Instance.RequestAjaxAntiForgerySupport(); - this.clientResourcesController.RegisterScript("~/Resources/Shared/Components/Tokeninput/jquery.tokeninput.js"); - this.clientResourcesController.RegisterStylesheet("~/Resources/Shared/Components/Tokeninput/Themes/token-input-facebook.css"); + this.clientResourceController.RegisterScript("~/Resources/Shared/Components/Tokeninput/jquery.tokeninput.js"); + this.clientResourceController.RegisterStylesheet("~/Resources/Shared/Components/Tokeninput/Themes/token-input-facebook.css"); return true; } private void RegisterPersonaBarStyleSheet() { - this.clientResourcesController.RegisterStylesheet("~/DesktopModules/admin/Dnn.PersonaBar/css/personaBarContainer.css"); + this.clientResourceController.RegisterStylesheet("~/DesktopModules/admin/Dnn.PersonaBar/css/personaBarContainer.css"); } private void RemovedAdminStyleSheet() From 135e23a0efd5e68bb95d6a8bb598d6deb62179fd Mon Sep 17 00:00:00 2001 From: Peter Donker Date: Tue, 30 Sep 2025 10:32:39 +0200 Subject: [PATCH 034/199] Include automatic type detection for fonts --- .../FontResourceExtensions.cs | 54 +++++++++++++++++-- .../GenericResourceExtensions.cs | 40 -------------- .../ScriptResourceExtensions.cs | 40 ++++++++++++++ .../StylesheetResourceExtensions.cs | 40 ++++++++++++++ 4 files changed, 130 insertions(+), 44 deletions(-) diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/FontResourceExtensions.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/FontResourceExtensions.cs index 288f3d49c1d..7c641067202 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/FontResourceExtensions.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/FontResourceExtensions.cs @@ -17,11 +17,56 @@ public static class FontResourceExtensions /// Sets the source URL of the resource. /// /// The resource to set the source URL for. - /// The source URL to set. + /// The source URL to set. + /// The resource with the source URL set. + /// The type of resource, which must implement . + public static T FromSrc(this T input, string sourcePath) + where T : IFontResource + { + if (input == null) + { + throw new ArgumentNullException(nameof(input)); + } + + input.FilePath = sourcePath; + switch (input.FilePath?.Substring(input.FilePath.LastIndexOf('.')).ToLowerInvariant()) + { + case ".eot": + input.Type = "application/vnd.ms-fontobject"; + break; + case ".woff": + input.Type = "font/woff"; + break; + case ".woff2": + input.Type = "font/woff2"; + break; + case ".ttf": + input.Type = "font/ttf"; + break; + case ".svg": + input.Type = "image/svg+xml"; + break; + case ".otf": + input.Type = "font/otf"; + break; + default: + input.Type = "application/octet-stream"; + break; + } + + return input; + } + + /// + /// Sets the source URL of the resource. + /// + /// The resource to set the source URL for. + /// The source URL to set. + /// The path alias to set. /// The MIME type of the resource. /// The resource with the source URL set. - /// The type of resource, which must implement . - public static T FromSrc(this T input, string scriptSrc, string mimeType) + /// The type of resource, which must implement . + public static T FromSrc(this T input, string sourcePath, string pathNameAlias, string mimeType) where T : IFontResource { if (input == null) @@ -29,7 +74,8 @@ public static T FromSrc(this T input, string scriptSrc, string mimeType) throw new ArgumentNullException(nameof(input)); } - input.FilePath = scriptSrc; + input.FilePath = sourcePath; + input.PathNameAlias = pathNameAlias; input.Type = mimeType; return input; } diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/GenericResourceExtensions.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/GenericResourceExtensions.cs index 104775dae72..3fb221b808d 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/GenericResourceExtensions.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/GenericResourceExtensions.cs @@ -13,46 +13,6 @@ namespace DotNetNuke.Web.Client.ResourceManager /// public static class GenericResourceExtensions { - /// - /// Sets the source URL of the resource. - /// - /// The resource to set the source URL for. - /// The source URL to set. - /// The resource with the source URL set. - /// The type of resource, which must implement . - public static T FromSrc(this T input, string scriptSrc) - where T : IResource - { - if (input == null) - { - throw new ArgumentNullException(nameof(input)); - } - - input.FilePath = scriptSrc; - return input; - } - - /// - /// Sets the source URL and path alias of the resource. - /// - /// The resource to set the source URL and path alias for. - /// The source URL to set. - /// The path alias to set. - /// The resource with the source URL and path alias set. - /// The type of resource, which must implement . - public static T FromSrc(this T input, string scriptSrc, string pathNameAlias) - where T : IResource - { - if (input == null) - { - throw new ArgumentNullException(nameof(input)); - } - - input.FilePath = scriptSrc; - input.PathNameAlias = pathNameAlias; - return input; - } - /// /// Sets the priority of the resource. /// diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ScriptResourceExtensions.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ScriptResourceExtensions.cs index 90b16551e2b..cc65d0b9f78 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ScriptResourceExtensions.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ScriptResourceExtensions.cs @@ -13,6 +13,46 @@ namespace DotNetNuke.Web.Client.ResourceManager /// public static class ScriptResourceExtensions { + /// + /// Sets the source URL of the resource. + /// + /// The resource to set the source URL for. + /// The source URL to set. + /// The resource with the source URL set. + /// The type of resource, which must implement . + public static T FromSrc(this T input, string sourcePath) + where T : IScriptResource + { + if (input == null) + { + throw new ArgumentNullException(nameof(input)); + } + + input.FilePath = sourcePath; + return input; + } + + /// + /// Sets the source URL and path alias of the resource. + /// + /// The resource to set the source URL and path alias for. + /// The source URL to set. + /// The path alias to set. + /// The resource with the source URL and path alias set. + /// The type of resource, which must implement . + public static T FromSrc(this T input, string sourcePath, string pathNameAlias) + where T : IScriptResource + { + if (input == null) + { + throw new ArgumentNullException(nameof(input)); + } + + input.FilePath = sourcePath; + input.PathNameAlias = pathNameAlias; + return input; + } + /// /// Sets the async attribute of the script resource. /// diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/StylesheetResourceExtensions.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/StylesheetResourceExtensions.cs index 5b78ac76cb5..0b669c742c8 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/StylesheetResourceExtensions.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/StylesheetResourceExtensions.cs @@ -13,6 +13,46 @@ namespace DotNetNuke.Web.Client.ResourceManager /// public static class StylesheetResourceExtensions { + /// + /// Sets the source URL of the resource. + /// + /// The resource to set the source URL for. + /// The source URL to set. + /// The resource with the source URL set. + /// The type of resource, which must implement . + public static T FromSrc(this T input, string sourcePath) + where T : IStylesheetResource + { + if (input == null) + { + throw new ArgumentNullException(nameof(input)); + } + + input.FilePath = sourcePath; + return input; + } + + /// + /// Sets the source URL and path alias of the resource. + /// + /// The resource to set the source URL and path alias for. + /// The source URL to set. + /// The path alias to set. + /// The resource with the source URL and path alias set. + /// The type of resource, which must implement . + public static T FromSrc(this T input, string sourcePath, string pathNameAlias) + where T : IStylesheetResource + { + if (input == null) + { + throw new ArgumentNullException(nameof(input)); + } + + input.FilePath = sourcePath; + input.PathNameAlias = pathNameAlias; + return input; + } + /// /// Sets the disabled attribute of the stylesheet resource. /// From 1be06088a49b0bbbcc9bb48fe51a3b97736c251f Mon Sep 17 00:00:00 2001 From: Sacha Date: Tue, 30 Sep 2025 22:17:37 +0200 Subject: [PATCH 035/199] PageService --- .../Pages/IPageService.cs | 109 +++++++ .../Pages/PageMessage.cs | 100 +++++++ .../Pages/PageMessageType.cs | 73 +++++ .../DotNetNuke.Abstractions/Pages/PageMeta.cs | 84 ++++++ .../Pages/PagePriority.cs | 76 +++++ .../DotNetNuke.Abstractions/Pages/PageTag.cs | 73 +++++ .../DotNetNuke.Abstractions/Pages/readme.md | 68 +++++ .../Library/DotNetNuke.Library.csproj | 2 + .../Library/Services/Pages/PageExtensions.cs | 152 ++++++++++ .../Library/Services/Pages/PageService.cs | 272 ++++++++++++++++++ DNN Platform/Library/Startup.cs | 5 +- 11 files changed, 1013 insertions(+), 1 deletion(-) create mode 100644 DNN Platform/DotNetNuke.Abstractions/Pages/IPageService.cs create mode 100644 DNN Platform/DotNetNuke.Abstractions/Pages/PageMessage.cs create mode 100644 DNN Platform/DotNetNuke.Abstractions/Pages/PageMessageType.cs create mode 100644 DNN Platform/DotNetNuke.Abstractions/Pages/PageMeta.cs create mode 100644 DNN Platform/DotNetNuke.Abstractions/Pages/PagePriority.cs create mode 100644 DNN Platform/DotNetNuke.Abstractions/Pages/PageTag.cs create mode 100644 DNN Platform/DotNetNuke.Abstractions/Pages/readme.md create mode 100644 DNN Platform/Library/Services/Pages/PageExtensions.cs create mode 100644 DNN Platform/Library/Services/Pages/PageService.cs diff --git a/DNN Platform/DotNetNuke.Abstractions/Pages/IPageService.cs b/DNN Platform/DotNetNuke.Abstractions/Pages/IPageService.cs new file mode 100644 index 00000000000..45af279ec42 --- /dev/null +++ b/DNN Platform/DotNetNuke.Abstractions/Pages/IPageService.cs @@ -0,0 +1,109 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information + +namespace DotNetNuke.Abstractions.Pages +{ + using System; + using System.Collections.Generic; + using System.Text; + + /// + /// Provides services for managing page content with priority-based storage. + /// + public interface IPageService + { + /// + /// Set the Page Title. + /// + /// The title value to set. + /// The priority of this title (lower number = higher priority). + void SetTitle(string value, int priority = PagePriority.Default); + + /// + /// Set the Page Description. + /// + /// The description value to set. + /// The priority of this description (lower number = higher priority). + void SetDescription(string value, int priority = PagePriority.Default); + + /// + /// Set the Page Keywords. + /// + /// The keywords value to set. + /// The priority of these keywords (lower number = higher priority). + void SetKeyWords(string value, int priority = PagePriority.Default); + + /// + /// Set the Page Canonical Link URL. + /// + /// The canonical link URL value to set. + /// The priority of this canonical link URL (lower number = higher priority). + void SetCanonicalLinkUrl(string value, int priority = PagePriority.Default); + + /// + /// Add a tag to the header of the page. + /// + /// Priority item containing the tag and priority information. + void AddToHead(PageTag tagItem); + + /// + /// Add a standard meta header tag. + /// + /// Priority meta item containing the meta tag information and priority. + void AddMeta(PageMeta metaItem); + + /// + /// Add a message to be displayed on the page. + /// + /// Priority message item containing the message information and priority. + void AddMessage(PageMessage messageItem); + + /// + /// Gets the current title value with highest priority. + /// + /// The title value or null if not set. + string GetTitle(); + + /// + /// Gets the current description value with highest priority. + /// + /// The description value or null if not set. + string GetDescription(); + + /// + /// Gets the current keywords value with highest priority. + /// + /// The keywords value or null if not set. + string GetKeyWords(); + + /// + /// Gets the canonical link URL. + /// + /// The canonical link URL or null if not set. + string GetCanonicalLinkUrl(); + + /// + /// Gets all head tags ordered by priority (lowest priority first). + /// + /// List of head tags ordered by priority. + List GetHeadTags(); + + /// + /// Gets all meta tags ordered by priority (lowest priority first). + /// + /// List of meta tags ordered by priority. + List GetMetaTags(); + + /// + /// Gets all messages ordered by priority (lowest priority first). + /// + /// List of messages ordered by priority. + List GetMessages(); + + /// + /// Clears all stored page data. Useful for testing or resetting state. + /// + void Clear(); + } +} diff --git a/DNN Platform/DotNetNuke.Abstractions/Pages/PageMessage.cs b/DNN Platform/DotNetNuke.Abstractions/Pages/PageMessage.cs new file mode 100644 index 00000000000..75d2b5add53 --- /dev/null +++ b/DNN Platform/DotNetNuke.Abstractions/Pages/PageMessage.cs @@ -0,0 +1,100 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information + +namespace DotNetNuke.Abstractions.Pages +{ + /// + /// Represents a message with priority information for display on a page. + /// Messages can include success notifications, warnings, errors, or informational content. + /// + /// + /// This class is used to store messages that will be displayed to users on a page. + /// Priority determines the order in which messages are displayed, with lower numbers having higher priority. + /// Common priority values are defined in . + /// + /// + /// + /// // Create a success message with high priority + /// var successMessage = new PriorityMessage( + /// "Operation Successful", + /// "The data has been saved successfully.", + /// MessageType.Success, + /// "/images/success-icon.png", + /// PagePriority.Site); + /// + /// // Create an error message with default priority + /// var errorMessage = new PriorityMessage( + /// "Validation Error", + /// "Please check the required fields.", + /// MessageType.Error, + /// "", + /// PagePriority.Default); + /// + /// + public class PageMessage + { + /// + /// Initializes a new instance of the class. + /// + /// The heading text for the message. + /// The message text content. Cannot be null or empty. + /// The type/severity of the message. + /// The optional icon source URL for the message. Use empty string if no icon is needed. + /// The priority of the message. Use values from for consistency. + public PageMessage(string heading, string message, PageMessageType messageType, string iconSrc, int priority) + { + this.Heading = heading; + this.Message = message; + this.MessageType = messageType; + this.IconSrc = iconSrc; + this.Priority = priority; + } + + /// + /// Gets or sets the heading text for the message. + /// + /// + /// A string containing the heading text that will be displayed prominently. + /// This should be a concise summary of the message. + /// + public string Heading { get; set; } + + /// + /// Gets or sets the message text content. + /// + /// + /// A string containing the detailed message content that will be displayed to the user. + /// This can contain HTML markup for formatting. + /// + public string Message { get; set; } + + /// + /// Gets or sets the type/severity of the message. + /// + /// + /// A value indicating the severity or type of the message. + /// This affects how the message is styled and displayed to the user. + /// + public PageMessageType MessageType { get; set; } + + /// + /// Gets or sets the optional icon source URL for the message. + /// + /// + /// A string containing the URL or path to an icon image, or an empty string if no icon is needed. + /// The icon will be displayed alongside the message to provide visual context. + /// + public string IconSrc { get; set; } + + /// + /// Gets or sets the priority of the message (lower number = higher priority). + /// + /// + /// An integer representing the display priority of the message. + /// Messages with lower priority numbers will be displayed before those with higher numbers. + /// Use constants from for consistent priority values. + /// + public int Priority { get; set; } + } +} diff --git a/DNN Platform/DotNetNuke.Abstractions/Pages/PageMessageType.cs b/DNN Platform/DotNetNuke.Abstractions/Pages/PageMessageType.cs new file mode 100644 index 00000000000..6bcb3206a64 --- /dev/null +++ b/DNN Platform/DotNetNuke.Abstractions/Pages/PageMessageType.cs @@ -0,0 +1,73 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information + +namespace DotNetNuke.Abstractions.Pages +{ + /// + /// Defines the types and severity levels for page messages. + /// Message types determine how messages are styled and presented to users. + /// + /// + /// These enumeration values are used to categorize messages by their purpose and severity. + /// The UI layer typically uses these values to apply appropriate styling, colors, and icons + /// to provide visual context to users about the nature of the message. + /// + /// + /// + /// // Success message for completed operations + /// var successMsg = new PageMessage("Operation Complete", "Data saved successfully", MessageType.Success, "", PagePriority.Default); + /// + /// // Warning message for potential issues + /// var warningMsg = new PageMessage("Warning", "This action cannot be undone", MessageType.Warning, "", PagePriority.Default); + /// + /// // Error message for failed operations + /// var errorMsg = new PageMessage("Error", "Failed to save data", MessageType.Error, "", PagePriority.Default); + /// + /// // Informational message for general notifications + /// var infoMsg = new PageMessage("Notice", "System maintenance scheduled", MessageType.Info, "", PagePriority.Default); + /// + /// + public enum PageMessageType + { + /// + /// Success message type. + /// Used for messages indicating successful completion of operations. + /// Typically displayed with green styling and success icons. + /// + /// + /// Use for: Data saved, user created, operation completed, etc. + /// + Success = 0, + + /// + /// Warning message type. + /// Used for messages indicating potential issues or important notices that require user attention. + /// Typically displayed with yellow/orange styling and warning icons. + /// + /// + /// Use for: Validation warnings, deprecation notices, cautionary information, etc. + /// + Warning = 1, + + /// + /// Error message type. + /// Used for messages indicating failed operations or critical issues. + /// Typically displayed with red styling and error icons. + /// + /// + /// Use for: Validation errors, operation failures, system errors, etc. + /// + Error = 2, + + /// + /// Informational message type. + /// Used for general notifications and informational content. + /// Typically displayed with blue styling and info icons. + /// + /// + /// Use for: General notifications, tips, system status updates, etc. + /// + Info = 3, + } +} diff --git a/DNN Platform/DotNetNuke.Abstractions/Pages/PageMeta.cs b/DNN Platform/DotNetNuke.Abstractions/Pages/PageMeta.cs new file mode 100644 index 00000000000..d68fa97c475 --- /dev/null +++ b/DNN Platform/DotNetNuke.Abstractions/Pages/PageMeta.cs @@ -0,0 +1,84 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information + +namespace DotNetNuke.Abstractions.Pages +{ + /// + /// Represents a meta tag with priority information for inclusion in the HTML head section. + /// Meta tags provide metadata about the HTML document and are used by search engines and browsers. + /// + /// + /// This class is used to store meta tag information that will be rendered in the HTML head section. + /// Priority determines the order in which meta tags are rendered, with lower numbers having higher priority. + /// Common priority values are defined in . + /// + /// + /// + /// // Create a description meta tag with page priority + /// var descriptionMeta = new PriorityMeta( + /// "description", + /// "This is the page description for SEO purposes.", + /// PagePriority.Page); + /// + /// // Create a keywords meta tag with default priority + /// var keywordsMeta = new PriorityMeta( + /// "keywords", + /// "DNN, CMS, content management", + /// PagePriority.Default); + /// + /// // Create a viewport meta tag with site priority + /// var viewportMeta = new PriorityMeta( + /// "viewport", + /// "width=device-width, initial-scale=1.0", + /// PagePriority.Site); + /// + /// + public class PageMeta + { + /// + /// Initializes a new instance of the class. + /// + /// The name attribute of the meta tag. Cannot be null or empty. + /// The content attribute of the meta tag. Cannot be null. + /// The priority of the meta tag (lower number = higher priority). Use values from for consistency. + /// Thrown when name or content is null. + /// Thrown when name is empty. + public PageMeta(string name, string content, int priority) + { + this.Name = name; + this.Content = content; + this.Priority = priority; + } + + /// + /// Gets or sets the name attribute of the meta tag. + /// + /// + /// A string containing the name attribute value for the meta tag. + /// Common values include "description", "keywords", "author", "viewport", etc. + /// This will be rendered as: <meta name="[Name]" content="[Content]" />. + /// + public string Name { get; set; } + + /// + /// Gets or sets the content attribute of the meta tag. + /// + /// + /// A string containing the content attribute value for the meta tag. + /// This contains the actual metadata information associated with the name attribute. + /// The content should be appropriate for the specified name attribute. + /// + public string Content { get; set; } + + /// + /// Gets or sets the priority of the meta tag (lower number = higher priority). + /// + /// + /// An integer representing the rendering priority of the meta tag in the HTML head section. + /// Meta tags with lower priority numbers will be rendered before those with higher numbers. + /// Use constants from for consistent priority values. + /// + public int Priority { get; set; } + } +} diff --git a/DNN Platform/DotNetNuke.Abstractions/Pages/PagePriority.cs b/DNN Platform/DotNetNuke.Abstractions/Pages/PagePriority.cs new file mode 100644 index 00000000000..83a8c8a0d13 --- /dev/null +++ b/DNN Platform/DotNetNuke.Abstractions/Pages/PagePriority.cs @@ -0,0 +1,76 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information + +namespace DotNetNuke.Abstractions.Pages +{ + /// + /// Defines standard priority values for page content ordering. + /// Lower numbers indicate higher priority and will be processed/rendered first. + /// + /// + /// These constants provide a standardized way to assign priorities to page content such as + /// scripts, styles, meta tags, and messages. Using these predefined values ensures consistent + /// ordering across the application and makes the code more maintainable. + /// + /// Priority processing order: + /// 1. Site-level content (priority 10) + /// 2. Page-level content (priority 20) + /// 3. Default content (priority 100) + /// 4. Module-level content (priority 200). + /// + public class PagePriority + { + /// + /// Site-level priority (value: 10). + /// Used for framework scripts, core styles, and other fundamental site-wide content + /// that should be loaded before any other content. + /// + public const int Site = 10; + + /// + /// Page-level priority (value: 20). + /// Used for page-specific content that should be loaded after site-level content + /// but before default and module content. + /// + /// + /// + /// // Page-specific JavaScript + /// pageService.AddToHead(new PriorityItem("<script src=\"page-analytics.js\"></script>", PagePriority.Page)); + /// + /// // Page-specific meta description + /// pageService.AddMeta(new PriorityMeta("description", "Page-specific description", PagePriority.Page)); + /// + /// + public const int Page = 20; + + /// + /// Default priority (value: 100). + /// Used as the standard priority when no specific priority is needed. + /// Most content should use this priority unless there's a specific ordering requirement. + /// + /// + /// + /// // Standard content without specific ordering requirements + /// pageService.AddMessage(new PriorityMessage("Info", "General information", MessageType.Info, "", PagePriority.Default)); + /// + /// // Regular meta tags + /// pageService.AddMeta(new PriorityMeta("author", "John Doe", PagePriority.Default)); + /// + /// + public const int Default = 100; + + /// + /// Module-level priority (value: 200). + /// Used for module-specific content that should be loaded after all other content. + /// This ensures that module content doesn't interfere with core functionality. + /// + /// + /// + /// // Module-specific success message + /// pageService.AddMessage(new PriorityMessage("Success", "Module operation completed", MessageType.Success, "", PagePriority.Module)); + /// + /// + public const int Module = 200; + } +} diff --git a/DNN Platform/DotNetNuke.Abstractions/Pages/PageTag.cs b/DNN Platform/DotNetNuke.Abstractions/Pages/PageTag.cs new file mode 100644 index 00000000000..99837a6e096 --- /dev/null +++ b/DNN Platform/DotNetNuke.Abstractions/Pages/PageTag.cs @@ -0,0 +1,73 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information + +namespace DotNetNuke.Abstractions.Pages +{ + /// + /// Represents a string item with priority information for inclusion in page content. + /// This class is used for HTML tags, scripts, styles, and other string-based content that needs priority-based ordering. + /// + /// + /// This class is commonly used for HTML tags that need to be injected into different sections of a page + /// (head, body top, body end) with specific priority ordering. Priority determines the order in which + /// items are rendered. + /// Common priority values are defined in . + /// + /// + /// + /// // Create a script tag with high priority for the head section + /// var scriptTag = new PriorityItem( + /// "<script src=\"/js/framework.js\"></script>", + /// PagePriority.Site); + /// + /// // Create a style tag with module priority + /// var styleTag = new PriorityItem( + /// "<link rel=\"stylesheet\" href=\"/css/module.css\" />", + /// PagePriority.Module); + /// + /// // Create a meta tag with page priority + /// var metaTag = new PriorityItem( + /// "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />", + /// PagePriority.Page); + /// + /// + public class PageTag + { + /// + /// Initializes a new instance of the class. + /// + /// The string value of the item. Cannot be null. + /// The priority of the item . Use values from for consistency. + /// Thrown when value is null. + public PageTag(string value, int priority) + { + this.Value = value; + this.Priority = priority; + } + + /// + /// Gets or sets the string value of the item. + /// + /// + /// A string containing the content to be rendered. This is typically HTML content such as + /// script tags, link tags, meta tags, or other HTML elements. The content should be properly + /// formatted HTML that is valid for the intended injection location. + /// + public string Value { get; set; } + + /// + /// Gets or sets the priority of the item. + /// + /// + /// An integer representing the rendering priority of the item. + /// Items with lower priority numbers will be rendered before those with higher numbers. + /// Use constants from for consistent priority values: + /// - (10): Framework and site-level content + /// - (20): Page-specific content + /// - (100): Default priority for most content + /// - (200): Module-specific content. + /// + public int Priority { get; set; } + } +} diff --git a/DNN Platform/DotNetNuke.Abstractions/Pages/readme.md b/DNN Platform/DotNetNuke.Abstractions/Pages/readme.md new file mode 100644 index 00000000000..c8e9680a7a6 --- /dev/null +++ b/DNN Platform/DotNetNuke.Abstractions/Pages/readme.md @@ -0,0 +1,68 @@ +### Enhancement: Priority-based IPageService for page metadata, head tags, and messages + +#### Summary +Add a simple, priority-driven API for setting page title/description/keywords/canonical URL, injecting head tags and meta tags, and collecting user-visible messages. This formalizes page composition logic and decouples it from the rendering pipeline, supporting both the current WebForms pipeline and the new MVC pipeline. + +#### Motivation +- **Unify page composition**: Provide a single abstraction for metadata, head elements, and messages across pipelines. +- **Deterministic ordering**: Ensure consistent output using explicit priorities. +- **Progress toward MVC/Core**: Keeps page state management out of WebForms, easing the hybrid transition. +- **Testability**: A small, mockable surface that’s easy to unit test. + +#### Scope +- Interfaces and models: + - `IPageService` + - `PageMessage`, `PageMessageType` + - `PageMeta` + - `PageTag` + - `PagePriority` + + +#### Proposed API (already defined) +- **Title/SEO** + - `void SetTitle(string value, int priority = PagePriority.Default)` + - `void SetDescription(string value, int priority = PagePriority.Default)` + - `void SetKeyWords(string value, int priority = PagePriority.Default)` + - `void SetCanonicalLinkUrl(string value, int priority = PagePriority.Default)` + - `string GetTitle()`, `string GetDescription()`, `string GetKeyWords()`, `string GetCanonicalLinkUrl()` +- **Head content** + - `void AddToHead(PageTag tagItem)` + - `List GetHeadTags()` + - `void AddMeta(PageMeta metaItem)` + - `List GetMetaTags()` +- **Messages** + - `void AddMessage(PageMessage messageItem)` + - `List GetMessages()` +- **Maintenance** + - `void Clear()` +- **Priority model** + - `PagePriority.Site = 10`, `PagePriority.Page = 20`, `PagePriority.Default = 100`, `PagePriority.Module = 200` +- **Message model** + - `PageMessageType`: `Success`, `Warning`, `Error`, `Info` + - `PageMessage`: `Heading`, `Message`, `MessageType`, `IconSrc`, `Priority` +- **Meta/head models** + - `PageMeta`: `Name`, `Content`, `Priority` + - `PageTag`: `Value`, `Priority` + +#### Example usage +```csharp +pageService.SetTitle("Products", PagePriority.Page); +pageService.SetDescription("Browse our product catalog.", PagePriority.Page); +pageService.SetCanonicalLinkUrl("https://www.mysite.com/products", PagePriority.Page); + +pageService.AddMeta(new PageMeta("viewport", "width=device-width, initial-scale=1.0", PagePriority.Site)); +pageService.AddToHead(new PageTag("", PagePriority.Page)); + +pageService.AddMessage(new PageMessage( + "Saved", "Your product was updated.", PageMessageType.Success, "", PagePriority.Default)); +``` + +#### Rendering contract (follow-up implementation) +- The renderer (WebForms skin, MVC layout) must: + - Pick the highest-priority values for title/description/keywords/canonical link. + - Render `GetMetaTags()` and `GetHeadTags()` in ascending `Priority` order. + - Render `GetMessages()` in ascending `Priority` order, with styling determined by `PageMessageType`. + + + + diff --git a/DNN Platform/Library/DotNetNuke.Library.csproj b/DNN Platform/Library/DotNetNuke.Library.csproj index 650546a4ae6..2a2598b5584 100644 --- a/DNN Platform/Library/DotNetNuke.Library.csproj +++ b/DNN Platform/Library/DotNetNuke.Library.csproj @@ -890,6 +890,8 @@ + + diff --git a/DNN Platform/Library/Services/Pages/PageExtensions.cs b/DNN Platform/Library/Services/Pages/PageExtensions.cs new file mode 100644 index 00000000000..78fb8e571df --- /dev/null +++ b/DNN Platform/Library/Services/Pages/PageExtensions.cs @@ -0,0 +1,152 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information + +namespace DotNetNuke.Services.Pages +{ + using DotNetNuke.Abstractions.Pages; + using DotNetNuke.UI.Skins.Controls; + + /// + /// Extension methods for that provide convenient overloads with simple parameters. + /// These methods create the appropriate priority objects internally for easier usage. + /// + public static class PageExtensions + { + /// + /// Adds a tag to the header of the page using simple parameters. + /// + /// The page service instance. + /// The HTML tag to add to the head section. + /// The priority of this tag. Defaults to . + public static void AddToHead(this IPageService pageService, string tag, int priority = PagePriority.Default) + { + var priorityItem = new PageTag(tag, priority); + pageService.AddToHead(priorityItem); + } + + /// + /// Adds a meta tag using simple parameters. + /// + /// The page service instance. + /// The name attribute of the meta tag. + /// The content attribute of the meta tag. + /// The priority of this meta tag. Defaults to . + public static void AddMeta(this IPageService pageService, string name, string content, int priority = PagePriority.Default) + { + var priorityMeta = new PageMeta(name, content, priority); + pageService.AddMeta(priorityMeta); + } + + /// + /// Adds a message using simple parameters with default message type. + /// + /// The page service instance. + /// The heading text for the message. + /// The message text content. + /// The priority of this message. Defaults to . + public static void AddMessage(this IPageService pageService, string heading, string message, int priority = PagePriority.Default) + { + var priorityMessage = new PageMessage(heading, message, PageMessageType.Info, string.Empty, priority); + pageService.AddMessage(priorityMessage); + } + + /// + /// Adds a message using simple parameters with specified message type. + /// + /// The page service instance. + /// The heading text for the message. + /// The message text content. + /// The type/severity of the message. + /// The priority of this message. Defaults to . + public static void AddMessage(this IPageService pageService, string heading, string message, PageMessageType messageType, int priority = PagePriority.Default) + { + var priorityMessage = new PageMessage(heading, message, messageType, string.Empty, priority); + pageService.AddMessage(priorityMessage); + } + + /// + /// Adds a message using simple parameters with specified message type and icon. + /// + /// The page service instance. + /// The heading text for the message. + /// The message text content. + /// The type/severity of the message. + /// The optional icon source URL for the message. + /// The priority of this message. Defaults to . + public static void AddMessage(this IPageService pageService, string heading, string message, PageMessageType messageType, string iconSrc, int priority = PagePriority.Default) + { + var priorityMessage = new PageMessage(heading, message, messageType, iconSrc ?? string.Empty, priority); + pageService.AddMessage(priorityMessage); + } + + /// + /// Adds a success message using simple parameters. + /// + /// The page service instance. + /// The heading text for the success message. + /// The success message text content. + /// The priority of this message. Defaults to . + public static void AddSuccessMessage(this IPageService pageService, string heading, string message, int priority = PagePriority.Default) + { + var priorityMessage = new PageMessage(heading, message, PageMessageType.Success, string.Empty, priority); + pageService.AddMessage(priorityMessage); + } + + /// + /// Adds an error message using simple parameters. + /// + /// The page service instance. + /// The heading text for the error message. + /// The error message text content. + /// The priority of this message. Defaults to . + public static void AddErrorMessage(this IPageService pageService, string heading, string message, int priority = PagePriority.Default) + { + var priorityMessage = new PageMessage(heading, message, PageMessageType.Error, string.Empty, priority); + pageService.AddMessage(priorityMessage); + } + + /// + /// Adds a warning message using simple parameters. + /// + /// The page service instance. + /// The heading text for the warning message. + /// The warning message text content. + /// The priority of this message. Defaults to . + public static void AddWarningMessage(this IPageService pageService, string heading, string message, int priority = PagePriority.Default) + { + var priorityMessage = new PageMessage(heading, message, PageMessageType.Warning, string.Empty, priority); + pageService.AddMessage(priorityMessage); + } + + /// + /// Adds an informational message using simple parameters. + /// + /// The page service instance. + /// The heading text for the info message. + /// The info message text content. + /// The priority of this message. Defaults to . + public static void AddInfoMessage(this IPageService pageService, string heading, string message, int priority = PagePriority.Default) + { + var priorityMessage = new PageMessage(heading, message, PageMessageType.Info, string.Empty, priority); + pageService.AddMessage(priorityMessage); + } + + /// + /// Converts a to a . + /// + /// The to convert. + /// The . + public static ModuleMessage.ModuleMessageType ToModuleMessageType(this PageMessageType priorityMessage) + { + return priorityMessage switch + { + PageMessageType.Success => ModuleMessage.ModuleMessageType.GreenSuccess, + PageMessageType.Warning => ModuleMessage.ModuleMessageType.YellowWarning, + PageMessageType.Error => ModuleMessage.ModuleMessageType.RedError, + PageMessageType.Info => ModuleMessage.ModuleMessageType.BlueInfo, + _ => ModuleMessage.ModuleMessageType.GreenSuccess, + }; + } + } +} diff --git a/DNN Platform/Library/Services/Pages/PageService.cs b/DNN Platform/Library/Services/Pages/PageService.cs new file mode 100644 index 00000000000..cf97b2453ec --- /dev/null +++ b/DNN Platform/Library/Services/Pages/PageService.cs @@ -0,0 +1,272 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information + +namespace DotNetNuke.Services.Pages +{ + using System; + using System.Collections.Generic; + using System.Linq; + + using DotNetNuke.Abstractions.Pages; + + /// + /// Provides services for managing page-level elements including meta tags, head tags, messages, and SEO properties. + /// This service supports priority-based management where higher priority values take precedence. + /// + /// + /// The PageService manages various page-level elements: + /// - Page metadata (title, description, keywords) with priority-based overrides + /// - Custom head tags for additional HTML head content + /// - Meta tags for SEO and page information + /// - Page messages for user notifications + /// Priority system: Higher priority values (e.g., 200) will override lower priority values (e.g., 100). + /// Default priority is 100 for most operations. + /// + public class PageService : IPageService + { + /// + /// Collection of head tags to be included in the HTML head section, ordered by priority. + /// + private readonly List headTags = new List(); + + /// + /// Collection of meta tags for SEO and page information, ordered by priority. + /// + private readonly List metaTags = new List(); + + /// + /// Collection of page messages for user notifications, ordered by priority. + /// + private readonly List messages = new List(); + + /// + /// The current page title with the highest priority. + /// + private PageTag title; + + /// + /// The current page description with the highest priority. + /// + private PageTag description; + + /// + /// The current page keywords with the highest priority. + /// + private PageTag keywords; + + /// + /// The current page canonical link URL with the highest priority. + /// + private PageTag canonicalLinkUrl; + + /// + /// Adds a message to the page's message collection. + /// + /// The message item to add to the page. Cannot be null. + /// Thrown when is null. + /// + /// Messages are used to display notifications, alerts, or informational content to users. + /// They are ordered by priority when retrieved, with lower priority values appearing first. + /// + public void AddMessage(PageMessage messageItem) + { + if (messageItem == null) + { + throw new ArgumentNullException(nameof(messageItem)); + } + + this.messages.Add(messageItem); + } + + /// + /// Adds a meta tag to the page's meta tag collection. + /// + /// The meta tag item to add to the page. Cannot be null. + /// Thrown when is null. + /// + /// Meta tags provide metadata about the HTML document and are typically used for SEO, + /// social media sharing, and browser behavior. They are rendered in the HTML head section + /// and ordered by priority when retrieved. + /// + public void AddMeta(PageMeta metaItem) + { + if (metaItem == null) + { + throw new ArgumentNullException(nameof(metaItem)); + } + + this.metaTags.Add(metaItem); + } + + /// + /// Adds a custom tag to the page's HTML head section. + /// + /// The tag item to add to the head section. Cannot be null. + /// Thrown when is null. + /// + /// Head tags allow you to include custom HTML elements in the page's head section, + /// such as custom CSS links, JavaScript files, or other HTML elements. + /// Tags are ordered by priority when retrieved, with lower priority values appearing first. + /// + public void AddToHead(PageTag tagItem) + { + if (tagItem == null) + { + throw new ArgumentNullException(nameof(tagItem)); + } + + this.headTags.Add(tagItem); + } + + /// + /// Sets the page description with the specified priority. + /// + /// The description text for the page. + /// The priority level for this description. Higher values take precedence. Default is 100. + /// + /// The page description is typically used in meta tags for SEO purposes and may appear + /// in search engine results. Only the description with the highest priority will be used. + /// If multiple descriptions have the same priority, the last one set will be used. + /// + public void SetDescription(string value, int priority = 100) + { + this.SetHighestPriorityValue(ref this.description, value, priority); + } + + /// + /// Sets the page keywords with the specified priority. + /// + /// The keywords for the page, typically comma-separated. + /// The priority level for these keywords. Higher values take precedence. Default is 100. + /// + /// Page keywords are used for SEO purposes and help categorize the page content. + /// Only the keywords with the highest priority will be used. + /// If multiple keyword sets have the same priority, the last one set will be used. + /// + public void SetKeyWords(string value, int priority = 100) + { + this.SetHighestPriorityValue(ref this.keywords, value, priority); + } + + /// + /// Sets the page title with the specified priority. + /// + /// The title text for the page. + /// The priority level for this title. Higher values take precedence. Default is 100. + /// + /// The page title appears in the browser tab, search engine results, and when sharing on social media. + /// Only the title with the highest priority will be used. + /// If multiple titles have the same priority, the last one set will be used. + /// + public void SetTitle(string value, int priority = 100) + { + this.SetHighestPriorityValue(ref this.title, value, priority); + } + + /// + /// Sets the page canonical link URL with the specified priority. + /// + /// The canonical link URL for the page. + /// The priority level for this canonical link URL. Higher values take precedence. Default is 100. + public void SetCanonicalLinkUrl(string value, int priority = 100) + { + this.SetHighestPriorityValue(ref this.canonicalLinkUrl, value, priority); + } + + /// + /// Gets the current canonical link URL value with highest priority. + /// + /// The canonical link URL value or null if not set. + public string GetCanonicalLinkUrl() + { + return this.canonicalLinkUrl?.Value; + } + + /// + /// Gets the current title value with highest priority. + /// + /// The title value or null if not set. + public string GetTitle() + { + return this.title?.Value; + } + + /// + /// Gets the current description value with highest priority. + /// + /// The description value or null if not set. + public string GetDescription() + { + return this.description?.Value; + } + + /// + /// Gets the current keywords value with highest priority. + /// + /// The keywords value or null if not set. + public string GetKeyWords() + { + return this.keywords?.Value; + } + + /// + /// Gets all head tags ordered by priority (lowest priority first). + /// + /// List of head tags ordered by priority. + public List GetHeadTags() + { + return this.headTags.OrderBy(x => x.Priority).ToList(); + } + + /// + /// Gets all meta tags ordered by priority (lowest priority first). + /// + /// List of meta tags ordered by priority. + public List GetMetaTags() + { + return this.metaTags.OrderBy(x => x.Priority).ToList(); + } + + /// + /// Gets all messages ordered by priority (lowest priority first). + /// + /// List of messages ordered by priority. + public List GetMessages() + { + return this.messages.OrderBy(x => x.Priority).ToList(); + } + + /// + /// Clears all stored page data. Useful for testing or resetting state. + /// + public void Clear() + { + this.title = null; + this.description = null; + this.keywords = null; + this.headTags.Clear(); + this.metaTags.Clear(); + this.messages.Clear(); + } + + /// + /// Sets the highest priority value for a PageTag field. + /// + /// Reference to the current PageTag field to potentially update. + /// The new value to set. + /// The priority of the new value. + /// + /// This method implements the priority-based override system. It only updates the current item + /// if the new priority is higher than the existing priority, or if no item is currently set. + /// This ensures that higher priority values always take precedence. + /// + private void SetHighestPriorityValue(ref PageTag currentItem, string value, int priority) + { + if (currentItem == null || priority > currentItem.Priority) + { + currentItem = new PageTag(value, priority); + } + } + } +} diff --git a/DNN Platform/Library/Startup.cs b/DNN Platform/Library/Startup.cs index 415de11fe49..5cc33c47f8e 100644 --- a/DNN Platform/Library/Startup.cs +++ b/DNN Platform/Library/Startup.cs @@ -1,4 +1,4 @@ -// Licensed to the .NET Foundation under one or more agreements. +// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information namespace DotNetNuke @@ -10,6 +10,7 @@ namespace DotNetNuke using DotNetNuke.Abstractions.Application; using DotNetNuke.Abstractions.Logging; using DotNetNuke.Abstractions.Modules; + using DotNetNuke.Abstractions.Pages; using DotNetNuke.Abstractions.Portals; using DotNetNuke.Abstractions.Portals.Templates; using DotNetNuke.Abstractions.Prompt; @@ -47,6 +48,7 @@ namespace DotNetNuke using DotNetNuke.Services.Log.EventLog; using DotNetNuke.Services.Mail.OAuth; using DotNetNuke.Services.Mobile; + using DotNetNuke.Services.Pages; using DotNetNuke.Services.Personalization; using DotNetNuke.Services.Search.Controllers; using DotNetNuke.Services.Search.Internals; @@ -90,6 +92,7 @@ public void ConfigureServices(IServiceCollection services) services.AddScoped(); services.AddScoped(); + services.AddScoped(); services.AddTransient(); services.AddTransient(); From 6162a8da7b2f2efafa1c1bda992edf2b888ef0b9 Mon Sep 17 00:00:00 2001 From: Sacha Date: Tue, 30 Sep 2025 22:25:55 +0200 Subject: [PATCH 036/199] include elements of PageService to Default.aspx --- DNN Platform/Website/Default.aspx.cs | 55 +++++++++++++++++++++++++++- 1 file changed, 53 insertions(+), 2 deletions(-) diff --git a/DNN Platform/Website/Default.aspx.cs b/DNN Platform/Website/Default.aspx.cs index 4a6df5cda09..b62eee398ac 100644 --- a/DNN Platform/Website/Default.aspx.cs +++ b/DNN Platform/Website/Default.aspx.cs @@ -17,6 +17,7 @@ namespace DotNetNuke.Framework using DotNetNuke.Abstractions; using DotNetNuke.Abstractions.Application; using DotNetNuke.Abstractions.Logging; + using DotNetNuke.Abstractions.Pages; using DotNetNuke.Abstractions.Portals; using DotNetNuke.Common.Utilities; using DotNetNuke.Entities.Portals; @@ -59,11 +60,12 @@ public partial class DefaultPage : CDefault, IClientAPICallbackEventHandler private readonly IHostSettingsService hostSettingsService; private readonly IEventLogger eventLogger; private readonly IPortalSettingsController portalSettingsController; + private readonly IPageService pageService; /// Initializes a new instance of the class. [Obsolete("Deprecated in DotNetNuke 10.0.2. Please use overload with INavigationManager. Scheduled removal in v12.0.0.")] public DefaultPage() - : this(null, null, null, null, null, null, null, null, null) + : this(null, null, null, null, null, null, null, null, null, null) { } @@ -77,7 +79,8 @@ public DefaultPage() /// The event logger. /// The portal controller. /// The portal settings controller. - public DefaultPage(INavigationManager navigationManager, IApplicationInfo appInfo, IApplicationStatusInfo appStatus, IModuleControlPipeline moduleControlPipeline, IHostSettings hostSettings, IHostSettingsService hostSettingsService, IEventLogger eventLogger, IPortalController portalController, IPortalSettingsController portalSettingsController) + /// The page service. + public DefaultPage(INavigationManager navigationManager, IApplicationInfo appInfo, IApplicationStatusInfo appStatus, IModuleControlPipeline moduleControlPipeline, IHostSettings hostSettings, IHostSettingsService hostSettingsService, IEventLogger eventLogger, IPortalController portalController, IPortalSettingsController portalSettingsController, IPageService pageService) : base(portalController, appStatus, hostSettings) { this.NavigationManager = navigationManager ?? Globals.GetCurrentServiceProvider().GetRequiredService(); @@ -88,6 +91,7 @@ public DefaultPage(INavigationManager navigationManager, IApplicationInfo appInf this.hostSettingsService = hostSettingsService ?? Globals.GetCurrentServiceProvider().GetRequiredService(); this.eventLogger = eventLogger ?? Globals.GetCurrentServiceProvider().GetRequiredService(); this.portalSettingsController = portalSettingsController ?? Globals.GetCurrentServiceProvider().GetRequiredService(); + this.pageService = pageService ?? Globals.GetCurrentServiceProvider().GetRequiredService(); } public string CurrentSkinPath => ((PortalSettings)HttpContext.Current.Items["PortalSettings"]).ActiveTab.SkinPath; @@ -284,6 +288,8 @@ protected override void OnInit(EventArgs e) } } + this.pageService.SetCanonicalLinkUrl(this.CanonicalLinkUrl, PagePriority.Page); + // add CSS links ClientResourceManager.RegisterDefaultStylesheet(this, string.Concat(Globals.ApplicationPath, "/Resources/Shared/stylesheets/dnndefault/10.0.0/default.css")); ClientResourceManager.RegisterStyleSheet(this, string.Concat(ctlSkin.SkinPath, "skin.css"), FileOrder.Css.SkinCss); @@ -337,6 +343,10 @@ protected override void OnPreRender(EventArgs evt) this.metaPanel.Visible = !UrlUtils.InPopUp(); if (!UrlUtils.InPopUp()) { + this.Title = this.pageService.GetTitle(); + this.Description = this.pageService.GetDescription(); + this.KeyWords = this.pageService.GetKeyWords(); + this.MetaGenerator.Content = this.Generator; this.MetaGenerator.Visible = !string.IsNullOrEmpty(this.Generator); this.MetaAuthor.Content = this.PortalSettings.PortalName; @@ -352,6 +362,7 @@ protected override void OnPreRender(EventArgs evt) this.Page.Response.AddHeader("X-UA-Compatible", this.PortalSettings.AddCompatibleHttpHeader); } + this.CanonicalLinkUrl = this.pageService.GetCanonicalLinkUrl(); if (!string.IsNullOrEmpty(this.CanonicalLinkUrl)) { // Add Canonical using the primary alias @@ -362,6 +373,40 @@ protected override void OnPreRender(EventArgs evt) // Add the HtmlLink to the Head section of the page. this.Page.Header.Controls.Add(canonicalLink); } + + foreach (var item in this.pageService.GetHeadTags()) + { + this.Page.Header.Controls.Add(new LiteralControl(item.Value)); + } + + foreach (var item in this.pageService.GetMetaTags()) + { + this.Page.Header.Controls.Add(new Meta() { Name = item.Name, Content = item.Content }); + } + + foreach (var item in this.pageService.GetMessages()) + { + ModuleMessage.ModuleMessageType moduleMessageType = ModuleMessage.ModuleMessageType.BlueInfo; + + switch (item.MessageType) + { + case PageMessageType.Success: + moduleMessageType = ModuleMessage.ModuleMessageType.GreenSuccess; + break; + case PageMessageType.Warning: + moduleMessageType = ModuleMessage.ModuleMessageType.YellowWarning; + break; + case PageMessageType.Error: + moduleMessageType = ModuleMessage.ModuleMessageType.RedError; + break; + case PageMessageType.Info: + default: + moduleMessageType = ModuleMessage.ModuleMessageType.BlueInfo; + break; + } + + Skin.AddPageMessage(this, item.Heading, item.Message, moduleMessageType); + } } /// @@ -567,6 +612,8 @@ private void InitializePage() this.Description = this.PortalSettings.Description; } + this.pageService.SetDescription(this.Description, PagePriority.Page); + // META keywords if (!string.IsNullOrEmpty(this.PortalSettings.ActiveTab.KeyWords)) { @@ -577,6 +624,8 @@ private void InitializePage() this.KeyWords = this.PortalSettings.KeyWords; } + this.pageService.SetKeyWords(this.KeyWords, PagePriority.Page); + // META copyright if (!string.IsNullOrEmpty(this.PortalSettings.FooterText)) { @@ -619,6 +668,8 @@ private void InitializePage() this.Title += versionString; } + this.pageService.SetTitle(this.Title, PagePriority.Page); + // register css variables var cssVariablesStyleSheet = this.GetCssVariablesStylesheet(); ClientResourceManager.RegisterStyleSheet(this, cssVariablesStyleSheet, FileOrder.Css.DefaultCss); From 909987da13ed9596581d51740f81c29700c4c000 Mon Sep 17 00:00:00 2001 From: Peter Donker Date: Wed, 1 Oct 2025 09:04:31 +0200 Subject: [PATCH 037/199] Update DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ResourceBase.cs Co-authored-by: Brian Dukes --- .../Models/ResourceBase.cs | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ResourceBase.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ResourceBase.cs index 50a924ffb2b..23ec7df202a 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ResourceBase.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ResourceBase.cs @@ -75,16 +75,10 @@ public string Name public Dictionary Attributes { get; set; } = new Dictionary(); /// - public void Register() - { - throw new System.NotImplementedException(); - } + public abstract void Register(); /// - public string Render(int crmVersion, bool useCdn, string applicationPath) - { - throw new System.NotImplementedException(); - } + public abstract string Render(int crmVersion, bool useCdn, string applicationPath); /// /// Gets the versioned path. From 196be35cc190d12d9136400e9346091c276f9285 Mon Sep 17 00:00:00 2001 From: Peter Donker Date: Wed, 1 Oct 2025 09:04:40 +0200 Subject: [PATCH 038/199] Update DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ResourceBase.cs Co-authored-by: Brian Dukes --- .../Models/ResourceBase.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ResourceBase.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ResourceBase.cs index 23ec7df202a..5d435ce23f2 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ResourceBase.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ResourceBase.cs @@ -225,7 +225,7 @@ protected void RenderType(StringBuilder htmlString) { if (!string.IsNullOrEmpty(this.Type)) { - htmlString.Append($" type=\"{this.Type}\""); + htmlString.Append($" type=\"{WebUtility.HtmlEncode(this.Type)}\""); } } From 8c4a9906291da76e15624dc2bb8e64a05f64a334 Mon Sep 17 00:00:00 2001 From: Peter Donker Date: Wed, 1 Oct 2025 09:04:51 +0200 Subject: [PATCH 039/199] Update DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ResourceBase.cs Co-authored-by: Brian Dukes --- .../Models/ResourceBase.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ResourceBase.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ResourceBase.cs index 5d435ce23f2..ad755058940 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ResourceBase.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ResourceBase.cs @@ -237,7 +237,7 @@ protected void RenderAttributes(StringBuilder htmlString) { foreach (var attribute in this.Attributes) { - htmlString.Append($" {attribute.Key}=\"{attribute.Value}\""); + htmlString.Append($" {attribute.Key}=\"{WebUtility.HtmlEncode(attribute.Value)}\""); } } } From 2a6ae16bf0b47a681ced7125bbb868c6bb05d51d Mon Sep 17 00:00:00 2001 From: Peter Donker Date: Wed, 1 Oct 2025 09:05:00 +0200 Subject: [PATCH 040/199] Update DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ResourceBase.cs Co-authored-by: Brian Dukes --- .../Models/ResourceBase.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ResourceBase.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ResourceBase.cs index ad755058940..4da1cab54cc 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ResourceBase.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ResourceBase.cs @@ -175,7 +175,7 @@ protected void RenderIntegrity(StringBuilder htmlString) { if (!string.IsNullOrEmpty(this.Integrity)) { - htmlString.Append($" integrity=\"{this.Integrity}\""); + htmlString.Append($" integrity=\"{WebUtility.HtmlEncode(this.Integrity)}\""); } } From 2f9b7f2c0b129a4b45884219128a5128fbb79e96 Mon Sep 17 00:00:00 2001 From: Peter Donker Date: Wed, 1 Oct 2025 09:21:01 +0200 Subject: [PATCH 041/199] Allow enums for priority setting --- .../Models/FontResource.cs | 4 ++-- .../Models/ResourceBase.cs | 1 + .../Models/ScriptResource.cs | 4 ++-- .../Models/StylesheetResource.cs | 4 ++-- .../ScriptResourceExtensions.cs | 19 +++++++++++++++++++ .../StylesheetResourceExtensions.cs | 19 +++++++++++++++++++ .../Services/ClientDependency/Extensions.cs | 4 ++-- DNN Platform/Website/Default.aspx.cs | 2 +- .../Website/admin/Skins/Search.ascx.cs | 2 +- 9 files changed, 49 insertions(+), 10 deletions(-) diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/FontResource.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/FontResource.cs index d5593c8e229..e00bf3e7525 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/FontResource.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/FontResource.cs @@ -26,13 +26,13 @@ public FontResource(IClientResourceController clientResourceController) } /// - public new void Register() + public override void Register() { this.clientResourceController.AddFont(this); } /// - public new string Render(int crmVersion, bool useCdn, string applicationPath) + public override string Render(int crmVersion, bool useCdn, string applicationPath) { var htmlString = new StringBuilder(" - public new void Register() + public override void Register() { this.clientResourceController.AddScript(this); } /// - public new string Render(int crmVersion, bool useCdn, string applicationPath) + public override string Render(int crmVersion, bool useCdn, string applicationPath) { var htmlString = new StringBuilder(" - public new void Register() + public override void Register() { this.clientResourceController.AddStylesheet(this); } /// - public new string Render(int crmVersion, bool useCdn, string applicationPath) + public override string Render(int crmVersion, bool useCdn, string applicationPath) { var htmlString = new StringBuilder("(this T input, string sourcePath, string pathNameAlias return input; } + /// + /// Sets the priority of the resource. + /// + /// The resource to set the priority for. + /// The priority value to set. + /// The resource with the priority set. + /// The type of resource, which must implement . + public static T SetPriority(this T input, FileOrder.Js priority) + where T : IScriptResource + { + if (input == null) + { + throw new ArgumentNullException(nameof(input)); + } + + input.Priority = (int)priority; + return input; + } + /// /// Sets the async attribute of the script resource. /// diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/StylesheetResourceExtensions.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/StylesheetResourceExtensions.cs index 0b669c742c8..d997bfceab8 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/StylesheetResourceExtensions.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/StylesheetResourceExtensions.cs @@ -53,6 +53,25 @@ public static T FromSrc(this T input, string sourcePath, string pathNameAlias return input; } + /// + /// Sets the priority of the resource. + /// + /// The resource to set the priority for. + /// The priority value to set. + /// The resource with the priority set. + /// The type of resource, which must implement . + public static T SetPriority(this T input, FileOrder.Css priority) + where T : IStylesheetResource + { + if (input == null) + { + throw new ArgumentNullException(nameof(input)); + } + + input.Priority = (int)priority; + return input; + } + /// /// Sets the disabled attribute of the stylesheet resource. /// diff --git a/DNN Platform/Library/Services/ClientDependency/Extensions.cs b/DNN Platform/Library/Services/ClientDependency/Extensions.cs index 9f2a8ca92be..a6d32883ef1 100644 --- a/DNN Platform/Library/Services/ClientDependency/Extensions.cs +++ b/DNN Platform/Library/Services/ClientDependency/Extensions.cs @@ -101,7 +101,7 @@ public static void RegisterScript(this IClientResourceController controller, str controller.CreateScript() .FromSrc(scriptPath) - .SetPriority((int)priority) + .SetPriority(priority) .Register(); } @@ -165,7 +165,7 @@ public static void RegisterStylesheet(this IClientResourceController controller, controller.CreateStylesheet() .FromSrc(stylesheetPath) - .SetPriority((int)priority) + .SetPriority(priority) .Register(); } } diff --git a/DNN Platform/Website/Default.aspx.cs b/DNN Platform/Website/Default.aspx.cs index 95a27ccda90..25fd74f781b 100644 --- a/DNN Platform/Website/Default.aspx.cs +++ b/DNN Platform/Website/Default.aspx.cs @@ -299,7 +299,7 @@ protected override void OnInit(EventArgs e) this.clientResourceController.CreateStylesheet() .FromSrc("~/Resources/Shared/stylesheets/dnndefault/10.0.0/default.css") .SetNameAndVersion("dnndefault", "10.0.0", false) - .SetPriority((int)FileOrder.Css.DefaultCss) + .SetPriority(FileOrder.Css.DefaultCss) .Register(); this.clientResourceController.RegisterStylesheet(string.Concat(ctlSkin.SkinPath, "skin.css"), FileOrder.Css.SkinCss, true); diff --git a/DNN Platform/Website/admin/Skins/Search.ascx.cs b/DNN Platform/Website/admin/Skins/Search.ascx.cs index 33ce4537ec2..c200b1fbb35 100644 --- a/DNN Platform/Website/admin/Skins/Search.ascx.cs +++ b/DNN Platform/Website/admin/Skins/Search.ascx.cs @@ -466,7 +466,7 @@ protected override void OnPreRender(EventArgs e) } JavaScript.RegisterClientReference(this.Page, ClientAPI.ClientNamespaceReferences.dnn); - this.clientResourceController.CreateScript().FromSrc("~/Resources/Search/Search.js").SetPriority((int)FileOrder.Js.DefaultPriority).SetProvider(ClientResourceProviders.DnnFormBottomProvider).Register(); + this.clientResourceController.CreateScript().FromSrc("~/Resources/Search/Search.js").SetPriority(FileOrder.Js.DefaultPriority).SetProvider(ClientResourceProviders.DnnFormBottomProvider).Register(); this.txtSearchNew.Attributes.Add("autocomplete", "off"); this.txtSearchNew.Attributes.Add("placeholder", this.PlaceHolderText); From 7f132727749a4d3bc274507008c88d51540576f2 Mon Sep 17 00:00:00 2001 From: Peter Donker Date: Wed, 1 Oct 2025 09:42:13 +0200 Subject: [PATCH 042/199] Add new library to Web Client nuget package --- Build/Tools/NuGet/DotNetNuke.Web.Client.nuspec | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Build/Tools/NuGet/DotNetNuke.Web.Client.nuspec b/Build/Tools/NuGet/DotNetNuke.Web.Client.nuspec index 1bc1ce5a9e3..8c598a2064f 100644 --- a/Build/Tools/NuGet/DotNetNuke.Web.Client.nuspec +++ b/Build/Tools/NuGet/DotNetNuke.Web.Client.nuspec @@ -21,6 +21,8 @@ + + From 11cc02102f83dd4bd4dca0c44af1262fda6e728d Mon Sep 17 00:00:00 2001 From: Peter Donker Date: Wed, 1 Oct 2025 09:46:58 +0200 Subject: [PATCH 043/199] Try fix build issue --- DNN Platform/DotNetNuke.Web.Client/packages.config | 1 + SolutionInfo.cs | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/DNN Platform/DotNetNuke.Web.Client/packages.config b/DNN Platform/DotNetNuke.Web.Client/packages.config index 6ac84f6ef3b..3a9bbb1430d 100644 --- a/DNN Platform/DotNetNuke.Web.Client/packages.config +++ b/DNN Platform/DotNetNuke.Web.Client/packages.config @@ -1,5 +1,6 @@  + diff --git a/SolutionInfo.cs b/SolutionInfo.cs index 633a714421e..40801c8ee24 100644 --- a/SolutionInfo.cs +++ b/SolutionInfo.cs @@ -11,7 +11,7 @@ // Review the values of the assembly attributes [assembly: AssemblyCompany(".NET Foundation")] [assembly: AssemblyProduct("https://dnncommunity.org")] -[assembly: AssemblyCopyright("DNN Platform is copyright 2002-2020 by .NET Foundation. All Rights Reserved.")] +[assembly: AssemblyCopyright("DNN Platform is copyright 2002-2025 by .NET Foundation. All Rights Reserved.")] [assembly: AssemblyTrademark("DNN")] [assembly: AssemblyVersion("10.1.0")] [assembly: AssemblyFileVersion("10.1.0.0")] From fe5b9a7333e61d950e1308aab94a5577526ae443 Mon Sep 17 00:00:00 2001 From: Sacha Date: Wed, 1 Oct 2025 10:43:51 +0200 Subject: [PATCH 044/199] remove suplicate extension method and add extensions to readme --- .../DotNetNuke.Abstractions/Pages/readme.md | 32 +++++++++++++++++++ .../Library/Services/Pages/PageExtensions.cs | 16 +--------- 2 files changed, 33 insertions(+), 15 deletions(-) diff --git a/DNN Platform/DotNetNuke.Abstractions/Pages/readme.md b/DNN Platform/DotNetNuke.Abstractions/Pages/readme.md index c8e9680a7a6..8042ce7b144 100644 --- a/DNN Platform/DotNetNuke.Abstractions/Pages/readme.md +++ b/DNN Platform/DotNetNuke.Abstractions/Pages/readme.md @@ -66,3 +66,35 @@ pageService.AddMessage(new PageMessage( + +#### Convenience extensions (`Library/Services/Pages/PageExtensions.cs`) +These helpers provide simpler overloads for common operations: + +```csharp +// Head content +void IPageService.AddToHead(string tag, int priority = PagePriority.Default); +void IPageService.AddMeta(string name, string content, int priority = PagePriority.Default); + +// Messages with explicit type +void IPageService.AddMessage(string heading, string message, PageMessageType messageType, int priority = PagePriority.Default); +void IPageService.AddMessage(string heading, string message, PageMessageType messageType, string iconSrc, int priority = PagePriority.Default); + +// Convenience by type +void IPageService.AddSuccessMessage(string heading, string message, int priority = PagePriority.Default); +void IPageService.AddErrorMessage(string heading, string message, int priority = PagePriority.Default); +void IPageService.AddWarningMessage(string heading, string message, int priority = PagePriority.Default); +void IPageService.AddInfoMessage(string heading, string message, int priority = PagePriority.Default); + +// Mapping helper for UI layer +DotNetNuke.UI.Skins.Controls.ModuleMessage.ModuleMessageType PageMessageType.ToModuleMessageType(); +``` + +Example: +```csharp +pageService.AddToHead("", PagePriority.Site); +pageService.AddMeta("robots", "max-image-preview:large", PagePriority.Page); + +pageService.AddSuccessMessage("Saved", "Settings updated successfully."); +pageService.AddWarningMessage("Heads up", "This feature is experimental.", PagePriority.Page); +``` + diff --git a/DNN Platform/Library/Services/Pages/PageExtensions.cs b/DNN Platform/Library/Services/Pages/PageExtensions.cs index 78fb8e571df..aa92213973c 100644 --- a/DNN Platform/Library/Services/Pages/PageExtensions.cs +++ b/DNN Platform/Library/Services/Pages/PageExtensions.cs @@ -49,21 +49,7 @@ public static void AddMessage(this IPageService pageService, string heading, str { var priorityMessage = new PageMessage(heading, message, PageMessageType.Info, string.Empty, priority); pageService.AddMessage(priorityMessage); - } - - /// - /// Adds a message using simple parameters with specified message type. - /// - /// The page service instance. - /// The heading text for the message. - /// The message text content. - /// The type/severity of the message. - /// The priority of this message. Defaults to . - public static void AddMessage(this IPageService pageService, string heading, string message, PageMessageType messageType, int priority = PagePriority.Default) - { - var priorityMessage = new PageMessage(heading, message, messageType, string.Empty, priority); - pageService.AddMessage(priorityMessage); - } + } /// /// Adds a message using simple parameters with specified message type and icon. From fda18a3ceb327f93f9d74f86ed007fad72c972ac Mon Sep 17 00:00:00 2001 From: Peter Donker Date: Wed, 1 Oct 2025 12:17:39 +0200 Subject: [PATCH 045/199] Fix Javascript class tests --- .../DotNetNuke.Tests.Core.csproj | 4 +++ .../JavaScriptLibraries/JavaScriptTests.cs | 33 +++++++++++++++---- 2 files changed, 31 insertions(+), 6 deletions(-) diff --git a/DNN Platform/Tests/DotNetNuke.Tests.Core/DotNetNuke.Tests.Core.csproj b/DNN Platform/Tests/DotNetNuke.Tests.Core/DotNetNuke.Tests.Core.csproj index 9242946489d..b899d83d28c 100644 --- a/DNN Platform/Tests/DotNetNuke.Tests.Core/DotNetNuke.Tests.Core.csproj +++ b/DNN Platform/Tests/DotNetNuke.Tests.Core/DotNetNuke.Tests.Core.csproj @@ -307,6 +307,10 @@ {6928A9B1-F88A-4581-A132-D3EB38669BB0} DotNetNuke.Abstractions + + {039BAFBD-E2DB-40C4-B565-C27467D9B5E1} + DotNetNuke.Web.Client.ResourceManager + {03e3afa5-ddc9-48fb-a839-ad4282ce237e} DotNetNuke.Web.Client diff --git a/DNN Platform/Tests/DotNetNuke.Tests.Core/Framework/JavaScriptLibraries/JavaScriptTests.cs b/DNN Platform/Tests/DotNetNuke.Tests.Core/Framework/JavaScriptLibraries/JavaScriptTests.cs index 86d2e1a7586..bc13719a240 100644 --- a/DNN Platform/Tests/DotNetNuke.Tests.Core/Framework/JavaScriptLibraries/JavaScriptTests.cs +++ b/DNN Platform/Tests/DotNetNuke.Tests.Core/Framework/JavaScriptLibraries/JavaScriptTests.cs @@ -7,18 +7,17 @@ namespace DotNetNuke.Tests.Core.Framework.JavaScriptLibraries using System; using System.Collections.Generic; using System.Linq; - using System.Reflection; using System.Web; - - using DotNetNuke.Abstractions; using DotNetNuke.Abstractions.Application; + using DotNetNuke.Abstractions.ClientResources; using DotNetNuke.Application; using DotNetNuke.Common; using DotNetNuke.Framework.JavaScriptLibraries; - using DotNetNuke.Tests.Instance.Utilities; + using DotNetNuke.Services.Cache; + using DotNetNuke.Services.Installer.Packages; using DotNetNuke.Tests.Utilities.Fakes; using DotNetNuke.Tests.Utilities.Mocks; - + using DotNetNuke.Web.Client.ResourceManager; using Microsoft.Extensions.DependencyInjection; using Moq; @@ -33,6 +32,7 @@ public class JavaScriptTests private HttpContextBase httpContext; private FakeServiceProvider serviceProvider; + private Mock cachingProvider; [SetUp] public void Setup() @@ -50,16 +50,23 @@ public void Setup() dataProviderMock.Setup(dp => dp.GetProviderPath()).Returns(string.Empty); dataProviderMock.Setup(dp => dp.GetVersion()).Returns(dnnContext.Application.Version); + this.cachingProvider = MockComponentProvider.CreateDataCacheProvider(); + this.serviceProvider = FakeServiceProvider.Setup( services => { services.AddSingleton(mockApplicationStatusInfo.Object); services.AddSingleton(mockApplication.Object); + services.AddSingleton(this.cachingProvider.Object); services.AddSingleton(dnnContext); services.AddSingleton(dataProviderMock.Object); + services.AddSingleton(Mock.Of()); + services.AddSingleton(); }); this.httpContext = HttpContextSource.Current; + + this.SetupPackageController(); } [TearDown] @@ -402,9 +409,23 @@ private void SetupJavaScriptLibraryController(params JavaScriptLibrary[] librari { var libraryController = new Mock(); libraryController.Setup(lc => lc.GetLibraries()).Returns(libraries); - libraryController.Setup(lc => lc.GetLibrary(It.IsAny>())).Returns((Func predicate) => libraries.SingleOrDefault(predicate)); + libraryController.Setup(lc => lc.GetLibrary(It.IsAny>())).Returns((Func predicate) => libraries.Where(predicate).OrderByDescending(l => l.Version).FirstOrDefault()); libraryController.Setup(lc => lc.GetLibraries(It.IsAny>())).Returns((Func predicate) => libraries.Where(predicate)); JavaScriptLibraryController.SetTestableInstance(libraryController.Object); } + + private void SetupPackageController(params PackageInfo[] packages) + { + var packageController = new Mock(); + // Fix: Provide a portalId argument (e.g., 0) to match the required signature + packageController.Setup(pc => pc.GetExtensionPackages(It.IsAny())) + .Returns(packages.ToList()); + packageController.Setup(pc => pc.GetExtensionPackage(It.IsAny(), It.IsAny>())) + .Returns((int portalId, Func predicate) => new PackageInfo()); + // Fix: Correct the type of the predicate to match the method signature + packageController.Setup(pc => pc.GetPackageDependencies(It.IsAny>())) + .Returns(new List()); + PackageController.SetTestableInstance(packageController.Object); + } } } From 2b18975bfc93c040896454076471d3dec47cb677 Mon Sep 17 00:00:00 2001 From: Peter Donker Date: Fri, 3 Oct 2025 16:40:19 +0200 Subject: [PATCH 046/199] Fix for empty providers --- .../ClientResourceController.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourceController.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourceController.cs index 93403dafd14..6c925a17f3d 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourceController.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourceController.cs @@ -126,7 +126,7 @@ public string RenderDependencies(ResourceType resourceType, string provider, str var sortedList = new List(); if (resourceType == ResourceType.Font || resourceType == ResourceType.All) { - foreach (var link in this.Fonts.Where(s => s.Provider == provider && !this.FontsToExclude.Contains(s.Name.ToLowerInvariant())).OrderBy(l => l.Priority)) + foreach (var link in this.Fonts.Where(s => (s.Provider == provider || (s.Provider == string.Empty && provider == ClientResourceProviders.DefaultCssProvider)) && !this.FontsToExclude.Contains(s.Name.ToLowerInvariant())).OrderBy(l => l.Priority)) { sortedList.Add(link.Render(this.hostSettings.CrmVersion, this.hostSettings.CdnEnabled, applicationPath)); } @@ -134,7 +134,7 @@ public string RenderDependencies(ResourceType resourceType, string provider, str if (resourceType == ResourceType.Stylesheet || resourceType == ResourceType.All) { - foreach (var link in this.Stylesheets.Where(s => s.Provider == provider && !this.StylesheetsToExclude.Contains(s.Name.ToLowerInvariant())).OrderBy(l => l.Priority)) + foreach (var link in this.Stylesheets.Where(s => (s.Provider == provider || (s.Provider == string.Empty && provider == ClientResourceProviders.DefaultCssProvider)) && !this.StylesheetsToExclude.Contains(s.Name.ToLowerInvariant())).OrderBy(l => l.Priority)) { sortedList.Add(link.Render(this.hostSettings.CrmVersion, this.hostSettings.CdnEnabled, applicationPath)); } @@ -142,7 +142,7 @@ public string RenderDependencies(ResourceType resourceType, string provider, str if (resourceType == ResourceType.Script || resourceType == ResourceType.All) { - foreach (var script in this.Scripts.Where(s => s.Provider == provider && !this.ScriptsToExclude.Contains(s.Name.ToLowerInvariant())).OrderBy(s => s.Priority)) + foreach (var script in this.Scripts.Where(s => (s.Provider == provider || (s.Provider == string.Empty && provider == ClientResourceProviders.DefaultJsProvider)) && !this.ScriptsToExclude.Contains(s.Name.ToLowerInvariant())).OrderBy(s => s.Priority)) { sortedList.Add(script.Render(this.hostSettings.CrmVersion, this.hostSettings.CdnEnabled, applicationPath)); } From 3641e652480a1fe07da8e72970fd65b89c12d9c7 Mon Sep 17 00:00:00 2001 From: Sacha Date: Fri, 3 Oct 2025 17:01:41 +0200 Subject: [PATCH 047/199] fix code styling --- DNN Platform/Library/Services/Pages/PageExtensions.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DNN Platform/Library/Services/Pages/PageExtensions.cs b/DNN Platform/Library/Services/Pages/PageExtensions.cs index aa92213973c..5f8a63df5f2 100644 --- a/DNN Platform/Library/Services/Pages/PageExtensions.cs +++ b/DNN Platform/Library/Services/Pages/PageExtensions.cs @@ -49,7 +49,7 @@ public static void AddMessage(this IPageService pageService, string heading, str { var priorityMessage = new PageMessage(heading, message, PageMessageType.Info, string.Empty, priority); pageService.AddMessage(priorityMessage); - } + } /// /// Adds a message using simple parameters with specified message type and icon. From f276aee7e3a43a392aadcf9a5fedd2d429dd09b4 Mon Sep 17 00:00:00 2001 From: Sacha Date: Mon, 6 Oct 2025 11:33:53 +0200 Subject: [PATCH 048/199] avoid breaking change when module set Page.Title (without the pageservice) --- DNN Platform/Website/Default.aspx.cs | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/DNN Platform/Website/Default.aspx.cs b/DNN Platform/Website/Default.aspx.cs index b62eee398ac..cc6bc897b15 100644 --- a/DNN Platform/Website/Default.aspx.cs +++ b/DNN Platform/Website/Default.aspx.cs @@ -288,8 +288,6 @@ protected override void OnInit(EventArgs e) } } - this.pageService.SetCanonicalLinkUrl(this.CanonicalLinkUrl, PagePriority.Page); - // add CSS links ClientResourceManager.RegisterDefaultStylesheet(this, string.Concat(Globals.ApplicationPath, "/Resources/Shared/stylesheets/dnndefault/10.0.0/default.css")); ClientResourceManager.RegisterStyleSheet(this, string.Concat(ctlSkin.SkinPath, "skin.css"), FileOrder.Css.SkinCss); @@ -343,8 +341,11 @@ protected override void OnPreRender(EventArgs evt) this.metaPanel.Visible = !UrlUtils.InPopUp(); if (!UrlUtils.InPopUp()) { + this.pageService.SetTitle(this.Title, PagePriority.Page); this.Title = this.pageService.GetTitle(); + this.pageService.SetDescription(this.Description, PagePriority.Page); this.Description = this.pageService.GetDescription(); + this.pageService.SetKeyWords(this.KeyWords, PagePriority.Page); this.KeyWords = this.pageService.GetKeyWords(); this.MetaGenerator.Content = this.Generator; @@ -362,6 +363,7 @@ protected override void OnPreRender(EventArgs evt) this.Page.Response.AddHeader("X-UA-Compatible", this.PortalSettings.AddCompatibleHttpHeader); } + this.pageService.SetCanonicalLinkUrl(this.CanonicalLinkUrl, PagePriority.Page); this.CanonicalLinkUrl = this.pageService.GetCanonicalLinkUrl(); if (!string.IsNullOrEmpty(this.CanonicalLinkUrl)) { @@ -612,8 +614,6 @@ private void InitializePage() this.Description = this.PortalSettings.Description; } - this.pageService.SetDescription(this.Description, PagePriority.Page); - // META keywords if (!string.IsNullOrEmpty(this.PortalSettings.ActiveTab.KeyWords)) { @@ -624,8 +624,6 @@ private void InitializePage() this.KeyWords = this.PortalSettings.KeyWords; } - this.pageService.SetKeyWords(this.KeyWords, PagePriority.Page); - // META copyright if (!string.IsNullOrEmpty(this.PortalSettings.FooterText)) { @@ -668,8 +666,6 @@ private void InitializePage() this.Title += versionString; } - this.pageService.SetTitle(this.Title, PagePriority.Page); - // register css variables var cssVariablesStyleSheet = this.GetCssVariablesStylesheet(); ClientResourceManager.RegisterStyleSheet(this, cssVariablesStyleSheet, FileOrder.Css.DefaultCss); From b7d6a0082a4182e0f506b8e1b450ed04277bd75c Mon Sep 17 00:00:00 2001 From: Brian Dukes Date: Fri, 10 Oct 2025 09:49:17 -0500 Subject: [PATCH 049/199] Update jQuery map file to 3.7.1 Fixes #6456 --- DNN Platform/JavaScript Libraries/jQuery/jquery.min.map | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DNN Platform/JavaScript Libraries/jQuery/jquery.min.map b/DNN Platform/JavaScript Libraries/jQuery/jquery.min.map index faa1db8dacd..db38af58935 100644 --- a/DNN Platform/JavaScript Libraries/jQuery/jquery.min.map +++ b/DNN Platform/JavaScript Libraries/jQuery/jquery.min.map @@ -1 +1 @@ -{"version":3,"sources":["jquery-3.5.1.js"],"names":["global","factory","module","exports","document","w","Error","window","this","noGlobal","arr","getProto","Object","getPrototypeOf","slice","flat","array","call","concat","apply","push","indexOf","class2type","toString","hasOwn","hasOwnProperty","fnToString","ObjectFunctionString","support","isFunction","obj","nodeType","isWindow","preservedScriptAttributes","type","src","nonce","noModule","DOMEval","code","node","doc","i","val","script","createElement","text","getAttribute","setAttribute","head","appendChild","parentNode","removeChild","toType","version","jQuery","selector","context","fn","init","isArrayLike","length","prototype","jquery","constructor","toArray","get","num","pushStack","elems","ret","merge","prevObject","each","callback","map","elem","arguments","first","eq","last","even","grep","_elem","odd","len","j","end","sort","splice","extend","options","name","copy","copyIsArray","clone","target","deep","isPlainObject","Array","isArray","undefined","expando","Math","random","replace","isReady","error","msg","noop","proto","Ctor","isEmptyObject","globalEval","makeArray","results","inArray","second","invert","matches","callbackExpect","arg","value","guid","Symbol","iterator","split","_i","toLowerCase","Sizzle","Expr","getText","isXML","tokenize","compile","select","outermostContext","sortInput","hasDuplicate","setDocument","docElem","documentIsHTML","rbuggyQSA","rbuggyMatches","contains","Date","preferredDoc","dirruns","done","classCache","createCache","tokenCache","compilerCache","nonnativeSelectorCache","sortOrder","a","b","pop","pushNative","list","booleans","whitespace","identifier","attributes","pseudos","rwhitespace","RegExp","rtrim","rcomma","rcombinators","rdescend","rpseudo","ridentifier","matchExpr","ID","CLASS","TAG","ATTR","PSEUDO","CHILD","bool","needsContext","rhtml","rinputs","rheader","rnative","rquickExpr","rsibling","runescape","funescape","escape","nonHex","high","String","fromCharCode","rcssescape","fcssescape","ch","asCodePoint","charCodeAt","unloadHandler","inDisabledFieldset","addCombinator","disabled","nodeName","dir","next","childNodes","e","els","seed","m","nid","match","groups","newSelector","newContext","ownerDocument","exec","getElementById","id","getElementsByTagName","getElementsByClassName","qsa","test","testContext","scope","toSelector","join","querySelectorAll","qsaError","removeAttribute","keys","cache","key","cacheLength","shift","markFunction","assert","el","addHandle","attrs","handler","attrHandle","siblingCheck","cur","diff","sourceIndex","nextSibling","createInputPseudo","createButtonPseudo","createDisabledPseudo","isDisabled","createPositionalPseudo","argument","matchIndexes","namespace","namespaceURI","documentElement","hasCompare","subWindow","defaultView","top","addEventListener","attachEvent","className","createComment","getById","getElementsByName","filter","attrId","find","getAttributeNode","tag","tmp","input","innerHTML","matchesSelector","webkitMatchesSelector","mozMatchesSelector","oMatchesSelector","msMatchesSelector","disconnectedMatch","compareDocumentPosition","adown","bup","compare","sortDetached","aup","ap","bp","unshift","expr","elements","attr","specified","sel","uniqueSort","duplicates","detectDuplicates","sortStable","textContent","firstChild","nodeValue","selectors","createPseudo","relative",">"," ","+","~","preFilter","excess","unquoted","nodeNameSelector","pattern","operator","check","result","what","_argument","simple","forward","ofType","_context","xml","uniqueCache","outerCache","nodeIndex","start","parent","useCache","lastChild","uniqueID","pseudo","args","setFilters","idx","matched","not","matcher","unmatched","has","lang","elemLang","hash","location","root","focus","activeElement","hasFocus","href","tabIndex","enabled","checked","selected","selectedIndex","empty","header","button","_matchIndexes","lt","gt","radio","checkbox","file","password","image","submit","reset","tokens","combinator","base","skip","checkNonElements","doneName","oldCache","newCache","elementMatcher","matchers","condense","newUnmatched","mapped","setMatcher","postFilter","postFinder","postSelector","temp","preMap","postMap","preexisting","contexts","multipleContexts","matcherIn","matcherOut","matcherFromTokens","checkContext","leadingRelative","implicitRelative","matchContext","matchAnyContext","filters","parseOnly","soFar","preFilters","cached","elementMatchers","setMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","dirrunsUnique","token","compiled","_name","defaultValue","unique","isXMLDoc","escapeSelector","until","truncate","is","siblings","n","rneedsContext","rsingleTag","winnow","qualifier","self","rootjQuery","parseHTML","ready","rparentsprev","guaranteedUnique","children","contents","prev","sibling","targets","l","closest","index","prevAll","add","addBack","parents","parentsUntil","nextAll","nextUntil","prevUntil","contentDocument","content","reverse","rnothtmlwhite","Identity","v","Thrower","ex","adoptValue","resolve","reject","noValue","method","promise","fail","then","Callbacks","object","_","flag","firing","memory","fired","locked","queue","firingIndex","fire","once","stopOnFalse","remove","disable","lock","fireWith","Deferred","func","tuples","state","always","deferred","catch","pipe","fns","newDefer","tuple","returned","progress","notify","onFulfilled","onRejected","onProgress","maxDepth","depth","special","that","mightThrow","TypeError","notifyWith","resolveWith","process","exceptionHook","stackTrace","rejectWith","getStackHook","setTimeout","stateString","when","singleValue","remaining","resolveContexts","resolveValues","master","updateFunc","rerrorNames","stack","console","warn","message","readyException","readyList","completed","removeEventListener","readyWait","wait","readyState","doScroll","access","chainable","emptyGet","raw","bulk","_key","rmsPrefix","rdashAlpha","fcamelCase","_all","letter","toUpperCase","camelCase","string","acceptData","owner","Data","uid","defineProperty","configurable","set","data","prop","hasData","dataPriv","dataUser","rbrace","rmultiDash","dataAttr","JSON","parse","removeData","_data","_removeData","dequeue","startLength","hooks","_queueHooks","stop","setter","clearQueue","count","defer","pnum","source","rcssNum","cssExpand","isAttached","composed","getRootNode","isHiddenWithinTree","style","display","css","adjustCSS","valueParts","tween","adjusted","scale","maxIterations","currentValue","initial","unit","cssNumber","initialInUnit","defaultDisplayMap","showHide","show","values","body","hide","toggle","div","rcheckableType","rtagName","rscriptType","createDocumentFragment","checkClone","cloneNode","noCloneChecked","option","wrapMap","thead","col","tr","td","_default","getAll","setGlobalEval","refElements","tbody","tfoot","colgroup","caption","th","optgroup","buildFragment","scripts","selection","ignored","wrap","attached","fragment","nodes","htmlPrefilter","createTextNode","rkeyEvent","rmouseEvent","rtypenamespace","returnTrue","returnFalse","expectSync","err","safeActiveElement","on","types","one","origFn","event","off","leverageNative","notAsync","saved","isTrigger","delegateType","stopPropagation","stopImmediatePropagation","preventDefault","trigger","Event","handleObjIn","eventHandle","events","t","handleObj","handlers","namespaces","origType","elemData","create","handle","triggered","dispatch","bindType","delegateCount","setup","mappedTypes","origCount","teardown","removeEvent","nativeEvent","handlerQueue","fix","delegateTarget","preDispatch","isPropagationStopped","currentTarget","isImmediatePropagationStopped","rnamespace","postDispatch","matchedHandlers","matchedSelectors","addProp","hook","enumerable","originalEvent","writable","load","noBubble","click","beforeunload","returnValue","props","isDefaultPrevented","defaultPrevented","relatedTarget","timeStamp","now","isSimulated","altKey","bubbles","cancelable","changedTouches","ctrlKey","detail","eventPhase","metaKey","pageX","pageY","shiftKey","view","char","charCode","keyCode","buttons","clientX","clientY","offsetX","offsetY","pointerId","pointerType","screenX","screenY","targetTouches","toElement","touches","which","blur","mouseenter","mouseleave","pointerenter","pointerleave","orig","related","rnoInnerhtml","rchecked","rcleanScript","manipulationTarget","disableScript","restoreScript","cloneCopyEvent","dest","udataOld","udataCur","domManip","collection","hasScripts","iNoClone","valueIsFunction","html","_evalUrl","keepData","cleanData","dataAndEvents","deepDataAndEvents","srcElements","destElements","inPage","detach","append","prepend","insertBefore","before","after","replaceWith","replaceChild","appendTo","prependTo","insertAfter","replaceAll","original","insert","rnumnonpx","getStyles","opener","getComputedStyle","swap","old","rboxStyle","curCSS","computed","width","minWidth","maxWidth","getPropertyValue","pixelBoxStyles","addGetHookIf","conditionFn","hookFn","computeStyleTests","container","cssText","divStyle","pixelPositionVal","reliableMarginLeftVal","roundPixelMeasures","marginLeft","right","pixelBoxStylesVal","boxSizingReliableVal","position","scrollboxSizeVal","offsetWidth","measure","round","parseFloat","reliableTrDimensionsVal","backgroundClip","clearCloneStyle","boxSizingReliable","pixelPosition","reliableMarginLeft","scrollboxSize","reliableTrDimensions","table","trChild","trStyle","height","parseInt","cssPrefixes","emptyStyle","vendorProps","finalPropName","final","cssProps","capName","vendorPropName","rdisplayswap","rcustomProp","cssShow","visibility","cssNormalTransform","letterSpacing","fontWeight","setPositiveNumber","subtract","max","boxModelAdjustment","dimension","box","isBorderBox","styles","computedVal","extra","delta","ceil","getWidthOrHeight","valueIsBorderBox","offsetProp","getClientRects","Tween","easing","cssHooks","opacity","animationIterationCount","columnCount","fillOpacity","flexGrow","flexShrink","gridArea","gridColumn","gridColumnEnd","gridColumnStart","gridRow","gridRowEnd","gridRowStart","lineHeight","order","orphans","widows","zIndex","zoom","origName","isCustomProp","setProperty","isFinite","getBoundingClientRect","scrollboxSizeBuggy","left","margin","padding","border","prefix","suffix","expand","expanded","parts","propHooks","run","percent","eased","duration","pos","step","fx","scrollTop","scrollLeft","linear","p","swing","cos","PI","fxNow","inProgress","opt","rfxtypes","rrun","schedule","hidden","requestAnimationFrame","interval","tick","createFxNow","genFx","includeWidth","createTween","animation","Animation","tweeners","properties","stopped","prefilters","currentTime","startTime","tweens","opts","specialEasing","originalProperties","originalOptions","gotoEnd","propFilter","bind","complete","timer","anim","*","tweener","oldfire","propTween","restoreDisplay","isBox","dataShow","unqueued","overflow","overflowX","overflowY","prefilter","speed","speeds","fadeTo","to","animate","optall","doAnimation","finish","stopQueue","timers","cssFn","slideDown","slideUp","slideToggle","fadeIn","fadeOut","fadeToggle","slow","fast","delay","time","timeout","clearTimeout","checkOn","optSelected","radioValue","boolHook","removeAttr","nType","attrHooks","attrNames","getter","lowercaseName","rfocusable","rclickable","stripAndCollapse","getClass","classesToArray","removeProp","propFix","tabindex","for","class","addClass","classes","curValue","clazz","finalValue","removeClass","toggleClass","stateVal","isValidValue","classNames","hasClass","rreturn","valHooks","optionSet","focusin","rfocusMorph","stopPropagationCallback","onlyHandlers","bubbleType","ontype","lastElement","eventPath","parentWindow","simulate","triggerHandler","attaches","rquery","parseXML","DOMParser","parseFromString","rbracket","rCRLF","rsubmitterTypes","rsubmittable","buildParams","traditional","param","s","valueOrFunction","encodeURIComponent","serialize","serializeArray","r20","rhash","rantiCache","rheaders","rnoContent","rprotocol","transports","allTypes","originAnchor","addToPrefiltersOrTransports","structure","dataTypeExpression","dataType","dataTypes","inspectPrefiltersOrTransports","jqXHR","inspected","seekingTransport","inspect","prefilterOrFactory","dataTypeOrTransport","ajaxExtend","flatOptions","ajaxSettings","active","lastModified","etag","url","isLocal","protocol","processData","async","contentType","accepts","json","responseFields","converters","* text","text html","text json","text xml","ajaxSetup","settings","ajaxPrefilter","ajaxTransport","ajax","transport","cacheURL","responseHeadersString","responseHeaders","timeoutTimer","urlAnchor","fireGlobals","uncached","callbackContext","globalEventContext","completeDeferred","statusCode","requestHeaders","requestHeadersNames","strAbort","getResponseHeader","getAllResponseHeaders","setRequestHeader","overrideMimeType","mimeType","status","abort","statusText","finalText","crossDomain","host","hasContent","ifModified","headers","beforeSend","success","send","nativeStatusText","responses","isSuccess","response","modified","ct","finalDataType","firstDataType","ajaxHandleResponses","conv2","current","conv","dataFilter","throws","ajaxConvert","getJSON","getScript","text script","wrapAll","firstElementChild","wrapInner","htmlIsFunction","unwrap","visible","offsetHeight","xhr","XMLHttpRequest","xhrSuccessStatus","0","1223","xhrSupported","cors","errorCallback","open","username","xhrFields","onload","onerror","onabort","ontimeout","onreadystatechange","responseType","responseText","binary","scriptAttrs","charset","scriptCharset","evt","oldCallbacks","rjsonp","jsonp","jsonpCallback","originalSettings","callbackName","overwritten","responseContainer","jsonProp","createHTMLDocument","implementation","keepScripts","parsed","params","animated","offset","setOffset","curPosition","curLeft","curCSSTop","curTop","curOffset","curCSSLeft","curElem","using","rect","win","pageYOffset","pageXOffset","offsetParent","parentOffset","scrollTo","Height","Width","","defaultExtra","funcName","unbind","delegate","undelegate","hover","fnOver","fnOut","proxy","holdReady","hold","parseJSON","isNumeric","isNaN","trim","define","amd","_jQuery","_$","$","noConflict"],"mappings":"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","file":"jquery-3.5.1.min.js"} \ No newline at end of file +{"version":3,"sources":["jquery-3.7.1.js"],"names":["global","factory","module","exports","document","w","Error","window","this","noGlobal","arr","getProto","Object","getPrototypeOf","slice","flat","array","call","concat","apply","push","indexOf","class2type","toString","hasOwn","hasOwnProperty","fnToString","ObjectFunctionString","support","isFunction","obj","nodeType","item","isWindow","preservedScriptAttributes","type","src","nonce","noModule","DOMEval","code","node","doc","i","val","script","createElement","text","getAttribute","setAttribute","head","appendChild","parentNode","removeChild","toType","version","rhtmlSuffix","jQuery","selector","context","fn","init","isArrayLike","length","nodeName","elem","name","toLowerCase","prototype","jquery","constructor","toArray","get","num","pushStack","elems","ret","merge","prevObject","each","callback","map","arguments","first","eq","last","even","grep","_elem","odd","len","j","end","sort","splice","extend","options","copy","copyIsArray","clone","target","deep","isPlainObject","Array","isArray","undefined","expando","Math","random","replace","isReady","error","msg","noop","proto","Ctor","isEmptyObject","globalEval","textContent","documentElement","nodeValue","makeArray","results","inArray","isXMLDoc","namespace","namespaceURI","docElem","ownerDocument","test","second","invert","matches","callbackExpect","arg","value","guid","Symbol","iterator","split","_i","pop","whitespace","rtrimCSS","RegExp","contains","a","b","bup","compareDocumentPosition","rcssescape","fcssescape","ch","asCodePoint","charCodeAt","escapeSelector","sel","preferredDoc","pushNative","Expr","outermostContext","sortInput","hasDuplicate","documentIsHTML","rbuggyQSA","dirruns","done","classCache","createCache","tokenCache","compilerCache","nonnativeSelectorCache","sortOrder","booleans","identifier","attributes","pseudos","rwhitespace","rcomma","rleadingCombinator","rdescend","rpseudo","ridentifier","matchExpr","ID","CLASS","TAG","ATTR","PSEUDO","CHILD","bool","needsContext","rinputs","rheader","rquickExpr","rsibling","runescape","funescape","escape","nonHex","high","String","fromCharCode","unloadHandler","setDocument","inDisabledFieldset","addCombinator","disabled","dir","next","childNodes","e","els","find","seed","m","nid","match","groups","newSelector","newContext","exec","getElementById","id","getElementsByTagName","getElementsByClassName","testContext","scope","tokenize","toSelector","join","querySelectorAll","qsaError","removeAttribute","select","keys","cache","key","cacheLength","shift","markFunction","assert","el","createInputPseudo","createButtonPseudo","createDisabledPseudo","isDisabled","createPositionalPseudo","argument","matchIndexes","subWindow","webkitMatchesSelector","msMatchesSelector","defaultView","top","addEventListener","getById","getElementsByName","disconnectedMatch","cssHas","querySelector","filter","attrId","getAttributeNode","tag","className","input","innerHTML","compare","sortDetached","expr","elements","matchesSelector","attr","attrHandle","uniqueSort","duplicates","sortStable","createPseudo","relative",">"," ","+","~","preFilter","excess","unquoted","nodeNameSelector","expectedNodeName","pattern","operator","check","result","what","_argument","simple","forward","ofType","_context","xml","outerCache","nodeIndex","start","parent","useCache","diff","firstChild","lastChild","pseudo","args","setFilters","idx","matched","not","matcher","compile","unmatched","has","lang","elemLang","hash","location","root","focus","activeElement","err","safeActiveElement","hasFocus","href","tabIndex","enabled","checked","selected","selectedIndex","empty","nextSibling","header","button","_matchIndexes","lt","gt","nth","radio","checkbox","file","password","image","submit","reset","parseOnly","tokens","soFar","preFilters","cached","combinator","base","skip","checkNonElements","doneName","oldCache","newCache","elementMatcher","matchers","condense","newUnmatched","mapped","setMatcher","postFilter","postFinder","postSelector","temp","matcherOut","preMap","postMap","preexisting","contexts","multipleContexts","matcherIn","matcherFromTokens","checkContext","leadingRelative","implicitRelative","matchContext","matchAnyContext","elementMatchers","setMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","dirrunsUnique","token","compiled","filters","unique","getText","isXML","selectors","until","truncate","is","siblings","n","rneedsContext","rsingleTag","winnow","qualifier","self","rootjQuery","parseHTML","ready","rparentsprev","guaranteedUnique","children","contents","prev","sibling","cur","targets","l","closest","index","prevAll","add","addBack","parents","parentsUntil","nextAll","nextUntil","prevUntil","contentDocument","content","reverse","rnothtmlwhite","Identity","v","Thrower","ex","adoptValue","resolve","reject","noValue","method","promise","fail","then","Callbacks","object","_","flag","firing","memory","fired","locked","list","queue","firingIndex","fire","once","stopOnFalse","remove","disable","lock","fireWith","Deferred","func","tuples","state","always","deferred","catch","pipe","fns","newDefer","tuple","returned","progress","notify","onFulfilled","onRejected","onProgress","maxDepth","depth","handler","special","that","mightThrow","TypeError","notifyWith","resolveWith","process","exceptionHook","rejectWith","getErrorHook","getStackHook","setTimeout","stateString","when","singleValue","remaining","resolveContexts","resolveValues","primary","updateFunc","rerrorNames","asyncError","console","warn","message","stack","readyException","readyList","completed","removeEventListener","readyWait","wait","readyState","doScroll","access","chainable","emptyGet","raw","bulk","_key","rmsPrefix","rdashAlpha","fcamelCase","_all","letter","toUpperCase","camelCase","string","acceptData","owner","Data","uid","defineProperty","configurable","set","data","prop","hasData","dataPriv","dataUser","rbrace","rmultiDash","dataAttr","JSON","parse","removeData","_data","_removeData","attrs","dequeue","startLength","hooks","_queueHooks","unshift","stop","setter","clearQueue","tmp","count","defer","pnum","source","rcssNum","cssExpand","isAttached","composed","getRootNode","isHiddenWithinTree","style","display","css","adjustCSS","valueParts","tween","adjusted","scale","maxIterations","currentValue","initial","unit","cssNumber","initialInUnit","defaultDisplayMap","showHide","show","values","body","hide","toggle","div","rcheckableType","rtagName","rscriptType","createDocumentFragment","checkClone","cloneNode","noCloneChecked","defaultValue","option","wrapMap","thead","col","tr","td","_default","getAll","setGlobalEval","refElements","tbody","tfoot","colgroup","caption","th","optgroup","rhtml","buildFragment","scripts","selection","ignored","wrap","attached","fragment","nodes","htmlPrefilter","createTextNode","rtypenamespace","returnTrue","returnFalse","on","types","one","origFn","event","off","leverageNative","isSetup","saved","isTrigger","delegateType","stopPropagation","stopImmediatePropagation","preventDefault","trigger","isImmediatePropagationStopped","handleObjIn","eventHandle","events","t","handleObj","handlers","namespaces","origType","elemData","create","handle","triggered","dispatch","bindType","delegateCount","setup","mappedTypes","origCount","teardown","removeEvent","nativeEvent","handlerQueue","fix","delegateTarget","preDispatch","isPropagationStopped","currentTarget","rnamespace","postDispatch","matchedHandlers","matchedSelectors","addProp","hook","Event","enumerable","originalEvent","writable","load","noBubble","click","beforeunload","returnValue","props","isDefaultPrevented","defaultPrevented","relatedTarget","timeStamp","Date","now","isSimulated","altKey","bubbles","cancelable","changedTouches","ctrlKey","detail","eventPhase","metaKey","pageX","pageY","shiftKey","view","char","charCode","keyCode","buttons","clientX","clientY","offsetX","offsetY","pointerId","pointerType","screenX","screenY","targetTouches","toElement","touches","which","blur","focusMappedHandler","documentMode","simulate","attaches","dataHolder","mouseenter","mouseleave","pointerenter","pointerleave","orig","related","rnoInnerhtml","rchecked","rcleanScript","manipulationTarget","disableScript","restoreScript","cloneCopyEvent","dest","udataOld","udataCur","domManip","collection","hasScripts","iNoClone","valueIsFunction","html","_evalUrl","keepData","cleanData","dataAndEvents","deepDataAndEvents","srcElements","destElements","inPage","detach","append","prepend","insertBefore","before","after","replaceWith","replaceChild","appendTo","prependTo","insertAfter","replaceAll","original","insert","rnumnonpx","rcustomProp","getStyles","opener","getComputedStyle","swap","old","rboxStyle","curCSS","computed","width","minWidth","maxWidth","isCustomProp","getPropertyValue","pixelBoxStyles","addGetHookIf","conditionFn","hookFn","computeStyleTests","container","cssText","divStyle","pixelPositionVal","reliableMarginLeftVal","roundPixelMeasures","marginLeft","right","pixelBoxStylesVal","boxSizingReliableVal","position","scrollboxSizeVal","offsetWidth","measure","round","parseFloat","reliableTrDimensionsVal","backgroundClip","clearCloneStyle","boxSizingReliable","pixelPosition","reliableMarginLeft","scrollboxSize","reliableTrDimensions","table","trChild","trStyle","height","parseInt","borderTopWidth","borderBottomWidth","offsetHeight","cssPrefixes","emptyStyle","vendorProps","finalPropName","final","cssProps","capName","vendorPropName","rdisplayswap","cssShow","visibility","cssNormalTransform","letterSpacing","fontWeight","setPositiveNumber","subtract","max","boxModelAdjustment","dimension","box","isBorderBox","styles","computedVal","extra","delta","marginDelta","ceil","getWidthOrHeight","valueIsBorderBox","offsetProp","getClientRects","Tween","easing","cssHooks","opacity","animationIterationCount","aspectRatio","borderImageSlice","columnCount","flexGrow","flexShrink","gridArea","gridColumn","gridColumnEnd","gridColumnStart","gridRow","gridRowEnd","gridRowStart","lineHeight","order","orphans","widows","zIndex","zoom","fillOpacity","floodOpacity","stopOpacity","strokeMiterlimit","strokeOpacity","origName","setProperty","isFinite","getBoundingClientRect","scrollboxSizeBuggy","left","margin","padding","border","prefix","suffix","expand","expanded","parts","propHooks","run","percent","eased","duration","pos","step","fx","scrollTop","scrollLeft","linear","p","swing","cos","PI","fxNow","inProgress","opt","rfxtypes","rrun","schedule","hidden","requestAnimationFrame","interval","tick","createFxNow","genFx","includeWidth","createTween","animation","Animation","tweeners","properties","stopped","prefilters","currentTime","startTime","tweens","opts","specialEasing","originalProperties","originalOptions","gotoEnd","propFilter","bind","complete","timer","anim","*","tweener","oldfire","propTween","restoreDisplay","isBox","dataShow","unqueued","overflow","overflowX","overflowY","prefilter","speed","speeds","fadeTo","to","animate","optall","doAnimation","finish","stopQueue","timers","cssFn","slideDown","slideUp","slideToggle","fadeIn","fadeOut","fadeToggle","slow","fast","delay","time","timeout","clearTimeout","checkOn","optSelected","radioValue","boolHook","removeAttr","nType","attrHooks","attrNames","getter","lowercaseName","rfocusable","rclickable","stripAndCollapse","getClass","classesToArray","removeProp","propFix","tabindex","for","class","addClass","classNames","curValue","finalValue","removeClass","toggleClass","stateVal","isValidValue","hasClass","rreturn","valHooks","optionSet","rquery","parseXML","parserErrorElem","DOMParser","parseFromString","rfocusMorph","stopPropagationCallback","onlyHandlers","bubbleType","ontype","lastElement","eventPath","parentWindow","triggerHandler","rbracket","rCRLF","rsubmitterTypes","rsubmittable","buildParams","traditional","param","s","valueOrFunction","encodeURIComponent","serialize","serializeArray","r20","rhash","rantiCache","rheaders","rnoContent","rprotocol","transports","allTypes","originAnchor","addToPrefiltersOrTransports","structure","dataTypeExpression","dataType","dataTypes","inspectPrefiltersOrTransports","jqXHR","inspected","seekingTransport","inspect","prefilterOrFactory","dataTypeOrTransport","ajaxExtend","flatOptions","ajaxSettings","active","lastModified","etag","url","isLocal","protocol","processData","async","contentType","accepts","json","responseFields","converters","* text","text html","text json","text xml","ajaxSetup","settings","ajaxPrefilter","ajaxTransport","ajax","transport","cacheURL","responseHeadersString","responseHeaders","timeoutTimer","urlAnchor","fireGlobals","uncached","callbackContext","globalEventContext","completeDeferred","statusCode","requestHeaders","requestHeadersNames","strAbort","getResponseHeader","getAllResponseHeaders","setRequestHeader","overrideMimeType","mimeType","status","abort","statusText","finalText","crossDomain","host","hasContent","ifModified","headers","beforeSend","success","send","nativeStatusText","responses","isSuccess","response","modified","ct","finalDataType","firstDataType","ajaxHandleResponses","conv2","current","conv","dataFilter","throws","ajaxConvert","getJSON","getScript","text script","wrapAll","firstElementChild","wrapInner","htmlIsFunction","unwrap","visible","xhr","XMLHttpRequest","xhrSuccessStatus","0","1223","xhrSupported","cors","errorCallback","open","username","xhrFields","onload","onerror","onabort","ontimeout","onreadystatechange","responseType","responseText","binary","scriptAttrs","charset","scriptCharset","evt","oldCallbacks","rjsonp","jsonp","jsonpCallback","originalSettings","callbackName","overwritten","responseContainer","jsonProp","createHTMLDocument","implementation","keepScripts","parsed","params","animated","offset","setOffset","curPosition","curLeft","curCSSTop","curTop","curOffset","curCSSLeft","curElem","using","rect","win","pageYOffset","pageXOffset","offsetParent","parentOffset","scrollTo","Height","Width","","defaultExtra","funcName","unbind","delegate","undelegate","hover","fnOver","fnOut","rtrim","proxy","holdReady","hold","parseJSON","isNumeric","isNaN","trim","define","amd","_jQuery","_$","$","noConflict"],"mappings":";CAUA,SAAYA,EAAQC,GAEnB,aAEuB,iBAAXC,QAAiD,iBAAnBA,OAAOC,QAShDD,OAAOC,QAAUH,EAAOI,SACvBH,EAASD,GAAQ,GACjB,SAAUK,GACT,IAAMA,EAAED,SACP,MAAM,IAAIE,MAAO,4CAElB,OAAOL,EAASI,IAGlBJ,EAASD,GAtBX,CA0BuB,oBAAXO,OAAyBA,OAASC,KAAM,SAAUD,GAAQE,GAMtE,aAEA,IAAIC,GAAM,GAENC,EAAWC,OAAOC,eAElBC,GAAQJ,GAAII,MAEZC,EAAOL,GAAIK,KAAO,SAAUC,GAC/B,OAAON,GAAIK,KAAKE,KAAMD,IACnB,SAAUA,GACb,OAAON,GAAIQ,OAAOC,MAAO,GAAIH,IAI1BI,EAAOV,GAAIU,KAEXC,GAAUX,GAAIW,QAEdC,EAAa,GAEbC,EAAWD,EAAWC,SAEtBC,GAASF,EAAWG,eAEpBC,EAAaF,GAAOD,SAEpBI,EAAuBD,EAAWT,KAAML,QAExCgB,GAAU,GAEVC,EAAa,SAAqBC,GASpC,MAAsB,mBAARA,GAA8C,iBAAjBA,EAAIC,UAC1B,mBAAbD,EAAIE,MAIVC,EAAW,SAAmBH,GAChC,OAAc,MAAPA,GAAeA,IAAQA,EAAIvB,QAIhCH,EAAWG,GAAOH,SAIjB8B,EAA4B,CAC/BC,MAAM,EACNC,KAAK,EACLC,OAAO,EACPC,UAAU,GAGX,SAASC,EAASC,EAAMC,EAAMC,GAG7B,IAAIC,EAAGC,EACNC,GAHDH,EAAMA,GAAOtC,GAGC0C,cAAe,UAG7B,GADAD,EAAOE,KAAOP,EACTC,EACJ,IAAME,KAAKT,GAYVU,EAAMH,EAAME,IAAOF,EAAKO,cAAgBP,EAAKO,aAAcL,KAE1DE,EAAOI,aAAcN,EAAGC,GAI3BF,EAAIQ,KAAKC,YAAaN,GAASO,WAAWC,YAAaR,GAIzD,SAASS,EAAQxB,GAChB,OAAY,MAAPA,EACGA,EAAM,GAIQ,iBAARA,GAAmC,mBAARA,EACxCR,EAAYC,EAASN,KAAMa,KAAW,gBAC/BA,EAQT,IAAIyB,EAAU,QAEbC,EAAc,SAGdC,GAAS,SAAUC,EAAUC,GAI5B,OAAO,IAAIF,GAAOG,GAAGC,KAAMH,EAAUC,IAmYvC,SAASG,EAAahC,GAMrB,IAAIiC,IAAWjC,GAAO,WAAYA,GAAOA,EAAIiC,OAC5C5B,EAAOmB,EAAQxB,GAEhB,OAAKD,EAAYC,KAASG,EAAUH,KAIpB,UAATK,GAA+B,IAAX4B,GACR,iBAAXA,GAAgC,EAATA,GAAgBA,EAAS,KAAOjC,GAIhE,SAASkC,GAAUC,EAAMC,GAExB,OAAOD,EAAKD,UAAYC,EAAKD,SAASG,gBAAkBD,EAAKC,cApZ9DV,GAAOG,GAAKH,GAAOW,UAAY,CAG9BC,OAAQd,EAERe,YAAab,GAGbM,OAAQ,EAERQ,QAAS,WACR,OAAOzD,GAAMG,KAAMT,OAKpBgE,IAAK,SAAUC,GAGd,OAAY,MAAPA,EACG3D,GAAMG,KAAMT,MAIbiE,EAAM,EAAIjE,KAAMiE,EAAMjE,KAAKuD,QAAWvD,KAAMiE,IAKpDC,UAAW,SAAUC,GAGpB,IAAIC,EAAMnB,GAAOoB,MAAOrE,KAAK8D,cAAeK,GAM5C,OAHAC,EAAIE,WAAatE,KAGVoE,GAIRG,KAAM,SAAUC,GACf,OAAOvB,GAAOsB,KAAMvE,KAAMwE,IAG3BC,IAAK,SAAUD,GACd,OAAOxE,KAAKkE,UAAWjB,GAAOwB,IAAKzE,KAAM,SAAUyD,EAAMtB,GACxD,OAAOqC,EAAS/D,KAAMgD,EAAMtB,EAAGsB,OAIjCnD,MAAO,WACN,OAAON,KAAKkE,UAAW5D,GAAMK,MAAOX,KAAM0E,aAG3CC,MAAO,WACN,OAAO3E,KAAK4E,GAAI,IAGjBC,KAAM,WACL,OAAO7E,KAAK4E,IAAK,IAGlBE,KAAM,WACL,OAAO9E,KAAKkE,UAAWjB,GAAO8B,KAAM/E,KAAM,SAAUgF,EAAO7C,GAC1D,OAASA,EAAI,GAAM,MAIrB8C,IAAK,WACJ,OAAOjF,KAAKkE,UAAWjB,GAAO8B,KAAM/E,KAAM,SAAUgF,EAAO7C,GAC1D,OAAOA,EAAI,MAIbyC,GAAI,SAAUzC,GACb,IAAI+C,EAAMlF,KAAKuD,OACd4B,GAAKhD,GAAMA,EAAI,EAAI+C,EAAM,GAC1B,OAAOlF,KAAKkE,UAAgB,GAALiB,GAAUA,EAAID,EAAM,CAAElF,KAAMmF,IAAQ,KAG5DC,IAAK,WACJ,OAAOpF,KAAKsE,YAActE,KAAK8D,eAKhClD,KAAMA,EACNyE,KAAMnF,GAAImF,KACVC,OAAQpF,GAAIoF,QAGbrC,GAAOsC,OAAStC,GAAOG,GAAGmC,OAAS,WAClC,IAAIC,EAAS9B,EAAM9B,EAAK6D,EAAMC,EAAaC,EAC1CC,EAASlB,UAAW,IAAO,GAC3BvC,EAAI,EACJoB,EAASmB,UAAUnB,OACnBsC,GAAO,EAsBR,IAnBuB,kBAAXD,IACXC,EAAOD,EAGPA,EAASlB,UAAWvC,IAAO,GAC3BA,KAIsB,iBAAXyD,GAAwBvE,EAAYuE,KAC/CA,EAAS,IAILzD,IAAMoB,IACVqC,EAAS5F,KACTmC,KAGOA,EAAIoB,EAAQpB,IAGnB,GAAqC,OAA9BqD,EAAUd,UAAWvC,IAG3B,IAAMuB,KAAQ8B,EACbC,EAAOD,EAAS9B,GAIF,cAATA,GAAwBkC,IAAWH,IAKnCI,GAAQJ,IAAUxC,GAAO6C,cAAeL,KAC1CC,EAAcK,MAAMC,QAASP,MAC/B7D,EAAMgE,EAAQlC,GAIbiC,EADID,IAAgBK,MAAMC,QAASpE,GAC3B,GACI8D,GAAgBzC,GAAO6C,cAAelE,GAG1CA,EAFA,GAIT8D,GAAc,EAGdE,EAAQlC,GAAST,GAAOsC,OAAQM,EAAMF,EAAOF,SAGzBQ,IAATR,IACXG,EAAQlC,GAAS+B,IAOrB,OAAOG,GAGR3C,GAAOsC,OAAQ,CAGdW,QAAS,UAAanD,EAAUoD,KAAKC,UAAWC,QAAS,MAAO,IAGhEC,SAAS,EAETC,MAAO,SAAUC,GAChB,MAAM,IAAI1G,MAAO0G,IAGlBC,KAAM,aAENX,cAAe,SAAUxE,GACxB,IAAIoF,EAAOC,EAIX,SAAMrF,GAAgC,oBAAzBP,EAASN,KAAMa,QAI5BoF,EAAQvG,EAAUmB,KASK,mBADvBqF,EAAO3F,GAAOP,KAAMiG,EAAO,gBAAmBA,EAAM5C,cACf5C,EAAWT,KAAMkG,KAAWxF,IAGlEyF,cAAe,SAAUtF,GACxB,IAAIoC,EAEJ,IAAMA,KAAQpC,EACb,OAAO,EAER,OAAO,GAKRuF,WAAY,SAAU7E,EAAMwD,EAAStD,GACpCH,EAASC,EAAM,CAAEH,MAAO2D,GAAWA,EAAQ3D,OAASK,IAGrDqC,KAAM,SAAUjD,EAAKkD,GACpB,IAAIjB,EAAQpB,EAAI,EAEhB,GAAKmB,EAAahC,IAEjB,IADAiC,EAASjC,EAAIiC,OACLpB,EAAIoB,EAAQpB,IACnB,IAAgD,IAA3CqC,EAAS/D,KAAMa,EAAKa,GAAKA,EAAGb,EAAKa,IACrC,WAIF,IAAMA,KAAKb,EACV,IAAgD,IAA3CkD,EAAS/D,KAAMa,EAAKa,GAAKA,EAAGb,EAAKa,IACrC,MAKH,OAAOb,GAKRiB,KAAM,SAAUkB,GACf,IAAIxB,EACHmC,EAAM,GACNjC,EAAI,EACJZ,EAAWkC,EAAKlC,SAEjB,IAAMA,EAGL,MAAUU,EAAOwB,EAAMtB,KAGtBiC,GAAOnB,GAAOV,KAAMN,GAGtB,OAAkB,IAAbV,GAA+B,KAAbA,EACfkC,EAAKqD,YAEK,IAAbvF,EACGkC,EAAKsD,gBAAgBD,YAEX,IAAbvF,GAA+B,IAAbA,EACfkC,EAAKuD,UAKN5C,GAIR6C,UAAW,SAAU/G,EAAKgH,GACzB,IAAI9C,EAAM8C,GAAW,GAarB,OAXY,MAAPhH,IACCoD,EAAalD,OAAQF,IACzB+C,GAAOoB,MAAOD,EACE,iBAARlE,EACN,CAAEA,GAAQA,GAGZU,EAAKH,KAAM2D,EAAKlE,IAIXkE,GAGR+C,QAAS,SAAU1D,EAAMvD,EAAKiC,GAC7B,OAAc,MAAPjC,GAAe,EAAIW,GAAQJ,KAAMP,EAAKuD,EAAMtB,IAGpDiF,SAAU,SAAU3D,GACnB,IAAI4D,EAAY5D,GAAQA,EAAK6D,aAC5BC,EAAU9D,IAAUA,EAAK+D,eAAiB/D,GAAOsD,gBAIlD,OAAQ/D,EAAYyE,KAAMJ,GAAaE,GAAWA,EAAQ/D,UAAY,SAKvEa,MAAO,SAAUM,EAAO+C,GAKvB,IAJA,IAAIxC,GAAOwC,EAAOnE,OACjB4B,EAAI,EACJhD,EAAIwC,EAAMpB,OAEH4B,EAAID,EAAKC,IAChBR,EAAOxC,KAAQuF,EAAQvC,GAKxB,OAFAR,EAAMpB,OAASpB,EAERwC,GAGRI,KAAM,SAAUZ,EAAOK,EAAUmD,GAShC,IARA,IACCC,EAAU,GACVzF,EAAI,EACJoB,EAASY,EAAMZ,OACfsE,GAAkBF,EAIXxF,EAAIoB,EAAQpB,KACAqC,EAAUL,EAAOhC,GAAKA,KAChB0F,GACxBD,EAAQhH,KAAMuD,EAAOhC,IAIvB,OAAOyF,GAIRnD,IAAK,SAAUN,EAAOK,EAAUsD,GAC/B,IAAIvE,EAAQwE,EACX5F,EAAI,EACJiC,EAAM,GAGP,GAAKd,EAAaa,GAEjB,IADAZ,EAASY,EAAMZ,OACPpB,EAAIoB,EAAQpB,IAGL,OAFd4F,EAAQvD,EAAUL,EAAOhC,GAAKA,EAAG2F,KAGhC1D,EAAIxD,KAAMmH,QAMZ,IAAM5F,KAAKgC,EAGI,OAFd4D,EAAQvD,EAAUL,EAAOhC,GAAKA,EAAG2F,KAGhC1D,EAAIxD,KAAMmH,GAMb,OAAOxH,EAAM6D,IAId4D,KAAM,EAIN5G,QAASA,KAGa,mBAAX6G,SACXhF,GAAOG,GAAI6E,OAAOC,UAAahI,GAAK+H,OAAOC,WAI5CjF,GAAOsB,KAAM,uEAAuE4D,MAAO,KAC1F,SAAUC,EAAI1E,GACb5C,EAAY,WAAa4C,EAAO,KAAQA,EAAKC,gBA0B/C,IAAI0E,GAAMnI,GAAImI,IAGVhD,GAAOnF,GAAImF,KAGXC,GAASpF,GAAIoF,OAGbgD,GAAa,sBAGbC,GAAW,IAAIC,OAClB,IAAMF,GAAa,8BAAgCA,GAAa,KAChE,KAODrF,GAAOwF,SAAW,SAAUC,EAAGC,GAC9B,IAAIC,EAAMD,GAAKA,EAAE/F,WAEjB,OAAO8F,IAAME,MAAWA,GAAwB,IAAjBA,EAAIrH,YAIlCmH,EAAED,SACDC,EAAED,SAAUG,GACZF,EAAEG,yBAA8D,GAAnCH,EAAEG,wBAAyBD,MAS3D,IAAIE,EAAa,+CAEjB,SAASC,EAAYC,EAAIC,GACxB,OAAKA,EAGQ,OAAPD,EACG,SAIDA,EAAG1I,MAAO,GAAI,GAAM,KAAO0I,EAAGE,WAAYF,EAAGzF,OAAS,GAAIxC,SAAU,IAAO,IAI5E,KAAOiI,EAGf/F,GAAOkG,eAAiB,SAAUC,GACjC,OAASA,EAAM,IAAK/C,QAASyC,EAAYC,IAM1C,IAAIM,GAAezJ,EAClB0J,GAAa1I,GAEd,WAEA,IAAIuB,EACHoH,EACAC,EACAC,EACAC,EAIA9J,EACAmH,EACA4C,EACAC,EACAhC,EAPAhH,EAAO0I,GAUPpD,EAAUjD,GAAOiD,QACjB2D,EAAU,EACVC,EAAO,EACPC,EAAaC,IACbC,EAAaD,IACbE,EAAgBF,IAChBG,EAAyBH,IACzBI,EAAY,SAAU1B,EAAGC,GAIxB,OAHKD,IAAMC,IACVe,GAAe,GAET,GAGRW,EAAW,6HAMXC,EAAa,0BAA4BhC,GACxC,0CAGDiC,EAAa,MAAQjC,GAAa,KAAOgC,EAAa,OAAShC,GAG9D,gBAAkBA,GAGlB,2DAA6DgC,EAAa,OAC1EhC,GAAa,OAEdkC,EAAU,KAAOF,EAAa,wFAOAC,EAAa,eAO3CE,EAAc,IAAIjC,OAAQF,GAAa,IAAK,KAE5CoC,EAAS,IAAIlC,OAAQ,IAAMF,GAAa,KAAOA,GAAa,KAC5DqC,EAAqB,IAAInC,OAAQ,IAAMF,GAAa,WAAaA,GAAa,IAC7EA,GAAa,KACdsC,EAAW,IAAIpC,OAAQF,GAAa,MAEpCuC,EAAU,IAAIrC,OAAQgC,GACtBM,EAAc,IAAItC,OAAQ,IAAM8B,EAAa,KAE7CS,EAAY,CACXC,GAAI,IAAIxC,OAAQ,MAAQ8B,EAAa,KACrCW,MAAO,IAAIzC,OAAQ,QAAU8B,EAAa,KAC1CY,IAAK,IAAI1C,OAAQ,KAAO8B,EAAa,SACrCa,KAAM,IAAI3C,OAAQ,IAAM+B,GACxBa,OAAQ,IAAI5C,OAAQ,IAAMgC,GAC1Ba,MAAO,IAAI7C,OACV,yDACCF,GAAa,+BAAiCA,GAAa,cAC3DA,GAAa,aAAeA,GAAa,SAAU,KACrDgD,KAAM,IAAI9C,OAAQ,OAAS6B,EAAW,KAAM,KAI5CkB,aAAc,IAAI/C,OAAQ,IAAMF,GAC/B,mDAAqDA,GACrD,mBAAqBA,GAAa,mBAAoB,MAGxDkD,EAAU,sCACVC,EAAU,SAGVC,EAAa,mCAEbC,EAAW,OAIXC,EAAY,IAAIpD,OAAQ,uBAAyBF,GAChD,uBAAwB,KACzBuD,EAAY,SAAUC,EAAQC,GAC7B,IAAIC,EAAO,KAAOF,EAAOxL,MAAO,GAAM,MAEtC,OAAKyL,IAUEC,EAAO,EACbC,OAAOC,aAAcF,EAAO,OAC5BC,OAAOC,aAAcF,GAAQ,GAAK,MAAe,KAAPA,EAAe,SAO3DG,EAAgB,WACfC,KAGDC,EAAqBC,EACpB,SAAU7I,GACT,OAAyB,IAAlBA,EAAK8I,UAAqB/I,GAAUC,EAAM,aAElD,CAAE+I,IAAK,aAAcC,KAAM,WAa7B,IACC7L,EAAKD,MACFT,GAAMI,GAAMG,KAAM4I,GAAaqD,YACjCrD,GAAaqD,YAMdxM,GAAKmJ,GAAaqD,WAAWnJ,QAAShC,SACrC,MAAQoL,GACT/L,EAAO,CACND,MAAO,SAAUiF,EAAQgH,GACxBtD,GAAW3I,MAAOiF,EAAQtF,GAAMG,KAAMmM,KAEvCnM,KAAM,SAAUmF,GACf0D,GAAW3I,MAAOiF,EAAQtF,GAAMG,KAAMiE,UAAW,MAKpD,SAASmI,EAAM3J,EAAUC,EAAS+D,EAAS4F,GAC1C,IAAIC,EAAG5K,EAAGsB,EAAMuJ,EAAKC,EAAOC,EAAQC,EACnCC,EAAajK,GAAWA,EAAQqE,cAGhCjG,EAAW4B,EAAUA,EAAQ5B,SAAW,EAKzC,GAHA2F,EAAUA,GAAW,GAGI,iBAAbhE,IAA0BA,GACxB,IAAb3B,GAA+B,IAAbA,GAA+B,KAAbA,EAEpC,OAAO2F,EAIR,IAAM4F,IACLV,EAAajJ,GACbA,EAAUA,GAAWvD,EAEhB+J,GAAiB,CAIrB,GAAkB,KAAbpI,IAAqB0L,EAAQvB,EAAW2B,KAAMnK,IAGlD,GAAO6J,EAAIE,EAAO,IAGjB,GAAkB,IAAb1L,EAAiB,CACrB,KAAOkC,EAAON,EAAQmK,eAAgBP,IASrC,OAAO7F,EALP,GAAKzD,EAAK8J,KAAOR,EAEhB,OADAnM,EAAKH,KAAMyG,EAASzD,GACbyD,OAWT,GAAKkG,IAAgB3J,EAAO2J,EAAWE,eAAgBP,KACtDF,EAAKpE,SAAUtF,EAASM,IACxBA,EAAK8J,KAAOR,EAGZ,OADAnM,EAAKH,KAAMyG,EAASzD,GACbyD,MAKH,CAAA,GAAK+F,EAAO,GAElB,OADArM,EAAKD,MAAOuG,EAAS/D,EAAQqK,qBAAsBtK,IAC5CgE,EAGD,IAAO6F,EAAIE,EAAO,KAAS9J,EAAQsK,uBAEzC,OADA7M,EAAKD,MAAOuG,EAAS/D,EAAQsK,uBAAwBV,IAC9C7F,EAKT,KAAMiD,EAAwBjH,EAAW,MACrC0G,GAAcA,EAAUnC,KAAMvE,IAAe,CAYhD,GAVAiK,EAAcjK,EACdkK,EAAajK,EASK,IAAb5B,IACFqJ,EAASnD,KAAMvE,IAAcyH,EAAmBlD,KAAMvE,IAAe,EAGvEkK,EAAazB,EAASlE,KAAMvE,IAAcwK,EAAavK,EAAQP,aAC9DO,IAQkBA,GAAY/B,GAAQuM,SAG/BX,EAAM7J,EAAQX,aAAc,OAClCwK,EAAM/J,GAAOkG,eAAgB6D,GAE7B7J,EAAQV,aAAc,KAAQuK,EAAM9G,IAMtC/D,GADA+K,EAASU,EAAU1K,IACRK,OACX,MAAQpB,IACP+K,EAAQ/K,IAAQ6K,EAAM,IAAMA,EAAM,UAAa,IAC9Ca,EAAYX,EAAQ/K,IAEtBgL,EAAcD,EAAOY,KAAM,KAG5B,IAIC,OAHAlN,EAAKD,MAAOuG,EACXkG,EAAWW,iBAAkBZ,IAEvBjG,EACN,MAAQ8G,GACT7D,EAAwBjH,GAAU,GACjC,QACI8J,IAAQ9G,GACZ/C,EAAQ8K,gBAAiB,QAQ9B,OAAOC,GAAQhL,EAASmD,QAASkC,GAAU,MAAQpF,EAAS+D,EAAS4F,GAStE,SAAS9C,IACR,IAAImE,EAAO,GAaX,OAXA,SAASC,EAAOC,EAAKtG,GASpB,OALKoG,EAAKvN,KAAMyN,EAAM,KAAQ9E,EAAK+E,oBAG3BF,EAAOD,EAAKI,SAEXH,EAAOC,EAAM,KAAQtG,GAShC,SAASyG,EAAcpL,GAEtB,OADAA,EAAI8C,IAAY,EACT9C,EAOR,SAASqL,EAAQrL,GAChB,IAAIsL,EAAK9O,EAAS0C,cAAe,YAEjC,IACC,QAASc,EAAIsL,GACZ,MAAQ/B,GACT,OAAO,EACN,QAGI+B,EAAG9L,YACP8L,EAAG9L,WAAWC,YAAa6L,GAI5BA,EAAK,MAQP,SAASC,EAAmBhN,GAC3B,OAAO,SAAU8B,GAChB,OAAOD,GAAUC,EAAM,UAAaA,EAAK9B,OAASA,GAQpD,SAASiN,EAAoBjN,GAC5B,OAAO,SAAU8B,GAChB,OAASD,GAAUC,EAAM,UAAaD,GAAUC,EAAM,YACrDA,EAAK9B,OAASA,GAQjB,SAASkN,EAAsBtC,GAG9B,OAAO,SAAU9I,GAKhB,MAAK,SAAUA,EASTA,EAAKb,aAAgC,IAAlBa,EAAK8I,SAGvB,UAAW9I,EACV,UAAWA,EAAKb,WACba,EAAKb,WAAW2J,WAAaA,EAE7B9I,EAAK8I,WAAaA,EAMpB9I,EAAKqL,aAAevC,GAG1B9I,EAAKqL,cAAgBvC,GACpBF,EAAoB5I,KAAW8I,EAG3B9I,EAAK8I,WAAaA,EAKd,UAAW9I,GACfA,EAAK8I,WAAaA,GAY5B,SAASwC,EAAwB3L,GAChC,OAAOoL,EAAc,SAAUQ,GAE9B,OADAA,GAAYA,EACLR,EAAc,SAAU1B,EAAMlF,GACpC,IAAIzC,EACH8J,EAAe7L,EAAI,GAAI0J,EAAKvJ,OAAQyL,GACpC7M,EAAI8M,EAAa1L,OAGlB,MAAQpB,IACF2K,EAAQ3H,EAAI8J,EAAc9M,MAC9B2K,EAAM3H,KAASyC,EAASzC,GAAM2H,EAAM3H,SAYzC,SAASuI,EAAavK,GACrB,OAAOA,GAAmD,oBAAjCA,EAAQqK,sBAAwCrK,EAQ1E,SAASiJ,EAAanK,GACrB,IAAIiN,EACHhN,EAAMD,EAAOA,EAAKuF,eAAiBvF,EAAOoH,GAO3C,OAAKnH,GAAOtC,GAA6B,IAAjBsC,EAAIX,UAAmBW,EAAI6E,kBAMnDA,GADAnH,EAAWsC,GACgB6E,gBAC3B4C,GAAkB1G,GAAOmE,SAAUxH,GAInCgI,EAAUb,EAAgBa,SACzBb,EAAgBoI,uBAChBpI,EAAgBqI,kBAOZrI,EAAgBqI,mBAMpB/F,IAAgBzJ,IACdsP,EAAYtP,EAASyP,cAAiBH,EAAUI,MAAQJ,GAG1DA,EAAUK,iBAAkB,SAAUpD,GAOvC/K,GAAQoO,QAAUf,EAAQ,SAAUC,GAEnC,OADA3H,EAAgBpE,YAAa+L,GAAKnB,GAAKtK,GAAOiD,SACtCtG,EAAS6P,oBACf7P,EAAS6P,kBAAmBxM,GAAOiD,SAAU3C,SAMhDnC,GAAQsO,kBAAoBjB,EAAQ,SAAUC,GAC7C,OAAO9G,EAAQnH,KAAMiO,EAAI,OAK1BtN,GAAQuM,MAAQc,EAAQ,WACvB,OAAO7O,EAASmO,iBAAkB,YAYnC3M,GAAQuO,OAASlB,EAAQ,WACxB,IAEC,OADA7O,EAASgQ,cAAe,oBACjB,EACN,MAAQjD,GACT,OAAO,KAKJvL,GAAQoO,SACZjG,EAAKsG,OAAO7E,GAAK,SAAUuC,GAC1B,IAAIuC,EAASvC,EAAGlH,QAASuF,EAAWC,GACpC,OAAO,SAAUpI,GAChB,OAAOA,EAAKjB,aAAc,QAAWsN,IAGvCvG,EAAKsD,KAAK7B,GAAK,SAAUuC,EAAIpK,GAC5B,GAAuC,oBAA3BA,EAAQmK,gBAAkC3D,EAAiB,CACtE,IAAIlG,EAAON,EAAQmK,eAAgBC,GACnC,OAAO9J,EAAO,CAAEA,GAAS,OAI3B8F,EAAKsG,OAAO7E,GAAM,SAAUuC,GAC3B,IAAIuC,EAASvC,EAAGlH,QAASuF,EAAWC,GACpC,OAAO,SAAUpI,GAChB,IAAIxB,EAAwC,oBAA1BwB,EAAKsM,kBACtBtM,EAAKsM,iBAAkB,MACxB,OAAO9N,GAAQA,EAAK8F,QAAU+H,IAMhCvG,EAAKsD,KAAK7B,GAAK,SAAUuC,EAAIpK,GAC5B,GAAuC,oBAA3BA,EAAQmK,gBAAkC3D,EAAiB,CACtE,IAAI1H,EAAME,EAAGgC,EACZV,EAAON,EAAQmK,eAAgBC,GAEhC,GAAK9J,EAAO,CAIX,IADAxB,EAAOwB,EAAKsM,iBAAkB,QACjB9N,EAAK8F,QAAUwF,EAC3B,MAAO,CAAE9J,GAIVU,EAAQhB,EAAQsM,kBAAmBlC,GACnCpL,EAAI,EACJ,MAAUsB,EAAOU,EAAOhC,KAEvB,IADAF,EAAOwB,EAAKsM,iBAAkB,QACjB9N,EAAK8F,QAAUwF,EAC3B,MAAO,CAAE9J,GAKZ,MAAO,MAMV8F,EAAKsD,KAAK3B,IAAM,SAAU8E,EAAK7M,GAC9B,MAA6C,oBAAjCA,EAAQqK,qBACZrK,EAAQqK,qBAAsBwC,GAI9B7M,EAAQ4K,iBAAkBiC,IAKnCzG,EAAKsD,KAAK5B,MAAQ,SAAUgF,EAAW9M,GACtC,GAA+C,oBAAnCA,EAAQsK,wBAA0C9D,EAC7D,OAAOxG,EAAQsK,uBAAwBwC,IASzCrG,EAAY,GAIZ6E,EAAQ,SAAUC,GAEjB,IAAIwB,EAEJnJ,EAAgBpE,YAAa+L,GAAKyB,UACjC,UAAYjK,EAAU,iDACLA,EAAU,oEAKtBwI,EAAGX,iBAAkB,cAAexK,QACzCqG,EAAUhJ,KAAM,MAAQ0H,GAAa,aAAe+B,EAAW,KAI1DqE,EAAGX,iBAAkB,QAAU7H,EAAU,MAAO3C,QACrDqG,EAAUhJ,KAAM,MAMX8N,EAAGX,iBAAkB,KAAO7H,EAAU,MAAO3C,QAClDqG,EAAUhJ,KAAM,YAOX8N,EAAGX,iBAAkB,YAAaxK,QACvCqG,EAAUhJ,KAAM,aAKjBsP,EAAQtQ,EAAS0C,cAAe,UAC1BG,aAAc,OAAQ,UAC5BiM,EAAG/L,YAAauN,GAAQzN,aAAc,OAAQ,KAQ9CsE,EAAgBpE,YAAa+L,GAAKnC,UAAW,EACM,IAA9CmC,EAAGX,iBAAkB,aAAcxK,QACvCqG,EAAUhJ,KAAM,WAAY,cAQ7BsP,EAAQtQ,EAAS0C,cAAe,UAC1BG,aAAc,OAAQ,IAC5BiM,EAAG/L,YAAauN,GACVxB,EAAGX,iBAAkB,aAAcxK,QACxCqG,EAAUhJ,KAAM,MAAQ0H,GAAa,QAAUA,GAAa,KAC3DA,GAAa,kBAIVlH,GAAQuO,QAQb/F,EAAUhJ,KAAM,QAGjBgJ,EAAYA,EAAUrG,QAAU,IAAIiF,OAAQoB,EAAUkE,KAAM,MAM5D1D,EAAY,SAAU1B,EAAGC,GAGxB,GAAKD,IAAMC,EAEV,OADAe,GAAe,EACR,EAIR,IAAI0G,GAAW1H,EAAEG,yBAA2BF,EAAEE,wBAC9C,OAAKuH,IAgBU,GAPfA,GAAY1H,EAAElB,eAAiBkB,KAASC,EAAEnB,eAAiBmB,GAC1DD,EAAEG,wBAAyBF,GAG3B,KAIGvH,GAAQiP,cAAgB1H,EAAEE,wBAAyBH,KAAQ0H,EAOzD1H,IAAM9I,GAAY8I,EAAElB,eAAiB6B,IACzCwD,EAAKpE,SAAUY,GAAcX,IACrB,EAOJC,IAAM/I,GAAY+I,EAAEnB,eAAiB6B,IACzCwD,EAAKpE,SAAUY,GAAcV,GACtB,EAIDc,EACJ5I,GAAQJ,KAAMgJ,EAAWf,GAAM7H,GAAQJ,KAAMgJ,EAAWd,GAC1D,EAGe,EAAVyH,GAAe,EAAI,KAGpBxQ,EAqpBR,IAAMuC,KAlpBN0K,EAAKjF,QAAU,SAAU0I,EAAMC,GAC9B,OAAO1D,EAAMyD,EAAM,KAAM,KAAMC,IAGhC1D,EAAK2D,gBAAkB,SAAU/M,EAAM6M,GAGtC,GAFAlE,EAAa3I,GAERkG,IACHQ,EAAwBmG,EAAO,QAC7B1G,IAAcA,EAAUnC,KAAM6I,IAEjC,IACC,IAAIlM,EAAMwD,EAAQnH,KAAMgD,EAAM6M,GAG9B,GAAKlM,GAAOhD,GAAQsO,mBAIlBjM,EAAK7D,UAAuC,KAA3B6D,EAAK7D,SAAS2B,SAChC,OAAO6C,EAEP,MAAQuI,GACTxC,EAAwBmG,GAAM,GAIhC,OAAuD,EAAhDzD,EAAMyD,EAAM1Q,EAAU,KAAM,CAAE6D,IAASF,QAG/CsJ,EAAKpE,SAAW,SAAUtF,EAASM,GAUlC,OAHON,EAAQqE,eAAiBrE,IAAavD,GAC5CwM,EAAajJ,GAEPF,GAAOwF,SAAUtF,EAASM,IAIlCoJ,EAAK4D,KAAO,SAAUhN,EAAMC,IAOpBD,EAAK+D,eAAiB/D,IAAU7D,GACtCwM,EAAa3I,GAGd,IAAIL,EAAKmG,EAAKmH,WAAYhN,EAAKC,eAG9BvB,EAAMgB,GAAMpC,GAAOP,KAAM8I,EAAKmH,WAAYhN,EAAKC,eAC9CP,EAAIK,EAAMC,GAAOiG,QACjB1D,EAEF,YAAaA,IAAR7D,EACGA,EAGDqB,EAAKjB,aAAckB,IAG3BmJ,EAAKtG,MAAQ,SAAUC,GACtB,MAAM,IAAI1G,MAAO,0CAA4C0G,IAO9DvD,GAAO0N,WAAa,SAAUzJ,GAC7B,IAAIzD,EACHmN,EAAa,GACbzL,EAAI,EACJhD,EAAI,EAWL,GAJAuH,GAAgBtI,GAAQyP,WACxBpH,GAAarI,GAAQyP,YAAcvQ,GAAMG,KAAMyG,EAAS,GACxD7B,GAAK5E,KAAMyG,EAASkD,GAEfV,EAAe,CACnB,MAAUjG,EAAOyD,EAAS/E,KACpBsB,IAASyD,EAAS/E,KACtBgD,EAAIyL,EAAWhQ,KAAMuB,IAGvB,MAAQgD,IACPG,GAAO7E,KAAMyG,EAAS0J,EAAYzL,GAAK,GAQzC,OAFAsE,EAAY,KAELvC,GAGRjE,GAAOG,GAAGuN,WAAa,WACtB,OAAO3Q,KAAKkE,UAAWjB,GAAO0N,WAAYrQ,GAAMK,MAAOX,UAGxDuJ,EAAOtG,GAAOqN,KAAO,CAGpBhC,YAAa,GAEbwC,aAActC,EAEdvB,MAAOlC,EAEP2F,WAAY,GAEZ7D,KAAM,GAENkE,SAAU,CACTC,IAAK,CAAExE,IAAK,aAAc7H,OAAO,GACjCsM,IAAK,CAAEzE,IAAK,cACZ0E,IAAK,CAAE1E,IAAK,kBAAmB7H,OAAO,GACtCwM,IAAK,CAAE3E,IAAK,oBAGb4E,UAAW,CACVjG,KAAM,SAAU8B,GAWf,OAVAA,EAAO,GAAMA,EAAO,GAAI5G,QAASuF,EAAWC,GAG5CoB,EAAO,IAAQA,EAAO,IAAOA,EAAO,IAAOA,EAAO,IAAO,IACvD5G,QAASuF,EAAWC,GAEF,OAAfoB,EAAO,KACXA,EAAO,GAAM,IAAMA,EAAO,GAAM,KAG1BA,EAAM3M,MAAO,EAAG,IAGxB+K,MAAO,SAAU4B,GAkChB,OAtBAA,EAAO,GAAMA,EAAO,GAAItJ,cAEU,QAA7BsJ,EAAO,GAAI3M,MAAO,EAAG,IAGnB2M,EAAO,IACZJ,EAAKtG,MAAO0G,EAAO,IAKpBA,EAAO,KAASA,EAAO,GACtBA,EAAO,IAAQA,EAAO,IAAO,GAC7B,GAAqB,SAAfA,EAAO,IAAiC,QAAfA,EAAO,KAEvCA,EAAO,KAAWA,EAAO,GAAMA,EAAO,IAAwB,QAAfA,EAAO,KAG3CA,EAAO,IAClBJ,EAAKtG,MAAO0G,EAAO,IAGbA,GAGR7B,OAAQ,SAAU6B,GACjB,IAAIoE,EACHC,GAAYrE,EAAO,IAAOA,EAAO,GAElC,OAAKlC,EAAUM,MAAM5D,KAAMwF,EAAO,IAC1B,MAIHA,EAAO,GACXA,EAAO,GAAMA,EAAO,IAAOA,EAAO,IAAO,GAG9BqE,GAAYzG,EAAQpD,KAAM6J,KAGnCD,EAASzD,EAAU0D,GAAU,MAG7BD,EAASC,EAASzQ,QAAS,IAAKyQ,EAAS/N,OAAS8N,GAAWC,EAAS/N,UAGxE0J,EAAO,GAAMA,EAAO,GAAI3M,MAAO,EAAG+Q,GAClCpE,EAAO,GAAMqE,EAAShR,MAAO,EAAG+Q,IAI1BpE,EAAM3M,MAAO,EAAG,MAIzBuP,OAAQ,CAEP3E,IAAK,SAAUqG,GACd,IAAIC,EAAmBD,EAAiBlL,QAASuF,EAAWC,GAAYlI,cACxE,MAA4B,MAArB4N,EACN,WACC,OAAO,GAER,SAAU9N,GACT,OAAOD,GAAUC,EAAM+N,KAI1BvG,MAAO,SAAUgF,GAChB,IAAIwB,EAAU1H,EAAYkG,EAAY,KAEtC,OAAOwB,IACJA,EAAU,IAAIjJ,OAAQ,MAAQF,GAAa,IAAM2H,EAClD,IAAM3H,GAAa,SACpByB,EAAYkG,EAAW,SAAUxM,GAChC,OAAOgO,EAAQhK,KACY,iBAAnBhE,EAAKwM,WAA0BxM,EAAKwM,WACb,oBAAtBxM,EAAKjB,cACXiB,EAAKjB,aAAc,UACpB,OAKL2I,KAAM,SAAUzH,EAAMgO,EAAUC,GAC/B,OAAO,SAAUlO,GAChB,IAAImO,EAAS/E,EAAK4D,KAAMhN,EAAMC,GAE9B,OAAe,MAAVkO,EACgB,OAAbF,GAEFA,IAINE,GAAU,GAEQ,MAAbF,EACGE,IAAWD,EAED,OAAbD,EACGE,IAAWD,EAED,OAAbD,EACGC,GAAqC,IAA5BC,EAAO/Q,QAAS8Q,GAEf,OAAbD,EACGC,IAAoC,EAA3BC,EAAO/Q,QAAS8Q,GAEf,OAAbD,EACGC,GAASC,EAAOtR,OAAQqR,EAAMpO,UAAaoO,EAEjC,OAAbD,GAEkB,GADb,IAAME,EAAOvL,QAASoE,EAAa,KAAQ,KAClD5J,QAAS8Q,GAEM,OAAbD,IACGE,IAAWD,GAASC,EAAOtR,MAAO,EAAGqR,EAAMpO,OAAS,KAAQoO,EAAQ,QAO9EtG,MAAO,SAAU1J,EAAMkQ,EAAMC,EAAWnN,EAAOE,GAC9C,IAAIkN,EAAgC,QAAvBpQ,EAAKrB,MAAO,EAAG,GAC3B0R,EAA+B,SAArBrQ,EAAKrB,OAAQ,GACvB2R,EAAkB,YAATJ,EAEV,OAAiB,IAAVlN,GAAwB,IAATE,EAGrB,SAAUpB,GACT,QAASA,EAAKb,YAGf,SAAUa,EAAMyO,EAAUC,GACzB,IAAI/D,EAAOgE,EAAYnQ,EAAMoQ,EAAWC,EACvC9F,EAAMuF,IAAWC,EAAU,cAAgB,kBAC3CO,EAAS9O,EAAKb,WACdc,EAAOuO,GAAUxO,EAAKD,SAASG,cAC/B6O,GAAYL,IAAQF,EACpBQ,GAAO,EAER,GAAKF,EAAS,CAGb,GAAKR,EAAS,CACb,MAAQvF,EAAM,CACbvK,EAAOwB,EACP,MAAUxB,EAAOA,EAAMuK,GACtB,GAAKyF,EACJzO,GAAUvB,EAAMyB,GACE,IAAlBzB,EAAKV,SAEL,OAAO,EAKT+Q,EAAQ9F,EAAe,SAAT7K,IAAoB2Q,GAAS,cAE5C,OAAO,EAMR,GAHAA,EAAQ,CAAEN,EAAUO,EAAOG,WAAaH,EAAOI,WAG1CX,GAAWQ,EAAW,CAM1BC,GADAJ,GADAjE,GADAgE,EAAaG,EAAQrM,KAAeqM,EAAQrM,GAAY,KACpCvE,IAAU,IACX,KAAQkI,GAAWuE,EAAO,KACzBA,EAAO,GAC3BnM,EAAOoQ,GAAaE,EAAO7F,WAAY2F,GAEvC,MAAUpQ,IAASoQ,GAAapQ,GAAQA,EAAMuK,KAG3CiG,EAAOJ,EAAY,IAAOC,EAAMjK,MAGlC,GAAuB,IAAlBpG,EAAKV,YAAoBkR,GAAQxQ,IAASwB,EAAO,CACrD2O,EAAYzQ,GAAS,CAAEkI,EAASwI,EAAWI,GAC3C,YAgBF,GATKD,IAIJC,EADAJ,GADAjE,GADAgE,EAAa3O,EAAMyC,KAAezC,EAAMyC,GAAY,KAChCvE,IAAU,IACX,KAAQkI,GAAWuE,EAAO,KAMhC,IAATqE,EAGJ,MAAUxQ,IAASoQ,GAAapQ,GAAQA,EAAMuK,KAC3CiG,EAAOJ,EAAY,IAAOC,EAAMjK,MAElC,IAAO4J,EACNzO,GAAUvB,EAAMyB,GACE,IAAlBzB,EAAKV,aACHkR,IAGGD,KACJJ,EAAanQ,EAAMiE,KAChBjE,EAAMiE,GAAY,KACTvE,GAAS,CAAEkI,EAAS4I,IAG5BxQ,IAASwB,GACb,MASL,OADAgP,GAAQ5N,KACQF,GAAW8N,EAAO9N,GAAU,GAAqB,GAAhB8N,EAAO9N,KAK5DyG,OAAQ,SAAUwH,EAAQ5D,GAMzB,IAAI6D,EACHzP,EAAKmG,EAAKiB,QAASoI,IAAYrJ,EAAKuJ,WAAYF,EAAOjP,gBACtDkJ,EAAKtG,MAAO,uBAAyBqM,GAKvC,OAAKxP,EAAI8C,GACD9C,EAAI4L,GAIK,EAAZ5L,EAAGG,QACPsP,EAAO,CAAED,EAAQA,EAAQ,GAAI5D,GACtBzF,EAAKuJ,WAAW7R,eAAgB2R,EAAOjP,eAC7C6K,EAAc,SAAU1B,EAAMlF,GAC7B,IAAImL,EACHC,EAAU5P,EAAI0J,EAAMkC,GACpB7M,EAAI6Q,EAAQzP,OACb,MAAQpB,IAEP2K,EADAiG,EAAMlS,GAAQJ,KAAMqM,EAAMkG,EAAS7Q,OAClByF,EAASmL,GAAQC,EAAS7Q,MAG7C,SAAUsB,GACT,OAAOL,EAAIK,EAAM,EAAGoP,KAIhBzP,IAIToH,QAAS,CAGRyI,IAAKzE,EAAc,SAAUtL,GAK5B,IAAIgN,EAAQ,GACXhJ,EAAU,GACVgM,EAAUC,GAASjQ,EAASmD,QAASkC,GAAU,OAEhD,OAAO2K,EAAShN,GACfsI,EAAc,SAAU1B,EAAMlF,EAASsK,EAAUC,GAChD,IAAI1O,EACH2P,EAAYF,EAASpG,EAAM,KAAMqF,EAAK,IACtChQ,EAAI2K,EAAKvJ,OAGV,MAAQpB,KACAsB,EAAO2P,EAAWjR,MACxB2K,EAAM3K,KAASyF,EAASzF,GAAMsB,MAIjC,SAAUA,EAAMyO,EAAUC,GAOzB,OANAjC,EAAO,GAAMzM,EACbyP,EAAShD,EAAO,KAAMiC,EAAKjL,GAI3BgJ,EAAO,GAAM,MACLhJ,EAAQmB,SAInBgL,IAAK7E,EAAc,SAAUtL,GAC5B,OAAO,SAAUO,GAChB,OAAuC,EAAhCoJ,EAAM3J,EAAUO,GAAOF,UAIhCkF,SAAU+F,EAAc,SAAUjM,GAEjC,OADAA,EAAOA,EAAK8D,QAASuF,EAAWC,GACzB,SAAUpI,GAChB,OAAsE,GAA7DA,EAAKqD,aAAe7D,GAAOV,KAAMkB,IAAS5C,QAAS0B,MAW9D+Q,KAAM9E,EAAc,SAAU8E,GAO7B,OAJMxI,EAAYrD,KAAM6L,GAAQ,KAC/BzG,EAAKtG,MAAO,qBAAuB+M,GAEpCA,EAAOA,EAAKjN,QAASuF,EAAWC,GAAYlI,cACrC,SAAUF,GAChB,IAAI8P,EACJ,GACC,GAAOA,EAAW5J,EACjBlG,EAAK6P,KACL7P,EAAKjB,aAAc,aAAgBiB,EAAKjB,aAAc,QAGtD,OADA+Q,EAAWA,EAAS5P,iBACA2P,GAA2C,IAAnCC,EAAS1S,QAASyS,EAAO,YAE3C7P,EAAOA,EAAKb,aAAkC,IAAlBa,EAAKlC,UAC7C,OAAO,KAKTqE,OAAQ,SAAUnC,GACjB,IAAI+P,EAAOzT,GAAO0T,UAAY1T,GAAO0T,SAASD,KAC9C,OAAOA,GAAQA,EAAKlT,MAAO,KAAQmD,EAAK8J,IAGzCmG,KAAM,SAAUjQ,GACf,OAAOA,IAASsD,GAGjB4M,MAAO,SAAUlQ,GAChB,OAAOA,IA5oCV,WACC,IACC,OAAO7D,EAASgU,cACf,MAAQC,KAyoCQC,IACflU,EAASmU,eACLtQ,EAAK9B,MAAQ8B,EAAKuQ,OAASvQ,EAAKwQ,WAItCC,QAASrF,GAAsB,GAC/BtC,SAAUsC,GAAsB,GAEhCsF,QAAS,SAAU1Q,GAIlB,OAASD,GAAUC,EAAM,YAAeA,EAAK0Q,SAC1C3Q,GAAUC,EAAM,aAAgBA,EAAK2Q,UAGzCA,SAAU,SAAU3Q,GAWnB,OALKA,EAAKb,YAETa,EAAKb,WAAWyR,eAGQ,IAAlB5Q,EAAK2Q,UAIbE,MAAO,SAAU7Q,GAMhB,IAAMA,EAAOA,EAAKiP,WAAYjP,EAAMA,EAAOA,EAAK8Q,YAC/C,GAAK9Q,EAAKlC,SAAW,EACpB,OAAO,EAGT,OAAO,GAGRgR,OAAQ,SAAU9O,GACjB,OAAQ8F,EAAKiB,QAAQ8J,MAAO7Q,IAI7B+Q,OAAQ,SAAU/Q,GACjB,OAAOgI,EAAQhE,KAAMhE,EAAKD,WAG3B0M,MAAO,SAAUzM,GAChB,OAAO+H,EAAQ/D,KAAMhE,EAAKD,WAG3BiR,OAAQ,SAAUhR,GACjB,OAAOD,GAAUC,EAAM,UAA2B,WAAdA,EAAK9B,MACxC6B,GAAUC,EAAM,WAGlBlB,KAAM,SAAUkB,GACf,IAAIgN,EACJ,OAAOjN,GAAUC,EAAM,UAA2B,SAAdA,EAAK9B,OAKI,OAAxC8O,EAAOhN,EAAKjB,aAAc,UACN,SAAvBiO,EAAK9M,gBAIRgB,MAAOoK,EAAwB,WAC9B,MAAO,CAAE,KAGVlK,KAAMkK,EAAwB,SAAU2F,EAAenR,GACtD,MAAO,CAAEA,EAAS,KAGnBqB,GAAImK,EAAwB,SAAU2F,EAAenR,EAAQyL,GAC5D,MAAO,CAAEA,EAAW,EAAIA,EAAWzL,EAASyL,KAG7ClK,KAAMiK,EAAwB,SAAUE,EAAc1L,GAErD,IADA,IAAIpB,EAAI,EACAA,EAAIoB,EAAQpB,GAAK,EACxB8M,EAAarO,KAAMuB,GAEpB,OAAO8M,IAGRhK,IAAK8J,EAAwB,SAAUE,EAAc1L,GAEpD,IADA,IAAIpB,EAAI,EACAA,EAAIoB,EAAQpB,GAAK,EACxB8M,EAAarO,KAAMuB,GAEpB,OAAO8M,IAGR0F,GAAI5F,EAAwB,SAAUE,EAAc1L,EAAQyL,GAC3D,IAAI7M,EAUJ,IAPCA,EADI6M,EAAW,EACXA,EAAWzL,EACOA,EAAXyL,EACPzL,EAEAyL,EAGU,KAAL7M,GACT8M,EAAarO,KAAMuB,GAEpB,OAAO8M,IAGR2F,GAAI7F,EAAwB,SAAUE,EAAc1L,EAAQyL,GAE3D,IADA,IAAI7M,EAAI6M,EAAW,EAAIA,EAAWzL,EAASyL,IACjC7M,EAAIoB,GACb0L,EAAarO,KAAMuB,GAEpB,OAAO8M,OAKLzE,QAAQqK,IAAMtL,EAAKiB,QAAQ5F,GAGrB,CAAEkQ,OAAO,EAAMC,UAAU,EAAMC,MAAM,EAAMC,UAAU,EAAMC,OAAO,GAC5E3L,EAAKiB,QAASrI,GAAMwM,EAAmBxM,GAExC,IAAMA,IAAK,CAAEgT,QAAQ,EAAMC,OAAO,GACjC7L,EAAKiB,QAASrI,GAAMyM,EAAoBzM,GAIzC,SAAS2Q,KAIT,SAASlF,EAAU1K,EAAUmS,GAC5B,IAAIrC,EAAS/F,EAAOqI,EAAQ3T,EAC3B4T,EAAOrI,EAAQsI,EACfC,EAASxL,EAAY/G,EAAW,KAEjC,GAAKuS,EACJ,OAAOJ,EAAY,EAAII,EAAOnV,MAAO,GAGtCiV,EAAQrS,EACRgK,EAAS,GACTsI,EAAajM,EAAK6H,UAElB,MAAQmE,EAAQ,CA2Bf,IAAM5T,KAxBAqR,KAAa/F,EAAQvC,EAAO2C,KAAMkI,MAClCtI,IAGJsI,EAAQA,EAAMjV,MAAO2M,EAAO,GAAI1J,SAAYgS,GAE7CrI,EAAOtM,KAAQ0U,EAAS,KAGzBtC,GAAU,GAGH/F,EAAQtC,EAAmB0C,KAAMkI,MACvCvC,EAAU/F,EAAMsB,QAChB+G,EAAO1U,KAAM,CACZmH,MAAOiL,EAGPrR,KAAMsL,EAAO,GAAI5G,QAASkC,GAAU,OAErCgN,EAAQA,EAAMjV,MAAO0S,EAAQzP,SAIhBgG,EAAKsG,SACX5C,EAAQlC,EAAWpJ,GAAO0L,KAAMkI,KAAgBC,EAAY7T,MAChEsL,EAAQuI,EAAY7T,GAAQsL,MAC9B+F,EAAU/F,EAAMsB,QAChB+G,EAAO1U,KAAM,CACZmH,MAAOiL,EACPrR,KAAMA,EACNiG,QAASqF,IAEVsI,EAAQA,EAAMjV,MAAO0S,EAAQzP,SAI/B,IAAMyP,EACL,MAOF,OAAKqC,EACGE,EAAMhS,OAGPgS,EACN1I,EAAKtG,MAAOrD,GAGZ+G,EAAY/G,EAAUgK,GAAS5M,MAAO,GAGxC,SAASuN,EAAYyH,GAIpB,IAHA,IAAInT,EAAI,EACP+C,EAAMoQ,EAAO/R,OACbL,EAAW,GACJf,EAAI+C,EAAK/C,IAChBe,GAAYoS,EAAQnT,GAAI4F,MAEzB,OAAO7E,EAGR,SAASoJ,EAAe4G,EAASwC,EAAYC,GAC5C,IAAInJ,EAAMkJ,EAAWlJ,IACpBoJ,EAAOF,EAAWjJ,KAClB4B,EAAMuH,GAAQpJ,EACdqJ,EAAmBF,GAAgB,eAARtH,EAC3ByH,EAAWhM,IAEZ,OAAO4L,EAAW/Q,MAGjB,SAAUlB,EAAMN,EAASgP,GACxB,MAAU1O,EAAOA,EAAM+I,GACtB,GAAuB,IAAlB/I,EAAKlC,UAAkBsU,EAC3B,OAAO3C,EAASzP,EAAMN,EAASgP,GAGjC,OAAO,GAIR,SAAU1O,EAAMN,EAASgP,GACxB,IAAI4D,EAAU3D,EACb4D,EAAW,CAAEnM,EAASiM,GAGvB,GAAK3D,GACJ,MAAU1O,EAAOA,EAAM+I,GACtB,IAAuB,IAAlB/I,EAAKlC,UAAkBsU,IACtB3C,EAASzP,EAAMN,EAASgP,GAC5B,OAAO,OAKV,MAAU1O,EAAOA,EAAM+I,GACtB,GAAuB,IAAlB/I,EAAKlC,UAAkBsU,EAG3B,GAFAzD,EAAa3O,EAAMyC,KAAezC,EAAMyC,GAAY,IAE/C0P,GAAQpS,GAAUC,EAAMmS,GAC5BnS,EAAOA,EAAM+I,IAAS/I,MAChB,CAAA,IAAOsS,EAAW3D,EAAY/D,KACpC0H,EAAU,KAAQlM,GAAWkM,EAAU,KAAQD,EAG/C,OAASE,EAAU,GAAMD,EAAU,GAOnC,IAHA3D,EAAY/D,GAAQ2H,GAGH,GAAM9C,EAASzP,EAAMN,EAASgP,GAC9C,OAAO,EAMZ,OAAO,GAIV,SAAS8D,EAAgBC,GACxB,OAAyB,EAAlBA,EAAS3S,OACf,SAAUE,EAAMN,EAASgP,GACxB,IAAIhQ,EAAI+T,EAAS3S,OACjB,MAAQpB,IACP,IAAM+T,EAAU/T,GAAKsB,EAAMN,EAASgP,GACnC,OAAO,EAGT,OAAO,GAER+D,EAAU,GAYZ,SAASC,EAAU/C,EAAW3O,EAAKoL,EAAQ1M,EAASgP,GAOnD,IANA,IAAI1O,EACH2S,EAAe,GACfjU,EAAI,EACJ+C,EAAMkO,EAAU7P,OAChB8S,EAAgB,MAAP5R,EAEFtC,EAAI+C,EAAK/C,KACTsB,EAAO2P,EAAWjR,MAClB0N,IAAUA,EAAQpM,EAAMN,EAASgP,KACtCiE,EAAaxV,KAAM6C,GACd4S,GACJ5R,EAAI7D,KAAMuB,KAMd,OAAOiU,EAGR,SAASE,GAAYlF,EAAWlO,EAAUgQ,EAASqD,EAAYC,EAAYC,GAO1E,OANKF,IAAeA,EAAYrQ,KAC/BqQ,EAAaD,GAAYC,IAErBC,IAAeA,EAAYtQ,KAC/BsQ,EAAaF,GAAYE,EAAYC,IAE/BjI,EAAc,SAAU1B,EAAM5F,EAAS/D,EAASgP,GACtD,IAAIuE,EAAMvU,EAAGsB,EAAMkT,EAClBC,EAAS,GACTC,EAAU,GACVC,EAAc5P,EAAQ3D,OAGtBY,EAAQ2I,GA5CX,SAA2B5J,EAAU6T,EAAU7P,GAG9C,IAFA,IAAI/E,EAAI,EACP+C,EAAM6R,EAASxT,OACRpB,EAAI+C,EAAK/C,IAChB0K,EAAM3J,EAAU6T,EAAU5U,GAAK+E,GAEhC,OAAOA,EAuCJ8P,CAAkB9T,GAAY,IAC7BC,EAAQ5B,SAAW,CAAE4B,GAAYA,EAAS,IAG5C8T,GAAY7F,IAAetE,GAAS5J,EAEnCiB,EADAgS,EAAUhS,EAAOyS,EAAQxF,EAAWjO,EAASgP,GAsB/C,GAnBKe,EAaJA,EAAS+D,EATTN,EAAaH,IAAgB1J,EAAOsE,EAAY0F,GAAeP,GAG9D,GAGArP,EAG+B/D,EAASgP,GAEzCwE,EAAaM,EAITV,EAAa,CACjBG,EAAOP,EAAUQ,EAAYE,GAC7BN,EAAYG,EAAM,GAAIvT,EAASgP,GAG/BhQ,EAAIuU,EAAKnT,OACT,MAAQpB,KACAsB,EAAOiT,EAAMvU,MACnBwU,EAAYE,EAAS1U,MAAW8U,EAAWJ,EAAS1U,IAAQsB,IAK/D,GAAKqJ,GACJ,GAAK0J,GAAcpF,EAAY,CAC9B,GAAKoF,EAAa,CAGjBE,EAAO,GACPvU,EAAIwU,EAAWpT,OACf,MAAQpB,KACAsB,EAAOkT,EAAYxU,KAGzBuU,EAAK9V,KAAQqW,EAAW9U,GAAMsB,GAGhC+S,EAAY,KAAQG,EAAa,GAAMD,EAAMvE,GAI9ChQ,EAAIwU,EAAWpT,OACf,MAAQpB,KACAsB,EAAOkT,EAAYxU,MAC2C,GAAlEuU,EAAOF,EAAa3V,GAAQJ,KAAMqM,EAAMrJ,GAASmT,EAAQzU,MAE3D2K,EAAM4J,KAAYxP,EAASwP,GAASjT,UAOvCkT,EAAaR,EACZQ,IAAezP,EACdyP,EAAWrR,OAAQwR,EAAaH,EAAWpT,QAC3CoT,GAEGH,EACJA,EAAY,KAAMtP,EAASyP,EAAYxE,GAEvCvR,EAAKD,MAAOuG,EAASyP,KAMzB,SAASO,GAAmB5B,GA+B3B,IA9BA,IAAI6B,EAAcjE,EAAS/N,EAC1BD,EAAMoQ,EAAO/R,OACb6T,EAAkB7N,EAAKwH,SAAUuE,EAAQ,GAAI3T,MAC7C0V,EAAmBD,GAAmB7N,EAAKwH,SAAU,KACrD5O,EAAIiV,EAAkB,EAAI,EAG1BE,EAAehL,EAAe,SAAU7I,GACvC,OAAOA,IAAS0T,GACdE,GAAkB,GACrBE,EAAkBjL,EAAe,SAAU7I,GAC1C,OAA6C,EAAtC5C,GAAQJ,KAAM0W,EAAc1T,IACjC4T,GAAkB,GACrBnB,EAAW,CAAE,SAAUzS,EAAMN,EAASgP,GAMrC,IAAI/N,GAASgT,IAAqBjF,GAAOhP,GAAWqG,MACjD2N,EAAehU,GAAU5B,SAC1B+V,EAAc7T,EAAMN,EAASgP,GAC7BoF,EAAiB9T,EAAMN,EAASgP,IAKlC,OADAgF,EAAe,KACR/S,IAGDjC,EAAI+C,EAAK/C,IAChB,GAAO+Q,EAAU3J,EAAKwH,SAAUuE,EAAQnT,GAAIR,MAC3CuU,EAAW,CAAE5J,EAAe2J,EAAgBC,GAAYhD,QAClD,CAIN,IAHAA,EAAU3J,EAAKsG,OAAQyF,EAAQnT,GAAIR,MAAOhB,MAAO,KAAM2U,EAAQnT,GAAIyF,UAGrD1B,GAAY,CAIzB,IADAf,IAAMhD,EACEgD,EAAID,EAAKC,IAChB,GAAKoE,EAAKwH,SAAUuE,EAAQnQ,GAAIxD,MAC/B,MAGF,OAAO2U,GACF,EAAJnU,GAAS8T,EAAgBC,GACrB,EAAJ/T,GAAS0L,EAGRyH,EAAOhV,MAAO,EAAG6B,EAAI,GACnBzB,OAAQ,CAAEqH,MAAgC,MAAzBuN,EAAQnT,EAAI,GAAIR,KAAe,IAAM,MACvD0E,QAASkC,GAAU,MACrB2K,EACA/Q,EAAIgD,GAAK+R,GAAmB5B,EAAOhV,MAAO6B,EAAGgD,IAC7CA,EAAID,GAAOgS,GAAqB5B,EAASA,EAAOhV,MAAO6E,IACvDA,EAAID,GAAO2I,EAAYyH,IAGzBY,EAAStV,KAAMsS,GAIjB,OAAO+C,EAAgBC,GAiIxB,SAAS/C,GAASjQ,EAAU+J,GAC3B,IAAI9K,EA/H8BqV,EAAiBC,EAC/CC,EACHC,EACAC,EA6HAH,EAAc,GACdD,EAAkB,GAClB/B,EAASvL,EAAehH,EAAW,KAEpC,IAAMuS,EAAS,CAGRxI,IACLA,EAAQW,EAAU1K,IAEnBf,EAAI8K,EAAM1J,OACV,MAAQpB,KACPsT,EAASyB,GAAmBjK,EAAO9K,KACtB+D,GACZuR,EAAY7W,KAAM6U,GAElB+B,EAAgB5W,KAAM6U,IAKxBA,EAASvL,EAAehH,GArJSsU,EAsJNA,EArJxBE,EAA6B,GADkBD,EAsJNA,GArJrBlU,OACvBoU,EAAqC,EAAzBH,EAAgBjU,OAC5BqU,EAAe,SAAU9K,EAAM3J,EAASgP,EAAKjL,EAAS2Q,GACrD,IAAIpU,EAAM0B,EAAG+N,EACZ4E,EAAe,EACf3V,EAAI,IACJiR,EAAYtG,GAAQ,GACpBiL,EAAa,GACbC,EAAgBxO,EAGhBrF,EAAQ2I,GAAQ6K,GAAapO,EAAKsD,KAAK3B,IAAK,IAAK2M,GAGjDI,EAAkBpO,GAA4B,MAAjBmO,EAAwB,EAAI7R,KAAKC,UAAY,GAC1ElB,EAAMf,EAAMZ,OAeb,IAbKsU,IAMJrO,EAAmBrG,GAAWvD,GAAYuD,GAAW0U,GAO9C1V,IAAM+C,GAAgC,OAAvBzB,EAAOU,EAAOhC,IAAeA,IAAM,CACzD,GAAKwV,GAAalU,EAAO,CACxB0B,EAAI,EAMEhC,GAAWM,EAAK+D,eAAiB5H,IACtCwM,EAAa3I,GACb0O,GAAOxI,GAER,MAAUuJ,EAAUsE,EAAiBrS,KACpC,GAAK+N,EAASzP,EAAMN,GAAWvD,EAAUuS,GAAQ,CAChDvR,EAAKH,KAAMyG,EAASzD,GACpB,MAGGoU,IACJhO,EAAUoO,GAKPP,KAGGjU,GAAQyP,GAAWzP,IACzBqU,IAIIhL,GACJsG,EAAUxS,KAAM6C,IAgBnB,GATAqU,GAAgB3V,EASXuV,GAASvV,IAAM2V,EAAe,CAClC3S,EAAI,EACJ,MAAU+N,EAAUuE,EAAatS,KAChC+N,EAASE,EAAW2E,EAAY5U,EAASgP,GAG1C,GAAKrF,EAAO,CAGX,GAAoB,EAAfgL,EACJ,MAAQ3V,IACCiR,EAAWjR,IAAO4V,EAAY5V,KACrC4V,EAAY5V,GAAMkG,GAAI5H,KAAMyG,IAM/B6Q,EAAa5B,EAAU4B,GAIxBnX,EAAKD,MAAOuG,EAAS6Q,GAGhBF,IAAc/K,GAA4B,EAApBiL,EAAWxU,QACG,EAAtCuU,EAAeL,EAAYlU,QAE7BN,GAAO0N,WAAYzJ,GAUrB,OALK2Q,IACJhO,EAAUoO,EACVzO,EAAmBwO,GAGb5E,GAGFsE,EACNlJ,EAAcoJ,GACdA,KA8BO1U,SAAWA,EAEnB,OAAOuS,EAYR,SAASvH,GAAQhL,EAAUC,EAAS+D,EAAS4F,GAC5C,IAAI3K,EAAGmT,EAAQ4C,EAAOvW,EAAMkL,EAC3BsL,EAA+B,mBAAbjV,GAA2BA,EAC7C+J,GAASH,GAAQc,EAAY1K,EAAWiV,EAASjV,UAAYA,GAM9D,GAJAgE,EAAUA,GAAW,GAIC,IAAjB+F,EAAM1J,OAAe,CAIzB,GAAqB,GADrB+R,EAASrI,EAAO,GAAMA,EAAO,GAAI3M,MAAO,IAC5BiD,QAA+C,QAA/B2U,EAAQ5C,EAAQ,IAAM3T,MAC3B,IAArBwB,EAAQ5B,UAAkBoI,GAAkBJ,EAAKwH,SAAUuE,EAAQ,GAAI3T,MAAS,CAMjF,KAJAwB,GAAYoG,EAAKsD,KAAK7B,GACrBkN,EAAMtQ,QAAS,GAAIvB,QAASuF,EAAWC,GACvC1I,IACI,IAAM,IAEV,OAAO+D,EAGIiR,IACXhV,EAAUA,EAAQP,YAGnBM,EAAWA,EAAS5C,MAAOgV,EAAO/G,QAAQxG,MAAMxE,QAIjDpB,EAAI4I,EAAUQ,aAAa9D,KAAMvE,GAAa,EAAIoS,EAAO/R,OACzD,MAAQpB,IAAM,CAIb,GAHA+V,EAAQ5C,EAAQnT,GAGXoH,EAAKwH,SAAYpP,EAAOuW,EAAMvW,MAClC,MAED,IAAOkL,EAAOtD,EAAKsD,KAAMlL,MAGjBmL,EAAOD,EACbqL,EAAMtQ,QAAS,GAAIvB,QAASuF,EAAWC,GACvCF,EAASlE,KAAM6N,EAAQ,GAAI3T,OAC1B+L,EAAavK,EAAQP,aAAgBO,IACjC,CAKL,GAFAmS,EAAOhQ,OAAQnD,EAAG,KAClBe,EAAW4J,EAAKvJ,QAAUsK,EAAYyH,IAGrC,OADA1U,EAAKD,MAAOuG,EAAS4F,GACd5F,EAGR,QAeJ,OAPEiR,GAAYhF,GAASjQ,EAAU+J,IAChCH,EACA3J,GACCwG,EACDzC,GACC/D,GAAWwI,EAASlE,KAAMvE,IAAcwK,EAAavK,EAAQP,aAAgBO,GAExE+D,EArlBR4L,EAAWlP,UAAY2F,EAAK6O,QAAU7O,EAAKiB,QAC3CjB,EAAKuJ,WAAa,IAAIA,EA2lBtB1R,GAAQyP,WAAa3K,EAAQiC,MAAO,IAAK9C,KAAM+E,GAAY0D,KAAM,MAAS5H,EAG1EkG,IAIAhL,GAAQiP,aAAe5B,EAAQ,SAAUC,GAGxC,OAA4E,EAArEA,EAAG7F,wBAAyBjJ,EAAS0C,cAAe,eAG5DW,GAAO4J,KAAOA,EAGd5J,GAAOqN,KAAM,KAAQrN,GAAOqN,KAAK9F,QACjCvH,GAAOoV,OAASpV,GAAO0N,WAIvB9D,EAAKsG,QAAUA,GACftG,EAAKqB,OAASA,GACdrB,EAAKT,YAAcA,EACnBS,EAAKe,SAAWA,EAEhBf,EAAKf,OAAS7I,GAAOkG,eACrB0D,EAAKyL,QAAUrV,GAAOV,KACtBsK,EAAK0L,MAAQtV,GAAOmE,SACpByF,EAAK2L,UAAYvV,GAAOqN,KACxBzD,EAAKzL,QAAU6B,GAAO7B,QACtByL,EAAK8D,WAAa1N,GAAO0N,WAniEzB,GA0iEA,IAAInE,EAAM,SAAU/I,EAAM+I,EAAKiM,GAC9B,IAAIzF,EAAU,GACb0F,OAAqBzS,IAAVwS,EAEZ,OAAUhV,EAAOA,EAAM+I,KAA6B,IAAlB/I,EAAKlC,SACtC,GAAuB,IAAlBkC,EAAKlC,SAAiB,CAC1B,GAAKmX,GAAYzV,GAAQQ,GAAOkV,GAAIF,GACnC,MAEDzF,EAAQpS,KAAM6C,GAGhB,OAAOuP,GAIJ4F,EAAW,SAAUC,EAAGpV,GAG3B,IAFA,IAAIuP,EAAU,GAEN6F,EAAGA,EAAIA,EAAEtE,YACI,IAAfsE,EAAEtX,UAAkBsX,IAAMpV,GAC9BuP,EAAQpS,KAAMiY,GAIhB,OAAO7F,GAIJ8F,EAAgB7V,GAAOqN,KAAKrD,MAAM1B,aAElCwN,EAAa,kEAKjB,SAASC,EAAQzI,EAAU0I,EAAWhG,GACrC,OAAK5R,EAAY4X,GACThW,GAAO8B,KAAMwL,EAAU,SAAU9M,EAAMtB,GAC7C,QAAS8W,EAAUxY,KAAMgD,EAAMtB,EAAGsB,KAAWwP,IAK1CgG,EAAU1X,SACP0B,GAAO8B,KAAMwL,EAAU,SAAU9M,GACvC,OAASA,IAASwV,IAAgBhG,IAKV,iBAAdgG,EACJhW,GAAO8B,KAAMwL,EAAU,SAAU9M,GACvC,OAA4C,EAAnC5C,GAAQJ,KAAMwY,EAAWxV,KAAkBwP,IAK/ChQ,GAAO4M,OAAQoJ,EAAW1I,EAAU0C,GAG5ChQ,GAAO4M,OAAS,SAAUS,EAAMnM,EAAO8O,GACtC,IAAIxP,EAAOU,EAAO,GAMlB,OAJK8O,IACJ3C,EAAO,QAAUA,EAAO,KAGH,IAAjBnM,EAAMZ,QAAkC,IAAlBE,EAAKlC,SACxB0B,GAAO4J,KAAK2D,gBAAiB/M,EAAM6M,GAAS,CAAE7M,GAAS,GAGxDR,GAAO4J,KAAKjF,QAAS0I,EAAMrN,GAAO8B,KAAMZ,EAAO,SAAUV,GAC/D,OAAyB,IAAlBA,EAAKlC,aAId0B,GAAOG,GAAGmC,OAAQ,CACjBsH,KAAM,SAAU3J,GACf,IAAIf,EAAGiC,EACNc,EAAMlF,KAAKuD,OACX2V,EAAOlZ,KAER,GAAyB,iBAAbkD,EACX,OAAOlD,KAAKkE,UAAWjB,GAAQC,GAAW2M,OAAQ,WACjD,IAAM1N,EAAI,EAAGA,EAAI+C,EAAK/C,IACrB,GAAKc,GAAOwF,SAAUyQ,EAAM/W,GAAKnC,MAChC,OAAO,KAQX,IAFAoE,EAAMpE,KAAKkE,UAAW,IAEhB/B,EAAI,EAAGA,EAAI+C,EAAK/C,IACrBc,GAAO4J,KAAM3J,EAAUgW,EAAM/W,GAAKiC,GAGnC,OAAa,EAANc,EAAUjC,GAAO0N,WAAYvM,GAAQA,GAE7CyL,OAAQ,SAAU3M,GACjB,OAAOlD,KAAKkE,UAAW8U,EAAQhZ,KAAMkD,GAAY,IAAI,KAEtD+P,IAAK,SAAU/P,GACd,OAAOlD,KAAKkE,UAAW8U,EAAQhZ,KAAMkD,GAAY,IAAI,KAEtDyV,GAAI,SAAUzV,GACb,QAAS8V,EACRhZ,KAIoB,iBAAbkD,GAAyB4V,EAAcrR,KAAMvE,GACnDD,GAAQC,GACRA,GAAY,IACb,GACCK,UASJ,IAAI4V,EAMHzN,EAAa,uCAENzI,GAAOG,GAAGC,KAAO,SAAUH,EAAUC,EAASuQ,GACpD,IAAIzG,EAAOxJ,EAGX,IAAMP,EACL,OAAOlD,KAQR,GAHA0T,EAAOA,GAAQyF,EAGU,iBAAbjW,EAAwB,CAanC,KAPC+J,EALsB,MAAlB/J,EAAU,IACsB,MAApCA,EAAUA,EAASK,OAAS,IACT,GAAnBL,EAASK,OAGD,CAAE,KAAML,EAAU,MAGlBwI,EAAW2B,KAAMnK,MAIV+J,EAAO,IAAQ9J,EA6CxB,OAAMA,GAAWA,EAAQU,QACtBV,GAAWuQ,GAAO7G,KAAM3J,GAK1BlD,KAAK8D,YAAaX,GAAU0J,KAAM3J,GAhDzC,GAAK+J,EAAO,GAAM,CAYjB,GAXA9J,EAAUA,aAAmBF,GAASE,EAAS,GAAMA,EAIrDF,GAAOoB,MAAOrE,KAAMiD,GAAOmW,UAC1BnM,EAAO,GACP9J,GAAWA,EAAQ5B,SAAW4B,EAAQqE,eAAiBrE,EAAUvD,GACjE,IAIImZ,EAAWtR,KAAMwF,EAAO,KAAShK,GAAO6C,cAAe3C,GAC3D,IAAM8J,KAAS9J,EAGT9B,EAAYrB,KAAMiN,IACtBjN,KAAMiN,GAAS9J,EAAS8J,IAIxBjN,KAAKyQ,KAAMxD,EAAO9J,EAAS8J,IAK9B,OAAOjN,KAYP,OARAyD,EAAO7D,EAAS0N,eAAgBL,EAAO,OAKtCjN,KAAM,GAAMyD,EACZzD,KAAKuD,OAAS,GAERvD,KAcH,OAAKkD,EAAS3B,UACpBvB,KAAM,GAAMkD,EACZlD,KAAKuD,OAAS,EACPvD,MAIIqB,EAAY6B,QACD+C,IAAfyN,EAAK2F,MACX3F,EAAK2F,MAAOnW,GAGZA,EAAUD,IAGLA,GAAOgE,UAAW/D,EAAUlD,QAIhC4D,UAAYX,GAAOG,GAGxB+V,EAAalW,GAAQrD,GAGrB,IAAI0Z,EAAe,iCAGlBC,EAAmB,CAClBC,UAAU,EACVC,UAAU,EACVhN,MAAM,EACNiN,MAAM,GAoFR,SAASC,EAASC,EAAKpN,GACtB,OAAUoN,EAAMA,EAAKpN,KAA4B,IAAjBoN,EAAIrY,UACpC,OAAOqY,EAnFR3W,GAAOG,GAAGmC,OAAQ,CACjB8N,IAAK,SAAUzN,GACd,IAAIiU,EAAU5W,GAAQ2C,EAAQ5F,MAC7B8Z,EAAID,EAAQtW,OAEb,OAAOvD,KAAK6P,OAAQ,WAEnB,IADA,IAAI1N,EAAI,EACAA,EAAI2X,EAAG3X,IACd,GAAKc,GAAOwF,SAAUzI,KAAM6Z,EAAS1X,IACpC,OAAO,KAMX4X,QAAS,SAAUvB,EAAWrV,GAC7B,IAAIyW,EACHzX,EAAI,EACJ2X,EAAI9Z,KAAKuD,OACTyP,EAAU,GACV6G,EAA+B,iBAAdrB,GAA0BvV,GAAQuV,GAGpD,IAAMM,EAAcrR,KAAM+Q,GACzB,KAAQrW,EAAI2X,EAAG3X,IACd,IAAMyX,EAAM5Z,KAAMmC,GAAKyX,GAAOA,IAAQzW,EAASyW,EAAMA,EAAIhX,WAGxD,GAAKgX,EAAIrY,SAAW,KAAQsY,GACH,EAAxBA,EAAQG,MAAOJ,GAGE,IAAjBA,EAAIrY,UACH0B,GAAO4J,KAAK2D,gBAAiBoJ,EAAKpB,IAAgB,CAEnDxF,EAAQpS,KAAMgZ,GACd,MAMJ,OAAO5Z,KAAKkE,UAA4B,EAAjB8O,EAAQzP,OAAaN,GAAO0N,WAAYqC,GAAYA,IAI5EgH,MAAO,SAAUvW,GAGhB,OAAMA,EAKe,iBAATA,EACJ5C,GAAQJ,KAAMwC,GAAQQ,GAAQzD,KAAM,IAIrCa,GAAQJ,KAAMT,KAGpByD,EAAKI,OAASJ,EAAM,GAAMA,GAZjBzD,KAAM,IAAOA,KAAM,GAAI4C,WAAe5C,KAAK2E,QAAQsV,UAAU1W,QAAU,GAgBlF2W,IAAK,SAAUhX,EAAUC,GACxB,OAAOnD,KAAKkE,UACXjB,GAAO0N,WACN1N,GAAOoB,MAAOrE,KAAKgE,MAAOf,GAAQC,EAAUC,OAK/CgX,QAAS,SAAUjX,GAClB,OAAOlD,KAAKka,IAAiB,MAAZhX,EAChBlD,KAAKsE,WAAatE,KAAKsE,WAAWuL,OAAQ3M,OAU7CD,GAAOsB,KAAM,CACZgO,OAAQ,SAAU9O,GACjB,IAAI8O,EAAS9O,EAAKb,WAClB,OAAO2P,GAA8B,KAApBA,EAAOhR,SAAkBgR,EAAS,MAEpD6H,QAAS,SAAU3W,GAClB,OAAO+I,EAAK/I,EAAM,eAEnB4W,aAAc,SAAU5W,EAAM2E,EAAIqQ,GACjC,OAAOjM,EAAK/I,EAAM,aAAcgV,IAEjChM,KAAM,SAAUhJ,GACf,OAAOkW,EAASlW,EAAM,gBAEvBiW,KAAM,SAAUjW,GACf,OAAOkW,EAASlW,EAAM,oBAEvB6W,QAAS,SAAU7W,GAClB,OAAO+I,EAAK/I,EAAM,gBAEnBwW,QAAS,SAAUxW,GAClB,OAAO+I,EAAK/I,EAAM,oBAEnB8W,UAAW,SAAU9W,EAAM2E,EAAIqQ,GAC9B,OAAOjM,EAAK/I,EAAM,cAAegV,IAElC+B,UAAW,SAAU/W,EAAM2E,EAAIqQ,GAC9B,OAAOjM,EAAK/I,EAAM,kBAAmBgV,IAEtCG,SAAU,SAAUnV,GACnB,OAAOmV,GAAYnV,EAAKb,YAAc,IAAK8P,WAAYjP,IAExD+V,SAAU,SAAU/V,GACnB,OAAOmV,EAAUnV,EAAKiP,aAEvB+G,SAAU,SAAUhW,GACnB,OAA6B,MAAxBA,EAAKgX,iBAKTta,EAAUsD,EAAKgX,iBAERhX,EAAKgX,iBAMRjX,GAAUC,EAAM,cACpBA,EAAOA,EAAKiX,SAAWjX,GAGjBR,GAAOoB,MAAO,GAAIZ,EAAKiJ,eAE7B,SAAUhJ,EAAMN,GAClBH,GAAOG,GAAIM,GAAS,SAAU+U,EAAOvV,GACpC,IAAI8P,EAAU/P,GAAOwB,IAAKzE,KAAMoD,EAAIqV,GAuBpC,MArB0B,UAArB/U,EAAKpD,OAAQ,KACjB4C,EAAWuV,GAGPvV,GAAgC,iBAAbA,IACvB8P,EAAU/P,GAAO4M,OAAQ3M,EAAU8P,IAGjB,EAAdhT,KAAKuD,SAGHgW,EAAkB7V,IACvBT,GAAO0N,WAAYqC,GAIfsG,EAAa7R,KAAM/D,IACvBsP,EAAQ2H,WAIH3a,KAAKkE,UAAW8O,MAGzB,IAAI4H,EAAgB,oBAsOpB,SAASC,EAAUC,GAClB,OAAOA,EAER,SAASC,EAASC,GACjB,MAAMA,EAGP,SAASC,EAAYlT,EAAOmT,EAASC,EAAQC,GAC5C,IAAIC,EAEJ,IAGMtT,GAAS1G,EAAcga,EAAStT,EAAMuT,SAC1CD,EAAO5a,KAAMsH,GAAQ+B,KAAMoR,GAAUK,KAAMJ,GAGhCpT,GAAS1G,EAAcga,EAAStT,EAAMyT,MACjDH,EAAO5a,KAAMsH,EAAOmT,EAASC,GAQ7BD,EAAQva,WAAOsF,EAAW,CAAE8B,GAAQzH,MAAO8a,IAM3C,MAAQrT,GAIToT,EAAOxa,WAAOsF,EAAW,CAAE8B,KAvO7B9E,GAAOwY,UAAY,SAAUjW,GA9B7B,IAAwBA,EACnBkW,EAiCJlW,EAA6B,iBAAZA,GAlCMA,EAmCPA,EAlCZkW,EAAS,GACbzY,GAAOsB,KAAMiB,EAAQyH,MAAO2N,IAAmB,GAAI,SAAUe,EAAGC,GAC/DF,EAAQE,IAAS,IAEXF,GA+BNzY,GAAOsC,OAAQ,GAAIC,GAEpB,IACCqW,EAGAC,EAGAC,EAGAC,EAGAC,EAAO,GAGPC,EAAQ,GAGRC,GAAe,EAGfC,EAAO,WAQN,IALAJ,EAASA,GAAUxW,EAAQ6W,KAI3BN,EAAQF,GAAS,EACTK,EAAM3Y,OAAQ4Y,GAAe,EAAI,CACxCL,EAASI,EAAM3N,QACf,QAAU4N,EAAcF,EAAK1Y,QAGmC,IAA1D0Y,EAAME,GAAcxb,MAAOmb,EAAQ,GAAKA,EAAQ,KACpDtW,EAAQ8W,cAGRH,EAAcF,EAAK1Y,OACnBuY,GAAS,GAMNtW,EAAQsW,SACbA,GAAS,GAGVD,GAAS,EAGJG,IAIHC,EADIH,EACG,GAIA,KAMV5C,EAAO,CAGNgB,IAAK,WA2BJ,OA1BK+B,IAGCH,IAAWD,IACfM,EAAcF,EAAK1Y,OAAS,EAC5B2Y,EAAMtb,KAAMkb,IAGb,SAAW5B,EAAKrH,GACf5P,GAAOsB,KAAMsO,EAAM,SAAU8I,EAAG7T,GAC1BzG,EAAYyG,GACVtC,EAAQ6S,QAAWa,EAAK7F,IAAKvL,IAClCmU,EAAKrb,KAAMkH,GAEDA,GAAOA,EAAIvE,QAA4B,WAAlBT,EAAQgF,IAGxCoS,EAAKpS,KATR,CAYKpD,WAEAoX,IAAWD,GACfO,KAGKpc,MAIRuc,OAAQ,WAYP,OAXAtZ,GAAOsB,KAAMG,UAAW,SAAUiX,EAAG7T,GACpC,IAAIkS,EACJ,OAA0D,GAAhDA,EAAQ/W,GAAOkE,QAASW,EAAKmU,EAAMjC,IAC5CiC,EAAK3W,OAAQ0U,EAAO,GAGfA,GAASmC,GACbA,MAIInc,MAKRqT,IAAK,SAAUjQ,GACd,OAAOA,GACwB,EAA9BH,GAAOkE,QAAS/D,EAAI6Y,GACN,EAAdA,EAAK1Y,QAIP+Q,MAAO,WAIN,OAHK2H,IACJA,EAAO,IAEDjc,MAMRwc,QAAS,WAGR,OAFAR,EAASE,EAAQ,GACjBD,EAAOH,EAAS,GACT9b,MAERuM,SAAU,WACT,OAAQ0P,GAMTQ,KAAM,WAKL,OAJAT,EAASE,EAAQ,GACXJ,GAAWD,IAChBI,EAAOH,EAAS,IAEV9b,MAERgc,OAAQ,WACP,QAASA,GAIVU,SAAU,SAAUvZ,EAAS0P,GAS5B,OARMmJ,IAELnJ,EAAO,CAAE1P,GADT0P,EAAOA,GAAQ,IACQvS,MAAQuS,EAAKvS,QAAUuS,GAC9CqJ,EAAMtb,KAAMiS,GACNgJ,GACLO,KAGKpc,MAIRoc,KAAM,WAEL,OADAlD,EAAKwD,SAAU1c,KAAM0E,WACd1E,MAIR+b,MAAO,WACN,QAASA,IAIZ,OAAO7C,GA4CRjW,GAAOsC,OAAQ,CAEdoX,SAAU,SAAUC,GACnB,IAAIC,EAAS,CAIX,CAAE,SAAU,WAAY5Z,GAAOwY,UAAW,UACzCxY,GAAOwY,UAAW,UAAY,GAC/B,CAAE,UAAW,OAAQxY,GAAOwY,UAAW,eACtCxY,GAAOwY,UAAW,eAAiB,EAAG,YACvC,CAAE,SAAU,OAAQxY,GAAOwY,UAAW,eACrCxY,GAAOwY,UAAW,eAAiB,EAAG,aAExCqB,EAAQ,UACRxB,EAAU,CACTwB,MAAO,WACN,OAAOA,GAERC,OAAQ,WAEP,OADAC,EAASlT,KAAMpF,WAAY6W,KAAM7W,WAC1B1E,MAERid,QAAS,SAAU7Z,GAClB,OAAOkY,EAAQE,KAAM,KAAMpY,IAI5B8Z,KAAM,WACL,IAAIC,EAAMzY,UAEV,OAAOzB,GAAO0Z,SAAU,SAAUS,GACjCna,GAAOsB,KAAMsY,EAAQ,SAAUzU,EAAIiV,GAGlC,IAAIja,EAAK/B,EAAY8b,EAAKE,EAAO,MAAWF,EAAKE,EAAO,IAKxDL,EAAUK,EAAO,IAAO,WACvB,IAAIC,EAAWla,GAAMA,EAAGzC,MAAOX,KAAM0E,WAChC4Y,GAAYjc,EAAYic,EAAShC,SACrCgC,EAAShC,UACPiC,SAAUH,EAASI,QACnB1T,KAAMsT,EAASlC,SACfK,KAAM6B,EAASjC,QAEjBiC,EAAUC,EAAO,GAAM,QACtBrd,KACAoD,EAAK,CAAEka,GAAa5Y,eAKxByY,EAAM,OACH7B,WAELE,KAAM,SAAUiC,EAAaC,EAAYC,GACxC,IAAIC,EAAW,EACf,SAAS1C,EAAS2C,EAAOb,EAAUc,EAASC,GAC3C,OAAO,WACN,IAAIC,EAAOhe,KACV6S,EAAOnO,UACPuZ,EAAa,WACZ,IAAIX,EAAU9B,EAKd,KAAKqC,EAAQD,GAAb,CAQA,IAJAN,EAAWQ,EAAQnd,MAAOqd,EAAMnL,MAIdmK,EAAS1B,UAC1B,MAAM,IAAI4C,UAAW,4BAOtB1C,EAAO8B,IAKgB,iBAAbA,GACY,mBAAbA,IACRA,EAAS9B,KAGLna,EAAYma,GAGXuC,EACJvC,EAAK/a,KACJ6c,EACApC,EAAS0C,EAAUZ,EAAUnC,EAAUkD,GACvC7C,EAAS0C,EAAUZ,EAAUjC,EAASgD,KAOvCH,IAEApC,EAAK/a,KACJ6c,EACApC,EAAS0C,EAAUZ,EAAUnC,EAAUkD,GACvC7C,EAAS0C,EAAUZ,EAAUjC,EAASgD,GACtC7C,EAAS0C,EAAUZ,EAAUnC,EAC5BmC,EAASmB,eASPL,IAAYjD,IAChBmD,OAAO/X,EACP4M,EAAO,CAAEyK,KAKRS,GAAWf,EAASoB,aAAeJ,EAAMnL,MAK7CwL,EAAUN,EACTE,EACA,WACC,IACCA,IACC,MAAQtR,GAEJ1J,GAAO0Z,SAAS2B,eACpBrb,GAAO0Z,SAAS2B,cAAe3R,EAC9B0R,EAAQ9X,OAMQqX,GAAbC,EAAQ,IAIPC,IAAY/C,IAChBiD,OAAO/X,EACP4M,EAAO,CAAElG,IAGVqQ,EAASuB,WAAYP,EAAMnL,MAS3BgL,EACJQ,KAKKpb,GAAO0Z,SAAS6B,aACpBH,EAAQ9X,MAAQtD,GAAO0Z,SAAS6B,eAMrBvb,GAAO0Z,SAAS8B,eAC3BJ,EAAQ9X,MAAQtD,GAAO0Z,SAAS8B,gBAEjC1e,GAAO2e,WAAYL,KAKtB,OAAOpb,GAAO0Z,SAAU,SAAUS,GAGjCP,EAAQ,GAAK,GAAI3C,IAChBgB,EACC,EACAkC,EACA/b,EAAYsc,GACXA,EACA9C,EACDuC,EAASe,aAKXtB,EAAQ,GAAK,GAAI3C,IAChBgB,EACC,EACAkC,EACA/b,EAAYoc,GACXA,EACA5C,IAKHgC,EAAQ,GAAK,GAAI3C,IAChBgB,EACC,EACAkC,EACA/b,EAAYqc,GACXA,EACA3C,MAGAO,WAKLA,QAAS,SAAUha,GAClB,OAAc,MAAPA,EAAc2B,GAAOsC,OAAQjE,EAAKga,GAAYA,IAGvD0B,EAAW,GAkEZ,OA/DA/Z,GAAOsB,KAAMsY,EAAQ,SAAU1a,EAAGkb,GACjC,IAAIpB,EAAOoB,EAAO,GACjBsB,EAActB,EAAO,GAKtB/B,EAAS+B,EAAO,IAAQpB,EAAK/B,IAGxByE,GACJ1C,EAAK/B,IACJ,WAIC4C,EAAQ6B,GAKT9B,EAAQ,EAAI1a,GAAK,GAAIqa,QAIrBK,EAAQ,EAAI1a,GAAK,GAAIqa,QAGrBK,EAAQ,GAAK,GAAIJ,KAGjBI,EAAQ,GAAK,GAAIJ,MAOnBR,EAAK/B,IAAKmD,EAAO,GAAIjB,MAKrBY,EAAUK,EAAO,IAAQ,WAExB,OADAL,EAAUK,EAAO,GAAM,QAAUrd,OAASgd,OAAW/W,EAAYjG,KAAM0E,WAChE1E,MAMRgd,EAAUK,EAAO,GAAM,QAAWpB,EAAKS,WAIxCpB,EAAQA,QAAS0B,GAGZJ,GACJA,EAAKnc,KAAMuc,EAAUA,GAIfA,GAIR4B,KAAM,SAAUC,GACf,IAGCC,EAAYpa,UAAUnB,OAGtBpB,EAAI2c,EAGJC,EAAkBhZ,MAAO5D,GACzB6c,EAAgB1e,GAAMG,KAAMiE,WAG5Bua,EAAUhc,GAAO0Z,WAGjBuC,EAAa,SAAU/c,GACtB,OAAO,SAAU4F,GAChBgX,EAAiB5c,GAAMnC,KACvBgf,EAAe7c,GAAyB,EAAnBuC,UAAUnB,OAAajD,GAAMG,KAAMiE,WAAcqD,IAC5D+W,GACTG,EAAQb,YAAaW,EAAiBC,KAM1C,GAAKF,GAAa,IACjB7D,EAAY4D,EAAaI,EAAQnV,KAAMoV,EAAY/c,IAAM+Y,QAAS+D,EAAQ9D,QACxE2D,GAGuB,YAApBG,EAAQnC,SACZzb,EAAY2d,EAAe7c,IAAO6c,EAAe7c,GAAIqZ,OAErD,OAAOyD,EAAQzD,OAKjB,MAAQrZ,IACP8Y,EAAY+D,EAAe7c,GAAK+c,EAAY/c,GAAK8c,EAAQ9D,QAG1D,OAAO8D,EAAQ3D,aAOjB,IAAI6D,EAAc,yDAKlBlc,GAAO0Z,SAAS2B,cAAgB,SAAU/X,EAAO6Y,GAI3Crf,GAAOsf,SAAWtf,GAAOsf,QAAQC,MAAQ/Y,GAAS4Y,EAAY1X,KAAMlB,EAAM7C,OAC9E3D,GAAOsf,QAAQC,KAAM,8BAAgC/Y,EAAMgZ,QAC1DhZ,EAAMiZ,MAAOJ,IAOhBnc,GAAOwc,eAAiB,SAAUlZ,GACjCxG,GAAO2e,WAAY,WAClB,MAAMnY,KAQR,IAAImZ,EAAYzc,GAAO0Z,WAkDvB,SAASgD,IACR/f,EAASggB,oBAAqB,mBAAoBD,GAClD5f,GAAO6f,oBAAqB,OAAQD,GACpC1c,GAAOoW,QAnDRpW,GAAOG,GAAGiW,MAAQ,SAAUjW,GAY3B,OAVAsc,EACElE,KAAMpY,GAKN6Z,SAAO,SAAU1W,GACjBtD,GAAOwc,eAAgBlZ,KAGlBvG,MAGRiD,GAAOsC,OAAQ,CAGde,SAAS,EAITuZ,UAAW,EAGXxG,MAAO,SAAUyG,KAGF,IAATA,IAAkB7c,GAAO4c,UAAY5c,GAAOqD,WAKjDrD,GAAOqD,SAAU,KAGZwZ,GAAsC,IAAnB7c,GAAO4c,WAK/BH,EAAUtB,YAAaxe,EAAU,CAAEqD,QAIrCA,GAAOoW,MAAMmC,KAAOkE,EAAUlE,KAaD,aAAxB5b,EAASmgB,YACa,YAAxBngB,EAASmgB,aAA6BngB,EAASmH,gBAAgBiZ,SAGjEjgB,GAAO2e,WAAYzb,GAAOoW,QAK1BzZ,EAAS2P,iBAAkB,mBAAoBoQ,GAG/C5f,GAAOwP,iBAAkB,OAAQoQ,IAQlC,IAAIM,EAAS,SAAU9b,EAAOf,EAAIiL,EAAKtG,EAAOmY,EAAWC,EAAUC,GAClE,IAAIje,EAAI,EACP+C,EAAMf,EAAMZ,OACZ8c,EAAc,MAAPhS,EAGR,GAAuB,WAAlBvL,EAAQuL,GAEZ,IAAMlM,KADN+d,GAAY,EACD7R,EACV4R,EAAQ9b,EAAOf,EAAIjB,EAAGkM,EAAKlM,IAAK,EAAMge,EAAUC,QAI3C,QAAena,IAAV8B,IACXmY,GAAY,EAEN7e,EAAY0G,KACjBqY,GAAM,GAGFC,IAGCD,GACJhd,EAAG3C,KAAM0D,EAAO4D,GAChB3E,EAAK,OAILid,EAAOjd,EACPA,EAAK,SAAUK,EAAM6c,EAAMvY,GAC1B,OAAOsY,EAAK5f,KAAMwC,GAAQQ,GAAQsE,MAKhC3E,GACJ,KAAQjB,EAAI+C,EAAK/C,IAChBiB,EACCe,EAAOhC,GAAKkM,EAAK+R,EAChBrY,EACAA,EAAMtH,KAAM0D,EAAOhC,GAAKA,EAAGiB,EAAIe,EAAOhC,GAAKkM,KAMhD,OAAK6R,EACG/b,EAIHkc,EACGjd,EAAG3C,KAAM0D,GAGVe,EAAM9B,EAAIe,EAAO,GAAKkK,GAAQ8R,GAKlCI,EAAY,QACfC,EAAa,YAGd,SAASC,EAAYC,EAAMC,GAC1B,OAAOA,EAAOC,cAMf,SAASC,EAAWC,GACnB,OAAOA,EAAOza,QAASka,EAAW,OAAQla,QAASma,EAAYC,GAEhE,IAAIM,EAAa,SAAUC,GAQ1B,OAA0B,IAAnBA,EAAMzf,UAAqC,IAAnByf,EAAMzf,YAAsByf,EAAMzf,UAMlE,SAAS0f,IACRjhB,KAAKkG,QAAUjD,GAAOiD,QAAU+a,EAAKC,MAGtCD,EAAKC,IAAM,EAEXD,EAAKrd,UAAY,CAEhBwK,MAAO,SAAU4S,GAGhB,IAAIjZ,EAAQiZ,EAAOhhB,KAAKkG,SA4BxB,OAzBM6B,IACLA,EAAQ,GAKHgZ,EAAYC,KAIXA,EAAMzf,SACVyf,EAAOhhB,KAAKkG,SAAY6B,EAMxB3H,OAAO+gB,eAAgBH,EAAOhhB,KAAKkG,QAAS,CAC3C6B,MAAOA,EACPqZ,cAAc,MAMXrZ,GAERsZ,IAAK,SAAUL,EAAOM,EAAMvZ,GAC3B,IAAIwZ,EACHnT,EAAQpO,KAAKoO,MAAO4S,GAIrB,GAAqB,iBAATM,EACXlT,EAAOyS,EAAWS,IAAWvZ,OAM7B,IAAMwZ,KAAQD,EACblT,EAAOyS,EAAWU,IAAWD,EAAMC,GAGrC,OAAOnT,GAERpK,IAAK,SAAUgd,EAAO3S,GACrB,YAAepI,IAARoI,EACNrO,KAAKoO,MAAO4S,GAGZA,EAAOhhB,KAAKkG,UAAa8a,EAAOhhB,KAAKkG,SAAW2a,EAAWxS,KAE7D4R,OAAQ,SAAUe,EAAO3S,EAAKtG,GAa7B,YAAa9B,IAARoI,GACCA,GAAsB,iBAARA,QAAgCpI,IAAV8B,EAElC/H,KAAKgE,IAAKgd,EAAO3S,IASzBrO,KAAKqhB,IAAKL,EAAO3S,EAAKtG,QAIL9B,IAAV8B,EAAsBA,EAAQsG,IAEtCkO,OAAQ,SAAUyE,EAAO3S,GACxB,IAAIlM,EACHiM,EAAQ4S,EAAOhhB,KAAKkG,SAErB,QAAeD,IAAVmI,EAAL,CAIA,QAAanI,IAARoI,EAAoB,CAkBxBlM,GAXCkM,EAJItI,MAAMC,QAASqI,GAIbA,EAAI5J,IAAKoc,IAEfxS,EAAMwS,EAAWxS,MAIJD,EACZ,CAAEC,GACAA,EAAIpB,MAAO2N,IAAmB,IAG1BrX,OAER,MAAQpB,WACAiM,EAAOC,EAAKlM,UAKR8D,IAARoI,GAAqBpL,GAAO2D,cAAewH,MAM1C4S,EAAMzf,SACVyf,EAAOhhB,KAAKkG,cAAYD,SAEjB+a,EAAOhhB,KAAKkG,YAItBsb,QAAS,SAAUR,GAClB,IAAI5S,EAAQ4S,EAAOhhB,KAAKkG,SACxB,YAAiBD,IAAVmI,IAAwBnL,GAAO2D,cAAewH,KAGvD,IAAIqT,EAAW,IAAIR,EAEfS,EAAW,IAAIT,EAcfU,EAAS,gCACZC,EAAa,SA2Bd,SAASC,EAAUpe,EAAM4K,EAAKiT,GAC7B,IAAI5d,EA1Ba4d,EA8BjB,QAAcrb,IAATqb,GAAwC,IAAlB7d,EAAKlC,SAI/B,GAHAmC,EAAO,QAAU2K,EAAIhI,QAASub,EAAY,OAAQje,cAG7B,iBAFrB2d,EAAO7d,EAAKjB,aAAckB,IAEM,CAC/B,IACC4d,EAnCW,UADGA,EAoCEA,IA/BL,UAATA,IAIS,SAATA,EACG,KAIHA,KAAUA,EAAO,IACbA,EAGJK,EAAOla,KAAM6Z,GACVQ,KAAKC,MAAOT,GAGbA,GAeH,MAAQ3U,IAGV+U,EAASL,IAAK5d,EAAM4K,EAAKiT,QAEzBA,OAAOrb,EAGT,OAAOqb,EAGRre,GAAOsC,OAAQ,CACdic,QAAS,SAAU/d,GAClB,OAAOie,EAASF,QAAS/d,IAAUge,EAASD,QAAS/d,IAGtD6d,KAAM,SAAU7d,EAAMC,EAAM4d,GAC3B,OAAOI,EAASzB,OAAQxc,EAAMC,EAAM4d,IAGrCU,WAAY,SAAUve,EAAMC,GAC3Bge,EAASnF,OAAQ9Y,EAAMC,IAKxBue,MAAO,SAAUxe,EAAMC,EAAM4d,GAC5B,OAAOG,EAASxB,OAAQxc,EAAMC,EAAM4d,IAGrCY,YAAa,SAAUze,EAAMC,GAC5B+d,EAASlF,OAAQ9Y,EAAMC,MAIzBT,GAAOG,GAAGmC,OAAQ,CACjB+b,KAAM,SAAUjT,EAAKtG,GACpB,IAAI5F,EAAGuB,EAAM4d,EACZ7d,EAAOzD,KAAM,GACbmiB,EAAQ1e,GAAQA,EAAK8G,WAGtB,QAAatE,IAARoI,EAAoB,CACxB,GAAKrO,KAAKuD,SACT+d,EAAOI,EAAS1d,IAAKP,GAEE,IAAlBA,EAAKlC,WAAmBkgB,EAASzd,IAAKP,EAAM,iBAAmB,CACnEtB,EAAIggB,EAAM5e,OACV,MAAQpB,IAIFggB,EAAOhgB,IAEsB,KADjCuB,EAAOye,EAAOhgB,GAAIuB,MACR7C,QAAS,WAClB6C,EAAOmd,EAAWnd,EAAKpD,MAAO,IAC9BuhB,EAAUpe,EAAMC,EAAM4d,EAAM5d,KAI/B+d,EAASJ,IAAK5d,EAAM,gBAAgB,GAItC,OAAO6d,EAIR,MAAoB,iBAARjT,EACJrO,KAAKuE,KAAM,WACjBmd,EAASL,IAAKrhB,KAAMqO,KAIf4R,EAAQjgB,KAAM,SAAU+H,GAC9B,IAAIuZ,EAOJ,GAAK7d,QAAkBwC,IAAV8B,EAKZ,YAAc9B,KADdqb,EAAOI,EAAS1d,IAAKP,EAAM4K,IAEnBiT,OAMMrb,KADdqb,EAAOO,EAAUpe,EAAM4K,IAEfiT,OAIR,EAIDthB,KAAKuE,KAAM,WAGVmd,EAASL,IAAKrhB,KAAMqO,EAAKtG,MAExB,KAAMA,EAA0B,EAAnBrD,UAAUnB,OAAY,MAAM,IAG7Cye,WAAY,SAAU3T,GACrB,OAAOrO,KAAKuE,KAAM,WACjBmd,EAASnF,OAAQvc,KAAMqO,QAM1BpL,GAAOsC,OAAQ,CACd2W,MAAO,SAAUzY,EAAM9B,EAAM2f,GAC5B,IAAIpF,EAEJ,GAAKzY,EAYJ,OAXA9B,GAASA,GAAQ,MAAS,QAC1Bua,EAAQuF,EAASzd,IAAKP,EAAM9B,GAGvB2f,KACEpF,GAASnW,MAAMC,QAASsb,GAC7BpF,EAAQuF,EAASxB,OAAQxc,EAAM9B,EAAMsB,GAAOgE,UAAWqa,IAEvDpF,EAAMtb,KAAM0gB,IAGPpF,GAAS,IAIlBkG,QAAS,SAAU3e,EAAM9B,GACxBA,EAAOA,GAAQ,KAEf,IAAIua,EAAQjZ,GAAOiZ,MAAOzY,EAAM9B,GAC/B0gB,EAAcnG,EAAM3Y,OACpBH,EAAK8Y,EAAM3N,QACX+T,EAAQrf,GAAOsf,YAAa9e,EAAM9B,GAMvB,eAAPyB,IACJA,EAAK8Y,EAAM3N,QACX8T,KAGIjf,IAIU,OAATzB,GACJua,EAAMsG,QAAS,qBAITF,EAAMG,KACbrf,EAAG3C,KAAMgD,EApBF,WACNR,GAAOmf,QAAS3e,EAAM9B,IAmBF2gB,KAGhBD,GAAeC,GACpBA,EAAMhO,MAAM8H,QAKdmG,YAAa,SAAU9e,EAAM9B,GAC5B,IAAI0M,EAAM1M,EAAO,aACjB,OAAO8f,EAASzd,IAAKP,EAAM4K,IAASoT,EAASxB,OAAQxc,EAAM4K,EAAK,CAC/DiG,MAAOrR,GAAOwY,UAAW,eAAgBvB,IAAK,WAC7CuH,EAASlF,OAAQ9Y,EAAM,CAAE9B,EAAO,QAAS0M,WAM7CpL,GAAOG,GAAGmC,OAAQ,CACjB2W,MAAO,SAAUva,EAAM2f,GACtB,IAAIoB,EAAS,EAQb,MANqB,iBAAT/gB,IACX2f,EAAO3f,EACPA,EAAO,KACP+gB,KAGIhe,UAAUnB,OAASmf,EAChBzf,GAAOiZ,MAAOlc,KAAM,GAAK2B,QAGjBsE,IAATqb,EACNthB,KACAA,KAAKuE,KAAM,WACV,IAAI2X,EAAQjZ,GAAOiZ,MAAOlc,KAAM2B,EAAM2f,GAGtCre,GAAOsf,YAAaviB,KAAM2B,GAEZ,OAATA,GAAgC,eAAfua,EAAO,IAC5BjZ,GAAOmf,QAASpiB,KAAM2B,MAI1BygB,QAAS,SAAUzgB,GAClB,OAAO3B,KAAKuE,KAAM,WACjBtB,GAAOmf,QAASpiB,KAAM2B,MAGxBghB,WAAY,SAAUhhB,GACrB,OAAO3B,KAAKkc,MAAOva,GAAQ,KAAM,KAKlC2Z,QAAS,SAAU3Z,EAAML,GACxB,IAAIshB,EACHC,EAAQ,EACRC,EAAQ7f,GAAO0Z,WACfpM,EAAWvQ,KACXmC,EAAInC,KAAKuD,OACT2X,EAAU,aACC2H,GACTC,EAAM1E,YAAa7N,EAAU,CAAEA,KAIb,iBAAT5O,IACXL,EAAMK,EACNA,OAAOsE,GAERtE,EAAOA,GAAQ,KAEf,MAAQQ,KACPygB,EAAMnB,EAASzd,IAAKuM,EAAUpO,GAAKR,EAAO,gBAC9BihB,EAAItO,QACfuO,IACAD,EAAItO,MAAM4F,IAAKgB,IAIjB,OADAA,IACO4H,EAAMxH,QAASha,MAGxB,IAAIyhB,EAAO,sCAA0CC,OAEjDC,EAAU,IAAIza,OAAQ,iBAAmBua,EAAO,cAAe,KAG/DG,EAAY,CAAE,MAAO,QAAS,SAAU,QAExCnc,EAAkBnH,EAASmH,gBAI1Boc,EAAa,SAAU1f,GACzB,OAAOR,GAAOwF,SAAUhF,EAAK+D,cAAe/D,IAE7C2f,EAAW,CAAEA,UAAU,GAOnBrc,EAAgBsc,cACpBF,EAAa,SAAU1f,GACtB,OAAOR,GAAOwF,SAAUhF,EAAK+D,cAAe/D,IAC3CA,EAAK4f,YAAaD,KAAe3f,EAAK+D,gBAG1C,IAAI8b,GAAqB,SAAU7f,EAAMiL,GAOvC,MAA8B,UAH9BjL,EAAOiL,GAAMjL,GAGD8f,MAAMC,SACM,KAAvB/f,EAAK8f,MAAMC,SAMXL,EAAY1f,IAEsB,SAAlCR,GAAOwgB,IAAKhgB,EAAM,YAKrB,SAASigB,GAAWjgB,EAAM8d,EAAMoC,EAAYC,GAC3C,IAAIC,EAAUC,EACbC,EAAgB,GAChBC,EAAeJ,EACd,WACC,OAAOA,EAAMhK,OAEd,WACC,OAAO3W,GAAOwgB,IAAKhgB,EAAM8d,EAAM,KAEjC0C,EAAUD,IACVE,EAAOP,GAAcA,EAAY,KAAS1gB,GAAOkhB,UAAW5C,GAAS,GAAK,MAG1E6C,EAAgB3gB,EAAKlC,WAClB0B,GAAOkhB,UAAW5C,IAAmB,OAAT2C,IAAkBD,IAChDhB,EAAQ5V,KAAMpK,GAAOwgB,IAAKhgB,EAAM8d,IAElC,GAAK6C,GAAiBA,EAAe,KAAQF,EAAO,CAInDD,GAAoB,EAGpBC,EAAOA,GAAQE,EAAe,GAG9BA,GAAiBH,GAAW,EAE5B,MAAQF,IAIP9gB,GAAOsgB,MAAO9f,EAAM8d,EAAM6C,EAAgBF,IACnC,EAAIJ,IAAY,GAAMA,EAAQE,IAAiBC,GAAW,MAAW,IAC3EF,EAAgB,GAEjBK,GAAgCN,EAIjCM,GAAgC,EAChCnhB,GAAOsgB,MAAO9f,EAAM8d,EAAM6C,EAAgBF,GAG1CP,EAAaA,GAAc,GAgB5B,OAbKA,IACJS,GAAiBA,IAAkBH,GAAW,EAG9CJ,EAAWF,EAAY,GACtBS,GAAkBT,EAAY,GAAM,GAAMA,EAAY,IACrDA,EAAY,GACTC,IACJA,EAAMM,KAAOA,EACbN,EAAMtR,MAAQ8R,EACdR,EAAMxe,IAAMye,IAGPA,EAIR,IAAIQ,GAAoB,GAyBxB,SAASC,GAAU/T,EAAUgU,GAO5B,IANA,IAAIf,EAAS/f,EAxBcA,EACvBiT,EACHxU,EACAsB,EACAggB,EAqBAgB,EAAS,GACTxK,EAAQ,EACRzW,EAASgN,EAAShN,OAGXyW,EAAQzW,EAAQyW,KACvBvW,EAAO8M,EAAUyJ,IACNuJ,QAIXC,EAAU/f,EAAK8f,MAAMC,QAChBe,GAKa,SAAZf,IACJgB,EAAQxK,GAAUyH,EAASzd,IAAKP,EAAM,YAAe,KAC/C+gB,EAAQxK,KACbvW,EAAK8f,MAAMC,QAAU,KAGK,KAAvB/f,EAAK8f,MAAMC,SAAkBF,GAAoB7f,KACrD+gB,EAAQxK,IA7CVwJ,EAFAthB,EADGwU,OAAAA,EACHxU,GAF0BuB,EAiDaA,GA/C5B+D,cACXhE,EAAWC,EAAKD,UAChBggB,EAAUa,GAAmB7gB,MAM9BkT,EAAOxU,EAAIuiB,KAAK9hB,YAAaT,EAAII,cAAekB,IAChDggB,EAAUvgB,GAAOwgB,IAAK/M,EAAM,WAE5BA,EAAK9T,WAAWC,YAAa6T,GAEZ,SAAZ8M,IACJA,EAAU,SAEXa,GAAmB7gB,GAAaggB,MAkCb,SAAZA,IACJgB,EAAQxK,GAAU,OAGlByH,EAASJ,IAAK5d,EAAM,UAAW+f,KAMlC,IAAMxJ,EAAQ,EAAGA,EAAQzW,EAAQyW,IACR,MAAnBwK,EAAQxK,KACZzJ,EAAUyJ,GAAQuJ,MAAMC,QAAUgB,EAAQxK,IAI5C,OAAOzJ,EAGRtN,GAAOG,GAAGmC,OAAQ,CACjBgf,KAAM,WACL,OAAOD,GAAUtkB,MAAM,IAExB0kB,KAAM,WACL,OAAOJ,GAAUtkB,OAElB2kB,OAAQ,SAAU7H,GACjB,MAAsB,kBAAVA,EACJA,EAAQ9c,KAAKukB,OAASvkB,KAAK0kB,OAG5B1kB,KAAKuE,KAAM,WACZ+e,GAAoBtjB,MACxBiD,GAAQjD,MAAOukB,OAEfthB,GAAQjD,MAAO0kB,YAKnB,IAUEE,GACA1U,GAXE2U,GAAiB,wBAEjBC,GAAW,iCAEXC,GAAc,qCAMhBH,GADchlB,EAASolB,yBACRriB,YAAa/C,EAAS0C,cAAe,SACpD4N,GAAQtQ,EAAS0C,cAAe,UAM3BG,aAAc,OAAQ,SAC5ByN,GAAMzN,aAAc,UAAW,WAC/ByN,GAAMzN,aAAc,OAAQ,KAE5BmiB,GAAIjiB,YAAauN,IAIjB9O,GAAQ6jB,WAAaL,GAAIM,WAAW,GAAOA,WAAW,GAAOvS,UAAUwB,QAIvEyQ,GAAIzU,UAAY,yBAChB/O,GAAQ+jB,iBAAmBP,GAAIM,WAAW,GAAOvS,UAAUyS,aAK3DR,GAAIzU,UAAY,oBAChB/O,GAAQikB,SAAWT,GAAIjS,UAKxB,IAAI2S,GAAU,CAKbC,MAAO,CAAE,EAAG,UAAW,YACvBC,IAAK,CAAE,EAAG,oBAAqB,uBAC/BC,GAAI,CAAE,EAAG,iBAAkB,oBAC3BC,GAAI,CAAE,EAAG,qBAAsB,yBAE/BC,SAAU,CAAE,EAAG,GAAI,KAYpB,SAASC,GAAQziB,EAAS6M,GAIzB,IAAI5L,EAYJ,OATCA,EAD4C,oBAAjCjB,EAAQqK,qBACbrK,EAAQqK,qBAAsBwC,GAAO,KAEI,oBAA7B7M,EAAQ4K,iBACpB5K,EAAQ4K,iBAAkBiC,GAAO,KAGjC,QAGM/J,IAAR+J,GAAqBA,GAAOxM,GAAUL,EAAS6M,GAC5C/M,GAAOoB,MAAO,CAAElB,GAAWiB,GAG5BA,EAKR,SAASyhB,GAAe1hB,EAAO2hB,GAI9B,IAHA,IAAI3jB,EAAI,EACP2X,EAAI3V,EAAMZ,OAEHpB,EAAI2X,EAAG3X,IACdsf,EAASJ,IACRld,EAAOhC,GACP,cACC2jB,GAAerE,EAASzd,IAAK8hB,EAAa3jB,GAAK,eA1CnDmjB,GAAQS,MAAQT,GAAQU,MAAQV,GAAQW,SAAWX,GAAQY,QAAUZ,GAAQC,MAC7ED,GAAQa,GAAKb,GAAQI,GAGftkB,GAAQikB,SACbC,GAAQc,SAAWd,GAAQD,OAAS,CAAE,EAAG,+BAAgC,cA2C1E,IAAIgB,GAAQ,YAEZ,SAASC,GAAeniB,EAAOhB,EAASojB,EAASC,EAAWC,GAO3D,IANA,IAAIhjB,EAAMmf,EAAK5S,EAAK0W,EAAMC,EAAUxhB,EACnCyhB,EAAWzjB,EAAQ6hB,yBACnB6B,EAAQ,GACR1kB,EAAI,EACJ2X,EAAI3V,EAAMZ,OAEHpB,EAAI2X,EAAG3X,IAGd,IAFAsB,EAAOU,EAAOhC,KAEQ,IAATsB,EAGZ,GAAwB,WAAnBX,EAAQW,GAIZR,GAAOoB,MAAOwiB,EAAOpjB,EAAKlC,SAAW,CAAEkC,GAASA,QAG1C,GAAM4iB,GAAM5e,KAAMhE,GAIlB,CACNmf,EAAMA,GAAOgE,EAASjkB,YAAaQ,EAAQb,cAAe,QAG1D0N,GAAQ8U,GAASzX,KAAM5J,IAAU,CAAE,GAAI,KAAQ,GAAIE,cACnD+iB,EAAOpB,GAAStV,IAASsV,GAAQK,SACjC/C,EAAIzS,UAAYuW,EAAM,GAAMzjB,GAAO6jB,cAAerjB,GAASijB,EAAM,GAGjEvhB,EAAIuhB,EAAM,GACV,MAAQvhB,IACPyd,EAAMA,EAAIjQ,UAKX1P,GAAOoB,MAAOwiB,EAAOjE,EAAIlW,aAGzBkW,EAAMgE,EAASlU,YAGX5L,YAAc,QAzBlB+f,EAAMjmB,KAAMuC,EAAQ4jB,eAAgBtjB,IA+BvCmjB,EAAS9f,YAAc,GAEvB3E,EAAI,EACJ,MAAUsB,EAAOojB,EAAO1kB,KAGvB,GAAKqkB,IAAkD,EAArCvjB,GAAOkE,QAAS1D,EAAM+iB,GAClCC,GACJA,EAAQ7lB,KAAM6C,QAgBhB,GAXAkjB,EAAWxD,EAAY1f,GAGvBmf,EAAMgD,GAAQgB,EAASjkB,YAAac,GAAQ,UAGvCkjB,GACJd,GAAejD,GAIX2D,EAAU,CACdphB,EAAI,EACJ,MAAU1B,EAAOmf,EAAKzd,KAChB4f,GAAYtd,KAAMhE,EAAK9B,MAAQ,KACnC4kB,EAAQ3lB,KAAM6C,GAMlB,OAAOmjB,EAIR,IAAII,GAAiB,sBAErB,SAASC,KACR,OAAO,EAGR,SAASC,KACR,OAAO,EAGR,SAASC,GAAI1jB,EAAM2jB,EAAOlkB,EAAUoe,EAAMle,EAAIikB,GAC7C,IAAIC,EAAQ3lB,EAGZ,GAAsB,iBAAVylB,EAAqB,CAShC,IAAMzlB,IANmB,iBAAbuB,IAGXoe,EAAOA,GAAQpe,EACfA,OAAW+C,GAEEmhB,EACbD,GAAI1jB,EAAM9B,EAAMuB,EAAUoe,EAAM8F,EAAOzlB,GAAQ0lB,GAEhD,OAAO5jB,EAsBR,GAnBa,MAAR6d,GAAsB,MAANle,GAGpBA,EAAKF,EACLoe,EAAOpe,OAAW+C,GACD,MAAN7C,IACc,iBAAbF,GAGXE,EAAKke,EACLA,OAAOrb,IAIP7C,EAAKke,EACLA,EAAOpe,EACPA,OAAW+C,KAGD,IAAP7C,EACJA,EAAK8jB,QACC,IAAM9jB,EACZ,OAAOK,EAeR,OAZa,IAAR4jB,IACJC,EAASlkB,GACTA,EAAK,SAAUmkB,GAId,OADAtkB,KAASukB,IAAKD,GACPD,EAAO3mB,MAAOX,KAAM0E,aAIzBsD,KAAOsf,EAAOtf,OAAUsf,EAAOtf,KAAO/E,GAAO+E,SAE1CvE,EAAKc,KAAM,WACjBtB,GAAOskB,MAAMrN,IAAKla,KAAMonB,EAAOhkB,EAAIke,EAAMpe,KA+a3C,SAASukB,GAAgB/Y,EAAI/M,EAAM+lB,GAG5BA,GAQNjG,EAASJ,IAAK3S,EAAI/M,GAAM,GACxBsB,GAAOskB,MAAMrN,IAAKxL,EAAI/M,EAAM,CAC3B0F,WAAW,EACXyW,QAAS,SAAUyJ,GAClB,IAAI3V,EACH+V,EAAQlG,EAASzd,IAAKhE,KAAM2B,GAE7B,GAAyB,EAAlB4lB,EAAMK,WAAmB5nB,KAAM2B,IAGrC,GAAMgmB,GA4BQ1kB,GAAOskB,MAAMxJ,QAASpc,IAAU,IAAKkmB,cAClDN,EAAMO,uBAhBN,GARAH,EAAQrnB,GAAMG,KAAMiE,WACpB+c,EAASJ,IAAKrhB,KAAM2B,EAAMgmB,GAG1B3nB,KAAM2B,KACNiQ,EAAS6P,EAASzd,IAAKhE,KAAM2B,GAC7B8f,EAASJ,IAAKrhB,KAAM2B,GAAM,GAErBgmB,IAAU/V,EAMd,OAHA2V,EAAMQ,2BACNR,EAAMS,iBAECpW,OAeE+V,IAGXlG,EAASJ,IAAKrhB,KAAM2B,EAAMsB,GAAOskB,MAAMU,QACtCN,EAAO,GACPA,EAAMrnB,MAAO,GACbN,OAWDunB,EAAMO,kBACNP,EAAMW,8BAAgCjB,aArENhhB,IAA7Bwb,EAASzd,IAAK0K,EAAI/M,IACtBsB,GAAOskB,MAAMrN,IAAKxL,EAAI/M,EAAMslB,IA5a/BhkB,GAAOskB,MAAQ,CAEd/nB,OAAQ,GAER0a,IAAK,SAAUzW,EAAM2jB,EAAOtJ,EAASwD,EAAMpe,GAE1C,IAAIilB,EAAaC,EAAaxF,EAC7ByF,EAAQC,EAAGC,EACXxK,EAASyK,EAAU7mB,EAAM8mB,EAAYC,EACrCC,EAAWlH,EAASzd,IAAKP,GAG1B,GAAMsd,EAAYtd,GAAlB,CAKKqa,EAAQA,UAEZA,GADAqK,EAAcrK,GACQA,QACtB5a,EAAWilB,EAAYjlB,UAKnBA,GACJD,GAAO4J,KAAK2D,gBAAiBzJ,EAAiB7D,GAIzC4a,EAAQ9V,OACb8V,EAAQ9V,KAAO/E,GAAO+E,SAIfqgB,EAASM,EAASN,UACzBA,EAASM,EAASN,OAASjoB,OAAOwoB,OAAQ,QAEnCR,EAAcO,EAASE,UAC9BT,EAAcO,EAASE,OAAS,SAAUlc,GAIzC,MAAyB,oBAAX1J,IAA0BA,GAAOskB,MAAMuB,YAAcnc,EAAEhL,KACpEsB,GAAOskB,MAAMwB,SAASpoB,MAAO8C,EAAMiB,gBAAcuB,IAMpDqiB,GADAlB,GAAUA,GAAS,IAAKna,MAAO2N,IAAmB,CAAE,KAC1CrX,OACV,MAAQ+kB,IAEP3mB,EAAO+mB,GADP9F,EAAMoE,GAAe3Z,KAAM+Z,EAAOkB,KAAS,IACpB,GACvBG,GAAe7F,EAAK,IAAO,IAAKza,MAAO,KAAM9C,OAGvC1D,IAKNoc,EAAU9a,GAAOskB,MAAMxJ,QAASpc,IAAU,GAG1CA,GAASuB,EAAW6a,EAAQ8J,aAAe9J,EAAQiL,WAAcrnB,EAGjEoc,EAAU9a,GAAOskB,MAAMxJ,QAASpc,IAAU,GAG1C4mB,EAAYtlB,GAAOsC,OAAQ,CAC1B5D,KAAMA,EACN+mB,SAAUA,EACVpH,KAAMA,EACNxD,QAASA,EACT9V,KAAM8V,EAAQ9V,KACd9E,SAAUA,EACVqI,aAAcrI,GAAYD,GAAOqN,KAAKrD,MAAM1B,aAAa9D,KAAMvE,GAC/DmE,UAAWohB,EAAW3a,KAAM,MAC1Bqa,IAGKK,EAAWH,EAAQ1mB,OAC1B6mB,EAAWH,EAAQ1mB,GAAS,IACnBsnB,cAAgB,EAGnBlL,EAAQmL,QACiD,IAA9DnL,EAAQmL,MAAMzoB,KAAMgD,EAAM6d,EAAMmH,EAAYL,IAEvC3kB,EAAK8L,kBACT9L,EAAK8L,iBAAkB5N,EAAMymB,IAK3BrK,EAAQ7D,MACZ6D,EAAQ7D,IAAIzZ,KAAMgD,EAAM8kB,GAElBA,EAAUzK,QAAQ9V,OACvBugB,EAAUzK,QAAQ9V,KAAO8V,EAAQ9V,OAK9B9E,EACJslB,EAASljB,OAAQkjB,EAASS,gBAAiB,EAAGV,GAE9CC,EAAS5nB,KAAM2nB,GAIhBtlB,GAAOskB,MAAM/nB,OAAQmC,IAAS,KAMhC4a,OAAQ,SAAU9Y,EAAM2jB,EAAOtJ,EAAS5a,EAAUimB,GAEjD,IAAIhkB,EAAGikB,EAAWxG,EACjByF,EAAQC,EAAGC,EACXxK,EAASyK,EAAU7mB,EAAM8mB,EAAYC,EACrCC,EAAWlH,EAASD,QAAS/d,IAAUge,EAASzd,IAAKP,GAEtD,GAAMklB,IAAeN,EAASM,EAASN,QAAvC,CAMAC,GADAlB,GAAUA,GAAS,IAAKna,MAAO2N,IAAmB,CAAE,KAC1CrX,OACV,MAAQ+kB,IAMP,GAJA3mB,EAAO+mB,GADP9F,EAAMoE,GAAe3Z,KAAM+Z,EAAOkB,KAAS,IACpB,GACvBG,GAAe7F,EAAK,IAAO,IAAKza,MAAO,KAAM9C,OAGvC1D,EAAN,CAOAoc,EAAU9a,GAAOskB,MAAMxJ,QAASpc,IAAU,GAE1C6mB,EAAWH,EADX1mB,GAASuB,EAAW6a,EAAQ8J,aAAe9J,EAAQiL,WAAcrnB,IACpC,GAC7BihB,EAAMA,EAAK,IACV,IAAIpa,OAAQ,UAAYigB,EAAW3a,KAAM,iBAAoB,WAG9Dsb,EAAYjkB,EAAIqjB,EAASjlB,OACzB,MAAQ4B,IACPojB,EAAYC,EAAUrjB,IAEfgkB,GAAeT,IAAaH,EAAUG,UACzC5K,GAAWA,EAAQ9V,OAASugB,EAAUvgB,MACtC4a,IAAOA,EAAInb,KAAM8gB,EAAUlhB,YAC3BnE,GAAYA,IAAaqlB,EAAUrlB,WACxB,OAAbA,IAAqBqlB,EAAUrlB,YAChCslB,EAASljB,OAAQH,EAAG,GAEfojB,EAAUrlB,UACdslB,EAASS,gBAELlL,EAAQxB,QACZwB,EAAQxB,OAAO9b,KAAMgD,EAAM8kB,IAOzBa,IAAcZ,EAASjlB,SACrBwa,EAAQsL,WACkD,IAA/DtL,EAAQsL,SAAS5oB,KAAMgD,EAAMglB,EAAYE,EAASE,SAElD5lB,GAAOqmB,YAAa7lB,EAAM9B,EAAMgnB,EAASE,eAGnCR,EAAQ1mB,SA1Cf,IAAMA,KAAQ0mB,EACbplB,GAAOskB,MAAMhL,OAAQ9Y,EAAM9B,EAAOylB,EAAOkB,GAAKxK,EAAS5a,GAAU,GA8C/DD,GAAO2D,cAAeyhB,IAC1B5G,EAASlF,OAAQ9Y,EAAM,mBAIzBslB,SAAU,SAAUQ,GAEnB,IAAIpnB,EAAGgD,EAAGf,EAAK4O,EAASuV,EAAWiB,EAClC3W,EAAO,IAAI9M,MAAOrB,UAAUnB,QAG5BgkB,EAAQtkB,GAAOskB,MAAMkC,IAAKF,GAE1Bf,GACC/G,EAASzd,IAAKhE,KAAM,WAAcI,OAAOwoB,OAAQ,OAC/CrB,EAAM5lB,OAAU,GACnBoc,EAAU9a,GAAOskB,MAAMxJ,QAASwJ,EAAM5lB,OAAU,GAKjD,IAFAkR,EAAM,GAAM0U,EAENplB,EAAI,EAAGA,EAAIuC,UAAUnB,OAAQpB,IAClC0Q,EAAM1Q,GAAMuC,UAAWvC,GAMxB,GAHAolB,EAAMmC,eAAiB1pB,MAGlB+d,EAAQ4L,cAA2D,IAA5C5L,EAAQ4L,YAAYlpB,KAAMT,KAAMunB,GAA5D,CAKAiC,EAAevmB,GAAOskB,MAAMiB,SAAS/nB,KAAMT,KAAMunB,EAAOiB,GAGxDrmB,EAAI,EACJ,OAAU6Q,EAAUwW,EAAcrnB,QAAYolB,EAAMqC,uBAAyB,CAC5ErC,EAAMsC,cAAgB7W,EAAQvP,KAE9B0B,EAAI,EACJ,OAAUojB,EAAYvV,EAAQwV,SAAUrjB,QACtCoiB,EAAMW,gCAIDX,EAAMuC,aAAsC,IAAxBvB,EAAUlhB,YACnCkgB,EAAMuC,WAAWriB,KAAM8gB,EAAUlhB,aAEjCkgB,EAAMgB,UAAYA,EAClBhB,EAAMjG,KAAOiH,EAAUjH,UAKVrb,KAHb7B,IAAUnB,GAAOskB,MAAMxJ,QAASwK,EAAUG,WAAc,IAAKG,QAC5DN,EAAUzK,SAAUnd,MAAOqS,EAAQvP,KAAMoP,MAGT,KAAzB0U,EAAM3V,OAASxN,KACrBmjB,EAAMS,iBACNT,EAAMO,oBAYX,OAJK/J,EAAQgM,cACZhM,EAAQgM,aAAatpB,KAAMT,KAAMunB,GAG3BA,EAAM3V,SAGd4W,SAAU,SAAUjB,EAAOiB,GAC1B,IAAIrmB,EAAGomB,EAAWnf,EAAK4gB,EAAiBC,EACvCT,EAAe,GACfP,EAAgBT,EAASS,cACzBrP,EAAM2N,EAAM3hB,OAGb,GAAKqjB,GAIJrP,EAAIrY,YAOc,UAAfgmB,EAAM5lB,MAAoC,GAAhB4lB,EAAM9S,QAEnC,KAAQmF,IAAQ5Z,KAAM4Z,EAAMA,EAAIhX,YAAc5C,KAI7C,GAAsB,IAAjB4Z,EAAIrY,WAAoC,UAAfgmB,EAAM5lB,OAAqC,IAAjBiY,EAAIrN,UAAsB,CAGjF,IAFAyd,EAAkB,GAClBC,EAAmB,GACb9nB,EAAI,EAAGA,EAAI8mB,EAAe9mB,SAME8D,IAA5BgkB,EAFL7gB,GAHAmf,EAAYC,EAAUrmB,IAGNe,SAAW,OAG1B+mB,EAAkB7gB,GAAQmf,EAAUhd,cACC,EAApCtI,GAAQmG,EAAKpJ,MAAOga,MAAOJ,GAC3B3W,GAAO4J,KAAMzD,EAAKpJ,KAAM,KAAM,CAAE4Z,IAAQrW,QAErC0mB,EAAkB7gB,IACtB4gB,EAAgBppB,KAAM2nB,GAGnByB,EAAgBzmB,QACpBimB,EAAa5oB,KAAM,CAAE6C,KAAMmW,EAAK4O,SAAUwB,IAY9C,OALApQ,EAAM5Z,KACDipB,EAAgBT,EAASjlB,QAC7BimB,EAAa5oB,KAAM,CAAE6C,KAAMmW,EAAK4O,SAAUA,EAASloB,MAAO2oB,KAGpDO,GAGRU,QAAS,SAAUxmB,EAAMymB,GACxB/pB,OAAO+gB,eAAgBle,GAAOmnB,MAAMxmB,UAAWF,EAAM,CACpD2mB,YAAY,EACZjJ,cAAc,EAEdpd,IAAK3C,EAAY8oB,GAChB,WACC,GAAKnqB,KAAKsqB,cACT,OAAOH,EAAMnqB,KAAKsqB,gBAGpB,WACC,GAAKtqB,KAAKsqB,cACT,OAAOtqB,KAAKsqB,cAAe5mB,IAI9B2d,IAAK,SAAUtZ,GACd3H,OAAO+gB,eAAgBnhB,KAAM0D,EAAM,CAClC2mB,YAAY,EACZjJ,cAAc,EACdmJ,UAAU,EACVxiB,MAAOA,QAMX0hB,IAAK,SAAUa,GACd,OAAOA,EAAernB,GAAOiD,SAC5BokB,EACA,IAAIrnB,GAAOmnB,MAAOE,IAGpBvM,QAAS,CACRyM,KAAM,CAGLC,UAAU,GAEXC,MAAO,CAGNxB,MAAO,SAAU5H,GAIhB,IAAI5S,EAAK1O,MAAQshB,EAWjB,OARKuD,GAAepd,KAAMiH,EAAG/M,OAC5B+M,EAAGgc,OAASlnB,GAAUkL,EAAI,UAG1B+Y,GAAgB/Y,EAAI,SAAS,IAIvB,GAERuZ,QAAS,SAAU3G,GAIlB,IAAI5S,EAAK1O,MAAQshB,EAUjB,OAPKuD,GAAepd,KAAMiH,EAAG/M,OAC5B+M,EAAGgc,OAASlnB,GAAUkL,EAAI,UAE1B+Y,GAAgB/Y,EAAI,UAId,GAKRiX,SAAU,SAAU4B,GACnB,IAAI3hB,EAAS2hB,EAAM3hB,OACnB,OAAOif,GAAepd,KAAM7B,EAAOjE,OAClCiE,EAAO8kB,OAASlnB,GAAUoC,EAAQ,UAClC6b,EAASzd,IAAK4B,EAAQ,UACtBpC,GAAUoC,EAAQ,OAIrB+kB,aAAc,CACbZ,aAAc,SAAUxC,QAIDthB,IAAjBshB,EAAM3V,QAAwB2V,EAAM+C,gBACxC/C,EAAM+C,cAAcM,YAAcrD,EAAM3V,YA0F7C3O,GAAOqmB,YAAc,SAAU7lB,EAAM9B,EAAMknB,GAGrCplB,EAAKmc,qBACTnc,EAAKmc,oBAAqBje,EAAMknB,IAIlC5lB,GAAOmnB,MAAQ,SAAUxoB,EAAKipB,GAG7B,KAAQ7qB,gBAAgBiD,GAAOmnB,OAC9B,OAAO,IAAInnB,GAAOmnB,MAAOxoB,EAAKipB,GAI1BjpB,GAAOA,EAAID,MACf3B,KAAKsqB,cAAgB1oB,EACrB5B,KAAK2B,KAAOC,EAAID,KAIhB3B,KAAK8qB,mBAAqBlpB,EAAImpB,uBACH9kB,IAAzBrE,EAAImpB,mBAGgB,IAApBnpB,EAAIgpB,YACL3D,GACAC,GAKDlnB,KAAK4F,OAAWhE,EAAIgE,QAAkC,IAAxBhE,EAAIgE,OAAOrE,SACxCK,EAAIgE,OAAOhD,WACXhB,EAAIgE,OAEL5F,KAAK6pB,cAAgBjoB,EAAIioB,cACzB7pB,KAAKgrB,cAAgBppB,EAAIopB,eAIzBhrB,KAAK2B,KAAOC,EAIRipB,GACJ5nB,GAAOsC,OAAQvF,KAAM6qB,GAItB7qB,KAAKirB,UAAYrpB,GAAOA,EAAIqpB,WAAaC,KAAKC,MAG9CnrB,KAAMiD,GAAOiD,UAAY,GAK1BjD,GAAOmnB,MAAMxmB,UAAY,CACxBE,YAAab,GAAOmnB,MACpBU,mBAAoB5D,GACpB0C,qBAAsB1C,GACtBgB,8BAA+BhB,GAC/BkE,aAAa,EAEbpD,eAAgB,WACf,IAAIrb,EAAI3M,KAAKsqB,cAEbtqB,KAAK8qB,mBAAqB7D,GAErBta,IAAM3M,KAAKorB,aACfze,EAAEqb,kBAGJF,gBAAiB,WAChB,IAAInb,EAAI3M,KAAKsqB,cAEbtqB,KAAK4pB,qBAAuB3C,GAEvBta,IAAM3M,KAAKorB,aACfze,EAAEmb,mBAGJC,yBAA0B,WACzB,IAAIpb,EAAI3M,KAAKsqB,cAEbtqB,KAAKkoB,8BAAgCjB,GAEhCta,IAAM3M,KAAKorB,aACfze,EAAEob,2BAGH/nB,KAAK8nB,oBAKP7kB,GAAOsB,KAAM,CACZ8mB,QAAQ,EACRC,SAAS,EACTC,YAAY,EACZC,gBAAgB,EAChBC,SAAS,EACTC,QAAQ,EACRC,YAAY,EACZC,SAAS,EACTC,OAAO,EACPC,OAAO,EACPC,UAAU,EACVC,MAAM,EACNC,QAAQ,EACRjqB,MAAM,EACNkqB,UAAU,EACV7d,KAAK,EACL8d,SAAS,EACT1X,QAAQ,EACR2X,SAAS,EACTC,SAAS,EACTC,SAAS,EACTC,SAAS,EACTC,SAAS,EACTC,WAAW,EACXC,aAAa,EACbC,SAAS,EACTC,SAAS,EACTC,eAAe,EACfC,WAAW,EACXC,SAAS,EACTC,OAAO,GACL/pB,GAAOskB,MAAM2C,SAEhBjnB,GAAOsB,KAAM,CAAEoP,MAAO,UAAWsZ,KAAM,YAAc,SAAUtrB,EAAMkmB,GAEpE,SAASqF,EAAoB3D,GAC5B,GAAK3pB,EAASutB,aAAe,CAS5B,IAAItE,EAASpH,EAASzd,IAAKhE,KAAM,UAChCunB,EAAQtkB,GAAOskB,MAAMkC,IAAKF,GAC3BhC,EAAM5lB,KAA4B,YAArB4nB,EAAY5nB,KAAqB,QAAU,OACxD4lB,EAAM6D,aAAc,EAGpBvC,EAAQU,GAMHhC,EAAM3hB,SAAW2hB,EAAMsC,eAK3BhB,EAAQtB,QAMTtkB,GAAOskB,MAAM6F,SAAUvF,EAAc0B,EAAY3jB,OAChD3C,GAAOskB,MAAMkC,IAAKF,IAIrBtmB,GAAOskB,MAAMxJ,QAASpc,GAAS,CAG9BunB,MAAO,WAEN,IAAImE,EAOJ,GAFA5F,GAAgBznB,KAAM2B,GAAM,IAEvB/B,EAASutB,aAcb,OAAO,GARPE,EAAW5L,EAASzd,IAAKhE,KAAM6nB,KAE9B7nB,KAAKuP,iBAAkBsY,EAAcqF,GAEtCzL,EAASJ,IAAKrhB,KAAM6nB,GAAgBwF,GAAY,GAAM,IAOxDpF,QAAS,WAMR,OAHAR,GAAgBznB,KAAM2B,IAGf,GAGR0nB,SAAU,WACT,IAAIgE,EAEJ,IAAKztB,EAASutB,aAWb,OAAO,GAVPE,EAAW5L,EAASzd,IAAKhE,KAAM6nB,GAAiB,GAK/CpG,EAASJ,IAAKrhB,KAAM6nB,EAAcwF,IAHlCrtB,KAAK4f,oBAAqBiI,EAAcqF,GACxCzL,EAASlF,OAAQvc,KAAM6nB,KAa1BlC,SAAU,SAAU4B,GACnB,OAAO9F,EAASzd,IAAKujB,EAAM3hB,OAAQjE,IAGpCkmB,aAAcA,GAef5kB,GAAOskB,MAAMxJ,QAAS8J,GAAiB,CACtCqB,MAAO,WAIN,IAAIhnB,EAAMlC,KAAKwH,eAAiBxH,KAAKJ,UAAYI,KAChDstB,EAAa1tB,EAASutB,aAAentB,KAAOkC,EAC5CmrB,EAAW5L,EAASzd,IAAKspB,EAAYzF,GAMhCwF,IACAztB,EAASutB,aACbntB,KAAKuP,iBAAkBsY,EAAcqF,GAErChrB,EAAIqN,iBAAkB5N,EAAMurB,GAAoB,IAGlDzL,EAASJ,IAAKiM,EAAYzF,GAAgBwF,GAAY,GAAM,IAE7DhE,SAAU,WACT,IAAInnB,EAAMlC,KAAKwH,eAAiBxH,KAAKJ,UAAYI,KAChDstB,EAAa1tB,EAASutB,aAAentB,KAAOkC,EAC5CmrB,EAAW5L,EAASzd,IAAKspB,EAAYzF,GAAiB,EAEjDwF,EAQL5L,EAASJ,IAAKiM,EAAYzF,EAAcwF,IAPnCztB,EAASutB,aACbntB,KAAK4f,oBAAqBiI,EAAcqF,GAExChrB,EAAI0d,oBAAqBje,EAAMurB,GAAoB,GAEpDzL,EAASlF,OAAQ+Q,EAAYzF,QAgBjC5kB,GAAOsB,KAAM,CACZgpB,WAAY,YACZC,WAAY,WACZC,aAAc,cACdC,aAAc,cACZ,SAAUC,EAAMlE,GAClBxmB,GAAOskB,MAAMxJ,QAAS4P,GAAS,CAC9B9F,aAAc4B,EACdT,SAAUS,EAEVZ,OAAQ,SAAUtB,GACjB,IAAInjB,EAEHwpB,EAAUrG,EAAMyD,cAChBzC,EAAYhB,EAAMgB,UASnB,OALMqF,IAAaA,IANT5tB,MAMgCiD,GAAOwF,SANvCzI,KAMyD4tB,MAClErG,EAAM5lB,KAAO4mB,EAAUG,SACvBtkB,EAAMmkB,EAAUzK,QAAQnd,MAAOX,KAAM0E,WACrC6iB,EAAM5lB,KAAO8nB,GAEPrlB,MAKVnB,GAAOG,GAAGmC,OAAQ,CAEjB4hB,GAAI,SAAUC,EAAOlkB,EAAUoe,EAAMle,GACpC,OAAO+jB,GAAInnB,KAAMonB,EAAOlkB,EAAUoe,EAAMle,IAEzCikB,IAAK,SAAUD,EAAOlkB,EAAUoe,EAAMle,GACrC,OAAO+jB,GAAInnB,KAAMonB,EAAOlkB,EAAUoe,EAAMle,EAAI,IAE7CokB,IAAK,SAAUJ,EAAOlkB,EAAUE,GAC/B,IAAImlB,EAAW5mB,EACf,GAAKylB,GAASA,EAAMY,gBAAkBZ,EAAMmB,UAW3C,OARAA,EAAYnB,EAAMmB,UAClBtlB,GAAQmkB,EAAMsC,gBAAiBlC,IAC9Be,EAAUlhB,UACTkhB,EAAUG,SAAW,IAAMH,EAAUlhB,UACrCkhB,EAAUG,SACXH,EAAUrlB,SACVqlB,EAAUzK,SAEJ9d,KAER,GAAsB,iBAAVonB,EAAqB,CAGhC,IAAMzlB,KAAQylB,EACbpnB,KAAKwnB,IAAK7lB,EAAMuB,EAAUkkB,EAAOzlB,IAElC,OAAO3B,KAWR,OATkB,IAAbkD,GAA0C,mBAAbA,IAGjCE,EAAKF,EACLA,OAAW+C,IAEA,IAAP7C,IACJA,EAAK8jB,IAEClnB,KAAKuE,KAAM,WACjBtB,GAAOskB,MAAMhL,OAAQvc,KAAMonB,EAAOhkB,EAAIF,QAMzC,IAKC2qB,GAAe,wBAGfC,GAAW,oCAEXC,GAAe,6BAGhB,SAASC,GAAoBvqB,EAAMiX,GAClC,OAAKlX,GAAUC,EAAM,UACpBD,GAA+B,KAArBkX,EAAQnZ,SAAkBmZ,EAAUA,EAAQhI,WAAY,OAE3DzP,GAAQQ,GAAO+V,SAAU,SAAW,IAGrC/V,EAIR,SAASwqB,GAAexqB,GAEvB,OADAA,EAAK9B,MAAyC,OAAhC8B,EAAKjB,aAAc,SAAsB,IAAMiB,EAAK9B,KAC3D8B,EAER,SAASyqB,GAAezqB,GAOvB,MAN2C,WAApCA,EAAK9B,MAAQ,IAAKrB,MAAO,EAAG,GAClCmD,EAAK9B,KAAO8B,EAAK9B,KAAKrB,MAAO,GAE7BmD,EAAKwK,gBAAiB,QAGhBxK,EAGR,SAAS0qB,GAAgBvsB,EAAKwsB,GAC7B,IAAIjsB,EAAG2X,EAAGnY,EAAgB0sB,EAAUC,EAAUjG,EAE9C,GAAuB,IAAlB+F,EAAK7sB,SAAV,CAKA,GAAKkgB,EAASD,QAAS5f,KAEtBymB,EADW5G,EAASzd,IAAKpC,GACPymB,QAKjB,IAAM1mB,KAFN8f,EAASlF,OAAQ6R,EAAM,iBAET/F,EACb,IAAMlmB,EAAI,EAAG2X,EAAIuO,EAAQ1mB,GAAO4B,OAAQpB,EAAI2X,EAAG3X,IAC9Cc,GAAOskB,MAAMrN,IAAKkU,EAAMzsB,EAAM0mB,EAAQ1mB,GAAQQ,IAO7Cuf,EAASF,QAAS5f,KACtBysB,EAAW3M,EAASzB,OAAQre,GAC5B0sB,EAAWrrB,GAAOsC,OAAQ,GAAI8oB,GAE9B3M,EAASL,IAAK+M,EAAME,KAkBtB,SAASC,GAAUC,EAAY3b,EAAMrO,EAAUiiB,GAG9C5T,EAAOtS,EAAMsS,GAEb,IAAI+T,EAAUjiB,EAAO4hB,EAASkI,EAAYxsB,EAAMC,EAC/CC,EAAI,EACJ2X,EAAI0U,EAAWjrB,OACfmrB,EAAW5U,EAAI,EACf/R,EAAQ8K,EAAM,GACd8b,EAAkBttB,EAAY0G,GAG/B,GAAK4mB,GACG,EAAJ7U,GAA0B,iBAAV/R,IAChB3G,GAAQ6jB,YAAc6I,GAASrmB,KAAMM,GACxC,OAAOymB,EAAWjqB,KAAM,SAAUyV,GACjC,IAAId,EAAOsV,EAAW5pB,GAAIoV,GACrB2U,IACJ9b,EAAM,GAAM9K,EAAMtH,KAAMT,KAAMga,EAAOd,EAAK0V,SAE3CL,GAAUrV,EAAMrG,EAAMrO,EAAUiiB,KAIlC,GAAK3M,IAEJnV,GADAiiB,EAAWN,GAAezT,EAAM2b,EAAY,GAAIhnB,eAAe,EAAOgnB,EAAY/H,IACjE/T,WAEmB,IAA/BkU,EAASla,WAAWnJ,SACxBqjB,EAAWjiB,GAIPA,GAAS8hB,GAAU,CAOvB,IALAgI,GADAlI,EAAUtjB,GAAOwB,IAAKmhB,GAAQgB,EAAU,UAAYqH,KAC/B1qB,OAKbpB,EAAI2X,EAAG3X,IACdF,EAAO2kB,EAEFzkB,IAAMusB,IACVzsB,EAAOgB,GAAO0C,MAAO1D,GAAM,GAAM,GAG5BwsB,GAIJxrB,GAAOoB,MAAOkiB,EAASX,GAAQ3jB,EAAM,YAIvCuC,EAAS/D,KAAM+tB,EAAYrsB,GAAKF,EAAME,GAGvC,GAAKssB,EAOJ,IANAvsB,EAAMqkB,EAASA,EAAQhjB,OAAS,GAAIiE,cAGpCvE,GAAOwB,IAAK8hB,EAAS2H,IAGf/rB,EAAI,EAAGA,EAAIssB,EAAYtsB,IAC5BF,EAAOskB,EAASpkB,GACX4iB,GAAYtd,KAAMxF,EAAKN,MAAQ,MAClC8f,EAASxB,OAAQhe,EAAM,eACxBgB,GAAOwF,SAAUvG,EAAKD,KAEjBA,EAAKL,KAA8C,YAArCK,EAAKN,MAAQ,IAAKgC,cAG/BV,GAAO4rB,WAAa5sB,EAAKH,UAC7BmB,GAAO4rB,SAAU5sB,EAAKL,IAAK,CAC1BC,MAAOI,EAAKJ,OAASI,EAAKO,aAAc,UACtCN,GASJH,EAASE,EAAK6E,YAAYT,QAAS0nB,GAAc,IAAM9rB,EAAMC,IAQnE,OAAOssB,EAGR,SAASjS,GAAQ9Y,EAAMP,EAAU4rB,GAKhC,IAJA,IAAI7sB,EACH4kB,EAAQ3jB,EAAWD,GAAO4M,OAAQ3M,EAAUO,GAASA,EACrDtB,EAAI,EAE4B,OAAvBF,EAAO4kB,EAAO1kB,IAAeA,IAChC2sB,GAA8B,IAAlB7sB,EAAKV,UACtB0B,GAAO8rB,UAAWnJ,GAAQ3jB,IAGtBA,EAAKW,aACJksB,GAAY3L,EAAYlhB,IAC5B4jB,GAAeD,GAAQ3jB,EAAM,WAE9BA,EAAKW,WAAWC,YAAaZ,IAI/B,OAAOwB,EAGRR,GAAOsC,OAAQ,CACduhB,cAAe,SAAU8H,GACxB,OAAOA,GAGRjpB,MAAO,SAAUlC,EAAMurB,EAAeC,GACrC,IAAI9sB,EAAG2X,EAAGoV,EAAaC,EA1INvtB,EAAKwsB,EACnB5qB,EA0IFmC,EAAQlC,EAAKyhB,WAAW,GACxBkK,EAASjM,EAAY1f,GAGtB,KAAMrC,GAAQ+jB,gBAAsC,IAAlB1hB,EAAKlC,UAAoC,KAAlBkC,EAAKlC,UAC3D0B,GAAOmE,SAAU3D,IAOnB,IAHA0rB,EAAevJ,GAAQjgB,GAGjBxD,EAAI,EAAG2X,GAFboV,EAActJ,GAAQniB,IAEOF,OAAQpB,EAAI2X,EAAG3X,IAvJ5BP,EAwJLstB,EAAa/sB,GAxJHisB,EAwJQe,EAAchtB,QAvJzCqB,EAGc,WAHdA,EAAW4qB,EAAK5qB,SAASG,gBAGAkhB,GAAepd,KAAM7F,EAAID,MACrDysB,EAAKja,QAAUvS,EAAIuS,QAGK,UAAb3Q,GAAqC,aAAbA,IACnC4qB,EAAKhJ,aAAexjB,EAAIwjB,cAoJxB,GAAK4J,EACJ,GAAKC,EAIJ,IAHAC,EAAcA,GAAetJ,GAAQniB,GACrC0rB,EAAeA,GAAgBvJ,GAAQjgB,GAEjCxD,EAAI,EAAG2X,EAAIoV,EAAY3rB,OAAQpB,EAAI2X,EAAG3X,IAC3CgsB,GAAgBe,EAAa/sB,GAAKgtB,EAAchtB,SAGjDgsB,GAAgB1qB,EAAMkC,GAWxB,OAL2B,GAD3BwpB,EAAevJ,GAAQjgB,EAAO,WACZpC,QACjBsiB,GAAesJ,GAAeC,GAAUxJ,GAAQniB,EAAM,WAIhDkC,GAGRopB,UAAW,SAAU5qB,GAKpB,IAJA,IAAImd,EAAM7d,EAAM9B,EACfoc,EAAU9a,GAAOskB,MAAMxJ,QACvB5b,EAAI,OAE6B8D,KAAxBxC,EAAOU,EAAOhC,IAAqBA,IAC5C,GAAK4e,EAAYtd,GAAS,CACzB,GAAO6d,EAAO7d,EAAMge,EAASvb,SAAc,CAC1C,GAAKob,EAAK+G,OACT,IAAM1mB,KAAQ2f,EAAK+G,OACbtK,EAASpc,GACbsB,GAAOskB,MAAMhL,OAAQ9Y,EAAM9B,GAI3BsB,GAAOqmB,YAAa7lB,EAAM9B,EAAM2f,EAAKuH,QAOxCplB,EAAMge,EAASvb,cAAYD,EAEvBxC,EAAMie,EAASxb,WAInBzC,EAAMie,EAASxb,cAAYD,OAOhChD,GAAOG,GAAGmC,OAAQ,CACjB8pB,OAAQ,SAAUnsB,GACjB,OAAOqZ,GAAQvc,KAAMkD,GAAU,IAGhCqZ,OAAQ,SAAUrZ,GACjB,OAAOqZ,GAAQvc,KAAMkD,IAGtBX,KAAM,SAAUwF,GACf,OAAOkY,EAAQjgB,KAAM,SAAU+H,GAC9B,YAAiB9B,IAAV8B,EACN9E,GAAOV,KAAMvC,MACbA,KAAKsU,QAAQ/P,KAAM,WACK,IAAlBvE,KAAKuB,UAAoC,KAAlBvB,KAAKuB,UAAqC,IAAlBvB,KAAKuB,WACxDvB,KAAK8G,YAAciB,MAGpB,KAAMA,EAAOrD,UAAUnB,SAG3B+rB,OAAQ,WACP,OAAOf,GAAUvuB,KAAM0E,UAAW,SAAUjB,GACpB,IAAlBzD,KAAKuB,UAAoC,KAAlBvB,KAAKuB,UAAqC,IAAlBvB,KAAKuB,UAC3CysB,GAAoBhuB,KAAMyD,GAChCd,YAAac,MAKvB8rB,QAAS,WACR,OAAOhB,GAAUvuB,KAAM0E,UAAW,SAAUjB,GAC3C,GAAuB,IAAlBzD,KAAKuB,UAAoC,KAAlBvB,KAAKuB,UAAqC,IAAlBvB,KAAKuB,SAAiB,CACzE,IAAIqE,EAASooB,GAAoBhuB,KAAMyD,GACvCmC,EAAO4pB,aAAc/rB,EAAMmC,EAAO8M,gBAKrC+c,OAAQ,WACP,OAAOlB,GAAUvuB,KAAM0E,UAAW,SAAUjB,GACtCzD,KAAK4C,YACT5C,KAAK4C,WAAW4sB,aAAc/rB,EAAMzD,SAKvC0vB,MAAO,WACN,OAAOnB,GAAUvuB,KAAM0E,UAAW,SAAUjB,GACtCzD,KAAK4C,YACT5C,KAAK4C,WAAW4sB,aAAc/rB,EAAMzD,KAAKuU,gBAK5CD,MAAO,WAIN,IAHA,IAAI7Q,EACHtB,EAAI,EAE2B,OAAtBsB,EAAOzD,KAAMmC,IAAeA,IACd,IAAlBsB,EAAKlC,WAGT0B,GAAO8rB,UAAWnJ,GAAQniB,GAAM,IAGhCA,EAAKqD,YAAc,IAIrB,OAAO9G,MAGR2F,MAAO,SAAUqpB,EAAeC,GAI/B,OAHAD,EAAiC,MAAjBA,GAAgCA,EAChDC,EAAyC,MAArBA,EAA4BD,EAAgBC,EAEzDjvB,KAAKyE,IAAK,WAChB,OAAOxB,GAAO0C,MAAO3F,KAAMgvB,EAAeC,MAI5CL,KAAM,SAAU7mB,GACf,OAAOkY,EAAQjgB,KAAM,SAAU+H,GAC9B,IAAItE,EAAOzD,KAAM,IAAO,GACvBmC,EAAI,EACJ2X,EAAI9Z,KAAKuD,OAEV,QAAe0C,IAAV8B,GAAyC,IAAlBtE,EAAKlC,SAChC,OAAOkC,EAAK0M,UAIb,GAAsB,iBAAVpI,IAAuB8lB,GAAapmB,KAAMM,KACpDud,IAAWR,GAASzX,KAAMtF,IAAW,CAAE,GAAI,KAAQ,GAAIpE,eAAkB,CAE1EoE,EAAQ9E,GAAO6jB,cAAe/e,GAE9B,IACC,KAAQ5F,EAAI2X,EAAG3X,IAIS,KAHvBsB,EAAOzD,KAAMmC,IAAO,IAGVZ,WACT0B,GAAO8rB,UAAWnJ,GAAQniB,GAAM,IAChCA,EAAK0M,UAAYpI,GAInBtE,EAAO,EAGN,MAAQkJ,KAGNlJ,GACJzD,KAAKsU,QAAQgb,OAAQvnB,IAEpB,KAAMA,EAAOrD,UAAUnB,SAG3BosB,YAAa,WACZ,IAAIlJ,EAAU,GAGd,OAAO8H,GAAUvuB,KAAM0E,UAAW,SAAUjB,GAC3C,IAAI8O,EAASvS,KAAK4C,WAEbK,GAAOkE,QAASnH,KAAMymB,GAAY,IACtCxjB,GAAO8rB,UAAWnJ,GAAQ5lB,OACrBuS,GACJA,EAAOqd,aAAcnsB,EAAMzD,QAK3BymB,MAILxjB,GAAOsB,KAAM,CACZsrB,SAAU,SACVC,UAAW,UACXN,aAAc,SACdO,YAAa,QACbC,WAAY,eACV,SAAUtsB,EAAMusB,GAClBhtB,GAAOG,GAAIM,GAAS,SAAUR,GAO7B,IANA,IAAIiB,EACHC,EAAM,GACN8rB,EAASjtB,GAAQC,GACjB2B,EAAOqrB,EAAO3sB,OAAS,EACvBpB,EAAI,EAEGA,GAAK0C,EAAM1C,IAClBgC,EAAQhC,IAAM0C,EAAO7E,KAAOA,KAAK2F,OAAO,GACxC1C,GAAQitB,EAAQ/tB,IAAO8tB,GAAY9rB,GAInCvD,EAAKD,MAAOyD,EAAKD,EAAMH,OAGxB,OAAOhE,KAAKkE,UAAWE,MAGzB,IAAI+rB,GAAY,IAAI3nB,OAAQ,KAAOua,EAAO,kBAAmB,KAEzDqN,GAAc,MAGdC,GAAY,SAAU5sB,GAKxB,IAAIuoB,EAAOvoB,EAAK+D,cAAc6H,YAM9B,OAJM2c,GAASA,EAAKsE,SACnBtE,EAAOjsB,IAGDisB,EAAKuE,iBAAkB9sB,IAG5B+sB,GAAO,SAAU/sB,EAAM+B,EAAShB,GACnC,IAAIJ,EAAKV,EACR+sB,EAAM,GAGP,IAAM/sB,KAAQ8B,EACbirB,EAAK/sB,GAASD,EAAK8f,MAAO7f,GAC1BD,EAAK8f,MAAO7f,GAAS8B,EAAS9B,GAM/B,IAAMA,KAHNU,EAAMI,EAAS/D,KAAMgD,GAGP+B,EACb/B,EAAK8f,MAAO7f,GAAS+sB,EAAK/sB,GAG3B,OAAOU,GAIJssB,GAAY,IAAIloB,OAAQ0a,EAAUpV,KAAM,KAAO,KAiJnD,SAAS6iB,GAAQltB,EAAMC,EAAMktB,GAC5B,IAAIC,EAAOC,EAAUC,EAAU3sB,EAC9B4sB,EAAeZ,GAAY3oB,KAAM/D,GAMjC6f,EAAQ9f,EAAK8f,MAoEd,OAlEAqN,EAAWA,GAAYP,GAAW5sB,MAgBjCW,EAAMwsB,EAASK,iBAAkBvtB,IAAUktB,EAAUltB,GAEhDstB,GAAgB5sB,IAkBpBA,EAAMA,EAAIiC,QAASkC,GAAU,YAAUtC,GAG3B,KAAR7B,GAAe+e,EAAY1f,KAC/BW,EAAMnB,GAAOsgB,MAAO9f,EAAMC,KAQrBtC,GAAQ8vB,kBAAoBf,GAAU1oB,KAAMrD,IAASssB,GAAUjpB,KAAM/D,KAG1EmtB,EAAQtN,EAAMsN,MACdC,EAAWvN,EAAMuN,SACjBC,EAAWxN,EAAMwN,SAGjBxN,EAAMuN,SAAWvN,EAAMwN,SAAWxN,EAAMsN,MAAQzsB,EAChDA,EAAMwsB,EAASC,MAGftN,EAAMsN,MAAQA,EACdtN,EAAMuN,SAAWA,EACjBvN,EAAMwN,SAAWA,SAIJ9qB,IAAR7B,EAINA,EAAM,GACNA,EAIF,SAAS+sB,GAAcC,EAAaC,GAGnC,MAAO,CACNrtB,IAAK,WACJ,IAAKotB,IASL,OAASpxB,KAAKgE,IAAMqtB,GAAS1wB,MAAOX,KAAM0E,kBALlC1E,KAAKgE,OA3OhB,WAIC,SAASstB,IAGR,GAAM1M,EAAN,CAIA2M,EAAUhO,MAAMiO,QAAU,+EAE1B5M,EAAIrB,MAAMiO,QACT,4HAGDzqB,EAAgBpE,YAAa4uB,GAAY5uB,YAAaiiB,GAEtD,IAAI6M,EAAW1xB,GAAOwwB,iBAAkB3L,GACxC8M,EAAoC,OAAjBD,EAASniB,IAG5BqiB,EAAsE,KAA9CC,EAAoBH,EAASI,YAIrDjN,EAAIrB,MAAMuO,MAAQ,MAClBC,EAA6D,KAAzCH,EAAoBH,EAASK,OAIjDE,EAAgE,KAAzCJ,EAAoBH,EAASZ,OAMpDjM,EAAIrB,MAAM0O,SAAW,WACrBC,EAAiE,KAA9CN,EAAoBhN,EAAIuN,YAAc,GAEzDprB,EAAgBlE,YAAa0uB,GAI7B3M,EAAM,MAGP,SAASgN,EAAoBQ,GAC5B,OAAOjsB,KAAKksB,MAAOC,WAAYF,IAGhC,IAAIV,EAAkBM,EAAsBE,EAAkBH,EAC7DQ,EAAyBZ,EACzBJ,EAAY3xB,EAAS0C,cAAe,OACpCsiB,EAAMhlB,EAAS0C,cAAe,OAGzBsiB,EAAIrB,QAMVqB,EAAIrB,MAAMiP,eAAiB,cAC3B5N,EAAIM,WAAW,GAAO3B,MAAMiP,eAAiB,GAC7CpxB,GAAQqxB,gBAA+C,gBAA7B7N,EAAIrB,MAAMiP,eAEpCvvB,GAAOsC,OAAQnE,GAAS,CACvBsxB,kBAAmB,WAElB,OADApB,IACOU,GAERd,eAAgB,WAEf,OADAI,IACOS,GAERY,cAAe,WAEd,OADArB,IACOI,GAERkB,mBAAoB,WAEnB,OADAtB,IACOK,GAERkB,cAAe,WAEd,OADAvB,IACOY,GAYRY,qBAAsB,WACrB,IAAIC,EAAOtN,EAAIuN,EAASC,EAmCxB,OAlCgC,MAA3BV,IACJQ,EAAQnzB,EAAS0C,cAAe,SAChCmjB,EAAK7lB,EAAS0C,cAAe,MAC7B0wB,EAAUpzB,EAAS0C,cAAe,OAElCywB,EAAMxP,MAAMiO,QAAU,2DACtB/L,EAAGlC,MAAMiO,QAAU,0CAKnB/L,EAAGlC,MAAM2P,OAAS,MAClBF,EAAQzP,MAAM2P,OAAS,MAQvBF,EAAQzP,MAAMC,QAAU,QAExBzc,EACEpE,YAAaowB,GACbpwB,YAAa8iB,GACb9iB,YAAaqwB,GAEfC,EAAUlzB,GAAOwwB,iBAAkB9K,GACnC8M,EAA4BY,SAAUF,EAAQC,OAAQ,IACrDC,SAAUF,EAAQG,eAAgB,IAClCD,SAAUF,EAAQI,kBAAmB,MAAW5N,EAAG6N,aAEpDvsB,EAAgBlE,YAAakwB,IAEvBR,MAvIV,GAsPA,IAAIgB,GAAc,CAAE,SAAU,MAAO,MACpCC,GAAa5zB,EAAS0C,cAAe,OAAQihB,MAC7CkQ,GAAc,GAkBf,SAASC,GAAehwB,GACvB,IAAIiwB,EAAQ1wB,GAAO2wB,SAAUlwB,IAAU+vB,GAAa/vB,GAEpD,OAAKiwB,IAGAjwB,KAAQ8vB,GACL9vB,EAED+vB,GAAa/vB,GAxBrB,SAAyBA,GAGxB,IAAImwB,EAAUnwB,EAAM,GAAIkd,cAAgBld,EAAKpD,MAAO,GACnD6B,EAAIoxB,GAAYhwB,OAEjB,MAAQpB,IAEP,IADAuB,EAAO6vB,GAAapxB,GAAM0xB,KACbL,GACZ,OAAO9vB,EAeoBowB,CAAgBpwB,IAAUA,GAIxD,IAKCqwB,GAAe,4BACfC,GAAU,CAAE/B,SAAU,WAAYgC,WAAY,SAAUzQ,QAAS,SACjE0Q,GAAqB,CACpBC,cAAe,IACfC,WAAY,OAGd,SAASC,GAAmBrvB,EAAO+C,EAAOusB,GAIzC,IAAI1sB,EAAUqb,EAAQ5V,KAAMtF,GAC5B,OAAOH,EAGNzB,KAAKouB,IAAK,EAAG3sB,EAAS,IAAQ0sB,GAAY,KAAU1sB,EAAS,IAAO,MACpEG,EAGF,SAASysB,GAAoB/wB,EAAMgxB,EAAWC,EAAKC,EAAaC,EAAQC,GACvE,IAAI1yB,EAAkB,UAAdsyB,EAAwB,EAAI,EACnCK,EAAQ,EACRC,EAAQ,EACRC,EAAc,EAGf,GAAKN,KAAUC,EAAc,SAAW,WACvC,OAAO,EAGR,KAAQxyB,EAAI,EAAGA,GAAK,EAKN,WAARuyB,IACJM,GAAe/xB,GAAOwgB,IAAKhgB,EAAMixB,EAAMxR,EAAW/gB,IAAK,EAAMyyB,IAIxDD,GAmBQ,YAARD,IACJK,GAAS9xB,GAAOwgB,IAAKhgB,EAAM,UAAYyf,EAAW/gB,IAAK,EAAMyyB,IAIjD,WAARF,IACJK,GAAS9xB,GAAOwgB,IAAKhgB,EAAM,SAAWyf,EAAW/gB,GAAM,SAAS,EAAMyyB,MAtBvEG,GAAS9xB,GAAOwgB,IAAKhgB,EAAM,UAAYyf,EAAW/gB,IAAK,EAAMyyB,GAGhD,YAARF,EACJK,GAAS9xB,GAAOwgB,IAAKhgB,EAAM,SAAWyf,EAAW/gB,GAAM,SAAS,EAAMyyB,GAItEE,GAAS7xB,GAAOwgB,IAAKhgB,EAAM,SAAWyf,EAAW/gB,GAAM,SAAS,EAAMyyB,IAoCzE,OAhBMD,GAA8B,GAAfE,IAIpBE,GAAS5uB,KAAKouB,IAAK,EAAGpuB,KAAK8uB,KAC1BxxB,EAAM,SAAWgxB,EAAW,GAAI7T,cAAgB6T,EAAUn0B,MAAO,IACjEu0B,EACAE,EACAD,EACA,MAIM,GAGDC,EAAQC,EAGhB,SAASE,GAAkBzxB,EAAMgxB,EAAWK,GAG3C,IAAIF,EAASvE,GAAW5sB,GAKvBkxB,IADmBvzB,GAAQsxB,qBAAuBoC,IAEE,eAAnD7xB,GAAOwgB,IAAKhgB,EAAM,aAAa,EAAOmxB,GACvCO,EAAmBR,EAEnBvyB,EAAMuuB,GAAQltB,EAAMgxB,EAAWG,GAC/BQ,EAAa,SAAWX,EAAW,GAAI7T,cAAgB6T,EAAUn0B,MAAO,GAIzE,GAAK6vB,GAAU1oB,KAAMrF,GAAQ,CAC5B,IAAM0yB,EACL,OAAO1yB,EAERA,EAAM,OAyCP,QAlCQhB,GAAQsxB,qBAAuBiC,IAMrCvzB,GAAQ0xB,wBAA0BtvB,GAAUC,EAAM,OAI3C,SAARrB,IAICkwB,WAAYlwB,IAA0D,WAAjDa,GAAOwgB,IAAKhgB,EAAM,WAAW,EAAOmxB,KAG1DnxB,EAAK4xB,iBAAiB9xB,SAEtBoxB,EAAiE,eAAnD1xB,GAAOwgB,IAAKhgB,EAAM,aAAa,EAAOmxB,IAKpDO,EAAmBC,KAAc3xB,KAEhCrB,EAAMqB,EAAM2xB,MAKdhzB,EAAMkwB,WAAYlwB,IAAS,GAI1BoyB,GACC/wB,EACAgxB,EACAK,IAAWH,EAAc,SAAW,WACpCQ,EACAP,EAGAxyB,GAEE,KAwTL,SAASkzB,GAAO7xB,EAAM+B,EAAS+b,EAAMnc,EAAKmwB,GACzC,OAAO,IAAID,GAAM1xB,UAAUP,KAAMI,EAAM+B,EAAS+b,EAAMnc,EAAKmwB,GAtT5DtyB,GAAOsC,OAAQ,CAIdiwB,SAAU,CACTC,QAAS,CACRzxB,IAAK,SAAUP,EAAMmtB,GACpB,GAAKA,EAAW,CAGf,IAAIxsB,EAAMusB,GAAQltB,EAAM,WACxB,MAAe,KAARW,EAAa,IAAMA,MAO9B+f,UAAW,CACVuR,yBAAyB,EACzBC,aAAa,EACbC,kBAAkB,EAClBC,aAAa,EACbC,UAAU,EACVC,YAAY,EACZ3B,YAAY,EACZ4B,UAAU,EACVC,YAAY,EACZC,eAAe,EACfC,iBAAiB,EACjBC,SAAS,EACTC,YAAY,EACZC,cAAc,EACdC,YAAY,EACZd,SAAS,EACTe,OAAO,EACPC,SAAS,EACT3S,OAAO,EACP4S,QAAQ,EACRC,QAAQ,EACRC,MAAM,EAGNC,aAAa,EACbC,cAAc,EACdC,aAAa,EACbC,kBAAkB,EAClBC,eAAe,GAKhBrD,SAAU,GAGVrQ,MAAO,SAAU9f,EAAMC,EAAMqE,EAAO+sB,GAGnC,GAAMrxB,GAA0B,IAAlBA,EAAKlC,UAAoC,IAAlBkC,EAAKlC,UAAmBkC,EAAK8f,MAAlE,CAKA,IAAInf,EAAKzC,EAAM2gB,EACd4U,EAAWrW,EAAWnd,GACtBstB,EAAeZ,GAAY3oB,KAAM/D,GACjC6f,EAAQ9f,EAAK8f,MAad,GARMyN,IACLttB,EAAOgwB,GAAewD,IAIvB5U,EAAQrf,GAAOuyB,SAAU9xB,IAAUT,GAAOuyB,SAAU0B,QAGrCjxB,IAAV8B,EA0CJ,OAAKua,GAAS,QAASA,QACwBrc,KAA5C7B,EAAMke,EAAMte,IAAKP,GAAM,EAAOqxB,IAEzB1wB,EAIDmf,EAAO7f,GA7CA,YAHd/B,SAAcoG,KAGc3D,EAAM6e,EAAQ5V,KAAMtF,KAAa3D,EAAK,KACjE2D,EAAQ2b,GAAWjgB,EAAMC,EAAMU,GAG/BzC,EAAO,UAIM,MAAToG,GAAiBA,GAAUA,IAOlB,WAATpG,GAAsBqvB,IAC1BjpB,GAAS3D,GAAOA,EAAK,KAASnB,GAAOkhB,UAAW+S,GAAa,GAAK,OAI7D91B,GAAQqxB,iBAA6B,KAAV1qB,GAAiD,IAAjCrE,EAAK7C,QAAS,gBAC9D0iB,EAAO7f,GAAS,WAIX4e,GAAY,QAASA,QACsBrc,KAA9C8B,EAAQua,EAAMjB,IAAK5d,EAAMsE,EAAO+sB,MAE7B9D,EACJzN,EAAM4T,YAAazzB,EAAMqE,GAEzBwb,EAAO7f,GAASqE,MAkBpB0b,IAAK,SAAUhgB,EAAMC,EAAMoxB,EAAOF,GACjC,IAAIxyB,EAAK6B,EAAKqe,EACb4U,EAAWrW,EAAWnd,GA6BvB,OA5BgB0sB,GAAY3oB,KAAM/D,KAMjCA,EAAOgwB,GAAewD,KAIvB5U,EAAQrf,GAAOuyB,SAAU9xB,IAAUT,GAAOuyB,SAAU0B,KAGtC,QAAS5U,IACtBlgB,EAAMkgB,EAAMte,IAAKP,GAAM,EAAMqxB,SAIjB7uB,IAAR7D,IACJA,EAAMuuB,GAAQltB,EAAMC,EAAMkxB,IAId,WAARxyB,GAAoBsB,KAAQwwB,KAChC9xB,EAAM8xB,GAAoBxwB,IAIZ,KAAVoxB,GAAgBA,GACpB7wB,EAAMquB,WAAYlwB,IACD,IAAV0yB,GAAkBsC,SAAUnzB,GAAQA,GAAO,EAAI7B,GAGhDA,KAITa,GAAOsB,KAAM,CAAE,SAAU,SAAW,SAAU6D,EAAIqsB,GACjDxxB,GAAOuyB,SAAUf,GAAc,CAC9BzwB,IAAK,SAAUP,EAAMmtB,EAAUkE,GAC9B,GAAKlE,EAIJ,OAAOmD,GAAatsB,KAAMxE,GAAOwgB,IAAKhgB,EAAM,aAQxCA,EAAK4xB,iBAAiB9xB,QAAWE,EAAK4zB,wBAAwBxG,MAIjEqE,GAAkBzxB,EAAMgxB,EAAWK,GAHnCtE,GAAM/sB,EAAMuwB,GAAS,WACpB,OAAOkB,GAAkBzxB,EAAMgxB,EAAWK,MAM9CzT,IAAK,SAAU5d,EAAMsE,EAAO+sB,GAC3B,IAAIltB,EACHgtB,EAASvE,GAAW5sB,GAIpB6zB,GAAsBl2B,GAAQyxB,iBACT,aAApB+B,EAAO3C,SAIR0C,GADkB2C,GAAsBxC,IAEY,eAAnD7xB,GAAOwgB,IAAKhgB,EAAM,aAAa,EAAOmxB,GACvCN,EAAWQ,EACVN,GACC/wB,EACAgxB,EACAK,EACAH,EACAC,GAED,EAqBF,OAjBKD,GAAe2C,IACnBhD,GAAYnuB,KAAK8uB,KAChBxxB,EAAM,SAAWgxB,EAAW,GAAI7T,cAAgB6T,EAAUn0B,MAAO,IACjEgyB,WAAYsC,EAAQH,IACpBD,GAAoB/wB,EAAMgxB,EAAW,UAAU,EAAOG,GACtD,KAKGN,IAAc1sB,EAAUqb,EAAQ5V,KAAMtF,KACb,QAA3BH,EAAS,IAAO,QAElBnE,EAAK8f,MAAOkR,GAAc1sB,EAC1BA,EAAQ9E,GAAOwgB,IAAKhgB,EAAMgxB,IAGpBJ,GAAmB5wB,EAAMsE,EAAOusB,OAK1CrxB,GAAOuyB,SAAS3D,WAAaV,GAAc/vB,GAAQwxB,mBAClD,SAAUnvB,EAAMmtB,GACf,GAAKA,EACJ,OAAS0B,WAAY3B,GAAQltB,EAAM,gBAClCA,EAAK4zB,wBAAwBE,KAC5B/G,GAAM/sB,EAAM,CAAEouB,WAAY,GAAK,WAC9B,OAAOpuB,EAAK4zB,wBAAwBE,QAEnC,OAMPt0B,GAAOsB,KAAM,CACZizB,OAAQ,GACRC,QAAS,GACTC,OAAQ,SACN,SAAUC,EAAQC,GACpB30B,GAAOuyB,SAAUmC,EAASC,GAAW,CACpCC,OAAQ,SAAU9vB,GAOjB,IANA,IAAI5F,EAAI,EACP21B,EAAW,GAGXC,EAAyB,iBAAVhwB,EAAqBA,EAAMI,MAAO,KAAQ,CAAEJ,GAEpD5F,EAAI,EAAGA,IACd21B,EAAUH,EAASzU,EAAW/gB,GAAMy1B,GACnCG,EAAO51B,IAAO41B,EAAO51B,EAAI,IAAO41B,EAAO,GAGzC,OAAOD,IAIO,WAAXH,IACJ10B,GAAOuyB,SAAUmC,EAASC,GAASvW,IAAMgT,MAI3CpxB,GAAOG,GAAGmC,OAAQ,CACjBke,IAAK,SAAU/f,EAAMqE,GACpB,OAAOkY,EAAQjgB,KAAM,SAAUyD,EAAMC,EAAMqE,GAC1C,IAAI6sB,EAAQ1vB,EACXT,EAAM,GACNtC,EAAI,EAEL,GAAK4D,MAAMC,QAAStC,GAAS,CAI5B,IAHAkxB,EAASvE,GAAW5sB,GACpByB,EAAMxB,EAAKH,OAEHpB,EAAI+C,EAAK/C,IAChBsC,EAAKf,EAAMvB,IAAQc,GAAOwgB,IAAKhgB,EAAMC,EAAMvB,IAAK,EAAOyyB,GAGxD,OAAOnwB,EAGR,YAAiBwB,IAAV8B,EACN9E,GAAOsgB,MAAO9f,EAAMC,EAAMqE,GAC1B9E,GAAOwgB,IAAKhgB,EAAMC,IACjBA,EAAMqE,EAA0B,EAAnBrD,UAAUnB,aAQ5BN,GAAOqyB,MAAQA,IAET1xB,UAAY,CACjBE,YAAawxB,GACbjyB,KAAM,SAAUI,EAAM+B,EAAS+b,EAAMnc,EAAKmwB,EAAQrR,GACjDlkB,KAAKyD,KAAOA,EACZzD,KAAKuhB,KAAOA,EACZvhB,KAAKu1B,OAASA,GAAUtyB,GAAOsyB,OAAO5P,SACtC3lB,KAAKwF,QAAUA,EACfxF,KAAKsS,MAAQtS,KAAKmrB,IAAMnrB,KAAK4Z,MAC7B5Z,KAAKoF,IAAMA,EACXpF,KAAKkkB,KAAOA,IAAUjhB,GAAOkhB,UAAW5C,GAAS,GAAK,OAEvD3H,IAAK,WACJ,IAAI0I,EAAQgT,GAAM0C,UAAWh4B,KAAKuhB,MAElC,OAAOe,GAASA,EAAMte,IACrBse,EAAMte,IAAKhE,MACXs1B,GAAM0C,UAAUrS,SAAS3hB,IAAKhE,OAEhCi4B,IAAK,SAAUC,GACd,IAAIC,EACH7V,EAAQgT,GAAM0C,UAAWh4B,KAAKuhB,MAoB/B,OAlBKvhB,KAAKwF,QAAQ4yB,SACjBp4B,KAAKq4B,IAAMF,EAAQl1B,GAAOsyB,OAAQv1B,KAAKu1B,QACtC2C,EAASl4B,KAAKwF,QAAQ4yB,SAAWF,EAAS,EAAG,EAAGl4B,KAAKwF,QAAQ4yB,UAG9Dp4B,KAAKq4B,IAAMF,EAAQD,EAEpBl4B,KAAKmrB,KAAQnrB,KAAKoF,IAAMpF,KAAKsS,OAAU6lB,EAAQn4B,KAAKsS,MAE/CtS,KAAKwF,QAAQ8yB,MACjBt4B,KAAKwF,QAAQ8yB,KAAK73B,KAAMT,KAAKyD,KAAMzD,KAAKmrB,IAAKnrB,MAGzCsiB,GAASA,EAAMjB,IACnBiB,EAAMjB,IAAKrhB,MAEXs1B,GAAM0C,UAAUrS,SAAStE,IAAKrhB,MAExBA,QAIOqD,KAAKO,UAAY0xB,GAAM1xB,WAEvC0xB,GAAM0C,UAAY,CACjBrS,SAAU,CACT3hB,IAAK,SAAU4f,GACd,IAAIhS,EAIJ,OAA6B,IAAxBgS,EAAMngB,KAAKlC,UACa,MAA5BqiB,EAAMngB,KAAMmgB,EAAMrC,OAAoD,MAAlCqC,EAAMngB,KAAK8f,MAAOK,EAAMrC,MACrDqC,EAAMngB,KAAMmgB,EAAMrC,OAO1B3P,EAAS3O,GAAOwgB,IAAKG,EAAMngB,KAAMmgB,EAAMrC,KAAM,MAGhB,SAAX3P,EAAwBA,EAAJ,GAEvCyP,IAAK,SAAUuC,GAKT3gB,GAAOs1B,GAAGD,KAAM1U,EAAMrC,MAC1Bte,GAAOs1B,GAAGD,KAAM1U,EAAMrC,MAAQqC,GACK,IAAxBA,EAAMngB,KAAKlC,WACtB0B,GAAOuyB,SAAU5R,EAAMrC,OAC6B,MAAnDqC,EAAMngB,KAAK8f,MAAOmQ,GAAe9P,EAAMrC,OAGxCqC,EAAMngB,KAAMmgB,EAAMrC,MAASqC,EAAMuH,IAFjCloB,GAAOsgB,MAAOK,EAAMngB,KAAMmgB,EAAMrC,KAAMqC,EAAMuH,IAAMvH,EAAMM,UAU5CsU,UAAYlD,GAAM0C,UAAUS,WAAa,CACxDpX,IAAK,SAAUuC,GACTA,EAAMngB,KAAKlC,UAAYqiB,EAAMngB,KAAKb,aACtCghB,EAAMngB,KAAMmgB,EAAMrC,MAASqC,EAAMuH,OAKpCloB,GAAOsyB,OAAS,CACfmD,OAAQ,SAAUC,GACjB,OAAOA,GAERC,MAAO,SAAUD,GAChB,MAAO,GAAMxyB,KAAK0yB,IAAKF,EAAIxyB,KAAK2yB,IAAO,GAExCnT,SAAU,SAGX1iB,GAAOs1B,GAAKjD,GAAM1xB,UAAUP,KAG5BJ,GAAOs1B,GAAGD,KAAO,GAKjB,IACCS,GAAOC,GAkrBH9oB,GAEH+oB,GAnrBDC,GAAW,yBACXC,GAAO,cAER,SAASC,KACHJ,MACqB,IAApBp5B,EAASy5B,QAAoBt5B,GAAOu5B,sBACxCv5B,GAAOu5B,sBAAuBF,IAE9Br5B,GAAO2e,WAAY0a,GAAUn2B,GAAOs1B,GAAGgB,UAGxCt2B,GAAOs1B,GAAGiB,QAKZ,SAASC,KAIR,OAHA15B,GAAO2e,WAAY,WAClBqa,QAAQ9yB,IAEA8yB,GAAQ7N,KAAKC,MAIvB,SAASuO,GAAO/3B,EAAMg4B,GACrB,IAAI3M,EACH7qB,EAAI,EACJggB,EAAQ,CAAE+Q,OAAQvxB,GAKnB,IADAg4B,EAAeA,EAAe,EAAI,EAC1Bx3B,EAAI,EAAGA,GAAK,EAAIw3B,EAEvBxX,EAAO,UADP6K,EAAQ9J,EAAW/gB,KACSggB,EAAO,UAAY6K,GAAUrrB,EAO1D,OAJKg4B,IACJxX,EAAMsT,QAAUtT,EAAM0O,MAAQlvB,GAGxBwgB,EAGR,SAASyX,GAAa7xB,EAAOwZ,EAAMsY,GAKlC,IAJA,IAAIjW,EACH4K,GAAesL,GAAUC,SAAUxY,IAAU,IAAK7gB,OAAQo5B,GAAUC,SAAU,MAC9E/f,EAAQ,EACRzW,EAASirB,EAAWjrB,OACbyW,EAAQzW,EAAQyW,IACvB,GAAO4J,EAAQ4K,EAAYxU,GAAQvZ,KAAMo5B,EAAWtY,EAAMxZ,GAGzD,OAAO6b,EAsNV,SAASkW,GAAWr2B,EAAMu2B,EAAYx0B,GACrC,IAAIoM,EACHqoB,EACAjgB,EAAQ,EACRzW,EAASu2B,GAAUI,WAAW32B,OAC9ByZ,EAAW/Z,GAAO0Z,WAAWI,OAAQ,kBAG7Byc,EAAK/1B,OAEb+1B,EAAO,WACN,GAAKS,EACJ,OAAO,EAYR,IAVA,IAAIE,EAAcpB,IAASU,KAC1B3a,EAAY3Y,KAAKouB,IAAK,EAAGsF,EAAUO,UAAYP,EAAUzB,SAAW+B,GAKpEjC,EAAU,GADHpZ,EAAY+a,EAAUzB,UAAY,GAEzCpe,EAAQ,EACRzW,EAASs2B,EAAUQ,OAAO92B,OAEnByW,EAAQzW,EAAQyW,IACvB6f,EAAUQ,OAAQrgB,GAAQie,IAAKC,GAMhC,OAHAlb,EAASmB,WAAY1a,EAAM,CAAEo2B,EAAW3B,EAASpZ,IAG5CoZ,EAAU,GAAK30B,EACZub,GAIFvb,GACLyZ,EAASmB,WAAY1a,EAAM,CAAEo2B,EAAW,EAAG,IAI5C7c,EAASoB,YAAa3a,EAAM,CAAEo2B,KACvB,IAERA,EAAY7c,EAAS1B,QAAS,CAC7B7X,KAAMA,EACNonB,MAAO5nB,GAAOsC,OAAQ,GAAIy0B,GAC1BM,KAAMr3B,GAAOsC,QAAQ,EAAM,CAC1Bg1B,cAAe,GACfhF,OAAQtyB,GAAOsyB,OAAO5P,UACpBngB,GACHg1B,mBAAoBR,EACpBS,gBAAiBj1B,EACjB40B,UAAWrB,IAASU,KACpBrB,SAAU5yB,EAAQ4yB,SAClBiC,OAAQ,GACRT,YAAa,SAAUrY,EAAMnc,GAC5B,IAAIwe,EAAQ3gB,GAAOqyB,MAAO7xB,EAAMo2B,EAAUS,KAAM/Y,EAAMnc,EACrDy0B,EAAUS,KAAKC,cAAehZ,IAAUsY,EAAUS,KAAK/E,QAExD,OADAsE,EAAUQ,OAAOz5B,KAAMgjB,GAChBA,GAERnB,KAAM,SAAUiY,GACf,IAAI1gB,EAAQ,EAIXzW,EAASm3B,EAAUb,EAAUQ,OAAO92B,OAAS,EAC9C,GAAK02B,EACJ,OAAOj6B,KAGR,IADAi6B,GAAU,EACFjgB,EAAQzW,EAAQyW,IACvB6f,EAAUQ,OAAQrgB,GAAQie,IAAK,GAUhC,OANKyC,GACJ1d,EAASmB,WAAY1a,EAAM,CAAEo2B,EAAW,EAAG,IAC3C7c,EAASoB,YAAa3a,EAAM,CAAEo2B,EAAWa,KAEzC1d,EAASuB,WAAY9a,EAAM,CAAEo2B,EAAWa,IAElC16B,QAGT6qB,EAAQgP,EAAUhP,MAInB,KA/HD,SAAqBA,EAAO0P,GAC3B,IAAIvgB,EAAOtW,EAAM6xB,EAAQxtB,EAAOua,EAGhC,IAAMtI,KAAS6Q,EAed,GAbA0K,EAASgF,EADT72B,EAAOmd,EAAW7G,IAElBjS,EAAQ8iB,EAAO7Q,GACVjU,MAAMC,QAAS+B,KACnBwtB,EAASxtB,EAAO,GAChBA,EAAQ8iB,EAAO7Q,GAAUjS,EAAO,IAG5BiS,IAAUtW,IACdmnB,EAAOnnB,GAASqE,SACT8iB,EAAO7Q,KAGfsI,EAAQrf,GAAOuyB,SAAU9xB,KACX,WAAY4e,EAMzB,IAAMtI,KALNjS,EAAQua,EAAMuV,OAAQ9vB,UACf8iB,EAAOnnB,GAICqE,EACNiS,KAAS6Q,IAChBA,EAAO7Q,GAAUjS,EAAOiS,GACxBugB,EAAevgB,GAAUub,QAI3BgF,EAAe72B,GAAS6xB,EA6F1BoF,CAAY9P,EAAOgP,EAAUS,KAAKC,eAE1BvgB,EAAQzW,EAAQyW,IAEvB,GADApI,EAASkoB,GAAUI,WAAYlgB,GAAQvZ,KAAMo5B,EAAWp2B,EAAMonB,EAAOgP,EAAUS,MAM9E,OAJKj5B,EAAYuQ,EAAO6Q,QACvBxf,GAAOsf,YAAasX,EAAUp2B,KAAMo2B,EAAUS,KAAKpe,OAAQuG,KAC1D7Q,EAAO6Q,KAAKmY,KAAMhpB,IAEbA,EAyBT,OArBA3O,GAAOwB,IAAKomB,EAAO+O,GAAaC,GAE3Bx4B,EAAYw4B,EAAUS,KAAKhoB,QAC/BunB,EAAUS,KAAKhoB,MAAM7R,KAAMgD,EAAMo2B,GAIlCA,EACEtc,SAAUsc,EAAUS,KAAK/c,UACzBzT,KAAM+vB,EAAUS,KAAKxwB,KAAM+vB,EAAUS,KAAKO,UAC1Ctf,KAAMse,EAAUS,KAAK/e,MACrBwB,OAAQ8c,EAAUS,KAAKvd,QAEzB9Z,GAAOs1B,GAAGuC,MACT73B,GAAOsC,OAAQi0B,EAAM,CACpB/1B,KAAMA,EACNs3B,KAAMlB,EACN3d,MAAO2d,EAAUS,KAAKpe,SAIjB2d,EAGR52B,GAAO62B,UAAY72B,GAAOsC,OAAQu0B,GAAW,CAE5CC,SAAU,CACTiB,IAAK,CAAE,SAAUzZ,EAAMxZ,GACtB,IAAI6b,EAAQ5jB,KAAK45B,YAAarY,EAAMxZ,GAEpC,OADA2b,GAAWE,EAAMngB,KAAM8d,EAAM0B,EAAQ5V,KAAMtF,GAAS6b,GAC7CA,KAITqX,QAAS,SAAUpQ,EAAOrmB,GACpBnD,EAAYwpB,IAChBrmB,EAAWqmB,EACXA,EAAQ,CAAE,MAEVA,EAAQA,EAAM5d,MAAO2N,GAOtB,IAJA,IAAI2G,EACHvH,EAAQ,EACRzW,EAASsnB,EAAMtnB,OAERyW,EAAQzW,EAAQyW,IACvBuH,EAAOsJ,EAAO7Q,GACd8f,GAAUC,SAAUxY,GAASuY,GAAUC,SAAUxY,IAAU,GAC3DuY,GAAUC,SAAUxY,GAAOiB,QAAShe,IAItC01B,WAAY,CA3Wb,SAA2Bz2B,EAAMonB,EAAOyP,GACvC,IAAI/Y,EAAMxZ,EAAO4c,EAAQrC,EAAO4Y,EAASC,EAAWC,EAAgB5X,EACnE6X,EAAQ,UAAWxQ,GAAS,WAAYA,EACxCkQ,EAAO/6B,KACP2tB,EAAO,GACPpK,EAAQ9f,EAAK8f,MACb8V,EAAS51B,EAAKlC,UAAY+hB,GAAoB7f,GAC9C63B,EAAW7Z,EAASzd,IAAKP,EAAM,UA6BhC,IAAM8d,KA1BA+Y,EAAKpe,QAEa,OADvBoG,EAAQrf,GAAOsf,YAAa9e,EAAM,OACvB83B,WACVjZ,EAAMiZ,SAAW,EACjBL,EAAU5Y,EAAMhO,MAAM8H,KACtBkG,EAAMhO,MAAM8H,KAAO,WACZkG,EAAMiZ,UACXL,MAIH5Y,EAAMiZ,WAENR,EAAKhe,OAAQ,WAGZge,EAAKhe,OAAQ,WACZuF,EAAMiZ,WACAt4B,GAAOiZ,MAAOzY,EAAM,MAAOF,QAChC+e,EAAMhO,MAAM8H,YAOFyO,EAEb,GADA9iB,EAAQ8iB,EAAOtJ,GACV2X,GAASzxB,KAAMM,GAAU,CAG7B,UAFO8iB,EAAOtJ,GACdoD,EAASA,GAAoB,WAAV5c,EACdA,KAAYsxB,EAAS,OAAS,QAAW,CAI7C,GAAe,SAAVtxB,IAAoBuzB,QAAiCr1B,IAArBq1B,EAAU/Z,GAK9C,SAJA8X,GAAS,EAOX1L,EAAMpM,GAAS+Z,GAAYA,EAAU/Z,IAAUte,GAAOsgB,MAAO9f,EAAM8d,GAMrE,IADA4Z,GAAal4B,GAAO2D,cAAeikB,MAChB5nB,GAAO2D,cAAe+mB,GA8DzC,IAAMpM,KAzDD8Z,GAA2B,IAAlB53B,EAAKlC,WAMlB+4B,EAAKkB,SAAW,CAAEjY,EAAMiY,SAAUjY,EAAMkY,UAAWlY,EAAMmY,WAIlC,OADvBN,EAAiBE,GAAYA,EAAS9X,WAErC4X,EAAiB3Z,EAASzd,IAAKP,EAAM,YAGrB,UADjB+f,EAAUvgB,GAAOwgB,IAAKhgB,EAAM,cAEtB23B,EACJ5X,EAAU4X,GAIV9W,GAAU,CAAE7gB,IAAQ,GACpB23B,EAAiB33B,EAAK8f,MAAMC,SAAW4X,EACvC5X,EAAUvgB,GAAOwgB,IAAKhgB,EAAM,WAC5B6gB,GAAU,CAAE7gB,OAKG,WAAZ+f,GAAoC,iBAAZA,GAAgD,MAAlB4X,IACrB,SAAhCn4B,GAAOwgB,IAAKhgB,EAAM,WAGhB03B,IACLJ,EAAKjxB,KAAM,WACVyZ,EAAMC,QAAU4X,IAEM,MAAlBA,IACJ5X,EAAUD,EAAMC,QAChB4X,EAA6B,SAAZ5X,EAAqB,GAAKA,IAG7CD,EAAMC,QAAU,iBAKd8W,EAAKkB,WACTjY,EAAMiY,SAAW,SACjBT,EAAKhe,OAAQ,WACZwG,EAAMiY,SAAWlB,EAAKkB,SAAU,GAChCjY,EAAMkY,UAAYnB,EAAKkB,SAAU,GACjCjY,EAAMmY,UAAYpB,EAAKkB,SAAU,MAKnCL,GAAY,EACExN,EAGPwN,IACAG,EACC,WAAYA,IAChBjC,EAASiC,EAASjC,QAGnBiC,EAAW7Z,EAASxB,OAAQxc,EAAM,SAAU,CAAE+f,QAAS4X,IAInDzW,IACJ2W,EAASjC,QAAUA,GAIfA,GACJ/U,GAAU,CAAE7gB,IAAQ,GAKrBs3B,EAAKjxB,KAAM,WASV,IAAMyX,KAJA8X,GACL/U,GAAU,CAAE7gB,IAEbge,EAASlF,OAAQ9Y,EAAM,UACTkqB,EACb1qB,GAAOsgB,MAAO9f,EAAM8d,EAAMoM,EAAMpM,OAMnC4Z,EAAYvB,GAAaP,EAASiC,EAAU/Z,GAAS,EAAGA,EAAMwZ,GACtDxZ,KAAQ+Z,IACfA,EAAU/Z,GAAS4Z,EAAU7oB,MACxB+mB,IACJ8B,EAAU/1B,IAAM+1B,EAAU7oB,MAC1B6oB,EAAU7oB,MAAQ,MAuMrBqpB,UAAW,SAAUn3B,EAAU+qB,GACzBA,EACJuK,GAAUI,WAAW1X,QAAShe,GAE9Bs1B,GAAUI,WAAWt5B,KAAM4D,MAK9BvB,GAAO24B,MAAQ,SAAUA,EAAOrG,EAAQnyB,GACvC,IAAI61B,EAAM2C,GAA0B,iBAAVA,EAAqB34B,GAAOsC,OAAQ,GAAIq2B,GAAU,CAC3Ef,SAAUz3B,IAAOA,GAAMmyB,GACtBl0B,EAAYu6B,IAAWA,EACxBxD,SAAUwD,EACVrG,OAAQnyB,GAAMmyB,GAAUA,IAAWl0B,EAAYk0B,IAAYA,GAoC5D,OAhCKtyB,GAAOs1B,GAAG/Q,IACdyR,EAAIb,SAAW,EAGc,iBAAjBa,EAAIb,WACVa,EAAIb,YAAYn1B,GAAOs1B,GAAGsD,OAC9B5C,EAAIb,SAAWn1B,GAAOs1B,GAAGsD,OAAQ5C,EAAIb,UAGrCa,EAAIb,SAAWn1B,GAAOs1B,GAAGsD,OAAOlW,UAMjB,MAAbsT,EAAI/c,QAA+B,IAAd+c,EAAI/c,QAC7B+c,EAAI/c,MAAQ,MAIb+c,EAAIxI,IAAMwI,EAAI4B,SAEd5B,EAAI4B,SAAW,WACTx5B,EAAY43B,EAAIxI,MACpBwI,EAAIxI,IAAIhwB,KAAMT,MAGVi5B,EAAI/c,OACRjZ,GAAOmf,QAASpiB,KAAMi5B,EAAI/c,QAIrB+c,GAGRh2B,GAAOG,GAAGmC,OAAQ,CACjBu2B,OAAQ,SAAUF,EAAOG,EAAIxG,EAAQ/wB,GAGpC,OAAOxE,KAAK6P,OAAQyT,IAAqBG,IAAK,UAAW,GAAIc,OAG3Dnf,MAAM42B,QAAS,CAAEvG,QAASsG,GAAMH,EAAOrG,EAAQ/wB,IAElDw3B,QAAS,SAAUza,EAAMqa,EAAOrG,EAAQ/wB,GACvC,IAAI8P,EAAQrR,GAAO2D,cAAe2a,GACjC0a,EAASh5B,GAAO24B,MAAOA,EAAOrG,EAAQ/wB,GACtC03B,EAAc,WAGb,IAAInB,EAAOjB,GAAW95B,KAAMiD,GAAOsC,OAAQ,GAAIgc,GAAQ0a,IAGlD3nB,GAASmN,EAASzd,IAAKhE,KAAM,YACjC+6B,EAAKtY,MAAM,IAMd,OAFAyZ,EAAYC,OAASD,EAEd5nB,IAA0B,IAAjB2nB,EAAO/f,MACtBlc,KAAKuE,KAAM23B,GACXl8B,KAAKkc,MAAO+f,EAAO/f,MAAOggB,IAE5BzZ,KAAM,SAAU9gB,EAAMghB,EAAY+X,GACjC,IAAI0B,EAAY,SAAU9Z,GACzB,IAAIG,EAAOH,EAAMG,YACVH,EAAMG,KACbA,EAAMiY,IAYP,MATqB,iBAAT/4B,IACX+4B,EAAU/X,EACVA,EAAahhB,EACbA,OAAOsE,GAEH0c,GACJ3iB,KAAKkc,MAAOva,GAAQ,KAAM,IAGpB3B,KAAKuE,KAAM,WACjB,IAAI6d,GAAU,EACbpI,EAAgB,MAARrY,GAAgBA,EAAO,aAC/B06B,EAASp5B,GAAOo5B,OAChB/a,EAAOG,EAASzd,IAAKhE,MAEtB,GAAKga,EACCsH,EAAMtH,IAAWsH,EAAMtH,GAAQyI,MACnC2Z,EAAW9a,EAAMtH,SAGlB,IAAMA,KAASsH,EACTA,EAAMtH,IAAWsH,EAAMtH,GAAQyI,MAAQ0W,GAAK1xB,KAAMuS,IACtDoiB,EAAW9a,EAAMtH,IAKpB,IAAMA,EAAQqiB,EAAO94B,OAAQyW,KACvBqiB,EAAQriB,GAAQvW,OAASzD,MACnB,MAAR2B,GAAgB06B,EAAQriB,GAAQkC,QAAUva,IAE5C06B,EAAQriB,GAAQ+gB,KAAKtY,KAAMiY,GAC3BtY,GAAU,EACVia,EAAO/2B,OAAQ0U,EAAO,KAOnBoI,GAAYsY,GAChBz3B,GAAOmf,QAASpiB,KAAM2B,MAIzBw6B,OAAQ,SAAUx6B,GAIjB,OAHc,IAATA,IACJA,EAAOA,GAAQ,MAET3B,KAAKuE,KAAM,WACjB,IAAIyV,EACHsH,EAAOG,EAASzd,IAAKhE,MACrBkc,EAAQoF,EAAM3f,EAAO,SACrB2gB,EAAQhB,EAAM3f,EAAO,cACrB06B,EAASp5B,GAAOo5B,OAChB94B,EAAS2Y,EAAQA,EAAM3Y,OAAS,EAajC,IAVA+d,EAAK6a,QAAS,EAGdl5B,GAAOiZ,MAAOlc,KAAM2B,EAAM,IAErB2gB,GAASA,EAAMG,MACnBH,EAAMG,KAAKhiB,KAAMT,MAAM,GAIlBga,EAAQqiB,EAAO94B,OAAQyW,KACvBqiB,EAAQriB,GAAQvW,OAASzD,MAAQq8B,EAAQriB,GAAQkC,QAAUva,IAC/D06B,EAAQriB,GAAQ+gB,KAAKtY,MAAM,GAC3B4Z,EAAO/2B,OAAQ0U,EAAO,IAKxB,IAAMA,EAAQ,EAAGA,EAAQzW,EAAQyW,IAC3BkC,EAAOlC,IAAWkC,EAAOlC,GAAQmiB,QACrCjgB,EAAOlC,GAAQmiB,OAAO17B,KAAMT,aAKvBshB,EAAK6a,YAKfl5B,GAAOsB,KAAM,CAAE,SAAU,OAAQ,QAAU,SAAU6D,EAAI1E,GACxD,IAAI44B,EAAQr5B,GAAOG,GAAIM,GACvBT,GAAOG,GAAIM,GAAS,SAAUk4B,EAAOrG,EAAQ/wB,GAC5C,OAAgB,MAATo3B,GAAkC,kBAAVA,EAC9BU,EAAM37B,MAAOX,KAAM0E,WACnB1E,KAAKg8B,QAAStC,GAAOh2B,GAAM,GAAQk4B,EAAOrG,EAAQ/wB,MAKrDvB,GAAOsB,KAAM,CACZg4B,UAAW7C,GAAO,QAClB8C,QAAS9C,GAAO,QAChB+C,YAAa/C,GAAO,UACpBgD,OAAQ,CAAEjH,QAAS,QACnBkH,QAAS,CAAElH,QAAS,QACpBmH,WAAY,CAAEnH,QAAS,WACrB,SAAU/xB,EAAMmnB,GAClB5nB,GAAOG,GAAIM,GAAS,SAAUk4B,EAAOrG,EAAQ/wB,GAC5C,OAAOxE,KAAKg8B,QAASnR,EAAO+Q,EAAOrG,EAAQ/wB,MAI7CvB,GAAOo5B,OAAS,GAChBp5B,GAAOs1B,GAAGiB,KAAO,WAChB,IAAIsB,EACH34B,EAAI,EACJk6B,EAASp5B,GAAOo5B,OAIjB,IAFAtD,GAAQ7N,KAAKC,MAELhpB,EAAIk6B,EAAO94B,OAAQpB,KAC1B24B,EAAQuB,EAAQl6B,OAGCk6B,EAAQl6B,KAAQ24B,GAChCuB,EAAO/2B,OAAQnD,IAAK,GAIhBk6B,EAAO94B,QACZN,GAAOs1B,GAAG9V,OAEXsW,QAAQ9yB,GAGThD,GAAOs1B,GAAGuC,MAAQ,SAAUA,GAC3B73B,GAAOo5B,OAAOz7B,KAAMk6B,GACpB73B,GAAOs1B,GAAGjmB,SAGXrP,GAAOs1B,GAAGgB,SAAW,GACrBt2B,GAAOs1B,GAAGjmB,MAAQ,WACZ0mB,KAILA,IAAa,EACbI,OAGDn2B,GAAOs1B,GAAG9V,KAAO,WAChBuW,GAAa,MAGd/1B,GAAOs1B,GAAGsD,OAAS,CAClBgB,KAAM,IACNC,KAAM,IAGNnX,SAAU,KAKX1iB,GAAOG,GAAG25B,MAAQ,SAAUC,EAAMr7B,GAIjC,OAHAq7B,EAAO/5B,GAAOs1B,IAAKt1B,GAAOs1B,GAAGsD,OAAQmB,IAAiBA,EACtDr7B,EAAOA,GAAQ,KAER3B,KAAKkc,MAAOva,EAAM,SAAU8K,EAAM6V,GACxC,IAAI2a,EAAUl9B,GAAO2e,WAAYjS,EAAMuwB,GACvC1a,EAAMG,KAAO,WACZ1iB,GAAOm9B,aAAcD,OAOnB/sB,GAAQtQ,EAAS0C,cAAe,SAEnC22B,GADSr5B,EAAS0C,cAAe,UACpBK,YAAa/C,EAAS0C,cAAe,WAEnD4N,GAAMvO,KAAO,WAIbP,GAAQ+7B,QAA0B,KAAhBjtB,GAAMnI,MAIxB3G,GAAQg8B,YAAcnE,GAAI7kB,UAI1BlE,GAAQtQ,EAAS0C,cAAe,UAC1ByF,MAAQ,IACdmI,GAAMvO,KAAO,QACbP,GAAQi8B,WAA6B,MAAhBntB,GAAMnI,MAI5B,IAAIu1B,GACH5sB,GAAazN,GAAOqN,KAAKI,WAE1BzN,GAAOG,GAAGmC,OAAQ,CACjBkL,KAAM,SAAU/M,EAAMqE,GACrB,OAAOkY,EAAQjgB,KAAMiD,GAAOwN,KAAM/M,EAAMqE,EAA0B,EAAnBrD,UAAUnB,SAG1Dg6B,WAAY,SAAU75B,GACrB,OAAO1D,KAAKuE,KAAM,WACjBtB,GAAOs6B,WAAYv9B,KAAM0D,QAK5BT,GAAOsC,OAAQ,CACdkL,KAAM,SAAUhN,EAAMC,EAAMqE,GAC3B,IAAI3D,EAAKke,EACRkb,EAAQ/5B,EAAKlC,SAGd,GAAe,IAAVi8B,GAAyB,IAAVA,GAAyB,IAAVA,EAKnC,MAAkC,oBAAtB/5B,EAAKjB,aACTS,GAAOse,KAAM9d,EAAMC,EAAMqE,IAKlB,IAAVy1B,GAAgBv6B,GAAOmE,SAAU3D,KACrC6e,EAAQrf,GAAOw6B,UAAW/5B,EAAKC,iBAC5BV,GAAOqN,KAAKrD,MAAM3B,KAAK7D,KAAM/D,GAAS45B,QAAWr3B,SAGtCA,IAAV8B,EACW,OAAVA,OACJ9E,GAAOs6B,WAAY95B,EAAMC,GAIrB4e,GAAS,QAASA,QACuBrc,KAA3C7B,EAAMke,EAAMjB,IAAK5d,EAAMsE,EAAOrE,IACzBU,GAGRX,EAAKhB,aAAciB,EAAMqE,EAAQ,IAC1BA,GAGHua,GAAS,QAASA,GAA+C,QAApCle,EAAMke,EAAMte,IAAKP,EAAMC,IACjDU,EAMM,OAHdA,EAAMnB,GAAO4J,KAAK4D,KAAMhN,EAAMC,SAGTuC,EAAY7B,IAGlCq5B,UAAW,CACV97B,KAAM,CACL0f,IAAK,SAAU5d,EAAMsE,GACpB,IAAM3G,GAAQi8B,YAAwB,UAAVt1B,GAC3BvE,GAAUC,EAAM,SAAY,CAC5B,IAAIrB,EAAMqB,EAAKsE,MAKf,OAJAtE,EAAKhB,aAAc,OAAQsF,GACtB3F,IACJqB,EAAKsE,MAAQ3F,GAEP2F,MAMXw1B,WAAY,SAAU95B,EAAMsE,GAC3B,IAAIrE,EACHvB,EAAI,EAIJu7B,EAAY31B,GAASA,EAAMkF,MAAO2N,GAEnC,GAAK8iB,GAA+B,IAAlBj6B,EAAKlC,SACtB,MAAUmC,EAAOg6B,EAAWv7B,KAC3BsB,EAAKwK,gBAAiBvK,MAO1B45B,GAAW,CACVjc,IAAK,SAAU5d,EAAMsE,EAAOrE,GAQ3B,OAPe,IAAVqE,EAGJ9E,GAAOs6B,WAAY95B,EAAMC,GAEzBD,EAAKhB,aAAciB,EAAMA,GAEnBA,IAITT,GAAOsB,KAAMtB,GAAOqN,KAAKrD,MAAM3B,KAAK0X,OAAO/V,MAAO,QAAU,SAAU7E,EAAI1E,GACzE,IAAIi6B,EAASjtB,GAAYhN,IAAUT,GAAO4J,KAAK4D,KAE/CC,GAAYhN,GAAS,SAAUD,EAAMC,EAAM6U,GAC1C,IAAInU,EAAKykB,EACR+U,EAAgBl6B,EAAKC,cAYtB,OAVM4U,IAGLsQ,EAASnY,GAAYktB,GACrBltB,GAAYktB,GAAkBx5B,EAC9BA,EAAqC,MAA/Bu5B,EAAQl6B,EAAMC,EAAM6U,GACzBqlB,EACA,KACDltB,GAAYktB,GAAkB/U,GAExBzkB,KAOT,IAAIy5B,GAAa,sCAChBC,GAAa,gBAwIb,SAASC,GAAkBh2B,GAE1B,OADaA,EAAMkF,MAAO2N,IAAmB,IAC/B9M,KAAM,KAItB,SAASkwB,GAAUv6B,GAClB,OAAOA,EAAKjB,cAAgBiB,EAAKjB,aAAc,UAAa,GAG7D,SAASy7B,GAAgBl2B,GACxB,OAAKhC,MAAMC,QAAS+B,GACZA,EAEc,iBAAVA,GACJA,EAAMkF,MAAO2N,IAEd,GAvJR3X,GAAOG,GAAGmC,OAAQ,CACjBgc,KAAM,SAAU7d,EAAMqE,GACrB,OAAOkY,EAAQjgB,KAAMiD,GAAOse,KAAM7d,EAAMqE,EAA0B,EAAnBrD,UAAUnB,SAG1D26B,WAAY,SAAUx6B,GACrB,OAAO1D,KAAKuE,KAAM,kBACVvE,KAAMiD,GAAOk7B,QAASz6B,IAAUA,QAK1CT,GAAOsC,OAAQ,CACdgc,KAAM,SAAU9d,EAAMC,EAAMqE,GAC3B,IAAI3D,EAAKke,EACRkb,EAAQ/5B,EAAKlC,SAGd,GAAe,IAAVi8B,GAAyB,IAAVA,GAAyB,IAAVA,EAWnC,OAPe,IAAVA,GAAgBv6B,GAAOmE,SAAU3D,KAGrCC,EAAOT,GAAOk7B,QAASz6B,IAAUA,EACjC4e,EAAQrf,GAAO+0B,UAAWt0B,SAGZuC,IAAV8B,EACCua,GAAS,QAASA,QACuBrc,KAA3C7B,EAAMke,EAAMjB,IAAK5d,EAAMsE,EAAOrE,IACzBU,EAGCX,EAAMC,GAASqE,EAGpBua,GAAS,QAASA,GAA+C,QAApCle,EAAMke,EAAMte,IAAKP,EAAMC,IACjDU,EAGDX,EAAMC,IAGds0B,UAAW,CACV/jB,SAAU,CACTjQ,IAAK,SAAUP,GAMd,IAAI26B,EAAWn7B,GAAO4J,KAAK4D,KAAMhN,EAAM,YAEvC,OAAK26B,EACGjL,SAAUiL,EAAU,IAI3BP,GAAWp2B,KAAMhE,EAAKD,WACtBs6B,GAAWr2B,KAAMhE,EAAKD,WACtBC,EAAKuQ,KAEE,GAGA,KAKXmqB,QAAS,CACRE,MAAO,UACPC,QAAS,eAYLl9B,GAAQg8B,cACbn6B,GAAO+0B,UAAU5jB,SAAW,CAC3BpQ,IAAK,SAAUP,GAId,IAAI8O,EAAS9O,EAAKb,WAIlB,OAHK2P,GAAUA,EAAO3P,YACrB2P,EAAO3P,WAAWyR,cAEZ,MAERgN,IAAK,SAAU5d,GAId,IAAI8O,EAAS9O,EAAKb,WACb2P,IACJA,EAAO8B,cAEF9B,EAAO3P,YACX2P,EAAO3P,WAAWyR,kBAOvBpR,GAAOsB,KAAM,CACZ,WACA,WACA,YACA,cACA,cACA,UACA,UACA,SACA,cACA,mBACE,WACFtB,GAAOk7B,QAASn+B,KAAK2D,eAAkB3D,OA4BxCiD,GAAOG,GAAGmC,OAAQ,CACjBg5B,SAAU,SAAUx2B,GACnB,IAAIy2B,EAAY5kB,EAAK6kB,EAAUxuB,EAAW9N,EAAGu8B,EAE7C,OAAKr9B,EAAY0G,GACT/H,KAAKuE,KAAM,SAAUY,GAC3BlC,GAAQjD,MAAOu+B,SAAUx2B,EAAMtH,KAAMT,KAAMmF,EAAG64B,GAAUh+B,WAI1Dw+B,EAAaP,GAAgBl2B,IAEbxE,OACRvD,KAAKuE,KAAM,WAIjB,GAHAk6B,EAAWT,GAAUh+B,MACrB4Z,EAAwB,IAAlB5Z,KAAKuB,UAAoB,IAAMw8B,GAAkBU,GAAa,IAEzD,CACV,IAAMt8B,EAAI,EAAGA,EAAIq8B,EAAWj7B,OAAQpB,IACnC8N,EAAYuuB,EAAYr8B,GACnByX,EAAI/Y,QAAS,IAAMoP,EAAY,KAAQ,IAC3C2J,GAAO3J,EAAY,KAKrByuB,EAAaX,GAAkBnkB,GAC1B6kB,IAAaC,GACjB1+B,KAAKyC,aAAc,QAASi8B,MAMzB1+B,MAGR2+B,YAAa,SAAU52B,GACtB,IAAIy2B,EAAY5kB,EAAK6kB,EAAUxuB,EAAW9N,EAAGu8B,EAE7C,OAAKr9B,EAAY0G,GACT/H,KAAKuE,KAAM,SAAUY,GAC3BlC,GAAQjD,MAAO2+B,YAAa52B,EAAMtH,KAAMT,KAAMmF,EAAG64B,GAAUh+B,UAIvD0E,UAAUnB,QAIhBi7B,EAAaP,GAAgBl2B,IAEbxE,OACRvD,KAAKuE,KAAM,WAMjB,GALAk6B,EAAWT,GAAUh+B,MAGrB4Z,EAAwB,IAAlB5Z,KAAKuB,UAAoB,IAAMw8B,GAAkBU,GAAa,IAEzD,CACV,IAAMt8B,EAAI,EAAGA,EAAIq8B,EAAWj7B,OAAQpB,IAAM,CACzC8N,EAAYuuB,EAAYr8B,GAGxB,OAAgD,EAAxCyX,EAAI/Y,QAAS,IAAMoP,EAAY,KACtC2J,EAAMA,EAAIvT,QAAS,IAAM4J,EAAY,IAAK,KAK5CyuB,EAAaX,GAAkBnkB,GAC1B6kB,IAAaC,GACjB1+B,KAAKyC,aAAc,QAASi8B,MAMzB1+B,KA/BCA,KAAKyQ,KAAM,QAAS,KAkC7BmuB,YAAa,SAAU72B,EAAO82B,GAC7B,IAAIL,EAAYvuB,EAAW9N,EAAG+W,EAC7BvX,SAAcoG,EACd+2B,EAAwB,WAATn9B,GAAqBoE,MAAMC,QAAS+B,GAEpD,OAAK1G,EAAY0G,GACT/H,KAAKuE,KAAM,SAAUpC,GAC3Bc,GAAQjD,MAAO4+B,YACd72B,EAAMtH,KAAMT,KAAMmC,EAAG67B,GAAUh+B,MAAQ6+B,GACvCA,KAKsB,kBAAbA,GAA0BC,EAC9BD,EAAW7+B,KAAKu+B,SAAUx2B,GAAU/H,KAAK2+B,YAAa52B,IAG9Dy2B,EAAaP,GAAgBl2B,GAEtB/H,KAAKuE,KAAM,WACjB,GAAKu6B,EAKJ,IAFA5lB,EAAOjW,GAAQjD,MAETmC,EAAI,EAAGA,EAAIq8B,EAAWj7B,OAAQpB,IACnC8N,EAAYuuB,EAAYr8B,GAGnB+W,EAAK6lB,SAAU9uB,GACnBiJ,EAAKylB,YAAa1uB,GAElBiJ,EAAKqlB,SAAUtuB,aAKIhK,IAAV8B,GAAgC,YAATpG,KAClCsO,EAAY+tB,GAAUh+B,QAIrByhB,EAASJ,IAAKrhB,KAAM,gBAAiBiQ,GAOjCjQ,KAAKyC,cACTzC,KAAKyC,aAAc,QAClBwN,IAAuB,IAAVlI,EACZ,GACA0Z,EAASzd,IAAKhE,KAAM,kBAAqB,SAO/C++B,SAAU,SAAU77B,GACnB,IAAI+M,EAAWxM,EACdtB,EAAI,EAEL8N,EAAY,IAAM/M,EAAW,IAC7B,MAAUO,EAAOzD,KAAMmC,KACtB,GAAuB,IAAlBsB,EAAKlC,WACoE,GAA3E,IAAMw8B,GAAkBC,GAAUv6B,IAAW,KAAM5C,QAASoP,GAC9D,OAAO,EAIT,OAAO,KAOT,IAAI+uB,GAAU,MAEd/7B,GAAOG,GAAGmC,OAAQ,CACjBnD,IAAK,SAAU2F,GACd,IAAIua,EAAOle,EAAKuqB,EACflrB,EAAOzD,KAAM,GAEd,OAAM0E,UAAUnB,QA0BhBorB,EAAkBttB,EAAY0G,GAEvB/H,KAAKuE,KAAM,SAAUpC,GAC3B,IAAIC,EAEmB,IAAlBpC,KAAKuB,WAWE,OANXa,EADIusB,EACE5mB,EAAMtH,KAAMT,KAAMmC,EAAGc,GAAQjD,MAAOoC,OAEpC2F,GAKN3F,EAAM,GAEoB,iBAARA,EAClBA,GAAO,GAEI2D,MAAMC,QAAS5D,KAC1BA,EAAMa,GAAOwB,IAAKrC,EAAK,SAAU2F,GAChC,OAAgB,MAATA,EAAgB,GAAKA,EAAQ,OAItCua,EAAQrf,GAAOg8B,SAAUj/B,KAAK2B,OAAUsB,GAAOg8B,SAAUj/B,KAAKwD,SAASG,iBAGrD,QAAS2e,QAA+Crc,IAApCqc,EAAMjB,IAAKrhB,KAAMoC,EAAK,WAC3DpC,KAAK+H,MAAQ3F,OAzDTqB,GACJ6e,EAAQrf,GAAOg8B,SAAUx7B,EAAK9B,OAC7BsB,GAAOg8B,SAAUx7B,EAAKD,SAASG,iBAG/B,QAAS2e,QACgCrc,KAAvC7B,EAAMke,EAAMte,IAAKP,EAAM,UAElBW,EAMY,iBAHpBA,EAAMX,EAAKsE,OAIH3D,EAAIiC,QAAS24B,GAAS,IAIhB,MAAP56B,EAAc,GAAKA,OAG3B,KAyCHnB,GAAOsC,OAAQ,CACd05B,SAAU,CACT5Z,OAAQ,CACPrhB,IAAK,SAAUP,GAEd,IAAIrB,EAAMa,GAAO4J,KAAK4D,KAAMhN,EAAM,SAClC,OAAc,MAAPrB,EACNA,EAMA27B,GAAkB96B,GAAOV,KAAMkB,MAGlCyK,OAAQ,CACPlK,IAAK,SAAUP,GACd,IAAIsE,EAAOsd,EAAQljB,EAClBqD,EAAU/B,EAAK+B,QACfwU,EAAQvW,EAAK4Q,cACbgT,EAAoB,eAAd5jB,EAAK9B,KACX6iB,EAAS6C,EAAM,KAAO,GACtBkN,EAAMlN,EAAMrN,EAAQ,EAAIxU,EAAQjC,OAUjC,IAPCpB,EADI6X,EAAQ,EACRua,EAGAlN,EAAMrN,EAAQ,EAIX7X,EAAIoyB,EAAKpyB,IAKhB,KAJAkjB,EAAS7f,EAASrD,IAIJiS,UAAYjS,IAAM6X,KAG7BqL,EAAO9Y,YACL8Y,EAAOziB,WAAW2J,WACnB/I,GAAU6hB,EAAOziB,WAAY,aAAiB,CAMjD,GAHAmF,EAAQ9E,GAAQoiB,GAASjjB,MAGpBilB,EACJ,OAAOtf,EAIRyc,EAAO5jB,KAAMmH,GAIf,OAAOyc,GAGRnD,IAAK,SAAU5d,EAAMsE,GACpB,IAAIm3B,EAAW7Z,EACd7f,EAAU/B,EAAK+B,QACfgf,EAASvhB,GAAOgE,UAAWc,GAC3B5F,EAAIqD,EAAQjC,OAEb,MAAQpB,MACPkjB,EAAS7f,EAASrD,IAINiS,UACuD,EAAlEnR,GAAOkE,QAASlE,GAAOg8B,SAAS5Z,OAAOrhB,IAAKqhB,GAAUb,MAEtD0a,GAAY,GAUd,OAHMA,IACLz7B,EAAK4Q,eAAiB,GAEhBmQ,OAOXvhB,GAAOsB,KAAM,CAAE,QAAS,YAAc,WACrCtB,GAAOg8B,SAAUj/B,MAAS,CACzBqhB,IAAK,SAAU5d,EAAMsE,GACpB,GAAKhC,MAAMC,QAAS+B,GACnB,OAAStE,EAAK0Q,SAA2D,EAAjDlR,GAAOkE,QAASlE,GAAQQ,GAAOrB,MAAO2F,KAI3D3G,GAAQ+7B,UACbl6B,GAAOg8B,SAAUj/B,MAAOgE,IAAM,SAAUP,GACvC,OAAwC,OAAjCA,EAAKjB,aAAc,SAAqB,KAAOiB,EAAKsE,UAS9D,IAAI0L,GAAW1T,GAAO0T,SAElB5R,GAAQ,CAAEmG,KAAMkjB,KAAKC,OAErBgU,GAAS,KAKbl8B,GAAOm8B,SAAW,SAAU9d,GAC3B,IAAInP,EAAKktB,EACT,IAAM/d,GAAwB,iBAATA,EACpB,OAAO,KAKR,IACCnP,GAAM,IAAMpS,GAAOu/B,WAAcC,gBAAiBje,EAAM,YACvD,MAAQ3U,IAYV,OAVA0yB,EAAkBltB,GAAOA,EAAI3E,qBAAsB,eAAiB,GAC9D2E,IAAOktB,GACZp8B,GAAOsD,MAAO,iBACb84B,EACCp8B,GAAOwB,IAAK46B,EAAgB3yB,WAAY,SAAUgC,GACjD,OAAOA,EAAG5H,cACPgH,KAAM,MACVwT,IAGInP,GAIR,IAAIqtB,GAAc,kCACjBC,GAA0B,SAAU9yB,GACnCA,EAAEmb,mBAGJ7kB,GAAOsC,OAAQtC,GAAOskB,MAAO,CAE5BU,QAAS,SAAUV,EAAOjG,EAAM7d,EAAMi8B,GAErC,IAAIv9B,EAAGyX,EAAKgJ,EAAK+c,EAAYC,EAAQ/W,EAAQ9K,EAAS8hB,EACrDC,EAAY,CAAEr8B,GAAQ7D,GACtB+B,EAAOX,GAAOP,KAAM8mB,EAAO,QAAWA,EAAM5lB,KAAO4lB,EACnDkB,EAAaznB,GAAOP,KAAM8mB,EAAO,aAAgBA,EAAMlgB,UAAUc,MAAO,KAAQ,GAKjF,GAHAyR,EAAMimB,EAAcjd,EAAMnf,EAAOA,GAAQ7D,EAGlB,IAAlB6D,EAAKlC,UAAoC,IAAlBkC,EAAKlC,WAK5Bi+B,GAAY/3B,KAAM9F,EAAOsB,GAAOskB,MAAMuB,cAIf,EAAvBnnB,EAAKd,QAAS,OAIlBc,GADA8mB,EAAa9mB,EAAKwG,MAAO,MACPoG,QAClBka,EAAWpjB,QAEZu6B,EAASj+B,EAAKd,QAAS,KAAQ,GAAK,KAAOc,GAG3C4lB,EAAQA,EAAOtkB,GAAOiD,SACrBqhB,EACA,IAAItkB,GAAOmnB,MAAOzoB,EAAuB,iBAAV4lB,GAAsBA,IAGhDK,UAAY8X,EAAe,EAAI,EACrCnY,EAAMlgB,UAAYohB,EAAW3a,KAAM,KACnCyZ,EAAMuC,WAAavC,EAAMlgB,UACxB,IAAImB,OAAQ,UAAYigB,EAAW3a,KAAM,iBAAoB,WAC7D,KAGDyZ,EAAM3V,YAAS3L,EACTshB,EAAM3hB,SACX2hB,EAAM3hB,OAASnC,GAIhB6d,EAAe,MAARA,EACN,CAAEiG,GACFtkB,GAAOgE,UAAWqa,EAAM,CAAEiG,IAG3BxJ,EAAU9a,GAAOskB,MAAMxJ,QAASpc,IAAU,GACpC+9B,IAAgB3hB,EAAQkK,UAAmD,IAAxClK,EAAQkK,QAAQtnB,MAAO8C,EAAM6d,IAAtE,CAMA,IAAMoe,IAAiB3hB,EAAQ0M,WAAahpB,EAAUgC,GAAS,CAM9D,IAJAk8B,EAAa5hB,EAAQ8J,cAAgBlmB,EAC/B69B,GAAY/3B,KAAMk4B,EAAah+B,KACpCiY,EAAMA,EAAIhX,YAEHgX,EAAKA,EAAMA,EAAIhX,WACtBk9B,EAAUl/B,KAAMgZ,GAChBgJ,EAAMhJ,EAIFgJ,KAAUnf,EAAK+D,eAAiB5H,IACpCkgC,EAAUl/B,KAAMgiB,EAAIvT,aAAeuT,EAAImd,cAAgBhgC,IAKzDoC,EAAI,EACJ,OAAUyX,EAAMkmB,EAAW39B,QAAYolB,EAAMqC,uBAC5CiW,EAAcjmB,EACd2N,EAAM5lB,KAAW,EAAJQ,EACZw9B,EACA5hB,EAAQiL,UAAYrnB,GAGrBknB,GAAWpH,EAASzd,IAAK4V,EAAK,WAAcxZ,OAAOwoB,OAAQ,OAAUrB,EAAM5lB,OAC1E8f,EAASzd,IAAK4V,EAAK,YAEnBiP,EAAOloB,MAAOiZ,EAAK0H,IAIpBuH,EAAS+W,GAAUhmB,EAAKgmB,KACT/W,EAAOloB,OAASogB,EAAYnH,KAC1C2N,EAAM3V,OAASiX,EAAOloB,MAAOiZ,EAAK0H,IACZ,IAAjBiG,EAAM3V,QACV2V,EAAMS,kBA8CT,OA1CAT,EAAM5lB,KAAOA,EAGP+9B,GAAiBnY,EAAMuD,sBAEpB/M,EAAQ4H,WACqC,IAApD5H,EAAQ4H,SAAShlB,MAAOm/B,EAAUz3B,MAAOiZ,KACzCP,EAAYtd,IAIPm8B,GAAUv+B,EAAYoC,EAAM9B,MAAaF,EAAUgC,MAGvDmf,EAAMnf,EAAMm8B,MAGXn8B,EAAMm8B,GAAW,MAIlB38B,GAAOskB,MAAMuB,UAAYnnB,EAEpB4lB,EAAMqC,wBACViW,EAAYtwB,iBAAkB5N,EAAM89B,IAGrCh8B,EAAM9B,KAED4lB,EAAMqC,wBACViW,EAAYjgB,oBAAqBje,EAAM89B,IAGxCx8B,GAAOskB,MAAMuB,eAAY7iB,EAEpB2c,IACJnf,EAAMm8B,GAAWhd,IAMd2E,EAAM3V,SAKdwb,SAAU,SAAUzrB,EAAM8B,EAAM8jB,GAC/B,IAAI5a,EAAI1J,GAAOsC,OACd,IAAItC,GAAOmnB,MACX7C,EACA,CACC5lB,KAAMA,EACNypB,aAAa,IAIfnoB,GAAOskB,MAAMU,QAAStb,EAAG,KAAMlJ,MAKjCR,GAAOG,GAAGmC,OAAQ,CAEjB0iB,QAAS,SAAUtmB,EAAM2f,GACxB,OAAOthB,KAAKuE,KAAM,WACjBtB,GAAOskB,MAAMU,QAAStmB,EAAM2f,EAAMthB,SAGpCggC,eAAgB,SAAUr+B,EAAM2f,GAC/B,IAAI7d,EAAOzD,KAAM,GACjB,GAAKyD,EACJ,OAAOR,GAAOskB,MAAMU,QAAStmB,EAAM2f,EAAM7d,GAAM,MAMlD,IACCw8B,GAAW,QACXC,GAAQ,SACRC,GAAkB,wCAClBC,GAAe,qCAEhB,SAASC,GAAa1I,EAAQr2B,EAAKg/B,EAAapmB,GAC/C,IAAIxW,EAEJ,GAAKqC,MAAMC,QAAS1E,GAGnB2B,GAAOsB,KAAMjD,EAAK,SAAUa,EAAG2Y,GACzBwlB,GAAeL,GAASx4B,KAAMkwB,GAGlCzd,EAAKyd,EAAQ7c,GAKbulB,GACC1I,EAAS,KAAqB,iBAAN7c,GAAuB,MAALA,EAAY3Y,EAAI,IAAO,IACjE2Y,EACAwlB,EACApmB,UAKG,GAAMomB,GAAiC,WAAlBx9B,EAAQxB,GAUnC4Y,EAAKyd,EAAQr2B,QAPb,IAAMoC,KAAQpC,EACb++B,GAAa1I,EAAS,IAAMj0B,EAAO,IAAKpC,EAAKoC,GAAQ48B,EAAapmB,GAYrEjX,GAAOs9B,MAAQ,SAAU73B,EAAG43B,GAC3B,IAAI3I,EACH6I,EAAI,GACJtmB,EAAM,SAAU7L,EAAKoyB,GAGpB,IAAI14B,EAAQ1G,EAAYo/B,GACvBA,IACAA,EAEDD,EAAGA,EAAEj9B,QAAWm9B,mBAAoBryB,GAAQ,IAC3CqyB,mBAA6B,MAAT34B,EAAgB,GAAKA,IAG5C,GAAU,MAALW,EACJ,MAAO,GAIR,GAAK3C,MAAMC,QAAS0C,IAASA,EAAE7E,SAAWZ,GAAO6C,cAAe4C,GAG/DzF,GAAOsB,KAAMmE,EAAG,WACfwR,EAAKla,KAAK0D,KAAM1D,KAAK+H,cAOtB,IAAM4vB,KAAUjvB,EACf23B,GAAa1I,EAAQjvB,EAAGivB,GAAU2I,EAAapmB,GAKjD,OAAOsmB,EAAE1yB,KAAM,MAGhB7K,GAAOG,GAAGmC,OAAQ,CACjBo7B,UAAW,WACV,OAAO19B,GAAOs9B,MAAOvgC,KAAK4gC,mBAE3BA,eAAgB,WACf,OAAO5gC,KAAKyE,IAAK,WAGhB,IAAI8L,EAAWtN,GAAOse,KAAMvhB,KAAM,YAClC,OAAOuQ,EAAWtN,GAAOgE,UAAWsJ,GAAavQ,OAC9C6P,OAAQ,WACX,IAAIlO,EAAO3B,KAAK2B,KAGhB,OAAO3B,KAAK0D,OAAST,GAAQjD,MAAO2Y,GAAI,cACvCynB,GAAa34B,KAAMzH,KAAKwD,YAAe28B,GAAgB14B,KAAM9F,KAC3D3B,KAAKmU,UAAY0Q,GAAepd,KAAM9F,MACtC8C,IAAK,SAAU2D,EAAI3E,GACtB,IAAIrB,EAAMa,GAAQjD,MAAOoC,MAEzB,OAAY,MAAPA,EACG,KAGH2D,MAAMC,QAAS5D,GACZa,GAAOwB,IAAKrC,EAAK,SAAUA,GACjC,MAAO,CAAEsB,KAAMD,EAAKC,KAAMqE,MAAO3F,EAAIiE,QAAS65B,GAAO,WAIhD,CAAEx8B,KAAMD,EAAKC,KAAMqE,MAAO3F,EAAIiE,QAAS65B,GAAO,WAClDl8B,SAKN,IACC68B,GAAM,OACNC,GAAQ,OACRC,GAAa,gBACbC,GAAW,6BAIXC,GAAa,iBACbC,GAAY,QAWZhH,GAAa,GAObiH,GAAa,GAGbC,GAAW,KAAK1gC,OAAQ,KAGxB2gC,GAAezhC,EAAS0C,cAAe,KAKxC,SAASg/B,GAA6BC,GAGrC,OAAO,SAAUC,EAAoB5kB,GAED,iBAAvB4kB,IACX5kB,EAAO4kB,EACPA,EAAqB,KAGtB,IAAIC,EACHt/B,EAAI,EACJu/B,EAAYF,EAAmB79B,cAAcsJ,MAAO2N,IAAmB,GAExE,GAAKvZ,EAAYub,GAGhB,MAAU6kB,EAAWC,EAAWv/B,KAGR,MAAlBs/B,EAAU,IACdA,EAAWA,EAASnhC,MAAO,IAAO,KAChCihC,EAAWE,GAAaF,EAAWE,IAAc,IAAKjf,QAAS5F,KAI/D2kB,EAAWE,GAAaF,EAAWE,IAAc,IAAK7gC,KAAMgc,IAQnE,SAAS+kB,GAA+BJ,EAAW/7B,EAASi1B,EAAiBmH,GAE5E,IAAIC,EAAY,GACfC,EAAqBP,IAAcJ,GAEpC,SAASY,EAASN,GACjB,IAAIrtB,EAcJ,OAbAytB,EAAWJ,IAAa,EACxBx+B,GAAOsB,KAAMg9B,EAAWE,IAAc,GAAI,SAAU9lB,EAAGqmB,GACtD,IAAIC,EAAsBD,EAAoBx8B,EAASi1B,EAAiBmH,GACxE,MAAoC,iBAAxBK,GACVH,GAAqBD,EAAWI,GAKtBH,IACD1tB,EAAW6tB,QADf,GAHNz8B,EAAQk8B,UAAUlf,QAASyf,GAC3BF,EAASE,IACF,KAKF7tB,EAGR,OAAO2tB,EAASv8B,EAAQk8B,UAAW,MAAUG,EAAW,MAASE,EAAS,KAM3E,SAASG,GAAYt8B,EAAQhE,GAC5B,IAAIyM,EAAKxI,EACRs8B,EAAcl/B,GAAOm/B,aAAaD,aAAe,GAElD,IAAM9zB,KAAOzM,OACQqE,IAAfrE,EAAKyM,MACP8zB,EAAa9zB,GAAQzI,EAAWC,IAAUA,EAAO,KAAUwI,GAAQzM,EAAKyM,IAO5E,OAJKxI,GACJ5C,GAAOsC,QAAQ,EAAMK,EAAQC,GAGvBD,EA/ERy7B,GAAartB,KAAOP,GAASO,KAgP7B/Q,GAAOsC,OAAQ,CAGd88B,OAAQ,EAGRC,aAAc,GACdC,KAAM,GAENH,aAAc,CACbI,IAAK/uB,GAASO,KACdrS,KAAM,MACN8gC,QAxRgB,4DAwRQh7B,KAAMgM,GAASivB,UACvCljC,QAAQ,EACRmjC,aAAa,EACbC,OAAO,EACPC,YAAa,mDAcbC,QAAS,CACR9H,IAAKoG,GACL7+B,KAAM,aACNqsB,KAAM,YACNzc,IAAK,4BACL4wB,KAAM,qCAGPtpB,SAAU,CACTtH,IAAK,UACLyc,KAAM,SACNmU,KAAM,YAGPC,eAAgB,CACf7wB,IAAK,cACL5P,KAAM,eACNwgC,KAAM,gBAKPE,WAAY,CAGXC,SAAUj3B,OAGVk3B,aAAa,EAGbC,YAAathB,KAAKC,MAGlBshB,WAAYpgC,GAAOm8B,UAOpB+C,YAAa,CACZK,KAAK,EACLr/B,SAAS,IAOXmgC,UAAW,SAAU19B,EAAQ29B,GAC5B,OAAOA,EAGNrB,GAAYA,GAAYt8B,EAAQ3C,GAAOm/B,cAAgBmB,GAGvDrB,GAAYj/B,GAAOm/B,aAAcx8B,IAGnC49B,cAAelC,GAA6BpH,IAC5CuJ,cAAenC,GAA6BH,IAG5CuC,KAAM,SAAUlB,EAAKh9B,GAGA,iBAARg9B,IACXh9B,EAAUg9B,EACVA,OAAMv8B,GAIPT,EAAUA,GAAW,GAErB,IAAIm+B,EAGHC,EAGAC,EACAC,EAGAC,EAGAC,EAGArkB,EAGAskB,EAGA9hC,EAGA+hC,EAGA1D,EAAIv9B,GAAOqgC,UAAW,GAAI99B,GAG1B2+B,EAAkB3D,EAAEr9B,SAAWq9B,EAG/B4D,EAAqB5D,EAAEr9B,UACpBghC,EAAgB5iC,UAAY4iC,EAAgBtgC,QAC9CZ,GAAQkhC,GACRlhC,GAAOskB,MAGRvK,EAAW/Z,GAAO0Z,WAClB0nB,EAAmBphC,GAAOwY,UAAW,eAGrC6oB,EAAa9D,EAAE8D,YAAc,GAG7BC,EAAiB,GACjBC,EAAsB,GAGtBC,EAAW,WAGX7C,EAAQ,CACP7hB,WAAY,EAGZ2kB,kBAAmB,SAAUr2B,GAC5B,IAAIpB,EACJ,GAAK0S,EAAY,CAChB,IAAMmkB,EAAkB,CACvBA,EAAkB,GAClB,MAAU72B,EAAQ+zB,GAAS3zB,KAAMw2B,GAChCC,EAAiB72B,EAAO,GAAItJ,cAAgB,MACzCmgC,EAAiB72B,EAAO,GAAItJ,cAAgB,MAAS,IACrDjD,OAAQuM,EAAO,IAGpBA,EAAQ62B,EAAiBz1B,EAAI1K,cAAgB,KAE9C,OAAgB,MAATsJ,EAAgB,KAAOA,EAAMa,KAAM,OAI3C62B,sBAAuB,WACtB,OAAOhlB,EAAYkkB,EAAwB,MAI5Ce,iBAAkB,SAAUlhC,EAAMqE,GAMjC,OALkB,MAAb4X,IACJjc,EAAO8gC,EAAqB9gC,EAAKC,eAChC6gC,EAAqB9gC,EAAKC,gBAAmBD,EAC9C6gC,EAAgB7gC,GAASqE,GAEnB/H,MAIR6kC,iBAAkB,SAAUljC,GAI3B,OAHkB,MAAbge,IACJ6gB,EAAEsE,SAAWnjC,GAEP3B,MAIRskC,WAAY,SAAU7/B,GACrB,IAAIzC,EACJ,GAAKyC,EACJ,GAAKkb,EAGJiiB,EAAM7kB,OAAQtY,EAAKm9B,EAAMmD,cAIzB,IAAM/iC,KAAQyC,EACb6/B,EAAYtiC,GAAS,CAAEsiC,EAAYtiC,GAAQyC,EAAKzC,IAInD,OAAOhC,MAIRglC,MAAO,SAAUC,GAChB,IAAIC,EAAYD,GAAcR,EAK9B,OAJKd,GACJA,EAAUqB,MAAOE,GAElBp7B,EAAM,EAAGo7B,GACFllC,OAoBV,GAfAgd,EAAS1B,QAASsmB,GAKlBpB,EAAEgC,MAAUA,GAAOhC,EAAEgC,KAAO/uB,GAASO,MAAS,IAC5C3N,QAAS66B,GAAWztB,GAASivB,SAAW,MAG1ClC,EAAE7+B,KAAO6D,EAAQ6V,QAAU7V,EAAQ7D,MAAQ6+B,EAAEnlB,QAAUmlB,EAAE7+B,KAGzD6+B,EAAEkB,WAAclB,EAAEiB,UAAY,KAAM99B,cAAcsJ,MAAO2N,IAAmB,CAAE,IAGxD,MAAjB4lB,EAAE2E,YAAsB,CAC5BnB,EAAYpkC,EAAS0C,cAAe,KAKpC,IACC0hC,EAAUhwB,KAAOwsB,EAAEgC,IAInBwB,EAAUhwB,KAAOgwB,EAAUhwB,KAC3BwsB,EAAE2E,YAAc9D,GAAaqB,SAAW,KAAOrB,GAAa+D,MAC3DpB,EAAUtB,SAAW,KAAOsB,EAAUoB,KACtC,MAAQz4B,GAIT6zB,EAAE2E,aAAc,GAalB,GARK3E,EAAElf,MAAQkf,EAAEmC,aAAiC,iBAAXnC,EAAElf,OACxCkf,EAAElf,KAAOre,GAAOs9B,MAAOC,EAAElf,KAAMkf,EAAEF,cAIlCqB,GAA+BzH,GAAYsG,EAAGh7B,EAASo8B,GAGlDjiB,EACJ,OAAOiiB,EA8ER,IAAMz/B,KAzEN8hC,EAAchhC,GAAOskB,OAASiZ,EAAEhhC,SAGQ,GAApByD,GAAOo/B,UAC1Bp/B,GAAOskB,MAAMU,QAAS,aAIvBuY,EAAE7+B,KAAO6+B,EAAE7+B,KAAKif,cAGhB4f,EAAE6E,YAAcpE,GAAWx5B,KAAM+4B,EAAE7+B,MAKnCiiC,EAAWpD,EAAEgC,IAAIn8B,QAASy6B,GAAO,IAG3BN,EAAE6E,WAwBI7E,EAAElf,MAAQkf,EAAEmC,aACoD,KAAzEnC,EAAEqC,aAAe,IAAKhiC,QAAS,uCACjC2/B,EAAElf,KAAOkf,EAAElf,KAAKjb,QAASw6B,GAAK,OAvB9BqD,EAAW1D,EAAEgC,IAAIliC,MAAOsjC,EAASrgC,QAG5Bi9B,EAAElf,OAAUkf,EAAEmC,aAAiC,iBAAXnC,EAAElf,QAC1CsiB,IAAczE,GAAO13B,KAAMm8B,GAAa,IAAM,KAAQpD,EAAElf,YAGjDkf,EAAElf,OAIO,IAAZkf,EAAEpyB,QACNw1B,EAAWA,EAASv9B,QAAS06B,GAAY,MACzCmD,GAAa/E,GAAO13B,KAAMm8B,GAAa,IAAM,KAAQ,KAAS/hC,GAAMmG,OACnEk8B,GAIF1D,EAAEgC,IAAMoB,EAAWM,GASf1D,EAAE8E,aACDriC,GAAOq/B,aAAcsB,IACzBhC,EAAMgD,iBAAkB,oBAAqB3hC,GAAOq/B,aAAcsB,IAE9D3gC,GAAOs/B,KAAMqB,IACjBhC,EAAMgD,iBAAkB,gBAAiB3hC,GAAOs/B,KAAMqB,MAKnDpD,EAAElf,MAAQkf,EAAE6E,aAAgC,IAAlB7E,EAAEqC,aAAyBr9B,EAAQq9B,cACjEjB,EAAMgD,iBAAkB,eAAgBpE,EAAEqC,aAI3CjB,EAAMgD,iBACL,SACApE,EAAEkB,UAAW,IAAOlB,EAAEsC,QAAStC,EAAEkB,UAAW,IAC3ClB,EAAEsC,QAAStC,EAAEkB,UAAW,KACA,MAArBlB,EAAEkB,UAAW,GAAc,KAAON,GAAW,WAAa,IAC7DZ,EAAEsC,QAAS,MAIFtC,EAAE+E,QACZ3D,EAAMgD,iBAAkBziC,EAAGq+B,EAAE+E,QAASpjC,IAIvC,GAAKq+B,EAAEgF,cAC+C,IAAnDhF,EAAEgF,WAAW/kC,KAAM0jC,EAAiBvC,EAAOpB,IAAiB7gB,GAG9D,OAAOiiB,EAAMoD,QAed,GAXAP,EAAW,QAGXJ,EAAiBnqB,IAAKsmB,EAAE3F,UACxB+G,EAAM93B,KAAM02B,EAAEiF,SACd7D,EAAMrmB,KAAMilB,EAAEj6B,OAGdo9B,EAAYhC,GAA+BR,GAAYX,EAAGh7B,EAASo8B,GAK5D,CASN,GARAA,EAAM7hB,WAAa,EAGdkkB,GACJG,EAAmBnc,QAAS,WAAY,CAAE2Z,EAAOpB,IAI7C7gB,EACJ,OAAOiiB,EAIHpB,EAAEoC,OAAqB,EAAZpC,EAAEvD,UACjB8G,EAAehkC,GAAO2e,WAAY,WACjCkjB,EAAMoD,MAAO,YACXxE,EAAEvD,UAGN,IACCtd,GAAY,EACZgkB,EAAU+B,KAAMnB,EAAgBz6B,GAC/B,MAAQ6C,GAGT,GAAKgT,EACJ,MAAMhT,EAIP7C,GAAO,EAAG6C,SAhCX7C,GAAO,EAAG,gBAqCX,SAASA,EAAMi7B,EAAQY,EAAkBC,EAAWL,GACnD,IAAIM,EAAWJ,EAASl/B,EAAOu/B,EAAUC,EACxCd,EAAaU,EAGThmB,IAILA,GAAY,EAGPokB,GACJhkC,GAAOm9B,aAAc6G,GAKtBJ,OAAY19B,EAGZ49B,EAAwB0B,GAAW,GAGnC3D,EAAM7hB,WAAsB,EAATglB,EAAa,EAAI,EAGpCc,EAAsB,KAAVd,GAAiBA,EAAS,KAAkB,MAAXA,EAGxCa,IACJE,EA7lBJ,SAA8BtF,EAAGoB,EAAOgE,GAEvC,IAAII,EAAIrkC,EAAMskC,EAAeC,EAC5BzsB,EAAW+mB,EAAE/mB,SACbioB,EAAYlB,EAAEkB,UAGf,MAA2B,MAAnBA,EAAW,GAClBA,EAAUnzB,aACEtI,IAAP+/B,IACJA,EAAKxF,EAAEsE,UAAYlD,EAAM8C,kBAAmB,iBAK9C,GAAKsB,EACJ,IAAMrkC,KAAQ8X,EACb,GAAKA,EAAU9X,IAAU8X,EAAU9X,GAAO8F,KAAMu+B,GAAO,CACtDtE,EAAUlf,QAAS7gB,GACnB,MAMH,GAAK+/B,EAAW,KAAOkE,EACtBK,EAAgBvE,EAAW,OACrB,CAGN,IAAM//B,KAAQikC,EAAY,CACzB,IAAMlE,EAAW,IAAOlB,EAAEyC,WAAYthC,EAAO,IAAM+/B,EAAW,IAAQ,CACrEuE,EAAgBtkC,EAChB,MAEKukC,IACLA,EAAgBvkC,GAKlBskC,EAAgBA,GAAiBC,EAMlC,GAAKD,EAIJ,OAHKA,IAAkBvE,EAAW,IACjCA,EAAUlf,QAASyjB,GAEbL,EAAWK,GA0iBLE,CAAqB3F,EAAGoB,EAAOgE,KAIrCC,IACsC,EAA3C5iC,GAAOkE,QAAS,SAAUq5B,EAAEkB,YAC5Bz+B,GAAOkE,QAAS,OAAQq5B,EAAEkB,WAAc,IACxClB,EAAEyC,WAAY,eAAkB,cAIjC6C,EA9iBH,SAAsBtF,EAAGsF,EAAUlE,EAAOiE,GACzC,IAAIO,EAAOC,EAASC,EAAM1jB,EAAKlJ,EAC9BupB,EAAa,GAGbvB,EAAYlB,EAAEkB,UAAUphC,QAGzB,GAAKohC,EAAW,GACf,IAAM4E,KAAQ9F,EAAEyC,WACfA,EAAYqD,EAAK3iC,eAAkB68B,EAAEyC,WAAYqD,GAInDD,EAAU3E,EAAUnzB,QAGpB,MAAQ83B,EAcP,GAZK7F,EAAEwC,eAAgBqD,KACtBzE,EAAOpB,EAAEwC,eAAgBqD,IAAcP,IAIlCpsB,GAAQmsB,GAAarF,EAAE+F,aAC5BT,EAAWtF,EAAE+F,WAAYT,EAAUtF,EAAEiB,WAGtC/nB,EAAO2sB,EACPA,EAAU3E,EAAUnzB,QAKnB,GAAiB,MAAZ83B,EAEJA,EAAU3sB,OAGJ,GAAc,MAATA,GAAgBA,IAAS2sB,EAAU,CAM9C,KAHAC,EAAOrD,EAAYvpB,EAAO,IAAM2sB,IAAapD,EAAY,KAAOoD,IAI/D,IAAMD,KAASnD,EAId,IADArgB,EAAMwjB,EAAMj+B,MAAO,MACT,KAAQk+B,IAGjBC,EAAOrD,EAAYvpB,EAAO,IAAMkJ,EAAK,KACpCqgB,EAAY,KAAOrgB,EAAK,KACb,EAGG,IAAT0jB,EACJA,EAAOrD,EAAYmD,IAGgB,IAAxBnD,EAAYmD,KACvBC,EAAUzjB,EAAK,GACf8e,EAAUlf,QAASI,EAAK,KAEzB,MAOJ,IAAc,IAAT0jB,EAGJ,GAAKA,GAAQ9F,EAAEgG,UACdV,EAAWQ,EAAMR,QAEjB,IACCA,EAAWQ,EAAMR,GAChB,MAAQn5B,GACT,MAAO,CACNmQ,MAAO,cACPvW,MAAO+/B,EAAO35B,EAAI,sBAAwB+M,EAAO,OAAS2sB,IASjE,MAAO,CAAEvpB,MAAO,UAAWwE,KAAMwkB,GAidpBW,CAAajG,EAAGsF,EAAUlE,EAAOiE,GAGvCA,GAGCrF,EAAE8E,cACNS,EAAWnE,EAAM8C,kBAAmB,oBAEnCzhC,GAAOq/B,aAAcsB,GAAamC,IAEnCA,EAAWnE,EAAM8C,kBAAmB,WAEnCzhC,GAAOs/B,KAAMqB,GAAamC,IAKZ,MAAXhB,GAA6B,SAAXvE,EAAE7+B,KACxBsjC,EAAa,YAGS,MAAXF,EACXE,EAAa,eAIbA,EAAaa,EAAShpB,MACtB2oB,EAAUK,EAASxkB,KAEnBukB,IADAt/B,EAAQu/B,EAASv/B,UAMlBA,EAAQ0+B,GACHF,GAAWE,IACfA,EAAa,QACRF,EAAS,IACbA,EAAS,KAMZnD,EAAMmD,OAASA,EACfnD,EAAMqD,YAAeU,GAAoBV,GAAe,GAGnDY,EACJ7oB,EAASoB,YAAa+lB,EAAiB,CAAEsB,EAASR,EAAYrD,IAE9D5kB,EAASuB,WAAY4lB,EAAiB,CAAEvC,EAAOqD,EAAY1+B,IAI5Dq7B,EAAM0C,WAAYA,GAClBA,OAAar+B,EAERg+B,GACJG,EAAmBnc,QAAS4d,EAAY,cAAgB,YACvD,CAAEjE,EAAOpB,EAAGqF,EAAYJ,EAAUl/B,IAIpC89B,EAAiB3nB,SAAUynB,EAAiB,CAAEvC,EAAOqD,IAEhDhB,IACJG,EAAmBnc,QAAS,eAAgB,CAAE2Z,EAAOpB,MAG3Cv9B,GAAOo/B,QAChBp/B,GAAOskB,MAAMU,QAAS,cAKzB,OAAO2Z,GAGR8E,QAAS,SAAUlE,EAAKlhB,EAAM9c,GAC7B,OAAOvB,GAAOe,IAAKw+B,EAAKlhB,EAAM9c,EAAU,SAGzCmiC,UAAW,SAAUnE,EAAKh+B,GACzB,OAAOvB,GAAOe,IAAKw+B,OAAKv8B,EAAWzB,EAAU,aAI/CvB,GAAOsB,KAAM,CAAE,MAAO,QAAU,SAAU6D,EAAIiT,GAC7CpY,GAAQoY,GAAW,SAAUmnB,EAAKlhB,EAAM9c,EAAU7C,GAUjD,OAPKN,EAAYigB,KAChB3f,EAAOA,GAAQ6C,EACfA,EAAW8c,EACXA,OAAOrb,GAIDhD,GAAOygC,KAAMzgC,GAAOsC,OAAQ,CAClCi9B,IAAKA,EACL7gC,KAAM0Z,EACNomB,SAAU9/B,EACV2f,KAAMA,EACNmkB,QAASjhC,GACPvB,GAAO6C,cAAe08B,IAASA,OAIpCv/B,GAAOugC,cAAe,SAAUhD,GAC/B,IAAIr+B,EACJ,IAAMA,KAAKq+B,EAAE+E,QACa,iBAApBpjC,EAAEwB,gBACN68B,EAAEqC,YAAcrC,EAAE+E,QAASpjC,IAAO,MAMrCc,GAAO4rB,SAAW,SAAU2T,EAAKh9B,EAAStD,GACzC,OAAOe,GAAOygC,KAAM,CACnBlB,IAAKA,EAGL7gC,KAAM,MACN8/B,SAAU,SACVrzB,OAAO,EACPw0B,OAAO,EACPpjC,QAAQ,EAKRyjC,WAAY,CACX2D,cAAe,cAEhBL,WAAY,SAAUT,GACrB7iC,GAAO4D,WAAYi/B,EAAUtgC,EAAStD,OAMzCe,GAAOG,GAAGmC,OAAQ,CACjBshC,QAAS,SAAUjY,GAClB,IAAIlI,EAyBJ,OAvBK1mB,KAAM,KACLqB,EAAYutB,KAChBA,EAAOA,EAAKnuB,KAAMT,KAAM,KAIzB0mB,EAAOzjB,GAAQ2rB,EAAM5uB,KAAM,GAAIwH,eAAgB5C,GAAI,GAAIe,OAAO,GAEzD3F,KAAM,GAAI4C,YACd8jB,EAAK8I,aAAcxvB,KAAM,IAG1B0mB,EAAKjiB,IAAK,WACT,IAAIhB,EAAOzD,KAEX,MAAQyD,EAAKqjC,kBACZrjC,EAAOA,EAAKqjC,kBAGb,OAAOrjC,IACJ6rB,OAAQtvB,OAGNA,MAGR+mC,UAAW,SAAUnY,GACpB,OAAKvtB,EAAYutB,GACT5uB,KAAKuE,KAAM,SAAUpC,GAC3Bc,GAAQjD,MAAO+mC,UAAWnY,EAAKnuB,KAAMT,KAAMmC,MAItCnC,KAAKuE,KAAM,WACjB,IAAI2U,EAAOjW,GAAQjD,MAClByZ,EAAWP,EAAKO,WAEZA,EAASlW,OACbkW,EAASotB,QAASjY,GAGlB1V,EAAKoW,OAAQV,MAKhBlI,KAAM,SAAUkI,GACf,IAAIoY,EAAiB3lC,EAAYutB,GAEjC,OAAO5uB,KAAKuE,KAAM,SAAUpC,GAC3Bc,GAAQjD,MAAO6mC,QAASG,EAAiBpY,EAAKnuB,KAAMT,KAAMmC,GAAMysB,MAIlEqY,OAAQ,SAAU/jC,GAIjB,OAHAlD,KAAKuS,OAAQrP,GAAW+P,IAAK,QAAS1O,KAAM,WAC3CtB,GAAQjD,MAAO2vB,YAAa3vB,KAAK0M,cAE3B1M,QAKTiD,GAAOqN,KAAK9F,QAAQ6uB,OAAS,SAAU51B,GACtC,OAAQR,GAAOqN,KAAK9F,QAAQ08B,QAASzjC,IAEtCR,GAAOqN,KAAK9F,QAAQ08B,QAAU,SAAUzjC,GACvC,SAAWA,EAAK0uB,aAAe1uB,EAAK6vB,cAAgB7vB,EAAK4xB,iBAAiB9xB,SAM3EN,GAAOm/B,aAAa+E,IAAM,WACzB,IACC,OAAO,IAAIpnC,GAAOqnC,eACjB,MAAQz6B,MAGX,IAAI06B,GAAmB,CAGrBC,EAAG,IAIHC,KAAM,KAEPC,GAAevkC,GAAOm/B,aAAa+E,MAEpC/lC,GAAQqmC,OAASD,IAAkB,oBAAqBA,GACxDpmC,GAAQsiC,KAAO8D,KAAiBA,GAEhCvkC,GAAOwgC,cAAe,SAAUj+B,GAC/B,IAAIhB,EAAUkjC,EAGd,GAAKtmC,GAAQqmC,MAAQD,KAAiBhiC,EAAQ2/B,YAC7C,MAAO,CACNO,KAAM,SAAUH,EAAS1K,GACxB,IAAI14B,EACHglC,EAAM3hC,EAAQ2hC,MAWf,GATAA,EAAIQ,KACHniC,EAAQ7D,KACR6D,EAAQg9B,IACRh9B,EAAQo9B,MACRp9B,EAAQoiC,SACRpiC,EAAQyP,UAIJzP,EAAQqiC,UACZ,IAAM1lC,KAAKqD,EAAQqiC,UAClBV,EAAKhlC,GAAMqD,EAAQqiC,UAAW1lC,GAmBhC,IAAMA,KAdDqD,EAAQs/B,UAAYqC,EAAItC,kBAC5BsC,EAAItC,iBAAkBr/B,EAAQs/B,UAQzBt/B,EAAQ2/B,aAAgBI,EAAS,sBACtCA,EAAS,oBAAuB,kBAItBA,EACV4B,EAAIvC,iBAAkBziC,EAAGojC,EAASpjC,IAInCqC,EAAW,SAAU7C,GACpB,OAAO,WACD6C,IACJA,EAAWkjC,EAAgBP,EAAIW,OAC9BX,EAAIY,QAAUZ,EAAIa,QAAUb,EAAIc,UAC/Bd,EAAIe,mBAAqB,KAEb,UAATvmC,EACJwlC,EAAInC,QACgB,UAATrjC,EAKgB,iBAAfwlC,EAAIpC,OACflK,EAAU,EAAG,SAEbA,EAGCsM,EAAIpC,OACJoC,EAAIlC,YAINpK,EACCwM,GAAkBF,EAAIpC,SAAYoC,EAAIpC,OACtCoC,EAAIlC,WAK+B,UAAjCkC,EAAIgB,cAAgB,SACM,iBAArBhB,EAAIiB,aACV,CAAEC,OAAQlB,EAAIrB,UACd,CAAEvjC,KAAM4kC,EAAIiB,cACbjB,EAAIxC,4BAQTwC,EAAIW,OAAStjC,IACbkjC,EAAgBP,EAAIY,QAAUZ,EAAIc,UAAYzjC,EAAU,cAKnCyB,IAAhBkhC,EAAIa,QACRb,EAAIa,QAAUN,EAEdP,EAAIe,mBAAqB,WAGA,IAAnBf,EAAIpnB,YAMRhgB,GAAO2e,WAAY,WACbla,GACJkjC,OAQLljC,EAAWA,EAAU,SAErB,IAGC2iC,EAAIzB,KAAMlgC,EAAQ6/B,YAAc7/B,EAAQ8b,MAAQ,MAC/C,MAAQ3U,GAGT,GAAKnI,EACJ,MAAMmI,IAKTq4B,MAAO,WACDxgC,GACJA,QAWLvB,GAAOugC,cAAe,SAAUhD,GAC1BA,EAAE2E,cACN3E,EAAE/mB,SAASpX,QAAS,KAKtBY,GAAOqgC,UAAW,CACjBR,QAAS,CACRzgC,OAAQ,6FAGToX,SAAU,CACTpX,OAAQ,2BAET4gC,WAAY,CACX2D,cAAe,SAAUrkC,GAExB,OADAU,GAAO4D,WAAYtE,GACZA,MAMVU,GAAOugC,cAAe,SAAU,SAAUhD,QACxBv6B,IAAZu6B,EAAEpyB,QACNoyB,EAAEpyB,OAAQ,GAENoyB,EAAE2E,cACN3E,EAAE7+B,KAAO,SAKXsB,GAAOwgC,cAAe,SAAU,SAAUjD,GAIxC,IAAIn+B,EAAQmC,EADb,GAAKg8B,EAAE2E,aAAe3E,EAAE8H,YAEvB,MAAO,CACN5C,KAAM,SAAU/pB,EAAGkf,GAClBx4B,EAASY,GAAQ,YACfwN,KAAM+vB,EAAE8H,aAAe,IACvB/mB,KAAM,CAAEgnB,QAAS/H,EAAEgI,cAAe5mC,IAAK4+B,EAAEgC,MACzCrb,GAAI,aAAc3iB,EAAW,SAAUikC,GACvCpmC,EAAOka,SACP/X,EAAW,KACNikC,GACJ5N,EAAuB,UAAb4N,EAAI9mC,KAAmB,IAAM,IAAK8mC,EAAI9mC,QAKnD/B,EAAS8C,KAAKC,YAAaN,EAAQ,KAEpC2iC,MAAO,WACDxgC,GACJA,QAUL,IAqGKigB,GArGDikB,GAAe,GAClBC,GAAS,oBAGV1lC,GAAOqgC,UAAW,CACjBsF,MAAO,WACPC,cAAe,WACd,IAAIrkC,EAAWkkC,GAAargC,OAAWpF,GAAOiD,QAAU,IAAQrE,GAAMmG,OAEtE,OADAhI,KAAMwE,IAAa,EACZA,KAKTvB,GAAOugC,cAAe,aAAc,SAAUhD,EAAGsI,EAAkBlH,GAElE,IAAImH,EAAcC,EAAaC,EAC9BC,GAAuB,IAAZ1I,EAAEoI,QAAqBD,GAAOlhC,KAAM+4B,EAAEgC,KAChD,MACkB,iBAAXhC,EAAElf,MAE6C,KADnDkf,EAAEqC,aAAe,IACjBhiC,QAAS,sCACX8nC,GAAOlhC,KAAM+4B,EAAElf,OAAU,QAI5B,GAAK4nB,GAAiC,UAArB1I,EAAEkB,UAAW,GA8D7B,OA3DAqH,EAAevI,EAAEqI,cAAgBxnC,EAAYm/B,EAAEqI,eAC9CrI,EAAEqI,gBACFrI,EAAEqI,cAGEK,EACJ1I,EAAG0I,GAAa1I,EAAG0I,GAAW7iC,QAASsiC,GAAQ,KAAOI,IAC/B,IAAZvI,EAAEoI,QACbpI,EAAEgC,MAASrD,GAAO13B,KAAM+4B,EAAEgC,KAAQ,IAAM,KAAQhC,EAAEoI,MAAQ,IAAMG,GAIjEvI,EAAEyC,WAAY,eAAkB,WAI/B,OAHMgG,GACLhmC,GAAOsD,MAAOwiC,EAAe,mBAEvBE,EAAmB,IAI3BzI,EAAEkB,UAAW,GAAM,OAGnBsH,EAAcjpC,GAAQgpC,GACtBhpC,GAAQgpC,GAAiB,WACxBE,EAAoBvkC,WAIrBk9B,EAAM7kB,OAAQ,gBAGQ9W,IAAhB+iC,EACJ/lC,GAAQlD,IAASm+B,WAAY6K,GAI7BhpC,GAAQgpC,GAAiBC,EAIrBxI,EAAGuI,KAGPvI,EAAEqI,cAAgBC,EAAiBD,cAGnCH,GAAa9nC,KAAMmoC,IAIfE,GAAqB5nC,EAAY2nC,IACrCA,EAAaC,EAAmB,IAGjCA,EAAoBD,OAAc/iC,IAI5B,WAYT7E,GAAQ+nC,qBACH1kB,GAAO7kB,EAASwpC,eAAeD,mBAAoB,IAAK1kB,MACvDtU,UAAY,6BACiB,IAA3BsU,GAAK/X,WAAWnJ,QAQxBN,GAAOmW,UAAY,SAAUkI,EAAMne,EAASkmC,GAC3C,MAAqB,iBAAT/nB,EACJ,IAEgB,kBAAZne,IACXkmC,EAAclmC,EACdA,GAAU,GAKLA,IAIA/B,GAAQ+nC,qBAMZxzB,GALAxS,EAAUvD,EAASwpC,eAAeD,mBAAoB,KAKvC7mC,cAAe,SACzB0R,KAAOpU,EAAS6T,SAASO,KAC9B7Q,EAAQT,KAAKC,YAAagT,IAE1BxS,EAAUvD,GAKZ2mB,GAAW8iB,GAAe,IAD1BC,EAASvwB,EAAW1L,KAAMiU,IAKlB,CAAEne,EAAQb,cAAegnC,EAAQ,MAGzCA,EAAShjB,GAAe,CAAEhF,GAAQne,EAASojB,GAEtCA,GAAWA,EAAQhjB,QACvBN,GAAQsjB,GAAUhK,SAGZtZ,GAAOoB,MAAO,GAAIilC,EAAO58B,cAlChC,IAAIiJ,EAAM2zB,EAAQ/iB,GAyCnBtjB,GAAOG,GAAGonB,KAAO,SAAUgY,EAAK+G,EAAQ/kC,GACvC,IAAItB,EAAUvB,EAAMmkC,EACnB5sB,EAAOlZ,KACPwnB,EAAMgb,EAAI3hC,QAAS,KAsDpB,OApDY,EAAP2mB,IACJtkB,EAAW66B,GAAkByE,EAAIliC,MAAOknB,IACxCgb,EAAMA,EAAIliC,MAAO,EAAGknB,IAIhBnmB,EAAYkoC,IAGhB/kC,EAAW+kC,EACXA,OAAStjC,GAGEsjC,GAA4B,iBAAXA,IAC5B5nC,EAAO,QAIW,EAAduX,EAAK3V,QACTN,GAAOygC,KAAM,CACZlB,IAAKA,EAKL7gC,KAAMA,GAAQ,MACd8/B,SAAU,OACVngB,KAAMioB,IACHz/B,KAAM,SAAUs+B,GAGnBtC,EAAWphC,UAEXwU,EAAK0V,KAAM1rB,EAIVD,GAAQ,SAAUqsB,OAAQrsB,GAAOmW,UAAWgvB,IAAiBv7B,KAAM3J,GAGnEklC,KAKErrB,OAAQvY,GAAY,SAAUo9B,EAAOmD,GACxC7rB,EAAK3U,KAAM,WACVC,EAAS7D,MAAOX,KAAM8lC,GAAY,CAAElE,EAAMwG,aAAcrD,EAAQnD,QAK5D5hC,MAMRiD,GAAOqN,KAAK9F,QAAQg/B,SAAW,SAAU/lC,GACxC,OAAOR,GAAO8B,KAAM9B,GAAOo5B,OAAQ,SAAUj5B,GAC5C,OAAOK,IAASL,EAAGK,OAChBF,QAMLN,GAAOwmC,OAAS,CACfC,UAAW,SAAUjmC,EAAM+B,EAASrD,GACnC,IAAIwnC,EAAaC,EAASC,EAAWC,EAAQC,EAAWC,EACvD/X,EAAWhvB,GAAOwgB,IAAKhgB,EAAM,YAC7BwmC,EAAUhnC,GAAQQ,GAClBonB,EAAQ,GAGS,WAAboH,IACJxuB,EAAK8f,MAAM0O,SAAW,YAGvB8X,EAAYE,EAAQR,SACpBI,EAAY5mC,GAAOwgB,IAAKhgB,EAAM,OAC9BumC,EAAa/mC,GAAOwgB,IAAKhgB,EAAM,SACI,aAAbwuB,GAAwC,UAAbA,KACA,GAA9C4X,EAAYG,GAAanpC,QAAS,SAMpCipC,GADAH,EAAcM,EAAQhY,YACD3iB,IACrBs6B,EAAUD,EAAYpS,OAGtBuS,EAASxX,WAAYuX,IAAe,EACpCD,EAAUtX,WAAY0X,IAAgB,GAGlC3oC,EAAYmE,KAGhBA,EAAUA,EAAQ/E,KAAMgD,EAAMtB,EAAGc,GAAOsC,OAAQ,GAAIwkC,KAGjC,MAAfvkC,EAAQ8J,MACZub,EAAMvb,IAAQ9J,EAAQ8J,IAAMy6B,EAAUz6B,IAAQw6B,GAE1B,MAAhBtkC,EAAQ+xB,OACZ1M,EAAM0M,KAAS/xB,EAAQ+xB,KAAOwS,EAAUxS,KAASqS,GAG7C,UAAWpkC,EACfA,EAAQ0kC,MAAMzpC,KAAMgD,EAAMonB,GAG1Bof,EAAQxmB,IAAKoH,KAKhB5nB,GAAOG,GAAGmC,OAAQ,CAGjBkkC,OAAQ,SAAUjkC,GAGjB,GAAKd,UAAUnB,OACd,YAAmB0C,IAAZT,EACNxF,KACAA,KAAKuE,KAAM,SAAUpC,GACpBc,GAAOwmC,OAAOC,UAAW1pC,KAAMwF,EAASrD,KAI3C,IAAIgoC,EAAMC,EACT3mC,EAAOzD,KAAM,GAEd,OAAMyD,EAQAA,EAAK4xB,iBAAiB9xB,QAK5B4mC,EAAO1mC,EAAK4zB,wBACZ+S,EAAM3mC,EAAK+D,cAAc6H,YAClB,CACNC,IAAK66B,EAAK76B,IAAM86B,EAAIC,YACpB9S,KAAM4S,EAAK5S,KAAO6S,EAAIE,cARf,CAAEh7B,IAAK,EAAGioB,KAAM,QATxB,GAuBDtF,SAAU,WACT,GAAMjyB,KAAM,GAAZ,CAIA,IAAIuqC,EAAcd,EAAQvnC,EACzBuB,EAAOzD,KAAM,GACbwqC,EAAe,CAAEl7B,IAAK,EAAGioB,KAAM,GAGhC,GAAwC,UAAnCt0B,GAAOwgB,IAAKhgB,EAAM,YAGtBgmC,EAAShmC,EAAK4zB,4BAER,CACNoS,EAASzpC,KAAKypC,SAIdvnC,EAAMuB,EAAK+D,cACX+iC,EAAe9mC,EAAK8mC,cAAgBroC,EAAI6E,gBACxC,MAAQwjC,IACLA,IAAiBroC,EAAIuiB,MAAQ8lB,IAAiBroC,EAAI6E,kBACT,WAA3C9D,GAAOwgB,IAAK8mB,EAAc,YAE1BA,EAAeA,EAAa3nC,WAExB2nC,GAAgBA,IAAiB9mC,GAAkC,IAA1B8mC,EAAahpC,YAG1DipC,EAAevnC,GAAQsnC,GAAed,UACzBn6B,KAAOrM,GAAOwgB,IAAK8mB,EAAc,kBAAkB,GAChEC,EAAajT,MAAQt0B,GAAOwgB,IAAK8mB,EAAc,mBAAmB,IAKpE,MAAO,CACNj7B,IAAKm6B,EAAOn6B,IAAMk7B,EAAal7B,IAAMrM,GAAOwgB,IAAKhgB,EAAM,aAAa,GACpE8zB,KAAMkS,EAAOlS,KAAOiT,EAAajT,KAAOt0B,GAAOwgB,IAAKhgB,EAAM,cAAc,MAc1E8mC,aAAc,WACb,OAAOvqC,KAAKyE,IAAK,WAChB,IAAI8lC,EAAevqC,KAAKuqC,aAExB,MAAQA,GAA2D,WAA3CtnC,GAAOwgB,IAAK8mB,EAAc,YACjDA,EAAeA,EAAaA,aAG7B,OAAOA,GAAgBxjC,OAM1B9D,GAAOsB,KAAM,CAAEk0B,WAAY,cAAeD,UAAW,eAAiB,SAAUnd,EAAQkG,GACvF,IAAIjS,EAAM,gBAAkBiS,EAE5Bte,GAAOG,GAAIiY,GAAW,SAAUjZ,GAC/B,OAAO6d,EAAQjgB,KAAM,SAAUyD,EAAM4X,EAAQjZ,GAG5C,IAAIgoC,EAOJ,GANK3oC,EAAUgC,GACd2mC,EAAM3mC,EACuB,IAAlBA,EAAKlC,WAChB6oC,EAAM3mC,EAAK4L,kBAGCpJ,IAAR7D,EACJ,OAAOgoC,EAAMA,EAAK7oB,GAAS9d,EAAM4X,GAG7B+uB,EACJA,EAAIK,SACFn7B,EAAY86B,EAAIE,YAAVloC,EACPkN,EAAMlN,EAAMgoC,EAAIC,aAIjB5mC,EAAM4X,GAAWjZ,GAEhBiZ,EAAQjZ,EAAKsC,UAAUnB,WAU5BN,GAAOsB,KAAM,CAAE,MAAO,QAAU,SAAU6D,EAAImZ,GAC7Cte,GAAOuyB,SAAUjU,GAAS4P,GAAc/vB,GAAQuxB,cAC/C,SAAUlvB,EAAMmtB,GACf,GAAKA,EAIJ,OAHAA,EAAWD,GAAQltB,EAAM8d,GAGlB4O,GAAU1oB,KAAMmpB,GACtB3tB,GAAQQ,GAAOwuB,WAAY1Q,GAAS,KACpCqP,MAQL3tB,GAAOsB,KAAM,CAAEmmC,OAAQ,SAAUC,MAAO,SAAW,SAAUjnC,EAAM/B,GAClEsB,GAAOsB,KAAM,CACZkzB,QAAS,QAAU/zB,EACnBgX,QAAS/Y,EACTipC,GAAI,QAAUlnC,GACZ,SAAUmnC,EAAcC,GAG1B7nC,GAAOG,GAAI0nC,GAAa,SAAUtT,EAAQzvB,GACzC,IAAImY,EAAYxb,UAAUnB,SAAYsnC,GAAkC,kBAAXrT,GAC5D1C,EAAQ+V,KAA6B,IAAXrT,IAA6B,IAAVzvB,EAAiB,SAAW,UAE1E,OAAOkY,EAAQjgB,KAAM,SAAUyD,EAAM9B,EAAMoG,GAC1C,IAAI7F,EAEJ,OAAKT,EAAUgC,GAGyB,IAAhCqnC,EAASjqC,QAAS,SACxB4C,EAAM,QAAUC,GAChBD,EAAK7D,SAASmH,gBAAiB,SAAWrD,GAIrB,IAAlBD,EAAKlC,UACTW,EAAMuB,EAAKsD,gBAIJZ,KAAKouB,IACX9wB,EAAKghB,KAAM,SAAW/gB,GAAQxB,EAAK,SAAWwB,GAC9CD,EAAKghB,KAAM,SAAW/gB,GAAQxB,EAAK,SAAWwB,GAC9CxB,EAAK,SAAWwB,UAIDuC,IAAV8B,EAGN9E,GAAOwgB,IAAKhgB,EAAM9B,EAAMmzB,GAGxB7xB,GAAOsgB,MAAO9f,EAAM9B,EAAMoG,EAAO+sB,IAChCnzB,EAAMue,EAAYsX,OAASvxB,EAAWia,QAM5Cjd,GAAOsB,KAAM,CACZ,YACA,WACA,eACA,YACA,cACA,YACE,SAAU6D,EAAIzG,GAChBsB,GAAOG,GAAIzB,GAAS,SAAUyB,GAC7B,OAAOpD,KAAKmnB,GAAIxlB,EAAMyB,MAOxBH,GAAOG,GAAGmC,OAAQ,CAEjBq1B,KAAM,SAAUxT,EAAO9F,EAAMle,GAC5B,OAAOpD,KAAKmnB,GAAIC,EAAO,KAAM9F,EAAMle,IAEpC2nC,OAAQ,SAAU3jB,EAAOhkB,GACxB,OAAOpD,KAAKwnB,IAAKJ,EAAO,KAAMhkB,IAG/B4nC,SAAU,SAAU9nC,EAAUkkB,EAAO9F,EAAMle,GAC1C,OAAOpD,KAAKmnB,GAAIC,EAAOlkB,EAAUoe,EAAMle,IAExC6nC,WAAY,SAAU/nC,EAAUkkB,EAAOhkB,GAGtC,OAA4B,IAArBsB,UAAUnB,OAChBvD,KAAKwnB,IAAKtkB,EAAU,MACpBlD,KAAKwnB,IAAKJ,EAAOlkB,GAAY,KAAME,IAGrC8nC,MAAO,SAAUC,EAAQC,GACxB,OAAOprC,KACLmnB,GAAI,aAAcgkB,GAClBhkB,GAAI,aAAcikB,GAASD,MAI/BloC,GAAOsB,KACN,wLAE4D4D,MAAO,KACnE,SAAUC,EAAI1E,GAGbT,GAAOG,GAAIM,GAAS,SAAU4d,EAAMle,GACnC,OAA0B,EAAnBsB,UAAUnB,OAChBvD,KAAKmnB,GAAIzjB,EAAM,KAAM4d,EAAMle,GAC3BpD,KAAKioB,QAASvkB,MAYlB,IAAI2nC,GAAQ,sDAMZpoC,GAAOqoC,MAAQ,SAAUloC,EAAID,GAC5B,IAAIyf,EAAK/P,EAAMy4B,EAUf,GARwB,iBAAZnoC,IACXyf,EAAMxf,EAAID,GACVA,EAAUC,EACVA,EAAKwf,GAKAvhB,EAAY+B,GAalB,OARAyP,EAAOvS,GAAMG,KAAMiE,UAAW,IAC9B4mC,EAAQ,WACP,OAAOloC,EAAGzC,MAAOwC,GAAWnD,KAAM6S,EAAKnS,OAAQJ,GAAMG,KAAMiE,eAItDsD,KAAO5E,EAAG4E,KAAO5E,EAAG4E,MAAQ/E,GAAO+E,OAElCsjC,GAGRroC,GAAOsoC,UAAY,SAAUC,GACvBA,EACJvoC,GAAO4c,YAEP5c,GAAOoW,OAAO,IAGhBpW,GAAO+C,QAAUD,MAAMC,QACvB/C,GAAOwoC,UAAY3pB,KAAKC,MACxB9e,GAAOO,SAAWA,GAClBP,GAAO5B,WAAaA,EACpB4B,GAAOxB,SAAWA,EAClBwB,GAAO4d,UAAYA,EACnB5d,GAAOtB,KAAOmB,EAEdG,GAAOkoB,IAAMD,KAAKC,IAElBloB,GAAOyoC,UAAY,SAAUpqC,GAK5B,IAAIK,EAAOsB,GAAOtB,KAAML,GACxB,OAAkB,WAATK,GAA8B,WAATA,KAK5BgqC,MAAOrqC,EAAMgxB,WAAYhxB,KAG5B2B,GAAO2oC,KAAO,SAAUrpC,GACvB,OAAe,MAARA,EACN,IACEA,EAAO,IAAK8D,QAASglC,GAAO,OAkBT,mBAAXQ,QAAyBA,OAAOC,KAC3CD,OAAQ,SAAU,GAAI,WACrB,OAAO5oC,KAOT,IAGC8oC,GAAUhsC,GAAOkD,OAGjB+oC,GAAKjsC,GAAOksC,EAwBb,OAtBAhpC,GAAOipC,WAAa,SAAUrmC,GAS7B,OARK9F,GAAOksC,IAAMhpC,KACjBlD,GAAOksC,EAAID,IAGPnmC,GAAQ9F,GAAOkD,SAAWA,KAC9BlD,GAAOkD,OAAS8oC,IAGV9oC,IAMiB,oBAAbhD,IACXF,GAAOkD,OAASlD,GAAOksC,EAAIhpC,IAMrBA","file":"jquery-3.7.1.min.js"} \ No newline at end of file From ef1dd8d0bf046e3e8d30d443d81a9ef68b2ed03d Mon Sep 17 00:00:00 2001 From: valadas <6371568+valadas@users.noreply.github.com> Date: Sun, 12 Oct 2025 00:32:25 +0000 Subject: [PATCH 050/199] Compress Images --- .../Images/mobiledevicedet_48X48.png | Bin 1308 -> 1198 bytes .../Browser/Images/CreateFolder.png | Bin 456 -> 433 bytes .../Browser/Images/types/Wmv.png | Bin 534 -> 507 bytes .../Browser/Images/types/Xpi.png | Bin 428 -> 399 bytes .../DNNConnect.CKE/CKEditorConfig.png | Bin 1257 -> 1166 bytes .../Sigma/ActionRefresh_32X32_Standard.png | Bin 722 -> 672 bytes .../Icons/Sigma/Add_32X32_Standard.png | Bin 655 -> 609 bytes .../Icons/Sigma/Cancel_32X32_Standard.png | Bin 615 -> 580 bytes .../Sigma/CatalogCart_32X32_Standard.png | Bin 744 -> 698 bytes .../Sigma/CatalogForge_16X16_Standard.png | Bin 343 -> 319 bytes .../Sigma/CatalogLicense_32X32_Standard.png | Bin 711 -> 662 bytes .../Sigma/CatalogSkin_32X32_Standard.png | Bin 805 -> 761 bytes .../Sigma/DeleteFolder_32x32_Standard.png | Bin 659 -> 613 bytes .../Icons/Sigma/DeleteTab_32x32_Standard.png | Bin 624 -> 576 bytes .../Website/Icons/Sigma/Dn_32X32_Standard.png | Bin 687 -> 645 bytes .../Icons/Sigma/Email_32x32_Standard.png | Bin 499 -> 472 bytes .../Icons/Sigma/ExtWmv_32x32_Standard.png | Bin 534 -> 507 bytes .../Icons/Sigma/ExtXpi_32x32_Standard.png | Bin 428 -> 399 bytes .../Sigma/FolderProperties_32x32_Standard.png | Bin 616 -> 581 bytes .../Icons/Sigma/Grant_32X32_Standard.png | Bin 657 -> 603 bytes .../Website/Icons/Sigma/Lt_32x32_Standard.png | Bin 680 -> 626 bytes .../Sigma/Marketplace_32X32_Standard.png | Bin 709 -> 660 bytes .../Icons/Sigma/Profile_16X16_Standard.png | Bin 473 -> 448 bytes .../Icons/Sigma/Profile_32X32_Standard.png | Bin 825 -> 779 bytes .../Icons/Sigma/Refresh_16x16_Standard.png | Bin 396 -> 376 bytes .../Icons/Sigma/Register_32x32_Standard.png | Bin 563 -> 527 bytes .../Website/Icons/Sigma/Rt_32X32_Standard.png | Bin 670 -> 605 bytes .../Icons/Sigma/Save_32X32_Standard.png | Bin 537 -> 509 bytes .../Icons/Sigma/Site_32x32_Standard.png | Bin 643 -> 600 bytes .../Icons/Sigma/Solutions_16X16_Standard.png | Bin 499 -> 474 bytes .../Icons/Sigma/Solutions_32X32_Standard.png | Bin 977 -> 911 bytes .../Sigma/Synchronize_16x16_Standard.png | Bin 390 -> 367 bytes .../Sigma/Synchronize_32x32_Standard.png | Bin 761 -> 718 bytes .../Icons/Sigma/Total_32X32_Standard.png | Bin 561 -> 525 bytes .../Icons/Sigma/Translated_32x32_Standard.png | Bin 683 -> 635 bytes .../Sigma/Untranslate_32x32_Standard.png | Bin 787 -> 747 bytes .../Icons/Sigma/User_32x32_Standard.png | Bin 717 -> 661 bytes .../Icons/Sigma/Webserver_64x64_Standard.png | Bin 1563 -> 1469 bytes .../Icons/Sigma/Webservers_32X32_Standard.png | Bin 677 -> 629 bytes DNN Platform/Website/Install/UAC_shield.png | Bin 1133 -> 1068 bytes DNN Platform/Website/images/Store.png | Bin 705 -> 652 bytes .../Website/images/icon_authentication.png | Bin 1310 -> 1198 bytes DNN Platform/Website/images/icon_library.png | Bin 1276 -> 1211 bytes DNN Platform/Website/images/icon_widget.png | Bin 1076 -> 1019 bytes .../src/Flag/img/flags/af-ZA.png | Bin 402 -> 378 bytes .../src/Flag/img/flags/en-ZA.png | Bin 402 -> 378 bytes .../src/Flag/img/flags/es-PR.png | Bin 266 -> 249 bytes .../src/Flag/img/flags/nso-ZA.png | Bin 402 -> 378 bytes .../src/Flag/img/flags/tn-ZA.png | Bin 402 -> 378 bytes .../src/Flag/img/flags/xh-ZA.png | Bin 402 -> 378 bytes .../src/Flag/img/flags/zu-ZA.png | Bin 402 -> 378 bytes 51 files changed, 0 insertions(+), 0 deletions(-) diff --git a/DNN Platform/Providers/ClientCapabilityProviders/Provider.AspNetCCP/Images/mobiledevicedet_48X48.png b/DNN Platform/Providers/ClientCapabilityProviders/Provider.AspNetCCP/Images/mobiledevicedet_48X48.png index acafd6095b299581a86cfe8e8ccb3ac5a609701a..8ba4a33f5495fad86a9163c6466dd745842cbe38 100644 GIT binary patch delta 1158 zcmV;11bO?M3a$x|B!9_JOjJcoX>k)aQVAwT($dl)BPSy`RR#nG7#A7{1_urd5G*Y& zOJ{_nq@=~f#deINF*iFqS8mO+7+JWn^YuVPRolVgLXDKR!Kla&9LlCkF=y4ighsVSid_X=#?0m3QR!7c@eK zg@y|}7y16<$FXUttg!L;oe)lMMW4Fi;@?1hnKs;IX_Aq?_UO8hClZr5#lFCsf?#v- zn)mQleMU0v&zaDVj*YJr*Z=?kB6LztQvkoeBf-JUzrnw}zs@qh@xQ;n$fEwjzY2=M z#?$w|G`?S&r~=GRlTQH{e_csLK~#9!&6ZhvsxT0SD+SqlsG?vMS4aq=;8NGtuK)i> zotY#cwzik&Ip3qmMc&LelVsw}&3~>@JGi@4tNrlXcrQ!Iv=kvzvYHw|e1RScwMi0w zQJfCiU7^WnB*00#&^-yiiKTTzO1IkW+nbwPRab@l`=}U&lJBH$f8uD<)ZtnGgMexY zjY}W~6(LC9MCoV1k^xk`1gavXCDSZ`ANb zYL$h=cU;$LI<{?>e}GccWCZrQIOb`Zo#yNJ6ouu zbsd7H<2nK4aE{=MDk)%z5JK7G;~Zbu9A3au0G6B!0L!Xre+ba!avAMrvkiUwIMK~| zy#Y&s?bzdBXkX-@p{FYFvE2%QM}QpM@0PHvFE1|?fStEouDrwXcmSZq0jC0tF@naE z_9$!&N*O%jkWqL*S$UPJ5fpBT1LeM^I9OCkl-0RfrI>&vnyx6_LJk6GL4g2r8%_n_ zj<8CL#UhHfe+vTbpafb71a<{bl#bTvbR>|l)rm3!VI%;SdOh@20J^1sI1nc!VIlLv zI7%X!gYVk53mdRe?p9q_gwAKWx;2Dd{FVo(gA!%EcBaiz60llQgWsD#(KTcQ(Dev? zT?kuEQC8o_L*BR^p%0Bq6+{8ZreXgC$N(jv%g%=M?l0I9k)h6tW$uJG~1 z3+zG(cpzh#95DF=)_DBmI>@T(hJ_biSFZgyI0MX!s{kN;*1E;-#4c=GltHKEcuyWs zxE0TP$+SlDx*bg>cu&?dDo4@CD*_OUUzq$By>d?{(WSD?`1NM*-t{j32?X7TfBk>t YFF~QOYO2GaX8-^I07*qoM6N<$f|LawMgRZ+ delta 1289 zcmV+k1@`)`37iU$B!BHtOjJcoX>k)aQVAwT($dlg1qCBGRR#nG4h#?&7aJiXC#0mL z#l*!L7Z*@wg9`}_J6CZjDl3wyyI*vVI5#*N8XG}QSu#03A}&R+u(486Re+PFxw*J& zgrSa;m?R@6MoUdSLPm9Xe`RE5GBY)0ZFep*HCHg@y|}7y16<$FXUttgw7=TZHEM5KeDJpSt1V z-#~qtHr!=p;qhsbk-qlmx{xOllQ{kMshfge#lFDf`jB(*n)mQleMU0v&zaDVj?>Mm zs{jB1DRfd!Q-1)zzaziF%)h|F&N92d#=pA1zoP!a@xKa+zrnx8)Azr=G{DsGzF)pT zS;r*+000SaNLh0L01FZT01FZU(%pXi000A^Nkl zi6#yVAmBY})LcxH_W%E!?zuoUvH95NtVfX#^Rm`#W`AaTaq&M_uhRN{s+-EySL3a5 zj7GT-8lm|}2jT;Cm8pWF;Rktfr&4FS?e!RVTglW%!%xC-QRh;OO6A+d#Wz(^ne1wq zjUwXrs3?mdSyn_*FaAdW)nFP_gDeOrvp{W`NFjho0fQT;m;LZ_BybS9WH|%6M7C{L z0}sQqA%6_~vf;jk+W8X|kw@xECD7enC-76>xBQ`J`4$7B4w66`86a_oOSL2vsIp0W z*@es;k*8@|2{0uG3XsQ^0Pvoko+j_Ve!b(}Y=`6dd^|+9W15Y!qiI?W2nC5b1o+2v zKZ)bKcGW0ojoVa;if?x%Ev&L z0tJ^v!cja%IF4g09FN1{sMTyZ9~Or1 zW4L%j?861h>Np=91R99~`MUPWU{)noR_AP$yahz^<9X_@VGazqfmH#JS#pj5nn>se z{&YGG!}S!wagYPo1ZZhTfFRVQTCK)`2!GEHDMnz!fo7x8Y?53Vptu5v0HGHxB0R*_ z&JC$<`0?!^6X5v)`|h?Q)qsK0iO^4o8u6kr9{GaPk0$z-BsKCCfDf zJk+Lx)ovb1Wi?hvqzQ4@Ew|vX-6oH3Zv@~DB$CdnB#K?xfcFrFQ51DL(Jo@&#Ue^M zK&K#ztUrKM#T^*^5cUr_T;XG}8-E{X0AWO#0y2GoI~e@+J@Be3x` zu;m>CfY7HF4cZgymwJ&%Pe=K9i*Hcqig}OIWuwR2ZSVG$^vU8l<)hNT$_$V}8z$|d zXZmy$FopbQJQly~?Dg->(|-c3`qjVwKk^%xz0+cP!A`CK0000nq#0Mx2(4k7?8Bnj`!Z_bA$LoE+TFAsiH9_G7s zDp3HZfJb119+6xde|*OUcd{)1{kZbdmy^6r>GayE+(5V7eUsJz{r>;qu~+utsKCfy zN}>TZ+^>WH000hjQchC<`_f@P{U-`(p5vR!&5)xvMgRZ+32;bRa{vGf6951U69E94 zoEQKA0M1E7K~#9!b z`>QeUd48KK|0yIz4^~_J@gVc9OloUKYYOm}-4c<3- zl4gV*Ne4=@rWX$nhBoT~dAuLvJmjD?h$q68tQo{{6>QUU!Y@ZFdO8LgLrPP;hA0OGU6f?NhZXf^v002ovPDHLkV1f$0tt|im delta 430 zcmV;f0a5<31IPoAB!7NTOjJcoX>nq#0Mx2(4k7^W%Wo$k3C@QlNG}g#Mj3uo9_G7s zDp3F$3;;$i4X1!dUSAetqbC00d;jW}``B;g!G!gCSUXXlGpYv zt5P&t357o%$$xyylR~Lc$xNHeZ;V-Wk+?NgirF)t=bTWCI?X)0V}mg)PNo^6#-!7{ z0oId;(K2lo12T9&#(9WA2u(f_t^_ua<0`#QUlV>YD$=K8T3`ra^6wR}QTB;hC%Zeh zTVG<-S-8U1>ITkeSyK4N YH;KI$Iv`S*D*ylh07*qoM6N<$f(%K<{{R30 diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Wmv.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/Images/types/Wmv.png index 0c3387dfb7f6fdb0d8bcb6c096926d1ee8252ae7..0e403f9d0647169d4aaf76f40a468f27da13cbb2 100644 GIT binary patch delta 405 zcmV;G0c!r11p5P!Bmqm2B_%GGmzdk%;#^%`f`f)rq6X#$004o@|HS~0x?g0q-uv5W z;aO7PrlR@q&rBO;=!8ZMZf6lZ3#*qn9j4HIn zEdT?e0&W06DF78<&Ir%|FhGFG#ehHufG@C?)j-k{TJmxO_EL5nl72qt%om{ZYbool zN4#WhfOgg=U_%q7h?C;^9n!Ep#oL5G43 z;5eWY2#g{~fnD&vR{_pDPtFVJujEl81dMV91CSs`fyflCi*DKgK@_rrz37wCe*t3g zV1T?X7iT*(ThzqQ&GHYP@&-Rosi5zk()axz(%u}^hLLYQ00000NkvXXu0mjf_XoCN delta 432 zcmV;h0Z;z>1C|7kBmq>BB_%i9-{D+cUYMAfhlq<)q6X#$004o@la!SI#Q=DDe2=2WWz%R)aw5K ze{SN~E>yiEDCCGE!=vLo)hW;J$U~aKQ|Q?O-3IMP+yOwcXW)+PD;(kt_JW%Fei&Y> zV}QpR2aqyxSpXB%mV@e11F26AK(8Y9)PP9!y{6!aNDsqG{7MaYdg>=4uRIW}!+#5S zrUlUVj=)>Xf|s}iAfT{-3jmNa0E5T?#}NS<00IcmD{ByF2k-@!ya@2TL-ROafGy_@ zgXiCOQ7BIj}3>mU;ikZg;9`S*QlPT)HqV3NN|G9M7U zxk&g238TSa&?sk&Bg4ap4RAK0ifLdRmV#uQGFsOlD6KRpU5Jm8#$v&sEj0*05uGhy z9a$_919vruh=njlln1^$)UgHRq6Pt^Bc`a(#?*WwCAor?-Uc3XtH52};O8y}=pJ|J ay6z9*q8->j-?3T%0000kAm0JF2R00025udn`_HuLrN|NsBxVF2Rg=hW8M z?QRG4gdX|Gkp8k$`sK-Lc>bXP000GaQchC<75+i6IQ23P00009a7bBm000XT000XT z0n*)m`~Uy|^hrcPRCwBb(*cr$APfaibPWNM!2NH#KU!ODpno670rOPAF(qVML$-9w zvT{h>o?w55*M}H^%ys<@>P?)WqP-4(MZP`5LA~O=op)aeuge=;Wz(WoYd)6}fQe9R zDs~P7D2lR2WeBpE8Oqj8@(>hJkZwdJfb1zEqMe9ZImQvFVuC)88NkizvzP*b03e+J z_I)rCF&+T+#%&!t+4&mY0KdSQqnjUFJQ;1gIT?pO>5pdKbxLXFXU z9Ds4th8loQfC1nY8iA)VT0@Nhjw@dv8(B8??r{nr<^yKAz~3y(_2c*NklD4qM&tY{=D8Qd;010K`1{tHqQH;CHWWuNfv9Ua6T8|}E;PH?c6$*eS0E?c308zmgfYz|;NmlIBKL8sza}53CsNZt|2ktH4Za{DO2DOlQz^a?U z0k8!D8MKDlY(4b%7 diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/CKEditorConfig.png b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/CKEditorConfig.png index d1f347abb1e83f2aa20253b970f82111cf2b22f7..c68519f9619bb4041c0e5520e5b9f9242aad4315 100644 GIT binary patch delta 1145 zcmV-<1cv+R362SnB!8<=OjJcoX>lq=QzDPDPTle&FgQ5W>?6wOYvJ;X>-R#|?j6VF zpQ){Hyybw1iYCnH9>(Jzhq-?3`dj1m6hKoeg0DQ(?nR-=UE%V3e}R1I_ZoSODbMN~ z$mccF>=3=(AtnBzr zt>!qR;ojcgS+nHc`23vK`;M8O2f^bJtIUzU$Z@Q^TZ4}8V5lho000|wQchCB!P$mEX010qNS#tmY3ljhU3ljkVnw%H_00Ux4 zL_t(|+TE3HcYmrn5JnZ17ZI&`)b=EV1d1HjvTD!N& zJTt^z@4s3>Fmk6;H~32$;8`3KLfpTgM~lUZ^EhsW)xT^JxbxLUh;7TGFdqEr(DTiU zx7z{V3Ita&`hgxS<}Y5Bc_@5-K1q^k@TkQ3i|_l{2Y;ijc)eb9;iC1}z$sy7-$^C{g_Miw41i#8SP7y>Zlen@Vq*B5L ztUDdS28PH}hPRJF;^kfguav@14#Kz_>>LD0et&zLQmY7+GD#Z_MX-lO>>yI3#FbA3 zoE=y=j@Ct?>)*p)p)U0E@H5yABnrin>r+5Y#T!$RQ&{F@?KrdNqAZFs*UJxMg)NZw zT_DOfNp%kMT)&+dbBZDiqvt5jO0(c7f6qslj=?gp6_=m2;`fis23PO2FyFn||xWck@*2tG-S==?E7vNPI zOG8_prcPbxw@cwf;bF4BXv{R~5ATa`v3~_dQsmPnB~GpD%45#@czE5vIqsJN+F)@e zyo#qV)f}!Hb*>MDosfUsJEsSi%@~AOO1#Jv+%-6+>~v`Pb$RIyY%s-ugj7=cf-rW+ zJGwlte{~GEO_Xp>8+PL-SN?Z&IoL_Z7>zN}v}y3BxaXI_@^G9SJH}u}Zjs*j<8qaU zaE4F&{h@12@A&cT>BhH@02r@bV>E7i0PxfuEhl&UPlh{&wQ@%TxF!0>3Gn-m;b{$f z_}aVyeld@(cM1x3{LOe8{`eI+Tpzyht?>sQ{@?E}zrQo={Xf<}XT6m-n&*Qf00000 LNkvXXu0mjfl?y){ delta 1216 zcmV;x1V8(Z3F!%tB!A3MOjJcoX>lFL<)5joZ@lFr%I7CGKTh59Le}nZU-$-z47_c^?&mXZG$f0{`|K~#9!-IZH+qC6Ca6+sZsI{Ni6AwYmcL$Crusi$iH|9_et zaJ9DBnYoy&FKe|IuIDk?@7{@x#=ly+-ch?>VVUq=sKz8^lwR^AvBDIE;7ueg7efqbLru>ANwLEug}$t_{LW=?!N>JEg&qwe#Jx0Ch$=d9uvC9ogVRty}c1j%Y=TeU2IC{9+ zL5HUlTa=@cN8WxH6>sNgZz{*u`kcv3&HLeX5vptfr%3W%?&19*+oj27KYx9GTEFep z;c)n6V&zOEDe+*cNiq=Zv^(O>R`O5l{r1LV(*(hy)Ri#2H3ZVxY>zLJpU3C=!0KJu ze*%{>N(U}vzkw;e@c$L@Y5t>TsAZy<5R^+;@~w*hX`YXwRWmwGnW&fN@};=ur~35x z(t4>G?LNLldf{Iy9xlOfv|c~gjqVlS?2j&dc?Go5`l)Vonq?0F?y8+>>x%!*P@Ax3 zYNrjaMDL{q{Q7-(N<$pA&sE4D=1%pdHuPRw*Zjp84Zr<~)aK8h_|h0@zxe^ydcEn_ ePqfDWWBme8DXum0U}1d#0000kl$9XgyN3V1I84+I{JGXWY3000027Y7t%AP!$4 zQm|hFTq!1oEPuxmRelK$Oc?+F{|t>U8=o>0moe1v(JQerso|*b`tOY1QE0?zK(b1m;cbJ_f4%FXO}$TS=zoty0000HbW%=J07(4z z72Zw>DsPkhz`p&Kbv)^QMF0Q*32;bRa{vGf5&!@T5&_cPe*6Fc0kKI$K~#9!m6PFe zs~`}CYZL*A?I;2U(?CLu@BfC~U1)0V?Vp~>WFqJD?6QHkw?C*6l>}9y`OW1*_Dp$@ zV!agnzqch*F@G#GXbDj<`I^G3UPUtxMYD;julU|)D$FDk48;V+ehBiHEMtOm27c@b z!ICpYSY~nf=n@m9zfSuAx}g?o!Z>*Ly33tbEJf$w^8lHl5U`SR5#CKI#^@Gz1wBee zfF(6igkajQYn%sjzmjg)#~jzyYwQBHpkaI%?M`>n1AikNENZO5<)}CBXg>E-7ShK1 zO^-4IY0X2t72t+@^*%iT>m#;iN&+=8EUSG2=d=X`KC`ZQAL%?5VA3`@>Y)(1gw+|S z*rd3(+HB^FAJ@&kJZBoW+114^GpKNNi=u4uMPDFkqxf^0p?z zn;l@uuYX(mFT`=2D8tPKu-PAv`Diw>CIUj7nV~q?4PU^o9>K18Ja i07?0aU67)^{RKwLJ5vEzq)7k(002ovPDHLkU;%<#H!3Fp delta 698 zcmV;r0!96x1=0nOB!7xfOjJcoX>kl$9XgyN3V1IVh%Oj#Bmo)<000027Y6|k1X8eH z0$eF3hAaw47z%196jK_1#}YQ2Mpb?Z|Ns9RpE47dF{$CGE3q-~`tJ>pFpS<&42dt} z_23|Dlx)Iqspf;p@3`9X(m=9Go#Aacy?-rZ$6rguEQ8U1z3ZY) zy-)eIZeIWZ026dlPE!C#{P*5O-4MB-g`v zoteb&^704rEPsfBAj^MC(=0BIYy{Y`h_m#^uj3;#L*D}ZVAwH!u95}?GgDi8+R3mY zNVj>!hL+HSrZNMI{uz|_j!6$fXt>xKS!9Ig9+ zlLnDBLcr$%Otm-QiFHlVs$s?$(TfZ4@HGZ_#2PA*MSpx;7Sq=Hb|J1fM{Aa4BT zZ)g=+fq#N@>v){rKY*nc5(=mS4^DpQ&{(zGWC8j8ZdNSN9dIYpBvjPI8RCve%vG4s zf06CGhH8k`3)1D?-W|=n49S2ZLbuQyV#>oZ_vg7H0~Kj4#gtcHXFE^!VW&_*2~yr* zzE8eSHW{d(gx{)r%ApAvopQhx=G&JCj6<~B5HlT;=a(zZK`C~x#IAri|NrGfrHtQz gxcnvdif0>t0=Bk89)i`cU;qFB07*qoM6N<$f;Ou{r2qf` diff --git a/DNN Platform/Website/Icons/Sigma/Add_32X32_Standard.png b/DNN Platform/Website/Icons/Sigma/Add_32X32_Standard.png index 999b826656154095e8b3a99f29d30d910ba3a012..e2515237ffc1e1222099c789b41643ed869b4e01 100644 GIT binary patch delta 584 zcmV-O0=NB-1>ppcB!6j8OjJcoX>k)`9smXbGo33Th%XC$FIBi)0000383+kM78P?R z0a_?QrcnV727kvARelNo|Njk)FfOw(u;i!{moXWiFdwHd(eTVj!!Yjo?Z4-`YQt`c z*LmXg-$A)V-SXR()t9E@l)&iAa-XX10000GbW%=J0EZL&&42X%2qsW#y7xr=mgB%B zP5=M^32;bRa{vGf5&!@T5&_cPe*6Fc0fI?HK~#9!m6P3igCGos3qu6Otsv;ELul{+ zB9{O0suh#RqzrDJf1c+QPpGNG z9Cf1|RM_87@=$Z98vuxQ3%>$k=8MxL17_jj0`SFbz<=-_7;FL>Z3naT=Subvz@{_E z$~qvvQ4a)q94(6(oK3e7400G_aJkkl%9y6UQ1}6?xxLgxr9smXb0000383+q~FBNkq z0a_>?jWi{LDnX`E0S*R##}ZY33IG594U8}omoXWiFdwHd(eTVj!!RtcH17HBtKg=; z=ejbtFKWYXw&r znyVlTg~#C_S`V`e=vJylXuIG44R;b~$F_4b>%uRxei97k!p-9iG-7n(%{M`Q2;Tby zKoG*7P)+AX5*3+K?7Ai&RSLVFk`j<#Rx4yGP<7F{Gs+|2F>=nuuA(BPFg(V1K?MW? zg|Ng8rBIDsub_XR5rGi`T)3{bQB=XM>-FMLsRV@==zpoj8fC35bl4wX2Qd5$42FPOn_=4AYbPBfFm#5ZG8Txxs1pKbjJ9nWtf8+^ zE!3E%1((kcV3{VU(Bf@Kp)tj>?15#$1e!WovMLkH9ayqoF}e$N(8dfz5a1Tf557L6 z`<9pja&G_li1R}_wYYq9me2fG`0uY4osnKWO z!*M5edh(IzMfoxC1(yj4u{1Oc0049V03QGV0001#002P%0DlJu z|NsA^0|UbW0kZ%A_u1L}?d|DeV&w@5(E$PLudm{OfZRPj=$DtzCnwJl5%a^t*H~D; zM@Qr(C6!>mf&c&j3v^OWQvkly`4@~U2>MTL?DzT+00009aDPZya{vGf5&!@T5&_cP ze*6Fc0eMM8K~#9!jgyO#gCGn=m#1PuY=r_9|Nl2P0aUu(o!L9%6gZb81@iUve+^u! z38W++e#3GijOA_1jFCwWAG;^Yyt50)I?w3z9%WF3dAr=27V8;NL(ge;%bQ%LmjgI+ zw$lqf$4!Q0?igfa02+-?`g0OcexM|0Tc+Elo1cOeOcKu18{wwoCOkb2)-jn!cc!i$fJ zw+ACm$DzW-@wT}lBi3Bg^Diw^y+o)?Fp$9_mOQ=xuz4)mp< tW-aGr03?6*Ct8#!Qh&8C=dy_R_#0tVEC}H79HamM002ovPDHLkV1g_d{5Jpq delta 570 zcmV-A0>%Br1m^^hB!6a5OjJcoX>qYMG?xhpkO2W70049V0D%Ps0000%000aC0DlJu z|NsBP0RgiB0H6Q>_u1L}?d|0W3DE%omH+_judm!aJ?NL0rw0emCnwJl5%a^t=zo9Y zYHICSS=U%tzeh*pB_-5>fgI-h*Z=?k3v^OWQvmtY?kkMG2nSCWZ6Q5U8EivIsk_OV6Nv@<<3nFR0gJ;L(!^?zzXcmr@E>fd70 zFogWJd4yO)>W{Y@j1HqaK$`>M=DkYI89H=#%XIocjMvv3d(*vPJU$J`kgd1$CRbVD-&dfB4=U6{$gm4tug_n5J2*Jx~>!)KvLnInnWtm}NP< ziX{kk{#jU`DZd#Qco${?9UQD5umU;nYZ=utPLo9>ylpaCkc_?LOUgl@ zNstq;pZUJ;;fXAQYUg>H`jS8Ueeb7fp4%kwO0{yH=QZtBxAp*xXW6Paf5|L-}M62>D3M*%q9E;o9QB4+lBR1;Uw+MpPnBrTjd#!BAIV3HbG9 zfI)G29~!lo@*g(`?j^-?D2VGMA^yCdLE$vQ|GK_Hkcha(-w|anI^@$2p8x;=07*qo IM6N<$f^7f@djJ3c diff --git a/DNN Platform/Website/Icons/Sigma/CatalogCart_32X32_Standard.png b/DNN Platform/Website/Icons/Sigma/CatalogCart_32X32_Standard.png index b9c430bad69261eafc23f5713093495765f8680a..232344d774532bf8442ced1e01f5cb5cc1ab50b8 100644 GIT binary patch delta 654 zcmV;90&)H51-b>0B!9Y4OjJcoX>qKpsg;zIwYRpUqM=JTH^RHRh-hWMzrN$+;hLD2 zsi&vZC?V9-(!q&_j*X1WmXStAMYgrHr<K`hF1(P8&dbVwdwQUpo4T#6up%DfiGPT3aBr29lJi?q2?+_M zq@&<&Z+Lijz%wt_*VWuRIplzb0001&DjU3cd*yz8-k6uuf`iz>z~n-E}k9KUxByRtHk?d+W_w*pySjV_lc*RVS|vYYey6M>a~goKbw zgBk?K&$_Npi$O2ER8nl~ilV9^3BOtrLV})RucZ`1`=e6gW!&U341kkKPrzz66tP`Z zYIV8Y)EFTEq<#iQ*CD{MT2*Zwin0V)3>SStp+O)l4a2A|3TOl(#)KP`sYwV44N9dW zJ;NAgWY{Uy?tVd!5x`g!VKy0gJ;nC!7dp2{>3k&MOI<($!k~?YltS$|dd*ZK^9G|? zQp>Q3CWBp01_YzINp1H3N!u2d#s0t@7u0x$i#1?UBkB!AUVOjJcoX>ql;wwjoisi&u;qM=JTH#F=O-#;V`ALK#l^zG(8k5a zEiSx}jLyr-e|vhrwX~p|n`~cRx~;6Ns;J_Lh_E6aad2;ylYf%)TT-Q@qX`KK;BIf{ z=;wHNceE`az%wt_*VWuRInJV<i_@%K6Fw}Qvj2j&zl^Q2AhEX&ibD8 zEWGi@{h1oJ{D1rm-7$0G_MW-0OsJwuJznDc`qG|keB8WJ&i8xcT*i6&PNV6|fAQxX z00009a7bBm000XU000XU0RWnu7ytkPZ%IT!RCwCWli7BHFc5}WLcoL|$|5d^CHAg2~Mw%2}#i%I66EoY#pmxNy~`M;f=4u3U_5l1zDueQ^z`#8ENUM`NP z(^2-Ti`W(kcK91MN!bDaLodkhvK`>Lmg1%K|OXz)7Pa zAy8VCUejW6J)xI;Y)Wy6B!li(3d~A-W9i)gn@KkI`X}xOZPnJwi)Ymg#qetxhM_2> z7AQ{XjwjWOQ)-tp@DoFMdt&EO%)LjDHuqlVPy7aVtS64_{*NdC00004 diff --git a/DNN Platform/Website/Icons/Sigma/CatalogForge_16X16_Standard.png b/DNN Platform/Website/Icons/Sigma/CatalogForge_16X16_Standard.png index 0ebab20b45d4baf97f3aaacf0a50520faeae2980..aa18b0430f175af6e084293ffd62c8e425f12b8d 100644 GIT binary patch delta 292 zcmV+<0o(r90>1)~B!5UyOjJcoX>ns*TmS$7(Jw1tOG%fPmk$pQ2L}fX1_qmxlUrL` zC@CpYEGv^HBLV^f1_lN#EiJSuC1+)1Nl8h3e0)PgLj(i_8X6iah)jy3lag+-G2N4004VQ zL_t(|+I`PS4#O}A1yHClgJ-8Lx&KYuL`k}-!sbg)A0zsrAXLPb6s=^edLEkwosy!-*LX$1wgM#~fc0000kAm0MRci1OxlbaAy!aEz{10AaB@gTLbtK4+TGy`3k!*Yfv&T+ z2Lu6{o}qJban;t>?#^_kd?A8{iC0xrepw6B*4*Oc=l%Zw%+S^6>Fn_I_nDQI_xSni zygBEq4XCB1#f}rl%h0{Oz1Ex%@Z6xmqFI9I)a?KO02FjmP8m}GC6dQ>WBmRS{>3w+ z*4X~wj?=gDz!O-J(HMWNNklXeSw2rVZ)K|fcjEl^OvmZ%#b4F_|856);?ia!8XJ8=cYTSHF z!iSX&MlfLtn}j=;7bsqqI8RP11!e7dw8*EK0}l3mM+H`HG+#D; z)`Qs0$dx4QD=U92s8VbJu?%tEFTWzY=PnB&79l9Sh;0ltv?pWl8%pq4kgBSt1wUKZ zlz{`*^|Rp_%63_%ioa7OG!>B@bRdejg<_g0veC~p@Js6e;LE;8p`9)~dDpn7H3`L| zicxGtw1Hr00000NkvXXu0mjf DbOSgL delta 666 zcmV;L0%iS{1;+)DB!7WWOjJcoX>lbaA>pSKR!~NXf`M&ta!5x);N#}n-Qf!h3&6s| zuCuoX1Ob|!p>uI@)z;VU&UAu?iC0xr$FQJ&SqrRu44!>E($?Jl{{PI-)#vH#@bvfh z`1#}I=$n|Bm64FBrKQD=6UWQYy}iBhzcJRF5VEnc?ym#iwk}BU+@QgtSq2i-6951J z7j#liQvfCYlKysM{{9lj#WSPU*#3^w@weLPjhtcVk-Qjx$w@>(RCwBrlj(A+Fbsv+ zitRuNO`6(Z3?`VZ@Be_6gbSo|f7~+}n2bJaIYvS7KMLReC>+h041NBDil7MZY~G#p*RL0OT}wrOl@jt=z0bi6kw2^vl^n< z4gkj-?@+>jr zGzV}wO28B}2BtWGtAgA(JsRM(I`>F@TwK-Wk~~^nX1A8^a|aA|Xv{VMXq{(Qrgs-_ z0BbmON%sU4zT6B%RF)6&A_NnkXylVMo3tCpF`Au!>#5Pu4s_SmG%&a;@PfOsCxifz zPQ#|jR({^^xd)9Abs0~SohA(1X{fgvGKvs*IQbU<|7_I#4pE3|L`@h$1-bO(({ z_z+ZKvqa+o1YryjNPv9~HSWxc@k;*!0RV6sMo6lLmI@O{t@qtZi(8S{q$rB)Li&pO zuPn><)e>PIrg56*IbDqia`+>Jcv)}}ihr;E51MB|FQf7q)&Kwi07*qoM6N<$g5&T( AF#rGn diff --git a/DNN Platform/Website/Icons/Sigma/CatalogSkin_32X32_Standard.png b/DNN Platform/Website/Icons/Sigma/CatalogSkin_32X32_Standard.png index c9602dc95976f2e237f0a601d76e06d046e2ac81..80e6c9a11016182047ca3c5b02a42248775a53e0 100644 GIT binary patch delta 737 zcmV<70v`RP2Kfb$B!ACPOjJcoX>q7%3#xDgJR|`G0ssU701E~H00000000OB08K6e zhExTPSqUo`01E~H#e@TJMFnL)0Et%sn_~d`xdH333jD$Y>$oGncM0FSaMqk?TD(PayttQO=<0QUFyhtB?mvvdOj z1h}Mg!tG3hXB*PVtaiN0Mz21I=$mx_000zpQchC<_{Ufs5=I0JFsRk&gIDLod!4k4 zHulc|000SaNPk�XT000XT0n*)m`~Uy}ut`KgRCwC$l1I|pFbsv&D3WTHWsoXV zv5FDzAmytShkv5`)`h^+r>7JEL^(m%x}gCq z4~HdWZ3mEn{0oE-WuDt)u%7@A`Eq$!g%HA`%_SuhWu&Unc<@i5?Fz`6m23vqJHGEk zd6`?D>!>m*(SQ}l46^FjbqkT&9;KdZN4;$tZlo&;9f^;RwQQY#e{G9uZc~JaVOnaW z`u0`8*MI9ZYYR4itkU|i9BEoW5tWL*9|S50CRkfB#_F1-@)2yL6Y4rqq?%Ykewj(C zstCg>9QfSSnzZpO+cmI4yr^iJa6YfYrcautE|TqMl9&oHC^h6Duwg~XbXvq;@ou-9 zZnmfG+c{38IVJ?-VT*&}`FTH;oZq(R(;~i@|5{okl6f}CY`>pL-cRqdI8iU=zZF9s zwNK)KWaC&KCAZgrsOeh1?KqC@Tdp^RyH#K$Gn*G=bVTr9E)L7kNKW~h{NLgSb-OL5 T=`uq7%3p^wNhExRv0ssU701E~H00000000OB0FGG+ zD;NN(ZvYDh07NJO#e@TJMFnL)0Et%sn_~c3HUz445c#+Q>#+*_!UMi{3G=lE^Qr># zx)Rxw1pm4K;J7XC$YSK91?jXQ$FdpTy?5=rChx;G+^!q$(SMA&zh;}np4q5Le6J_W zx?9qrJO14T``%69wq>=1AgJ6GH!>v3hzsYwPV(i&|Nkz|xIte~DddGc z3!khOg|l>r&i>>~0QUFy0|Er1j$F8;bAx9a!tG3UyvjzeKGMmofqZB&1Ein;000(r zQchC<_*m5)5)?)R3^3?}!&jf@#Cx5zw$#U~-O`gB0T_S6NklPJyV{V517TAjTY~!?x`n9(tj>NSZQ~X81t{M!_aD9WE9Jf7-J8QkK>5l-Q3(U;mE2ZRP{Pyjd7M8>7qL0I+U4u4)*D>N=)gBms?)B_e-E2?By>6~dJUq=h6_MGt8L0R7D){l^jf!3O@=N&en( z{?$AG{r>yTH~rXM{^W}P?y&UH(f{e3#sdTX;7a&K&?Mdh*=u3z zRR%9F@;rYBPHCFPY#x80cs_5y`Ft*lLdTFFvcq;RVC8n4Ww8;K*i=_>Y=j^2oI@<}#&w3j3e+-=i< zz)>IqH`O<5P2bl*PZ}j~qH3#8aGaiz)(N|Jf`EX;M4_UCZzn;D`7NL wB?6c7mk-I|jJhIW=u+l8f4oF!gbz!_UqsnE95l4|G5`Po07*qoM6N<$f`r5Zr~m)} delta 604 zcmV-i0;B!q1d|1jBmtk1B_e-6UF?yaufd2`YyD3T}*-%L#Gou09K8vp*{vzs!cSt`PFV6uN9B3*SIRR910 z5p+^cQvmN=3pV4T7== zg2v<+on$1ZKbKLJQ*3D1_lWV3JnepF*G&<0|U_4+p?{# z%g)ga2?>UZjagh>aR&$Y`TGC=|NH#?>Fx0G^!DxW^V{R-%@Gmrva6s?U^02=QBmqm_mq+4T*bWy2rmD;DJc*S5I zJHRM}3KH`&2!EB<_IVnBMgd~^z(Ics#(Z%wMO>yrw@%bD;UE(M>uFh*sjhTls34SVT82@M z11YIdgzNBJhJG06EU#Lh1;MtyANu`luSy2t5ejVc0DogY!Z>gIC_(caLc`aU3?RO) zd_vC^+=I|{-AoUA`t^cRQbHaC+s&gJd_DxnrSkix9&ATFxIQ||YxLY0zpb)hRH9!y zI+nXR-<0a5if04mg4)-kv~}PFn|5r9{>OV002ovPDHLkV1knk0P_F< delta 579 zcmV-J0=)ge1n>lqB!75NOjJcoX>roq;XD}`3=Itl3JMJl4rXd?IzB)E000961G25H z%g)h~4Gs+n37ny&hKh|@TwQSo2eGxd_xbw&|Nr~^{ps!S@$~lX@blZ_=+YY-@3OL_ z0s{Hn-L?V({_^sqdwa$K0qS;k%+Ju$kdW6yL!C-W%ve~){vnbB0000JbW%=J0QjRu zGbg`N2Nd|<{BFOXd)3PCLWIweuNZ%SNkl70Fbz{@=wjpI{1R>vE$EI!?8sp<2SHeDJ&$@2v*LXe#9)(LR@a!9C>lWJn zS%ebQPY_PUG?4+sr^$5axqyFj5RBHkr^%Y0UJ!zF@OO?XSlzd-@m}BGg5zBH^QJXe zO>1!L(6%_B=Sun0%D2o|T~C^ZHLlM$r+d2dZJw^i-d(III%?Ais*;FV=#v%3SZj?j z-JslJ6ww6Ba3NCm^Kd0>@$->O_;ctZjIk?Yr_**fC(Yxpwa@d^Pkk4}!Cxl?J029Q RNrV6Z002ovPDHLkV1hoKAcz0} diff --git a/DNN Platform/Website/Icons/Sigma/Dn_32X32_Standard.png b/DNN Platform/Website/Icons/Sigma/Dn_32X32_Standard.png index 62ea97752cb2ccf4c154da6ef964e89833d16018..72a227dc5d253a196d4ed333ced65a4b20775851 100644 GIT binary patch delta 600 zcmV-e0;m121%(BWB!6j8OjJcoX>kR8Gf%uNBwG{!3IZO0DGN6c00RI6AqoHh00BxO z2x27v|Nj-6F$;__BC9VQqB7d^(!}e&_Wbmq-j_kLOy~FH5R@^r<)>P`Vt>+iEVd^$ zxHMYHNt4`yliy-&&15f|D2Uk|jLvss0000CbW%=J0RH}_J`3WGAYKZ`&-FRnvXQ?S zf2v7DK~#9!m6O|gtRM`9t8&!gAczX;Xy^SOa)+SZcG{b+&x^qN2^h%7$6v&W01^JX zD@8*?1O?g%{)*;&7@jzi=ulOd&fP z(-XB9U@xN-EuMmC06=@%FJMnco{3fq0K{bDaU2QecXtAZOE4Afgn+Ve1=}|I{Z)Y1 z(Lat2F2yQ_8B_=x01v;<8E^-LFcE^f0Fw!*fiHD{a{25VH6fstUDtXWA2<1}e_mIs z@Q{QmWq@#Zpa&lkV5NAclzk)m4ScI6ymQGkoWiWjI$yr4m(}D13@b^h2~wD4S)Roo zmh3}WfJEzMl}FuUmdT$Epy3#L*wwM!&iqCTE#I#Dr+j&VI{JK$5o7h**PP zwsqB!ub0h5CNfe4Hu(4EIEnxILe#C`x7LuHF#35DWrTlk9mxfwb^Xe!DHHrh^GOb^ m%Nh`a_I+D^BES^MoBa|u@JkAq0R??CPrNMv3IZO0DGN6c000000ssRY2_#z- z1Sk#xN+JkiB>(^a6`L^&j4>jsFCC&X#OuEH{PaPxOy~FH5R@^r<)>P`Vt>+iEVd`s z^2|24G+N0?liY%*A0000EbW%=J04o0e zKH`oF8(5}p$IlUrdaEE1g{yMZ7!X7Sqls0M_kY7ZgW9^& z-gJFl46L64XW--GFA_w8i1^**GN;ai9L=Tp#ilOUxdt_MakSuX$#WOx>zC%mmC4yB z)OEPnc3t2SHGc>+`yiN{9~&&) zrg+X~A1qF9n=s{5^`v^thQTOZ#6~Gq0b$R;3_c`?l@g^= z=8d?G;2YJJ*bUA!oT3`~p*wt=^+SaTSga&TTS!s$eShElM~^-vNM-Dnxaflj*zY?8 z(btz`zmDlf0OFf^LOc5DaWMr$A|jRZRkYE+Bs;*#CDjozRa^Yf)@ez;Znls}AhHQ; z@XwE9C%*NmFH)SI1{Z|U&yy%4;{T_^6Uk_nJy98DGWqfNxJZa(IfxY`d0W0CT!;iD c1V7pT0PVszQ2MB?;s5{u07*qoM6N<$f?pFV3IG5A diff --git a/DNN Platform/Website/Icons/Sigma/Email_32x32_Standard.png b/DNN Platform/Website/Icons/Sigma/Email_32x32_Standard.png index 87a1045ca30dd8fbeca1315c768e51f8cf82e2c5..c1af343ddaed021c75fc05fec2ec9d50e3ff47ac 100644 GIT binary patch delta 438 zcmV;n0ZIPz1K0zQB!5v*OjJcoX>om~r$?TohG|+97Zgs8kd=II000041q2fk4+u0j zJ#~4rn~-w8!=Z+GlhM`4v#P0&gubSofyc|%$H8T^y7%wy=-bz{s$Ldp0B9A=TWr5BjW00009a7bBm000XU0FkW=e-%kYK~#9!y_4H= zgdhw+S3wFDg50X~|39=zbX&lkKJ=l78I{Q);UbU6|L``_hvmAAm`+#^?|n+{NhxL4 zZT@v`Ld-l0b8!tA?}eq*xukE(Tx*q$pcfoei@(56%+d)H&#$Hf@f>!k7jOwaRWk7D zXhpsg9A&1-VSO4+f8D!4TQU7$G{ajeQQ-2^wndAC004?HWXQtt!>f43319>Z{*%c< zz!eQ}HX$?%Cr**k079{#&HIVM$`A=l4XCgAXE-M;6;Cg2OautQLVG4UaAIXMf-j~O zq}?bxD7)vNAaJpE!z3lAg$B#HxK<}@FX#jt^T1HT=6xXBELJf4$DQ`~mhgh^*rmB4 g^{@BqcE$e27XTU|hQpX9NB{r;07*qoM6N<$g3yA?l>h($ delta 473 zcmV;~0Ve*~1M>rrB!5~^OjJcoX>pZ&Z+)hxN1mh<7ZiBG#ZHcp000041q2fk4~A)4 z2sAf6b$PR!kfDZo$g`?#yupvp)2WYyfyc|frk!Q9y4J_R_wVlL+t-=Z*;%WwsNUkk z>g?tB`P<(JD*ylh4RlgYQvmq;`a=H61{`Mdk+#vBx={cC0DlQ^NLh0L01FcU01FcV z0GgZ_0003dNklKr!So*o z0yD!xSbBi^hA+cWuo7I}GBFE)_ZG@CF`fepyCV2vN>V}DiK2tB+v){)PF8N1qTsYp zZ#fp{s)Xqcm0*{(p-ExatzosL&~Kkt%ImG*4b`!${(>^U{$H10>~DMns4ycll{fL` P00000NkvXXu0mjfx#Zn@ diff --git a/DNN Platform/Website/Icons/Sigma/ExtWmv_32x32_Standard.png b/DNN Platform/Website/Icons/Sigma/ExtWmv_32x32_Standard.png index 0c3387dfb7f6fdb0d8bcb6c096926d1ee8252ae7..0e403f9d0647169d4aaf76f40a468f27da13cbb2 100644 GIT binary patch delta 405 zcmV;G0c!r11p5P!Bmqm2B_%GGmzdk%;#^%`f`f)rq6X#$004o@|HS~0x?g0q-uv5W z;aO7PrlR@q&rBO;=!8ZMZf6lZ3#*qn9j4HIn zEdT?e0&W06DF78<&Ir%|FhGFG#ehHufG@C?)j-k{TJmxO_EL5nl72qt%om{ZYbool zN4#WhfOgg=U_%q7h?C;^9n!Ep#oL5G43 z;5eWY2#g{~fnD&vR{_pDPtFVJujEl81dMV91CSs`fyflCi*DKgK@_rrz37wCe*t3g zV1T?X7iT*(ThzqQ&GHYP@&-Rosi5zk()axz(%u}^hLLYQ00000NkvXXu0mjf_XoCN delta 432 zcmV;h0Z;z>1C|7kBmq>BB_%i9-{D+cUYMAfhlq<)q6X#$004o@la!SI#Q=DDe2=2WWz%R)aw5K ze{SN~E>yiEDCCGE!=vLo)hW;J$U~aKQ|Q?O-3IMP+yOwcXW)+PD;(kt_JW%Fei&Y> zV}QpR2aqyxSpXB%mV@e11F26AK(8Y9)PP9!y{6!aNDsqG{7MaYdg>=4uRIW}!+#5S zrUlUVj=)>Xf|s}iAfT{-3jmNa0E5T?#}NS<00IcmD{ByF2k-@!ya@2TL-ROafGy_@ zgXiCOQ7BIj}3>mU;ikZg;9`S*QlPT)HqV3NN|G9M7U zxk&g238TSa&?sk&Bg4ap4RAK0ifLdRmV#uQGFsOlD6KRpU5Jm8#$v&sEj0*05uGhy z9a$_919vruh=njlln1^$)UgHRq6Pt^Bc`a(#?*WwCAor?-Uc3XtH52};O8y}=pJ|J ay6z9*q8->j-?3T%0000kAm0JF2R00025udn`_HuLrN|NsBxVF2Rg=hW8M z?QRG4gdX|Gkp8k$`sK-Lc>bXP000GaQchC<75+i6IQ23P00009a7bBm000XT000XT z0n*)m`~Uy|^hrcPRCwBb(*cr$APfaibPWNM!2NH#KU!ODpno670rOPAF(qVML$-9w zvT{h>o?w55*M}H^%ys<@>P?)WqP-4(MZP`5LA~O=op)aeuge=;Wz(WoYd)6}fQe9R zDs~P7D2lR2WeBpE8Oqj8@(>hJkZwdJfb1zEqMe9ZImQvFVuC)88NkizvzP*b03e+J z_I)rCF&+T+#%&!t+4&mY0KdSQqnjUFJQ;1gIT?pO>5pdKbxLXFXU z9Ds4th8loQfC1nY8iA)VT0@Nhjw@dv8(B8??r{nr<^yKAz~3y(_2c*NklD4qM&tY{=D8Qd;010K`1{tHqQH;CHWWuNfv9Ua6T8|}E;PH?c6$*eS0E?c308zmgfYz|;NmlIBKL8sza}53CsNZt|2ktH4Za{DO2DOlQz^a?U z0k8!D8MKDlY(4b%7 diff --git a/DNN Platform/Website/Icons/Sigma/FolderProperties_32x32_Standard.png b/DNN Platform/Website/Icons/Sigma/FolderProperties_32x32_Standard.png index 4b63e247b9300a87d6c639c222d7b262416ee37a..2f7ed9a00a8ad9a24d7f6ee62154c26ca61957c3 100644 GIT binary patch delta 556 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 SkD^1O+7p22~FORTB_91^_G#000003jhEF02*)< z_4V}%i5LF({|0;(9Ih1tY8Jxnx(IU?5}6k~yEp6l>J+0CX3tou=%di|%_EH?pyhzx z_uD+HMS0VC17a171m!Kt0Dk}g3v^OWQvhgz()OXt z6-_GO{qY1E00009a7bBm000XU000XU0RWnu7ytkPj7da6RCwBzli7l!AP_~Pfq)T3 z5d?{#ZF=VaKXD4mEcWs+=Lxw-3XwXU{s&fZUhs|>v}XIvil+p9|12A8zR0-PU{E0R1fi6VZ44u|SM*UDq0D`W1nx&{Eui2sUAo;Ql7^vkiizT~wV2 zT3b6ekek~RtAofjcouY@@;dJV*+5WbI%6eX`HLoM{eKYJLF@UuAcq!(t`$;hQ-3KD zM}YzdVUW`1-1JZEAlk0T=hO-@N*Qwz`+-O~3Za(t73`v52{5*7XpH3u3n=^>CDh1< z1EVoPO3a1oXuesTsNLvmW9muod5aZNjSh`b>WmyQ?=JiQ<^&B;kO6a2?su0_G(gF~ zDCds_;8Mb0$b!la#0$A_b~+fK?5OUT@5Ta7CXJRup4*Bj?^VJBgmU(+Eur&1kt_YF nK|v`>3Y5S0FJo1Py~qCmNWe0kB74FMel1tkRl1ONk76A(KF000000000B00vbL zC4>$da1{0R^$Uy^kx&(X>-y>xqZFy=qtNut3WFJ-<$&Jz+dQj9dDD4D!aoCI6^!I; zE5HmQlP_x4P-4hoFS0C<-i@^Fhi1bC*Y2-*;6W86H8ubM01b3fPE!EOXn`vBp#~LA z(*EF6wrC^(000SaNLh0L01FcU01FcV0GgZ_00058Nkl`=QscX76V*r=S|GEgtwZ7OsLPdbD=iHibg> z3xT)I+EG(n1u6A7P1`o)kgNO2HjUcN5KfpX%u}}t&jCUmfe_YuKl3NK*>?~a3PrO| z!*@Y8g%`>qlX6n&ml3AToWKMKjg;2qsyeYvR+O-*jL<@VXRVaR4Y3~{Dcelfvw#si zsG$Ok!x@v0WeWwh+YJ_#P=Q7VMy^IFeXi>=#*@Vag$id>sZwdb`y2|~gbU+A>5W$I zz_iQO=Vd_Lc0z?WK=Cv_r;$IqjK^qbR2*5BY0N(h@W2Oj_KFANnFfMCuLK&Pd{UP_ zKaW0h#te=@1E1#C+!-;guh$y60yKWh(I9a1u0K4t7%nLLdiOvHqZo+7zr?OjJcoX>rB9y@Gsw#>2z6wzk>T)$#H1#KXeb+1ROthR(~% z)6~?FQz3tFad57RiJ*&$NGK?)q@-{V5?u}t>gecnb8@U4Ailo6(a_H&78Yn8AJ<=E zudAxKwzk-|35Qd3_1`;9x%D#>9rk8{}(HZdI;Lyw%^qx|9>VklM#e}i87lhKa0nm zu&aMUU+7u(^ZDv|TvgR{8-~Z-cKW>A9}FW6q(}OyGOpJ&4Y$1Q{I~8)HQ|9gHaQl~wv`(9Rhf>((WA-8k0fw_7^Hd@uSEqF~`!7fWZ^xgldL?inU3 zgm4mg1@(ZJ=jB?IQ6~2cSY5z62X)IbZ*+e`Y^29rnE)c>(XzPYg-a*cW)K-_lnxF;<>EnW#QN+=64M-%AYk)seMu@E sS`!afSD7Z}rWZReRg4_xZT#na11LEkOi@zgEC2ui07*qoM6N<$f_$+Zf&c&j delta 655 zcmV;A0&xA51;quBBrnELOjJcoX>rB9y~M)8f_#04P*B;`)$#H1#KXe3wzl2e+s4Dg z&dbWv)YQ|{(veLef7{T}aB*-*C@63c5?u}t>gedBiixZoAarwbzP`P&sj1P>&m|TX zXdWNeUt+JTs@Xq6xVE;vqMnv*pWOw{7z1Ke*gdgH*``?QvkA<90)Ca zo|u}(8<3p!{l!tv+Wr0T`=ShOKK=e>>iPVJtL4JRq`yem)7+U~aMbC{gP*s|o)NaE z00009a7bBm000XU000XU0RWnu7ytkPVo5|nRCwCWlG%2GFc5|bN)reK*~-2t?t8UG z7Pt3*se&9We_-3&_Pd&s`SZ_AG8FYM>5fL-pOd>4waOfuGQZB&9x@cc;O#KsrQn zPtlKQzV$q5e7y!E+?++3Avl=$`cYTp=ui^LvR4!Ie+fdUKk#GG2Y#9+b54K}TN7Y1 zL4}8yCrNrfCv%=RXvJ%^2@s@xF^P|9oQooWG_5d=Hc8(Qj0s@lI5!Fb4WW$d0+VpO zz_P5cjR6k|0|eyeq>z+(RseGz7XA)ZIx`2^Z5BWZuL0*L?s002ovPDHLkV1fVvLMs3O diff --git a/DNN Platform/Website/Icons/Sigma/Profile_16X16_Standard.png b/DNN Platform/Website/Icons/Sigma/Profile_16X16_Standard.png index 18a7b52c00b741a04e2b9450169b36a486b7fae5..f40dae79afbe3467ce58f5e0cc8f08fa8fd99690 100644 GIT binary patch delta 386 zcmV-|0e$}21Hc22Bq@_nOjJcoX>kBY9dmbntH8Sy6&9tZpBWq;0s;a+N>f%|XuQ0^ z+~47mP#Av$bT44W-tqDBNxj)}&EtR2tH7pb*01wkyIdTzB7~852SZU09|aANh{% zx-82qSkBY9RL6Tb9a6e6&4vB9;K(BKuS{s0|QoGXsf`x z+~486yup!87=Q8c@=3kff6(M|&Eo)*Gyr%n8=g&sxXD|@-H))oJvuq0-0P0U)?%Tt z4u?7q4h{e0$Y{vlFtybG$(!rKn+R<$hOnU2u#7^hXp+_CQ(a%q(a-+>{cmn=a;=EV z%CC^cy^(om@x^GS0000JbW%=J0OttBDn$5`61)BU?+VtF#ox(rs}<19k=_`8yGcYr zRCwBD&)E`!FbqJ^6li62FDl`v0G1)EUPa&s**!4*~c?XFn(gC*6Lf&O2!P7=|UgWmpa6o633BcOAM??q!8|d z@eA*n1(shN#5s4HJ?i~;kRs1f@2sxtW^yrj1uk?ab?ci>O>3YWja3z$lv0se0rfb) zcx_xosEQY0&m6}zSEP+mOYl3xexY+h$YO566UwF(ULLNgy#N3J07*qoM6N<$g6bK- Ag#Z8m diff --git a/DNN Platform/Website/Icons/Sigma/Profile_32X32_Standard.png b/DNN Platform/Website/Icons/Sigma/Profile_32X32_Standard.png index ad7606e7dd64b6e9f2bab40689cf7a98fefbc802..8588859e8129591b32fbec9e754c582fc733854d 100644 GIT binary patch delta 735 zcmV<50wDdl28#xeB!9qAOjJcoX>lbdD9Fy$y1~Pmqpkn|03|Ih0|NtafsqUk5;~e) zMM_WrHx~sT4~LGGVrp|?#obfA)|%Vuam(PV%+~;GDgcf(1Aj7y)aKgv`~aFde9z;) z=<$id&;I`YgOZ={^7KKu)&N-~Y-(vsN=j#{g8##i9v&V4_Gav-v%Uoc1pm;cLQg)}oVxvr+`v3`n&gjS=r;MUIE%C?-; zvngvs3{<)g0000GbW%=J09XF~{04s>{xtrR*qG0|F*LCYf7MAuK~#9!t&`h! zqA(Odg@n7*q6HkC7!^`Pfq{-7cxnItuX++fr_;+@_Y-UFokPe9qtQ=bSl?hsZ+=T( zDAdFcUw}=j3<3G|1;nJf2y{wG@%s}6q11T`=F?Bi3B`^k0*uLQDVPgpz;ZbwSOyNp z-p0EJxS8EwD5g;o*$Pe<8o_B<-QamJFnyPD$SV z8OXa9i2#W}_~L=&hrg2ij8q<2>aiSrQ4p3NdL9{5kIH{R0Rw8r9(!_D*GL4%Ead@z zL0vQ3zIC9x8>^t;H%3{nRRX{zW1y?xd6#$jHLI%1X0{=MbtXWdt3_ZxFM@#8!2${! zMkuSb1o>eYZ3K&fAPB?I<-q{*-xu8bzB|$s^$27cY~^Ju3JLdHWuzGs)1(-uNLBHR z&xc6hdF#R^4Mi6?j-$Kdt^beh*tOu!X~sJgNCw8PVrU=#W6iK&49C@b{R*Q!Rm9fD Rt91YX002ovPDHLkV1m9;Yia-h delta 802 zcmV+-1Ks?K2Dt{1B!AUVOjJcoX>lbdD9Fy$y1~Prrmg@003|IhaDkBw4-xToX9v&V4_J8cBv%Uoc1pm;cJ zxX{O}hOFZ6{^iaWlSOoKZ>_w>E3(r6*|}h@e%jvRgu9qadWAGIGN97kl*iS%uBPj; zeqCK%iid=AqKHz zn9sYkN%BGf0Dk}pa7bBm000XU000XU0RWnu7ytkP>`6pHRCwC0lWljJFc?6E1d%tX zRnSeDQ9}_G7}y~w_}>2ipVTJ-)@^OS?SA5%d(T5iLaX&ZP&!|rR9=_AMCXA(WbNB0 zXfhF+p!og?g-qH!XcJOIKRyr@gcwcWj`|-MxkNK09)D<>JD6}roB=SI3|y@a3=Ic! z=Mi9L@OUMdB>B}D;3|*|jDu%jK6fAs@)F^5LTP@*xK{-}59SQV$uUk&l4y^y;)Mq4*ta z1MbZG05DmvCM2bh(H-;jbWq0ah#Q g9UBkA-1sN{~8E7W}0009=9U6Ef00RIAAqbw@pb9V! zN1z~tyo*4BO8)=;50NtN`|K2;E!*_fSixN&t1GtXtCQbn!0EwAydrDcKch7ia z&@8Csfr^+yy#N3J4s=pZQvf__vkA7`9a8>(`RluV#Z{gF0Fkg3f2v7DK~#9!MUPn$ z!ypVp$-K-``9s%U}!Txm=O2Isg zV)R^c&QUVC@FW3q_?WLNBcMNwRbAi$xCscJL#JF|iC?XW5t*DM(gE1cvx%_>r>sf4 zjP0x&GRY35i5LL3Kw3GGmb)&9Q}9SBQRwfFX>n-Z6H&MWQcQ;j{S>s5nQNWR^cJ?R c@7+&+02E0JtEF~JTL1t607*qoM6N<$f?daxbpQYW delta 349 zcmV-j0iyo+0*nKYB!6a5OjJcoX>l5OBmfr$87~I_000w?G6P2)00RIAAqbw@pc!Z< z3NQ{wpdf_2i$H=({{Q~&`|K2;Eew+~Age33=&RlI+ra6;Q@~Y7ydr|*?rfH1$%f1HZhL`=? zN9PcLpX)S3XN^PCV|R*kSej{rxl z9Bi2^6JY_Y`(8Piy%k1=na8@92{Z8yN1=&U0GLY2fi&N>iYO;sLI|YV>tosz(L4tt ve*s)fD}PJrZ$Z<`XDLtF{|g)2w)SJ+izN(Q`A1b|00000NkvXXu0mjfkmt~vj6}8X|m$i93{YBT#6bX2sU0zo6sC+oUYRE z0BE?j*6_#P^OeNsbh6&)#n}te->@yffQPbcMHwKH~0}5=zc`P-T=Nq>jWAk%w&K^$4m77n?-Z22zdhk&pMjtdeF-N0000< KMNUMnLSTZa#pN^r delta 474 zcmV<00VV#A1hWK?Br<+bOjJcoX>mt~vj6}8uF~(<93{YBT#6bX2sU0zo6sC+oB(LJ zw$|{K#OG$N-gL6wkz5!(Z@B2o-}CK7KF{X+`uX@lme0Z5^CX1E?#Z|7b7&fx*y=J- z_S?|!GBNO_pzMx+K&RbtfStRZtZBHm;E|awe?>_|K~#9!ebd`^gCGk$Diy)BbvGY26!MM~Y+D)Q3zh3wI=)ev5IPT=Yo93#)7d^=nkcl_HMPY!H zS+&WN^QI`uGM+(y{$A&(Y+oh@u>3uBzVyXsWUlyGMc&MSvedmjf!Q-Moq2%k4~Yd- zfAp9VQPZ28`|jCIkXM@P=UE1}X%Dc2I?V01K!Cy#u2bcHk}; zlzs!~KQO2Xd62Gvu7|Nj8z6dNK&z(ET)qQB?T7aM-7ybR%%BJyK)MdL$sFj;K<8 z{c&_U4=^TT8%F2?7~XC$BLbjR2PAs|@CHgf$bn=m065fLQJH@h%sq*sKdUxD%}s86 QZ~y=R07*qoM6N<$g2=Dw%K!iX diff --git a/DNN Platform/Website/Icons/Sigma/Rt_32X32_Standard.png b/DNN Platform/Website/Icons/Sigma/Rt_32X32_Standard.png index b48ae74d8b1640a4f9daa5a6de7a551438471890..5892f3e73627d786c23cb94b24cfe01e28df1ed8 100644 GIT binary patch delta 560 zcmV-00?+-P1>FRYB!6sBOjJcoX>k-=8v|Y_0uKZQ9|~EuWfE*A00IC59SIA5FC>R6 z4qqTEmOeCk8A7O1f5#G9r5XSK{|$~YE3q#dqcHCJ?X2UY6__x-=)ITNlt8{S;Pc*a z%5Kl@&P}~cQ^+&Z^23MKe=M9Xm)~!1b?n;!000qmQchC5lcl?UBtGe|kwoK~#9!jg#AUgCGz^HG&{snkWh=_0s(RKXzt7V{9I}pIDwPGw6^c z|3?T}=0GWh_!P@rRh)azd8KlBRYaCo+}WuIChK^WXK#uqRpX}q5$Pw_s8XEsirfAT z%d3|``9x4itCJz5YKCvZ4v3}o(5Tp|sI|8{L8GPDf3*k&ipC9*m6{A2xu&2ZqBh(i zFQXsm0XMXTRGM$dldxnse84q!0Tnd&+i*Z%qu)GyQ;ju5-s;)A$At-mS+_X|DG2i) z;j#J|gfs}<2VwGaXQE)bal7WdA7>qeyfC`+cHN0hj$@}yfjux3x^am-NpNEad0Q|L zn1C3BnEk1~#FiF^1eO9pt*j780yMTcEP6Gz&B3p+Z76!XBW^$QbibA;EJT z#t!9phA=Rk&4CKOv60uKZWelGC9N+& zzBB6h=iu|+!t1+m%5Kl@&P}~cQ^+&Z^23MKf4SqnESxTv-+ylmg)y$?kc@ej#sB~S z6LeBeQvhm$9rRBA1`aF8N!*sP#Qy#1GwyPy00009a7bBm000XT000XT0n*)m`~Uy} zq)9|URCwBrlU;kGAP`2Q0s=9{ZBUe;QWM>z|NjSeX0VBy=3>tkkMEHgzIMC+CzooU z0DC3#cd<%zA%8>&LKHetuS%XJg>cKzcU?a$P83P@kCN|o<%aIG(haWC`+S=hVu7EZ z^ouB-2IT|MBQ)9=xzbhhNsJA$(737e+NwO5u#6GPmWGDG9AqrOD%Y%BsmX=Lu3}U~ z9;|T47eYqY&<9~@3Z;#hksC3R;qZen*acKDBFxQ$9)FE~4zQ;NYsjQFQ*fsj1`sAw zCvqoK5T;+k=^7>w(kQfVgdt3=T?Kpg^K0G*Kba^b%$hcg*B|J}y4m~ISOz`h9E5Z0 zFDo|^oNpno8HZ)6V@(F|$eW9A&mbJ}G_VO{S~C2Nc454YiC%1m*d9)Of{mB}~H fSAs)iaua_8qd!2%|2dln00000NkvXXu0mjf)CnPH diff --git a/DNN Platform/Website/Icons/Sigma/Save_32X32_Standard.png b/DNN Platform/Website/Icons/Sigma/Save_32X32_Standard.png index 59a0e7de692388e19461fd814dff0e4ef59bc1d5..90ec5e7b70d7d2a2bf620024882c1f7b88c692cb 100644 GIT binary patch delta 457 zcmV;)0XF`b1pNb$BqL@}OjJcoX>p*RpFci6u(7f(E-eQK2hh>c1_lP2o0|m%1(8Y~ ze-aWBfPjF#!o=|K?^sw@b8~aDv$V*|%n*0GeYf0QYjj6PM*w8EDvi5K`Q+sQ000nl zQchC5I|9DwPK9Qa1qhA#Q*=vf6f3>Ev9|xd5XgpNY+YG{6o!4?CqGJG#=d8 zf@#gxWsw3i7^fM#`3*c^2oOzDa?a62&;&qPOJG@pFx(F#(D+gBU_Ai61B!sPVFxt>q0s!81n${?!r4k6)m_N}^Jg5Vh;i9f4P|i;RC=-Cse>@yV z;M}~upV}yJ-@t8;R5IXP00V-Lix3P1+M%i(H+clw1O)$)Fi=$iRDXcJQp$-7VDZf! ze`x}FBQcXO3^-2y=Z1h00000NkvXXu0mjfoG8J_ delta 464 zcmV;>0Wbdj1DOPnBqnT7OjJcoX>rie(V(B7KR!M#E-eQK2OS+91_lP2o0|m%1+cNQ zkw+d*fPjGT@bA6C#8_BYb8~YH3=GK2%n*0GeYf0QYjj6PN4B@PtgNj7WVb4fyHu)) z0ssI25p+^cQviW{viTeR3H~puVwiGB*{js-E3c8S7=JcNL_t(|+O5;uc7q@gKv7#2 zNi`P+P{Fof^8f$X89|oRM+)zxm?~J!oh$y@F}XcJv^;#!?*WKRrLh~xIlO6^~c-*0000J%)1=s|TB!6sBOjJbx0060|s92QLPJGj=t=<%GInX*|x)79A9kk{wk z_x!Np?uLVelaP|$cv5>{odb!Hfl9==W000bhQchC={C}=QjQeCT8veiKuxO9g z00009a7bBm000XU000XU0RWnu7ytkPdPzhZrEJB9LPxy%E(L7lA-P{caUN0ARRV zIU7umeO-@hK!nf(kO(q~AolAjn-GR!0bmFi0?npa)vMqha{!TB!7NTOjJbx001sAG^wblU}tVNI68@zqi}wX1_=xR006JExDO8y zb9#a;EiOn2J&6!RYavnwjwN^Q_9%vc1IO<>*|x)79A9c+KLF z*XP~${IKHgG`7@+gM|6}`;(B5z{bo(yVsVcv5>{oZ-|z9xgyGGuE0|!gDwC701k9g zPE!G7{H~1q{xBN;MCG>89Ax86k+B$mkx4{BRCwC0liPNKAP_|>kt&#|F(~m;Lq*X4 z|H96Un%E?L>wb{sI@{qg`0?={#L*wbYo1J>Z<&&agn&=3dV`yIunGS1^}@wJ1n&FG z3%%z&+=RL7&d+qegraTpHs8^<#mxDEgwVNq%+fS1?!Zf$&CV^t0fZYeW*K^alxEpj z-vuF7VMJwN9B;J{dtnzYISF)@2Mxlm{5k~)Iw2teVO-+<8Z!`hOs%lG#=L;N;%)&{ zvRd0k;3z=eJ`REm5EynVW{s{f&+~32&kOHs5CjU5Kw-((Q`X)$%?yGjL8GwdJ#coS zAuO{J1q%Wc*z&$|T4-yv*2-dkzh!gPX#oW=hc;J2FhRgT!j%LlK>39mrWl_l4g<@R&F{hzn&2k4AG1poj507*qoM6N<$f>)6u4FCWD diff --git a/DNN Platform/Website/Icons/Sigma/Solutions_16X16_Standard.png b/DNN Platform/Website/Icons/Sigma/Solutions_16X16_Standard.png index d6ddc3f4539d1dfa1d058beaf4f62b8400b72012..6d31ba1addd67786ce54cbb7d85f67085221efc0 100644 GIT binary patch delta 427 zcmV;c0aX6;1KIk`>Y*mc9l)2i-+TwJgzslsRi?6)2)Y^Eg)QG;G z&E%+Bl!_!;oF{FiNt4kbtBkzek)P9whRlDf*Nb$Kvo3(KC1aWD_WN+dcC*ae9bAy> z?(cNTh96|DRJ?9oe4z@lVqV8~Sg)1D)8pUf?T*ix(ck1FxJGJBgS0-oZ9I<1J7SQM z!P2d?#eu=L{r~@&w~l6?{`9pKDm zj5#+$k^LBd#7RU!RCwAwk5_WUAP_{cgam9h5@7-5oHp6_KbuEd+wZSm^;GpB1P~nV z_aQ}pd>o#iDH+u*L_Dk0ys}7qQ*6K z6=heTyn?{Bb0V$EG0U@r(Zyk1?n0^SWEZYhQ9nVZJ)+)t<x#~rrB!96`OjJcoX>nDIx|F%vT9k@(qQA=Is~1^pi?6)2)Y{0};v`y} zCvBxklhJau;)ub7&E%-f3>h}Ab(uQ!ucC*ae9bAxf z$%gCh?;m8XqSTL6yl!25p)rND3bA5)sLfcfm0rho#M9&7=6~&akgbl-nIpJr(ck26 zk-1ERv_89SJdVgaVvv%-(kgbUt+d5~!M6SX|CzUrW}J#8b##~EsD9TPTL1t66LeBe zQviN&;L)R93qM&M;LP!|#J{a&Pycr600009a7bBm000XU000XU0RWnu7ytkO$w@>( zRCwAwkJoa8Fn+hDE)u-0g+fL$u8)W--?3onw*7Ge2RQ~F1uAt}WKMWO@)HVH zXx;f)K7?U7I5PuQT_)wnUXwIQek~YK9z_#JlO#i3&QcV}j!$LT<55$$!onry*z21} z{mi=xX)MF`V=8W);woJW0NedR%t~>dTHE_G#5j!c`Mfj8|G$KqCcVdBThtYhRlTOD P00000NkvXXu0mjfkOu5r diff --git a/DNN Platform/Website/Icons/Sigma/Solutions_32X32_Standard.png b/DNN Platform/Website/Icons/Sigma/Solutions_32X32_Standard.png index 81fd1260dc28b4e41c16fc747b01c86e5a2c890e..5598b7c76f7c4c7fc3e7ae01f893c717281bea81 100644 GIT binary patch delta 869 zcmV-r1DgEN2agAkB!AmbOjJcoX>n_sxj}%lTaUVFvyoGazbLh7m(PSSXOu>i%_41( z5LI_?u&|J`*xvBb*XzRG?#sg9qZ>_tYOktrvbqnBWWL;!d9KZ~+K#{8lAY9vB43uN z*NNch?KOF;hsk~R_xS*=VKsohSiW*;!*?iUr|a7j<3u+w`mzhdz`7hNV{#`^7=w- zk`uINuDHy2wA-fJ$w|R~5|5ctyrFNhk!+KRe9g8_om%Yx000O=(K~#9!m6KO{qCgaeRU)D$mb4uPhESv^ zy)04!SknIgFWNJpSvSeezE?ba?{nsyDZSnWv&DQqU(Bw0KQfyyANiKY<>GtH^+zHN zHvrG0c0Vctp_G;pREl&g3gTjBY^a z?+7snabtb`vO*2}+`+P&L7xIUIvx%Z3a^7(ur*6ef}3`1{HE!i=|Ll_3Tgwjh9EC3;l(KEs`_)L^^as(YiV zyet-|B1pbpWz)Zxk{WyZPfv(jLy(**yS=>kgE1ANq)n3~k(^-qBNNl v_V@-c44{IPOr}3RUvAJJ0{sEk`w#vAJ^p4B=H+r400000NkvXXu0mjfF8a8o delta 935 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 aF24%wKM@6x9T4pR0000o7OQ zcinbILPTTSwG>F^(Lx_oj008+}X zsjtt0u6Kw^H+w*jXnKXHcK}U3K&Ma*&w&wDMBh|t?=*!T zRscw2H-LTwK*+}(l$Ex}X=peH*^kcD>kI=8nKbI@t8B!AYSB1uLJoQydn#YvSji32 z7pe`A4u-EAW303ic7W)!*+S- z76Rt^Dm;z=L@i4Kf^iHBYul>w7j6-qG2wN^+l)W5W6tJ^RMI4c)!K8beLCV04sP2y z_-%fO*Bu`?{}(c6ZI#p>vqS7d;-B=&uBQ~T{r0nupBv?=W+H;Wr$D^&Y3H_j=@aq$ f?KO~{cZ@$2R9QA#6;%0500000NkvXXu0mjfcEb{^ delta 638 zcmV-^0)hSe1giy*B!8JuOjJcoX>lJ#RE4_TBwvMFqRT;_vxfn8gAK6DnRx zZ?W4bP(eABe;_qFP>8ZUZ(KKiu>Sx50|Ns9XEgz+V!-3~-0%67u*&ZG|G?4W>+SLf zb3q&&9;(09%jWi3Ut>*9P6oPk#mmpJ-}=+sWHP^ilL zBPvt{g)pe<0|Co#-GH*@;DN8jhUB}%@os;&dtXgkWbQotb;g3=d0EFdV9&Fn*9y-k zB0!_bxGy{cI!d8?HvpM%XvGwu7QN3901&R4oUoxSv@ild7&`&zfXf7cY%*fg(w42T zEuPDqa}bxxnR=X|q$QIoef~`HtV7jltR^8#T~#fWPmV0%2I&vg1PFuS^T-%Wtbl(9 zz~HmSLeU#^W8ie6Rl+s+rLA1skAc_Opd|RUMI}HemzV#5*>USX+am!@bI7h(0T9)7 z0hp1oUXstGOw;S0TSRA!e_g|EdY`fNmNh9Up-pC1>z-SE4I}1$u#}DW<#s+?_wc~^ zcgQW1X^>n;^Pvxkf9&aXE<#9o^P@7?-xJM3%|OWYGI}IWJoD*fnLhQ2czcPSYxThR Y3%f5p=^?Q_-T(jq07*qoM6N<$f>L8VSO5S3 diff --git a/DNN Platform/Website/Icons/Sigma/Untranslate_32x32_Standard.png b/DNN Platform/Website/Icons/Sigma/Untranslate_32x32_Standard.png index 191112f592b6cac6d383d5ee9d39de1ecc2ce88e..a6a3c788c56aa1a0f389dae7672b62adf5d747d6 100644 GIT binary patch delta 723 zcmV;^0xbQL2I~coB!81oOjJcoX>o5B8UF$T{{R0o6(Eu%DCiIq3OZgEV2>$oodW>_ zqPWn#&fmP@^+b%p-m+f$p2be^7s0*!_@zDblm6fSfSCR)$-5S;1LiJXl!o5 z!NiZ0nE#HBE-*57tJK?GVpdmK-#I)SCM`rpN7IaxkH+cj$d2MN@Beg@v;{dc-XETj`?X|2 zCpe+5C=9lswSO~LaE>WWQV*48EINeOe?UwVFMTK>6k}2N4M-xv2`WE)1*iZ|sRn+_ zuRw`DlmJBi4LHN~4c7P|gde^YsTz?XAW2(;iZ z0Yy$GR=I$gWKk6EM!@SIA}1Pv2dGw>p&5WuY>_wl2!Hf75py7fv!zV2hS1%O;Z6Mgyj(8DUGTbwx|s(2=WxL+sTBkN2&zb(dII*M2em0KT5xk~{QXZY zaqh$dVSjPd`Jx?;dr)=Huu3)p!TC@e^}(a@TkI&6(<@+-ve;YQZr~>{ggVbBpzFF_ zq0QH8v1)0Om86j=8-b-(b$cyPZ`iERgO!Avb!++ig;5pJB)0$w!x5N#B;W>8Dgl!s zT!k9&Z;OwrEW?kZl!E8V++h9H$`ZZDSPGxq!A#cRoAMU!@{^p~=W?j>+j(z8kAnVTJf4<|mv)uBp{|jqHKHFE;{@(xq002ovPDHLk FV1gnoW;*}? delta 763 zcmVo5B8B7%$o-{n@5EG9eBO?|h3OZgEV2>$oo&Nv- z{{R330Ry7A&_s;Eyy5la_x{i8`IW86|5{q|_xiNM)cZo$FC|BjB2l$f{5-7YXPcB|CR+U46`VpdmK-#I))Mt?`sjFTWDBmYH3?BwOy zvbg@Irm?fM|G>Y|($)VdDx1jWx^sJb!tDq-Sz<9YDQRV(0000AbW%=J0DWA=`Jq30 zxxL`SO9=n~010qNS#tmY3labT3lag+-G2N400H|+L_t(|+HI5Vnt~t@g{`&SGAt=e zOCU5gHM8tv_kaHHY-bRxXSegC2RSb=b0BNHLG4jEn1Q~mSB%8vfu#% zf_#5tr{k{|sT#blO+hx>+YP@drSmzA_xqV{Qvs4}x__}uIAjt;vAZyUQ=fT46aXJk zt>{AQ07|h%RwM?fE5cs^7uM#&#~S8c?kywf6IkdNpiKiff)!5y)+deuV$roE@-)!E zjor&1PXlpTp7hmvdWXs4USF~k%+xuVm6ry`wYpjjly%cIS)Rj5?0(tpcG-!us)D*x z1$V}O19vyK?hR#4u^YDK~1uq66{=d{_>|1m^;yco2}J+RyOM;=x_?K%GLnm z?J8TVh3n2Qu_IsfM?jJyTWTGT;Cm24l_Wjzcsv%FGOyRrE~yvfq!4~1N1%+5p?W8a>*en!lbK!(Xsb|2m*W@x!^33 z-45EfZB5ip+xqb2R#BvYkt%N*4nCg*{!IgY-Mw#FJpoDjo_e%U!@xGaA;OQzQ)9~- t+Q#pQaAf__&^A62|9#6Eyvz;%`oEM3O_j74XvzQp002ovPDHLkV1k|jah(7F diff --git a/DNN Platform/Website/Icons/Sigma/User_32x32_Standard.png b/DNN Platform/Website/Icons/Sigma/User_32x32_Standard.png index 9e964e04350fde04b11fcb83ec773ddc53e467ff..a43bf96870281df99f86de98594561b1f742a710 100644 GIT binary patch delta 636 zcmV-?0)zd{1(gMmB!7)iOjJcoX>kcG764Eo0000991jBo0|^WW00000000vk5L#DO zaJP)6rJhJ_RNt(BzoLMYk&b#?Lsf@L0Gc=eY$^nSGynbj0AD5mkv0bh2P7jS|H+y? zn_mCly#RSH{k(`qL_;5wNdSs9|J1Ml=Fo(GdRnJ-k;SApG=DPx@ZxiFaOdCE)YZ@6 z#j>})xQ1Spxc~qF6LeBeQvk*M9+NLg1Q2KT{{FG{`Tm&q&IqZp00009a7bBm000XU z000XU0RWnu7ytkPk4Z#9RCwBzli7BHFcbhA6SA6s*Y|K zuqU0SS!-8h6Oh8_6sTG#(0UCYd^g(`j-zBqr|MB^v_fKLKaDNfp@*n&IUY(O+;on}Ih{ZOO zbllU6!13Pinu(@ybZ{B<#jl;F@fJ71yr!vj**q>I&r(COD1_r^U4~i?#X~x()VglG zc^~*#8y~8>tdB?C%Tk3U{760TgMu!V3RUfdfOg=mflLS%D=1Ey( zmn1_pkt91rf93^+Ks(dS?2xeda$X!;fkAm01qA#aJP&J3iSXqJRK97XlLpl#z~lTtiidN*_Qe0hl)gfiwU8`v6}i0FgEa z2L}LeEF>c%|H+#F-@O25Cjfab0G>NQnqU3Ah(<(1ACpM{ihni#)UW^M&|0T;k;SAp zG&2A2;&XCve}8}H-__LB&)~(fGof3zzPOHjZRj?WeE zFcgLdiNvYsVSgfm(n;xTZ1nX1f7)J(PKTL`{a)bly-8NGczgRV41_VFzsD>4W^Wqv zHwACbH@j`jJU7*!6x5!FILX_MN)|b_9&w!jdE21n0_GS;QBs?&x)9X7k0an-gJI3r zAWkyG(VbtQ3~OE{Q6FiPY&hp#UM~c?t^2q+^By}fjeq$jQ?G99jt_MAbUWWf>cQZ@ zBb}FSzgI~N*S-9C(z$y)6DamR(=XhuGTSFn*6!z%y=ss}CpCNj#M4&a&zihfl_tI8 z5Fg!AtE$z@Nsv`lm9nTV$AMcRL3uIWHBDX%Ci%m-a7`3fSyrp54rNzLSuiHfyxi?% z#|yyOc?|LNHNk47h6WD8P_Y&v6_C!AY!#Ur{koC6=qos&Y@o!ZgHH2p^qq;I%PO| z7{W9o8N|AUzWN0Qw)Eba(EYVRU;9NB13SJx;x1cjq|o^Xp}?Q3I)I9iF^>m@f&?fE beTn}8s$o3@-u>Nt00000NkvXXu0mjfwvaeI diff --git a/DNN Platform/Website/Icons/Sigma/Webserver_64x64_Standard.png b/DNN Platform/Website/Icons/Sigma/Webserver_64x64_Standard.png index 13575f0fd9f5e1b50b776514bac366db74b6fdd3..cd78baff305193399085e55eb3f27f21e9860be8 100644 GIT binary patch delta 1432 zcmV;J1!wx34804GB!6j8OjJcoX>kk<8y6yC1_lZM0SW;F69NMXGc!O94iY3dmcPHg z4kwfV0000Wl2=!4OiW)tKTnsJuGrGuMMYNu7>pqyEM;YVz`fLTbcuj~m5Ym@qoTR& z;^SRss-~yLeucZ>+1>N={iN@>y?rc_0000CbW%=J0LSsCQ41r9{{8(bp{9T%4UxVV ze+1%5L_t(|+O?O9a;zv2hU0CJiKBohcmd45|3hv!c)`)+|JP05EIvN| zS9^l}M`=;y`6EjRAz5Dhy%3bFZR*}z!;;4@Ay4m;wRLQN19`T6v)enQ{srX823@zT zZSNqphmap3Po}l*0RfEm7V`(llW6S`e+;dSDQ}RLWOon%^jqc$J1EysfKfA&Jgli2&!Rd3(r1=U@;mi6ig~IML9P8vr}2aW0_(z77$ht^0xVniSsv z4mE@Su4AO^x-AIUS5T6PkM{ubf2L+DpoBOWCQc6=3#lQ5<_Ey8hN%t!GC&On?1pjh zOM`Qk-0Wl$)T`JVIQM`}J)n);jwHJUL~7>$@Ze=dCRF=w9unIR098eJ zm?AGmQ@VTH0#a|}SOpM10;Y8qwwX|McWr}@Jf+4s=cok68DPD53^&R=(}?p6d*TLO0$UB zQV)2&kPrYQR)2kIcv_wSIYqz(A*dMw2oYG7?f`M9za~G-_5< zIs<+w1`iAfz)`0Ro)!SpsA~o!@J@PY=BAALsDRQhaB#Ii{nq?JFowE$QE648)78qZ zfoafsY^n(GDHceP!~CuJm()31!k4!$mkZQxE9Tu@2LW6B)MwRSUf9=)?~>RSKp; zC`y&v06zBZ`&1r)!Yt4uU{1;iV6d|cJhndf{YgH>fZX8;=6RvJ9th4ZR!T|vtX9Ap z`??dVBMn_M;UAnGHW913ep?o~Jd zi!#mwhH2YnO8W=VK1%)gQ0(3nfjOL4hL!k!$#In_Wy3gve?{vg-$i2EMRJ@B7d{Vj z>fh&OGm{qO0s6heS*fFPiOqh?U{5d7 delta 1526 zcmVk`KVgLaP1_lZM0SN*F2@DMzHa0{gIFCMPlM;^SRssv8?8rl-b!g}dO{-ShMPr0=+HP#YJS0000DbW%=J0P$j{ zM2W}z{Ua*jp#AqI z1Jb(AkN6YFXW6E&s4*N!{sYKo){DH%%JKwpD0xbvM;QMDKnT$Se*zfgH_VS9pG07^ zb%s&86ekyilq9%=0HEC~PqKq@y%8|-j6|PTKwet{BnpwerPO&VhW6sJ2$fs^AVdH#y9MOf@ePq0#0~*Wnj0~w854rs0JgJB zMBr6ZGEElJWa)l1e`6!-+g6ZE8-kaCp@v(z5HU5`ar8K%96J%c0a#(#0K$~4B&jgx zqSmPE)HE}=0_sh@9ZhV}fn{dX__R*38O9Hf3*fP*y$cahmf2*&mNVOCrOwkgfYb?) zk`1tRWA{WVMCo4uetF2PbIN8RC0P~+L9844mfQfcvl{0Te>wnw<#h>Qly%!PmN)Sm zz@g6IZ<#XEEsJH~zRIB`BO6$K0|?1Cb!Grf*Da7ZObNJwVIu{kkdpU+ml~#eSrE|l z(8C_xF!W|=FqTC(JGrsyO>6=VH-KH;V+>3UO>hf1t05KyBxFRjar1zVWU9XhoW)pk z08B~JFgry?e~iJ!^tb_#%rmj88uiG<0DuKEaMWL40<87x1PCbte?~}w&yax4Kyh!`0Hiq7Un5Dn zY>Ce2ODJC@btUn9iFc@EfdmW4zIJsnWJ%KHc^94ZTJe!S;SO|#{3(6HWoD^Y?Lo2t zNUfL;X_vr-M4xxAkA6!&b6RN$=Tb}_7?6Obno9tHCLITnXF!6}n-LhG3t zK#Ka@)f?T>BtT_;FNN`e*;YJ`|neC0Ajg=as(nK+tMcRaH?o^9``&zU_o0a$F2ofHp{1F9BF+rO_Z3Fbs!$ zyz?Pls*FXYsRN6ZWe-mPX(fQ}VUIBAn=iN})OI6V2te^f8=Ktwu z$)*5qfF!`cjv2VRBwztu{Bcd8vQ?-KH?D>E?dm`P1!DezsnipOa1UH0V;mvCg31&4P6CpwW2>r|PL45mO^aD?-(@HS<_~Y?SP#(T} zar%$QJM}^=@Q2Uv7#MrR cKYMfk4Zi~0X=Nh~o&W#<07*qoM6N<$g3yAr1^@s6 diff --git a/DNN Platform/Website/Icons/Sigma/Webservers_32X32_Standard.png b/DNN Platform/Website/Icons/Sigma/Webservers_32X32_Standard.png index 7ce50de015936677c95bca658bd2fefd01b4e0ac..f7ac0734e92fca66609971bb74da33abd2c6ab1d 100644 GIT binary patch delta 584 zcmV-O0=NC81@#1wB!7ocOjJcoX>k-57eY!eOL~_jGQOYA<#N3yvvx1YO-{a?!*XZ>1_fNmshSKG-xtnKuH?Pe_26E~U2eC_c88RSx+}_~$FO|8Dp+Z(Upwo-~GY&ZWfsnXb{i8I>mPP3jWLm2*tv5@s(eroMtm8NE z6*lYj@;74jxlH8?kgnCO>$;yuw^xue1YK2C@PU(?D#RP8o^>620R{8(wr%NnWo1H> z#1|Fne~Mi$m)0Am2t?zk7mefC_9z%5uo>0y5O&hzrAIOI$ghvuAH((pdH^Q#V5)av zwbmg>V>L**4U&pL-_ADk3pjj0&PmES2Rq3P=iD@zUmpYx1O?|xG20x@XWOj(`V7zO zC5j1vwFbgF2n6o&6i6mkmSs`od7Qv*iINSDf5vrP6LAyIBPzkY5G5ZZjqweUNB|u8O=YGD&Ky0^@DT95E3;;hr-o;-4w# delta 632 zcmV-;0*C$e1f>O#B!8JuOjJcoX>kDo0TdP&LP}7wy2Ik->Bi903k?nc001p9HDP3D zYjk{tj+LOLt2I1Cb-0Ui)|0HW#Ow3^ z{{Mf`jc(N&Ysuf8rn8^h>qx~biQy8i&&`6A8 z((tRK9g*v2;)jCZ3;Y8~Ek7 zRCwB@*6miRKokbx3>47XGMST*jum1`U}<{9(qo#|{om2qd%y(4kG0ObR=;{5_RM61 zXJ`K(Ln#U&ipsfmTEE0x&P@)kP)-s>=5dqa0TaiEoHNEv@SmTpF>vsY4pEqEnr_&v zzl|#v<6dxhh(eF&!f_Bhy}Wi1fjk(jcXh;>->qYkECNhDKPp#1mWVMIE;45z5-L>28tE+Yfs6CKChV|FiFUzV{Z>WAH zlL=7NY6Ggj_CD@zC_iE!kWcSjUth<7#1?2-K-N=03IU7s1h-D$ryqeTCLY0Hp=W_j zzxNUMQOFT2NP!}U5CMPoBhW)ojT4P<(?9_)r1iw0_Y1Va%_l#6CD#*S_?*n2ZRo=X zel7_N#y{W7W!t{kWON(n{_$}*98Q3xfL7#lyL?f`pG>e?gGl}vXcIu7oCKGc+j|L? zL4f}bTI#mrpLPbgi~;T0NZtaP@NiB0z-k?+1wDOnC@zeWVibS%Bd~-ZpI*_g5#`b4 z7OW9ft=5{P__oKvsHQ)ea_o~zsh9fpJ5@5LWvIfwI zfP~zLZTDNPRs@y+`NHo3bit}H@4wqo2uQKQk6A8j04++8h#~=s;hGktXTKvf)d$v( zGLxV+nV11BXwQ91#ZX<3^=Fj7)9F<9A)njZKhtm<-n{>pf?zsXo8F;5i3NBtno00I z`IgVu54{&rxE>Cf%_fs?e!Nd2FL?BxHh~@QqcCy{768W2A2^?s&~tf8uAraNm&DLz j4DH0PCudrmtY7{EgE5!(dh&ZD00000NkvXXu0mjf;q%{n delta 1027 zcmV+e1pND~2<-@vBmwi0B`$w0X}16W|DB(mA7>6=p-I!!)Z_>SG?pdw@9r#+8tZXo zJ#@VP;y><&dQ5~j@0E)!h8o-3+yB`>>SkK=rJ4WjcD=s4{KqsYcNh7%uH)q7udAv3 z&&bKi$mtsuR*OSvo5*UbQ0-Vs>OwZ^uqt)5Ta}TJg^GeumppQoWKK?o$=Hi*qb)-J z^_qIH)|k!bsU#JG}*zHMuw zC!lh2%V0m;)0^PMW!_&t7?TA7FMk6FNkl@?>YU|^W&MBY%r1d|B<+?>$+JkC7hPe5kpaAMKfIP zB#|YiBIB5pxW`LUgeWq#CKIPm6>1$V;fNv2#=Kg7?iU=Qm^Seam2miY#edUv06!ic zoW7=*mdD2vDVN2#Y`e`yLq||3I8XxX^7!1YNkQ16uu6e=E^7%YtE z`CQl#n;i_qn@R)}DoEgr!AK!NAgx)Od865cd;pl}^(syupQrI+1lXI+T-O^Qn*JWP zz;T>PrQ#R>q%a_GG}S5-kblQhf@AVQ1*fm^nH^9qmzikbsg^!LZy$g>2wlf`xzu@o zV0o;F2NpcFgdM<2cb(3=pYGk<)a&(&i+T(w-Jt*m@yEyaUawfZ!uSQ7K8*n&N~I3Q zA6qXsS2&*{w&5;#dh7D?G5{#P8iY8&;t{}vN2k#Sqm1A)?}H*tP=7(_REz`LeCs91 zgJ2cJj)1H}=Kvt@gBE~dFn)y*1spZ!xSjyCzJWS5(%}zZ&M@8iW&-mwn92ILKkM}x zKYY|mhJi$sx2JqwRnNBbdL7K|{e8FF9a9nkLRJ~6`LjIy#De9Ddf`6;l2lMrt5n_p?yJib8?3dsPY?fr@QM z2y_=_Tme?tDA-0+wOy;#e6Y}HI`h2%FIZk1wVzaf5HPVcOn)yKSAdIhQTW3Ei0%p( zB*woZ1m2>g?az>b+TXEkrHK#m~{vesglTx3}5S((>`~%b%Uv+1SIu!OzLb z+S=LD!NASQ$;!vamzI{sy}iPXi03OV#KXhU&(FKNyUss5)g>TNQBb$6tIo>G(x05N zv9Plu8^R(X^HxoCb93kB<#>2^Z*XrjG&AKzM8GpI-7qeTiD-!ATwz8&Qvk`69GNbC2%4K3 z$-7aa^s@H-_~wg7{{67o-~<5Qf!Y5JVLBeaW7*XwCNik5;U0s^qlS`7b!b`9GN%7!~Cu1$R66w^^1-*hdTH z7lFs^F??*puHO}1SC+-wgD8v3rAYK|eBbv~Rk?0dOwwT8ay&f7+b(hi5V@h0T%{O8 zxZS%^7sAkuA{nqe-!y;IwrzRVG}e39xqE%q3ruqWl7#WwEj9g*LE?*MLIfTFL6ERB z%Sa{;B1EJ9aspsK2>?pYob&d2<(Z~Ylv>jy!~qDg!53nTA_P)>US>cIN(kXCr;IrW zAs^4m^i|Cml%0v@2p>4+yi??T`GzC%YiIxr`6@Ax=2t%b6N!ZVm_h|D@%s(`oS|Z0S$<+P335w@1}=97`oAIKJl_eUug7 t?TtLTa8t+YNxXWhVzFMqN&Gs0;wLSh9zCZ2YX|@U002ovPDHLkV1n|dI8Xop delta 681 zcmV;a0#^Nu1;GW7B!9qAOjJcoX>rfd(SCDs&&kQz($ezr@yEu++S%B+x3}Zm+rYlQ z+S=L5$H$kJmd3rks6acyjfm$fF2uvb(a+Dt#KgP1yVWHiQBhFN%F4H_tJBBE!MnQB zpPaI>u(Ki?!XhEW#Kg`xDf3oMbaQj(=HYtv zYC&a%QNx~2ynoKUd)CZHqsxSPMY#X~010qNS#tmY3ljhU3ljkVnw%H_00Cx6L_t(| z+Rc;Ka)U4sMZv;YqR686W^iw@6Ck+$|6fIf!~=MeXWs|Sj`pnft^^G8k{WL|c~}Kayh==k z0;V$UHRmM&5L#^&Gg*( zHrKUjNPi<~>AFQ;N`&B85H!%SsqyTnmVa8Z7}Eo=*qu~Rzw;wZ`?Itj;!*!98lbi( z&^+YXE`S2QNyo7O4LY>C=-npdMJk@ktrxyK1bxX}FzhHpU0}BZ|9)vGm>rLUUjdJM z!soJVrGeZiO)aZufdSS%IB<nkfF5&{ne5EKv)4-XCy3xt1r000011Og-@AwNbw zXh;YIOd-*+m;wRBWMfN7M~jb);EV>WtEsZRyVjz3-@ceep=eDsC99f=?9Z8}S{1c$ zBWtXJj=P-Yus73>D}7@&O;;P!)!C+hUXeQoQVEBh0000NbW%=J0GDV&Pb>Zj7yh}Q z{`a-wfy4IOuz$^if>Aj;00009a7bBm000id000id0mpBsWB>pISxH1eRCwB@mFaey zFc5`{>8VRaH<3;dz$h*iSIT$<^L-wUDNeduI-P4#bNH{w`A)!l?AC262AJG?zf{ zh~4x0v42Dth{m->;oL9np#hnkcMRVVS)Pv?2~lY`pcR@fI1D=5QYH(H{lO3EkU%c9 zbHvaE{j?Cw5@J8pnhAP2Bs6w~XhvYRPJz}ynapavhI*5_q7zLE0|uX*98oiq=~JaN zt7Z!P!Z_D7LvQ2b6a)u0kxVPuS#2jKv{=#%<9`T1T{_sIktLH-NmkjlGRFKEKw>16 zgH8H{-%gT@`u8#FS%2Rq)H3O*EGyjF0QCE_oP>fuR%_+b(;eC$wes`DY{=x}V@p0} zl0QDwJbk*uO~G0{*oA20x06H~9V)jc-y5K%9M~%&v0on!mD&=!2jo-HHKs?v^lpE< zU4H;5(|?+ke>0k7zs2K&qjPTeHk(Nq`gEE~z8^>T&CQ1R_Nm|9Y}V_1Qid+Yzp4DF zz7*gB9vu7O^XtW8ofaA9ew+)QYsS8FUzLG)u6^uZgWvN;k`0;1@rU5Jpt&F2<9bsZ zv-jT?_Tg|CtG=D&eiZo|%W_@Qch(}Rhku)GHH&!k>);+R1SAS~Bn+5_UcmSt7QaJzh7Jy&{vU%7|p4q?pm z9LM~6e0;14Yq?y3vCs=>cYIJ0WeT7sT<|~tr1}9m1BzMae(edX0-lxaTS4qv_<#J` zX9~gs1PZMHxdM9Zg*%f4qF4l=UA3j`tpYCG%a93kTO&2Fy#f>|b|?bc)iwWoE0EsB zM~SA$bZ)73Nn)pIYS-#reqCsHAw*zyQkuRtO4HtFuNXyW@M4zzS*~7QXa=k0@=x#c sXAf1&d^=Q^yZ*4!VvfY}7~T8@G!s3q7M!rkmjD0&07*qoM6N<$f=qQWRR910 delta 1291 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 JPDHLkV1ho&B0&HE delta 1209 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 B;cNf^ diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Flag/img/flags/af-ZA.png b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Flag/img/flags/af-ZA.png index 047509889fbc8ecc499bd6b781fcd236d74bff9b..4fa37d420ed727bc7084735477a3e14cfed779a9 100644 GIT binary patch delta 334 zcmV-U0kQs)1Ns7xB!6;HOjJb$xHtl^IM>+urs=dCKa;BfA^-pYBT%`%03yBsC#&_y z|E<6K{RIc3H9W)~|NsB;^7G6500fdOW6y#rDgfjlK{m!;ht8WAyf?`8)QIQ`m;fHN zy3g+D09sf8`Mk;9)c{Iqx^axsk&FQ2eUZ1Z01p|@WB>pF36ZiCf38VHK~#9!ZP4o) zL?94=;Rzc{DMAim?b`dl#Z6f`eShEQnW+IvDUy6FAJ>3_u4-6PM$z+7XAObid_HLh zDVR_#IoG(WgFZ`<)hcFVd9a};ZEY1q!^UK523&jyY1hFZVwVJraq%VFU~uJ&VLZG@ zR>P^)3T^4FnVE1mMAN`^)`wlux~BBtrI z|E<3Ou`>Jp1qY)wJj5OauS5U;|I7RU1d=Rc&w?r{0OTM+ht8We#$On`H^}wWm;fI2 z=<)980QtPhT37(x)d24Q^{=$jN@=>E@&b{J0C9}c<9(5E-U|`8u>i%(#oPGu0Fj>< zf450QK~#9!ZP3{kf*=rp;XyM{0r!1Nt*qYv0TU$=?Z5rbnSlY$xu4Z-dOZgmV?y#W za8uj9XjQ^6ra12F>7W&Oc!?HSU(dL!f+qBQfrRE}(59Mo4Z9bslDG_7cWVNaJQ#b) z!8kTm86bp`H`@jiRU{0d?#99bACi{LP3HZzWv1My&s^W)%eOeH4CYn8KhXJfhHBXV z-3g2*s4VSfdlAOBlMExAZC!Mb#iEGEpJBAleF2ak6Ovh1CR+di002ovPDHLkV1gyZ Btuz1t diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Flag/img/flags/en-ZA.png b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Flag/img/flags/en-ZA.png index 047509889fbc8ecc499bd6b781fcd236d74bff9b..4fa37d420ed727bc7084735477a3e14cfed779a9 100644 GIT binary patch delta 334 zcmV-U0kQs)1Ns7xB!6;HOjJb$xHtl^IM>+urs=dCKa;BfA^-pYBT%`%03yBsC#&_y z|E<6K{RIc3H9W)~|NsB;^7G6500fdOW6y#rDgfjlK{m!;ht8WAyf?`8)QIQ`m;fHN zy3g+D09sf8`Mk;9)c{Iqx^axsk&FQ2eUZ1Z01p|@WB>pF36ZiCf38VHK~#9!ZP4o) zL?94=;Rzc{DMAim?b`dl#Z6f`eShEQnW+IvDUy6FAJ>3_u4-6PM$z+7XAObid_HLh zDVR_#IoG(WgFZ`<)hcFVd9a};ZEY1q!^UK523&jyY1hFZVwVJraq%VFU~uJ&VLZG@ zR>P^)3T^4FnVE1mMAN`^)`wlux~BBtrI z|E<3Ou`>Jp1qY)wJj5OauS5U;|I7RU1d=Rc&w?r{0OTM+ht8We#$On`H^}wWm;fI2 z=<)980QtPhT37(x)d24Q^{=$jN@=>E@&b{J0C9}c<9(5E-U|`8u>i%(#oPGu0Fj>< zf450QK~#9!ZP3{kf*=rp;XyM{0r!1Nt*qYv0TU$=?Z5rbnSlY$xu4Z-dOZgmV?y#W za8uj9XjQ^6ra12F>7W&Oc!?HSU(dL!f+qBQfrRE}(59Mo4Z9bslDG_7cWVNaJQ#b) z!8kTm86bp`H`@jiRU{0d?#99bACi{LP3HZzWv1My&s^W)%eOeH4CYn8KhXJfhHBXV z-3g2*s4VSfdlAOBlMExAZC!Mb#iEGEpJBAleF2ak6Ovh1CR+di002ovPDHLkV1gyZ Btuz1t diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Flag/img/flags/es-PR.png b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Flag/img/flags/es-PR.png index 4d83f9018fac76a95a1b1955a5a2d51309627d62..bd20786b29facbe559e962c83ff5d7d7f540d2d1 100644 GIT binary patch delta 204 zcmV;-05kuJ0{H=uBqlacOjJc8P`e~Zr~mc!>jN;D03E9UBJoyoy#OHp|NrncT2^|? zkx&(Xh{-~K00009a7bBm000XT000XT0n*)m`~Uy|X-PyuRCwBbkwFfCAPfW-1<^tk z{{LAUFh)bmTqj$)1sqHOcSRi!2k^v6^iZhH0hIQE^Kn2n9I4Una&FP0yeH$j zDN%Q02NK%M^+$a7l=SlF(;->?Cf&=XP^Y&W2JAm#Z*l`aNDCXF_p{Of0000jw$$oqY>foCOTO9)~5QlFhBzy_{F z*AD0H08a0Q&(A?La4fy3I}ueWR`RRD=lOH$N!Zft$tm$Y)Y=YQ@OAQ0LH|8HJ=Z)P opegD%=$^L@=kV4*{71HjTuNIC>W;!ki~s-t07*qoM6N<$f_|rM$p8QV diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Flag/img/flags/nso-ZA.png b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Flag/img/flags/nso-ZA.png index 047509889fbc8ecc499bd6b781fcd236d74bff9b..4fa37d420ed727bc7084735477a3e14cfed779a9 100644 GIT binary patch delta 334 zcmV-U0kQs)1Ns7xB!6;HOjJb$xHtl^IM>+urs=dCKa;BfA^-pYBT%`%03yBsC#&_y z|E<6K{RIc3H9W)~|NsB;^7G6500fdOW6y#rDgfjlK{m!;ht8WAyf?`8)QIQ`m;fHN zy3g+D09sf8`Mk;9)c{Iqx^axsk&FQ2eUZ1Z01p|@WB>pF36ZiCf38VHK~#9!ZP4o) zL?94=;Rzc{DMAim?b`dl#Z6f`eShEQnW+IvDUy6FAJ>3_u4-6PM$z+7XAObid_HLh zDVR_#IoG(WgFZ`<)hcFVd9a};ZEY1q!^UK523&jyY1hFZVwVJraq%VFU~uJ&VLZG@ zR>P^)3T^4FnVE1mMAN`^)`wlux~BBtrI z|E<3Ou`>Jp1qY)wJj5OauS5U;|I7RU1d=Rc&w?r{0OTM+ht8We#$On`H^}wWm;fI2 z=<)980QtPhT37(x)d24Q^{=$jN@=>E@&b{J0C9}c<9(5E-U|`8u>i%(#oPGu0Fj>< zf450QK~#9!ZP3{kf*=rp;XyM{0r!1Nt*qYv0TU$=?Z5rbnSlY$xu4Z-dOZgmV?y#W za8uj9XjQ^6ra12F>7W&Oc!?HSU(dL!f+qBQfrRE}(59Mo4Z9bslDG_7cWVNaJQ#b) z!8kTm86bp`H`@jiRU{0d?#99bACi{LP3HZzWv1My&s^W)%eOeH4CYn8KhXJfhHBXV z-3g2*s4VSfdlAOBlMExAZC!Mb#iEGEpJBAleF2ak6Ovh1CR+di002ovPDHLkV1gyZ Btuz1t diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Flag/img/flags/tn-ZA.png b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Flag/img/flags/tn-ZA.png index 047509889fbc8ecc499bd6b781fcd236d74bff9b..4fa37d420ed727bc7084735477a3e14cfed779a9 100644 GIT binary patch delta 334 zcmV-U0kQs)1Ns7xB!6;HOjJb$xHtl^IM>+urs=dCKa;BfA^-pYBT%`%03yBsC#&_y z|E<6K{RIc3H9W)~|NsB;^7G6500fdOW6y#rDgfjlK{m!;ht8WAyf?`8)QIQ`m;fHN zy3g+D09sf8`Mk;9)c{Iqx^axsk&FQ2eUZ1Z01p|@WB>pF36ZiCf38VHK~#9!ZP4o) zL?94=;Rzc{DMAim?b`dl#Z6f`eShEQnW+IvDUy6FAJ>3_u4-6PM$z+7XAObid_HLh zDVR_#IoG(WgFZ`<)hcFVd9a};ZEY1q!^UK523&jyY1hFZVwVJraq%VFU~uJ&VLZG@ zR>P^)3T^4FnVE1mMAN`^)`wlux~BBtrI z|E<3Ou`>Jp1qY)wJj5OauS5U;|I7RU1d=Rc&w?r{0OTM+ht8We#$On`H^}wWm;fI2 z=<)980QtPhT37(x)d24Q^{=$jN@=>E@&b{J0C9}c<9(5E-U|`8u>i%(#oPGu0Fj>< zf450QK~#9!ZP3{kf*=rp;XyM{0r!1Nt*qYv0TU$=?Z5rbnSlY$xu4Z-dOZgmV?y#W za8uj9XjQ^6ra12F>7W&Oc!?HSU(dL!f+qBQfrRE}(59Mo4Z9bslDG_7cWVNaJQ#b) z!8kTm86bp`H`@jiRU{0d?#99bACi{LP3HZzWv1My&s^W)%eOeH4CYn8KhXJfhHBXV z-3g2*s4VSfdlAOBlMExAZC!Mb#iEGEpJBAleF2ak6Ovh1CR+di002ovPDHLkV1gyZ Btuz1t diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Flag/img/flags/xh-ZA.png b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Flag/img/flags/xh-ZA.png index 047509889fbc8ecc499bd6b781fcd236d74bff9b..4fa37d420ed727bc7084735477a3e14cfed779a9 100644 GIT binary patch delta 334 zcmV-U0kQs)1Ns7xB!6;HOjJb$xHtl^IM>+urs=dCKa;BfA^-pYBT%`%03yBsC#&_y z|E<6K{RIc3H9W)~|NsB;^7G6500fdOW6y#rDgfjlK{m!;ht8WAyf?`8)QIQ`m;fHN zy3g+D09sf8`Mk;9)c{Iqx^axsk&FQ2eUZ1Z01p|@WB>pF36ZiCf38VHK~#9!ZP4o) zL?94=;Rzc{DMAim?b`dl#Z6f`eShEQnW+IvDUy6FAJ>3_u4-6PM$z+7XAObid_HLh zDVR_#IoG(WgFZ`<)hcFVd9a};ZEY1q!^UK523&jyY1hFZVwVJraq%VFU~uJ&VLZG@ zR>P^)3T^4FnVE1mMAN`^)`wlux~BBtrI z|E<3Ou`>Jp1qY)wJj5OauS5U;|I7RU1d=Rc&w?r{0OTM+ht8We#$On`H^}wWm;fI2 z=<)980QtPhT37(x)d24Q^{=$jN@=>E@&b{J0C9}c<9(5E-U|`8u>i%(#oPGu0Fj>< zf450QK~#9!ZP3{kf*=rp;XyM{0r!1Nt*qYv0TU$=?Z5rbnSlY$xu4Z-dOZgmV?y#W za8uj9XjQ^6ra12F>7W&Oc!?HSU(dL!f+qBQfrRE}(59Mo4Z9bslDG_7cWVNaJQ#b) z!8kTm86bp`H`@jiRU{0d?#99bACi{LP3HZzWv1My&s^W)%eOeH4CYn8KhXJfhHBXV z-3g2*s4VSfdlAOBlMExAZC!Mb#iEGEpJBAleF2ak6Ovh1CR+di002ovPDHLkV1gyZ Btuz1t diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Flag/img/flags/zu-ZA.png b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Flag/img/flags/zu-ZA.png index 047509889fbc8ecc499bd6b781fcd236d74bff9b..4fa37d420ed727bc7084735477a3e14cfed779a9 100644 GIT binary patch delta 334 zcmV-U0kQs)1Ns7xB!6;HOjJb$xHtl^IM>+urs=dCKa;BfA^-pYBT%`%03yBsC#&_y z|E<6K{RIc3H9W)~|NsB;^7G6500fdOW6y#rDgfjlK{m!;ht8WAyf?`8)QIQ`m;fHN zy3g+D09sf8`Mk;9)c{Iqx^axsk&FQ2eUZ1Z01p|@WB>pF36ZiCf38VHK~#9!ZP4o) zL?94=;Rzc{DMAim?b`dl#Z6f`eShEQnW+IvDUy6FAJ>3_u4-6PM$z+7XAObid_HLh zDVR_#IoG(WgFZ`<)hcFVd9a};ZEY1q!^UK523&jyY1hFZVwVJraq%VFU~uJ&VLZG@ zR>P^)3T^4FnVE1mMAN`^)`wlux~BBtrI z|E<3Ou`>Jp1qY)wJj5OauS5U;|I7RU1d=Rc&w?r{0OTM+ht8We#$On`H^}wWm;fI2 z=<)980QtPhT37(x)d24Q^{=$jN@=>E@&b{J0C9}c<9(5E-U|`8u>i%(#oPGu0Fj>< zf450QK~#9!ZP3{kf*=rp;XyM{0r!1Nt*qYv0TU$=?Z5rbnSlY$xu4Z-dOZgmV?y#W za8uj9XjQ^6ra12F>7W&Oc!?HSU(dL!f+qBQfrRE}(59Mo4Z9bslDG_7cWVNaJQ#b) z!8kTm86bp`H`@jiRU{0d?#99bACi{LP3HZzWv1My&s^W)%eOeH4CYn8KhXJfhHBXV z-3g2*s4VSfdlAOBlMExAZC!Mb#iEGEpJBAleF2ak6Ovh1CR+di002ovPDHLkV1gyZ Btuz1t From 3ce24744492a57f2802db7e7b5f338a77ecc0604 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 15 Oct 2025 02:34:59 +0000 Subject: [PATCH 051/199] Update caniuse database --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 2b77121beed..b6d149359d6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7208,9 +7208,9 @@ __metadata: linkType: hard "caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30001702, caniuse-lite@npm:^1.0.30001726": - version: 1.0.30001746 - resolution: "caniuse-lite@npm:1.0.30001746" - checksum: 10/bb9238b08a947baf318c385d43f7ae771c80b265d21821333efc894306e6da60e47656015a1a23e5998133cad9ad022942ec0c2ba04e89e936f4a8343875b84c + version: 1.0.30001750 + resolution: "caniuse-lite@npm:1.0.30001750" + checksum: 10/2b912758d817cd2c2c179246e282f8b598695ec733bc446183e1d381eada60889c4770a1dfd86075e046a43d55f9922e2eaed1501347fcb12a38716cc14be297 languageName: node linkType: hard From 865cb4e4aedd9e4a0ffd0eca668cd9d2e08aec3a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 15 Oct 2025 22:03:41 +0000 Subject: [PATCH 052/199] Bump dotnet-sdk from 9.0.305 to 9.0.306 Bumps [dotnet-sdk](https://github.com/dotnet/sdk) from 9.0.305 to 9.0.306. - [Release notes](https://github.com/dotnet/sdk/releases) - [Commits](https://github.com/dotnet/sdk/compare/v9.0.305...v9.0.306) --- updated-dependencies: - dependency-name: dotnet-sdk dependency-version: 9.0.306 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- global.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/global.json b/global.json index 6357cb4351d..4d201dd4908 100644 --- a/global.json +++ b/global.json @@ -1,6 +1,6 @@ { "sdk": { - "version": "9.0.305", + "version": "9.0.306", "allowPrerelease": false, "rollForward": "latestMinor" } From ac774b0a61397accca8f252f76c8d00f6e2327c5 Mon Sep 17 00:00:00 2001 From: David Poindexter Date: Fri, 17 Oct 2025 14:47:32 -0400 Subject: [PATCH 053/199] Change DNN version from 10.1.0 to 10.1.2 in template Updated the bug report template to reflect the latest DNN version. --- .github/ISSUE_TEMPLATE/bug-report.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/bug-report.yml b/.github/ISSUE_TEMPLATE/bug-report.yml index 1b2e8e6c109..f394910168d 100644 --- a/.github/ISSUE_TEMPLATE/bug-report.yml +++ b/.github/ISSUE_TEMPLATE/bug-report.yml @@ -72,7 +72,7 @@ body: **NOTE:** _If your version is not listed, please upgrade to the latest version. If you cannot upgrade at this time, please open a [Discussion](https://github.com/dnnsoftware/Dnn.Platform/discussions) instead._ multiple: true options: - - 10.1.0 (latest v10 release) + - 10.1.2 (latest v10 release) - Current development branch (unreleased) validations: required: true From 182d7075435eb4437152f836c49251fc8dec4240 Mon Sep 17 00:00:00 2001 From: Peter Donker Date: Sun, 19 Oct 2025 11:54:28 +0200 Subject: [PATCH 054/199] Add support for Typescript in servers.web project and hook in new tab --- .../ClientSide/Servers.Web/package.json | 4 + .../Servers.Web/src/components/Body/Body.jsx | 35 ++++----- .../src/components/Tabs/Upgrades.tsx | 15 ++++ .../ClientSide/Servers.Web/tsconfig.json | 20 +++++ .../ClientSide/Servers.Web/webpack.config.js | 8 +- yarn.lock | 74 ++++++++++++++++++- 6 files changed, 134 insertions(+), 22 deletions(-) create mode 100644 Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades.tsx create mode 100644 Dnn.AdminExperience/ClientSide/Servers.Web/tsconfig.json diff --git a/Dnn.AdminExperience/ClientSide/Servers.Web/package.json b/Dnn.AdminExperience/ClientSide/Servers.Web/package.json index f174c680c14..03255dbc567 100644 --- a/Dnn.AdminExperience/ClientSide/Servers.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Servers.Web/package.json @@ -14,7 +14,10 @@ "@babel/plugin-proposal-object-rest-spread": "^7.20.7", "@babel/preset-env": "^7.26.0", "@babel/preset-react": "^7.25.9", + "@babel/preset-typescript": "^7.27.1", "@dnnsoftware/dnn-react-common": "10.1.0", + "@types/react": "^19.2.2", + "@types/react-dom": "^19.2.2", "@types/redux": "^3.6.31", "babel-loader": "8.3.0", "babel-plugin-transform-object-assign": "6.22.0", @@ -38,6 +41,7 @@ "react-dom": "^16.14.0", "react-hot-loader": "4.13.1", "style-loader": "^4.0.0", + "typescript": "^5.9.3", "url-loader": "1.1.2", "webpack": "5.94.0", "webpack-bundle-size-analyzer": "3.1.0", diff --git a/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Body/Body.jsx b/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Body/Body.jsx index b2ee5af1443..66bc4035a35 100644 --- a/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Body/Body.jsx +++ b/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Body/Body.jsx @@ -8,6 +8,7 @@ import { import "./style.less"; import Localization from "../../localization"; import ApplicationTab from "../Tabs/Application"; +import UpgradesTab from "../Tabs/Upgrades"; import WebTab from "../Tabs/Web"; import DatabaseTab from "../Tabs/Database/Database"; import ServersTab from "../Tabs/Servers/Servers"; @@ -20,8 +21,8 @@ import utils from "../../utils"; class Body extends Component { constructor() { super(); - this.handleSelect = this.handleSelect.bind(this); - } + this.handleSelect = this.handleSelect.bind(this); + } handleSelect(index) { const {props} = this; @@ -31,11 +32,11 @@ class Body extends Component { insertElementsInArray(array, elements, propertyNameHasIndex, propertyNameHasValue) { for (let i = 0; i < elements.length; i++) { let index = this.getInteger(elements[i][propertyNameHasIndex]); - + if (index || index === 0) { index = Math.min(array.length, Math.max(0, index)); array.splice(index, 0, elements[i][propertyNameHasValue]); - } + } } } @@ -47,22 +48,22 @@ class Body extends Component { return parseInt(value.toString()); } return value; - } - + } + render() { - const {props} = this; + const {props} = this; const isHost = utils.isHostUser(); let registeredTabs = application.getRegisteredServerTabs(); if (!isHost) { registeredTabs = registeredTabs.filter(function (tab) { return !tab.isHostOnlyVisible; }); - } + } - const systemInfoTabHeaders = isHost ? [Localization.get("tabApplicationTitle"), Localization.get("tabWebTitle"), Localization.get("tabDatabaseTitle"), Localization.get("tabServersTitle")] + const systemInfoTabHeaders = isHost ? [Localization.get("tabApplicationTitle"), Localization.get("tabWebTitle"), Localization.get("tabDatabaseTitle"), Localization.get("tabServersTitle"), "Upgrades"] : [Localization.get("tabApplicationTitle")]; - const systemInfoTabBody = isHost ? [, , , ] - : []; + const systemInfoTabBody = isHost ? [, , , , ] + : []; const serverSettingsTabHeaders = isHost ? [Localization.get("tabSmtpServerTitle"), Localization.get("tabPerformanceTitle"), Localization.get("tabLogsTitle")] : [Localization.get("tabSmtpServerTitle")]; const serverSettingsTabBody = isHost ? [, , ] @@ -70,7 +71,7 @@ class Body extends Component { const mainTabHeaders = [Localization.get("tabSystemInfoTitle"), Localization.get("tabServerSettingsTitle")]; const mainTabBody = [ {systemInfoTabBody} , @@ -79,7 +80,7 @@ class Body extends Component { key="second"> {serverSettingsTabBody} ]; - + this.insertElementsInArray(mainTabHeaders, registeredTabs.filter( function (tab) { return !tab.parentIndex && tab.parentIndex !== 0; @@ -109,13 +110,13 @@ class Body extends Component { return ( - - {mainTabBody} + {mainTabBody} - + ); } @@ -123,7 +124,7 @@ class Body extends Component { Body.propTypes = { dispatch: PropTypes.func.isRequired, - tabIndex: PropTypes.number + tabIndex: PropTypes.number }; function mapStateToProps(state) { diff --git a/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades.tsx b/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades.tsx new file mode 100644 index 00000000000..dcadfbca288 --- /dev/null +++ b/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades.tsx @@ -0,0 +1,15 @@ +import React from 'react'; +import "./tabs.less"; + +interface IProps { +}; + +const UpgradesTab: React.FC = props => { + return ( +
+

Upgrades

+
+ ); +} + +export default UpgradesTab; \ No newline at end of file diff --git a/Dnn.AdminExperience/ClientSide/Servers.Web/tsconfig.json b/Dnn.AdminExperience/ClientSide/Servers.Web/tsconfig.json new file mode 100644 index 00000000000..deb31694e87 --- /dev/null +++ b/Dnn.AdminExperience/ClientSide/Servers.Web/tsconfig.json @@ -0,0 +1,20 @@ +{ + "compilerOptions": { + "target": "ES6", + "module": "commonjs", + "lib": ["ES6", "DOM", "DOM.Iterable"], + "jsx": "react", + "allowJs": true, + "allowSyntheticDefaultImports": true, + "esModuleInterop": true, + "skipLibCheck": true, + "strict": false, + "forceConsistentCasingInFileNames": true, + "moduleResolution": "node", + "resolveJsonModule": true, + "noEmit": true, + "baseUrl": "./src" + }, + "include": ["src/**/*"], + "exclude": ["node_modules", "dist"] +} \ No newline at end of file diff --git a/Dnn.AdminExperience/ClientSide/Servers.Web/webpack.config.js b/Dnn.AdminExperience/ClientSide/Servers.Web/webpack.config.js index 6e14ae7505e..58a32df8b46 100644 --- a/Dnn.AdminExperience/ClientSide/Servers.Web/webpack.config.js +++ b/Dnn.AdminExperience/ClientSide/Servers.Web/webpack.config.js @@ -29,7 +29,7 @@ module.exports = (env, argv) => { disableHostCheck: !isProduction, }, resolve: { - extensions: ["*", ".js", ".json", ".jsx"], + extensions: ["*", ".js", ".json", ".jsx", ".ts", ".tsx"], modules: [ path.resolve("./src"), // Look in src first path.resolve("./node_modules"), // Try local node_modules @@ -63,12 +63,12 @@ module.exports = (env, argv) => { ], }, { - test: /\.(js|jsx)$/, + test: /\.(js|jsx|ts|tsx)$/, exclude: /node_modules/, use: { loader: "babel-loader", options: { - presets: ["@babel/preset-env", "@babel/preset-react"], + presets: ["@babel/preset-env", "@babel/preset-react", "@babel/preset-typescript"], }, }, }, @@ -85,7 +85,7 @@ module.exports = (env, argv) => { ], }, externals: webpackExternals, - plugins: + plugins: [ isProduction ? new webpack.DefinePlugin({ diff --git a/yarn.lock b/yarn.lock index b6d149359d6..6cc15b50614 100644 --- a/yarn.lock +++ b/yarn.lock @@ -620,7 +620,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-typescript@npm:^7.7.2": +"@babel/plugin-syntax-typescript@npm:^7.27.1, @babel/plugin-syntax-typescript@npm:^7.7.2": version: 7.27.1 resolution: "@babel/plugin-syntax-typescript@npm:7.27.1" dependencies: @@ -1268,6 +1268,21 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-typescript@npm:^7.27.1": + version: 7.28.0 + resolution: "@babel/plugin-transform-typescript@npm:7.28.0" + dependencies: + "@babel/helper-annotate-as-pure": "npm:^7.27.3" + "@babel/helper-create-class-features-plugin": "npm:^7.27.1" + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.27.1" + "@babel/plugin-syntax-typescript": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10/5ad7aae0e900974585c7e0d0ec08bde8cd70a31a9e79f5c9ddadb4f8f6207cb86a5882181c2b262b0fe27558e9f9743306259911bc1445635ec58dd96613cef4 + languageName: node + linkType: hard + "@babel/plugin-transform-unicode-escapes@npm:^7.25.9, @babel/plugin-transform-unicode-escapes@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-unicode-escapes@npm:7.27.1" @@ -1519,6 +1534,21 @@ __metadata: languageName: node linkType: hard +"@babel/preset-typescript@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/preset-typescript@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/helper-validator-option": "npm:^7.27.1" + "@babel/plugin-syntax-jsx": "npm:^7.27.1" + "@babel/plugin-transform-modules-commonjs": "npm:^7.27.1" + "@babel/plugin-transform-typescript": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10/9d8e75326b3c93fa016ba7aada652800fc77bc05fcc181888700a049935e8cf1284b549de18a5d62ef3591d02f097ea6de1111f7d71a991aaf36ba74657bd145 + languageName: node + linkType: hard + "@babel/runtime@npm:^7.10.1, @babel/runtime@npm:^7.12.1, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.6.3, @babel/runtime@npm:^7.8.7, @babel/runtime@npm:^7.9.2": version: 7.27.6 resolution: "@babel/runtime@npm:7.27.6" @@ -4377,6 +4407,15 @@ __metadata: languageName: node linkType: hard +"@types/react-dom@npm:^19.2.2": + version: 19.2.2 + resolution: "@types/react-dom@npm:19.2.2" + peerDependencies: + "@types/react": ^19.2.0 + checksum: 10/73d5671e57ab73cb3f2acd7992faee8f90d5b4d155b972e76e91fa13e5871ebb5e224960b05039d57ea502cb3370746eb98beda5fa44e9712b4aee52653c237a + languageName: node + linkType: hard + "@types/react-transition-group@npm:^4.4.4": version: 4.4.12 resolution: "@types/react-transition-group@npm:4.4.12" @@ -4395,6 +4434,15 @@ __metadata: languageName: node linkType: hard +"@types/react@npm:^19.2.2": + version: 19.2.2 + resolution: "@types/react@npm:19.2.2" + dependencies: + csstype: "npm:^3.0.2" + checksum: 10/d6adf8fd4bb23a7e04da5700d96b15dc0f59653727a9c6e940c151d7232fa1dbbab98417d5ac830dcfb6cba3f206efbd4cd83647e6f9a688d7363a90e607f6bf + languageName: node + linkType: hard + "@types/redux-devtools-themes@npm:^1.0.0": version: 1.0.3 resolution: "@types/redux-devtools-themes@npm:1.0.3" @@ -19576,7 +19624,10 @@ __metadata: "@babel/plugin-proposal-object-rest-spread": "npm:^7.20.7" "@babel/preset-env": "npm:^7.26.0" "@babel/preset-react": "npm:^7.25.9" + "@babel/preset-typescript": "npm:^7.27.1" "@dnnsoftware/dnn-react-common": "npm:10.1.0" + "@types/react": "npm:^19.2.2" + "@types/react-dom": "npm:^19.2.2" "@types/redux": "npm:^3.6.31" babel-loader: "npm:8.3.0" babel-plugin-transform-object-assign: "npm:6.22.0" @@ -19601,6 +19652,7 @@ __metadata: react-dom: "npm:^16.14.0" react-hot-loader: "npm:4.13.1" style-loader: "npm:^4.0.0" + typescript: "npm:^5.9.3" url-loader: "npm:1.1.2" webpack: "npm:5.94.0" webpack-bundle-size-analyzer: "npm:3.1.0" @@ -21635,6 +21687,16 @@ __metadata: languageName: node linkType: hard +"typescript@npm:^5.9.3": + version: 5.9.3 + resolution: "typescript@npm:5.9.3" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 10/c089d9d3da2729fd4ac517f9b0e0485914c4b3c26f80dc0cffcb5de1719a17951e92425d55db59515c1a7ddab65808466debb864d0d56dcf43f27007d0709594 + languageName: node + linkType: hard + "typescript@patch:typescript@npm%3A>=3 < 6#optional!builtin, typescript@patch:typescript@npm%3A^5.3.2#optional!builtin, typescript@patch:typescript@npm%3A^5.7.3#optional!builtin, typescript@patch:typescript@npm%3A^5.8.3#optional!builtin": version: 5.8.3 resolution: "typescript@patch:typescript@npm%3A5.8.3#optional!builtin::version=5.8.3&hash=5786d5" @@ -21645,6 +21707,16 @@ __metadata: languageName: node linkType: hard +"typescript@patch:typescript@npm%3A^5.9.3#optional!builtin": + version: 5.9.3 + resolution: "typescript@patch:typescript@npm%3A5.9.3#optional!builtin::version=5.9.3&hash=5786d5" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 10/696e1b017bc2635f4e0c94eb4435357701008e2f272f553d06e35b494b8ddc60aa221145e286c28ace0c89ee32827a28c2040e3a69bdc108b1a5dc8fb40b72e3 + languageName: node + linkType: hard + "ua-parser-js@npm:^1.0.33, ua-parser-js@npm:^1.0.35": version: 1.0.40 resolution: "ua-parser-js@npm:1.0.40" From a9403cd0b67b76a3091014fd4b51bf80bcb850ff Mon Sep 17 00:00:00 2001 From: Peter Donker Date: Sun, 19 Oct 2025 13:18:28 +0200 Subject: [PATCH 055/199] Hook in new service in main project --- .../Servers.Web/src/components/Body/Body.jsx | 4 +- .../src/components/Tabs/Upgrades.tsx | 15 ---- .../src/components/Tabs/Upgrades/index.tsx | 60 ++++++++++++++ .../src/components/Tabs/Upgrades/style.less | 25 ++++++ .../Servers.Web/src/models/Version.ts | 5 ++ .../Servers.Web/src/models/upgradeFile.ts | 7 ++ .../src/services/upgradeService.ts | 11 +++ .../src/types/dnn-react-common.d.ts | 21 +++++ .../Dnn.PersonaBar.Extensions.csproj | 2 + .../Services/DTO/UpgradeFileDto.cs | 22 ++++++ .../Services/UpgradesController.cs | 78 +++++++++++++++++++ .../App_LocalResources/Servers.resx | 9 +++ 12 files changed, 243 insertions(+), 16 deletions(-) delete mode 100644 Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades.tsx create mode 100644 Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/index.tsx create mode 100644 Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/style.less create mode 100644 Dnn.AdminExperience/ClientSide/Servers.Web/src/models/Version.ts create mode 100644 Dnn.AdminExperience/ClientSide/Servers.Web/src/models/upgradeFile.ts create mode 100644 Dnn.AdminExperience/ClientSide/Servers.Web/src/services/upgradeService.ts create mode 100644 Dnn.AdminExperience/ClientSide/Servers.Web/src/types/dnn-react-common.d.ts create mode 100644 Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Services/DTO/UpgradeFileDto.cs create mode 100644 Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Services/UpgradesController.cs diff --git a/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Body/Body.jsx b/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Body/Body.jsx index 66bc4035a35..bdca99d98c0 100644 --- a/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Body/Body.jsx +++ b/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Body/Body.jsx @@ -62,7 +62,7 @@ class Body extends Component { const systemInfoTabHeaders = isHost ? [Localization.get("tabApplicationTitle"), Localization.get("tabWebTitle"), Localization.get("tabDatabaseTitle"), Localization.get("tabServersTitle"), "Upgrades"] : [Localization.get("tabApplicationTitle")]; - const systemInfoTabBody = isHost ? [, , , , ] + const systemInfoTabBody = isHost ? [, , , , ] : []; const serverSettingsTabHeaders = isHost ? [Localization.get("tabSmtpServerTitle"), Localization.get("tabPerformanceTitle"), Localization.get("tabLogsTitle")] : [Localization.get("tabSmtpServerTitle")]; @@ -123,12 +123,14 @@ class Body extends Component { } Body.propTypes = { + applicationInfo: PropTypes.object.isRequired, dispatch: PropTypes.func.isRequired, tabIndex: PropTypes.number }; function mapStateToProps(state) { return { + applicationInfo: state.applicationTab.applicationInfo, tabIndex: state.pagination.tabIndex }; } diff --git a/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades.tsx b/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades.tsx deleted file mode 100644 index dcadfbca288..00000000000 --- a/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades.tsx +++ /dev/null @@ -1,15 +0,0 @@ -import React from 'react'; -import "./tabs.less"; - -interface IProps { -}; - -const UpgradesTab: React.FC = props => { - return ( -
-

Upgrades

-
- ); -} - -export default UpgradesTab; \ No newline at end of file diff --git a/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/index.tsx b/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/index.tsx new file mode 100644 index 00000000000..385140fd4bd --- /dev/null +++ b/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/index.tsx @@ -0,0 +1,60 @@ +import React, { useEffect, useState } from "react"; +import { + GridCell, + GridSystem, + Label, + TextOverflowWrapper as OverflowText, +} from "@dnnsoftware/dnn-react-common"; +import InfoBlock from "../../common/InfoBlock"; +import Localization from "../../../localization"; +import "../tabs.less"; +import "./style.less"; +import upgradeService from "services/upgradeService"; +import { UpgradeFile } from "models/upgradeFile"; + +interface IProps { + applicationInfo: any; +} + +const UpgradesTab: React.FC = (props) => { + const [upgrades, setUpgrades] = useState([]); + console.log("here3"); + + useEffect(() => { + console.log("here2"); + upgradeService.listUpgrades().then((upgrades) => { + setUpgrades(upgrades); + }); + }, []); + + return ( + + + + + + + + + + + + + + + ); +}; + +export default UpgradesTab; diff --git a/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/style.less b/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/style.less new file mode 100644 index 00000000000..399dfba7203 --- /dev/null +++ b/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/style.less @@ -0,0 +1,25 @@ +@import "~@dnnsoftware/dnn-react-common/styles/index.less"; + +.dnn-servers-info-panel { + .warningBox { + border: 1px solid @alto; + background-color: @gallery; + width: 100%; + padding: 15px; + .warningText { + font-weight: bolder; + color: @thunder; + } + .warningButton { + width: 100%; + .dnn-ui-common-button { + width: 100%; + padding-top: 6px; + padding-bottom: 6px; + &:first-child { + margin-top: 15px; + } + } + } + } +} diff --git a/Dnn.AdminExperience/ClientSide/Servers.Web/src/models/Version.ts b/Dnn.AdminExperience/ClientSide/Servers.Web/src/models/Version.ts new file mode 100644 index 00000000000..9cecc9bb925 --- /dev/null +++ b/Dnn.AdminExperience/ClientSide/Servers.Web/src/models/Version.ts @@ -0,0 +1,5 @@ +export interface Version { + major: number; + minor: number; + build: number; +} \ No newline at end of file diff --git a/Dnn.AdminExperience/ClientSide/Servers.Web/src/models/upgradeFile.ts b/Dnn.AdminExperience/ClientSide/Servers.Web/src/models/upgradeFile.ts new file mode 100644 index 00000000000..5c4e14e86a1 --- /dev/null +++ b/Dnn.AdminExperience/ClientSide/Servers.Web/src/models/upgradeFile.ts @@ -0,0 +1,7 @@ +import { Version } from "./Version"; + +export interface UpgradeFile { + version: Version; + fileName: string; + isObsolete: boolean; +} diff --git a/Dnn.AdminExperience/ClientSide/Servers.Web/src/services/upgradeService.ts b/Dnn.AdminExperience/ClientSide/Servers.Web/src/services/upgradeService.ts new file mode 100644 index 00000000000..b90fb74e8e9 --- /dev/null +++ b/Dnn.AdminExperience/ClientSide/Servers.Web/src/services/upgradeService.ts @@ -0,0 +1,11 @@ +import serviceFramework from "./serviceFramework"; + +const listUpgrades = function () { + return serviceFramework.get("Upgrades", "List"); +}; + +const upgradeService = { + listUpgrades, +}; + +export default upgradeService; diff --git a/Dnn.AdminExperience/ClientSide/Servers.Web/src/types/dnn-react-common.d.ts b/Dnn.AdminExperience/ClientSide/Servers.Web/src/types/dnn-react-common.d.ts new file mode 100644 index 00000000000..4fe51284bfb --- /dev/null +++ b/Dnn.AdminExperience/ClientSide/Servers.Web/src/types/dnn-react-common.d.ts @@ -0,0 +1,21 @@ +declare module "@dnnsoftware/dnn-react-common" { + export const GridCell: any; + export const TextOverflowWrapper: any; + export const GridSystem: any; + export const Button: any; + export const Label: any; + export const InputGroup: any; + export const DnnTabs: any; + export const PersonaBarPageBody: any; + export const PersonaBarPageHeader: any; + export const PersonaBarPage: any; + export const SvgIcons: any; + export const Dropdown: any; + export const Switch: any; + export const RadioButtons: any; + export const Tooltip: any; + export const SingleLineInputWithError: any; + export const IconButton: any; + export const Collapsible: any; +} + diff --git a/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Dnn.PersonaBar.Extensions.csproj b/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Dnn.PersonaBar.Extensions.csproj index 51ac28c5ea5..306c47fe3fe 100644 --- a/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Dnn.PersonaBar.Extensions.csproj +++ b/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Dnn.PersonaBar.Extensions.csproj @@ -452,6 +452,7 @@ + @@ -483,6 +484,7 @@ + diff --git a/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Services/DTO/UpgradeFileDto.cs b/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Services/DTO/UpgradeFileDto.cs new file mode 100644 index 00000000000..858211b57cc --- /dev/null +++ b/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Services/DTO/UpgradeFileDto.cs @@ -0,0 +1,22 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information + +namespace Dnn.PersonaBar.Extensions.Services.Dto +{ + using System; + using System.Runtime.Serialization; + + [DataContract] + public class UpgradeFileDto + { + [DataMember(Name = "version")] + public Version Version { get; set; } + + [DataMember(Name = "fileName")] + public string FileName { get; set; } + + [DataMember(Name = "isObsolete")] + public bool IsObsolete { get; set; } + } +} diff --git a/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Services/UpgradesController.cs b/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Services/UpgradesController.cs new file mode 100644 index 00000000000..067ea3b1843 --- /dev/null +++ b/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Services/UpgradesController.cs @@ -0,0 +1,78 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information + +namespace Dnn.PersonaBar.Extensions.Services +{ + using System; + using System.Collections.Generic; + using System.IO; + using System.Net; + using System.Net.Http; + using System.Text.RegularExpressions; + using System.Web.Http; + + using Dnn.PersonaBar.Extensions.Services.Dto; + using Dnn.PersonaBar.Library; + using Dnn.PersonaBar.Library.Attributes; + using DotNetNuke.Abstractions; + using DotNetNuke.Abstractions.Application; + using DotNetNuke.Common; + using DotNetNuke.Common.Utilities; + using DotNetNuke.Instrumentation; + using DotNetNuke.Services.Localization; + using DotNetNuke.Services.Log.EventLog; + using DotNetNuke.Web.Api; + using DotNetNuke.Web.Client.ClientResourceManagement; + + [MenuPermission(Scope = ServiceScope.Host)] + public class UpgradesController : PersonaBarApiController + { + private static readonly ILog Logger = LoggerSource.Instance.GetLogger(typeof(UpgradesController)); + private readonly IApplicationStatusInfo applicationStatusInfo; + + public UpgradesController(IApplicationStatusInfo applicationStatusInfo) + { + this.applicationStatusInfo = applicationStatusInfo; + } + + [HttpGet] + public HttpResponseMessage List() + { + try + { + var res = new List(); + + var upgradePath = Path.Combine(this.applicationStatusInfo.ApplicationMapPath, "App_Data", "Upgrade"); + if (!Directory.Exists(upgradePath)) + { + return this.Request.CreateResponse(HttpStatusCode.OK, res); + } + + foreach (var file in Directory.GetFiles(upgradePath)) + { + var fileName = Path.GetFileName(file); + var m = Regex.Match(fileName, @"(\d+\.\d+\.\d+)_(.+)\.zip$", RegexOptions.IgnoreCase); + + if (m.Success) + { + var version = new Version(m.Groups[1].Value); + var fileDto = new UpgradeFileDto() + { + FileName = fileName, + Version = version, + IsObsolete = version <= this.applicationStatusInfo.DatabaseVersion, + }; + res.Add(fileDto); + } + } + + return this.Request.CreateResponse(HttpStatusCode.OK, res); + } + catch (Exception ex) + { + return this.Request.CreateResponse(HttpStatusCode.InternalServerError, new { Message = ex.Message }); + } + } + } +} diff --git a/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/admin/personaBar/Dnn.Servers/App_LocalResources/Servers.resx b/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/admin/personaBar/Dnn.Servers/App_LocalResources/Servers.resx index 398319bd7b0..de4e4e978b0 100644 --- a/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/admin/personaBar/Dnn.Servers/App_LocalResources/Servers.resx +++ b/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/admin/personaBar/Dnn.Servers/App_LocalResources/Servers.resx @@ -747,4 +747,13 @@ Are you sure you want to increment the version number for your site? Please save the settings and complete the authorization process before testing when OAuth authentication mode is enabled in host or website level. + + Available Upgrades + + + The current version of this application. + + + Current Version: + \ No newline at end of file From 0e394a13519483958a1e5045e792c2a01746c88a Mon Sep 17 00:00:00 2001 From: Peter Donker Date: Sun, 19 Oct 2025 23:11:29 +0200 Subject: [PATCH 056/199] Continue to build out display of available upgrades --- .../Installer/ILocalUpgradeService.cs | 6 ++ .../Services/Installer/LocalUpgradeService.cs | 6 ++ .../components/Tabs/Upgrades/UpgradeList.tsx | 35 +++++++ .../components/Tabs/Upgrades/UpgradeRow.tsx | 48 ++++++++++ .../src/components/Tabs/Upgrades/index.tsx | 10 +- .../src/components/Tabs/Upgrades/style.less | 57 ++++++++++++ .../src/models/LocalUpgradeInfo.ts | 8 ++ .../Servers.Web/src/models/Version.ts | 6 +- .../Servers.Web/src/models/upgradeFile.ts | 7 -- .../Common/Extensions.cs | 18 ++++ .../Dnn.PersonaBar.Extensions.csproj | 2 +- .../Services/DTO/UpgradeFileDto.cs | 22 ----- .../Services/UpgradesController.cs | 92 +++++++++++-------- .../App_LocalResources/Servers.resx | 12 +++ 14 files changed, 252 insertions(+), 77 deletions(-) create mode 100644 Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/UpgradeList.tsx create mode 100644 Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/UpgradeRow.tsx create mode 100644 Dnn.AdminExperience/ClientSide/Servers.Web/src/models/LocalUpgradeInfo.ts delete mode 100644 Dnn.AdminExperience/ClientSide/Servers.Web/src/models/upgradeFile.ts create mode 100644 Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Common/Extensions.cs delete mode 100644 Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Services/DTO/UpgradeFileDto.cs diff --git a/DNN Platform/Library/Services/Installer/ILocalUpgradeService.cs b/DNN Platform/Library/Services/Installer/ILocalUpgradeService.cs index 337a6bb867e..ba17fef01dc 100644 --- a/DNN Platform/Library/Services/Installer/ILocalUpgradeService.cs +++ b/DNN Platform/Library/Services/Installer/ILocalUpgradeService.cs @@ -21,4 +21,10 @@ public interface ILocalUpgradeService /// The cancellation token. /// A task indicating completion. Task StartLocalUpgrade(IReadOnlyList upgrades, CancellationToken cancellationToken); + + /// Begins the process of upgrading the site to the specified version. + /// The upgrade version (from ). + /// The cancellation token. + /// A task indicating completion. + Task StartLocalUpgrade(LocalUpgradeInfo upgrade, CancellationToken cancellationToken); } diff --git a/DNN Platform/Library/Services/Installer/LocalUpgradeService.cs b/DNN Platform/Library/Services/Installer/LocalUpgradeService.cs index 31e577ef0e0..e5257f996e2 100644 --- a/DNN Platform/Library/Services/Installer/LocalUpgradeService.cs +++ b/DNN Platform/Library/Services/Installer/LocalUpgradeService.cs @@ -102,6 +102,12 @@ static async Task GetLocalUpgradeInfo(string file, IApplicatio public async Task StartLocalUpgrade(IReadOnlyList upgrades, CancellationToken cancellationToken) { var upgrade = upgrades.Where(u => u.IsValid && !u.IsOutdated).OrderBy(u => u.Version).First(); + await this.StartLocalUpgrade(upgrade, cancellationToken); + } + + /// + public async Task StartLocalUpgrade(LocalUpgradeInfo upgrade, CancellationToken cancellationToken) + { var upgradeZipPath = Path.Combine(this.UpgradeDirectoryPath, upgrade.PackageName + ".zip"); using var fileStream = File.OpenRead(upgradeZipPath); using var archive = new ZipArchive(fileStream, ZipArchiveMode.Read); diff --git a/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/UpgradeList.tsx b/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/UpgradeList.tsx new file mode 100644 index 00000000000..bdfb506537e --- /dev/null +++ b/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/UpgradeList.tsx @@ -0,0 +1,35 @@ +import * as React from "react"; +import { GridCell } from "@dnnsoftware/dnn-react-common"; +import { LocalUpgradeInfo } from "../../../models/LocalUpgradeInfo"; +import Localization from "../../../localization"; +import UpgradeRow from "./UpgradeRow"; + +interface IUpgradeListProps { + upgrades: LocalUpgradeInfo[]; +} + +const UpgradeList: React.FC = (props) => { + const rows = props.upgrades.map((upgrade) => ( + + )); + return ( +
+
+ {Localization.get("FileName")} + {Localization.get("Version")} + + {Localization.get("IsValid")} + + + {Localization.get("IsOutdated")} + + + {Localization.get("Actions")} + +
+ {rows} +
+ ); +}; + +export default UpgradeList; diff --git a/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/UpgradeRow.tsx b/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/UpgradeRow.tsx new file mode 100644 index 00000000000..df334d4f18a --- /dev/null +++ b/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/UpgradeRow.tsx @@ -0,0 +1,48 @@ +import * as React from "react"; +import { LocalUpgradeInfo } from "../../../models/LocalUpgradeInfo"; +import { + Button, + GridCell, + TextOverflowWrapper, + IconButton, + Collapsible, + SingleLineInputWithError, + SvgIcons, +} from "@dnnsoftware/dnn-react-common"; +import Localization from "../../../localization"; +import "./style.less"; + +interface IUpgradeRowProps { + upgrade: LocalUpgradeInfo; +} + +const UpgradeRow: React.FC = (props) => { + const version = `${props.upgrade.Version._Major}.${props.upgrade.Version._Minor}.${props.upgrade.Version._Build}`; + + return ( +
+ + + + + + + + {props.upgrade.IsValid ? "Yes" : "No"} + + + {props.upgrade.IsOutdated ? "Yes" : "No"} + + + {}} + title={Localization.get("Delete")} + /> + +
+ ); +}; + +export default UpgradeRow; diff --git a/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/index.tsx b/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/index.tsx index 385140fd4bd..e0241f2a908 100644 --- a/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/index.tsx +++ b/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/index.tsx @@ -9,19 +9,18 @@ import InfoBlock from "../../common/InfoBlock"; import Localization from "../../../localization"; import "../tabs.less"; import "./style.less"; -import upgradeService from "services/upgradeService"; -import { UpgradeFile } from "models/upgradeFile"; +import upgradeService from "../../../services/upgradeService"; +import { LocalUpgradeInfo } from "../../../models/LocalUpgradeInfo"; +import UpgradeList from "./UpgradeList"; interface IProps { applicationInfo: any; } const UpgradesTab: React.FC = (props) => { - const [upgrades, setUpgrades] = useState([]); - console.log("here3"); + const [upgrades, setUpgrades] = useState([]); useEffect(() => { - console.log("here2"); upgradeService.listUpgrades().then((upgrades) => { setUpgrades(upgrades); }); @@ -52,6 +51,7 @@ const UpgradesTab: React.FC = (props) => { className="header-title" label={Localization.get("plAvailableUpgrades")} /> + ); diff --git a/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/style.less b/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/style.less index 399dfba7203..9e98637944a 100644 --- a/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/style.less +++ b/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/style.less @@ -23,3 +23,60 @@ } } } + +.dnn-servers-grid-panel { + .dnn-upgrades-grid-row { + display: table; + width: 100%; + border-bottom: 1px solid @alto; + color: @rollingStone; + float: left; + position: relative; + padding: 15px 18px; + box-sizing: border-box; + cursor: auto; + > div { + float: left; + width: 100%; + > div { + float: left; + width: 100%; + } + } + .ellipsis { + -ms-text-overflow: ellipsis; + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; + } + .edit-icon { + margin-left: 5px; + float: right; + cursor: pointer; + svg { + width: 18px; + float: left; + height: 18px; + } + &.false { + svg { + fill: @curiousBlue; + } + svg:hover { + fill: @thunder; + } + } + } + .icon-flat { + display: inline-block; + width: 18px; + height: 18px; + vertical-align: middle; + &.active { + svg { + fill: @thunder; + } + } + } + } +} diff --git a/Dnn.AdminExperience/ClientSide/Servers.Web/src/models/LocalUpgradeInfo.ts b/Dnn.AdminExperience/ClientSide/Servers.Web/src/models/LocalUpgradeInfo.ts new file mode 100644 index 00000000000..99c2494e7e2 --- /dev/null +++ b/Dnn.AdminExperience/ClientSide/Servers.Web/src/models/LocalUpgradeInfo.ts @@ -0,0 +1,8 @@ +import { Version } from "./Version"; + +export interface LocalUpgradeInfo { + IsValid: boolean; + IsOutdated: boolean; + PackageName: string; + Version: Version; +} diff --git a/Dnn.AdminExperience/ClientSide/Servers.Web/src/models/Version.ts b/Dnn.AdminExperience/ClientSide/Servers.Web/src/models/Version.ts index 9cecc9bb925..a83418eed54 100644 --- a/Dnn.AdminExperience/ClientSide/Servers.Web/src/models/Version.ts +++ b/Dnn.AdminExperience/ClientSide/Servers.Web/src/models/Version.ts @@ -1,5 +1,5 @@ export interface Version { - major: number; - minor: number; - build: number; + _Major: number; + _Minor: number; + _Build: number; } \ No newline at end of file diff --git a/Dnn.AdminExperience/ClientSide/Servers.Web/src/models/upgradeFile.ts b/Dnn.AdminExperience/ClientSide/Servers.Web/src/models/upgradeFile.ts deleted file mode 100644 index 5c4e14e86a1..00000000000 --- a/Dnn.AdminExperience/ClientSide/Servers.Web/src/models/upgradeFile.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { Version } from "./Version"; - -export interface UpgradeFile { - version: Version; - fileName: string; - isObsolete: boolean; -} diff --git a/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Common/Extensions.cs b/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Common/Extensions.cs new file mode 100644 index 00000000000..75520d6d8d1 --- /dev/null +++ b/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Common/Extensions.cs @@ -0,0 +1,18 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information + +namespace Dnn.PersonaBar.Extensions.Common +{ + using System; + + internal static class Extensions + { + internal static bool Equals(this Version version, Version compareTo) + { + return version.Major == compareTo.Major + && version.Minor == compareTo.Minor + && version.Build == compareTo.Build; + } + } +} diff --git a/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Dnn.PersonaBar.Extensions.csproj b/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Dnn.PersonaBar.Extensions.csproj index 306c47fe3fe..aa58be74711 100644 --- a/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Dnn.PersonaBar.Extensions.csproj +++ b/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Dnn.PersonaBar.Extensions.csproj @@ -58,6 +58,7 @@ SolutionInfo.cs
+ @@ -452,7 +453,6 @@ - diff --git a/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Services/DTO/UpgradeFileDto.cs b/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Services/DTO/UpgradeFileDto.cs deleted file mode 100644 index 858211b57cc..00000000000 --- a/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Services/DTO/UpgradeFileDto.cs +++ /dev/null @@ -1,22 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. -// See the LICENSE file in the project root for more information - -namespace Dnn.PersonaBar.Extensions.Services.Dto -{ - using System; - using System.Runtime.Serialization; - - [DataContract] - public class UpgradeFileDto - { - [DataMember(Name = "version")] - public Version Version { get; set; } - - [DataMember(Name = "fileName")] - public string FileName { get; set; } - - [DataMember(Name = "isObsolete")] - public bool IsObsolete { get; set; } - } -} diff --git a/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Services/UpgradesController.cs b/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Services/UpgradesController.cs index 067ea3b1843..99dbcaa95df 100644 --- a/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Services/UpgradesController.cs +++ b/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Services/UpgradesController.cs @@ -5,74 +5,88 @@ namespace Dnn.PersonaBar.Extensions.Services { using System; - using System.Collections.Generic; - using System.IO; + using System.Linq; using System.Net; using System.Net.Http; - using System.Text.RegularExpressions; + using System.Threading; + using System.Threading.Tasks; using System.Web.Http; - using Dnn.PersonaBar.Extensions.Services.Dto; + using Dnn.PersonaBar.Extensions.Common; using Dnn.PersonaBar.Library; using Dnn.PersonaBar.Library.Attributes; - using DotNetNuke.Abstractions; using DotNetNuke.Abstractions.Application; - using DotNetNuke.Common; - using DotNetNuke.Common.Utilities; using DotNetNuke.Instrumentation; - using DotNetNuke.Services.Localization; - using DotNetNuke.Services.Log.EventLog; - using DotNetNuke.Web.Api; - using DotNetNuke.Web.Client.ClientResourceManagement; + using DotNetNuke.Services.Installer; [MenuPermission(Scope = ServiceScope.Host)] public class UpgradesController : PersonaBarApiController { private static readonly ILog Logger = LoggerSource.Instance.GetLogger(typeof(UpgradesController)); private readonly IApplicationStatusInfo applicationStatusInfo; + private readonly ILocalUpgradeService localUpgradeService; - public UpgradesController(IApplicationStatusInfo applicationStatusInfo) + public UpgradesController(IApplicationStatusInfo applicationStatusInfo, ILocalUpgradeService localUpgradeService) { this.applicationStatusInfo = applicationStatusInfo; + this.localUpgradeService = localUpgradeService; } [HttpGet] - public HttpResponseMessage List() + public async Task List(CancellationToken cancellationToken) { try { - var res = new List(); + var upgrades = await this.localUpgradeService.GetLocalUpgrades(cancellationToken); - var upgradePath = Path.Combine(this.applicationStatusInfo.ApplicationMapPath, "App_Data", "Upgrade"); - if (!Directory.Exists(upgradePath)) - { - return this.Request.CreateResponse(HttpStatusCode.OK, res); - } - - foreach (var file in Directory.GetFiles(upgradePath)) - { - var fileName = Path.GetFileName(file); - var m = Regex.Match(fileName, @"(\d+\.\d+\.\d+)_(.+)\.zip$", RegexOptions.IgnoreCase); - - if (m.Success) - { - var version = new Version(m.Groups[1].Value); - var fileDto = new UpgradeFileDto() - { - FileName = fileName, - Version = version, - IsObsolete = version <= this.applicationStatusInfo.DatabaseVersion, - }; - res.Add(fileDto); - } - } - - return this.Request.CreateResponse(HttpStatusCode.OK, res); + return this.Request.CreateResponse(HttpStatusCode.OK, upgrades); } catch (Exception ex) { return this.Request.CreateResponse(HttpStatusCode.InternalServerError, new { Message = ex.Message }); } } + + /// Starts a local upgrade. + /// The version to upgrade to. + /// The cancellation token. + /// An empty success response. + [HttpPost] + public async Task StartUpgrade(string version, CancellationToken cancellationToken) + { + var upgrades = await this.localUpgradeService.GetLocalUpgrades(cancellationToken); + if (!upgrades.Any(u => u.IsValid && !u.IsOutdated)) + { + return this.Request.CreateResponse(HttpStatusCode.BadRequest, new { message = "There are no upgrades to apply", }); + } + + var ver = new Version(version); + var upgrade = upgrades.FirstOrDefault(u => u.Version.Equals(ver)); + if (upgrade == null || !upgrade.IsValid || upgrade.IsOutdated) + { + return this.Request.CreateResponse(HttpStatusCode.BadRequest, new { message = $"There is no valid upgrade for version {version}", }); + } + + await this.localUpgradeService.StartLocalUpgrade(upgrade, cancellationToken); + + return this.Request.CreateResponse(HttpStatusCode.NoContent); + } + + /// Starts a local upgrade. + /// The cancellation token. + /// An empty success response. + [HttpPost] + public async Task StartFirstUpgrade(CancellationToken cancellationToken) + { + var upgrades = await this.localUpgradeService.GetLocalUpgrades(cancellationToken); + if (!upgrades.Any(u => u.IsValid && !u.IsOutdated)) + { + return this.Request.CreateResponse(HttpStatusCode.BadRequest, new { message = "There are no upgrades to apply", }); + } + + await this.localUpgradeService.StartLocalUpgrade(upgrades, cancellationToken); + + return this.Request.CreateResponse(HttpStatusCode.NoContent); + } } } diff --git a/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/admin/personaBar/Dnn.Servers/App_LocalResources/Servers.resx b/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/admin/personaBar/Dnn.Servers/App_LocalResources/Servers.resx index de4e4e978b0..b5815cae4ee 100644 --- a/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/admin/personaBar/Dnn.Servers/App_LocalResources/Servers.resx +++ b/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/admin/personaBar/Dnn.Servers/App_LocalResources/Servers.resx @@ -756,4 +756,16 @@ Are you sure you want to increment the version number for your site? Current Version: + + Please confirm you have made a backup of this installation before upgrading. + + + Is Outdated + + + Is Valid + + + Version + \ No newline at end of file From de49edd0296fa05f5a37e7be81d0bb1cc9a3aa95 Mon Sep 17 00:00:00 2001 From: Peter Donker Date: Tue, 21 Oct 2025 10:40:36 +0200 Subject: [PATCH 057/199] Working upload --- .../Installer/ILocalUpgradeService.cs | 7 + .../Services/Installer/LocalUpgradeService.cs | 87 +++-- .../Tabs/Upgrades/Upload/UploadBar.tsx | 100 +++++ .../Tabs/Upgrades/Upload/img/browse.svg | 16 + .../Tabs/Upgrades/Upload/img/checkmark.svg | 6 + .../Tabs/Upgrades/Upload/img/link.svg | 11 + .../Tabs/Upgrades/Upload/img/upload.svg | 11 + .../components/Tabs/Upgrades/Upload/img/x.svg | 9 + .../components/Tabs/Upgrades/Upload/index.tsx | 229 +++++++++++ .../Tabs/Upgrades/Upload/style.less | 358 ++++++++++++++++++ .../src/components/Tabs/Upgrades/index.tsx | 59 ++- .../src/components/Tabs/Upgrades/style.less | 10 + .../src/services/upgradeService.ts | 11 + .../Services/UpgradesController.cs | 97 ++++- .../App_LocalResources/Servers.resx | 3 + 15 files changed, 973 insertions(+), 41 deletions(-) create mode 100644 Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/Upload/UploadBar.tsx create mode 100644 Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/Upload/img/browse.svg create mode 100644 Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/Upload/img/checkmark.svg create mode 100644 Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/Upload/img/link.svg create mode 100644 Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/Upload/img/upload.svg create mode 100644 Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/Upload/img/x.svg create mode 100644 Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/Upload/index.tsx create mode 100644 Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/Upload/style.less diff --git a/DNN Platform/Library/Services/Installer/ILocalUpgradeService.cs b/DNN Platform/Library/Services/Installer/ILocalUpgradeService.cs index ba17fef01dc..2831e9f57a3 100644 --- a/DNN Platform/Library/Services/Installer/ILocalUpgradeService.cs +++ b/DNN Platform/Library/Services/Installer/ILocalUpgradeService.cs @@ -5,9 +5,12 @@ namespace DotNetNuke.Services.Installer; using System.Collections.Generic; +using System.IO; using System.Threading; using System.Threading.Tasks; +using DotNetNuke.Abstractions.Application; + /// Provides the ability to manage upgrades of DNN from local upgrade package files. public interface ILocalUpgradeService { @@ -16,6 +19,10 @@ public interface ILocalUpgradeService /// A task which resolves to a list of instances. Task> GetLocalUpgrades(CancellationToken cancellationToken); + Task GetLocalUpgradeInfo(string file, CancellationToken cancellationToken); + + Task GetLocalUpgradeInfo(string packageName, Stream archiveStream, CancellationToken cancellationToken); + /// Begins the process of upgrading the site to the next applicable version. /// The list of available upgrades (from ). /// The cancellation token. diff --git a/DNN Platform/Library/Services/Installer/LocalUpgradeService.cs b/DNN Platform/Library/Services/Installer/LocalUpgradeService.cs index e5257f996e2..78da36b4d41 100644 --- a/DNN Platform/Library/Services/Installer/LocalUpgradeService.cs +++ b/DNN Platform/Library/Services/Installer/LocalUpgradeService.cs @@ -50,7 +50,7 @@ public async Task> GetLocalUpgrades(Cancellation if (this.directory.Exists(this.UpgradeDirectoryPath)) { var upgradeFiles = this.directory.GetFiles(this.UpgradeDirectoryPath, "*.zip", SearchOption.TopDirectoryOnly); - localUpgrades = await Task.WhenAll(upgradeFiles.Select(file => GetLocalUpgradeInfo(file, this.application, cancellationToken))); + localUpgrades = await Task.WhenAll(upgradeFiles.Select(file => this.GetLocalUpgradeInfo(file, cancellationToken))); } else { @@ -58,43 +58,64 @@ public async Task> GetLocalUpgrades(Cancellation } return localUpgrades; + } - static async Task GetLocalUpgradeInfo(string file, IApplicationInfo application, CancellationToken cancellationToken) + /// + public async Task GetLocalUpgradeInfo(string file, CancellationToken cancellationToken) + { + try + { + using var archiveStream = File.OpenRead(file); + return await this.GetLocalUpgradeInfo(Path.GetFileNameWithoutExtension(file), archiveStream, cancellationToken); + } + catch (Exception exception) { - try + Exceptions.LogException(exception); + return new LocalUpgradeInfo { - using var archiveStream = File.OpenRead(file); - var archive = new ZipArchive(archiveStream, ZipArchiveMode.Read); - var mainAssemblyEntry = archive.FileEntries() - .Where(entry => string.Equals("DotNetNuke.dll", entry.Name, StringComparison.OrdinalIgnoreCase)) - .Where(entry => string.Equals("bin", Path.GetDirectoryName(entry.FullName), StringComparison.OrdinalIgnoreCase)) - .SingleOrDefault(); - - Version mainAssemblyVersion = null; - if (mainAssemblyEntry is not null) - { - mainAssemblyVersion = await ReadZippedAssemblyVersion(mainAssemblyEntry, cancellationToken); - } - - return new LocalUpgradeInfo - { - PackageName = Path.GetFileNameWithoutExtension(file), - Version = mainAssemblyVersion, - IsValid = mainAssemblyVersion is not null, - IsOutdated = mainAssemblyVersion is not null && mainAssemblyVersion <= application.Version, - }; - } - catch (Exception exception) + PackageName = Path.GetFileNameWithoutExtension(file), + Version = null, + IsValid = false, + IsOutdated = false, + }; + } + } + + /// + public async Task GetLocalUpgradeInfo(string packageName, Stream archiveStream, CancellationToken cancellationToken) + { + try + { + var archive = new ZipArchive(archiveStream, ZipArchiveMode.Read); + var mainAssemblyEntry = archive.FileEntries() + .Where(entry => string.Equals("DotNetNuke.dll", entry.Name, StringComparison.OrdinalIgnoreCase)) + .Where(entry => string.Equals("bin", Path.GetDirectoryName(entry.FullName), StringComparison.OrdinalIgnoreCase)) + .SingleOrDefault(); + + Version mainAssemblyVersion = null; + if (mainAssemblyEntry is not null) { - Exceptions.LogException(exception); - return new LocalUpgradeInfo - { - PackageName = Path.GetFileNameWithoutExtension(file), - Version = null, - IsValid = false, - IsOutdated = false, - }; + mainAssemblyVersion = await ReadZippedAssemblyVersion(mainAssemblyEntry, cancellationToken); } + + return new LocalUpgradeInfo + { + PackageName = packageName, + Version = mainAssemblyVersion, + IsValid = mainAssemblyVersion is not null, + IsOutdated = mainAssemblyVersion is not null && mainAssemblyVersion <= this.application.Version, + }; + } + catch (Exception exception) + { + Exceptions.LogException(exception); + return new LocalUpgradeInfo + { + PackageName = packageName, + Version = null, + IsValid = false, + IsOutdated = false, + }; } } diff --git a/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/Upload/UploadBar.tsx b/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/Upload/UploadBar.tsx new file mode 100644 index 00000000000..a01474b090a --- /dev/null +++ b/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/Upload/UploadBar.tsx @@ -0,0 +1,100 @@ +import React, { useState, useEffect, useRef } from "react"; + +/* eslint-disable no-undef */ +const upload = require("!raw-loader!./img/upload.svg").default; +const checkmark = require("!raw-loader!./img/checkmark.svg").default; +const errorIcon = require("!raw-loader!./img/x.svg").default; +/* eslint-enable no-undef */ + +interface UploadBarProps { + errorText?: string; + fileName: string; + uploadComplete: boolean; + uploadCompleteText: string; + uploadingText: string; + errorInPackage: boolean; + onTryAgain: () => void; + tryAgainText: string; +} + +const UploadBar: React.FC = ({ + errorText, + fileName, + uploadComplete, + uploadCompleteText, + uploadingText, + errorInPackage = false, + onTryAgain, + tryAgainText +}) => { + const [percent, setPercent] = useState(0); + const timeoutRef = useRef(20); + const deltaRef = useRef(1.00); + const setTimeoutRef = useRef(null); + const isMountedRef = useRef(true); + + const increase = () => { + setPercent((prevPercent) => { + let newPercent = prevPercent + 1; + timeoutRef.current *= deltaRef.current; + deltaRef.current *= 1.00; + + if (newPercent < 95) { + setTimeoutRef.current = setTimeout(increase, timeoutRef.current); + } + + return newPercent <= 100 ? newPercent : prevPercent; + }); + }; + + useEffect(() => { + setTimeout(increase, 100); + isMountedRef.current = true; + + return () => { + isMountedRef.current = false; + if (setTimeoutRef.current) { + clearTimeout(setTimeoutRef.current); + } + }; + }, []); + + useEffect(() => { + if (uploadComplete) { + if (setTimeoutRef.current) { + clearTimeout(setTimeoutRef.current); + } + if (isMountedRef.current) { + setPercent(100); + } + } + }, [uploadComplete]); + + const displayPercent = errorText ? 0 : percent; + const text = errorText ? errorText : (uploadComplete ? uploadCompleteText : uploadingText); + const svg = errorText ? errorIcon : (uploadComplete ? checkmark : upload); + const className = "file-upload-container dnn-upload-bar" + + (uploadComplete ? " complete" : "") + + (errorText ? " upload-error" : ""); + + return ( +
+
+
{fileName || "myImage.jpg"}
+
+

{text}

+ {errorInPackage && ( +

+ {tryAgainText} +

+ )} +
{displayPercent + "%"}
+
+
+
+
+
+ ); +}; + +export default UploadBar; \ No newline at end of file diff --git a/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/Upload/img/browse.svg b/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/Upload/img/browse.svg new file mode 100644 index 00000000000..5538045fdbc --- /dev/null +++ b/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/Upload/img/browse.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/Upload/img/checkmark.svg b/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/Upload/img/checkmark.svg new file mode 100644 index 00000000000..8462e611d19 --- /dev/null +++ b/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/Upload/img/checkmark.svg @@ -0,0 +1,6 @@ + + + + + diff --git a/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/Upload/img/link.svg b/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/Upload/img/link.svg new file mode 100644 index 00000000000..fec6493d1b3 --- /dev/null +++ b/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/Upload/img/link.svg @@ -0,0 +1,11 @@ + + + + + + + + diff --git a/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/Upload/img/upload.svg b/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/Upload/img/upload.svg new file mode 100644 index 00000000000..5b3cd4c9e57 --- /dev/null +++ b/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/Upload/img/upload.svg @@ -0,0 +1,11 @@ + + + + + + + + diff --git a/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/Upload/img/x.svg b/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/Upload/img/x.svg new file mode 100644 index 00000000000..7af1ddf4144 --- /dev/null +++ b/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/Upload/img/x.svg @@ -0,0 +1,9 @@ + + + + + + + diff --git a/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/Upload/index.tsx b/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/Upload/index.tsx new file mode 100644 index 00000000000..d50a7b62046 --- /dev/null +++ b/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/Upload/index.tsx @@ -0,0 +1,229 @@ +import React, { useState, useEffect, useCallback } from "react"; +import UploadBar from "./UploadBar"; +import Localization from "localization"; +import { RadioButtons } from "@dnnsoftware/dnn-react-common"; +import "./style.less"; + +interface Log { + Type: string; + Description: string; +} + +interface UploadCompleteData { + noManifest?: boolean; + alreadyInstalled?: boolean; +} + +interface ErrorData { + logs?: Log[]; + noManifest?: boolean; +} + +interface FileUploadProps { + cancelInstall: () => void; + clearUploadedPackage: () => void; + onSelectLegacyType: (value: string) => void; + selectedLegacyType: string; + alreadyInstalled: boolean; + uploadPackage: ( + file: File, + onSuccess: (data: UploadCompleteData) => void, + onError: (error: ErrorData | string) => void + ) => void; +} + +const FileUpload: React.FC = ({ + cancelInstall, + clearUploadedPackage, + onSelectLegacyType, + selectedLegacyType, + alreadyInstalled = false, + uploadPackage, +}) => { + const [text, setText] = useState(Localization.get("InstallExtension_FileUploadDefault")); + const [draggedOver, setDraggedOver] = useState(false); + const [fileName, setFileName] = useState(""); + const [uploading, setUploading] = useState(false); + const [uploadComplete, setUploadComplete] = useState(false); + const [errorText, setErrorText] = useState(""); + const [errorInPackage, setErrorInPackage] = useState(false); + const [noManifest, setNoManifest] = useState(false); + + const prevent = useCallback((e: Event) => { + e.preventDefault(); + }, []); + + useEffect(() => { + window.addEventListener("dragover", prevent); + window.addEventListener("drop", prevent); + + return () => { + window.removeEventListener("dragover", prevent); + window.removeEventListener("drop", prevent); + }; + }, [prevent]); + + const onMouseEnter = useCallback((text: string) => { + setText(text); + }, []); + + const onMouseLeave = useCallback(() => { + setText(Localization.get("InstallExtension_FileUploadDefault")); + }, []); + + const getErrorCount = useCallback((_package: Log[]) => { + let count = 0; + _package.forEach(key => { + if (key.Type === "Failure") { + count++; + } + }); + return count; + }, []); + + const handleError = useCallback((error: ErrorData | string) => { + if (error && typeof error !== "string" && error.logs && !error.noManifest) { + const errorCount = getErrorCount(error.logs); + const errorTextValue = + typeof error === "string" + ? error + : errorCount > 0 + ? (Localization.get("InstallExtension_UploadFailed") + errorCount + " " + Localization.get("Errors")) + : Localization.get("InstallExtension_UploadFailedUnknown"); + + setUploading(true); + setErrorText(errorTextValue); + setErrorInPackage(true); + setNoManifest(false); + } else { + const errorTextValue = Localization.get("InstallExtension_UploadFailedUnknown"); + setUploading(true); + setErrorText(errorTextValue); + setErrorInPackage(true); + setNoManifest(false); + } + }, [getErrorCount]); + + const uploadCompleteCallback = useCallback((data: UploadCompleteData) => { + if (data.noManifest && !alreadyInstalled) { + setUploading(false); + setNoManifest(true); + } else { + setTimeout(() => { + setUploadComplete(true); + if (data.alreadyInstalled) { + setUploading(false); + setNoManifest(false); + } + }, 1000); + } + }, [alreadyInstalled]); + + const postFile = useCallback((file: File) => { + if (uploadPackage) { + uploadPackage(file, uploadCompleteCallback, handleError); + } + setUploading(true); + setUploadComplete(false); + }, [uploadPackage, uploadCompleteCallback, handleError]); + + const uploadFile = useCallback((file: File) => { + setFileName(file.name); + setErrorInPackage(false); + postFile(file); + }, [postFile]); + + const onFileUpload = useCallback((e: React.ChangeEvent) => { + if (e.target.files && e.target.files[0]) { + uploadFile(e.target.files[0]); + } + }, [uploadFile]); + + const onDragOver = useCallback(() => { + setDraggedOver(true); + setText(Localization.get("InstallExtension_FileUploadDragOver")); + }, []); + + const onDragLeave = useCallback(() => { + setDraggedOver(false); + setText(Localization.get("InstallExtension_FileUploadDefault")); + }, []); + + const onDrop = useCallback((e: React.DragEvent) => { + e.preventDefault(); + if (e.dataTransfer.files && e.dataTransfer.files[0]) { + uploadFile(e.dataTransfer.files[0]); + } + onDragLeave(); + }, [uploadFile, onDragLeave]); + + const handleSelectLegacyType = useCallback((value: string) => { + if (onSelectLegacyType) { + onSelectLegacyType(value); + } + }, [onSelectLegacyType]); + + /* eslint-disable quotes */ + // eslint-disable-next-line no-undef + const svg = require(`!raw-loader!./img/upload.svg`).default; + + const buttonsStyle = { width: 67 }; + const className = "overlay" + (draggedOver ? " hover" : ""); + + return ( +
+ {((!uploading || uploadComplete)) && ( +
+
+
+
onMouseEnter(Localization.get("InstallExtension_UploadAFile"))} + onMouseLeave={onMouseLeave}> +
+ +
+
+ {text} +
+
+ )} + {(uploading) && ( + setUploading(false)} + tryAgainText={Localization.get("TryAgain")} + uploadCompleteText={Localization.get("InstallExtension_UploadComplete")} + uploadingText={Localization.get("InstallExtension_Uploading")} /> + )} + {noManifest && ( +
+

{Localization.get("InvalidDNNManifest")}

+ +
+ )} +
+ ); +}; + +export default FileUpload; diff --git a/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/Upload/style.less b/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/Upload/style.less new file mode 100644 index 00000000000..a5279dd40cb --- /dev/null +++ b/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/Upload/style.less @@ -0,0 +1,358 @@ +@import "~@dnnsoftware/dnn-react-common/styles/index"; +@transition: .18s; +.dnn-package-upload { + float: left; + width: 100%; + height: 215px; + background: @alabaster; + outline: 1px solid @mountainMist; + position: relative; + border: 12px solid @white; + box-sizing: content-box; + * { + box-sizing: content-box; + } + &.viewing-log { + outline: none; + border: none; + } + .dropzone-container { + position: absolute; + width: 100%; + height: 100%; + z-index: 3; + background-color: @gallery; + } + .no-valid-manifest { + background-color: @alabaster; + position: absolute; + top: -13px; + left: -13px; + z-index: 3; + padding: 45px 25px; + text-align: center; + > p { + margin-bottom: 25px; + } + .dnn-radio-buttons { + margin: 0 auto; + float: none; + width: auto; + display: table; + } + } + &.uploading { + .dropzone-container { + background-color: transparent; + .overlay { + opacity: 0; + &.hover { + opacity: 1; + } + &:hover { + opacity: 1; + background: rgba(30, 136, 195, 0.9); + } + } + } + } + &.already-installed { + .dropzone-container { + z-index: 1; + } + } + .overlay { + position: absolute; + background: rgba(30, 136, 195, .0); + top: -12px; + bottom: -12px; + left: -12px; + right: -12px; + text-align: center; + transition: @transition; + z-index: 1; + &.hover { + background: rgba(30, 136, 195, .6); + opacity: 1; + * { + pointer-events: none; + } + span { + color: white; + } + .buttons { + .button.upload { + color: white; + } + } + } + &:hover { + background: rgba(30, 136, 195, .6); + span { + color: white; + } + .buttons { + &:hover { + .button { + color: @alto; + &:hover { + color: white; + } + } + } + .button { + color: white; + } + } + } + span { + text-align: center; + margin-top: 25px; + float: left; + width: 100%; + box-sizing: border-box; + color: @rollingStone; + transition: @transition; + font-size: 14px; + } + .buttons { + margin: auto; + height: 32px; + margin-top: 60px; + width: 201px; + transition: @transition; + .button { + float: left; + width: 32px; + height: 32px; + padding: 0 17.5px; + box-sizing: content-box; + color: @alto; + cursor: pointer; + position: relative; + overflow: hidden; + input[type="file"] { + position: absolute; + top: -100px; + bottom: -100px; + left: -100px; + right: -100px; + opacity: 0; + cursor: pointer; + min-height: 200px; + } + svg { + width: 32px; + height: 32px; + } + &:first-of-type { + margin-left: 0px; + } + } + } + } + .file-upload-container { + position: absolute; + top: -12px; + bottom: -12px; + left: -12px; + right: -12px; + background: white; + padding: 14px 22px; + z-index: 2; + h4 { + margin-bottom: 8px; + color: @bulgarianRose; + } + .textarea-container { + float: left; + width: 100%; + height: 90px; + border: 1px solid @mountainMist; + position: relative; + textarea { + resize: none; + width: 100%; + height: 64px; + border: none; + outline: none !important; + padding: 10px; + box-sizing: border-box; + color: @bulgarianRose; + } + } + span { + float: right; + margin-right: 10px; + color: @curiousBlue; + } + .drop-down { + width: 100%; + float: left; + height: 30px; + border: 1px solid @mountainMist; + margin-bottom: 16px; + position: relative; + &:after { + content: ""; + position: absolute; + right: 8px; + top: 12px; + width: 0; + height: 0; + pointer-events: none; + border-left: 6px solid transparent; + border-right: 6px solid transparent; + border-top: 6px solid @rollingStone; + } + } + } +} + +.install-failure-logs { + z-index: 10000; + background-color: white; + .package-installation-report { + padding: 25px; + p { + word-wrap: break-word; + } + p.failure { + color: @alizarinCrimson; + font-weight: bold; + } + p.startjob, p.endjob { + color: #000; + font-weight: bold; + } + .logs-unknown-error { + ul { + padding-left: 40px; + display: block; + margin-top: 10px; + } + } + } +} + +.dnn-package-upload .file-upload-container { + &.dnn-upload-bar { + padding: 12px; + transition: opacity .4s .6s; + .upload-bar-container { + color: @curiousBlue; + float: left; + width: 100%; + height: 100%; + border: 1px solid @curiousBlue; + background: #f4f6f7; + padding: 5px 20px; + box-sizing: border-box; + .upload-file-name { + margin-bottom: 10px; + } + .upload-icon { + width: 42px; + height: 42px; + margin: auto; + svg { + margin-top: 8px; + margin-bottom: 3px; + } + } + h4 { + color: @curiousBlue; + margin: auto; + text-align: center; + font-size: 14px; + margin: 15px 10px 10px; + } + .upload-bar-box { + position: relative; + float: left; + width: 100%; + height: 4px; + background: @alto; + margin-top: 5px; + .upload-bar { + width: 0; + float: left; + background: @curiousBlue; + height: 100%; + left: 0px; + transition: .1s; + } + } + } + } + &.upload-error { + z-index: 3; + .upload-bar-container { + border: 1px solid @alizarinCrimson; + color: @alizarinCrimson; + h4 { + color: @alizarinCrimson; + } + .view-log-or-try-again { + text-align: center; + span { + float: none; + color: @curiousBlue; + cursor: pointer; + margin-left: 10px; + } + } + .upload-bar-box { + background: @alizarinCrimson; + } + } + } +} + +.dnn-package-upload .already-installed { + position: absolute; + top: -12px; + bottom: -12px; + left: -12px; + right: -12px; + background: white; + padding: 14px 22px; + z-index: 4; + .already-installed-container { + color: @mountainMist; + float: left; + width: 100%; + height: 100%; + border: 1px solid @mountainMist; + background: @gallery; + padding: 5px 20px; + box-sizing: border-box; + .upload-file-name { + margin-bottom: 10px; + } + .upload-icon { + width: 42px; + margin: auto; + svg { + margin-top: 8px; + margin-bottom: 3px; + width: 42px; + height: 42px; + } + } + h4 { + color: @mountainMist; + margin: auto; + text-align: center; + font-size: 12px; + margin: 10px 10px 15px; + } + .repair-or-install { + text-align: center; + span { + color: @curiousBlue; + cursor: pointer; + } + } + } +} \ No newline at end of file diff --git a/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/index.tsx b/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/index.tsx index e0241f2a908..020b208a8b9 100644 --- a/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/index.tsx +++ b/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/index.tsx @@ -1,5 +1,6 @@ import React, { useEffect, useState } from "react"; import { + Button, GridCell, GridSystem, Label, @@ -12,6 +13,7 @@ import "./style.less"; import upgradeService from "../../../services/upgradeService"; import { LocalUpgradeInfo } from "../../../models/LocalUpgradeInfo"; import UpgradeList from "./UpgradeList"; +import FileUpload from "./Upload"; interface IProps { applicationInfo: any; @@ -19,6 +21,7 @@ interface IProps { const UpgradesTab: React.FC = (props) => { const [upgrades, setUpgrades] = useState([]); + const [showUploadPanel, setShowUploadPanel] = useState(false); useEffect(() => { upgradeService.listUpgrades().then((upgrades) => { @@ -46,13 +49,55 @@ const UpgradesTab: React.FC = (props) => { - - + {showUploadPanel && ( + +
+
+ setShowUploadPanel(false)} + clearUploadedPackage={() => {}} + onSelectLegacyType={() => {}} + selectedLegacyType="Skin" + alreadyInstalled={false} + uploadPackage={( + file: File, + onSuccess: (data: any) => void, + onError: (error: any) => void + ) => upgradeService.uploadPackage(file, onSuccess, onError)} + /> +
+ +
+
+ )} + {!showUploadPanel && ( + + + )} ); }; diff --git a/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/style.less b/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/style.less index 9e98637944a..48f9b684800 100644 --- a/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/style.less +++ b/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/style.less @@ -25,6 +25,16 @@ } .dnn-servers-grid-panel { + .dnn-servers-grid-panel-actions { + text-align: right; + button { + margin-top: 20px; + } + .dnn-servers-grid-panel-upload { + width: 714px; + margin-top: 20px; + } + } .dnn-upgrades-grid-row { display: table; width: 100%; diff --git a/Dnn.AdminExperience/ClientSide/Servers.Web/src/services/upgradeService.ts b/Dnn.AdminExperience/ClientSide/Servers.Web/src/services/upgradeService.ts index b90fb74e8e9..cd4b4e1ff38 100644 --- a/Dnn.AdminExperience/ClientSide/Servers.Web/src/services/upgradeService.ts +++ b/Dnn.AdminExperience/ClientSide/Servers.Web/src/services/upgradeService.ts @@ -1,11 +1,22 @@ +import utils from "../utils"; import serviceFramework from "./serviceFramework"; const listUpgrades = function () { return serviceFramework.get("Upgrades", "List"); }; +const uploadPackage = function (file, callback, errorCallback) { + const sf = utils.getServiceFramework(); + sf.moduleRoot = "PersonaBar"; + sf.controller = "Upgrades"; + let formData = new FormData(); + formData.append("POSTFILE", file); + sf.postfile("Upload", formData, callback, errorCallback); +}; + const upgradeService = { listUpgrades, + uploadPackage, }; export default upgradeService; diff --git a/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Services/UpgradesController.cs b/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Services/UpgradesController.cs index 99dbcaa95df..d9080949446 100644 --- a/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Services/UpgradesController.cs +++ b/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Services/UpgradesController.cs @@ -5,19 +5,23 @@ namespace Dnn.PersonaBar.Extensions.Services { using System; + using System.IO; using System.Linq; using System.Net; using System.Net.Http; + using System.Net.Http.Formatting; + using System.Net.Http.Headers; using System.Threading; using System.Threading.Tasks; using System.Web.Http; - using Dnn.PersonaBar.Extensions.Common; using Dnn.PersonaBar.Library; using Dnn.PersonaBar.Library.Attributes; using DotNetNuke.Abstractions.Application; + using DotNetNuke.Common; using DotNetNuke.Instrumentation; using DotNetNuke.Services.Installer; + using DotNetNuke.Web.Api.Internal; [MenuPermission(Scope = ServiceScope.Host)] public class UpgradesController : PersonaBarApiController @@ -88,5 +92,96 @@ public async Task StartFirstUpgrade(CancellationToken cance return this.Request.CreateResponse(HttpStatusCode.NoContent); } + + [HttpPost] + [IFrameSupportedValidateAntiForgeryToken] + public Task Upload([FromUri] string legacySkin = null, [FromUri] bool isPortalPackage = false) + { + try + { + return this.UploadFileAction(); + } + catch (Exception ex) + { + Logger.Error(ex); + return Task.FromResult(this.Request.CreateErrorResponse(HttpStatusCode.InternalServerError, ex.Message)); + } + } + + private async Task UploadFileAction() + { + var request = this.Request; + if (!request.Content.IsMimeMultipartContent()) + { + throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType); + } + + // Ensure content is buffered (helps if something read headers but not the body). + // Note: if a filter already consumed the body, buffering here won't restore it — + // the filter must use LoadIntoBufferAsync or otherwise avoid consuming the stream. + await request.Content.LoadIntoBufferAsync().ConfigureAwait(false); + + var provider = new MultipartMemoryStreamProvider(); + + // read multipart parts + await request.Content.ReadAsMultipartAsync(provider).ConfigureAwait(false); + + object result = null; + var fileName = string.Empty; + Stream stream = null; + + foreach (var item in provider.Contents) + { + var name = item.Headers.ContentDisposition.Name; + switch (name.ToUpper()) + { + case "\"POSTFILE\"": + fileName = item.Headers.ContentDisposition.FileName.Replace("\"", string.Empty); + if (fileName.IndexOf("\\", StringComparison.Ordinal) != -1) + { + fileName = Path.GetFileName(fileName); + } + + if (Globals.FileEscapingRegex.Match(fileName).Success == false && Path.GetExtension(fileName).ToLowerInvariant() == ".zip") + { + stream = item.ReadAsStreamAsync().Result; + } + + break; + } + } + + if (!string.IsNullOrEmpty(fileName) && stream != null) + { + var info = this.localUpgradeService.GetLocalUpgradeInfo(Path.GetFileNameWithoutExtension(fileName), stream, CancellationToken.None).Result; + if (info.IsValid) + { + var upgradePath = Path.Combine(this.applicationStatusInfo.ApplicationMapPath, "App_Data", "Upgrade", info.PackageName + ".zip"); + using (var fileStream = File.Create(upgradePath)) + { + stream.Seek(0, SeekOrigin.Begin); + stream.CopyTo(fileStream); + } + + result = info; + } + else + { + result = "The uploaded file is not a valid DNN upgrade package."; + } + } + + var mediaTypeFormatter = new JsonMediaTypeFormatter(); + mediaTypeFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/plain")); + + // Response Content Type cannot be application/json + // because IE9 with iframe-transport manages the response + // as a file download + return this.Request.CreateResponse( + HttpStatusCode.OK, + result, + mediaTypeFormatter, + "text/plain"); + } } } diff --git a/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/admin/personaBar/Dnn.Servers/App_LocalResources/Servers.resx b/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/admin/personaBar/Dnn.Servers/App_LocalResources/Servers.resx index b5815cae4ee..0a7a521bacc 100644 --- a/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/admin/personaBar/Dnn.Servers/App_LocalResources/Servers.resx +++ b/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/admin/personaBar/Dnn.Servers/App_LocalResources/Servers.resx @@ -768,4 +768,7 @@ Are you sure you want to increment the version number for your site? Version + + Upload Package + \ No newline at end of file From 136545c3bcf0e5c2ebe6a68c4d80066ff120f026 Mon Sep 17 00:00:00 2001 From: Peter Donker Date: Tue, 21 Oct 2025 11:28:55 +0200 Subject: [PATCH 058/199] Implement package delete --- .../components/Tabs/Upgrades/UpgradeRow.tsx | 13 +++- .../src/services/upgradeService.ts | 5 ++ .../Dnn.PersonaBar.Extensions.csproj | 1 + .../Services/DTO/UpgradePackageRequestDto.cs | 15 +++++ .../Services/UpgradesController.cs | 63 +++++++++++++++---- .../App_LocalResources/Servers.resx | 3 + 6 files changed, 88 insertions(+), 12 deletions(-) create mode 100644 Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Services/DTO/UpgradePackageRequestDto.cs diff --git a/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/UpgradeRow.tsx b/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/UpgradeRow.tsx index df334d4f18a..1e36c62d02b 100644 --- a/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/UpgradeRow.tsx +++ b/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/UpgradeRow.tsx @@ -11,6 +11,8 @@ import { } from "@dnnsoftware/dnn-react-common"; import Localization from "../../../localization"; import "./style.less"; +import util from "../../../utils"; +import upgradeService from "services/upgradeService"; interface IUpgradeRowProps { upgrade: LocalUpgradeInfo; @@ -37,7 +39,16 @@ const UpgradeRow: React.FC = (props) => { {}} + onClick={() => { + util.confirm( + Localization.get("DeleteUpgradePackage.Confirm"), + Localization.get("Confirm"), + Localization.get("Cancel"), + function () { + upgradeService.deletePackage(props.upgrade.PackageName); + }.bind(this) + ); + }} title={Localization.get("Delete")} /> diff --git a/Dnn.AdminExperience/ClientSide/Servers.Web/src/services/upgradeService.ts b/Dnn.AdminExperience/ClientSide/Servers.Web/src/services/upgradeService.ts index cd4b4e1ff38..217d4a7d751 100644 --- a/Dnn.AdminExperience/ClientSide/Servers.Web/src/services/upgradeService.ts +++ b/Dnn.AdminExperience/ClientSide/Servers.Web/src/services/upgradeService.ts @@ -5,6 +5,10 @@ const listUpgrades = function () { return serviceFramework.get("Upgrades", "List"); }; +const deletePackage = function (packageName) { + return serviceFramework.post("Upgrades", "Delete", { packageName }); +}; + const uploadPackage = function (file, callback, errorCallback) { const sf = utils.getServiceFramework(); sf.moduleRoot = "PersonaBar"; @@ -17,6 +21,7 @@ const uploadPackage = function (file, callback, errorCallback) { const upgradeService = { listUpgrades, uploadPackage, + deletePackage, }; export default upgradeService; diff --git a/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Dnn.PersonaBar.Extensions.csproj b/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Dnn.PersonaBar.Extensions.csproj index aa58be74711..7e674bb84b9 100644 --- a/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Dnn.PersonaBar.Extensions.csproj +++ b/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Dnn.PersonaBar.Extensions.csproj @@ -453,6 +453,7 @@ + diff --git a/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Services/DTO/UpgradePackageRequestDto.cs b/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Services/DTO/UpgradePackageRequestDto.cs new file mode 100644 index 00000000000..c1705c88d30 --- /dev/null +++ b/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Services/DTO/UpgradePackageRequestDto.cs @@ -0,0 +1,15 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information + +namespace Dnn.PersonaBar.Extensions.Services.Dto +{ + using System.Runtime.Serialization; + + [DataContract] + public class UpgradePackageRequestDto + { + [DataMember(Name = "packageName")] + public string PackageName { get; set; } + } +} diff --git a/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Services/UpgradesController.cs b/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Services/UpgradesController.cs index d9080949446..1eaab6fe292 100644 --- a/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Services/UpgradesController.cs +++ b/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Services/UpgradesController.cs @@ -15,6 +15,7 @@ namespace Dnn.PersonaBar.Extensions.Services using System.Threading.Tasks; using System.Web.Http; + using Dnn.PersonaBar.Extensions.Services.Dto; using Dnn.PersonaBar.Library; using Dnn.PersonaBar.Library.Attributes; using DotNetNuke.Abstractions.Application; @@ -36,6 +37,13 @@ public UpgradesController(IApplicationStatusInfo applicationStatusInfo, ILocalUp this.localUpgradeService = localUpgradeService; } + /// + /// Retrieves a list of local upgrades. + /// + /// A token to monitor for cancellation requests. + /// A containing the list of local upgrades with a status code + /// of if successful, or an error message with a status code of + /// if an exception occurs. [HttpGet] public async Task List(CancellationToken cancellationToken) { @@ -52,11 +60,11 @@ public async Task List(CancellationToken cancellationToken) } /// Starts a local upgrade. - /// The version to upgrade to. + /// The DTO containing the packageName. /// The cancellation token. /// An empty success response. [HttpPost] - public async Task StartUpgrade(string version, CancellationToken cancellationToken) + public async Task StartUpgrade(UpgradePackageRequestDto data, CancellationToken cancellationToken) { var upgrades = await this.localUpgradeService.GetLocalUpgrades(cancellationToken); if (!upgrades.Any(u => u.IsValid && !u.IsOutdated)) @@ -64,11 +72,10 @@ public async Task StartUpgrade(string version, Cancellation return this.Request.CreateResponse(HttpStatusCode.BadRequest, new { message = "There are no upgrades to apply", }); } - var ver = new Version(version); - var upgrade = upgrades.FirstOrDefault(u => u.Version.Equals(ver)); + var upgrade = upgrades.FirstOrDefault(u => u.PackageName.Equals(data.PackageName, StringComparison.InvariantCultureIgnoreCase)); if (upgrade == null || !upgrade.IsValid || upgrade.IsOutdated) { - return this.Request.CreateResponse(HttpStatusCode.BadRequest, new { message = $"There is no valid upgrade for version {version}", }); + return this.Request.CreateResponse(HttpStatusCode.BadRequest, new { message = $"There is no valid upgrade for package {data.PackageName}", }); } await this.localUpgradeService.StartLocalUpgrade(upgrade, cancellationToken); @@ -93,9 +100,39 @@ public async Task StartFirstUpgrade(CancellationToken cance return this.Request.CreateResponse(HttpStatusCode.NoContent); } + /// Deletes a local upgrade package. + /// The DTO containing the packageName. + /// The cancellation token. + /// An empty success response. + [HttpPost] + public async Task Delete(UpgradePackageRequestDto data, CancellationToken cancellationToken) + { + var upgrades = await this.localUpgradeService.GetLocalUpgrades(cancellationToken); + var upgrade = upgrades.FirstOrDefault(u => u.PackageName.Equals(data.PackageName, StringComparison.InvariantCultureIgnoreCase)); + try + { + var packagePath = Path.Combine(this.applicationStatusInfo.ApplicationMapPath, "App_Data", "Upgrade", upgrade.PackageName + ".zip"); + if (File.Exists(packagePath)) + { + File.Delete(packagePath); + } + } + catch (Exception ex) + { + Logger.Error(ex); + return this.Request.CreateResponse(HttpStatusCode.InternalServerError, new { message = ex.Message, }); + } + + return this.Request.CreateResponse(HttpStatusCode.NoContent); + } + + /// + /// Uploads a DNN package for local upgrade. + /// + /// Either a package info or an error message. [HttpPost] [IFrameSupportedValidateAntiForgeryToken] - public Task Upload([FromUri] string legacySkin = null, [FromUri] bool isPortalPackage = false) + public Task Upload() { try { @@ -154,7 +191,15 @@ private async Task UploadFileAction() if (!string.IsNullOrEmpty(fileName) && stream != null) { var info = this.localUpgradeService.GetLocalUpgradeInfo(Path.GetFileNameWithoutExtension(fileName), stream, CancellationToken.None).Result; - if (info.IsValid) + if (!info.IsValid) + { + result = new { message = $"The uploaded file {fileName} is not a valid DNN package.", }; + } + else if (info.IsOutdated) + { + result = new { message = $"The uploaded file {fileName} is an outdated DNN package.", }; + } + else { var upgradePath = Path.Combine(this.applicationStatusInfo.ApplicationMapPath, "App_Data", "Upgrade", info.PackageName + ".zip"); using (var fileStream = File.Create(upgradePath)) @@ -165,10 +210,6 @@ private async Task UploadFileAction() result = info; } - else - { - result = "The uploaded file is not a valid DNN upgrade package."; - } } var mediaTypeFormatter = new JsonMediaTypeFormatter(); diff --git a/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/admin/personaBar/Dnn.Servers/App_LocalResources/Servers.resx b/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/admin/personaBar/Dnn.Servers/App_LocalResources/Servers.resx index 0a7a521bacc..d2cfa89f6cf 100644 --- a/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/admin/personaBar/Dnn.Servers/App_LocalResources/Servers.resx +++ b/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/admin/personaBar/Dnn.Servers/App_LocalResources/Servers.resx @@ -771,4 +771,7 @@ Are you sure you want to increment the version number for your site? Upload Package + + Delete this upgrade package? + \ No newline at end of file From 2623500e6990308abc6fa6ca543ec58c40161654 Mon Sep 17 00:00:00 2001 From: Peter Donker Date: Tue, 21 Oct 2025 13:25:49 +0200 Subject: [PATCH 059/199] Getting the update of the grid right --- .../components/Tabs/Upgrades/UpgradeList.tsx | 3 ++- .../components/Tabs/Upgrades/UpgradeRow.tsx | 10 ++------- .../src/components/Tabs/Upgrades/index.tsx | 21 ++++++++++++++++--- 3 files changed, 22 insertions(+), 12 deletions(-) diff --git a/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/UpgradeList.tsx b/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/UpgradeList.tsx index bdfb506537e..72204574d80 100644 --- a/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/UpgradeList.tsx +++ b/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/UpgradeList.tsx @@ -6,11 +6,12 @@ import UpgradeRow from "./UpgradeRow"; interface IUpgradeListProps { upgrades: LocalUpgradeInfo[]; + onDelete: (packageName: string) => void; } const UpgradeList: React.FC = (props) => { const rows = props.upgrades.map((upgrade) => ( - + props.onDelete(packageName)} /> )); return (
diff --git a/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/UpgradeRow.tsx b/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/UpgradeRow.tsx index 1e36c62d02b..92db13ad078 100644 --- a/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/UpgradeRow.tsx +++ b/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/UpgradeRow.tsx @@ -1,21 +1,17 @@ import * as React from "react"; import { LocalUpgradeInfo } from "../../../models/LocalUpgradeInfo"; import { - Button, GridCell, TextOverflowWrapper, IconButton, - Collapsible, - SingleLineInputWithError, - SvgIcons, } from "@dnnsoftware/dnn-react-common"; import Localization from "../../../localization"; import "./style.less"; import util from "../../../utils"; -import upgradeService from "services/upgradeService"; interface IUpgradeRowProps { upgrade: LocalUpgradeInfo; + onDelete: (packageName: string) => void; } const UpgradeRow: React.FC = (props) => { @@ -44,9 +40,7 @@ const UpgradeRow: React.FC = (props) => { Localization.get("DeleteUpgradePackage.Confirm"), Localization.get("Confirm"), Localization.get("Cancel"), - function () { - upgradeService.deletePackage(props.upgrade.PackageName); - }.bind(this) + () => props.onDelete(props.upgrade.PackageName) ); }} title={Localization.get("Delete")} diff --git a/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/index.tsx b/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/index.tsx index 020b208a8b9..ed049658de4 100644 --- a/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/index.tsx +++ b/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/index.tsx @@ -23,11 +23,23 @@ const UpgradesTab: React.FC = (props) => { const [upgrades, setUpgrades] = useState([]); const [showUploadPanel, setShowUploadPanel] = useState(false); - useEffect(() => { + const getUpgrades = () => { upgradeService.listUpgrades().then((upgrades) => { setUpgrades(upgrades); }); - }, []); + }; + + const deletePackage = (packageName: string) => { + upgradeService.deletePackage(packageName).then(() => { + getUpgrades(); + }); + }; + + useEffect(() => { + if (!showUploadPanel) { + getUpgrades(); + } + }, [showUploadPanel]); return ( @@ -84,7 +96,10 @@ const UpgradesTab: React.FC = (props) => { className="header-title" label={Localization.get("plAvailableUpgrades")} /> - + deletePackage(packageName)} + />
")).children()[0],V("body").append(e),t=i.offsetWidth,e.css("overflow","scroll"),t===(i=i.offsetWidth)&&(i=e[0].clientWidth),e.remove(),s=t-i)},getScrollInfo:function(t){var e=t.isWindow||t.isDocument?"":t.element.css("overflow-x"),i=t.isWindow||t.isDocument?"":t.element.css("overflow-y"),e="scroll"===e||"auto"===e&&t.widthx(k(s),k(n))?o.important="horizontal":o.important="vertical",u.using.call(this,t,o)}),a.offset(V.extend(h,{using:t}))})):i.apply(this,arguments)},V.ui.position={fit:{left:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollLeft:s.offset.left,s=s.width,o=t.left-e.collisionPosition.marginLeft,a=n-o,r=o+e.collisionWidth-s-n;e.collisionWidth>s?0n?0")[0],g=u.each;function m(t){return null==t?t+"":"object"==typeof t?d[F.call(t)]||"object":typeof t}function _(t,e,i){var s=Y[e.type]||{};return null==t?i||!e.def?null:e.def:(t=s.floor?~~t:parseFloat(t),isNaN(t)?e.def:s.mod?(t+s.mod)%s.mod:Math.min(s.max,Math.max(0,t)))}function j(s){var n=p(),o=n._rgba=[];return s=s.toLowerCase(),g(R,function(t,e){var i=e.re.exec(s),i=i&&e.parse(i),e=e.space||"rgba";if(i)return i=n[e](i),n[f[e].cache]=i[f[e].cache],o=n._rgba=i._rgba,!1}),o.length?("0,0,0,0"===o.join()&&u.extend(o,y.transparent),n):y[s]}function v(t,e,i){return 6*(i=(i+1)%1)<1?t+(e-t)*i*6:2*i<1?e:3*i<2?t+(e-t)*(2/3-i)*6:t}t.style.cssText="background-color:rgba(1,1,1,.5)",B.rgba=-1o.mod/2?s+=o.mod:s-n>o.mod/2&&(s-=o.mod)),l[i]=_((n-s)*a+s,e)))}),this[t](l)},blend:function(t){var e,i,s;return 1===this._rgba[3]?this:(e=this._rgba.slice(),i=e.pop(),s=p(t)._rgba,p(u.map(e,function(t,e){return(1-i)*s[e]+i*t})))},toRgbaString:function(){var t="rgba(",e=u.map(this._rgba,function(t,e){return null!=t?t:2
").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),e={width:i.width(),height:i.height()},n=document.activeElement;try{n.id}catch(t){n=document.body}return i.wrap(t),i[0]!==n&&!V.contains(i[0],n)||V(n).trigger("focus"),t=i.parent(),"static"===i.css("position")?(t.css({position:"relative"}),i.css({position:"relative"})):(V.extend(s,{position:i.css("position"),zIndex:i.css("z-index")}),V.each(["top","left","bottom","right"],function(t,e){s[e]=i.css(e),isNaN(parseInt(s[e],10))&&(s[e]="auto")}),i.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})),i.css(e),t.css(s).show()},removeWrapper:function(t){var e=document.activeElement;return t.parent().is(".ui-effects-wrapper")&&(t.parent().replaceWith(t),t[0]!==e&&!V.contains(t[0],e)||V(e).trigger("focus")),t}}),V.extend(V.effects,{version:"1.13.3",define:function(t,e,i){return i||(i=e,e="effect"),V.effects.effect[t]=i,V.effects.effect[t].mode=e,i},scaledDimensions:function(t,e,i){var s;return 0===e?{height:0,width:0,outerHeight:0,outerWidth:0}:(s="horizontal"!==i?(e||100)/100:1,i="vertical"!==i?(e||100)/100:1,{height:t.height()*i,width:t.width()*s,outerHeight:t.outerHeight()*i,outerWidth:t.outerWidth()*s})},clipToBox:function(t){return{width:t.clip.right-t.clip.left,height:t.clip.bottom-t.clip.top,left:t.clip.left,top:t.clip.top}},unshift:function(t,e,i){var s=t.queue();1").insertAfter(t).css({display:/^(inline|ruby)/.test(t.css("display"))?"inline-block":"block",visibility:"hidden",marginTop:t.css("marginTop"),marginBottom:t.css("marginBottom"),marginLeft:t.css("marginLeft"),marginRight:t.css("marginRight"),float:t.css("float")}).outerWidth(t.outerWidth()).outerHeight(t.outerHeight()).addClass("ui-effects-placeholder"),t.data(w+"placeholder",e)),t.css({position:i,left:s.left,top:s.top}),e},removePlaceholder:function(t){var e=w+"placeholder",i=t.data(e);i&&(i.remove(),t.removeData(e))},cleanUp:function(t){V.effects.restoreStyle(t),V.effects.removePlaceholder(t)},setTransition:function(s,t,n,o){return o=o||{},V.each(t,function(t,e){var i=s.cssUnit(e);0
");l.appendTo("body").addClass(t.className).css({top:s.top-a,left:s.left-o,height:i.innerHeight(),width:i.innerWidth(),position:n?"fixed":"absolute"}).animate(r,t.duration,t.easing,function(){l.remove(),"function"==typeof e&&e()})}}),V.fx.step.clip=function(t){t.clipInit||(t.start=V(t.elem).cssClip(),"string"==typeof t.end&&(t.end=et(t.end,t.elem)),t.clipInit=!0),V(t.elem).cssClip({top:t.pos*(t.end.top-t.start.top)+t.start.top,right:t.pos*(t.end.right-t.start.right)+t.start.right,bottom:t.pos*(t.end.bottom-t.start.bottom)+t.start.bottom,left:t.pos*(t.end.left-t.start.left)+t.start.left})},b={},V.each(["Quad","Cubic","Quart","Quint","Expo"],function(e,t){b[t]=function(t){return Math.pow(t,e+2)}}),V.extend(b,{Sine:function(t){return 1-Math.cos(t*Math.PI/2)},Circ:function(t){return 1-Math.sqrt(1-t*t)},Elastic:function(t){return 0===t||1===t?t:-Math.pow(2,8*(t-1))*Math.sin((80*(t-1)-7.5)*Math.PI/15)},Back:function(t){return t*t*(3*t-2)},Bounce:function(t){for(var e,i=4;t<((e=Math.pow(2,--i))-1)/11;);return 1/Math.pow(4,3-i)-7.5625*Math.pow((3*e-2)/22-t,2)}}),V.each(b,function(t,e){V.easing["easeIn"+t]=e,V.easing["easeOut"+t]=function(t){return 1-e(1-t)},V.easing["easeInOut"+t]=function(t){return t<.5?e(2*t)/2:1-e(-2*t+2)/2}});t=V.effects;V.effects.define("blind","hide",function(t,e){var i={up:["bottom","top"],vertical:["bottom","top"],down:["top","bottom"],left:["right","left"],horizontal:["right","left"],right:["left","right"]},s=V(this),n=t.direction||"up",o=s.cssClip(),a={clip:V.extend({},o)},r=V.effects.createPlaceholder(s);a.clip[i[n][0]]=a.clip[i[n][1]],"show"===t.mode&&(s.cssClip(a.clip),r&&r.css(V.effects.clipToBox(a)),a.clip=o),r&&r.animate(V.effects.clipToBox(a),t.duration,t.easing),s.animate(a,{queue:!1,duration:t.duration,easing:t.easing,complete:e})}),V.effects.define("bounce",function(t,e){var i,s,n=V(this),o=t.mode,a="hide"===o,o="show"===o,r=t.direction||"up",l=t.distance,h=t.times||5,c=2*h+(o||a?1:0),u=t.duration/c,d=t.easing,p="up"===r||"down"===r?"top":"left",f="up"===r||"left"===r,g=0,t=n.queue().length;for(V.effects.createPlaceholder(n),r=n.css(p),l=l||n["top"==p?"outerHeight":"outerWidth"]()/3,o&&((s={opacity:1})[p]=r,n.css("opacity",0).css(p,f?2*-l:2*l).animate(s,u,d)),a&&(l/=Math.pow(2,h-1)),(s={})[p]=r;g
").css({position:"absolute",visibility:"visible",left:-s*p,top:-i*f}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:p,height:f,left:n+(u?a*p:0),top:o+(u?r*f:0),opacity:u?0:1}).animate({left:n+(u?0:a*p),top:o+(u?0:r*f),opacity:u?1:0},t.duration||500,t.easing,m)}),V.effects.define("fade","toggle",function(t,e){var i="show"===t.mode;V(this).css("opacity",i?0:1).animate({opacity:i?1:0},{queue:!1,duration:t.duration,easing:t.easing,complete:e})}),V.effects.define("fold","hide",function(e,t){var i=V(this),s=e.mode,n="show"===s,s="hide"===s,o=e.size||15,a=/([0-9]+)%/.exec(o),r=!!e.horizFirst?["right","bottom"]:["bottom","right"],l=e.duration/2,h=V.effects.createPlaceholder(i),c=i.cssClip(),u={clip:V.extend({},c)},d={clip:V.extend({},c)},p=[c[r[0]],c[r[1]]],f=i.queue().length;a&&(o=parseInt(a[1],10)/100*p[s?0:1]),u.clip[r[0]]=o,d.clip[r[0]]=o,d.clip[r[1]]=0,n&&(i.cssClip(d.clip),h&&h.css(V.effects.clipToBox(d)),d.clip=c),i.queue(function(t){h&&h.animate(V.effects.clipToBox(u),l,e.easing).animate(V.effects.clipToBox(d),l,e.easing),t()}).animate(u,l,e.easing).animate(d,l,e.easing).queue(t),V.effects.unshift(i,f,4)}),V.effects.define("highlight","show",function(t,e){var i=V(this),s={backgroundColor:i.css("backgroundColor")};"hide"===t.mode&&(s.opacity=0),V.effects.saveStyle(i),i.css({backgroundImage:"none",backgroundColor:t.color||"#ffff99"}).animate(s,{queue:!1,duration:t.duration,easing:t.easing,complete:e})}),V.effects.define("size",function(s,e){var n,i=V(this),t=["fontSize"],o=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],a=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],r=s.mode,l="effect"!==r,h=s.scale||"both",c=s.origin||["middle","center"],u=i.css("position"),d=i.position(),p=V.effects.scaledDimensions(i),f=s.from||p,g=s.to||V.effects.scaledDimensions(i,0);V.effects.createPlaceholder(i),"show"===r&&(r=f,f=g,g=r),n={from:{y:f.height/p.height,x:f.width/p.width},to:{y:g.height/p.height,x:g.width/p.width}},"box"!==h&&"both"!==h||(n.from.y!==n.to.y&&(f=V.effects.setTransition(i,o,n.from.y,f),g=V.effects.setTransition(i,o,n.to.y,g)),n.from.x!==n.to.x&&(f=V.effects.setTransition(i,a,n.from.x,f),g=V.effects.setTransition(i,a,n.to.x,g))),"content"!==h&&"both"!==h||n.from.y!==n.to.y&&(f=V.effects.setTransition(i,t,n.from.y,f),g=V.effects.setTransition(i,t,n.to.y,g)),c&&(r=V.effects.getBaseline(c,p),f.top=(p.outerHeight-f.outerHeight)*r.y+d.top,f.left=(p.outerWidth-f.outerWidth)*r.x+d.left,g.top=(p.outerHeight-g.outerHeight)*r.y+d.top,g.left=(p.outerWidth-g.outerWidth)*r.x+d.left),delete f.outerHeight,delete f.outerWidth,i.css(f),"content"!==h&&"both"!==h||(o=o.concat(["marginTop","marginBottom"]).concat(t),a=a.concat(["marginLeft","marginRight"]),i.find("*[width]").each(function(){var t=V(this),e=V.effects.scaledDimensions(t),i={height:e.height*n.from.y,width:e.width*n.from.x,outerHeight:e.outerHeight*n.from.y,outerWidth:e.outerWidth*n.from.x},e={height:e.height*n.to.y,width:e.width*n.to.x,outerHeight:e.height*n.to.y,outerWidth:e.width*n.to.x};n.from.y!==n.to.y&&(i=V.effects.setTransition(t,o,n.from.y,i),e=V.effects.setTransition(t,o,n.to.y,e)),n.from.x!==n.to.x&&(i=V.effects.setTransition(t,a,n.from.x,i),e=V.effects.setTransition(t,a,n.to.x,e)),l&&V.effects.saveStyle(t),t.css(i),t.animate(e,s.duration,s.easing,function(){l&&V.effects.restoreStyle(t)})})),i.animate(g,{queue:!1,duration:s.duration,easing:s.easing,complete:function(){var t=i.offset();0===g.opacity&&i.css("opacity",f.opacity),l||(i.css("position","static"===u?"relative":u).offset(t),V.effects.saveStyle(i)),e()}})}),V.effects.define("scale",function(t,e){var i=V(this),s=t.mode,s=parseInt(t.percent,10)||(0===parseInt(t.percent,10)||"effect"!==s?0:100),i=V.extend(!0,{from:V.effects.scaledDimensions(i),to:V.effects.scaledDimensions(i,s,t.direction||"both"),origin:t.origin||["middle","center"]},t);t.fade&&(i.from.opacity=1,i.to.opacity=0),V.effects.effect.size.call(this,i,e)}),V.effects.define("puff","hide",function(t,e){t=V.extend(!0,{},t,{fade:!0,percent:parseInt(t.percent,10)||150});V.effects.effect.scale.call(this,t,e)}),V.effects.define("pulsate","show",function(t,e){var i=V(this),s=t.mode,n="show"===s,o=2*(t.times||5)+(n||"hide"===s?1:0),a=t.duration/o,r=0,l=1,s=i.queue().length;for(!n&&i.is(":visible")||(i.css("opacity",0).show(),r=1);l li > :first-child").add(t.find("> :not(li)").even())},heightStyle:"auto",icons:{activeHeader:"ui-icon-triangle-1-s",header:"ui-icon-triangle-1-e"},activate:null,beforeActivate:null},hideProps:{borderTopWidth:"hide",borderBottomWidth:"hide",paddingTop:"hide",paddingBottom:"hide",height:"hide"},showProps:{borderTopWidth:"show",borderBottomWidth:"show",paddingTop:"show",paddingBottom:"show",height:"show"},_create:function(){var t=this.options;this.prevShow=this.prevHide=V(),this._addClass("ui-accordion","ui-widget ui-helper-reset"),this.element.attr("role","tablist"),t.collapsible||!1!==t.active&&null!=t.active||(t.active=0),this._processPanels(),t.active<0&&(t.active+=this.headers.length),this._refresh()},_getCreateEventData:function(){return{header:this.active,panel:this.active.length?this.active.next():V()}},_createIcons:function(){var t,e=this.options.icons;e&&(t=V(""),this._addClass(t,"ui-accordion-header-icon","ui-icon "+e.header),t.prependTo(this.headers),t=this.active.children(".ui-accordion-header-icon"),this._removeClass(t,e.header)._addClass(t,null,e.activeHeader)._addClass(this.headers,"ui-accordion-icons"))},_destroyIcons:function(){this._removeClass(this.headers,"ui-accordion-icons"),this.headers.children(".ui-accordion-header-icon").remove()},_destroy:function(){var t;this.element.removeAttr("role"),this.headers.removeAttr("role aria-expanded aria-selected aria-controls tabIndex").removeUniqueId(),this._destroyIcons(),t=this.headers.next().css("display","").removeAttr("role aria-hidden aria-labelledby").removeUniqueId(),"content"!==this.options.heightStyle&&t.css("height","")},_setOption:function(t,e){"active"===t?this._activate(e):("event"===t&&(this.options.event&&this._off(this.headers,this.options.event),this._setupEvents(e)),this._super(t,e),"collapsible"!==t||e||!1!==this.options.active||this._activate(0),"icons"===t&&(this._destroyIcons(),e)&&this._createIcons())},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",t),this._toggleClass(null,"ui-state-disabled",!!t),this._toggleClass(this.headers.add(this.headers.next()),null,"ui-state-disabled",!!t)},_keydown:function(t){if(!t.altKey&&!t.ctrlKey){var e=V.ui.keyCode,i=this.headers.length,s=this.headers.index(t.target),n=!1;switch(t.keyCode){case e.RIGHT:case e.DOWN:n=this.headers[(s+1)%i];break;case e.LEFT:case e.UP:n=this.headers[(s-1+i)%i];break;case e.SPACE:case e.ENTER:this._eventHandler(t);break;case e.HOME:n=this.headers[0];break;case e.END:n=this.headers[i-1]}n&&(V(t.target).attr("tabIndex",-1),V(n).attr("tabIndex",0),V(n).trigger("focus"),t.preventDefault())}},_panelKeyDown:function(t){t.keyCode===V.ui.keyCode.UP&&t.ctrlKey&&V(t.currentTarget).prev().trigger("focus")},refresh:function(){var t=this.options;this._processPanels(),!1===t.active&&!0===t.collapsible||!this.headers.length?(t.active=!1,this.active=V()):!1===t.active?this._activate(0):this.active.length&&!V.contains(this.element[0],this.active[0])?this.headers.length===this.headers.find(".ui-state-disabled").length?(t.active=!1,this.active=V()):this._activate(Math.max(0,t.active-1)):t.active=this.headers.index(this.active),this._destroyIcons(),this._refresh()},_processPanels:function(){var t=this.headers,e=this.panels;"function"==typeof this.options.header?this.headers=this.options.header(this.element):this.headers=this.element.find(this.options.header),this._addClass(this.headers,"ui-accordion-header ui-accordion-header-collapsed","ui-state-default"),this.panels=this.headers.next().filter(":not(.ui-accordion-content-active)").hide(),this._addClass(this.panels,"ui-accordion-content","ui-helper-reset ui-widget-content"),e&&(this._off(t.not(this.headers)),this._off(e.not(this.panels)))},_refresh:function(){var i,t=this.options,e=t.heightStyle,s=this.element.parent();this.active=this._findActive(t.active),this._addClass(this.active,"ui-accordion-header-active","ui-state-active")._removeClass(this.active,"ui-accordion-header-collapsed"),this._addClass(this.active.next(),"ui-accordion-content-active"),this.active.next().show(),this.headers.attr("role","tab").each(function(){var t=V(this),e=t.uniqueId().attr("id"),i=t.next(),s=i.uniqueId().attr("id");t.attr("aria-controls",s),i.attr("aria-labelledby",e)}).next().attr("role","tabpanel"),this.headers.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}).next().attr({"aria-hidden":"true"}).hide(),this.active.length?this.active.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}).next().attr({"aria-hidden":"false"}):this.headers.eq(0).attr("tabIndex",0),this._createIcons(),this._setupEvents(t.event),"fill"===e?(i=s.height(),this.element.siblings(":visible").each(function(){var t=V(this),e=t.css("position");"absolute"!==e&&"fixed"!==e&&(i-=t.outerHeight(!0))}),this.headers.each(function(){i-=V(this).outerHeight(!0)}),this.headers.next().each(function(){V(this).height(Math.max(0,i-V(this).innerHeight()+V(this).height()))}).css("overflow","auto")):"auto"===e&&(i=0,this.headers.next().each(function(){var t=V(this).is(":visible");t||V(this).show(),i=Math.max(i,V(this).css("height","").height()),t||V(this).hide()}).height(i))},_activate:function(t){t=this._findActive(t)[0];t!==this.active[0]&&(t=t||this.active[0],this._eventHandler({target:t,currentTarget:t,preventDefault:V.noop}))},_findActive:function(t){return"number"==typeof t?this.headers.eq(t):V()},_setupEvents:function(t){var i={keydown:"_keydown"};t&&V.each(t.split(" "),function(t,e){i[e]="_eventHandler"}),this._off(this.headers.add(this.headers.next())),this._on(this.headers,i),this._on(this.headers.next(),{keydown:"_panelKeyDown"}),this._hoverable(this.headers),this._focusable(this.headers)},_eventHandler:function(t){var e=this.options,i=this.active,s=V(t.currentTarget),n=s[0]===i[0],o=n&&e.collapsible,a=o?V():s.next(),r=i.next(),r={oldHeader:i,oldPanel:r,newHeader:o?V():s,newPanel:a};t.preventDefault(),n&&!e.collapsible||!1===this._trigger("beforeActivate",t,r)||(e.active=!o&&this.headers.index(s),this.active=n?V():s,this._toggle(r),this._removeClass(i,"ui-accordion-header-active","ui-state-active"),e.icons&&(a=i.children(".ui-accordion-header-icon"),this._removeClass(a,null,e.icons.activeHeader)._addClass(a,null,e.icons.header)),n)||(this._removeClass(s,"ui-accordion-header-collapsed")._addClass(s,"ui-accordion-header-active","ui-state-active"),e.icons&&(t=s.children(".ui-accordion-header-icon"),this._removeClass(t,null,e.icons.header)._addClass(t,null,e.icons.activeHeader)),this._addClass(s.next(),"ui-accordion-content-active"))},_toggle:function(t){var e=t.newPanel,i=this.prevShow.length?this.prevShow:t.oldPanel;this.prevShow.add(this.prevHide).stop(!0,!0),this.prevShow=e,this.prevHide=i,this.options.animate?this._animate(e,i,t):(i.hide(),e.show(),this._toggleComplete(t)),i.attr({"aria-hidden":"true"}),i.prev().attr({"aria-selected":"false","aria-expanded":"false"}),e.length&&i.length?i.prev().attr({tabIndex:-1,"aria-expanded":"false"}):e.length&&this.headers.filter(function(){return 0===parseInt(V(this).attr("tabIndex"),10)}).attr("tabIndex",-1),e.attr("aria-hidden","false").prev().attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_animate:function(t,i,e){function s(){o._toggleComplete(e)}var n,o=this,a=0,r=t.css("box-sizing"),l=t.length&&(!i.length||t.index()",delay:300,options:{icons:{submenu:"ui-icon-caret-1-e"},items:"> *",menus:"ul",position:{my:"left top",at:"right top"},role:"menu",blur:null,focus:null,select:null},_create:function(){this.activeMenu=this.element,this.mouseHandled=!1,this.lastMousePosition={x:null,y:null},this.element.uniqueId().attr({role:this.options.role,tabIndex:0}),this._addClass("ui-menu","ui-widget ui-widget-content"),this._on({"mousedown .ui-menu-item":function(t){t.preventDefault(),this._activateItem(t)},"click .ui-menu-item":function(t){var e=V(t.target),i=V(V.ui.safeActiveElement(this.document[0]));!this.mouseHandled&&e.not(".ui-state-disabled").length&&(this.select(t),t.isPropagationStopped()||(this.mouseHandled=!0),e.has(".ui-menu").length?this.expand(t):!this.element.is(":focus")&&i.closest(".ui-menu").length&&(this.element.trigger("focus",[!0]),this.active)&&1===this.active.parents(".ui-menu").length&&clearTimeout(this.timer))},"mouseenter .ui-menu-item":"_activateItem","mousemove .ui-menu-item":"_activateItem",mouseleave:"collapseAll","mouseleave .ui-menu":"collapseAll",focus:function(t,e){var i=this.active||this._menuItems().first();e||this.focus(t,i)},blur:function(t){this._delay(function(){V.contains(this.element[0],V.ui.safeActiveElement(this.document[0]))||this.collapseAll(t)})},keydown:"_keydown"}),this.refresh(),this._on(this.document,{click:function(t){this._closeOnDocumentClick(t)&&this.collapseAll(t,!0),this.mouseHandled=!1}})},_activateItem:function(t){var e,i;this.previousFilter||t.clientX===this.lastMousePosition.x&&t.clientY===this.lastMousePosition.y||(this.lastMousePosition={x:t.clientX,y:t.clientY},e=V(t.target).closest(".ui-menu-item"),i=V(t.currentTarget),e[0]!==i[0])||i.is(".ui-state-active")||(this._removeClass(i.siblings().children(".ui-state-active"),null,"ui-state-active"),this.focus(t,i))},_destroy:function(){var t=this.element.find(".ui-menu-item").removeAttr("role aria-disabled").children(".ui-menu-item-wrapper").removeUniqueId().removeAttr("tabIndex role aria-haspopup");this.element.removeAttr("aria-activedescendant").find(".ui-menu").addBack().removeAttr("role aria-labelledby aria-expanded aria-hidden aria-disabled tabIndex").removeUniqueId().show(),t.children().each(function(){var t=V(this);t.data("ui-menu-submenu-caret")&&t.remove()})},_keydown:function(t){var e,i,s,n=!0;switch(t.keyCode){case V.ui.keyCode.PAGE_UP:this.previousPage(t);break;case V.ui.keyCode.PAGE_DOWN:this.nextPage(t);break;case V.ui.keyCode.HOME:this._move("first","first",t);break;case V.ui.keyCode.END:this._move("last","last",t);break;case V.ui.keyCode.UP:this.previous(t);break;case V.ui.keyCode.DOWN:this.next(t);break;case V.ui.keyCode.LEFT:this.collapse(t);break;case V.ui.keyCode.RIGHT:this.active&&!this.active.is(".ui-state-disabled")&&this.expand(t);break;case V.ui.keyCode.ENTER:case V.ui.keyCode.SPACE:this._activate(t);break;case V.ui.keyCode.ESCAPE:this.collapse(t);break;default:e=this.previousFilter||"",s=n=!1,i=96<=t.keyCode&&t.keyCode<=105?(t.keyCode-96).toString():String.fromCharCode(t.keyCode),clearTimeout(this.filterTimer),i===e?s=!0:i=e+i,e=this._filterMenuItems(i),(e=s&&-1!==e.index(this.active.next())?this.active.nextAll(".ui-menu-item"):e).length||(i=String.fromCharCode(t.keyCode),e=this._filterMenuItems(i)),e.length?(this.focus(t,e),this.previousFilter=i,this.filterTimer=this._delay(function(){delete this.previousFilter},1e3)):delete this.previousFilter}n&&t.preventDefault()},_activate:function(t){this.active&&!this.active.is(".ui-state-disabled")&&(this.active.children("[aria-haspopup='true']").length?this.expand(t):this.select(t))},refresh:function(){var t,e,s=this,n=this.options.icons.submenu,i=this.element.find(this.options.menus);this._toggleClass("ui-menu-icons",null,!!this.element.find(".ui-icon").length),t=i.filter(":not(.ui-menu)").hide().attr({role:this.options.role,"aria-hidden":"true","aria-expanded":"false"}).each(function(){var t=V(this),e=t.prev(),i=V("").data("ui-menu-submenu-caret",!0);s._addClass(i,"ui-menu-icon","ui-icon "+n),e.attr("aria-haspopup","true").prepend(i),t.attr("aria-labelledby",e.attr("id"))}),this._addClass(t,"ui-menu","ui-widget ui-widget-content ui-front"),(t=i.add(this.element).find(this.options.items)).not(".ui-menu-item").each(function(){var t=V(this);s._isDivider(t)&&s._addClass(t,"ui-menu-divider","ui-widget-content")}),e=(i=t.not(".ui-menu-item, .ui-menu-divider")).children().not(".ui-menu").uniqueId().attr({tabIndex:-1,role:this._itemRole()}),this._addClass(i,"ui-menu-item")._addClass(e,"ui-menu-item-wrapper"),t.filter(".ui-state-disabled").attr("aria-disabled","true"),this.active&&!V.contains(this.element[0],this.active[0])&&this.blur()},_itemRole:function(){return{menu:"menuitem",listbox:"option"}[this.options.role]},_setOption:function(t,e){var i;"icons"===t&&(i=this.element.find(".ui-menu-icon"),this._removeClass(i,null,this.options.icons.submenu)._addClass(i,null,e.submenu)),this._super(t,e)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",String(t)),this._toggleClass(null,"ui-state-disabled",!!t)},focus:function(t,e){var i;this.blur(t,t&&"focus"===t.type),this._scrollIntoView(e),this.active=e.first(),i=this.active.children(".ui-menu-item-wrapper"),this._addClass(i,null,"ui-state-active"),this.options.role&&this.element.attr("aria-activedescendant",i.attr("id")),i=this.active.parent().closest(".ui-menu-item").children(".ui-menu-item-wrapper"),this._addClass(i,null,"ui-state-active"),t&&"keydown"===t.type?this._close():this.timer=this._delay(function(){this._close()},this.delay),(i=e.children(".ui-menu")).length&&t&&/^mouse/.test(t.type)&&this._startOpening(i),this.activeMenu=e.parent(),this._trigger("focus",t,{item:e})},_scrollIntoView:function(t){var e,i,s;this._hasScroll()&&(e=parseFloat(V.css(this.activeMenu[0],"borderTopWidth"))||0,i=parseFloat(V.css(this.activeMenu[0],"paddingTop"))||0,e=t.offset().top-this.activeMenu.offset().top-e-i,i=this.activeMenu.scrollTop(),s=this.activeMenu.height(),t=t.outerHeight(),e<0?this.activeMenu.scrollTop(i+e):s",options:{appendTo:null,autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},requestIndex:0,pending:0,liveRegionTimer:null,_create:function(){var i,s,n,t=this.element[0].nodeName.toLowerCase(),e="textarea"===t,t="input"===t;this.isMultiLine=e||!t&&this._isContentEditable(this.element),this.valueMethod=this.element[e||t?"val":"text"],this.isNewMenu=!0,this._addClass("ui-autocomplete-input"),this.element.attr("autocomplete","off"),this._on(this.element,{keydown:function(t){if(this.element.prop("readOnly"))s=n=i=!0;else{s=n=i=!1;var e=V.ui.keyCode;switch(t.keyCode){case e.PAGE_UP:i=!0,this._move("previousPage",t);break;case e.PAGE_DOWN:i=!0,this._move("nextPage",t);break;case e.UP:i=!0,this._keyEvent("previous",t);break;case e.DOWN:i=!0,this._keyEvent("next",t);break;case e.ENTER:this.menu.active&&(i=!0,t.preventDefault(),this.menu.select(t));break;case e.TAB:this.menu.active&&this.menu.select(t);break;case e.ESCAPE:this.menu.element.is(":visible")&&(this.isMultiLine||this._value(this.term),this.close(t),t.preventDefault());break;default:s=!0,this._searchTimeout(t)}}},keypress:function(t){if(i)i=!1,this.isMultiLine&&!this.menu.element.is(":visible")||t.preventDefault();else if(!s){var e=V.ui.keyCode;switch(t.keyCode){case e.PAGE_UP:this._move("previousPage",t);break;case e.PAGE_DOWN:this._move("nextPage",t);break;case e.UP:this._keyEvent("previous",t);break;case e.DOWN:this._keyEvent("next",t)}}},input:function(t){n?(n=!1,t.preventDefault()):this._searchTimeout(t)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(t){clearTimeout(this.searching),this.close(t),this._change(t)}}),this._initSource(),this.menu=V("
/// List of head tags ordered by priority. - List GetHeadTags(); + IEnumerable GetHeadTags(); /// /// Gets all meta tags ordered by priority (lowest priority first). /// /// List of meta tags ordered by priority. - List GetMetaTags(); + IEnumerable GetMetaTags(); /// /// Gets all messages ordered by priority (lowest priority first). /// /// List of messages ordered by priority. - List GetMessages(); + IEnumerable GetMessages(); /// /// Clears all stored page data. Useful for testing or resetting state. diff --git a/DNN Platform/DotNetNuke.Abstractions/Pages/PagePriority.cs b/DNN Platform/DotNetNuke.Abstractions/Pages/PagePriority.cs index 83a8c8a0d13..8638ad3ec18 100644 --- a/DNN Platform/DotNetNuke.Abstractions/Pages/PagePriority.cs +++ b/DNN Platform/DotNetNuke.Abstractions/Pages/PagePriority.cs @@ -19,11 +19,11 @@ namespace DotNetNuke.Abstractions.Pages /// 3. Default content (priority 100) /// 4. Module-level content (priority 200). /// - public class PagePriority + public static class PagePriority { /// /// Site-level priority (value: 10). - /// Used for framework scripts, core styles, and other fundamental site-wide content + /// Used for framework site-wide content /// that should be loaded before any other content. /// public const int Site = 10; diff --git a/DNN Platform/Library/Services/Pages/PageExtensions.cs b/DNN Platform/Library/Services/Pages/PageExtensions.cs index 5f8a63df5f2..3222468033f 100644 --- a/DNN Platform/Library/Services/Pages/PageExtensions.cs +++ b/DNN Platform/Library/Services/Pages/PageExtensions.cs @@ -131,7 +131,7 @@ public static ModuleMessage.ModuleMessageType ToModuleMessageType(this PageMessa PageMessageType.Warning => ModuleMessage.ModuleMessageType.YellowWarning, PageMessageType.Error => ModuleMessage.ModuleMessageType.RedError, PageMessageType.Info => ModuleMessage.ModuleMessageType.BlueInfo, - _ => ModuleMessage.ModuleMessageType.GreenSuccess, + _ => ModuleMessage.ModuleMessageType.BlueInfo, }; } } diff --git a/DNN Platform/Library/Services/Pages/PageService.cs b/DNN Platform/Library/Services/Pages/PageService.cs index cf97b2453ec..ad83a146218 100644 --- a/DNN Platform/Library/Services/Pages/PageService.cs +++ b/DNN Platform/Library/Services/Pages/PageService.cs @@ -214,7 +214,7 @@ public string GetKeyWords() /// Gets all head tags ordered by priority (lowest priority first). /// /// List of head tags ordered by priority. - public List GetHeadTags() + public IEnumerable GetHeadTags() { return this.headTags.OrderBy(x => x.Priority).ToList(); } @@ -223,7 +223,7 @@ public List GetHeadTags() /// Gets all meta tags ordered by priority (lowest priority first). ///
/// List of meta tags ordered by priority. - public List GetMetaTags() + public IEnumerable GetMetaTags() { return this.metaTags.OrderBy(x => x.Priority).ToList(); } @@ -232,7 +232,7 @@ public List GetMetaTags() /// Gets all messages ordered by priority (lowest priority first). ///
/// List of messages ordered by priority. - public List GetMessages() + public IEnumerable GetMessages() { return this.messages.OrderBy(x => x.Priority).ToList(); } diff --git a/DNN Platform/Website/Default.aspx.cs b/DNN Platform/Website/Default.aspx.cs index cc6bc897b15..771bfb4e57a 100644 --- a/DNN Platform/Website/Default.aspx.cs +++ b/DNN Platform/Website/Default.aspx.cs @@ -30,6 +30,7 @@ namespace DotNetNuke.Framework using DotNetNuke.Services.FileSystem; using DotNetNuke.Services.Installer.Blocker; using DotNetNuke.Services.Localization; + using DotNetNuke.Services.Pages; using DotNetNuke.Services.Personalization; using DotNetNuke.UI; using DotNetNuke.UI.Internals; @@ -388,26 +389,7 @@ protected override void OnPreRender(EventArgs evt) foreach (var item in this.pageService.GetMessages()) { - ModuleMessage.ModuleMessageType moduleMessageType = ModuleMessage.ModuleMessageType.BlueInfo; - - switch (item.MessageType) - { - case PageMessageType.Success: - moduleMessageType = ModuleMessage.ModuleMessageType.GreenSuccess; - break; - case PageMessageType.Warning: - moduleMessageType = ModuleMessage.ModuleMessageType.YellowWarning; - break; - case PageMessageType.Error: - moduleMessageType = ModuleMessage.ModuleMessageType.RedError; - break; - case PageMessageType.Info: - default: - moduleMessageType = ModuleMessage.ModuleMessageType.BlueInfo; - break; - } - - Skin.AddPageMessage(this, item.Heading, item.Message, moduleMessageType); + Skin.AddPageMessage(this, item.Heading, item.Message, item.MessageType.ToModuleMessageType()); } } From bc0ef4a37b9deed5c0719f237136061205399e62 Mon Sep 17 00:00:00 2001 From: Sacha Date: Wed, 22 Oct 2025 13:28:53 +0200 Subject: [PATCH 068/199] For SkinAdPageMessage : Mark old methods obsolete and leave one internal method Modify existing code to use new api Mark MemebershipModule.OnUnverifiedUserSkinInit obsolete, not used in dnn --- .../Membership/MembershipModule.cs | 6 ++- .../JavaScriptLibraries/JavaScript.cs | 7 ++- DNN Platform/Library/UI/Skins/Skin.cs | 49 ++++++++++++------- DNN Platform/Website/Default.aspx.cs | 9 ++-- 4 files changed, 45 insertions(+), 26 deletions(-) diff --git a/DNN Platform/HttpModules/Membership/MembershipModule.cs b/DNN Platform/HttpModules/Membership/MembershipModule.cs index 13b581af4b9..1c1ccccb67e 100644 --- a/DNN Platform/HttpModules/Membership/MembershipModule.cs +++ b/DNN Platform/HttpModules/Membership/MembershipModule.cs @@ -5,12 +5,14 @@ namespace DotNetNuke.HttpModules.Membership { using System; using System.Linq; + using System.Runtime.CompilerServices; using System.Security.Principal; using System.Threading; using System.Web; using System.Web.Security; using DotNetNuke.Abstractions.Application; + using DotNetNuke.Abstractions.Pages; using DotNetNuke.Common; using DotNetNuke.Common.Utilities; using DotNetNuke.Entities.Host; @@ -66,10 +68,12 @@ public MembershipModule(IHostSettingsService hostSettingsService, IPortalControl /// Called when unverified user skin initialize. /// The sender. /// The instance containing the event data. + [Obsolete("This method has been deprecated. No equivalent. Scheduled removal in v11.0.0.")] public static void OnUnverifiedUserSkinInit(object sender, SkinEventArgs e) { + var pageService = Globals.GetCurrentServiceProvider().GetRequiredService(); var strMessage = Localization.GetString("UnverifiedUser", Localization.SharedResourceFile, Thread.CurrentThread.CurrentCulture.Name); - UI.Skins.Skin.AddPageMessage(e.Skin, string.Empty, strMessage, ModuleMessage.ModuleMessageType.YellowWarning); + pageService.AddMessage(new PageMessage(string.Empty, strMessage, PageMessageType.Warning, string.Empty, PagePriority.Site)); } /// Authenticates the request. diff --git a/DNN Platform/Library/Framework/JavaScriptLibraries/JavaScript.cs b/DNN Platform/Library/Framework/JavaScriptLibraries/JavaScript.cs index 76e541932a0..1d3b7d4088a 100644 --- a/DNN Platform/Library/Framework/JavaScriptLibraries/JavaScript.cs +++ b/DNN Platform/Library/Framework/JavaScriptLibraries/JavaScript.cs @@ -12,6 +12,7 @@ namespace DotNetNuke.Framework.JavaScriptLibraries using DotNetNuke.Abstractions.Application; using DotNetNuke.Abstractions.Logging; + using DotNetNuke.Abstractions.Pages; using DotNetNuke.Abstractions.Portals; using DotNetNuke.Common; using DotNetNuke.Common.Utilities; @@ -602,9 +603,11 @@ private static void LogCollision(IEventLogger eventLogger, IPortalSettings porta UserController.Instance.GetCurrentUserInfo().UserID, EventLogType.SCRIPT_COLLISION); var strMessage = Localization.GetString("ScriptCollision", Localization.SharedResourceFile); - if (HttpContextSource.Current?.Handler is Page page) + + if (HttpContextSource.Current != null) { - Skin.AddPageMessage(page, string.Empty, strMessage, ModuleMessage.ModuleMessageType.YellowWarning); + var pageService = Globals.GetCurrentServiceProvider().GetRequiredService(); + pageService.AddMessage(new PageMessage(string.Empty, strMessage, PageMessageType.Warning, string.Empty, PagePriority.Default)); } } diff --git a/DNN Platform/Library/UI/Skins/Skin.cs b/DNN Platform/Library/UI/Skins/Skin.cs index 052cb62226b..fb644c423b3 100644 --- a/DNN Platform/Library/UI/Skins/Skin.cs +++ b/DNN Platform/Library/UI/Skins/Skin.cs @@ -214,6 +214,7 @@ public static void AddModuleMessage(Control control, string heading, string mess /// The Message Heading. /// The Message Text. /// The Icon to display. + [Obsolete("This method has been deprecated. Please use IPageService.AddMessage Scheduled removal in v11.0.0.")] public static void AddPageMessage(Page page, string heading, string message, string iconSrc) { AddPageMessage(page, heading, message, ModuleMessage.ModuleMessageType.GreenSuccess, iconSrc); @@ -224,6 +225,7 @@ public static void AddPageMessage(Page page, string heading, string message, str /// The Message Heading. /// The Message Text. /// The Icon to display. + [Obsolete("This method has been deprecated. Please use IPageService.AddMessage Scheduled removal in v11.0.0.")] public static void AddPageMessage(Skin skin, string heading, string message, string iconSrc) { AddPageMessage(skin, heading, message, ModuleMessage.ModuleMessageType.GreenSuccess, iconSrc); @@ -234,6 +236,7 @@ public static void AddPageMessage(Skin skin, string heading, string message, str /// The Message Heading. /// The Message Text. /// The type of the message. + [Obsolete("This method has been deprecated. Please use IPageService.AddMessage Scheduled removal in v11.0.0.")] public static void AddPageMessage(Skin skin, string heading, string message, ModuleMessage.ModuleMessageType moduleMessageType) { AddPageMessage(skin, heading, message, moduleMessageType, Null.NullString); @@ -244,6 +247,7 @@ public static void AddPageMessage(Skin skin, string heading, string message, Mod /// The Message Heading. /// The Message Text. /// The type of the message. + [Obsolete("This method has been deprecated. Please use IPageService.AddMessage Scheduled removal in v11.0.0.")] public static void AddPageMessage(Page page, string heading, string message, ModuleMessage.ModuleMessageType moduleMessageType) { AddPageMessage(page, heading, message, moduleMessageType, Null.NullString); @@ -474,6 +478,26 @@ public void RegisterModuleActionEvent(int moduleId, ActionEventHandler e) this.ActionEventListeners.Add(new ModuleActionEventListener(moduleId, e)); } + /// AddPageMessage adds a Page Message control to the Skin. + /// The control. + /// The Message Heading. + /// The Message Text. + /// The type of the message. + /// The Icon to display. + internal static void AddPageMessage(Control control, string heading, string message, ModuleMessage.ModuleMessageType moduleMessageType, string iconSrc) + { + if (!string.IsNullOrEmpty(message)) + { + Control contentPane = FindControlRecursive(control, Globals.glbDefaultPane); + + if (contentPane != null) + { + ModuleMessage moduleMessage = GetModuleMessageControl(heading, message, moduleMessageType, iconSrc); + contentPane.Controls.AddAt(0, moduleMessage); + } + } + } + /// protected override void OnInit(EventArgs e) { @@ -491,7 +515,7 @@ protected override void OnInit(EventArgs e) // Register any error messages on the Skin if (this.Request.QueryString["error"] != null && this.hostSettings.ShowCriticalErrors) { - AddPageMessage(this, Localization.GetString("CriticalError.Error"), " ", ModuleMessage.ModuleMessageType.RedError); + AddPageMessage(this, Localization.GetString("CriticalError.Error"), " ", ModuleMessage.ModuleMessageType.RedError, string.Empty); if (UserController.Instance.GetCurrentUserInfo().IsSuperUser) { @@ -507,7 +531,7 @@ protected override void OnInit(EventArgs e) if (!TabPermissionController.CanAdminPage() && !success) { // only display the warning to non-administrators (administrators will see the errors) - AddPageMessage(this, Localization.GetString("ModuleLoadWarning.Error"), string.Format(Localization.GetString("ModuleLoadWarning.Text"), this.PortalSettings.Email), ModuleMessage.ModuleMessageType.YellowWarning); + AddPageMessage(this, Localization.GetString("ModuleLoadWarning.Error"), string.Format(Localization.GetString("ModuleLoadWarning.Text"), this.PortalSettings.Email), ModuleMessage.ModuleMessageType.YellowWarning, string.Empty); } this.InvokeSkinEvents(SkinEventType.OnSkinInit); @@ -520,7 +544,7 @@ protected override void OnInit(EventArgs e) messageType = (ModuleMessage.ModuleMessageType)Enum.Parse(typeof(ModuleMessage.ModuleMessageType), HttpContextSource.Current.Items[OnInitMessageType].ToString(), true); } - AddPageMessage(this, string.Empty, HttpContextSource.Current.Items[OnInitMessage].ToString(), messageType); + AddPageMessage(this, string.Empty, HttpContextSource.Current.Items[OnInitMessage].ToString(), messageType, string.Empty); this.javaScript.RequestRegistration(CommonJs.DnnPlugins); ServicesFramework.Instance.RequestAjaxAntiForgerySupport(); @@ -604,20 +628,6 @@ private static void AddModuleMessage(Control control, string heading, string mes } } - private static void AddPageMessage(Control control, string heading, string message, ModuleMessage.ModuleMessageType moduleMessageType, string iconSrc) - { - if (!string.IsNullOrEmpty(message)) - { - Control contentPane = FindControlRecursive(control, Globals.glbDefaultPane); - - if (contentPane != null) - { - ModuleMessage moduleMessage = GetModuleMessageControl(heading, message, moduleMessageType, iconSrc); - contentPane.Controls.AddAt(0, moduleMessage); - } - } - } - private static Control FindControlRecursive(Control rootControl, string controlId) { if (rootControl.ID == controlId) @@ -837,7 +847,7 @@ private void HandleAccessDenied(bool redirect = false) } else { - AddPageMessage(this, string.Empty, message, ModuleMessage.ModuleMessageType.YellowWarning); + AddPageMessage(this, string.Empty, message, ModuleMessage.ModuleMessageType.YellowWarning, string.Empty); } } @@ -891,7 +901,8 @@ private bool ProcessMasterModules() this, string.Empty, string.Format(Localization.GetString("ContractExpired.Error"), this.PortalSettings.PortalName, Globals.GetMediumDate(this.PortalSettings.ExpiryDate.ToString(CultureInfo.InvariantCulture)), this.PortalSettings.Email), - ModuleMessage.ModuleMessageType.RedError); + ModuleMessage.ModuleMessageType.RedError, + string.Empty); } } else diff --git a/DNN Platform/Website/Default.aspx.cs b/DNN Platform/Website/Default.aspx.cs index 771bfb4e57a..d769db2bdf1 100644 --- a/DNN Platform/Website/Default.aspx.cs +++ b/DNN Platform/Website/Default.aspx.cs @@ -233,11 +233,12 @@ protected override void OnInit(EventArgs e) { var heading = Localization.GetString("PageDisabled.Header"); var message = Localization.GetString("PageDisabled.Text"); - UI.Skins.Skin.AddPageMessage( - ctlSkin, + this.pageService.AddMessage(new PageMessage( heading, message, - ModuleMessage.ModuleMessageType.YellowWarning); + PageMessageType.Warning, + string.Empty, + PagePriority.Page)); } else { @@ -389,7 +390,7 @@ protected override void OnPreRender(EventArgs evt) foreach (var item in this.pageService.GetMessages()) { - Skin.AddPageMessage(this, item.Heading, item.Message, item.MessageType.ToModuleMessageType()); + Skin.AddPageMessage(this, item.Heading, item.Message, item.MessageType.ToModuleMessageType(), item.IconSrc); } } From 7cfb9d720299446bb4dbaca524a97b54b2ab4d1e Mon Sep 17 00:00:00 2001 From: Sacha Date: Wed, 22 Oct 2025 15:39:12 +0200 Subject: [PATCH 069/199] Update DNN Platform/Library/UI/Skins/Skin.cs new DnnDeprecated attribute Co-authored-by: Brian Dukes --- DNN Platform/Library/UI/Skins/Skin.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/DNN Platform/Library/UI/Skins/Skin.cs b/DNN Platform/Library/UI/Skins/Skin.cs index fb644c423b3..b2decc9e002 100644 --- a/DNN Platform/Library/UI/Skins/Skin.cs +++ b/DNN Platform/Library/UI/Skins/Skin.cs @@ -225,8 +225,8 @@ public static void AddPageMessage(Page page, string heading, string message, str /// The Message Heading. /// The Message Text. /// The Icon to display. - [Obsolete("This method has been deprecated. Please use IPageService.AddMessage Scheduled removal in v11.0.0.")] - public static void AddPageMessage(Skin skin, string heading, string message, string iconSrc) + [DnnDeprecated(10, 2, 0, "Please use IPageService.AddMessage")] + public static partial void AddPageMessage(Skin skin, string heading, string message, string iconSrc) { AddPageMessage(skin, heading, message, ModuleMessage.ModuleMessageType.GreenSuccess, iconSrc); } From a0ce50cefa7578fccad832a5530e6c894b0083b4 Mon Sep 17 00:00:00 2001 From: Sacha Date: Wed, 22 Oct 2025 15:39:26 +0200 Subject: [PATCH 070/199] Update DNN Platform/Library/UI/Skins/Skin.cs new DnnDeprecated attribute Co-authored-by: Brian Dukes --- DNN Platform/Library/UI/Skins/Skin.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/DNN Platform/Library/UI/Skins/Skin.cs b/DNN Platform/Library/UI/Skins/Skin.cs index b2decc9e002..2e3971bb5a2 100644 --- a/DNN Platform/Library/UI/Skins/Skin.cs +++ b/DNN Platform/Library/UI/Skins/Skin.cs @@ -214,8 +214,8 @@ public static void AddModuleMessage(Control control, string heading, string mess /// The Message Heading. /// The Message Text. /// The Icon to display. - [Obsolete("This method has been deprecated. Please use IPageService.AddMessage Scheduled removal in v11.0.0.")] - public static void AddPageMessage(Page page, string heading, string message, string iconSrc) + [DnnDeprecated(10, 2, 0, "Please use IPageService.AddMessage")] + public static partial void AddPageMessage(Page page, string heading, string message, string iconSrc) { AddPageMessage(page, heading, message, ModuleMessage.ModuleMessageType.GreenSuccess, iconSrc); } From 43e6f643afa3661468fb347e49c6721bf07d29a9 Mon Sep 17 00:00:00 2001 From: Sacha Date: Wed, 22 Oct 2025 15:39:35 +0200 Subject: [PATCH 071/199] Update DNN Platform/Library/UI/Skins/Skin.cs new DnnDeprecated attribute Co-authored-by: Brian Dukes --- DNN Platform/Library/UI/Skins/Skin.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/DNN Platform/Library/UI/Skins/Skin.cs b/DNN Platform/Library/UI/Skins/Skin.cs index 2e3971bb5a2..2e03bf77f1f 100644 --- a/DNN Platform/Library/UI/Skins/Skin.cs +++ b/DNN Platform/Library/UI/Skins/Skin.cs @@ -247,8 +247,8 @@ public static void AddPageMessage(Skin skin, string heading, string message, Mod /// The Message Heading. /// The Message Text. /// The type of the message. - [Obsolete("This method has been deprecated. Please use IPageService.AddMessage Scheduled removal in v11.0.0.")] - public static void AddPageMessage(Page page, string heading, string message, ModuleMessage.ModuleMessageType moduleMessageType) + [DnnDeprecated(10, 2, 0, "Please use IPageService.AddMessage")] + public static partial void AddPageMessage(Page page, string heading, string message, ModuleMessage.ModuleMessageType moduleMessageType) { AddPageMessage(page, heading, message, moduleMessageType, Null.NullString); } From 57faa115cb964197a538270556e86f9f18435d4c Mon Sep 17 00:00:00 2001 From: Sacha Date: Wed, 22 Oct 2025 15:40:03 +0200 Subject: [PATCH 072/199] Update DNN Platform/Library/UI/Skins/Skin.cs new DnnDeprecated attribute Co-authored-by: Brian Dukes --- DNN Platform/Library/UI/Skins/Skin.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/DNN Platform/Library/UI/Skins/Skin.cs b/DNN Platform/Library/UI/Skins/Skin.cs index 2e03bf77f1f..9bc18a06f00 100644 --- a/DNN Platform/Library/UI/Skins/Skin.cs +++ b/DNN Platform/Library/UI/Skins/Skin.cs @@ -236,8 +236,8 @@ public static partial void AddPageMessage(Skin skin, string heading, string mess /// The Message Heading. /// The Message Text. /// The type of the message. - [Obsolete("This method has been deprecated. Please use IPageService.AddMessage Scheduled removal in v11.0.0.")] - public static void AddPageMessage(Skin skin, string heading, string message, ModuleMessage.ModuleMessageType moduleMessageType) + [DnnDeprecated(10, 2, 0, "Please use IPageService.AddMessage")] + public static partial void AddPageMessage(Skin skin, string heading, string message, ModuleMessage.ModuleMessageType moduleMessageType) { AddPageMessage(skin, heading, message, moduleMessageType, Null.NullString); } From 9e8da6ad6931bb92887b12a2a3bfd496a9fddf0c Mon Sep 17 00:00:00 2001 From: Peter Donker Date: Wed, 22 Oct 2025 16:08:13 +0200 Subject: [PATCH 073/199] Integrate comments from Github and finish up loose ends --- .../Installer/ILocalUpgradeService.cs | 29 ++ .../Services/Installer/LocalUpgradeService.cs | 14 +- .../Servers.Web/src/components/Body/Body.jsx | 257 +++++++++++------- .../src/components/Tabs/Upgrades/Done.tsx | 29 ++ .../components/Tabs/Upgrades/UpgradeRow.tsx | 8 +- .../components/Tabs/Upgrades/Upgrading.tsx | 17 ++ .../Tabs/Upgrades/Upload/style.less | 18 -- .../src/components/Tabs/Upgrades/index.tsx | 132 +++++---- .../src/components/Tabs/Upgrades/style.less | 38 +++ .../ClientSide/Servers.Web/src/utils.js | 4 +- .../Common/Extensions.cs | 18 -- .../Dnn.PersonaBar.Extensions.csproj | 1 - .../Services/UpgradesController.cs | 22 +- .../App_LocalResources/Servers.resx | 21 ++ 14 files changed, 388 insertions(+), 220 deletions(-) create mode 100644 Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/Done.tsx create mode 100644 Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/Upgrading.tsx delete mode 100644 Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Common/Extensions.cs diff --git a/DNN Platform/Library/Services/Installer/ILocalUpgradeService.cs b/DNN Platform/Library/Services/Installer/ILocalUpgradeService.cs index 2831e9f57a3..d4241d10902 100644 --- a/DNN Platform/Library/Services/Installer/ILocalUpgradeService.cs +++ b/DNN Platform/Library/Services/Installer/ILocalUpgradeService.cs @@ -19,10 +19,39 @@ public interface ILocalUpgradeService /// A task which resolves to a list of instances. Task> GetLocalUpgrades(CancellationToken cancellationToken); + /// + /// Retrieves information about a local upgrade from the specified file. + /// + /// The path to the DNN installation file. Cannot be null or empty. + /// A token to monitor for cancellation requests. + /// A task that represents the asynchronous operation. The task result contains a + /// object with details about the upgrade. Task GetLocalUpgradeInfo(string file, CancellationToken cancellationToken); + /// + /// Retrieves information about a local upgrade package from a stream. + /// + /// This method performs an asynchronous operation to extract and analyze the contents of the + /// provided package archive. Ensure that the is not disposed or closed before the + /// operation completes. + /// The name of the package to be upgraded. Cannot be null or empty. + /// A stream containing the package archive. Must be readable and positioned at the start of the archive. + /// A token to monitor for cancellation requests. + /// A task that represents the asynchronous operation. The task result contains a + /// object with details about the upgrade package. Task GetLocalUpgradeInfo(string packageName, Stream archiveStream, CancellationToken cancellationToken); + /// + /// Deletes the specified local upgrade package. + /// + /// This method performs an asynchronous operation to delete a local upgrade package identified + /// by its name. Ensure that the package name is valid and that the operation is not cancelled prematurely by the + /// provided cancellation token. + /// The name of the package to be deleted. Cannot be null or empty. + /// A token to monitor for cancellation requests. + /// A task that represents the asynchronous delete operation. + Task DeleteLocalUpgrade(string packageName, CancellationToken cancellationToken); + /// Begins the process of upgrading the site to the next applicable version. /// The list of available upgrades (from ). /// The cancellation token. diff --git a/DNN Platform/Library/Services/Installer/LocalUpgradeService.cs b/DNN Platform/Library/Services/Installer/LocalUpgradeService.cs index 0027501f479..9658781539d 100644 --- a/DNN Platform/Library/Services/Installer/LocalUpgradeService.cs +++ b/DNN Platform/Library/Services/Installer/LocalUpgradeService.cs @@ -29,7 +29,6 @@ public class LocalUpgradeService : ILocalUpgradeService private static readonly List InstallFilter = new List { "App_Data\\Database.mdf", - "bin\\", "Config\\DotNetNuke.config", "Install\\InstallWizard", "favicon.ico", @@ -130,6 +129,19 @@ public async Task GetLocalUpgradeInfo(string packageName, Stre } } + /// + public async Task DeleteLocalUpgrade(string packageName, CancellationToken cancellationToken) + { + var upgrades = await this.GetLocalUpgrades(cancellationToken); + var upgrade = upgrades.FirstOrDefault(u => u.PackageName.Equals(packageName, StringComparison.InvariantCultureIgnoreCase)); + var packagePath = Path.Combine(this.appStatus.ApplicationMapPath, "App_Data", "Upgrade", upgrade.PackageName + ".zip"); + + if (File.Exists(packagePath)) + { + File.Delete(packagePath); + } + } + /// public async Task StartLocalUpgrade(IReadOnlyList upgrades, CancellationToken cancellationToken) { diff --git a/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Body/Body.jsx b/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Body/Body.jsx index bdca99d98c0..2cddf7cdbd6 100644 --- a/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Body/Body.jsx +++ b/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Body/Body.jsx @@ -1,10 +1,11 @@ -import React, {Component } from "react"; +import React, { Component } from "react"; import PropTypes from "prop-types"; import { connect } from "react-redux"; -import { DnnTabs as Tabs, PersonaBarPageBody } from "@dnnsoftware/dnn-react-common"; import { - pagination as PaginationActions -} from "../../actions"; + DnnTabs as Tabs, + PersonaBarPageBody, +} from "@dnnsoftware/dnn-react-common"; +import { pagination as PaginationActions } from "../../actions"; import "./style.less"; import Localization from "../../localization"; import ApplicationTab from "../Tabs/Application"; @@ -19,120 +20,174 @@ import application from "../../globals/application"; import utils from "../../utils"; class Body extends Component { - constructor() { - super(); - this.handleSelect = this.handleSelect.bind(this); - } + constructor() { + super(); + this.handleSelect = this.handleSelect.bind(this); + } - handleSelect(index) { - const {props} = this; - props.dispatch(PaginationActions.loadTab(index)); - } + handleSelect(index) { + const { props } = this; + props.dispatch(PaginationActions.loadTab(index)); + } - insertElementsInArray(array, elements, propertyNameHasIndex, propertyNameHasValue) { - for (let i = 0; i < elements.length; i++) { - let index = this.getInteger(elements[i][propertyNameHasIndex]); + insertElementsInArray( + array, + elements, + propertyNameHasIndex, + propertyNameHasValue + ) { + for (let i = 0; i < elements.length; i++) { + let index = this.getInteger(elements[i][propertyNameHasIndex]); - if (index || index === 0) { - index = Math.min(array.length, Math.max(0, index)); - array.splice(index, 0, elements[i][propertyNameHasValue]); - } - } + if (index || index === 0) { + index = Math.min(array.length, Math.max(0, index)); + array.splice(index, 0, elements[i][propertyNameHasValue]); + } } + } - getInteger(value) { - if (value === 0) { - return 0; - } - if (value) { - return parseInt(value.toString()); - } - return value; + getInteger(value) { + if (value === 0) { + return 0; } + if (value) { + return parseInt(value.toString()); + } + return value; + } - render() { - const {props} = this; - const isHost = utils.isHostUser(); - let registeredTabs = application.getRegisteredServerTabs(); - if (!isHost) { - registeredTabs = registeredTabs.filter(function (tab) { - return !tab.isHostOnlyVisible; - }); - } - - const systemInfoTabHeaders = isHost ? [Localization.get("tabApplicationTitle"), Localization.get("tabWebTitle"), Localization.get("tabDatabaseTitle"), Localization.get("tabServersTitle"), "Upgrades"] - : [Localization.get("tabApplicationTitle")]; - const systemInfoTabBody = isHost ? [, , , , ] - : []; - const serverSettingsTabHeaders = isHost ? [Localization.get("tabSmtpServerTitle"), Localization.get("tabPerformanceTitle"), Localization.get("tabLogsTitle")] - : [Localization.get("tabSmtpServerTitle")]; - const serverSettingsTabBody = isHost ? [, , ] - : []; - const mainTabHeaders = [Localization.get("tabSystemInfoTitle"), Localization.get("tabServerSettingsTitle")]; - const mainTabBody = [ - - {systemInfoTabBody} - , - - {serverSettingsTabBody} - ]; + render() { + const { props } = this; + const isHost = utils.isHostUser(); + let registeredTabs = application.getRegisteredServerTabs(); + if (!isHost) { + registeredTabs = registeredTabs.filter(function (tab) { + return !tab.isHostOnlyVisible; + }); + } - this.insertElementsInArray(mainTabHeaders, registeredTabs.filter( - function (tab) { - return !tab.parentIndex && tab.parentIndex !== 0; - }), "order", "title"); - this.insertElementsInArray(mainTabBody, registeredTabs.filter( - function (tab) { - return !tab.parentIndex && tab.parentIndex !== 0; - }), "order", "component"); + const systemInfoTabHeaders = isHost + ? [ + Localization.get("tabApplicationTitle"), + Localization.get("tabWebTitle"), + Localization.get("tabDatabaseTitle"), + Localization.get("tabServersTitle"), + Localization.get("tabUpgrades"), + ] + : [Localization.get("tabApplicationTitle")]; + const systemInfoTabBody = isHost + ? [ + , + , + , + , + , + ] + : []; + const serverSettingsTabHeaders = isHost + ? [ + Localization.get("tabSmtpServerTitle"), + Localization.get("tabPerformanceTitle"), + Localization.get("tabLogsTitle"), + ] + : [Localization.get("tabSmtpServerTitle")]; + const serverSettingsTabBody = isHost + ? [ + , + , + , + ] + : []; + const mainTabHeaders = [ + Localization.get("tabSystemInfoTitle"), + Localization.get("tabServerSettingsTitle"), + ]; + const mainTabBody = [ + + {systemInfoTabBody} + , + + {serverSettingsTabBody} + , + ]; - this.insertElementsInArray(systemInfoTabHeaders, registeredTabs.filter( - function (tab) { - return tab.parentIndex === 0; - }), "order", "title"); - this.insertElementsInArray(systemInfoTabBody, registeredTabs.filter( - function (tab) { - return tab.parentIndex === 0; - }), "order", "component"); + this.insertElementsInArray( + mainTabHeaders, + registeredTabs.filter(function (tab) { + return !tab.parentIndex && tab.parentIndex !== 0; + }), + "order", + "title" + ); + this.insertElementsInArray( + mainTabBody, + registeredTabs.filter(function (tab) { + return !tab.parentIndex && tab.parentIndex !== 0; + }), + "order", + "component" + ); - this.insertElementsInArray(serverSettingsTabHeaders, registeredTabs.filter( - function (tab) { - return tab.parentIndex === 1; - }), "order", "title"); - this.insertElementsInArray(serverSettingsTabBody, registeredTabs.filter( - function (tab) { - return tab.parentIndex === 1; - }), "order", "component"); + this.insertElementsInArray( + systemInfoTabHeaders, + registeredTabs.filter(function (tab) { + return tab.parentIndex === 0; + }), + "order", + "title" + ); + this.insertElementsInArray( + systemInfoTabBody, + registeredTabs.filter(function (tab) { + return tab.parentIndex === 0; + }), + "order", + "component" + ); - return ( - - - {mainTabBody} - + this.insertElementsInArray( + serverSettingsTabHeaders, + registeredTabs.filter(function (tab) { + return tab.parentIndex === 1; + }), + "order", + "title" + ); + this.insertElementsInArray( + serverSettingsTabBody, + registeredTabs.filter(function (tab) { + return tab.parentIndex === 1; + }), + "order", + "component" + ); - - ); - } + return ( + + + {mainTabBody} + + + ); + } } Body.propTypes = { - applicationInfo: PropTypes.object.isRequired, - dispatch: PropTypes.func.isRequired, - tabIndex: PropTypes.number + applicationInfo: PropTypes.object.isRequired, + dispatch: PropTypes.func.isRequired, + tabIndex: PropTypes.number, }; function mapStateToProps(state) { - return { - applicationInfo: state.applicationTab.applicationInfo, - tabIndex: state.pagination.tabIndex - }; + return { + applicationInfo: state.applicationTab.applicationInfo, + tabIndex: state.pagination.tabIndex, + }; } -export default connect(mapStateToProps)(Body); \ No newline at end of file +export default connect(mapStateToProps)(Body); diff --git a/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/Done.tsx b/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/Done.tsx new file mode 100644 index 00000000000..09bf7674960 --- /dev/null +++ b/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/Done.tsx @@ -0,0 +1,29 @@ +import * as React from "react"; +import { Button } from "@dnnsoftware/dnn-react-common"; +import Localization from "../../../localization"; +import utils from "../../../utils"; +import "./style.less"; + +interface IDoneProps {} + +const Done: React.FC = (props) => { + const siteRoot = utils.getServiceFramework().getSiteRoot(); + return ( +
+

{Localization.get("UpgradeDone")}

+

+ +

+
+ ); +}; + +export default Done; diff --git a/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/UpgradeRow.tsx b/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/UpgradeRow.tsx index 6f37ca00620..71e25621883 100644 --- a/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/UpgradeRow.tsx +++ b/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/UpgradeRow.tsx @@ -27,10 +27,14 @@ const UpgradeRow: React.FC = (props) => { - {props.upgrade.IsValid ? "Yes" : "No"} + {props.upgrade.IsValid + ? Localization.get("Yes") + : Localization.get("No")} - {props.upgrade.IsOutdated ? "Yes" : "No"} + {props.upgrade.IsOutdated + ? Localization.get("Yes") + : Localization.get("No")} = (props) => { + return ( +
+

{Localization.get("Upgrading")}

+

{Localization.get("Upgrading.Help")}

+
+ ); +}; + +export default Upgrading; diff --git a/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/Upload/style.less b/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/Upload/style.less index a5279dd40cb..691a457b239 100644 --- a/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/Upload/style.less +++ b/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/Upload/style.less @@ -23,24 +23,6 @@ z-index: 3; background-color: @gallery; } - .no-valid-manifest { - background-color: @alabaster; - position: absolute; - top: -13px; - left: -13px; - z-index: 3; - padding: 45px 25px; - text-align: center; - > p { - margin-bottom: 25px; - } - .dnn-radio-buttons { - margin: 0 auto; - float: none; - width: auto; - display: table; - } - } &.uploading { .dropzone-container { background-color: transparent; diff --git a/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/index.tsx b/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/index.tsx index af652ab47a8..9158541a5f7 100644 --- a/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/index.tsx +++ b/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/index.tsx @@ -14,6 +14,8 @@ import upgradeService from "../../../services/upgradeService"; import { LocalUpgradeInfo } from "../../../models/LocalUpgradeInfo"; import UpgradeList from "./UpgradeList"; import FileUpload from "./Upload"; +import Upgrading from "./Upgrading"; +import Done from "./Done"; interface IProps { applicationInfo: any; @@ -21,7 +23,9 @@ interface IProps { const UpgradesTab: React.FC = (props) => { const [upgrades, setUpgrades] = useState([]); - const [showUploadPanel, setShowUploadPanel] = useState(false); + const [panelToShow, setPanelToShow] = useState< + "done" | "upload" | "upgrading" | "list" + >("list"); const getUpgrades = () => { upgradeService.listUpgrades().then((upgrades) => { @@ -36,16 +40,82 @@ const UpgradesTab: React.FC = (props) => { }; const installPackage = (packageName: string) => { + setPanelToShow("upgrading"); upgradeService.startUpgrade(packageName).then(() => { - getUpgrades(); + setPanelToShow("done"); }); }; useEffect(() => { - if (!showUploadPanel) { + if (panelToShow === "list") { getUpgrades(); } - }, [showUploadPanel]); + }, [panelToShow]); + + let panel = null; + switch (panelToShow) { + case "list": + panel = ( + <> +
- {showUploadPanel && ( - -
-
- setShowUploadPanel(false)} - clearUploadedPackage={() => {}} - uploadComplete={() => { - setShowUploadPanel(false); - }} - uploadPackage={( - file: File, - onSuccess: (data: any) => void, - onError: (error: any) => void - ) => upgradeService.uploadPackage(file, onSuccess, onError)} - /> -
- -
-
- )} - {!showUploadPanel && ( - - - )} + {panel} ); }; diff --git a/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/style.less b/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/style.less index 48f9b684800..52b836ef43e 100644 --- a/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/style.less +++ b/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/style.less @@ -89,4 +89,42 @@ } } } + .dnn-servers-grid-panel-upgrading { + width: 100%; + padding: 60px; + text-align: center; + margin-top: 20px; + margin-bottom: 20px; + box-sizing: border-box; + border: 1px solid @alizarinCrimson; + background-color: @gallery; + .upgrading-title { + font-size: 18px; + font-weight: bold; + color: @alizarinCrimson; + margin-bottom: 10px; + } + .upgrading-help { + font-size: 14px; + color: @alizarinCrimson; + } + } + .dnn-servers-grid-panel-done { + width: 100%; + padding: 60px; + text-align: center; + margin-top: 20px; + margin-bottom: 20px; + box-sizing: border-box; + border: 1px solid @curiousBlue; + background-color: @gallery; + .done-title { + font-size: 18px; + font-weight: bold; + color: @curiousBlue; + } + .done-link { + margin-top: 20px; + } + } } diff --git a/Dnn.AdminExperience/ClientSide/Servers.Web/src/utils.js b/Dnn.AdminExperience/ClientSide/Servers.Web/src/utils.js index 2034f67586e..3538ac258e6 100644 --- a/Dnn.AdminExperience/ClientSide/Servers.Web/src/utils.js +++ b/Dnn.AdminExperience/ClientSide/Servers.Web/src/utils.js @@ -14,10 +14,10 @@ function init(options) { if (!options.config) { throw new Error("This method needs to have an options.config object as an input parameter"); } - utilities = options.utilities; + utilities = options.utilities; config = options.config; moduleName = options.moduleName; - settings = options.settings; + settings = options.settings; initialized = true; } diff --git a/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Common/Extensions.cs b/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Common/Extensions.cs deleted file mode 100644 index 75520d6d8d1..00000000000 --- a/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Common/Extensions.cs +++ /dev/null @@ -1,18 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. -// See the LICENSE file in the project root for more information - -namespace Dnn.PersonaBar.Extensions.Common -{ - using System; - - internal static class Extensions - { - internal static bool Equals(this Version version, Version compareTo) - { - return version.Major == compareTo.Major - && version.Minor == compareTo.Minor - && version.Build == compareTo.Build; - } - } -} diff --git a/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Dnn.PersonaBar.Extensions.csproj b/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Dnn.PersonaBar.Extensions.csproj index 7e674bb84b9..cf932733710 100644 --- a/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Dnn.PersonaBar.Extensions.csproj +++ b/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Dnn.PersonaBar.Extensions.csproj @@ -58,7 +58,6 @@ SolutionInfo.cs
- diff --git a/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Services/UpgradesController.cs b/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Services/UpgradesController.cs index 1581ea2b3ff..b99972c6dd5 100644 --- a/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Services/UpgradesController.cs +++ b/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Services/UpgradesController.cs @@ -9,8 +9,6 @@ namespace Dnn.PersonaBar.Extensions.Services using System.Linq; using System.Net; using System.Net.Http; - using System.Net.Http.Formatting; - using System.Net.Http.Headers; using System.Threading; using System.Threading.Tasks; using System.Web.Http; @@ -107,15 +105,9 @@ public async Task StartFirstUpgrade(CancellationToken cance [HttpPost] public async Task Delete(UpgradePackageRequestDto data, CancellationToken cancellationToken) { - var upgrades = await this.localUpgradeService.GetLocalUpgrades(cancellationToken); - var upgrade = upgrades.FirstOrDefault(u => u.PackageName.Equals(data.PackageName, StringComparison.InvariantCultureIgnoreCase)); try { - var packagePath = Path.Combine(this.applicationStatusInfo.ApplicationMapPath, "App_Data", "Upgrade", upgrade.PackageName + ".zip"); - if (File.Exists(packagePath)) - { - File.Delete(packagePath); - } + await this.localUpgradeService.DeleteLocalUpgrade(data.PackageName, cancellationToken); } catch (Exception ex) { @@ -188,12 +180,6 @@ private async Task UploadFileAction() } } - // Response Content Type cannot be application/json - // because IE9 with iframe-transport manages the response - // as a file download 1 - var mediaTypeFormatter = new JsonMediaTypeFormatter(); - mediaTypeFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/plain")); - if (!string.IsNullOrEmpty(fileName) && stream != null) { var info = this.localUpgradeService.GetLocalUpgradeInfo(Path.GetFileNameWithoutExtension(fileName), stream, CancellationToken.None).Result; @@ -214,11 +200,7 @@ private async Task UploadFileAction() stream.CopyTo(fileStream); } - return this.Request.CreateResponse( - HttpStatusCode.OK, - result, - mediaTypeFormatter, - "text/plain"); + return this.Request.CreateResponse(HttpStatusCode.OK, result); } } diff --git a/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/admin/personaBar/Dnn.Servers/App_LocalResources/Servers.resx b/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/admin/personaBar/Dnn.Servers/App_LocalResources/Servers.resx index 832d9e1575e..2e5a633f4cc 100644 --- a/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/admin/personaBar/Dnn.Servers/App_LocalResources/Servers.resx +++ b/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/admin/personaBar/Dnn.Servers/App_LocalResources/Servers.resx @@ -798,4 +798,25 @@ Are you sure you want to increment the version number for your site? Install + + No + + + Upgrades + + + Please click here to start the upgrade process + + + File Copying Complete + + + Please wait while we prepare to upgrade your server. + + + Upgrading ... + + + Yes + \ No newline at end of file From 38395964284710a48bfa0e0ca52efb914c7f17db Mon Sep 17 00:00:00 2001 From: Peter Donker Date: Wed, 22 Oct 2025 16:51:31 +0200 Subject: [PATCH 074/199] More fixes --- .../Services/Installer/LocalUpgradeService.cs | 8 ++--- .../Services/UpgradesController.cs | 33 ++++++++++++------- .../App_LocalResources/Servers.resx | 12 +++++++ 3 files changed, 37 insertions(+), 16 deletions(-) diff --git a/DNN Platform/Library/Services/Installer/LocalUpgradeService.cs b/DNN Platform/Library/Services/Installer/LocalUpgradeService.cs index 9658781539d..e67f13b64b3 100644 --- a/DNN Platform/Library/Services/Installer/LocalUpgradeService.cs +++ b/DNN Platform/Library/Services/Installer/LocalUpgradeService.cs @@ -28,9 +28,9 @@ public class LocalUpgradeService : ILocalUpgradeService { private static readonly List InstallFilter = new List { - "App_Data\\Database.mdf", - "Config\\DotNetNuke.config", - "Install\\InstallWizard", + "App_Data/Database.mdf", + "Config/DotNetNuke.config", + "Install/InstallWizard", "favicon.ico", "robots.txt", "web.config", @@ -134,7 +134,7 @@ public async Task DeleteLocalUpgrade(string packageName, CancellationToken cance { var upgrades = await this.GetLocalUpgrades(cancellationToken); var upgrade = upgrades.FirstOrDefault(u => u.PackageName.Equals(packageName, StringComparison.InvariantCultureIgnoreCase)); - var packagePath = Path.Combine(this.appStatus.ApplicationMapPath, "App_Data", "Upgrade", upgrade.PackageName + ".zip"); + var packagePath = Path.Combine(this.UpgradeDirectoryPath, upgrade.PackageName + ".zip"); if (File.Exists(packagePath)) { diff --git a/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Services/UpgradesController.cs b/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Services/UpgradesController.cs index b99972c6dd5..149b90baf97 100644 --- a/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Services/UpgradesController.cs +++ b/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Services/UpgradesController.cs @@ -20,11 +20,13 @@ namespace Dnn.PersonaBar.Extensions.Services using DotNetNuke.Common; using DotNetNuke.Instrumentation; using DotNetNuke.Services.Installer; + using DotNetNuke.Services.Localization; using DotNetNuke.Web.Api.Internal; [MenuPermission(Scope = ServiceScope.Host)] public class UpgradesController : PersonaBarApiController { + private const string ResourceFile = "~/DesktopModules/Admin/Dnn.PersonaBar/Modules/Dnn.Servers/App_LocalResources/Servers.resx"; private static readonly ILog Logger = LoggerSource.Instance.GetLogger(typeof(UpgradesController)); private readonly IApplicationStatusInfo applicationStatusInfo; private readonly ILocalUpgradeService localUpgradeService; @@ -67,13 +69,13 @@ public async Task StartUpgrade(UpgradePackageRequestDto dat var upgrades = await this.localUpgradeService.GetLocalUpgrades(cancellationToken); if (!upgrades.Any(u => u.IsValid && !u.IsOutdated)) { - return this.Request.CreateResponse(HttpStatusCode.BadRequest, new { message = "There are no upgrades to apply", }); + return this.Request.CreateResponse(HttpStatusCode.BadRequest, new { message = this.LocalizeString("Upgrade_NoUpgrade"), }); } var upgrade = upgrades.FirstOrDefault(u => u.PackageName.Equals(data.PackageName, StringComparison.InvariantCultureIgnoreCase)); if (upgrade == null || !upgrade.IsValid || upgrade.IsOutdated) { - return this.Request.CreateResponse(HttpStatusCode.BadRequest, new { message = $"There is no valid upgrade for package {data.PackageName}", }); + return this.Request.CreateResponse(HttpStatusCode.BadRequest, new { message = this.LocalizeString($"Upgrade_NoValidUpgrade", data.PackageName), }); } await this.localUpgradeService.StartLocalUpgrade(upgrade, cancellationToken); @@ -90,7 +92,7 @@ public async Task StartFirstUpgrade(CancellationToken cance var upgrades = await this.localUpgradeService.GetLocalUpgrades(cancellationToken); if (!upgrades.Any(u => u.IsValid && !u.IsOutdated)) { - return this.Request.CreateResponse(HttpStatusCode.BadRequest, new { message = "There are no upgrades to apply", }); + return this.Request.CreateResponse(HttpStatusCode.BadRequest, new { message = this.LocalizeString("Upgrade_NoUpgrade"), }); } await this.localUpgradeService.StartLocalUpgrade(upgrades, cancellationToken); @@ -121,14 +123,15 @@ public async Task Delete(UpgradePackageRequestDto data, Can /// /// Uploads a DNN package for local upgrade. /// + /// The cancellation token. /// Either a package info or an error message. [HttpPost] [IFrameSupportedValidateAntiForgeryToken] - public Task Upload() + public Task Upload(CancellationToken cancellationToken) { try { - return this.UploadFileAction(); + return this.UploadFileAction(cancellationToken); } catch (Exception ex) { @@ -137,7 +140,7 @@ public Task Upload() } } - private async Task UploadFileAction() + private async Task UploadFileAction(CancellationToken cancellationToken) { var request = this.Request; if (!request.Content.IsMimeMultipartContent()) @@ -153,7 +156,7 @@ private async Task UploadFileAction() var provider = new MultipartMemoryStreamProvider(); // read multipart parts - await request.Content.ReadAsMultipartAsync(provider).ConfigureAwait(false); + await request.Content.ReadAsMultipartAsync(provider, cancellationToken).ConfigureAwait(false); object result = null; var fileName = string.Empty; @@ -161,8 +164,9 @@ private async Task UploadFileAction() foreach (var item in provider.Contents) { + cancellationToken.ThrowIfCancellationRequested(); var name = item.Headers.ContentDisposition.Name; - switch (name.ToUpper()) + switch (name.ToUpperInvariant()) { case "\"POSTFILE\"": fileName = item.Headers.ContentDisposition.FileName.Replace("\"", string.Empty); @@ -182,14 +186,14 @@ private async Task UploadFileAction() if (!string.IsNullOrEmpty(fileName) && stream != null) { - var info = this.localUpgradeService.GetLocalUpgradeInfo(Path.GetFileNameWithoutExtension(fileName), stream, CancellationToken.None).Result; + var info = await this.localUpgradeService.GetLocalUpgradeInfo(Path.GetFileNameWithoutExtension(fileName), stream, cancellationToken); if (!info.IsValid) { - return request.CreateResponse(HttpStatusCode.BadRequest, new { message = $"The uploaded file {fileName} is not a valid DNN package.", }); + return request.CreateResponse(HttpStatusCode.BadRequest, new { message = this.LocalizeString($"Upgrade_InvalidPackage", fileName), }); } else if (info.IsOutdated) { - return request.CreateResponse(HttpStatusCode.BadRequest, new { message = $"The uploaded file {fileName} is an outdated DNN package.", }); + return request.CreateResponse(HttpStatusCode.BadRequest, new { message = this.LocalizeString($"Upgrade_OutdatedPackage", fileName), }); } else { @@ -204,7 +208,12 @@ private async Task UploadFileAction() } } - return request.CreateResponse(HttpStatusCode.BadRequest, new { message = $"The uploaded file {fileName} was not a DNN package.", }); + return request.CreateResponse(HttpStatusCode.BadRequest, new { message = this.LocalizeString($"Upgrade_InvalidPackage", fileName), }); + } + + private string LocalizeString(string key, params object[] args) + { + return string.Format(Localization.GetString(key, ResourceFile), args); } } } diff --git a/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/admin/personaBar/Dnn.Servers/App_LocalResources/Servers.resx b/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/admin/personaBar/Dnn.Servers/App_LocalResources/Servers.resx index 2e5a633f4cc..1fbac9971d0 100644 --- a/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/admin/personaBar/Dnn.Servers/App_LocalResources/Servers.resx +++ b/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/admin/personaBar/Dnn.Servers/App_LocalResources/Servers.resx @@ -819,4 +819,16 @@ Are you sure you want to increment the version number for your site? Yes + + The uploaded file {0} is not a valid DNN package. + + + There are no upgrades to apply + + + There is no valid upgrade for package {0} + + + The uploaded file {0} is an outdated DNN package. + \ No newline at end of file From d93b458e98534ed28f9169b84f1e8df3259ac3d0 Mon Sep 17 00:00:00 2001 From: Peter Donker Date: Wed, 22 Oct 2025 17:30:43 +0200 Subject: [PATCH 075/199] Give feedback to user once the install button is clicked after copying is done --- .../Servers.Web/src/components/Tabs/Upgrades/Done.tsx | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/Done.tsx b/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/Done.tsx index 09bf7674960..f8501d44fcd 100644 --- a/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/Done.tsx +++ b/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/Done.tsx @@ -1,4 +1,4 @@ -import * as React from "react"; +import React, { useState } from "react"; import { Button } from "@dnnsoftware/dnn-react-common"; import Localization from "../../../localization"; import utils from "../../../utils"; @@ -7,7 +7,9 @@ import "./style.less"; interface IDoneProps {} const Done: React.FC = (props) => { + const [clicked, setClicked] = useState(false); const siteRoot = utils.getServiceFramework().getSiteRoot(); + return (

{Localization.get("UpgradeDone")}

@@ -15,7 +17,9 @@ const Done: React.FC = (props) => {
{rows} + {props.upgrades.length === 0 && ( +
+ + {Localization.get("Upgrade_NoUpgradesAvailable")} + +
+ )} ); }; diff --git a/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/index.tsx b/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/index.tsx index 9158541a5f7..b3112d9abb0 100644 --- a/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/index.tsx +++ b/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/index.tsx @@ -16,6 +16,7 @@ import UpgradeList from "./UpgradeList"; import FileUpload from "./Upload"; import Upgrading from "./Upgrading"; import Done from "./Done"; +import { UpgradeSettings } from "models/UpgradeSettings"; interface IProps { applicationInfo: any; @@ -23,6 +24,9 @@ interface IProps { const UpgradesTab: React.FC = (props) => { const [upgrades, setUpgrades] = useState([]); + const [upgradeSettings, setUpgradeSettings] = useState({ + AllowDnnUpgradeUpload: false, + }); const [panelToShow, setPanelToShow] = useState< "done" | "upload" | "upgrading" | "list" >("list"); @@ -46,6 +50,12 @@ const UpgradesTab: React.FC = (props) => { }); }; + useEffect(() => { + upgradeService.getUpgradeSettings().then((settings) => { + setUpgradeSettings(settings); + }); + }, []); + useEffect(() => { if (panelToShow === "list") { getUpgrades(); @@ -66,17 +76,19 @@ const UpgradesTab: React.FC = (props) => { onDelete={(packageName) => deletePackage(packageName)} onInstall={(packageName) => installPackage(packageName)} /> -
- -
+ {upgradeSettings.AllowDnnUpgradeUpload && ( +
+ +
+ )} ); break; diff --git a/Dnn.AdminExperience/ClientSide/Servers.Web/src/models/UpgradeSettings.ts b/Dnn.AdminExperience/ClientSide/Servers.Web/src/models/UpgradeSettings.ts new file mode 100644 index 00000000000..50361243751 --- /dev/null +++ b/Dnn.AdminExperience/ClientSide/Servers.Web/src/models/UpgradeSettings.ts @@ -0,0 +1,3 @@ +export interface UpgradeSettings { + AllowDnnUpgradeUpload: boolean; +} \ No newline at end of file diff --git a/Dnn.AdminExperience/ClientSide/Servers.Web/src/services/upgradeService.ts b/Dnn.AdminExperience/ClientSide/Servers.Web/src/services/upgradeService.ts index ce103fc275c..6903de84674 100644 --- a/Dnn.AdminExperience/ClientSide/Servers.Web/src/services/upgradeService.ts +++ b/Dnn.AdminExperience/ClientSide/Servers.Web/src/services/upgradeService.ts @@ -1,6 +1,10 @@ import utils from "../utils"; import serviceFramework from "./serviceFramework"; +const getUpgradeSettings = function () { + return serviceFramework.get("Upgrades", "GetSettings"); +}; + const listUpgrades = function () { return serviceFramework.get("Upgrades", "List"); }; @@ -23,6 +27,7 @@ const uploadPackage = function (file, callback, errorCallback) { }; const upgradeService = { + getUpgradeSettings, listUpgrades, uploadPackage, deletePackage, diff --git a/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Services/UpgradesController.cs b/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Services/UpgradesController.cs index 35941b34622..718b4c30bb5 100644 --- a/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Services/UpgradesController.cs +++ b/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Services/UpgradesController.cs @@ -37,6 +37,31 @@ public UpgradesController(IApplicationStatusInfo applicationStatusInfo, ILocalUp this.localUpgradeService = localUpgradeService; } + /// + /// Retrieves upgrade settings. + /// + /// A token to monitor for cancellation requests. + /// A containing the upgrade settings with a status code + /// of if successful, or an error message with a status code of + /// if an exception occurs. + [HttpGet] + public HttpResponseMessage GetSettings(CancellationToken cancellationToken) + { + try + { + bool.TryParse(DotNetNuke.Common.Utilities.Config.GetSetting("AllowDnnUpgradeUpload"), out bool allowDnnUpgradeUpload); + + return this.Request.CreateResponse(HttpStatusCode.OK, new + { + AllowDnnUpgradeUpload = allowDnnUpgradeUpload, + }); + } + catch (Exception ex) + { + return this.Request.CreateResponse(HttpStatusCode.InternalServerError, new { Message = ex.Message }); + } + } + /// /// Retrieves a list of local upgrades. /// @@ -133,6 +158,12 @@ public Task Upload(CancellationToken cancellationToken) { try { + bool.TryParse(DotNetNuke.Common.Utilities.Config.GetSetting("AllowDnnUpgradeUpload"), out bool allowDnnUpgradeUpload); + if (!allowDnnUpgradeUpload) + { + return Task.FromResult(this.Request.CreateResponse(HttpStatusCode.Forbidden, new { message = this.LocalizeString("Upgrade_UploadNotAllowed"), })); + } + return this.UploadFileAction(cancellationToken); } catch (Exception ex) diff --git a/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/admin/personaBar/Dnn.Servers/App_LocalResources/Servers.resx b/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/admin/personaBar/Dnn.Servers/App_LocalResources/Servers.resx index 1fbac9971d0..1c6f8def9ee 100644 --- a/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/admin/personaBar/Dnn.Servers/App_LocalResources/Servers.resx +++ b/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/admin/personaBar/Dnn.Servers/App_LocalResources/Servers.resx @@ -831,4 +831,10 @@ Are you sure you want to increment the version number for your site? The uploaded file {0} is an outdated DNN package. + + Uploading DNN upgrade packages has been disabled. + + + There are no upgrades available. + \ No newline at end of file From f39cb4b47efe108c317fafeaee8d5773c717cadd Mon Sep 17 00:00:00 2001 From: Peter Donker Date: Thu, 30 Oct 2025 22:55:08 +0100 Subject: [PATCH 080/199] Take care of upgrade of web.config --- DNN Platform/Website/DotNetNuke.Website.csproj | 1 + DNN Platform/Website/Install/Config/10.02.00.config | 8 ++++++++ 2 files changed, 9 insertions(+) create mode 100644 DNN Platform/Website/Install/Config/10.02.00.config diff --git a/DNN Platform/Website/DotNetNuke.Website.csproj b/DNN Platform/Website/DotNetNuke.Website.csproj index b973d03d9ec..f85394825ae 100644 --- a/DNN Platform/Website/DotNetNuke.Website.csproj +++ b/DNN Platform/Website/DotNetNuke.Website.csproj @@ -1268,6 +1268,7 @@ + web.config diff --git a/DNN Platform/Website/Install/Config/10.02.00.config b/DNN Platform/Website/Install/Config/10.02.00.config new file mode 100644 index 00000000000..505056b1d10 --- /dev/null +++ b/DNN Platform/Website/Install/Config/10.02.00.config @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file From cf6b9a1a8907af7cd0e924deb963aca9e2d48c1f Mon Sep 17 00:00:00 2001 From: Peter Donker Date: Fri, 31 Oct 2025 11:04:04 +0100 Subject: [PATCH 081/199] Chunked upload --- .../Services/Installer/LocalUpgradeService.cs | 14 +++ .../Tabs/Upgrades/Upload/UploadBar.tsx | 55 ++--------- .../components/Tabs/Upgrades/Upload/index.tsx | 98 ++++++++++++++----- .../src/components/Tabs/Upgrades/index.tsx | 32 +++--- .../Servers.Web/src/models/ChunkToUpload.ts | 6 ++ .../src/services/upgradeService.ts | 13 ++- .../Dnn.PersonaBar.Extensions.csproj | 1 + .../Services/DTO/UpgradeUploadCompleteDto.cs | 18 ++++ .../Services/UpgradesController.cs | 98 ++++++++++++------- 9 files changed, 208 insertions(+), 127 deletions(-) create mode 100644 Dnn.AdminExperience/ClientSide/Servers.Web/src/models/ChunkToUpload.ts create mode 100644 Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Services/DTO/UpgradeUploadCompleteDto.cs diff --git a/DNN Platform/Library/Services/Installer/LocalUpgradeService.cs b/DNN Platform/Library/Services/Installer/LocalUpgradeService.cs index e67f13b64b3..ed93f21d3c8 100644 --- a/DNN Platform/Library/Services/Installer/LocalUpgradeService.cs +++ b/DNN Platform/Library/Services/Installer/LocalUpgradeService.cs @@ -59,6 +59,20 @@ public async Task> GetLocalUpgrades(Cancellation IReadOnlyList localUpgrades; if (this.directory.Exists(this.UpgradeDirectoryPath)) { + // clean up any old temp files + var tempFiles = this.directory.GetFiles(this.UpgradeDirectoryPath, "*.resources", SearchOption.TopDirectoryOnly); + foreach (var tempFile in tempFiles) + { + try + { + File.Delete(tempFile); + } + catch (Exception ex) + { + Exceptions.LogException(ex); + } + } + var upgradeFiles = this.directory.GetFiles(this.UpgradeDirectoryPath, "*.zip", SearchOption.TopDirectoryOnly); localUpgrades = await Task.WhenAll(upgradeFiles.Select(file => this.GetLocalUpgradeInfo(file, cancellationToken))); } diff --git a/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/Upload/UploadBar.tsx b/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/Upload/UploadBar.tsx index a01474b090a..a489fac4c03 100644 --- a/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/Upload/UploadBar.tsx +++ b/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/Upload/UploadBar.tsx @@ -1,4 +1,4 @@ -import React, { useState, useEffect, useRef } from "react"; +import React from "react"; /* eslint-disable no-undef */ const upload = require("!raw-loader!./img/upload.svg").default; @@ -9,7 +9,7 @@ const errorIcon = require("!raw-loader!./img/x.svg").default; interface UploadBarProps { errorText?: string; fileName: string; - uploadComplete: boolean; + percent: number; uploadCompleteText: string; uploadingText: string; errorInPackage: boolean; @@ -20,61 +20,18 @@ interface UploadBarProps { const UploadBar: React.FC = ({ errorText, fileName, - uploadComplete, + percent, uploadCompleteText, uploadingText, errorInPackage = false, onTryAgain, tryAgainText }) => { - const [percent, setPercent] = useState(0); - const timeoutRef = useRef(20); - const deltaRef = useRef(1.00); - const setTimeoutRef = useRef(null); - const isMountedRef = useRef(true); - - const increase = () => { - setPercent((prevPercent) => { - let newPercent = prevPercent + 1; - timeoutRef.current *= deltaRef.current; - deltaRef.current *= 1.00; - - if (newPercent < 95) { - setTimeoutRef.current = setTimeout(increase, timeoutRef.current); - } - - return newPercent <= 100 ? newPercent : prevPercent; - }); - }; - - useEffect(() => { - setTimeout(increase, 100); - isMountedRef.current = true; - - return () => { - isMountedRef.current = false; - if (setTimeoutRef.current) { - clearTimeout(setTimeoutRef.current); - } - }; - }, []); - - useEffect(() => { - if (uploadComplete) { - if (setTimeoutRef.current) { - clearTimeout(setTimeoutRef.current); - } - if (isMountedRef.current) { - setPercent(100); - } - } - }, [uploadComplete]); - const displayPercent = errorText ? 0 : percent; - const text = errorText ? errorText : (uploadComplete ? uploadCompleteText : uploadingText); - const svg = errorText ? errorIcon : (uploadComplete ? checkmark : upload); + const text = errorText ? errorText : (percent === 100 ? uploadCompleteText : uploadingText); + const svg = errorText ? errorIcon : (percent === 100 ? checkmark : upload); const className = "file-upload-container dnn-upload-bar" + - (uploadComplete ? " complete" : "") + + (percent === 100 ? " complete" : "") + (errorText ? " upload-error" : ""); return ( diff --git a/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/Upload/index.tsx b/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/Upload/index.tsx index 229e3144ba7..c54d8090c9b 100644 --- a/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/Upload/index.tsx +++ b/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/Upload/index.tsx @@ -1,8 +1,9 @@ import React, { useState, useEffect, useCallback } from "react"; import UploadBar from "./UploadBar"; import Localization from "localization"; -import { LocalUpgradeInfo } from "../../../../models/LocalUpgradeInfo"; import "./style.less"; +import { ChunkToUpload } from "models/ChunkToUpload"; +import upgradeService from "services/upgradeService"; interface ErrorData { responseJSON: { @@ -13,11 +14,6 @@ interface ErrorData { interface FileUploadProps { cancelInstall: () => void; clearUploadedPackage: () => void; - uploadPackage: ( - file: File, - onSuccess: (data: any) => void, - onError: (error: ErrorData) => void - ) => void; uploadComplete: () => void; } @@ -31,6 +27,7 @@ const FileUpload: React.FC = (props) => { const [uploadComplete, setUploadComplete] = useState(false); const [errorText, setErrorText] = useState(""); const [errorInPackage, setErrorInPackage] = useState(false); + const [percent, setPercent] = useState(0); const prevent = useCallback((e: Event) => { e.preventDefault(); @@ -69,32 +66,74 @@ const FileUpload: React.FC = (props) => { } }, []); - const uploadCompleteCallback = useCallback((data: LocalUpgradeInfo) => { + const uploadCompleteCallback = useCallback(() => { setUploading(false); setUploadComplete(true); - setTimeout(() => { - props.uploadComplete(); - }, 1000); + setPercent(100); + props.uploadComplete(); }, []); - const postFile = useCallback( - (file: File) => { - if (props.uploadPackage) { - props.uploadPackage(file, uploadCompleteCallback, handleError); - } - setUploading(true); - setUploadComplete(false); - }, - [props.uploadPackage, uploadCompleteCallback, handleError] - ); - const uploadFile = useCallback( - (file: File) => { + async (file: File) => { setFileName(file.name); setErrorInPackage(false); - postFile(file); + setUploading(true); + setUploadComplete(false); + setPercent(0); + + const newFileId = Math.random().toString(36).substring(2, 15); + const chunkSize = 1024 * 1024; // size of each chunk (1MB) + let start = 0; + + // Upload chunks sequentially + while (start < file.size) { + const chunk: ChunkToUpload = { + chunk: file.slice(start, start + chunkSize), + start: start, + totalSize: file.size, + fileId: newFileId, + }; + + // Wait for this chunk to complete before uploading the next one + try { + await new Promise((resolve, reject) => { + upgradeService.uploadPackage( + chunk, + () => { + // Only call the complete callback on the last chunk + setPercent( + Math.min( + 100, + Math.floor(((start + chunkSize) / file.size) * 100) + ) + ); + if (start + chunkSize >= file.size) { + upgradeService + .completeUpload(newFileId, file.name) + .then(() => { + uploadCompleteCallback(); + }) + .catch((error) => { + handleError(error); + reject(error); + }); + } + resolve(); + }, + (error) => { + handleError(error); + reject(error); + } + ); + }); + } catch (error) { + break; + } + + start += chunkSize; + } }, - [postFile] + [uploadCompleteCallback, handleError] ); const onFileUpload = useCallback( @@ -161,11 +200,18 @@ const FileUpload: React.FC = (props) => { )} {uploading && ( setUploading(false)} + onTryAgain={() => { + setFileName(""); + setErrorText(""); + setErrorInPackage(true); + setUploading(false); + setUploadComplete(false); + setPercent(0); + }} tryAgainText={Localization.get("TryAgain")} uploadCompleteText={Localization.get("UploadPackage_UploadComplete")} uploadingText={Localization.get("UploadPackage_Uploading")} diff --git a/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/index.tsx b/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/index.tsx index b3112d9abb0..2df70ec1e45 100644 --- a/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/index.tsx +++ b/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/index.tsx @@ -30,6 +30,7 @@ const UpgradesTab: React.FC = (props) => { const [panelToShow, setPanelToShow] = useState< "done" | "upload" | "upgrading" | "list" >("list"); + const [showUploadCancelButton, setShowUploadCancelButton] = useState(true); const getUpgrades = () => { upgradeService.listUpgrades().then((upgrades) => { @@ -100,24 +101,25 @@ const UpgradesTab: React.FC = (props) => { cancelInstall={() => setPanelToShow("list")} clearUploadedPackage={() => {}} uploadComplete={() => { - setPanelToShow("list"); + setShowUploadCancelButton(false); + setTimeout(() => { + setPanelToShow("list"); + setShowUploadCancelButton(true); + }, 500); }} - uploadPackage={( - file: File, - onSuccess: (data: any) => void, - onError: (error: any) => void - ) => upgradeService.uploadPackage(file, onSuccess, onError)} /> - + {showUploadCancelButton && ( + + )} ); break; diff --git a/Dnn.AdminExperience/ClientSide/Servers.Web/src/models/ChunkToUpload.ts b/Dnn.AdminExperience/ClientSide/Servers.Web/src/models/ChunkToUpload.ts new file mode 100644 index 00000000000..e93728c1073 --- /dev/null +++ b/Dnn.AdminExperience/ClientSide/Servers.Web/src/models/ChunkToUpload.ts @@ -0,0 +1,6 @@ +export interface ChunkToUpload { + chunk: Blob; + start: number; + totalSize: number; + fileId: string; +} \ No newline at end of file diff --git a/Dnn.AdminExperience/ClientSide/Servers.Web/src/services/upgradeService.ts b/Dnn.AdminExperience/ClientSide/Servers.Web/src/services/upgradeService.ts index 6903de84674..76375cbca6d 100644 --- a/Dnn.AdminExperience/ClientSide/Servers.Web/src/services/upgradeService.ts +++ b/Dnn.AdminExperience/ClientSide/Servers.Web/src/services/upgradeService.ts @@ -1,3 +1,4 @@ +import { ChunkToUpload } from "models/ChunkToUpload"; import utils from "../utils"; import serviceFramework from "./serviceFramework"; @@ -17,19 +18,27 @@ const startUpgrade = function (packageName) { return serviceFramework.post("Upgrades", "StartUpgrade", { packageName }); }; -const uploadPackage = function (file, callback, errorCallback) { +const uploadPackage = function (chunk: ChunkToUpload, callback, errorCallback) { const sf = utils.getServiceFramework(); sf.moduleRoot = "PersonaBar"; sf.controller = "Upgrades"; let formData = new FormData(); - formData.append("POSTFILE", file); + formData.append("chunk", chunk.chunk); + formData.append("start", chunk.start.toString()); + formData.append("totalSize", chunk.totalSize.toString()); + formData.append("fileId", chunk.fileId); sf.postfile("Upload", formData, callback, errorCallback); }; +const completeUpload = function (fileId: string, fileName: string) { + return serviceFramework.post("Upgrades", "UploadComplete", { fileId, fileName }); +}; + const upgradeService = { getUpgradeSettings, listUpgrades, uploadPackage, + completeUpload, deletePackage, startUpgrade, }; diff --git a/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Dnn.PersonaBar.Extensions.csproj b/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Dnn.PersonaBar.Extensions.csproj index cf932733710..e18b1375fca 100644 --- a/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Dnn.PersonaBar.Extensions.csproj +++ b/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Dnn.PersonaBar.Extensions.csproj @@ -453,6 +453,7 @@ + diff --git a/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Services/DTO/UpgradeUploadCompleteDto.cs b/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Services/DTO/UpgradeUploadCompleteDto.cs new file mode 100644 index 00000000000..632d70c0b47 --- /dev/null +++ b/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Services/DTO/UpgradeUploadCompleteDto.cs @@ -0,0 +1,18 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information + +namespace Dnn.PersonaBar.Extensions.Services.Dto +{ + using Newtonsoft.Json; + + [JsonObject] + public class UpgradeUploadCompleteDto + { + [JsonProperty("fileId")] + public string FileId { get; set; } + + [JsonProperty("fileName")] + public string FileName { get; set; } + } +} diff --git a/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Services/UpgradesController.cs b/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Services/UpgradesController.cs index 718b4c30bb5..0ecb3fe58a5 100644 --- a/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Services/UpgradesController.cs +++ b/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Services/UpgradesController.cs @@ -17,7 +17,6 @@ namespace Dnn.PersonaBar.Extensions.Services using Dnn.PersonaBar.Library; using Dnn.PersonaBar.Library.Attributes; using DotNetNuke.Abstractions.Application; - using DotNetNuke.Common; using DotNetNuke.Instrumentation; using DotNetNuke.Services.Installer; using DotNetNuke.Services.Localization; @@ -173,6 +172,47 @@ public Task Upload(CancellationToken cancellationToken) } } + /// + /// Completes the uploads of a DNN package for local upgrade. + /// + /// The upload complete data. + /// The cancellation token. + /// Either a package info or an error message. + [HttpPost] + [IFrameSupportedValidateAntiForgeryToken] + public async Task UploadComplete(UpgradeUploadCompleteDto data, CancellationToken cancellationToken) + { + var fileName = Path.GetFileName(data.FileName); + var fileId = Path.GetFileName(data.FileId); + + if (!string.IsNullOrEmpty(fileName) && !string.IsNullOrEmpty(fileId)) + { + var writtenFile = Path.Combine(this.applicationStatusInfo.ApplicationMapPath, "App_Data", "Upgrade", fileId + ".resources"); + if (!File.Exists(writtenFile)) + { + return this.Request.CreateResponse(HttpStatusCode.BadRequest, new { message = this.LocalizeString($"Upgrade_InvalidPackage", fileName), }); + } + + var info = await this.localUpgradeService.GetLocalUpgradeInfo(writtenFile, cancellationToken); + if (!info.IsValid) + { + return this.Request.CreateResponse(HttpStatusCode.BadRequest, new { message = this.LocalizeString($"Upgrade_InvalidPackage", fileName), }); + } + else if (info.IsOutdated) + { + return this.Request.CreateResponse(HttpStatusCode.BadRequest, new { message = this.LocalizeString($"Upgrade_OutdatedPackage", fileName), }); + } + else + { + var upgradePath = Path.Combine(this.applicationStatusInfo.ApplicationMapPath, "App_Data", "Upgrade", Path.GetFileNameWithoutExtension(fileName) + ".zip"); + File.Move(writtenFile, upgradePath); + return this.Request.CreateResponse(HttpStatusCode.OK, fileName); + } + } + + return this.Request.CreateResponse(HttpStatusCode.BadRequest, new { message = this.LocalizeString($"Upgrade_InvalidPackage", fileName), }); + } + private async Task UploadFileAction(CancellationToken cancellationToken) { var request = this.Request; @@ -191,8 +231,9 @@ private async Task UploadFileAction(CancellationToken cance // read multipart parts await request.Content.ReadAsMultipartAsync(provider, cancellationToken).ConfigureAwait(false); - object result = null; - var fileName = string.Empty; + long startPosition = 0; + long totalSize = 0; + string fileId = string.Empty; Stream stream = null; foreach (var item in provider.Contents) @@ -201,47 +242,34 @@ private async Task UploadFileAction(CancellationToken cance var name = item.Headers.ContentDisposition.Name; switch (name.ToUpperInvariant()) { - case "\"POSTFILE\"": - fileName = item.Headers.ContentDisposition.FileName.Replace("\"", string.Empty); - if (fileName.IndexOf("\\", StringComparison.Ordinal) != -1) - { - fileName = Path.GetFileName(fileName); - } - - if (Globals.FileEscapingRegex.Match(fileName).Success == false && Path.GetExtension(fileName).ToLowerInvariant() == ".zip") - { - stream = item.ReadAsStreamAsync().Result; - } - + case "\"CHUNK\"": + stream = item.ReadAsStreamAsync().Result; + break; + case "\"START\"": + long.TryParse(item.ReadAsStringAsync().Result, out startPosition); + break; + case "\"TOTALSIZE\"": + long.TryParse(item.ReadAsStringAsync().Result, out totalSize); + break; + case "\"FILEID\"": + fileId = item.ReadAsStringAsync().Result; break; } } - if (!string.IsNullOrEmpty(fileName) && stream != null) + if (stream != null && totalSize != 0 && !string.IsNullOrEmpty(fileId)) { - var info = await this.localUpgradeService.GetLocalUpgradeInfo(Path.GetFileNameWithoutExtension(fileName), stream, cancellationToken); - if (!info.IsValid) - { - return request.CreateResponse(HttpStatusCode.BadRequest, new { message = this.LocalizeString($"Upgrade_InvalidPackage", fileName), }); - } - else if (info.IsOutdated) - { - return request.CreateResponse(HttpStatusCode.BadRequest, new { message = this.LocalizeString($"Upgrade_OutdatedPackage", fileName), }); - } - else + var fileToWriteTo = Path.Combine(this.applicationStatusInfo.ApplicationMapPath, "App_Data", "Upgrade", fileId + ".resources"); + + // use the file stream and start position to write the chunk to the file + using (var fileStream = new FileStream(fileToWriteTo, FileMode.OpenOrCreate, FileAccess.Write)) { - var upgradePath = Path.Combine(this.applicationStatusInfo.ApplicationMapPath, "App_Data", "Upgrade", info.PackageName + ".zip"); - using (var fileStream = File.Create(upgradePath)) - { - stream.Seek(0, SeekOrigin.Begin); - stream.CopyTo(fileStream); - } - - return this.Request.CreateResponse(HttpStatusCode.OK, result); + fileStream.Position = startPosition; + await stream.CopyToAsync(fileStream).ConfigureAwait(false); } } - return request.CreateResponse(HttpStatusCode.BadRequest, new { message = this.LocalizeString($"Upgrade_InvalidPackage", fileName), }); + return request.CreateResponse(HttpStatusCode.OK); } private string LocalizeString(string key, params object[] args) From 3ed89f301be6e7f3ce0c7a6cd544383a6b6a4c23 Mon Sep 17 00:00:00 2001 From: Peter Donker Date: Fri, 31 Oct 2025 16:13:07 +0100 Subject: [PATCH 082/199] New feature: the package to upgrade includes a file that determines the minimum DNN version to install from and the upgrade file filter --- .../Library/DotNetNuke.Library.csproj | 1 + .../Services/Installer/LocalUpgradeInfo.cs | 6 +++ .../Services/Installer/LocalUpgradeService.cs | 40 +++++++++++++++++-- .../Installer/LocalUpgradeSettings.cs | 26 ++++++++++++ .../Website/App_Data/Upgrade/PlaceHolder.txt | 1 - .../Website/App_Data/Upgrade/upgrade.json | 15 +++++++ .../Website/DotNetNuke.Website.csproj | 2 +- .../components/Tabs/Upgrades/UpgradeList.tsx | 8 ++-- .../components/Tabs/Upgrades/UpgradeRow.tsx | 17 ++++++-- .../src/models/LocalUpgradeInfo.ts | 2 + .../Services/UpgradesController.cs | 2 +- .../App_LocalResources/Servers.resx | 10 ++++- 12 files changed, 115 insertions(+), 15 deletions(-) create mode 100644 DNN Platform/Library/Services/Installer/LocalUpgradeSettings.cs delete mode 100644 DNN Platform/Website/App_Data/Upgrade/PlaceHolder.txt create mode 100644 DNN Platform/Website/App_Data/Upgrade/upgrade.json diff --git a/DNN Platform/Library/DotNetNuke.Library.csproj b/DNN Platform/Library/DotNetNuke.Library.csproj index 650546a4ae6..58bbdf6662e 100644 --- a/DNN Platform/Library/DotNetNuke.Library.csproj +++ b/DNN Platform/Library/DotNetNuke.Library.csproj @@ -863,6 +863,7 @@ + diff --git a/DNN Platform/Library/Services/Installer/LocalUpgradeInfo.cs b/DNN Platform/Library/Services/Installer/LocalUpgradeInfo.cs index 079c1bbdef1..b95a5dceb20 100644 --- a/DNN Platform/Library/Services/Installer/LocalUpgradeInfo.cs +++ b/DNN Platform/Library/Services/Installer/LocalUpgradeInfo.cs @@ -20,4 +20,10 @@ public record LocalUpgradeInfo /// Gets or sets the version of the upgrade package. public Version Version { get; set; } + + /// Gets or sets the minimal DNN Version to upgrade from. + public Version MinDnnVersion { get; set; } + + /// Gets or sets a value indicating whether the upgrade can be installed. + public bool CanInstall { get; set; } } diff --git a/DNN Platform/Library/Services/Installer/LocalUpgradeService.cs b/DNN Platform/Library/Services/Installer/LocalUpgradeService.cs index ed93f21d3c8..438b4a87a27 100644 --- a/DNN Platform/Library/Services/Installer/LocalUpgradeService.cs +++ b/DNN Platform/Library/Services/Installer/LocalUpgradeService.cs @@ -26,7 +26,7 @@ namespace DotNetNuke.Services.Installer; /// The default implementation. public class LocalUpgradeService : ILocalUpgradeService { - private static readonly List InstallFilter = new List + private static readonly string[] DefaultUpgradeExclude = new[] { "App_Data/Database.mdf", "Config/DotNetNuke.config", @@ -122,13 +122,32 @@ public async Task GetLocalUpgradeInfo(string packageName, Stre mainAssemblyVersion = await ReadZippedAssemblyVersion(mainAssemblyEntry, cancellationToken); } - return new LocalUpgradeInfo + var upgradeInfo = archive.FileEntries() + .Where(entry => string.Equals("App_Data/Upgrade/upgrade.json", entry.FullName, StringComparison.OrdinalIgnoreCase)) + .SingleOrDefault(); + var upgradeSettings = new LocalUpgradeSettings + { + MinimumDnnVersion = "0.0.0", + }; + if (upgradeInfo is not null) + { + var upgradeInfoFile = upgradeInfo.ReadTextFile(); + upgradeSettings = Json.Deserialize(upgradeInfoFile); + } + + var res = new LocalUpgradeInfo { PackageName = packageName, Version = mainAssemblyVersion, IsValid = mainAssemblyVersion is not null, IsOutdated = mainAssemblyVersion is not null && mainAssemblyVersion <= this.application.Version, + MinDnnVersion = Version.Parse(upgradeSettings.MinimumDnnVersion), }; + res.CanInstall = res.IsValid + && !res.IsOutdated + && (res.MinDnnVersion is null || res.MinDnnVersion <= this.application.Version); + + return res; } catch (Exception exception) { @@ -139,6 +158,8 @@ public async Task GetLocalUpgradeInfo(string packageName, Stre Version = null, IsValid = false, IsOutdated = false, + MinDnnVersion = null, + CanInstall = false, }; } } @@ -169,6 +190,19 @@ public async Task StartLocalUpgrade(LocalUpgradeInfo upgrade, CancellationToken var upgradeZipPath = Path.Combine(this.UpgradeDirectoryPath, upgrade.PackageName + ".zip"); using var fileStream = File.OpenRead(upgradeZipPath); using var archive = new ZipArchive(fileStream, ZipArchiveMode.Read); + var upgradeInfo = archive.FileEntries() + .Where(entry => string.Equals("App_Data/Upgrade/upgrade.json", entry.FullName, StringComparison.OrdinalIgnoreCase)) + .SingleOrDefault(); + var upgradeSettings = new LocalUpgradeSettings + { + UpgradeExclude = DefaultUpgradeExclude, + }; + if (upgradeInfo is not null) + { + var upgradeInfoFile = upgradeInfo.ReadTextFile(); + upgradeSettings = Json.Deserialize(upgradeInfoFile); + } + var assemblyEntries = archive.FileEntries() .Where(entry => string.Equals(".dll", Path.GetExtension(entry.Name), StringComparison.OrdinalIgnoreCase)) .Where(entry => string.Equals("bin", Path.GetDirectoryName(entry.FullName), StringComparison.OrdinalIgnoreCase)) @@ -181,7 +215,7 @@ public async Task StartLocalUpgrade(LocalUpgradeInfo upgrade, CancellationToken await FileSystemUtils.UnzipResourcesAsync( archive.FileEntries() .Where(entry => !assemblyEntries.Contains(entry)) - .Where(entry => !InstallFilter.Any(filter => entry.FullName.StartsWith(filter, StringComparison.OrdinalIgnoreCase))), + .Where(entry => !upgradeSettings.UpgradeExclude.Any(filter => entry.FullName.StartsWith(filter, StringComparison.OrdinalIgnoreCase))), this.appStatus.ApplicationMapPath, cancellationToken); } diff --git a/DNN Platform/Library/Services/Installer/LocalUpgradeSettings.cs b/DNN Platform/Library/Services/Installer/LocalUpgradeSettings.cs new file mode 100644 index 00000000000..9be2f35a9d5 --- /dev/null +++ b/DNN Platform/Library/Services/Installer/LocalUpgradeSettings.cs @@ -0,0 +1,26 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information + +namespace DotNetNuke.Services.Installer; + +using Newtonsoft.Json; + +/// +/// Represents settings for a local upgrade, including minimum DNN version and excluded upgrade files. +/// +[JsonObject] +public class LocalUpgradeSettings +{ + /// + /// Gets or sets the minimum DNN version required for the upgrade. + /// + [JsonProperty("minimumDnnVersion")] + public string MinimumDnnVersion { get; set; } + + /// + /// Gets or sets the list of upgrade exclusions. + /// + [JsonProperty("upgradeExclude")] + public string[] UpgradeExclude { get; set; } +} diff --git a/DNN Platform/Website/App_Data/Upgrade/PlaceHolder.txt b/DNN Platform/Website/App_Data/Upgrade/PlaceHolder.txt deleted file mode 100644 index 0519ecba6ea..00000000000 --- a/DNN Platform/Website/App_Data/Upgrade/PlaceHolder.txt +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/DNN Platform/Website/App_Data/Upgrade/upgrade.json b/DNN Platform/Website/App_Data/Upgrade/upgrade.json new file mode 100644 index 00000000000..f169af90c76 --- /dev/null +++ b/DNN Platform/Website/App_Data/Upgrade/upgrade.json @@ -0,0 +1,15 @@ +{ + "minimumDnnVersion": "10.02.00", + "upgradeExclude": [ + "/favicon.ico", + "/Robots.txt", + "/web.config", + "/App_Data/Database.mdf", + "/App_Data/Database_log.LDF", + "/bin/Providers/DotNetNuke.Providers.AspNetClientCapabilityProvider.dll", + "/bin/Newtonsoft.Json.dll", + "/bin/System.Runtime.CompilerServices.Unsafe.dll", + "/Config/DotNetNuke.config", + "/Install/InstallWizard.aspx" + ] +} \ No newline at end of file diff --git a/DNN Platform/Website/DotNetNuke.Website.csproj b/DNN Platform/Website/DotNetNuke.Website.csproj index f85394825ae..af2202bbcfe 100644 --- a/DNN Platform/Website/DotNetNuke.Website.csproj +++ b/DNN Platform/Website/DotNetNuke.Website.csproj @@ -588,7 +588,6 @@ - @@ -606,6 +605,7 @@ stylecop.json + AuthenticationEditor.ascx diff --git a/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/UpgradeList.tsx b/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/UpgradeList.tsx index 99083347fc5..9d6318adcc2 100644 --- a/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/UpgradeList.tsx +++ b/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/UpgradeList.tsx @@ -22,10 +22,12 @@ const UpgradeList: React.FC = (props) => { return (
- {Localization.get("FileName")} - {Localization.get("Version")} + {Localization.get("FileName")} + {Localization.get("Version")} + {Localization.get("MinDnnVersion")} {Localization.get("IsValid")} - {Localization.get("IsOutdated")} + {Localization.get("IsOutdated")} + {Localization.get("CanInstall")} {Localization.get("Actions")} diff --git a/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/UpgradeRow.tsx b/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/UpgradeRow.tsx index 71e25621883..0bfcbd6d128 100644 --- a/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/UpgradeRow.tsx +++ b/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/UpgradeRow.tsx @@ -17,25 +17,34 @@ interface IUpgradeRowProps { const UpgradeRow: React.FC = (props) => { const version = `${props.upgrade.Version._Major}.${props.upgrade.Version._Minor}.${props.upgrade.Version._Build}`; + const minDnnVersion = `${props.upgrade.MinDnnVersion._Major}.${props.upgrade.MinDnnVersion._Minor}.${props.upgrade.MinDnnVersion._Build}`; return (
- + - + + + + {props.upgrade.IsValid ? Localization.get("Yes") : Localization.get("No")} - + {props.upgrade.IsOutdated ? Localization.get("Yes") : Localization.get("No")} + + {props.upgrade.CanInstall + ? Localization.get("Yes") + : Localization.get("No")} + = (props) => { }} title={Localization.get("Delete")} /> - {props.upgrade.IsValid && !props.upgrade.IsOutdated && ( + {props.upgrade.CanInstall && ( StartUpgrade(UpgradePackageRequestDto dat } var upgrade = upgrades.FirstOrDefault(u => u.PackageName.Equals(data.PackageName, StringComparison.InvariantCultureIgnoreCase)); - if (upgrade == null || !upgrade.IsValid || upgrade.IsOutdated) + if (upgrade == null || !upgrade.CanInstall) { return this.Request.CreateResponse(HttpStatusCode.BadRequest, new { message = this.LocalizeString($"Upgrade_NoValidUpgrade", data.PackageName), }); } diff --git a/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/admin/personaBar/Dnn.Servers/App_LocalResources/Servers.resx b/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/admin/personaBar/Dnn.Servers/App_LocalResources/Servers.resx index 1c6f8def9ee..34235c92750 100644 --- a/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/admin/personaBar/Dnn.Servers/App_LocalResources/Servers.resx +++ b/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/admin/personaBar/Dnn.Servers/App_LocalResources/Servers.resx @@ -760,10 +760,10 @@ Are you sure you want to increment the version number for your site? Please confirm you have made a backup of this installation before upgrading. - Is Outdated + Outdated - Is Valid + Valid Version @@ -837,4 +837,10 @@ Are you sure you want to increment the version number for your site? There are no upgrades available. + + Can Install + + + Req DNN Version + \ No newline at end of file From b6753dfcf28a8b9d0f38ecf71d4aaf3c6407a144 Mon Sep 17 00:00:00 2001 From: Peter Donker Date: Fri, 31 Oct 2025 16:17:04 +0100 Subject: [PATCH 083/199] Update Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Services/UpgradesController.cs Co-authored-by: Brian Dukes --- .../Services/UpgradesController.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Services/UpgradesController.cs b/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Services/UpgradesController.cs index 4887eb41e64..8171c9a3c6f 100644 --- a/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Services/UpgradesController.cs +++ b/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Services/UpgradesController.cs @@ -243,16 +243,16 @@ private async Task UploadFileAction(CancellationToken cance switch (name.ToUpperInvariant()) { case "\"CHUNK\"": - stream = item.ReadAsStreamAsync().Result; + stream = await item.ReadAsStreamAsync(); break; case "\"START\"": - long.TryParse(item.ReadAsStringAsync().Result, out startPosition); + long.TryParse(await item.ReadAsStringAsync(), out startPosition); break; case "\"TOTALSIZE\"": - long.TryParse(item.ReadAsStringAsync().Result, out totalSize); + long.TryParse(await item.ReadAsStringAsync(), out totalSize); break; case "\"FILEID\"": - fileId = item.ReadAsStringAsync().Result; + fileId = await item.ReadAsStringAsync(); break; } } From 606691c1754101c3bc843b0b831f58b66506c526 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 1 Nov 2025 02:36:50 +0000 Subject: [PATCH 084/199] Update caniuse database --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index b6d149359d6..84f8a496a92 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7208,9 +7208,9 @@ __metadata: linkType: hard "caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30001702, caniuse-lite@npm:^1.0.30001726": - version: 1.0.30001750 - resolution: "caniuse-lite@npm:1.0.30001750" - checksum: 10/2b912758d817cd2c2c179246e282f8b598695ec733bc446183e1d381eada60889c4770a1dfd86075e046a43d55f9922e2eaed1501347fcb12a38716cc14be297 + version: 1.0.30001752 + resolution: "caniuse-lite@npm:1.0.30001752" + checksum: 10/2efe0ad22fdb1b8a810238b6dc589aa1ecfb3d2f404ec7079040c94d83963402afd76c0fc514a54719d6f613c847d237ed0f8f48260d7bcda0e9014b874ad08a languageName: node linkType: hard From 41f160b2b48674e4b6e0e95c6cb50abd1b740c5b Mon Sep 17 00:00:00 2001 From: Peter Donker Date: Sat, 1 Nov 2025 21:22:06 +0100 Subject: [PATCH 085/199] Remove settings from the PersonaBar for bundling and minification --- .../Application/IHostSettings.cs | 4 +++ .../DnnCompositeFileProcessingProvider.cs | 2 ++ .../src/components/Tabs/Performance.jsx | 34 +------------------ .../Services/DTO/UpdatePerfSettingsRequest.cs | 6 ---- .../ServerSettingsPerformanceController.cs | 9 ----- .../App_LocalResources/Servers.resx | 28 --------------- 6 files changed, 7 insertions(+), 76 deletions(-) diff --git a/DNN Platform/DotNetNuke.Abstractions/Application/IHostSettings.cs b/DNN Platform/DotNetNuke.Abstractions/Application/IHostSettings.cs index 61c9a275db7..e03337de865 100644 --- a/DNN Platform/DotNetNuke.Abstractions/Application/IHostSettings.cs +++ b/DNN Platform/DotNetNuke.Abstractions/Application/IHostSettings.cs @@ -7,6 +7,7 @@ namespace DotNetNuke.Abstractions.Application; using System; using DotNetNuke.Abstractions.Security; +using DotNetNuke.Internal.SourceGenerators; /// Provides access to well-known host settings. public interface IHostSettings @@ -40,12 +41,15 @@ public interface IHostSettings public bool AllowControlPanelToDetermineVisibility { get; } /// Gets a value indicating whether Composite Files are enabled at the host level. + [DnnDeprecated(10, 2, 0, "Bundling and minification have been deprecated in DNN 10.2. These references will be removed in DNN 12.")] public bool CrmEnableCompositeFiles { get; } /// Gets a value indicating whether CSS Minification is enabled at the host level. + [DnnDeprecated(10, 2, 0, "Bundling and minification have been deprecated in DNN 10.2. These references will be removed in DNN 12.")] public bool CrmMinifyCss { get; } /// Gets a value indicating whether JS Minification is enabled at the host level. + [DnnDeprecated(10, 2, 0, "Bundling and minification have been deprecated in DNN 10.2. These references will be removed in DNN 12.")] public bool CrmMinifyJs { get; } /// Gets the Client Resource Management version number. diff --git a/DNN Platform/DotNetNuke.Web.Client/Providers/DnnCompositeFileProcessingProvider.cs b/DNN Platform/DotNetNuke.Web.Client/Providers/DnnCompositeFileProcessingProvider.cs index 11b98877dfe..a1a45a085ee 100644 --- a/DNN Platform/DotNetNuke.Web.Client/Providers/DnnCompositeFileProcessingProvider.cs +++ b/DNN Platform/DotNetNuke.Web.Client/Providers/DnnCompositeFileProcessingProvider.cs @@ -10,8 +10,10 @@ namespace DotNetNuke.Web.Client.Providers using ClientDependency.Core; using ClientDependency.Core.CompositeFiles; using ClientDependency.Core.CompositeFiles.Providers; + using DotNetNuke.Internal.SourceGenerators; /// A provider for combining, minifying, compressing and saving composite scripts/css files. + [DnnDeprecated(10, 2, 0, "Bundling and minification have been deprecated in DNN 10.2. These references will be removed in DNN 12.")] public class DnnCompositeFileProcessingProvider : CompositeFileProcessingProvider { private readonly ClientResourceSettings clientResourceSettings = new ClientResourceSettings(); diff --git a/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Performance.jsx b/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Performance.jsx index e25ed1f381e..468f2b865dd 100644 --- a/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Performance.jsx +++ b/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Performance.jsx @@ -188,7 +188,6 @@ class Performance extends Component { -
@@ -203,38 +202,7 @@ class Performance extends Component {
-
- - - - +
diff --git a/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Services/DTO/UpdatePerfSettingsRequest.cs b/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Services/DTO/UpdatePerfSettingsRequest.cs index 5edd172a3f2..11fdc7f89d5 100644 --- a/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Services/DTO/UpdatePerfSettingsRequest.cs +++ b/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Services/DTO/UpdatePerfSettingsRequest.cs @@ -26,12 +26,6 @@ public class UpdatePerfSettingsRequest public string CurrentHostVersion { get; set; } - public bool HostEnableCompositeFiles { get; set; } - - public bool HostMinifyCss { get; set; } - - public bool HostMinifyJs { get; set; } - public string CurrentPortalVersion { get; set; } public bool PortalEnableCompositeFiles { get; set; } diff --git a/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Services/ServerSettingsPerformanceController.cs b/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Services/ServerSettingsPerformanceController.cs index f0857154a1e..8fbca427548 100644 --- a/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Services/ServerSettingsPerformanceController.cs +++ b/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Services/ServerSettingsPerformanceController.cs @@ -82,9 +82,6 @@ public HttpResponseMessage GetPerformanceSettings() HostMinifyCss = this.hostSettings.CrmMinifyCss, HostMinifyJs = this.hostSettings.CrmMinifyJs, CurrentPortalVersion = this.GetPortalVersion(portalId), - PortalEnableCompositeFiles = Parse(PortalController.GetPortalSetting(ClientResourceSettings.EnableCompositeFilesKey, portalId, "false")), - PortalMinifyCss = Parse(PortalController.GetPortalSetting(ClientResourceSettings.MinifyCssKey, portalId, "false")), - PortalMinifyJs = Parse(PortalController.GetPortalSetting(ClientResourceSettings.MinifyJsKey, portalId, "false")), // Options CachingProviderOptions = this.performanceController.GetCachingProviderOptions(), @@ -187,16 +184,10 @@ public HttpResponseMessage UpdatePerformanceSettings(UpdatePerfSettingsRequest r if (request.ClientResourcesManagementMode == "h") { PortalController.UpdatePortalSetting(portalId, ClientResourceSettings.OverrideDefaultSettingsKey, FalseString, false); - this.hostSettingsService.Update(ClientResourceSettings.EnableCompositeFilesKey, request.HostEnableCompositeFiles.ToString(CultureInfo.InvariantCulture)); - this.hostSettingsService.Update(ClientResourceSettings.MinifyCssKey, request.HostMinifyCss.ToString(CultureInfo.InvariantCulture)); - this.hostSettingsService.Update(ClientResourceSettings.MinifyJsKey, request.HostMinifyJs.ToString(CultureInfo.InvariantCulture)); } else { PortalController.UpdatePortalSetting(portalId, ClientResourceSettings.OverrideDefaultSettingsKey, TrueString, false); - PortalController.UpdatePortalSetting(portalId, ClientResourceSettings.EnableCompositeFilesKey, request.PortalEnableCompositeFiles.ToString(CultureInfo.InvariantCulture), false); - PortalController.UpdatePortalSetting(portalId, ClientResourceSettings.MinifyCssKey, request.PortalMinifyCss.ToString(CultureInfo.InvariantCulture), false); - PortalController.UpdatePortalSetting(portalId, ClientResourceSettings.MinifyJsKey, request.PortalMinifyJs.ToString(CultureInfo.InvariantCulture), false); } DataCache.ClearCache(); diff --git a/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/admin/personaBar/Dnn.Servers/App_LocalResources/Servers.resx b/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/admin/personaBar/Dnn.Servers/App_LocalResources/Servers.resx index 398319bd7b0..542c26235bb 100644 --- a/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/admin/personaBar/Dnn.Servers/App_LocalResources/Servers.resx +++ b/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/admin/personaBar/Dnn.Servers/App_LocalResources/Servers.resx @@ -555,39 +555,15 @@ Client Resource Management - - Host mode utilizes all Client Resources Management settings set at the application level. Site level allows you to select your own Client Resources Management settings. - - - Client Resources Management Mode - Current Host Version: - - Composite files are combinations of resources (JavaScript and CSS) created to reduce the number of file requests by the browser. This will significantly increase the page loading speed. - - - Enable Composite Files - Global Increment Version - - CSS minification will reduce the size of the CSS code by using regular expressions to remove comments, whitespace and "dead CSS". It is only available when composite files are enabled. - - - Minify CSS - - - JS minification will reduce the size of the JavaScript code using JSMin. It is only available when composite files are enabled. - - - Minify JS - Select the default module caching provider. This setting can be overridden by each individual module. @@ -636,10 +612,6 @@ Warning: Memory page state persistence can cause Ajax issues. - - Important note regarding minification settings.<br/> -If minification settings are changed when composite files are enabled, you must first save the minification settings by clicking Save and then increment the version number. This will issue new composite files using the new minification settings. - This action will force all site visitors to download new versions of CSS and JavaScript files. You should only do this if you are certain that the files have changed and you want those changes to be reflected on the client's browser. From fdabcb710c002b668e5e7e143994fcd4abe6d241 Mon Sep 17 00:00:00 2001 From: valadas <6371568+valadas@users.noreply.github.com> Date: Sun, 2 Nov 2025 00:35:11 +0000 Subject: [PATCH 086/199] Compress Images --- .../Icons/Sigma/Total_32X32_Standard.png | Bin 449 -> 416 bytes DNN Platform/Website/images/icon_library.png | Bin 1074 -> 1003 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/DNN Platform/Website/Icons/Sigma/Total_32X32_Standard.png b/DNN Platform/Website/Icons/Sigma/Total_32X32_Standard.png index febb3d41fea8316c8c3d9d870c3eabb41bd24317..b6839244f221f134daa00032750f077c8a9a4899 100644 GIT binary patch delta 345 zcmV-f0jB=J1E2$tBr;1-OjJcoX>lYWOi4_aB_BOwX{rGL2~JOWv9#Op@cEdY(vg+O zmzv6xn9FBvv%bILkz5-f(az>C;f{p>000eiQchC<+Rd=IT0Q;_>BXOPOzgRHk(?NR z;z>k7RCwCGlhG1_AP_~35CU2jEU5qg(k_Jt+DyLGeSJYE<3hQsXL04gbmmXM-kccDTJr00000NkvXXu0mjfNh_ek delta 409 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 s>G6CYJ~@tmSC0Nu?|IGZJs0)%KU Date: Fri, 31 Oct 2025 23:03:31 -0400 Subject: [PATCH 087/199] Fixed an obsolete usage of dialogClasses in jQueryUI dialogClasses is obsolete and got killed in jQueryUI upgrade to v1.14, this PR replaces its usages with the new way: Closes #6788 --- .../JavaScript Libraries/DnnPlugins/dnn.jquery.js | 8 ++++++-- .../Modules/CoreMessaging/Scripts/CoreMessaging.js | 4 +++- .../Modules/CoreMessaging/Scripts/Subscription.js | 4 +++- .../HtmlEditorProviders/DNNConnect.CKE/js/Options.js | 8 ++++++-- DNN Platform/Website/Install/InstallWizard.aspx | 4 +++- .../Shared/components/ComposeMessage/ComposeMessage.js | 4 +++- .../Shared/components/FileUpload/dnn.FileUpload.js | 6 ++++-- .../Shared/components/UserFileManager/UserFileManager.js | 4 ++-- .../Website/Resources/Shared/scripts/dnn.jquery.js | 4 ++-- .../Website/Resources/Shared/scripts/dnn.logViewer.js | 2 +- DNN Platform/Website/js/Debug/dnn.modalpopup.js | 8 ++++++-- DNN Platform/Website/js/dnn.modalpopup.js | 2 +- 12 files changed, 40 insertions(+), 18 deletions(-) diff --git a/DNN Platform/JavaScript Libraries/DnnPlugins/dnn.jquery.js b/DNN Platform/JavaScript Libraries/DnnPlugins/dnn.jquery.js index 7b9e348428a..3d56da05237 100644 --- a/DNN Platform/JavaScript Libraries/DnnPlugins/dnn.jquery.js +++ b/DNN Platform/JavaScript Libraries/DnnPlugins/dnn.jquery.js @@ -156,7 +156,9 @@ resizable: false, modal: true, title: 'Confirm', - dialogClass: 'dnnFormPopup dnnClear', + classes: { + 'ui-dialog': 'dnnFormPopup dnnClear', + }, isButton: false }; @@ -201,7 +203,9 @@ resizable: false, modal: true, buttonOkClass: 'dnnPrimaryAction', - dialogClass: 'dnnFormPopup dnnClear' + classes: { + 'ui-dialog': 'dnnFormPopup dnnClear' + } }; })(jQuery); diff --git a/DNN Platform/Modules/CoreMessaging/Scripts/CoreMessaging.js b/DNN Platform/Modules/CoreMessaging/Scripts/CoreMessaging.js index e8d9be89781..a874a669468 100644 --- a/DNN Platform/Modules/CoreMessaging/Scripts/CoreMessaging.js +++ b/DNN Platform/Modules/CoreMessaging/Scripts/CoreMessaging.js @@ -728,7 +728,9 @@ resizable: false, modal: true, title: settings.notificationConfirmTitleText, - dialogClass: 'dnnFormPopup dnnClear', + classes: { + 'ui-dialog': 'dnnFormPopup dnnClear' + }, open: function () { $('.ui-dialog-buttonpane').find('button:contains("' + settings.notificationConfirmNoText + '")').addClass('dnnConfirmCancel'); }, diff --git a/DNN Platform/Modules/CoreMessaging/Scripts/Subscription.js b/DNN Platform/Modules/CoreMessaging/Scripts/Subscription.js index 72e59c6036e..dd500a29e2b 100644 --- a/DNN Platform/Modules/CoreMessaging/Scripts/Subscription.js +++ b/DNN Platform/Modules/CoreMessaging/Scripts/Subscription.js @@ -110,7 +110,9 @@ .dialog({ modal: true, autoOpen: true, - dialogClass: "dnnFormPopup", + classes: { + 'ui-dialog': 'dnnFormPopup', + }, width: 400, height: 200, resizable: false, diff --git a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/Options.js b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/Options.js index b0f1b5f5726..209685ffdce 100644 --- a/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/Options.js +++ b/DNN Platform/Providers/HtmlEditorProviders/DNNConnect.CKE/js/Options.js @@ -61,7 +61,9 @@ $('#ExportDialog').dialog({ autoOpen: false, width: 350, - dialogClass: 'dnnFormPopup', + classes: { + 'ui-dialog': 'dnnFormPopup', + }, resizable: false, buttons: { "Cancel": function () { @@ -79,7 +81,9 @@ $('#ImportDialog').dialog({ autoOpen: false, width: 350, - dialogClass: 'dnnFormPopup', + classes: { + 'ui-dialog': 'dnnFormPopup', + }, resizable: false, buttons: { "Cancel": function() { diff --git a/DNN Platform/Website/Install/InstallWizard.aspx b/DNN Platform/Website/Install/InstallWizard.aspx index e0b54044ca1..34eda473687 100644 --- a/DNN Platform/Website/Install/InstallWizard.aspx +++ b/DNN Platform/Website/Install/InstallWizard.aspx @@ -376,7 +376,9 @@ $(".permissionCheck").html(''); if (!result.Item1) { $(".permissionCheck").html(result.Item2).removeClass("promptMessage").dialog({ - dialogClass: "dnnFormPopup", + classes: { + "ui-dialog": "dnnFormPopup" + }, modal: true, width: 950, height: 550, diff --git a/DNN Platform/Website/Resources/Shared/components/ComposeMessage/ComposeMessage.js b/DNN Platform/Website/Resources/Shared/components/ComposeMessage/ComposeMessage.js index 4f4d8d0ea3f..a6f8e9b0490 100644 --- a/DNN Platform/Website/Resources/Shared/components/ComposeMessage/ComposeMessage.js +++ b/DNN Platform/Website/Resources/Shared/components/ComposeMessage/ComposeMessage.js @@ -315,7 +315,9 @@ createMessageErrorText: 'An error occurred while creating the message. Please try again later.', createMessageErrorWithDescriptionText: 'An error occurred while creating the message: ', autoSuggestErrorText: 'An error occurred while getting suggestions: ', - dialogClass: 'dnnFormPopup dnnClear', + classes: { + 'ui-dialog':'dnnFormPopup dnnClear', + }, autoOpen: false, showAttachments: false, onPrePopulate: function (target) { diff --git a/DNN Platform/Website/Resources/Shared/components/FileUpload/dnn.FileUpload.js b/DNN Platform/Website/Resources/Shared/components/FileUpload/dnn.FileUpload.js index 4264a77ef4e..c4febfd2af6 100644 --- a/DNN Platform/Website/Resources/Shared/components/FileUpload/dnn.FileUpload.js +++ b/DNN Platform/Website/Resources/Shared/components/FileUpload/dnn.FileUpload.js @@ -105,7 +105,7 @@ ); return dialog; - }, + }, _getFileExtension: function(fileName) { var parts = fileName.split("."); @@ -662,7 +662,9 @@ $panel.dialog({ modal: true, autoOpen: true, - dialogClass: "dnnFormPopup " + this.options.dialogCss, + classes: { + "ui-dialog": "dnnFormPopup " + this.options.dialogCss + }, title: this.options.resources.title, resizable: false, width: fuDialogWidth, diff --git a/DNN Platform/Website/Resources/Shared/components/UserFileManager/UserFileManager.js b/DNN Platform/Website/Resources/Shared/components/UserFileManager/UserFileManager.js index 3f438b5a7a9..6a3b26a1083 100644 --- a/DNN Platform/Website/Resources/Shared/components/UserFileManager/UserFileManager.js +++ b/DNN Platform/Website/Resources/Shared/components/UserFileManager/UserFileManager.js @@ -123,7 +123,7 @@ }); $wrap.dialog({ - dialogClass: opts.dialogClass, + classes: opts.classes, width: opts.width, minHeight: opts.minHeight, title: opts.title, @@ -181,7 +181,7 @@ $.fn.userFileManager.defaultOptions = { openTriggerScope: 'body', // defines parent scope for openTriggerSelector, allows for event delegation openTriggerSelector: '#photoFromSite', // defined in template, opens dialog - dialogClass: 'dnnFormPopup fileManagerPopup', + classes: { "ui-dialog": "dnnFormPopup fileManagerPopup" }, width: '700px', // dialog width minHeight: '400px', // dialog height getItemsServiceUrl: '/API/Journal/UserFile/GetItems', diff --git a/DNN Platform/Website/Resources/Shared/scripts/dnn.jquery.js b/DNN Platform/Website/Resources/Shared/scripts/dnn.jquery.js index ba9dd2b5d35..87352fe0395 100644 --- a/DNN Platform/Website/Resources/Shared/scripts/dnn.jquery.js +++ b/DNN Platform/Website/Resources/Shared/scripts/dnn.jquery.js @@ -156,7 +156,7 @@ resizable: false, modal: true, title: 'Confirm', - dialogClass: 'dnnFormPopup dnnClear', + classes: { "ui-dialog": "dnnFormPopup dnnClear" }, isButton: false }; @@ -201,7 +201,7 @@ resizable: false, modal: true, buttonOkClass: 'dnnPrimaryAction', - dialogClass: 'dnnFormPopup dnnClear' + classes: { "ui-dialog": "dnnFormPopup dnnClear" }, }; })(jQuery); diff --git a/DNN Platform/Website/Resources/Shared/scripts/dnn.logViewer.js b/DNN Platform/Website/Resources/Shared/scripts/dnn.logViewer.js index 1ca7b60adae..2f9c10ae1ab 100644 --- a/DNN Platform/Website/Resources/Shared/scripts/dnn.logViewer.js +++ b/DNN Platform/Website/Resources/Shared/scripts/dnn.logViewer.js @@ -33,7 +33,7 @@ modal: true, autoOpen: true, title: data.Title, - dialogClass: "dnnFormPopup", + classes: { "ui-dialog": "dnnFormPopup" }, position: "center", width: 800, height: 480, diff --git a/DNN Platform/Website/js/Debug/dnn.modalpopup.js b/DNN Platform/Website/js/Debug/dnn.modalpopup.js index 4b0736db605..11349895251 100644 --- a/DNN Platform/Website/js/Debug/dnn.modalpopup.js +++ b/DNN Platform/Website/js/Debug/dnn.modalpopup.js @@ -178,7 +178,9 @@ $modal.dialog({ modal: true, autoOpen: true, - dialogClass: "dnnFormPopup", + classes: { + 'ui-dialog': 'dnnFormPopup', + }, position: { my: "center", at: "center" }, minWidth: width, minHeight: height, @@ -263,7 +265,9 @@ $modal.dialog({ modal: true, autoOpen: true, - dialogClass: "dnnFormPopup dnnFormPopupMobileView", + classes: { + 'ui-dialog': 'dnnFormPopup dnnFormPopupMobileView' + }, resizable: false, closeOnEscape: true, refresh: refresh, diff --git a/DNN Platform/Website/js/dnn.modalpopup.js b/DNN Platform/Website/js/dnn.modalpopup.js index 358e4ea2256..233049d0d37 100644 --- a/DNN Platform/Website/js/dnn.modalpopup.js +++ b/DNN Platform/Website/js/dnn.modalpopup.js @@ -1 +1 @@ -!function(o,e){function i(o){for(var e=i.options,t=e.parser[e.strictMode?"strict":"loose"].exec(o),n={},a=14;a--;)n[e.key[a]]=t[a]||"";return n[e.q.name]={},n[e.key[12]].replace(e.q.parser,function(o,i,t){i&&(n[e.q.name][i]=t)}),n}i.options={strictMode:!1,key:["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],q:{name:"queryKey",parser:/(?:^|&)([^&=]*)=?([^&]*)/g},parser:{strict:/^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,loose:/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/}};var t=function(){var e=!1;return function(o){(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(o)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(o.substr(0,4)))&&(e=!0)}(navigator.userAgent||navigator.vendor||o.opera),e}();o.dnnModal={load:function(){try{if(void 0!==parent.location.href){var o=parent;if(void 0!==o.parent.$find)if(-1==location.href.indexOf("popUp")||o.location.href.indexOf("popUp")>-1){var e=o.jQuery("#iPopUp"),i=e.dialog("option","refresh"),t=e.dialog("option","closingUrl"),n=e.dialog("option","minWidth"),a=e.dialog("option","minHeight"),r=e.dialog("option","showReturn");t||(t=location.href),!0===e.dialog("isOpen")&&e.dialog("option",{close:function(o,e){dnnModal.refreshPopup({url:t,width:n,height:a,showReturn:r,refresh:i})}}).dialog("close")}else o.jQuery("#iPopUp").dialog({autoOpen:!1,title:document.title})}return!1}catch(o){return!0}},show:function(n,a,r,l,d,s){var p=e("#iPopUp");p.length&&(p[0].src="about:blank",p.remove()),p=e(''),e(document.body).append(p),e(document).find("html").css("overflow","hidden");for(var c=document.styleSheets,h=!1,m=0,g=c.length;m-1){h=!0;break}}var f=!h&&(e(o).width()<481||t);f?e("html").addClass("mobileView"):e("html").removeClass("mobileView");var w=0,b=function(){p.prev(".dnnLoading").remove()},v=function(){p.on("load",function(){b();var e=document.getElementById("iPopUp"),t=o.location.hostname.toLowerCase(),a=o.location.port.toLowerCase(),r=i(n),l=r.host.toLowerCase(),d=r.port.toLowerCase();if(l=l||t,d=d||a,t===l&&a===d)try{if(f){var s=e.contentDocument.body,c=e.contentDocument.documentElement;c.style.width=w+"px",s.className+="mobileView dnnFormPopup dnnFormPopupMobileView";var h=Math.max(s.scrollHeight,s.offsetHeight,c.clientHeight,c.scrollHeight,c.offsetHeight);p.css("height",h+100).dialog("option","position",{my:"top",at:"top"})}e.contentWindow.dnnModal.show=function(o,e,i,t,n,a){var r=parent.jQuery("#iPopUp");a||(a=location.href),r.dialog("isOpen")&&r.dialog("option",{close:function(){parent.dnnModal.show(o,e,i,t,n,a)}}).dialog("close")}}catch(o){}}),p[0].src=n,"function"==typeof e.ui.dialog.prototype.options.open&&e.ui.dialog.prototype.options.open.apply(this,arguments)};if(f){w=e(o).width()-100;var y=e("body").css("height");p.dialog({modal:!0,autoOpen:!0,dialogClass:"dnnFormPopup dnnFormPopupMobileView",resizable:!1,closeOnEscape:!0,refresh:d,showReturn:a,closingUrl:s,minHeight:r,position:{my:"top",at:"top"},draggable:!1,open:function(){e("#Form").hide(),e("body").css("height","auto"),p.parent().css({width:"auto",left:"0",right:"0",top:"0","box-shadow":"none"}),o.scrollTo(0,0),v()},close:function(){e("#Form").show(),y&&e("body").css("height",y),o.scrollTo(0,0),o.dnnModal.closePopUp(d,s)}})}else if(p.dialog({modal:!0,autoOpen:!0,dialogClass:"dnnFormPopup",position:{my:"center",at:"center"},minWidth:l,minHeight:r,maxWidth:1920,maxHeight:1080,resizable:!0,closeOnEscape:!0,refresh:d,showReturn:a,closingUrl:s,open:v,close:function(){o.dnnModal.closePopUp(d,s)}}).width(l-11).height(r-11),0===p.parent().find(".ui-dialog-title").next("a.dnnModalCtrl").length){var k=e('');p.parent().find(".ui-dialog-titlebar-close").wrap(k);var x=e('Max');p.parent().find(".ui-dialog-titlebar-close").before(x),x.click(function(i){i.preventDefault();var t,n,a=e(o),r="center",l="center",d=0,s=0;if(e("button.ui-dialog-titlebar-close").length&&(s=e("button.ui-dialog-titlebar-close").parent(".dnnModalCtrl").height(),d=e("button.ui-dialog-titlebar-close").parent(".dnnModalCtrl").width()),p.data("isMaximized")){var c=p.data("height")+100;c>=a.height()&&(c=p.data("height")),t=c-s,n=p.data("width"),p.data("isMaximized",!1)}else{p.data("height",p.dialog("option","minHeight")).data("width",p.dialog("option","minWidth"));var h=0;e("#personaBar-iframe").length&&(h=e("#personaBar-iframe").width()),n=a.outerWidth()-h-d/7.5-40,t=a.height()-s,r="right-"+d/5.5+" center",l="right center-"+s/11,p.data("isMaximized",!0)}p.dialog("option","height",t),p.dialog("option","width",n),p.dialog("option","position",{my:r,at:l,of:o})})}if(function(){var o=e('
');o.css({width:p.width(),height:p.height()}),p.before(o)}(),"true"===a.toString())return!1},closePopUp:function(o,i){var t=parent,n=t.jQuery("#iPopUp");void 0!==o&&null!=o||(o=!0),"true"==o.toString()?(void 0!==i&&""!=i||(i=t.location.href),t.location.href=i,n.hide()):n.dialog("option","close",null).dialog("close"),e(t.document).find("html").css("overflow","")},refreshPopup:function(o){var e=parent,i=e.parent;e.location.href!==i.location.href&&e.location.href!==o.url?i.dnnModal.show(o.url,o.showReturn,o.height,o.width,o.refresh,o.closingUrl):dnnModal.closePopUp(o.refresh,o.url)}},o.dnnModal.load()}(window,jQuery); \ No newline at end of file +!function(o,e){function i(o){for(var e=i.options,t=e.parser[e.strictMode?"strict":"loose"].exec(o),n={},a=14;a--;)n[e.key[a]]=t[a]||"";return n[e.q.name]={},n[e.key[12]].replace(e.q.parser,function(o,i,t){i&&(n[e.q.name][i]=t)}),n}i.options={strictMode:!1,key:["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],q:{name:"queryKey",parser:/(?:^|&)([^&=]*)=?([^&]*)/g},parser:{strict:/^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,loose:/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/}};var t=function(){var e=!1;return function(o){(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(o)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(o.substr(0,4)))&&(e=!0)}(navigator.userAgent||navigator.vendor||o.opera),e}();o.dnnModal={load:function(){try{if(void 0!==parent.location.href){var o=parent;if(void 0!==o.parent.$find)if(-1==location.href.indexOf("popUp")||o.location.href.indexOf("popUp")>-1){var e=o.jQuery("#iPopUp"),i=e.dialog("option","refresh"),t=e.dialog("option","closingUrl"),n=e.dialog("option","minWidth"),a=e.dialog("option","minHeight"),r=e.dialog("option","showReturn");t||(t=location.href),!0===e.dialog("isOpen")&&e.dialog("option",{close:function(o,e){dnnModal.refreshPopup({url:t,width:n,height:a,showReturn:r,refresh:i})}}).dialog("close")}else o.jQuery("#iPopUp").dialog({autoOpen:!1,title:document.title})}return!1}catch(o){return!0}},show:function(n,a,r,l,d,s){var p=e("#iPopUp");p.length&&(p[0].src="about:blank",p.remove()),p=e(''),e(document.body).append(p),e(document).find("html").css("overflow","hidden");for(var c=document.styleSheets,h=!1,m=0,g=c.length;m-1){h=!0;break}}var f=!h&&(e(o).width()<481||t);f?e("html").addClass("mobileView"):e("html").removeClass("mobileView");var w=0,b=function(){p.prev(".dnnLoading").remove()},v=function(){p.on("load",function(){b();var e=document.getElementById("iPopUp"),t=o.location.hostname.toLowerCase(),a=o.location.port.toLowerCase(),r=i(n),l=r.host.toLowerCase(),d=r.port.toLowerCase();if(l=l||t,d=d||a,t===l&&a===d)try{if(f){var s=e.contentDocument.body,c=e.contentDocument.documentElement;c.style.width=w+"px",s.className+="mobileView dnnFormPopup dnnFormPopupMobileView";var h=Math.max(s.scrollHeight,s.offsetHeight,c.clientHeight,c.scrollHeight,c.offsetHeight);p.css("height",h+100).dialog("option","position",{my:"top",at:"top"})}e.contentWindow.dnnModal.show=function(o,e,i,t,n,a){var r=parent.jQuery("#iPopUp");a||(a=location.href),r.dialog("isOpen")&&r.dialog("option",{close:function(){parent.dnnModal.show(o,e,i,t,n,a)}}).dialog("close")}}catch(o){}}),p[0].src=n,"function"==typeof e.ui.dialog.prototype.options.open&&e.ui.dialog.prototype.options.open.apply(this,arguments)};if(f){w=e(o).width()-100;var y=e("body").css("height");p.dialog({modal:!0,autoOpen:!0,classes:{"ui-dialog": "dnnFormPopup dnnFormPopupMobileView"},resizable:!1,closeOnEscape:!0,refresh:d,showReturn:a,closingUrl:s,minHeight:r,position:{my:"top",at:"top"},draggable:!1,open:function(){e("#Form").hide(),e("body").css("height","auto"),p.parent().css({width:"auto",left:"0",right:"0",top:"0","box-shadow":"none"}),o.scrollTo(0,0),v()},close:function(){e("#Form").show(),y&&e("body").css("height",y),o.scrollTo(0,0),o.dnnModal.closePopUp(d,s)}})}else if(p.dialog({modal:!0,autoOpen:!0,classes:{"ui-dialog":"dnnFormPopup"},position:{my:"center",at:"center"},minWidth:l,minHeight:r,maxWidth:1920,maxHeight:1080,resizable:!0,closeOnEscape:!0,refresh:d,showReturn:a,closingUrl:s,open:v,close:function(){o.dnnModal.closePopUp(d,s)}}).width(l-11).height(r-11),0===p.parent().find(".ui-dialog-title").next("a.dnnModalCtrl").length){var k=e('');p.parent().find(".ui-dialog-titlebar-close").wrap(k);var x=e('Max');p.parent().find(".ui-dialog-titlebar-close").before(x),x.click(function(i){i.preventDefault();var t,n,a=e(o),r="center",l="center",d=0,s=0;if(e("button.ui-dialog-titlebar-close").length&&(s=e("button.ui-dialog-titlebar-close").parent(".dnnModalCtrl").height(),d=e("button.ui-dialog-titlebar-close").parent(".dnnModalCtrl").width()),p.data("isMaximized")){var c=p.data("height")+100;c>=a.height()&&(c=p.data("height")),t=c-s,n=p.data("width"),p.data("isMaximized",!1)}else{p.data("height",p.dialog("option","minHeight")).data("width",p.dialog("option","minWidth"));var h=0;e("#personaBar-iframe").length&&(h=e("#personaBar-iframe").width()),n=a.outerWidth()-h-d/7.5-40,t=a.height()-s,r="right-"+d/5.5+" center",l="right center-"+s/11,p.data("isMaximized",!0)}p.dialog("option","height",t),p.dialog("option","width",n),p.dialog("option","position",{my:r,at:l,of:o})})}if(function(){var o=e('
');o.css({width:p.width(),height:p.height()}),p.before(o)}(),"true"===a.toString())return!1},closePopUp:function(o,i){var t=parent,n=t.jQuery("#iPopUp");void 0!==o&&null!=o||(o=!0),"true"==o.toString()?(void 0!==i&&""!=i||(i=t.location.href),t.location.href=i,n.hide()):n.dialog("option","close",null).dialog("close"),e(t.document).find("html").css("overflow","")},refreshPopup:function(o){var e=parent,i=e.parent;e.location.href!==i.location.href&&e.location.href!==o.url?i.dnnModal.show(o.url,o.showReturn,o.height,o.width,o.refresh,o.closingUrl):dnnModal.closePopUp(o.refresh,o.url)}},o.dnnModal.load()}(window,jQuery); \ No newline at end of file From d89c4867cfdb95adb02587a04eb0c71807dc26e8 Mon Sep 17 00:00:00 2001 From: Brian Dukes Date: Tue, 21 Oct 2025 14:08:29 -0500 Subject: [PATCH 088/199] Bump ESLint to 9.38.0 Bump typescript-eslint to 8.46.2 Bump globals to 16.4.0 Bump @eslint/compat to 1.4.0 --- DNN Platform/Dnn.ClientSide/package.json | 2 +- .../ResourceManager.Web/package.json | 6 +- .../ClientSide/AdminLogs.Web/package.json | 4 +- .../ClientSide/Bundle.Web/package.json | 4 +- .../ClientSide/Dnn.React.Common/package.json | 4 +- .../ClientSide/Extensions.Web/package.json | 4 +- .../ClientSide/Licensing.Web/package.json | 4 +- .../ClientSide/Pages.Web/package.json | 4 +- .../ClientSide/Prompt.Web/package.json | 4 +- .../ClientSide/Roles.Web/package.json | 4 +- .../ClientSide/Security.Web/package.json | 4 +- .../ClientSide/Seo.Web/package.json | 4 +- .../ClientSide/Servers.Web/package.json | 4 +- .../ClientSide/SiteGroups.Web/package.json | 4 +- .../SiteImportExport.Web/package.json | 4 +- .../ClientSide/SiteSettings.Web/package.json | 4 +- .../ClientSide/Sites.Web/package.json | 4 +- .../Sites.Web/src/_exportables/package.json | 4 +- .../ClientSide/Styles.Web/package.json | 4 +- .../ClientSide/TaskScheduler.Web/package.json | 4 +- .../ClientSide/Themes.Web/package.json | 4 +- .../ClientSide/Users.Web/package.json | 4 +- .../Users.Web/src/_exportables/package.json | 2 +- .../ClientSide/Vocabularies.Web/package.json | 4 +- yarn.lock | 446 ++++++++++-------- 25 files changed, 304 insertions(+), 236 deletions(-) diff --git a/DNN Platform/Dnn.ClientSide/package.json b/DNN Platform/Dnn.ClientSide/package.json index d2d59f70609..f8bcd71f067 100644 --- a/DNN Platform/Dnn.ClientSide/package.json +++ b/DNN Platform/Dnn.ClientSide/package.json @@ -23,7 +23,7 @@ "chokidar": "^4.0.3", "cssnano": "^7.0.6", "esbuild": "^0.25.0", - "eslint": "^9.18.0", + "eslint": "^9.38.0", "modern-normalize": "^3.0.1", "postcss": "^8.5.1", "postcss-banner": "^4.0.1", diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/package.json b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/package.json index 75baaa42ca3..f79c31f3d2d 100644 --- a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/package.json +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/package.json @@ -32,15 +32,15 @@ "license": "MIT", "devDependencies": { "@dnncommunity/dnn-elements": "^0.27.5", - "@eslint/js": "^9.27.0", + "@eslint/js": "^9.38.0", "@stencil/eslint-plugin": "^1.0.0", "@stencil/sass": "^3.0.12", "@stencil/store": "^2.0.16", "@types/node": "^22.9.0", "@typescript-eslint/utils": "^8.32.1", - "eslint": "^9.27.0", + "eslint": "^9.38.0", "jiti": "^2.4.2", "typescript": "^5.8.3", - "typescript-eslint": "^8.32.1" + "typescript-eslint": "^8.46.2" } } diff --git a/Dnn.AdminExperience/ClientSide/AdminLogs.Web/package.json b/Dnn.AdminExperience/ClientSide/AdminLogs.Web/package.json index c05fc4775bc..9cfb1684082 100644 --- a/Dnn.AdminExperience/ClientSide/AdminLogs.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/AdminLogs.Web/package.json @@ -23,11 +23,11 @@ "create-react-class": "^15.7.0", "css-loader": "^7.1.2", "es6-object-assign": "1.1.0", - "eslint": "9.28.0", + "eslint": "9.38.0", "eslint-plugin-react": "7.37.5", "eslint-webpack-plugin": "^5.0.1", "file-loader": "4.2.0", - "globals": "^16.1.0", + "globals": "^16.4.0", "i18n-webpack-plugin": "1.0.0", "less": "4.1.3", "less-loader": "12.2.0", diff --git a/Dnn.AdminExperience/ClientSide/Bundle.Web/package.json b/Dnn.AdminExperience/ClientSide/Bundle.Web/package.json index f0b8cd64931..96a7bd8c02f 100644 --- a/Dnn.AdminExperience/ClientSide/Bundle.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Bundle.Web/package.json @@ -23,11 +23,11 @@ "css-loader": "^7.1.2", "dayjs": "^1.11.9", "es6-promise": "4.2.8", - "eslint": "9.28.0", + "eslint": "9.38.0", "eslint-plugin-react": "7.37.5", "eslint-webpack-plugin": "^5.0.1", "file-loader": "4.2.0", - "globals": "^16.1.0", + "globals": "^16.4.0", "json-loader": "^0.5.7", "less": "4.1.3", "less-loader": "12.2.0", diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/package.json b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/package.json index 8dc99db66f9..43beca40c7b 100644 --- a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/package.json +++ b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/package.json @@ -52,7 +52,7 @@ "@babel/plugin-transform-object-assign": "^7.25.9", "@babel/preset-env": "^7.26.0", "@babel/preset-react": "^7.25.9", - "@eslint/compat": "^1.2.9", + "@eslint/compat": "^1.4.0", "@storybook/addon-docs": "9.0.4", "@storybook/addon-onboarding": "9.0.4", "@storybook/addon-webpack5-compiler-swc": "4.0.1", @@ -67,7 +67,7 @@ "enzyme": "^3.11.0", "enzyme-adapter-react-16": "^1.15.7", "enzyme-to-json": "^3.6.2", - "eslint": "^9.25.1", + "eslint": "^9.38.0", "eslint-import-resolver-node": "^0.3.9", "eslint-import-resolver-webpack": "^0.13.10", "eslint-plugin-filenames": "^1.3.2", diff --git a/Dnn.AdminExperience/ClientSide/Extensions.Web/package.json b/Dnn.AdminExperience/ClientSide/Extensions.Web/package.json index 1a31dbce27c..946abe179c6 100644 --- a/Dnn.AdminExperience/ClientSide/Extensions.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Extensions.Web/package.json @@ -21,11 +21,11 @@ "babel-polyfill": "6.26.0", "create-react-class": "^15.7.0", "css-loader": "^7.1.2", - "eslint": "9.28.0", + "eslint": "9.38.0", "eslint-plugin-react": "7.37.5", "eslint-webpack-plugin": "^5.0.1", "file-loader": "6.2.0", - "globals": "^16.1.0", + "globals": "^16.4.0", "less": "4.1.3", "less-loader": "12.2.0", "prop-types": "^15.8.1", diff --git a/Dnn.AdminExperience/ClientSide/Licensing.Web/package.json b/Dnn.AdminExperience/ClientSide/Licensing.Web/package.json index a45aa3e1bbd..5eec8b8af40 100644 --- a/Dnn.AdminExperience/ClientSide/Licensing.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Licensing.Web/package.json @@ -23,11 +23,11 @@ "babel-polyfill": "6.26.0", "css-loader": "^7.1.2", "es6-object-assign": "1.1.0", - "eslint": "9.28.0", + "eslint": "9.38.0", "eslint-plugin-react": "7.37.5", "eslint-webpack-plugin": "^5.0.1", "file-loader": "6.2.0", - "globals": "^16.1.0", + "globals": "^16.4.0", "less": "4.1.3", "less-loader": "12.2.0", "prop-types": "^15.8.1", diff --git a/Dnn.AdminExperience/ClientSide/Pages.Web/package.json b/Dnn.AdminExperience/ClientSide/Pages.Web/package.json index 57fc5b29d67..64944b624eb 100644 --- a/Dnn.AdminExperience/ClientSide/Pages.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Pages.Web/package.json @@ -39,11 +39,11 @@ "css-loader": "^7.1.2", "enzyme": "^3.11.0", "enzyme-adapter-react-16": "^1.15.7", - "eslint": "^9.25.1", + "eslint": "^9.38.0", "eslint-plugin-react": "7.37.5", "eslint-webpack-plugin": "^5.0.1", "file-loader": "6.2.0", - "globals": "^16.1.0", + "globals": "^16.4.0", "jest": "^28.1.3", "less": "4.1.3", "less-loader": "12.2.0", diff --git a/Dnn.AdminExperience/ClientSide/Prompt.Web/package.json b/Dnn.AdminExperience/ClientSide/Prompt.Web/package.json index b3823e260df..60e49501456 100644 --- a/Dnn.AdminExperience/ClientSide/Prompt.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Prompt.Web/package.json @@ -30,14 +30,14 @@ "enzyme": "^3.11.0", "enzyme-adapter-react-16": "^1.15.7", "es6-object-assign": "1.1.0", - "eslint": "9.28.0", + "eslint": "9.38.0", "eslint-plugin-react": "7.37.5", "eslint-webpack-plugin": "^5.0.1", "extract-text-webpack-plugin": "^3.0.2", "fbjs": "*", "fetch-mock": "^7.7.3", "file-loader": "6.2.0", - "globals": "^16.1.0", + "globals": "^16.4.0", "i18n-webpack-plugin": "1.0.0", "jest": "^28.1.3", "less": "4.1.3", diff --git a/Dnn.AdminExperience/ClientSide/Roles.Web/package.json b/Dnn.AdminExperience/ClientSide/Roles.Web/package.json index 0725b44084d..c132bf39f43 100644 --- a/Dnn.AdminExperience/ClientSide/Roles.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Roles.Web/package.json @@ -24,11 +24,11 @@ "create-react-class": "^15.7.0", "css-loader": "^7.1.2", "es6-object-assign": "^1.1.0", - "eslint": "9.28.0", + "eslint": "9.38.0", "eslint-plugin-react": "7.37.5", "eslint-webpack-plugin": "^5.0.1", "file-loader": "6.2.0", - "globals": "^16.1.0", + "globals": "^16.4.0", "less": "4.1.3", "less-loader": "12.2.0", "prop-types": "^15.8.1", diff --git a/Dnn.AdminExperience/ClientSide/Security.Web/package.json b/Dnn.AdminExperience/ClientSide/Security.Web/package.json index 80415bca292..d41ab85e58a 100644 --- a/Dnn.AdminExperience/ClientSide/Security.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Security.Web/package.json @@ -20,11 +20,11 @@ "babel-plugin-transform-react-remove-prop-types": "0.4.24", "create-react-class": "^15.7.0", "css-loader": "^7.1.2", - "eslint": "9.28.0", + "eslint": "9.38.0", "eslint-plugin-react": "7.37.5", "eslint-webpack-plugin": "^5.0.1", "file-loader": "6.2.0", - "globals": "^16.1.0", + "globals": "^16.4.0", "less": "4.1.3", "less-loader": "12.2.0", "prop-types": "^15.8.1", diff --git a/Dnn.AdminExperience/ClientSide/Seo.Web/package.json b/Dnn.AdminExperience/ClientSide/Seo.Web/package.json index 7fd055f3ef2..8b7710ed99c 100644 --- a/Dnn.AdminExperience/ClientSide/Seo.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Seo.Web/package.json @@ -25,11 +25,11 @@ "create-react-class": "^15.7.0", "css-loader": "^7.1.2", "es6-object-assign": "1.1.0", - "eslint": "9.28.0", + "eslint": "9.38.0", "eslint-plugin-react": "7.37.5", "eslint-webpack-plugin": "^5.0.1", "file-loader": "6.2.0", - "globals": "^16.1.0", + "globals": "^16.4.0", "less": "4.1.3", "less-loader": "12.2.0", "prop-types": "^15.8.1", diff --git a/Dnn.AdminExperience/ClientSide/Servers.Web/package.json b/Dnn.AdminExperience/ClientSide/Servers.Web/package.json index f174c680c14..eefd578ae18 100644 --- a/Dnn.AdminExperience/ClientSide/Servers.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Servers.Web/package.json @@ -24,11 +24,11 @@ "create-react-class": "^15.7.0", "css-loader": "^7.1.2", "dayjs": "^1.11.9", - "eslint": "9.28.0", + "eslint": "9.38.0", "eslint-plugin-react": "7.37.5", "eslint-webpack-plugin": "^5.0.1", "file-loader": "6.2.0", - "globals": "^16.1.0", + "globals": "^16.4.0", "less": "4.1.3", "less-loader": "12.2.0", "null-loader": "^4.0.1", diff --git a/Dnn.AdminExperience/ClientSide/SiteGroups.Web/package.json b/Dnn.AdminExperience/ClientSide/SiteGroups.Web/package.json index 4c609be0133..3ba8dd87c1a 100644 --- a/Dnn.AdminExperience/ClientSide/SiteGroups.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/SiteGroups.Web/package.json @@ -21,11 +21,11 @@ "babel-polyfill": "6.26.0", "create-react-class": "^15.7.0", "css-loader": "^7.1.2", - "eslint": "9.28.0", + "eslint": "9.38.0", "eslint-plugin-react": "7.37.5", "eslint-webpack-plugin": "^5.0.1", "file-loader": "6.2.0", - "globals": "^16.1.0", + "globals": "^16.4.0", "less": "4.1.3", "less-loader": "12.2.0", "prop-types": "^15.8.1", diff --git a/Dnn.AdminExperience/ClientSide/SiteImportExport.Web/package.json b/Dnn.AdminExperience/ClientSide/SiteImportExport.Web/package.json index a17074e1b0b..59a9fb37327 100644 --- a/Dnn.AdminExperience/ClientSide/SiteImportExport.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/SiteImportExport.Web/package.json @@ -25,10 +25,10 @@ "babel-polyfill": "6.26.0", "create-react-class": "^15.7.0", "css-loader": "^7.1.2", - "eslint": "9.28.0", + "eslint": "9.38.0", "eslint-plugin-react": "7.37.5", "eslint-webpack-plugin": "^5.0.1", - "globals": "^16.1.0", + "globals": "^16.4.0", "i18n-webpack-plugin": "1.0.0", "less": "4.1.3", "less-loader": "12.2.0", diff --git a/Dnn.AdminExperience/ClientSide/SiteSettings.Web/package.json b/Dnn.AdminExperience/ClientSide/SiteSettings.Web/package.json index 0c50fa47227..db118fd1d3f 100644 --- a/Dnn.AdminExperience/ClientSide/SiteSettings.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/SiteSettings.Web/package.json @@ -24,12 +24,12 @@ "babel-plugin-transform-react-remove-prop-types": "^0.4.24", "create-react-class": "^15.7.0", "css-loader": "^7.1.2", - "eslint": "9.28.0", + "eslint": "9.38.0", "eslint-plugin-jest": "^29.0.1", "eslint-plugin-react": "7.37.5", "eslint-webpack-plugin": "^5.0.1", "file-loader": "6.2.0", - "globals": "^16.1.0", + "globals": "^16.4.0", "jest": "^28.1.3", "less": "4.1.3", "less-loader": "12.2.0", diff --git a/Dnn.AdminExperience/ClientSide/Sites.Web/package.json b/Dnn.AdminExperience/ClientSide/Sites.Web/package.json index 7b26ed3df4d..cfdcdf4dca5 100644 --- a/Dnn.AdminExperience/ClientSide/Sites.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Sites.Web/package.json @@ -21,11 +21,11 @@ "babel-polyfill": "6.26.0", "create-react-class": "^15.7.0", "css-loader": "^7.1.2", - "eslint": "9.28.0", + "eslint": "9.38.0", "eslint-plugin-react": "7.37.5", "eslint-webpack-plugin": "^5.0.1", "file-loader": "6.2.0", - "globals": "^16.1.0", + "globals": "^16.4.0", "less": "4.1.3", "less-loader": "12.2.0", "prop-types": "^15.8.1", diff --git a/Dnn.AdminExperience/ClientSide/Sites.Web/src/_exportables/package.json b/Dnn.AdminExperience/ClientSide/Sites.Web/src/_exportables/package.json index 0cc32c26329..b8b7b2bb0f6 100644 --- a/Dnn.AdminExperience/ClientSide/Sites.Web/src/_exportables/package.json +++ b/Dnn.AdminExperience/ClientSide/Sites.Web/src/_exportables/package.json @@ -22,13 +22,13 @@ "create-react-class": "^15.7.0", "css-loader": "^7.1.2", "dayjs": "^1.11.9", - "eslint": "9.28.0", + "eslint": "9.38.0", "eslint-import-resolver-webpack": "^0.13.2", "eslint-plugin-filenames": "^1.3.2", "eslint-plugin-import": "^2.27.5", "eslint-plugin-react": "7.37.5", "eslint-webpack-plugin": "^5.0.1", - "globals": "^16.1.0", + "globals": "^16.4.0", "less": "4.1.3", "less-loader": "12.2.0", "null-loader": "^4.0.1", diff --git a/Dnn.AdminExperience/ClientSide/Styles.Web/package.json b/Dnn.AdminExperience/ClientSide/Styles.Web/package.json index 56432a1f963..7ab4e061e03 100644 --- a/Dnn.AdminExperience/ClientSide/Styles.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Styles.Web/package.json @@ -36,8 +36,8 @@ "@types/node": "^22.9.0", "@typescript-eslint/eslint-plugin": "^8.32.1", "@typescript-eslint/parser": "^8.32.1", - "eslint": "^9.27.0", + "eslint": "^9.38.0", "jiti": "^2.4.2", - "typescript-eslint": "^8.32.1" + "typescript-eslint": "^8.46.2" } } diff --git a/Dnn.AdminExperience/ClientSide/TaskScheduler.Web/package.json b/Dnn.AdminExperience/ClientSide/TaskScheduler.Web/package.json index b482601d29b..dc99b5209e8 100644 --- a/Dnn.AdminExperience/ClientSide/TaskScheduler.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/TaskScheduler.Web/package.json @@ -25,11 +25,11 @@ "create-react-class": "^15.7.0", "css-loader": "^7.1.2", "es6-object-assign": "1.1.0", - "eslint": "9.28.0", + "eslint": "9.38.0", "eslint-plugin-react": "7.37.5", "eslint-webpack-plugin": "^5.0.1", "file-loader": "6.2.0", - "globals": "^16.1.0", + "globals": "^16.4.0", "less": "4.1.3", "less-loader": "12.2.0", "prop-types": "^15.8.1", diff --git a/Dnn.AdminExperience/ClientSide/Themes.Web/package.json b/Dnn.AdminExperience/ClientSide/Themes.Web/package.json index 84add071627..85f8204383d 100644 --- a/Dnn.AdminExperience/ClientSide/Themes.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Themes.Web/package.json @@ -22,11 +22,11 @@ "babel-polyfill": "6.26.0", "create-react-class": "^15.7.0", "css-loader": "^7.1.2", - "eslint": "9.28.0", + "eslint": "9.38.0", "eslint-plugin-react": "7.37.5", "eslint-webpack-plugin": "^5.0.1", "file-loader": "6.2.0", - "globals": "^16.1.0", + "globals": "^16.4.0", "less": "4.1.3", "less-loader": "12.2.0", "prop-types": "^15.8.1", diff --git a/Dnn.AdminExperience/ClientSide/Users.Web/package.json b/Dnn.AdminExperience/ClientSide/Users.Web/package.json index e0c3f14596f..d9433837901 100644 --- a/Dnn.AdminExperience/ClientSide/Users.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Users.Web/package.json @@ -20,11 +20,11 @@ "babel-loader": "^8.3.0", "create-react-class": "^15.7.0", "css-loader": "^7.1.2", - "eslint": "9.28.0", + "eslint": "9.38.0", "eslint-plugin-react": "7.37.5", "eslint-webpack-plugin": "^5.0.1", "file-loader": "6.2.0", - "globals": "^16.1.0", + "globals": "^16.4.0", "jest": "^28.1.3", "less": "4.1.3", "less-loader": "12.2.0", diff --git a/Dnn.AdminExperience/ClientSide/Users.Web/src/_exportables/package.json b/Dnn.AdminExperience/ClientSide/Users.Web/src/_exportables/package.json index ba084ab60c6..8896ddc7736 100644 --- a/Dnn.AdminExperience/ClientSide/Users.Web/src/_exportables/package.json +++ b/Dnn.AdminExperience/ClientSide/Users.Web/src/_exportables/package.json @@ -21,7 +21,7 @@ "create-react-class": "^15.7.0", "css-loader": "^7.1.2", "dayjs": "^1.11.9", - "eslint": "9.28.0", + "eslint": "9.38.0", "eslint-import-resolver-webpack": "^0.13.2", "eslint-plugin-filenames": "^1.3.2", "eslint-plugin-import": "^2.27.5", diff --git a/Dnn.AdminExperience/ClientSide/Vocabularies.Web/package.json b/Dnn.AdminExperience/ClientSide/Vocabularies.Web/package.json index 31c30341513..f8b7531ed07 100644 --- a/Dnn.AdminExperience/ClientSide/Vocabularies.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Vocabularies.Web/package.json @@ -25,11 +25,11 @@ "create-react-class": "^15.7.0", "css-loader": "^7.1.2", "es6-object-assign": "1.1.0", - "eslint": "9.28.0", + "eslint": "9.38.0", "eslint-plugin-react": "7.37.5", "eslint-webpack-plugin": "^5.0.1", "file-loader": "6.2.0", - "globals": "^16.1.0", + "globals": "^16.4.0", "less": "4.1.3", "less-loader": "12.2.0", "object-path": "0.11.8", diff --git a/yarn.lock b/yarn.lock index 84f8a496a92..e7580f797de 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1651,7 +1651,7 @@ __metadata: "@babel/plugin-transform-object-assign": "npm:^7.25.9" "@babel/preset-env": "npm:^7.26.0" "@babel/preset-react": "npm:^7.25.9" - "@eslint/compat": "npm:^1.2.9" + "@eslint/compat": "npm:^1.4.0" "@storybook/addon-docs": "npm:9.0.4" "@storybook/addon-onboarding": "npm:9.0.4" "@storybook/addon-webpack5-compiler-swc": "npm:4.0.1" @@ -1667,7 +1667,7 @@ __metadata: enzyme: "npm:^3.11.0" enzyme-adapter-react-16: "npm:^1.15.7" enzyme-to-json: "npm:^3.6.2" - eslint: "npm:^9.25.1" + eslint: "npm:^9.38.0" eslint-import-resolver-node: "npm:^0.3.9" eslint-import-resolver-webpack: "npm:^0.13.10" eslint-plugin-filenames: "npm:^1.3.2" @@ -1929,7 +1929,7 @@ __metadata: languageName: node linkType: hard -"@eslint-community/eslint-utils@npm:^4.2.0, @eslint-community/eslint-utils@npm:^4.7.0": +"@eslint-community/eslint-utils@npm:^4.7.0": version: 4.7.0 resolution: "@eslint-community/eslint-utils@npm:4.7.0" dependencies: @@ -1940,6 +1940,17 @@ __metadata: languageName: node linkType: hard +"@eslint-community/eslint-utils@npm:^4.8.0": + version: 4.9.0 + resolution: "@eslint-community/eslint-utils@npm:4.9.0" + dependencies: + eslint-visitor-keys: "npm:^3.4.3" + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + checksum: 10/89b1eb3137e14c379865e60573f524fcc0ee5c4b0c7cd21090673e75e5a720f14b92f05ab2d02704c2314b67e67b6f96f3bb209ded6b890ced7b667aa4bf1fa2 + languageName: node + linkType: hard + "@eslint-community/regexpp@npm:^4.10.0, @eslint-community/regexpp@npm:^4.12.1": version: 4.12.1 resolution: "@eslint-community/regexpp@npm:4.12.1" @@ -1947,69 +1958,46 @@ __metadata: languageName: node linkType: hard -"@eslint/compat@npm:^1.2.9": - version: 1.3.1 - resolution: "@eslint/compat@npm:1.3.1" +"@eslint/compat@npm:^1.4.0": + version: 1.4.0 + resolution: "@eslint/compat@npm:1.4.0" + dependencies: + "@eslint/core": "npm:^0.16.0" peerDependencies: eslint: ^8.40 || 9 peerDependenciesMeta: eslint: optional: true - checksum: 10/688231f00b47cdeea58b23597466ac42daa232d6b7aff39393c4cf16126a588bc5d1604fd99b13c4755fc378ff4be11994dd39220aa2af77b06de16f077679a2 + checksum: 10/204f80bfde839f13bf1febe1a2de101e88ec5fdb29d9539239ccfc12b25b4edd81c2109fe642551e9ca3b8869f259d5ee08a67bbc6350ab4fde91c7231aad85b languageName: node linkType: hard -"@eslint/config-array@npm:^0.20.0": - version: 0.20.1 - resolution: "@eslint/config-array@npm:0.20.1" +"@eslint/config-array@npm:^0.21.1": + version: 0.21.1 + resolution: "@eslint/config-array@npm:0.21.1" dependencies: - "@eslint/object-schema": "npm:^2.1.6" + "@eslint/object-schema": "npm:^2.1.7" debug: "npm:^4.3.1" minimatch: "npm:^3.1.2" - checksum: 10/d72cc90f516c5730da5f37fa04aa8ba26ea0d92c7457ee77980902158f844f3483518272ccfe16f273c3313c3bfec8da713d4e51d3da49bdeccd34e919a2b903 + checksum: 10/6eaa0435972f735ce52d581f355a0b616e50a9b8a73304a7015398096e252798b9b3b968a67b524eefb0fdeacc57c4d960f0ec6432abe1c1e24be815b88c5d18 languageName: node linkType: hard -"@eslint/config-array@npm:^0.21.0": - version: 0.21.0 - resolution: "@eslint/config-array@npm:0.21.0" - dependencies: - "@eslint/object-schema": "npm:^2.1.6" - debug: "npm:^4.3.1" - minimatch: "npm:^3.1.2" - checksum: 10/f5a499e074ecf4b4a5efdca655418a12079d024b77d02fd35868eeb717c5bfdd8e32c6e8e1dd125330233a878026edda8062b13b4310169ba5bfee9623a67aa0 - languageName: node - linkType: hard - -"@eslint/config-helpers@npm:^0.2.1": - version: 0.2.3 - resolution: "@eslint/config-helpers@npm:0.2.3" - checksum: 10/1f5082248f65555cc666942f7c991a2cfd6821758fb45338f43b28ea0f6b77d0c48b35097400d9b8fe1b4b10150085452e0b8f2d6d9ba17a84e16a6c7e4b341d - languageName: node - linkType: hard - -"@eslint/config-helpers@npm:^0.3.0": - version: 0.3.0 - resolution: "@eslint/config-helpers@npm:0.3.0" - checksum: 10/b4c188f28cb8b76d4f4b49566ec1cc9d561bc888ef66ad34587151a212ff168afcf163493c72033149181f947cb950c3cca1525d7486303aae4dfde3e5399573 - languageName: node - linkType: hard - -"@eslint/core@npm:^0.14.0": - version: 0.14.0 - resolution: "@eslint/core@npm:0.14.0" +"@eslint/config-helpers@npm:^0.4.1": + version: 0.4.1 + resolution: "@eslint/config-helpers@npm:0.4.1" dependencies: - "@types/json-schema": "npm:^7.0.15" - checksum: 10/d9b060cf97468150675ddf4fb3db55edaa32467e0adf9f80919a5bfd15d0835ad7765456f4397ec2d16b0a1bb702af63f6d4712f94194d34fea118231ae1e2db + "@eslint/core": "npm:^0.16.0" + checksum: 10/e3e6ea4cd19f5a9b803b2d0b3f174d53fcd27415587e49943144994104a42845cf300ed6ffdbd149d958482a49de99c326f9ae4c18c9467727ec60ad36cb5ef9 languageName: node linkType: hard -"@eslint/core@npm:^0.15.1": - version: 0.15.1 - resolution: "@eslint/core@npm:0.15.1" +"@eslint/core@npm:^0.16.0": + version: 0.16.0 + resolution: "@eslint/core@npm:0.16.0" dependencies: "@types/json-schema": "npm:^7.0.15" - checksum: 10/f00062f0f18fbbfcf080315532340b01e18b729277245899844adb5bec3c9fe2991e1f134c633a15fdfbc4e8b631c2df167d241c49b37e02e937f8c22edfcd3a + checksum: 10/3cea45971b2d0114267b6101b673270b5d8047448cc7a8cbfdca0b0245e9d5e081cb25f13551dc7d55a090f98c13b33f0c4999f8ee8ab058537e6037629a0f71 languageName: node linkType: hard @@ -2030,34 +2018,27 @@ __metadata: languageName: node linkType: hard -"@eslint/js@npm:9.28.0": - version: 9.28.0 - resolution: "@eslint/js@npm:9.28.0" - checksum: 10/c2ab0416aef01f28f189525c9a86253f531852a1ed45db94a97f01bcc51d15720f38a8c201af7a7331eb1e80c991a7ef54c4be193b17540e48044672dba69bd8 - languageName: node - linkType: hard - -"@eslint/js@npm:9.30.1, @eslint/js@npm:^9.27.0": - version: 9.30.1 - resolution: "@eslint/js@npm:9.30.1" - checksum: 10/f32c8a42b1343b03613b92a4a7c4745d19a93e66ffb8fac18ccd066deaa200b2fc55f476bf0407d7748f663bc947ca78c0518f13f60cd9ed08d0ba8b7bb74370 +"@eslint/js@npm:9.38.0, @eslint/js@npm:^9.38.0": + version: 9.38.0 + resolution: "@eslint/js@npm:9.38.0" + checksum: 10/08ba53e3e631e2815ff33e0f48dccf87daf3841eb5605fa5980d18b88cd6dd4cd63b5829ac015e97eeb85807bf91efe7d4e1d4eaf6beb586bc01549b7660c4a2 languageName: node linkType: hard -"@eslint/object-schema@npm:^2.1.6": - version: 2.1.6 - resolution: "@eslint/object-schema@npm:2.1.6" - checksum: 10/266085c8d3fa6cd99457fb6350dffb8ee39db9c6baf28dc2b86576657373c92a568aec4bae7d142978e798b74c271696672e103202d47a0c148da39154351ed6 +"@eslint/object-schema@npm:^2.1.7": + version: 2.1.7 + resolution: "@eslint/object-schema@npm:2.1.7" + checksum: 10/946ef5d6235b4d1c0907c6c6e6429c8895f535380c562b7705c131f63f2e961b06e8785043c86a293da48e0a60c6286d98ba395b8b32ea55561fe6e4417cb7e4 languageName: node linkType: hard -"@eslint/plugin-kit@npm:^0.3.1": - version: 0.3.4 - resolution: "@eslint/plugin-kit@npm:0.3.4" +"@eslint/plugin-kit@npm:^0.4.0": + version: 0.4.0 + resolution: "@eslint/plugin-kit@npm:0.4.0" dependencies: - "@eslint/core": "npm:^0.15.1" + "@eslint/core": "npm:^0.16.0" levn: "npm:^0.4.1" - checksum: 10/9d22a43cbca18e04e818189b63ffabe9128aeea1cf820ffce1e1bcf6446b93778102afc61aff485213eb9bef5b104aad6100b9c9245c28bba566405353377da2 + checksum: 10/2c37ca00e352447215aeadcaff5765faead39695f1cb91cd3079a43261b234887caf38edc462811bb3401acf8c156c04882f87740df936838290c705351483be languageName: node linkType: hard @@ -4517,7 +4498,28 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/eslint-plugin@npm:8.36.0, @typescript-eslint/eslint-plugin@npm:^8.32.1": +"@typescript-eslint/eslint-plugin@npm:8.46.2": + version: 8.46.2 + resolution: "@typescript-eslint/eslint-plugin@npm:8.46.2" + dependencies: + "@eslint-community/regexpp": "npm:^4.10.0" + "@typescript-eslint/scope-manager": "npm:8.46.2" + "@typescript-eslint/type-utils": "npm:8.46.2" + "@typescript-eslint/utils": "npm:8.46.2" + "@typescript-eslint/visitor-keys": "npm:8.46.2" + graphemer: "npm:^1.4.0" + ignore: "npm:^7.0.0" + natural-compare: "npm:^1.4.0" + ts-api-utils: "npm:^2.1.0" + peerDependencies: + "@typescript-eslint/parser": ^8.46.2 + eslint: ^8.57.0 || ^9.0.0 + typescript: ">=4.8.4 <6.0.0" + checksum: 10/00c659fcc04c185e6cdfb6c7e52beae1935f1475fef4079193a719f93858b6255e07b4764fc7104e9524a4d0b7652e63616b93e7f112f1cba4e983d10383e224 + languageName: node + linkType: hard + +"@typescript-eslint/eslint-plugin@npm:^8.32.1": version: 8.36.0 resolution: "@typescript-eslint/eslint-plugin@npm:8.36.0" dependencies: @@ -4538,7 +4540,23 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/parser@npm:8.36.0, @typescript-eslint/parser@npm:^8.32.1": +"@typescript-eslint/parser@npm:8.46.2": + version: 8.46.2 + resolution: "@typescript-eslint/parser@npm:8.46.2" + dependencies: + "@typescript-eslint/scope-manager": "npm:8.46.2" + "@typescript-eslint/types": "npm:8.46.2" + "@typescript-eslint/typescript-estree": "npm:8.46.2" + "@typescript-eslint/visitor-keys": "npm:8.46.2" + debug: "npm:^4.3.4" + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: ">=4.8.4 <6.0.0" + checksum: 10/2ee394d880b5a9372ecf50ddbf70f66e9ecc16691a210dd40b5b152310a539005dfed13105e0adc81f1a9f49d86f7b78ddf3bf8d777fe84c179eb6a8be2fa56c + languageName: node + linkType: hard + +"@typescript-eslint/parser@npm:^8.32.1": version: 8.36.0 resolution: "@typescript-eslint/parser@npm:8.36.0" dependencies: @@ -4580,6 +4598,19 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/project-service@npm:8.46.2": + version: 8.46.2 + resolution: "@typescript-eslint/project-service@npm:8.46.2" + dependencies: + "@typescript-eslint/tsconfig-utils": "npm:^8.46.2" + "@typescript-eslint/types": "npm:^8.46.2" + debug: "npm:^4.3.4" + peerDependencies: + typescript: ">=4.8.4 <6.0.0" + checksum: 10/76ba446f86e83b4afd6dacbebc9a0737b5a3e0500a0712b37fea4f0141dcf4c9238e8e5a9a649cf609a4624cc575431506a2a56432aaa18d4c3a8cf2df9d1480 + languageName: node + linkType: hard + "@typescript-eslint/scope-manager@npm:8.36.0": version: 8.36.0 resolution: "@typescript-eslint/scope-manager@npm:8.36.0" @@ -4600,6 +4631,16 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/scope-manager@npm:8.46.2": + version: 8.46.2 + resolution: "@typescript-eslint/scope-manager@npm:8.46.2" + dependencies: + "@typescript-eslint/types": "npm:8.46.2" + "@typescript-eslint/visitor-keys": "npm:8.46.2" + checksum: 10/6a8a9b644ff57ca9e992348553f19f6e010d76ff4872d972d333a16952e93cce4bf5096a1fefe1af8b452bce963fde6c78410d15817e673b75176ec3241949e9 + languageName: node + linkType: hard + "@typescript-eslint/tsconfig-utils@npm:8.36.0, @typescript-eslint/tsconfig-utils@npm:^8.36.0": version: 8.36.0 resolution: "@typescript-eslint/tsconfig-utils@npm:8.36.0" @@ -4618,6 +4659,15 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/tsconfig-utils@npm:8.46.2, @typescript-eslint/tsconfig-utils@npm:^8.46.2": + version: 8.46.2 + resolution: "@typescript-eslint/tsconfig-utils@npm:8.46.2" + peerDependencies: + typescript: ">=4.8.4 <6.0.0" + checksum: 10/e459d131ca646cca6ad164593ca7e8c45ad3daa103a24e1e57fd47b5c1e5b5418948b749f02baa42e61103a496fc80d32ddd1841c11495bbcf37808b88bb0ef4 + languageName: node + linkType: hard + "@typescript-eslint/type-utils@npm:8.36.0": version: 8.36.0 resolution: "@typescript-eslint/type-utils@npm:8.36.0" @@ -4633,6 +4683,22 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/type-utils@npm:8.46.2": + version: 8.46.2 + resolution: "@typescript-eslint/type-utils@npm:8.46.2" + dependencies: + "@typescript-eslint/types": "npm:8.46.2" + "@typescript-eslint/typescript-estree": "npm:8.46.2" + "@typescript-eslint/utils": "npm:8.46.2" + debug: "npm:^4.3.4" + ts-api-utils: "npm:^2.1.0" + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: ">=4.8.4 <6.0.0" + checksum: 10/db5d3d782b44d31f828ebdbec44550c6f94fdcfac1164f59e3922f6413feed749d93df3977625fd5949aaff5c691cf4603a7cd93eaf7b19b9cf6fd91537fb8c7 + languageName: node + linkType: hard + "@typescript-eslint/types@npm:8.36.0, @typescript-eslint/types@npm:^8.36.0": version: 8.36.0 resolution: "@typescript-eslint/types@npm:8.36.0" @@ -4647,6 +4713,13 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/types@npm:8.46.2, @typescript-eslint/types@npm:^8.46.2": + version: 8.46.2 + resolution: "@typescript-eslint/types@npm:8.46.2" + checksum: 10/c641453c868b730ef64bd731cc47b19e1a5e45c090dfe9542ecd15b24c5a7b6dc94a8ef4e548b976aabcd1ca9dec1b766e417454b98ea59079795eb008226b38 + languageName: node + linkType: hard + "@typescript-eslint/typescript-estree@npm:8.36.0": version: 8.36.0 resolution: "@typescript-eslint/typescript-estree@npm:8.36.0" @@ -4687,6 +4760,26 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/typescript-estree@npm:8.46.2": + version: 8.46.2 + resolution: "@typescript-eslint/typescript-estree@npm:8.46.2" + dependencies: + "@typescript-eslint/project-service": "npm:8.46.2" + "@typescript-eslint/tsconfig-utils": "npm:8.46.2" + "@typescript-eslint/types": "npm:8.46.2" + "@typescript-eslint/visitor-keys": "npm:8.46.2" + debug: "npm:^4.3.4" + fast-glob: "npm:^3.3.2" + is-glob: "npm:^4.0.3" + minimatch: "npm:^9.0.4" + semver: "npm:^7.6.0" + ts-api-utils: "npm:^2.1.0" + peerDependencies: + typescript: ">=4.8.4 <6.0.0" + checksum: 10/4d2149ad97e7f7e2e4cf466932f52f38e90414d47341c5938e497fd0826d403db9896bbd5cc08e7488ad0d0ffb3817e6f18e9f0c623d8a8cda09af204f81aab8 + languageName: node + linkType: hard + "@typescript-eslint/utils@npm:8.36.0, @typescript-eslint/utils@npm:^8.32.1, @typescript-eslint/utils@npm:^8.8.1": version: 8.36.0 resolution: "@typescript-eslint/utils@npm:8.36.0" @@ -4702,6 +4795,21 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/utils@npm:8.46.2": + version: 8.46.2 + resolution: "@typescript-eslint/utils@npm:8.46.2" + dependencies: + "@eslint-community/eslint-utils": "npm:^4.7.0" + "@typescript-eslint/scope-manager": "npm:8.46.2" + "@typescript-eslint/types": "npm:8.46.2" + "@typescript-eslint/typescript-estree": "npm:8.46.2" + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: ">=4.8.4 <6.0.0" + checksum: 10/91f6216f858161c3f59b2e035e0abce68fcdc9fbe45cb693a111c11ce5352c42fe0b1145a91e538c5459ff81b5e3741a4b38189b97e0e1a756567b6467c7b6c9 + languageName: node + linkType: hard + "@typescript-eslint/utils@npm:^8.0.0": version: 8.45.0 resolution: "@typescript-eslint/utils@npm:8.45.0" @@ -4737,6 +4845,16 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/visitor-keys@npm:8.46.2": + version: 8.46.2 + resolution: "@typescript-eslint/visitor-keys@npm:8.46.2" + dependencies: + "@typescript-eslint/types": "npm:8.46.2" + eslint-visitor-keys: "npm:^4.2.1" + checksum: 10/4352629a33bc1619dc78d55eaec382be4c7e1059af02660f62bfdb22933021deaf98504d4030b8db74ec122e6d554e9015341f87aed729fb70fae613f12f55a4 + languageName: node + linkType: hard + "@vitest/expect@npm:3.0.9": version: 3.0.9 resolution: "@vitest/expect@npm:3.0.9" @@ -5108,11 +5226,11 @@ __metadata: create-react-class: "npm:^15.7.0" css-loader: "npm:^7.1.2" es6-object-assign: "npm:1.1.0" - eslint: "npm:9.28.0" + eslint: "npm:9.38.0" eslint-plugin-react: "npm:7.37.5" eslint-webpack-plugin: "npm:^5.0.1" file-loader: "npm:4.2.0" - globals: "npm:^16.1.0" + globals: "npm:^16.4.0" i18n-webpack-plugin: "npm:1.0.0" less: "npm:4.1.3" less-loader: "npm:12.2.0" @@ -8789,17 +8907,17 @@ __metadata: resolution: "dnn-resource-manager@workspace:DNN Platform/Modules/ResourceManager/ResourceManager.Web" dependencies: "@dnncommunity/dnn-elements": "npm:^0.27.5" - "@eslint/js": "npm:^9.27.0" + "@eslint/js": "npm:^9.38.0" "@stencil/core": "npm:^4.22.2" "@stencil/eslint-plugin": "npm:^1.0.0" "@stencil/sass": "npm:^3.0.12" "@stencil/store": "npm:^2.0.16" "@types/node": "npm:^22.9.0" "@typescript-eslint/utils": "npm:^8.32.1" - eslint: "npm:^9.27.0" + eslint: "npm:^9.38.0" jiti: "npm:^2.4.2" typescript: "npm:^5.8.3" - typescript-eslint: "npm:^8.32.1" + typescript-eslint: "npm:^8.46.2" languageName: unknown linkType: soft @@ -8818,11 +8936,11 @@ __metadata: babel-polyfill: "npm:6.26.0" create-react-class: "npm:^15.7.0" css-loader: "npm:^7.1.2" - eslint: "npm:9.28.0" + eslint: "npm:9.38.0" eslint-plugin-react: "npm:7.37.5" eslint-webpack-plugin: "npm:^5.0.1" file-loader: "npm:6.2.0" - globals: "npm:^16.1.0" + globals: "npm:^16.4.0" less: "npm:4.1.3" less-loader: "npm:12.2.0" prop-types: "npm:^15.8.1" @@ -8855,13 +8973,13 @@ __metadata: create-react-class: "npm:^15.7.0" css-loader: "npm:^7.1.2" dayjs: "npm:^1.11.9" - eslint: "npm:9.28.0" + eslint: "npm:9.38.0" eslint-import-resolver-webpack: "npm:^0.13.2" eslint-plugin-filenames: "npm:^1.3.2" eslint-plugin-import: "npm:^2.27.5" eslint-plugin-react: "npm:7.37.5" eslint-webpack-plugin: "npm:^5.0.1" - globals: "npm:^16.1.0" + globals: "npm:^16.4.0" less: "npm:4.1.3" less-loader: "npm:12.2.0" null-loader: "npm:^4.0.1" @@ -8890,7 +9008,7 @@ __metadata: create-react-class: "npm:^15.7.0" css-loader: "npm:^7.1.2" dayjs: "npm:^1.11.9" - eslint: "npm:9.28.0" + eslint: "npm:9.38.0" eslint-import-resolver-webpack: "npm:^0.13.2" eslint-plugin-filenames: "npm:^1.3.2" eslint-plugin-import: "npm:^2.27.5" @@ -8927,7 +9045,7 @@ __metadata: chokidar: "npm:^4.0.3" cssnano: "npm:^7.0.6" esbuild: "npm:^0.25.0" - eslint: "npm:^9.18.0" + eslint: "npm:^9.38.0" modern-normalize: "npm:^3.0.1" postcss: "npm:^8.5.1" postcss-banner: "npm:^4.0.1" @@ -10039,7 +10157,7 @@ __metadata: languageName: node linkType: hard -"eslint-scope@npm:^8.3.0, eslint-scope@npm:^8.4.0": +"eslint-scope@npm:^8.4.0": version: 8.4.0 resolution: "eslint-scope@npm:8.4.0" dependencies: @@ -10081,7 +10199,7 @@ __metadata: languageName: node linkType: hard -"eslint-visitor-keys@npm:^4.2.0, eslint-visitor-keys@npm:^4.2.1": +"eslint-visitor-keys@npm:^4.2.1": version: 4.2.1 resolution: "eslint-visitor-keys@npm:4.2.1" checksum: 10/3ee00fc6a7002d4b0ffd9dc99e13a6a7882c557329e6c25ab254220d71e5c9c4f89dca4695352949ea678eb1f3ba912a18ef8aac0a7fe094196fd92f441bfce2 @@ -10121,73 +10239,22 @@ __metadata: languageName: node linkType: hard -"eslint@npm:9.28.0": - version: 9.28.0 - resolution: "eslint@npm:9.28.0" +"eslint@npm:9.38.0, eslint@npm:^9.38.0": + version: 9.38.0 + resolution: "eslint@npm:9.38.0" dependencies: - "@eslint-community/eslint-utils": "npm:^4.2.0" + "@eslint-community/eslint-utils": "npm:^4.8.0" "@eslint-community/regexpp": "npm:^4.12.1" - "@eslint/config-array": "npm:^0.20.0" - "@eslint/config-helpers": "npm:^0.2.1" - "@eslint/core": "npm:^0.14.0" + "@eslint/config-array": "npm:^0.21.1" + "@eslint/config-helpers": "npm:^0.4.1" + "@eslint/core": "npm:^0.16.0" "@eslint/eslintrc": "npm:^3.3.1" - "@eslint/js": "npm:9.28.0" - "@eslint/plugin-kit": "npm:^0.3.1" + "@eslint/js": "npm:9.38.0" + "@eslint/plugin-kit": "npm:^0.4.0" "@humanfs/node": "npm:^0.16.6" "@humanwhocodes/module-importer": "npm:^1.0.1" "@humanwhocodes/retry": "npm:^0.4.2" "@types/estree": "npm:^1.0.6" - "@types/json-schema": "npm:^7.0.15" - ajv: "npm:^6.12.4" - chalk: "npm:^4.0.0" - cross-spawn: "npm:^7.0.6" - debug: "npm:^4.3.2" - escape-string-regexp: "npm:^4.0.0" - eslint-scope: "npm:^8.3.0" - eslint-visitor-keys: "npm:^4.2.0" - espree: "npm:^10.3.0" - esquery: "npm:^1.5.0" - esutils: "npm:^2.0.2" - fast-deep-equal: "npm:^3.1.3" - file-entry-cache: "npm:^8.0.0" - find-up: "npm:^5.0.0" - glob-parent: "npm:^6.0.2" - ignore: "npm:^5.2.0" - imurmurhash: "npm:^0.1.4" - is-glob: "npm:^4.0.0" - json-stable-stringify-without-jsonify: "npm:^1.0.1" - lodash.merge: "npm:^4.6.2" - minimatch: "npm:^3.1.2" - natural-compare: "npm:^1.4.0" - optionator: "npm:^0.9.3" - peerDependencies: - jiti: "*" - peerDependenciesMeta: - jiti: - optional: true - bin: - eslint: bin/eslint.js - checksum: 10/0cce6dd3a53724d849253992477fd9b05bf6de3dd6bb761605e07beb14f63b6d2eb38f83aeb4a026ff2e3eeb687ac84c1d4a23a9f3186bc15564f5e75fed908c - languageName: node - linkType: hard - -"eslint@npm:^9.18.0, eslint@npm:^9.25.1, eslint@npm:^9.27.0": - version: 9.30.1 - resolution: "eslint@npm:9.30.1" - dependencies: - "@eslint-community/eslint-utils": "npm:^4.2.0" - "@eslint-community/regexpp": "npm:^4.12.1" - "@eslint/config-array": "npm:^0.21.0" - "@eslint/config-helpers": "npm:^0.3.0" - "@eslint/core": "npm:^0.14.0" - "@eslint/eslintrc": "npm:^3.3.1" - "@eslint/js": "npm:9.30.1" - "@eslint/plugin-kit": "npm:^0.3.1" - "@humanfs/node": "npm:^0.16.6" - "@humanwhocodes/module-importer": "npm:^1.0.1" - "@humanwhocodes/retry": "npm:^0.4.2" - "@types/estree": "npm:^1.0.6" - "@types/json-schema": "npm:^7.0.15" ajv: "npm:^6.12.4" chalk: "npm:^4.0.0" cross-spawn: "npm:^7.0.6" @@ -10217,11 +10284,11 @@ __metadata: optional: true bin: eslint: bin/eslint.js - checksum: 10/bd3024f730c88a2d099455f5ec5be2d6293eaf1412eb5111427282e1060b7f87891168ccbded10b71fc7182e05151e42511ec29d4e0d4ece5e3151eaf8d54763 + checksum: 10/fb8971572dfedd1fd67a35a746d2ab399bef320a7f131fdccaec6416f4b4a028e762663c32ccf1a88f715aec6d1c5da066fdb11e20219a0156f1f3fc1a726713 languageName: node linkType: hard -"espree@npm:^10.0.1, espree@npm:^10.3.0, espree@npm:^10.4.0": +"espree@npm:^10.0.1, espree@npm:^10.4.0": version: 10.4.0 resolution: "espree@npm:10.4.0" dependencies: @@ -10403,11 +10470,11 @@ __metadata: css-loader: "npm:^7.1.2" dayjs: "npm:^1.11.9" es6-promise: "npm:4.2.8" - eslint: "npm:9.28.0" + eslint: "npm:9.38.0" eslint-plugin-react: "npm:7.37.5" eslint-webpack-plugin: "npm:^5.0.1" file-loader: "npm:4.2.0" - globals: "npm:^16.1.0" + globals: "npm:^16.4.0" json-loader: "npm:^0.5.7" less: "npm:4.1.3" less-loader: "npm:12.2.0" @@ -10531,11 +10598,11 @@ __metadata: babel-polyfill: "npm:6.26.0" create-react-class: "npm:^15.7.0" css-loader: "npm:^7.1.2" - eslint: "npm:9.28.0" + eslint: "npm:9.38.0" eslint-plugin-react: "npm:7.37.5" eslint-webpack-plugin: "npm:^5.0.1" file-loader: "npm:6.2.0" - globals: "npm:^16.1.0" + globals: "npm:^16.4.0" less: "npm:4.1.3" less-loader: "npm:12.2.0" prop-types: "npm:^15.8.1" @@ -11540,10 +11607,10 @@ __metadata: languageName: node linkType: hard -"globals@npm:^16.1.0": - version: 16.3.0 - resolution: "globals@npm:16.3.0" - checksum: 10/accb0939d993a1c461df8d961ce9911a9a96120929e0a61057ae8e75b7df0a8bf8089da0f4e3a476db0211156416fbd26e222a56f74b389a140b34481c0a72b0 +"globals@npm:^16.4.0": + version: 16.4.0 + resolution: "globals@npm:16.4.0" + checksum: 10/1627a9f42fb4c82d7af6a0c8b6cd616e00110908304d5f1ddcdf325998f3aed45a4b29d8a1e47870f328817805263e31e4f1673f00022b9c2b210552767921cf languageName: node linkType: hard @@ -14154,11 +14221,11 @@ __metadata: babel-polyfill: "npm:6.26.0" css-loader: "npm:^7.1.2" es6-object-assign: "npm:1.1.0" - eslint: "npm:9.28.0" + eslint: "npm:9.38.0" eslint-plugin-react: "npm:7.37.5" eslint-webpack-plugin: "npm:^5.0.1" file-loader: "npm:6.2.0" - globals: "npm:^16.1.0" + globals: "npm:^16.4.0" less: "npm:4.1.3" less-loader: "npm:12.2.0" prop-types: "npm:^15.8.1" @@ -16356,11 +16423,11 @@ __metadata: dayjs: "npm:^1.11.9" enzyme: "npm:^3.11.0" enzyme-adapter-react-16: "npm:^1.15.7" - eslint: "npm:^9.25.1" + eslint: "npm:^9.38.0" eslint-plugin-react: "npm:7.37.5" eslint-webpack-plugin: "npm:^5.0.1" file-loader: "npm:6.2.0" - globals: "npm:^16.1.0" + globals: "npm:^16.4.0" jest: "npm:^28.1.3" less: "npm:4.1.3" less-loader: "npm:12.2.0" @@ -17380,14 +17447,14 @@ __metadata: enzyme: "npm:^3.11.0" enzyme-adapter-react-16: "npm:^1.15.7" es6-object-assign: "npm:1.1.0" - eslint: "npm:9.28.0" + eslint: "npm:9.38.0" eslint-plugin-react: "npm:7.37.5" eslint-webpack-plugin: "npm:^5.0.1" extract-text-webpack-plugin: "npm:^3.0.2" fbjs: "npm:*" fetch-mock: "npm:^7.7.3" file-loader: "npm:6.2.0" - globals: "npm:^16.1.0" + globals: "npm:^16.4.0" html-react-parser: "npm:^5.2.5" i18n-webpack-plugin: "npm:1.0.0" jest: "npm:^28.1.3" @@ -18886,11 +18953,11 @@ __metadata: create-react-class: "npm:^15.7.0" css-loader: "npm:^7.1.2" es6-object-assign: "npm:^1.1.0" - eslint: "npm:9.28.0" + eslint: "npm:9.38.0" eslint-plugin-react: "npm:7.37.5" eslint-webpack-plugin: "npm:^5.0.1" file-loader: "npm:6.2.0" - globals: "npm:^16.1.0" + globals: "npm:^16.4.0" less: "npm:4.1.3" less-loader: "npm:12.2.0" prop-types: "npm:^15.8.1" @@ -19353,11 +19420,11 @@ __metadata: babel-plugin-transform-react-remove-prop-types: "npm:0.4.24" create-react-class: "npm:^15.7.0" css-loader: "npm:^7.1.2" - eslint: "npm:9.28.0" + eslint: "npm:9.38.0" eslint-plugin-react: "npm:7.37.5" eslint-webpack-plugin: "npm:^5.0.1" file-loader: "npm:6.2.0" - globals: "npm:^16.1.0" + globals: "npm:^16.4.0" less: "npm:4.1.3" less-loader: "npm:12.2.0" prop-types: "npm:^15.8.1" @@ -19484,11 +19551,11 @@ __metadata: create-react-class: "npm:^15.7.0" css-loader: "npm:^7.1.2" es6-object-assign: "npm:1.1.0" - eslint: "npm:9.28.0" + eslint: "npm:9.38.0" eslint-plugin-react: "npm:7.37.5" eslint-webpack-plugin: "npm:^5.0.1" file-loader: "npm:6.2.0" - globals: "npm:^16.1.0" + globals: "npm:^16.4.0" less: "npm:4.1.3" less-loader: "npm:12.2.0" prop-types: "npm:^15.8.1" @@ -19586,11 +19653,11 @@ __metadata: create-react-class: "npm:^15.7.0" css-loader: "npm:^7.1.2" dayjs: "npm:^1.11.9" - eslint: "npm:9.28.0" + eslint: "npm:9.38.0" eslint-plugin-react: "npm:7.37.5" eslint-webpack-plugin: "npm:^5.0.1" file-loader: "npm:6.2.0" - globals: "npm:^16.1.0" + globals: "npm:^16.4.0" less: "npm:4.1.3" less-loader: "npm:12.2.0" null-loader: "npm:^4.0.1" @@ -19857,10 +19924,10 @@ __metadata: babel-polyfill: "npm:6.26.0" create-react-class: "npm:^15.7.0" css-loader: "npm:^7.1.2" - eslint: "npm:9.28.0" + eslint: "npm:9.38.0" eslint-plugin-react: "npm:7.37.5" eslint-webpack-plugin: "npm:^5.0.1" - globals: "npm:^16.1.0" + globals: "npm:^16.4.0" i18n-webpack-plugin: "npm:1.0.0" less: "npm:4.1.3" less-loader: "npm:12.2.0" @@ -19907,12 +19974,12 @@ __metadata: babel-plugin-transform-react-remove-prop-types: "npm:^0.4.24" create-react-class: "npm:^15.7.0" css-loader: "npm:^7.1.2" - eslint: "npm:9.28.0" + eslint: "npm:9.38.0" eslint-plugin-jest: "npm:^29.0.1" eslint-plugin-react: "npm:7.37.5" eslint-webpack-plugin: "npm:^5.0.1" file-loader: "npm:6.2.0" - globals: "npm:^16.1.0" + globals: "npm:^16.4.0" jest: "npm:^28.1.3" less: "npm:4.1.3" less-loader: "npm:12.2.0" @@ -19952,11 +20019,11 @@ __metadata: babel-polyfill: "npm:6.26.0" create-react-class: "npm:^15.7.0" css-loader: "npm:^7.1.2" - eslint: "npm:9.28.0" + eslint: "npm:9.38.0" eslint-plugin-react: "npm:7.37.5" eslint-webpack-plugin: "npm:^5.0.1" file-loader: "npm:6.2.0" - globals: "npm:^16.1.0" + globals: "npm:^16.4.0" less: "npm:4.1.3" less-loader: "npm:12.2.0" prop-types: "npm:^15.8.1" @@ -20736,9 +20803,9 @@ __metadata: "@types/node": "npm:^22.9.0" "@typescript-eslint/eslint-plugin": "npm:^8.32.1" "@typescript-eslint/parser": "npm:^8.32.1" - eslint: "npm:^9.27.0" + eslint: "npm:^9.38.0" jiti: "npm:^2.4.2" - typescript-eslint: "npm:^8.32.1" + typescript-eslint: "npm:^8.46.2" languageName: unknown linkType: soft @@ -20928,11 +20995,11 @@ __metadata: create-react-class: "npm:^15.7.0" css-loader: "npm:^7.1.2" es6-object-assign: "npm:1.1.0" - eslint: "npm:9.28.0" + eslint: "npm:9.38.0" eslint-plugin-react: "npm:7.37.5" eslint-webpack-plugin: "npm:^5.0.1" file-loader: "npm:6.2.0" - globals: "npm:^16.1.0" + globals: "npm:^16.4.0" less: "npm:4.1.3" less-loader: "npm:12.2.0" prop-types: "npm:^15.8.1" @@ -20969,11 +21036,11 @@ __metadata: create-react-class: "npm:^15.7.0" css-loader: "npm:^7.1.2" es6-object-assign: "npm:1.1.0" - eslint: "npm:9.28.0" + eslint: "npm:9.38.0" eslint-plugin-react: "npm:7.37.5" eslint-webpack-plugin: "npm:^5.0.1" file-loader: "npm:6.2.0" - globals: "npm:^16.1.0" + globals: "npm:^16.4.0" less: "npm:4.1.3" less-loader: "npm:12.2.0" object-path: "npm:0.11.8" @@ -21078,11 +21145,11 @@ __metadata: babel-polyfill: "npm:6.26.0" create-react-class: "npm:^15.7.0" css-loader: "npm:^7.1.2" - eslint: "npm:9.28.0" + eslint: "npm:9.38.0" eslint-plugin-react: "npm:7.37.5" eslint-webpack-plugin: "npm:^5.0.1" file-loader: "npm:6.2.0" - globals: "npm:^16.1.0" + globals: "npm:^16.4.0" less: "npm:4.1.3" less-loader: "npm:12.2.0" prop-types: "npm:^15.8.1" @@ -21611,17 +21678,18 @@ __metadata: languageName: node linkType: hard -"typescript-eslint@npm:^8.32.1": - version: 8.36.0 - resolution: "typescript-eslint@npm:8.36.0" +"typescript-eslint@npm:^8.46.2": + version: 8.46.2 + resolution: "typescript-eslint@npm:8.46.2" dependencies: - "@typescript-eslint/eslint-plugin": "npm:8.36.0" - "@typescript-eslint/parser": "npm:8.36.0" - "@typescript-eslint/utils": "npm:8.36.0" + "@typescript-eslint/eslint-plugin": "npm:8.46.2" + "@typescript-eslint/parser": "npm:8.46.2" + "@typescript-eslint/typescript-estree": "npm:8.46.2" + "@typescript-eslint/utils": "npm:8.46.2" peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: ">=4.8.4 <5.9.0" - checksum: 10/d6aa937bd519c7c500b50f9b32085ba7022b52a19776b117b82692679dfb7ca129e13c078506a3b4232af2633687441a74575f824604c61f37132c1f14a5786d + typescript: ">=4.8.4 <6.0.0" + checksum: 10/cd1bbc5d33c0369f70032165224badf1a8a9f95f39c891e4f71c78ceea9e7b2d71e0516d8b38177a11217867f387788f3fa126381418581409e7a76cdfdfe909 languageName: node linkType: hard @@ -21987,11 +22055,11 @@ __metadata: babel-loader: "npm:^8.3.0" create-react-class: "npm:^15.7.0" css-loader: "npm:^7.1.2" - eslint: "npm:9.28.0" + eslint: "npm:9.38.0" eslint-plugin-react: "npm:7.37.5" eslint-webpack-plugin: "npm:^5.0.1" file-loader: "npm:6.2.0" - globals: "npm:^16.1.0" + globals: "npm:^16.4.0" jest: "npm:^28.1.3" less: "npm:4.1.3" less-loader: "npm:12.2.0" From 4ed9b8531198db0a1ee5d6dfa30b4ef4690468dc Mon Sep 17 00:00:00 2001 From: Brian Dukes Date: Tue, 21 Oct 2025 15:47:08 -0500 Subject: [PATCH 089/199] Bump ESLint-related packages Bump @babel/eslint-parser to 7.28.4 Bump @stencil/eslint-plugin to 1.1.0 Bump @typescript-eslint/eslint-plugin to 8.46.2 Bump @typescript-eslint/parser to 8.46.2 Bump @typescript-eslint/utils to 8.46.2 Bump eslint-import-resolver-webpack to 0.13.10 Bump eslint-plugin-import to 2.32.0 Bump eslint-plugin-react to 7.37.5 Bump eslint-plugin-storybook to 9.1.13 Bump eslint-webpack-plugin to 5.0.2 --- .../ResourceManager.Web/package.json | 4 +- .../ClientSide/AdminLogs.Web/package.json | 2 +- .../ClientSide/Bundle.Web/package.json | 2 +- .../ClientSide/Dnn.React.Common/package.json | 8 +- .../ClientSide/Extensions.Web/package.json | 2 +- .../ClientSide/Licensing.Web/package.json | 2 +- .../ClientSide/Pages.Web/package.json | 2 +- .../ClientSide/Prompt.Web/package.json | 2 +- .../ClientSide/Roles.Web/package.json | 2 +- .../ClientSide/Security.Web/package.json | 2 +- .../ClientSide/Seo.Web/package.json | 2 +- .../ClientSide/Servers.Web/package.json | 2 +- .../ClientSide/SiteGroups.Web/package.json | 2 +- .../SiteImportExport.Web/package.json | 2 +- .../ClientSide/SiteSettings.Web/package.json | 2 +- .../ClientSide/Sites.Web/package.json | 2 +- .../Sites.Web/src/_exportables/package.json | 6 +- .../ClientSide/Styles.Web/package.json | 6 +- .../ClientSide/TaskScheduler.Web/package.json | 2 +- .../ClientSide/Themes.Web/package.json | 2 +- .../ClientSide/Users.Web/package.json | 2 +- .../Users.Web/src/_exportables/package.json | 8 +- .../ClientSide/Vocabularies.Web/package.json | 2 +- yarn.lock | 240 +++++------------- 24 files changed, 101 insertions(+), 207 deletions(-) diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/package.json b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/package.json index f79c31f3d2d..8c2d14a0a16 100644 --- a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/package.json +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/package.json @@ -33,11 +33,11 @@ "devDependencies": { "@dnncommunity/dnn-elements": "^0.27.5", "@eslint/js": "^9.38.0", - "@stencil/eslint-plugin": "^1.0.0", + "@stencil/eslint-plugin": "^1.1.0", "@stencil/sass": "^3.0.12", "@stencil/store": "^2.0.16", "@types/node": "^22.9.0", - "@typescript-eslint/utils": "^8.32.1", + "@typescript-eslint/utils": "^8.46.2", "eslint": "^9.38.0", "jiti": "^2.4.2", "typescript": "^5.8.3", diff --git a/Dnn.AdminExperience/ClientSide/AdminLogs.Web/package.json b/Dnn.AdminExperience/ClientSide/AdminLogs.Web/package.json index 9cfb1684082..47ca676c642 100644 --- a/Dnn.AdminExperience/ClientSide/AdminLogs.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/AdminLogs.Web/package.json @@ -25,7 +25,7 @@ "es6-object-assign": "1.1.0", "eslint": "9.38.0", "eslint-plugin-react": "7.37.5", - "eslint-webpack-plugin": "^5.0.1", + "eslint-webpack-plugin": "^5.0.2", "file-loader": "4.2.0", "globals": "^16.4.0", "i18n-webpack-plugin": "1.0.0", diff --git a/Dnn.AdminExperience/ClientSide/Bundle.Web/package.json b/Dnn.AdminExperience/ClientSide/Bundle.Web/package.json index 96a7bd8c02f..3b3d7ec15d4 100644 --- a/Dnn.AdminExperience/ClientSide/Bundle.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Bundle.Web/package.json @@ -25,7 +25,7 @@ "es6-promise": "4.2.8", "eslint": "9.38.0", "eslint-plugin-react": "7.37.5", - "eslint-webpack-plugin": "^5.0.1", + "eslint-webpack-plugin": "^5.0.2", "file-loader": "4.2.0", "globals": "^16.4.0", "json-loader": "^0.5.7", diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/package.json b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/package.json index 43beca40c7b..c7305d313bf 100644 --- a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/package.json +++ b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/package.json @@ -46,7 +46,7 @@ }, "devDependencies": { "@babel/core": "^7.26.0", - "@babel/eslint-parser": "^7.27.1", + "@babel/eslint-parser": "^7.28.4", "@babel/eslint-plugin": "7.27.1", "@babel/plugin-proposal-object-rest-spread": "^7.20.7", "@babel/plugin-transform-object-assign": "^7.25.9", @@ -71,11 +71,11 @@ "eslint-import-resolver-node": "^0.3.9", "eslint-import-resolver-webpack": "^0.13.10", "eslint-plugin-filenames": "^1.3.2", - "eslint-plugin-import": "^2.31.0", + "eslint-plugin-import": "^2.32.0", "eslint-plugin-jest": "^29.0.1", "eslint-plugin-react": "7.37.5", - "eslint-plugin-storybook": "9.0.1", - "eslint-webpack-plugin": "^5.0.1", + "eslint-plugin-storybook": "9.1.13", + "eslint-webpack-plugin": "^5.0.2", "file-loader": "6.2.0", "less": "4.1.3", "less-loader": "12.2.0", diff --git a/Dnn.AdminExperience/ClientSide/Extensions.Web/package.json b/Dnn.AdminExperience/ClientSide/Extensions.Web/package.json index 946abe179c6..247bd1bbe8b 100644 --- a/Dnn.AdminExperience/ClientSide/Extensions.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Extensions.Web/package.json @@ -23,7 +23,7 @@ "css-loader": "^7.1.2", "eslint": "9.38.0", "eslint-plugin-react": "7.37.5", - "eslint-webpack-plugin": "^5.0.1", + "eslint-webpack-plugin": "^5.0.2", "file-loader": "6.2.0", "globals": "^16.4.0", "less": "4.1.3", diff --git a/Dnn.AdminExperience/ClientSide/Licensing.Web/package.json b/Dnn.AdminExperience/ClientSide/Licensing.Web/package.json index 5eec8b8af40..1acbe62c819 100644 --- a/Dnn.AdminExperience/ClientSide/Licensing.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Licensing.Web/package.json @@ -25,7 +25,7 @@ "es6-object-assign": "1.1.0", "eslint": "9.38.0", "eslint-plugin-react": "7.37.5", - "eslint-webpack-plugin": "^5.0.1", + "eslint-webpack-plugin": "^5.0.2", "file-loader": "6.2.0", "globals": "^16.4.0", "less": "4.1.3", diff --git a/Dnn.AdminExperience/ClientSide/Pages.Web/package.json b/Dnn.AdminExperience/ClientSide/Pages.Web/package.json index 64944b624eb..495ae3df858 100644 --- a/Dnn.AdminExperience/ClientSide/Pages.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Pages.Web/package.json @@ -41,7 +41,7 @@ "enzyme-adapter-react-16": "^1.15.7", "eslint": "^9.38.0", "eslint-plugin-react": "7.37.5", - "eslint-webpack-plugin": "^5.0.1", + "eslint-webpack-plugin": "^5.0.2", "file-loader": "6.2.0", "globals": "^16.4.0", "jest": "^28.1.3", diff --git a/Dnn.AdminExperience/ClientSide/Prompt.Web/package.json b/Dnn.AdminExperience/ClientSide/Prompt.Web/package.json index 60e49501456..a3e656e31c9 100644 --- a/Dnn.AdminExperience/ClientSide/Prompt.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Prompt.Web/package.json @@ -32,7 +32,7 @@ "es6-object-assign": "1.1.0", "eslint": "9.38.0", "eslint-plugin-react": "7.37.5", - "eslint-webpack-plugin": "^5.0.1", + "eslint-webpack-plugin": "^5.0.2", "extract-text-webpack-plugin": "^3.0.2", "fbjs": "*", "fetch-mock": "^7.7.3", diff --git a/Dnn.AdminExperience/ClientSide/Roles.Web/package.json b/Dnn.AdminExperience/ClientSide/Roles.Web/package.json index c132bf39f43..73860a054c3 100644 --- a/Dnn.AdminExperience/ClientSide/Roles.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Roles.Web/package.json @@ -26,7 +26,7 @@ "es6-object-assign": "^1.1.0", "eslint": "9.38.0", "eslint-plugin-react": "7.37.5", - "eslint-webpack-plugin": "^5.0.1", + "eslint-webpack-plugin": "^5.0.2", "file-loader": "6.2.0", "globals": "^16.4.0", "less": "4.1.3", diff --git a/Dnn.AdminExperience/ClientSide/Security.Web/package.json b/Dnn.AdminExperience/ClientSide/Security.Web/package.json index d41ab85e58a..c0a99d90a9e 100644 --- a/Dnn.AdminExperience/ClientSide/Security.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Security.Web/package.json @@ -22,7 +22,7 @@ "css-loader": "^7.1.2", "eslint": "9.38.0", "eslint-plugin-react": "7.37.5", - "eslint-webpack-plugin": "^5.0.1", + "eslint-webpack-plugin": "^5.0.2", "file-loader": "6.2.0", "globals": "^16.4.0", "less": "4.1.3", diff --git a/Dnn.AdminExperience/ClientSide/Seo.Web/package.json b/Dnn.AdminExperience/ClientSide/Seo.Web/package.json index 8b7710ed99c..642829c9c33 100644 --- a/Dnn.AdminExperience/ClientSide/Seo.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Seo.Web/package.json @@ -27,7 +27,7 @@ "es6-object-assign": "1.1.0", "eslint": "9.38.0", "eslint-plugin-react": "7.37.5", - "eslint-webpack-plugin": "^5.0.1", + "eslint-webpack-plugin": "^5.0.2", "file-loader": "6.2.0", "globals": "^16.4.0", "less": "4.1.3", diff --git a/Dnn.AdminExperience/ClientSide/Servers.Web/package.json b/Dnn.AdminExperience/ClientSide/Servers.Web/package.json index eefd578ae18..c12e7b5985d 100644 --- a/Dnn.AdminExperience/ClientSide/Servers.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Servers.Web/package.json @@ -26,7 +26,7 @@ "dayjs": "^1.11.9", "eslint": "9.38.0", "eslint-plugin-react": "7.37.5", - "eslint-webpack-plugin": "^5.0.1", + "eslint-webpack-plugin": "^5.0.2", "file-loader": "6.2.0", "globals": "^16.4.0", "less": "4.1.3", diff --git a/Dnn.AdminExperience/ClientSide/SiteGroups.Web/package.json b/Dnn.AdminExperience/ClientSide/SiteGroups.Web/package.json index 3ba8dd87c1a..91f546f5498 100644 --- a/Dnn.AdminExperience/ClientSide/SiteGroups.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/SiteGroups.Web/package.json @@ -23,7 +23,7 @@ "css-loader": "^7.1.2", "eslint": "9.38.0", "eslint-plugin-react": "7.37.5", - "eslint-webpack-plugin": "^5.0.1", + "eslint-webpack-plugin": "^5.0.2", "file-loader": "6.2.0", "globals": "^16.4.0", "less": "4.1.3", diff --git a/Dnn.AdminExperience/ClientSide/SiteImportExport.Web/package.json b/Dnn.AdminExperience/ClientSide/SiteImportExport.Web/package.json index 59a9fb37327..77fa828ce52 100644 --- a/Dnn.AdminExperience/ClientSide/SiteImportExport.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/SiteImportExport.Web/package.json @@ -27,7 +27,7 @@ "css-loader": "^7.1.2", "eslint": "9.38.0", "eslint-plugin-react": "7.37.5", - "eslint-webpack-plugin": "^5.0.1", + "eslint-webpack-plugin": "^5.0.2", "globals": "^16.4.0", "i18n-webpack-plugin": "1.0.0", "less": "4.1.3", diff --git a/Dnn.AdminExperience/ClientSide/SiteSettings.Web/package.json b/Dnn.AdminExperience/ClientSide/SiteSettings.Web/package.json index db118fd1d3f..f9fa18f3b37 100644 --- a/Dnn.AdminExperience/ClientSide/SiteSettings.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/SiteSettings.Web/package.json @@ -27,7 +27,7 @@ "eslint": "9.38.0", "eslint-plugin-jest": "^29.0.1", "eslint-plugin-react": "7.37.5", - "eslint-webpack-plugin": "^5.0.1", + "eslint-webpack-plugin": "^5.0.2", "file-loader": "6.2.0", "globals": "^16.4.0", "jest": "^28.1.3", diff --git a/Dnn.AdminExperience/ClientSide/Sites.Web/package.json b/Dnn.AdminExperience/ClientSide/Sites.Web/package.json index cfdcdf4dca5..6494a71989d 100644 --- a/Dnn.AdminExperience/ClientSide/Sites.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Sites.Web/package.json @@ -23,7 +23,7 @@ "css-loader": "^7.1.2", "eslint": "9.38.0", "eslint-plugin-react": "7.37.5", - "eslint-webpack-plugin": "^5.0.1", + "eslint-webpack-plugin": "^5.0.2", "file-loader": "6.2.0", "globals": "^16.4.0", "less": "4.1.3", diff --git a/Dnn.AdminExperience/ClientSide/Sites.Web/src/_exportables/package.json b/Dnn.AdminExperience/ClientSide/Sites.Web/src/_exportables/package.json index b8b7b2bb0f6..db555005b26 100644 --- a/Dnn.AdminExperience/ClientSide/Sites.Web/src/_exportables/package.json +++ b/Dnn.AdminExperience/ClientSide/Sites.Web/src/_exportables/package.json @@ -23,11 +23,11 @@ "css-loader": "^7.1.2", "dayjs": "^1.11.9", "eslint": "9.38.0", - "eslint-import-resolver-webpack": "^0.13.2", + "eslint-import-resolver-webpack": "^0.13.10", "eslint-plugin-filenames": "^1.3.2", - "eslint-plugin-import": "^2.27.5", + "eslint-plugin-import": "^2.32.0", "eslint-plugin-react": "7.37.5", - "eslint-webpack-plugin": "^5.0.1", + "eslint-webpack-plugin": "^5.0.2", "globals": "^16.4.0", "less": "4.1.3", "less-loader": "12.2.0", diff --git a/Dnn.AdminExperience/ClientSide/Styles.Web/package.json b/Dnn.AdminExperience/ClientSide/Styles.Web/package.json index 7ab4e061e03..a59b97827f3 100644 --- a/Dnn.AdminExperience/ClientSide/Styles.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Styles.Web/package.json @@ -31,11 +31,11 @@ }, "devDependencies": { "@dnncommunity/dnn-elements": "^0.27.4", - "@stencil/eslint-plugin": "^1.0.0", + "@stencil/eslint-plugin": "^1.1.0", "@stencil/sass": "^3.0.12", "@types/node": "^22.9.0", - "@typescript-eslint/eslint-plugin": "^8.32.1", - "@typescript-eslint/parser": "^8.32.1", + "@typescript-eslint/eslint-plugin": "^8.46.2", + "@typescript-eslint/parser": "^8.46.2", "eslint": "^9.38.0", "jiti": "^2.4.2", "typescript-eslint": "^8.46.2" diff --git a/Dnn.AdminExperience/ClientSide/TaskScheduler.Web/package.json b/Dnn.AdminExperience/ClientSide/TaskScheduler.Web/package.json index dc99b5209e8..51901458834 100644 --- a/Dnn.AdminExperience/ClientSide/TaskScheduler.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/TaskScheduler.Web/package.json @@ -27,7 +27,7 @@ "es6-object-assign": "1.1.0", "eslint": "9.38.0", "eslint-plugin-react": "7.37.5", - "eslint-webpack-plugin": "^5.0.1", + "eslint-webpack-plugin": "^5.0.2", "file-loader": "6.2.0", "globals": "^16.4.0", "less": "4.1.3", diff --git a/Dnn.AdminExperience/ClientSide/Themes.Web/package.json b/Dnn.AdminExperience/ClientSide/Themes.Web/package.json index 85f8204383d..bd3358fc313 100644 --- a/Dnn.AdminExperience/ClientSide/Themes.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Themes.Web/package.json @@ -24,7 +24,7 @@ "css-loader": "^7.1.2", "eslint": "9.38.0", "eslint-plugin-react": "7.37.5", - "eslint-webpack-plugin": "^5.0.1", + "eslint-webpack-plugin": "^5.0.2", "file-loader": "6.2.0", "globals": "^16.4.0", "less": "4.1.3", diff --git a/Dnn.AdminExperience/ClientSide/Users.Web/package.json b/Dnn.AdminExperience/ClientSide/Users.Web/package.json index d9433837901..3a363317e99 100644 --- a/Dnn.AdminExperience/ClientSide/Users.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Users.Web/package.json @@ -22,7 +22,7 @@ "css-loader": "^7.1.2", "eslint": "9.38.0", "eslint-plugin-react": "7.37.5", - "eslint-webpack-plugin": "^5.0.1", + "eslint-webpack-plugin": "^5.0.2", "file-loader": "6.2.0", "globals": "^16.4.0", "jest": "^28.1.3", diff --git a/Dnn.AdminExperience/ClientSide/Users.Web/src/_exportables/package.json b/Dnn.AdminExperience/ClientSide/Users.Web/src/_exportables/package.json index 8896ddc7736..073ecf14f8a 100644 --- a/Dnn.AdminExperience/ClientSide/Users.Web/src/_exportables/package.json +++ b/Dnn.AdminExperience/ClientSide/Users.Web/src/_exportables/package.json @@ -22,12 +22,12 @@ "css-loader": "^7.1.2", "dayjs": "^1.11.9", "eslint": "9.38.0", - "eslint-import-resolver-webpack": "^0.13.2", + "eslint-import-resolver-webpack": "^0.13.10", "eslint-plugin-filenames": "^1.3.2", - "eslint-plugin-import": "^2.27.5", - "eslint-plugin-react": "7.37.1", + "eslint-plugin-import": "^2.32.0", + "eslint-plugin-react": "7.37.5", "eslint-plugin-spellcheck": "0.0.20", - "eslint-webpack-plugin": "^4.2.0", + "eslint-webpack-plugin": "^5.0.2", "less": "4.1.3", "less-loader": "12.2.0", "localization": "^1.0.2", diff --git a/Dnn.AdminExperience/ClientSide/Vocabularies.Web/package.json b/Dnn.AdminExperience/ClientSide/Vocabularies.Web/package.json index f8b7531ed07..be0957ced4f 100644 --- a/Dnn.AdminExperience/ClientSide/Vocabularies.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Vocabularies.Web/package.json @@ -27,7 +27,7 @@ "es6-object-assign": "1.1.0", "eslint": "9.38.0", "eslint-plugin-react": "7.37.5", - "eslint-webpack-plugin": "^5.0.1", + "eslint-webpack-plugin": "^5.0.2", "file-loader": "6.2.0", "globals": "^16.4.0", "less": "4.1.3", diff --git a/yarn.lock b/yarn.lock index e7580f797de..ed174585e16 100644 --- a/yarn.lock +++ b/yarn.lock @@ -99,7 +99,7 @@ __metadata: languageName: node linkType: hard -"@babel/eslint-parser@npm:^7.27.1": +"@babel/eslint-parser@npm:^7.28.4": version: 7.28.4 resolution: "@babel/eslint-parser@npm:7.28.4" dependencies: @@ -1645,7 +1645,7 @@ __metadata: resolution: "@dnnsoftware/dnn-react-common@workspace:Dnn.AdminExperience/ClientSide/Dnn.React.Common" dependencies: "@babel/core": "npm:^7.26.0" - "@babel/eslint-parser": "npm:^7.27.1" + "@babel/eslint-parser": "npm:^7.28.4" "@babel/eslint-plugin": "npm:7.27.1" "@babel/plugin-proposal-object-rest-spread": "npm:^7.20.7" "@babel/plugin-transform-object-assign": "npm:^7.25.9" @@ -1671,11 +1671,11 @@ __metadata: eslint-import-resolver-node: "npm:^0.3.9" eslint-import-resolver-webpack: "npm:^0.13.10" eslint-plugin-filenames: "npm:^1.3.2" - eslint-plugin-import: "npm:^2.31.0" + eslint-plugin-import: "npm:^2.32.0" eslint-plugin-jest: "npm:^29.0.1" eslint-plugin-react: "npm:7.37.5" - eslint-plugin-storybook: "npm:9.0.1" - eslint-webpack-plugin: "npm:^5.0.1" + eslint-plugin-storybook: "npm:9.1.13" + eslint-webpack-plugin: "npm:^5.0.2" file-loader: "npm:6.2.0" interact.js: "npm:^1.2.8" less: "npm:4.1.3" @@ -3468,7 +3468,7 @@ __metadata: languageName: node linkType: hard -"@stencil/eslint-plugin@npm:^1.0.0": +"@stencil/eslint-plugin@npm:^1.1.0": version: 1.1.0 resolution: "@stencil/eslint-plugin@npm:1.1.0" dependencies: @@ -4042,16 +4042,6 @@ __metadata: languageName: node linkType: hard -"@types/eslint@npm:^8.56.10": - version: 8.56.12 - resolution: "@types/eslint@npm:8.56.12" - dependencies: - "@types/estree": "npm:*" - "@types/json-schema": "npm:*" - checksum: 10/bd998b5d3f98ac430ec8db6223f1cff1820774c1e72eabda05463256875d97065fd357fba7379dd25e6bfbeb73296f28faff6f4dcbc320f890bb49b09087644d - languageName: node - linkType: hard - "@types/estree@npm:*, @types/estree@npm:^1.0.5, @types/estree@npm:^1.0.6": version: 1.0.8 resolution: "@types/estree@npm:1.0.8" @@ -4498,7 +4488,7 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/eslint-plugin@npm:8.46.2": +"@typescript-eslint/eslint-plugin@npm:8.46.2, @typescript-eslint/eslint-plugin@npm:^8.46.2": version: 8.46.2 resolution: "@typescript-eslint/eslint-plugin@npm:8.46.2" dependencies: @@ -4519,28 +4509,7 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/eslint-plugin@npm:^8.32.1": - version: 8.36.0 - resolution: "@typescript-eslint/eslint-plugin@npm:8.36.0" - dependencies: - "@eslint-community/regexpp": "npm:^4.10.0" - "@typescript-eslint/scope-manager": "npm:8.36.0" - "@typescript-eslint/type-utils": "npm:8.36.0" - "@typescript-eslint/utils": "npm:8.36.0" - "@typescript-eslint/visitor-keys": "npm:8.36.0" - graphemer: "npm:^1.4.0" - ignore: "npm:^7.0.0" - natural-compare: "npm:^1.4.0" - ts-api-utils: "npm:^2.1.0" - peerDependencies: - "@typescript-eslint/parser": ^8.36.0 - eslint: ^8.57.0 || ^9.0.0 - typescript: ">=4.8.4 <5.9.0" - checksum: 10/712c9ef0d52634e10042cdd1c6427abc9042a7d451fc20c55bb7df8050af0e155b7d50e0246e26bf88a7a1aaba5c8fed9ffb15a144067d4018a4ed006bc745be - languageName: node - linkType: hard - -"@typescript-eslint/parser@npm:8.46.2": +"@typescript-eslint/parser@npm:8.46.2, @typescript-eslint/parser@npm:^8.46.2": version: 8.46.2 resolution: "@typescript-eslint/parser@npm:8.46.2" dependencies: @@ -4556,22 +4525,6 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/parser@npm:^8.32.1": - version: 8.36.0 - resolution: "@typescript-eslint/parser@npm:8.36.0" - dependencies: - "@typescript-eslint/scope-manager": "npm:8.36.0" - "@typescript-eslint/types": "npm:8.36.0" - "@typescript-eslint/typescript-estree": "npm:8.36.0" - "@typescript-eslint/visitor-keys": "npm:8.36.0" - debug: "npm:^4.3.4" - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: ">=4.8.4 <5.9.0" - checksum: 10/83789c53ad6a2ac162f4663ab4d2a5324d5f1a7260bdd4972757b947ce4fbc9e9bc1b7613398bab48cec202b5fa485ed37dc3963e3d02cc727b8df47b134d339 - languageName: node - linkType: hard - "@typescript-eslint/project-service@npm:8.36.0": version: 8.36.0 resolution: "@typescript-eslint/project-service@npm:8.36.0" @@ -4668,21 +4621,6 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/type-utils@npm:8.36.0": - version: 8.36.0 - resolution: "@typescript-eslint/type-utils@npm:8.36.0" - dependencies: - "@typescript-eslint/typescript-estree": "npm:8.36.0" - "@typescript-eslint/utils": "npm:8.36.0" - debug: "npm:^4.3.4" - ts-api-utils: "npm:^2.1.0" - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: ">=4.8.4 <5.9.0" - checksum: 10/3ca0f17fa1f6280dc609a6fe144b4108af3719c5709dd6d5e77d9de59946065dc876523f77b261e7cd07911ebfe2060a25a36939cf374d767ef7c08ca8b7d76f - languageName: node - linkType: hard - "@typescript-eslint/type-utils@npm:8.46.2": version: 8.46.2 resolution: "@typescript-eslint/type-utils@npm:8.46.2" @@ -4780,22 +4718,7 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/utils@npm:8.36.0, @typescript-eslint/utils@npm:^8.32.1, @typescript-eslint/utils@npm:^8.8.1": - version: 8.36.0 - resolution: "@typescript-eslint/utils@npm:8.36.0" - dependencies: - "@eslint-community/eslint-utils": "npm:^4.7.0" - "@typescript-eslint/scope-manager": "npm:8.36.0" - "@typescript-eslint/types": "npm:8.36.0" - "@typescript-eslint/typescript-estree": "npm:8.36.0" - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: ">=4.8.4 <5.9.0" - checksum: 10/4683a3fda91b55139181277e583edba5006e1a7264df2648abd1adeeeb0565b31d5b15d55f73cde738475a2d2162e234301c01e70c4dece6a26b2abf65da610e - languageName: node - linkType: hard - -"@typescript-eslint/utils@npm:8.46.2": +"@typescript-eslint/utils@npm:8.46.2, @typescript-eslint/utils@npm:^8.46.2": version: 8.46.2 resolution: "@typescript-eslint/utils@npm:8.46.2" dependencies: @@ -4825,6 +4748,21 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/utils@npm:^8.8.1": + version: 8.36.0 + resolution: "@typescript-eslint/utils@npm:8.36.0" + dependencies: + "@eslint-community/eslint-utils": "npm:^4.7.0" + "@typescript-eslint/scope-manager": "npm:8.36.0" + "@typescript-eslint/types": "npm:8.36.0" + "@typescript-eslint/typescript-estree": "npm:8.36.0" + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: ">=4.8.4 <5.9.0" + checksum: 10/4683a3fda91b55139181277e583edba5006e1a7264df2648abd1adeeeb0565b31d5b15d55f73cde738475a2d2162e234301c01e70c4dece6a26b2abf65da610e + languageName: node + linkType: hard + "@typescript-eslint/visitor-keys@npm:8.36.0": version: 8.36.0 resolution: "@typescript-eslint/visitor-keys@npm:8.36.0" @@ -5228,7 +5166,7 @@ __metadata: es6-object-assign: "npm:1.1.0" eslint: "npm:9.38.0" eslint-plugin-react: "npm:7.37.5" - eslint-webpack-plugin: "npm:^5.0.1" + eslint-webpack-plugin: "npm:^5.0.2" file-loader: "npm:4.2.0" globals: "npm:^16.4.0" i18n-webpack-plugin: "npm:1.0.0" @@ -5766,7 +5704,7 @@ __metadata: languageName: node linkType: hard -"array.prototype.flatmap@npm:^1.3.2, array.prototype.flatmap@npm:^1.3.3": +"array.prototype.flatmap@npm:^1.3.3": version: 1.3.3 resolution: "array.prototype.flatmap@npm:1.3.3" dependencies: @@ -8909,11 +8847,11 @@ __metadata: "@dnncommunity/dnn-elements": "npm:^0.27.5" "@eslint/js": "npm:^9.38.0" "@stencil/core": "npm:^4.22.2" - "@stencil/eslint-plugin": "npm:^1.0.0" + "@stencil/eslint-plugin": "npm:^1.1.0" "@stencil/sass": "npm:^3.0.12" "@stencil/store": "npm:^2.0.16" "@types/node": "npm:^22.9.0" - "@typescript-eslint/utils": "npm:^8.32.1" + "@typescript-eslint/utils": "npm:^8.46.2" eslint: "npm:^9.38.0" jiti: "npm:^2.4.2" typescript: "npm:^5.8.3" @@ -8938,7 +8876,7 @@ __metadata: css-loader: "npm:^7.1.2" eslint: "npm:9.38.0" eslint-plugin-react: "npm:7.37.5" - eslint-webpack-plugin: "npm:^5.0.1" + eslint-webpack-plugin: "npm:^5.0.2" file-loader: "npm:6.2.0" globals: "npm:^16.4.0" less: "npm:4.1.3" @@ -8974,11 +8912,11 @@ __metadata: css-loader: "npm:^7.1.2" dayjs: "npm:^1.11.9" eslint: "npm:9.38.0" - eslint-import-resolver-webpack: "npm:^0.13.2" + eslint-import-resolver-webpack: "npm:^0.13.10" eslint-plugin-filenames: "npm:^1.3.2" - eslint-plugin-import: "npm:^2.27.5" + eslint-plugin-import: "npm:^2.32.0" eslint-plugin-react: "npm:7.37.5" - eslint-webpack-plugin: "npm:^5.0.1" + eslint-webpack-plugin: "npm:^5.0.2" globals: "npm:^16.4.0" less: "npm:4.1.3" less-loader: "npm:12.2.0" @@ -9009,12 +8947,12 @@ __metadata: css-loader: "npm:^7.1.2" dayjs: "npm:^1.11.9" eslint: "npm:9.38.0" - eslint-import-resolver-webpack: "npm:^0.13.2" + eslint-import-resolver-webpack: "npm:^0.13.10" eslint-plugin-filenames: "npm:^1.3.2" - eslint-plugin-import: "npm:^2.27.5" - eslint-plugin-react: "npm:7.37.1" + eslint-plugin-import: "npm:^2.32.0" + eslint-plugin-react: "npm:7.37.5" eslint-plugin-spellcheck: "npm:0.0.20" - eslint-webpack-plugin: "npm:^4.2.0" + eslint-webpack-plugin: "npm:^5.0.2" less: "npm:4.1.3" less-loader: "npm:12.2.0" localization: "npm:^1.0.2" @@ -9733,7 +9671,7 @@ __metadata: languageName: node linkType: hard -"es-iterator-helpers@npm:^1.0.19, es-iterator-helpers@npm:^1.2.1": +"es-iterator-helpers@npm:^1.2.1": version: 1.2.1 resolution: "es-iterator-helpers@npm:1.2.1" dependencies: @@ -9965,7 +9903,7 @@ __metadata: languageName: node linkType: hard -"eslint-import-resolver-webpack@npm:^0.13.10, eslint-import-resolver-webpack@npm:^0.13.2": +"eslint-import-resolver-webpack@npm:^0.13.10": version: 0.13.10 resolution: "eslint-import-resolver-webpack@npm:0.13.10" dependencies: @@ -10012,7 +9950,7 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-import@npm:^2.27.5, eslint-plugin-import@npm:^2.31.0": +"eslint-plugin-import@npm:^2.32.0": version: 2.32.0 resolution: "eslint-plugin-import@npm:2.32.0" dependencies: @@ -10059,34 +9997,6 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-react@npm:7.37.1": - version: 7.37.1 - resolution: "eslint-plugin-react@npm:7.37.1" - dependencies: - array-includes: "npm:^3.1.8" - array.prototype.findlast: "npm:^1.2.5" - array.prototype.flatmap: "npm:^1.3.2" - array.prototype.tosorted: "npm:^1.1.4" - doctrine: "npm:^2.1.0" - es-iterator-helpers: "npm:^1.0.19" - estraverse: "npm:^5.3.0" - hasown: "npm:^2.0.2" - jsx-ast-utils: "npm:^2.4.1 || ^3.0.0" - minimatch: "npm:^3.1.2" - object.entries: "npm:^1.1.8" - object.fromentries: "npm:^2.0.8" - object.values: "npm:^1.2.0" - prop-types: "npm:^15.8.1" - resolve: "npm:^2.0.0-next.5" - semver: "npm:^6.3.1" - string.prototype.matchall: "npm:^4.0.11" - string.prototype.repeat: "npm:^1.0.0" - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 - checksum: 10/a7b9cf2c43255844ad0c9d4e3758a8c2b687a2ce9a09f4161ab245581d5d2d91b37742e541c88aa9ce368ec6c860e23dc78c15117f3fc1cdc433847038e8346b - languageName: node - linkType: hard - "eslint-plugin-react@npm:7.37.5": version: 7.37.5 resolution: "eslint-plugin-react@npm:7.37.5" @@ -10128,15 +10038,15 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-storybook@npm:9.0.1": - version: 9.0.1 - resolution: "eslint-plugin-storybook@npm:9.0.1" +"eslint-plugin-storybook@npm:9.1.13": + version: 9.1.13 + resolution: "eslint-plugin-storybook@npm:9.1.13" dependencies: "@typescript-eslint/utils": "npm:^8.8.1" peerDependencies: eslint: ">=8" - storybook: ^9.0.1 - checksum: 10/0f2aa5ca74cc822895033157b8ced3cfcd658cd9e39fc613eddd86a1b5137bb1c3eb42d4b691f183c9c21aa8bfcda3a5153c93156bca8547d56dc066a411f4e1 + storybook: ^9.1.13 + checksum: 10/c42247cf4b5118b4dcff529f6fda72fb26fc39e5a62158b456b27b89489176fb0ff04ea19a5bf31f40bea7bdd4cd5e83b6d908351c7808ce74aef34aa6347560 languageName: node linkType: hard @@ -10206,23 +10116,7 @@ __metadata: languageName: node linkType: hard -"eslint-webpack-plugin@npm:^4.2.0": - version: 4.2.0 - resolution: "eslint-webpack-plugin@npm:4.2.0" - dependencies: - "@types/eslint": "npm:^8.56.10" - jest-worker: "npm:^29.7.0" - micromatch: "npm:^4.0.5" - normalize-path: "npm:^3.0.0" - schema-utils: "npm:^4.2.0" - peerDependencies: - eslint: ^8.0.0 || ^9.0.0 - webpack: ^5.0.0 - checksum: 10/061d11a93832b82bd0362d6c546f51fe5e3a0eb811374b86536a2929ff46fea7e5ef30e32f0d3194b9da146a7c0ae43f13b2ec5ce0f65a9ca9c4d961d9e446b3 - languageName: node - linkType: hard - -"eslint-webpack-plugin@npm:^5.0.1": +"eslint-webpack-plugin@npm:^5.0.2": version: 5.0.2 resolution: "eslint-webpack-plugin@npm:5.0.2" dependencies: @@ -10472,7 +10366,7 @@ __metadata: es6-promise: "npm:4.2.8" eslint: "npm:9.38.0" eslint-plugin-react: "npm:7.37.5" - eslint-webpack-plugin: "npm:^5.0.1" + eslint-webpack-plugin: "npm:^5.0.2" file-loader: "npm:4.2.0" globals: "npm:^16.4.0" json-loader: "npm:^0.5.7" @@ -10600,7 +10494,7 @@ __metadata: css-loader: "npm:^7.1.2" eslint: "npm:9.38.0" eslint-plugin-react: "npm:7.37.5" - eslint-webpack-plugin: "npm:^5.0.1" + eslint-webpack-plugin: "npm:^5.0.2" file-loader: "npm:6.2.0" globals: "npm:^16.4.0" less: "npm:4.1.3" @@ -14223,7 +14117,7 @@ __metadata: es6-object-assign: "npm:1.1.0" eslint: "npm:9.38.0" eslint-plugin-react: "npm:7.37.5" - eslint-webpack-plugin: "npm:^5.0.1" + eslint-webpack-plugin: "npm:^5.0.2" file-loader: "npm:6.2.0" globals: "npm:^16.4.0" less: "npm:4.1.3" @@ -15949,7 +15843,7 @@ __metadata: languageName: node linkType: hard -"object.entries@npm:^1.1.1, object.entries@npm:^1.1.2, object.entries@npm:^1.1.8, object.entries@npm:^1.1.9": +"object.entries@npm:^1.1.1, object.entries@npm:^1.1.2, object.entries@npm:^1.1.9": version: 1.1.9 resolution: "object.entries@npm:1.1.9" dependencies: @@ -16022,7 +15916,7 @@ __metadata: languageName: node linkType: hard -"object.values@npm:^1.1.1, object.values@npm:^1.1.6, object.values@npm:^1.1.7, object.values@npm:^1.2.0, object.values@npm:^1.2.1": +"object.values@npm:^1.1.1, object.values@npm:^1.1.6, object.values@npm:^1.1.7, object.values@npm:^1.2.1": version: 1.2.1 resolution: "object.values@npm:1.2.1" dependencies: @@ -16425,7 +16319,7 @@ __metadata: enzyme-adapter-react-16: "npm:^1.15.7" eslint: "npm:^9.38.0" eslint-plugin-react: "npm:7.37.5" - eslint-webpack-plugin: "npm:^5.0.1" + eslint-webpack-plugin: "npm:^5.0.2" file-loader: "npm:6.2.0" globals: "npm:^16.4.0" jest: "npm:^28.1.3" @@ -17449,7 +17343,7 @@ __metadata: es6-object-assign: "npm:1.1.0" eslint: "npm:9.38.0" eslint-plugin-react: "npm:7.37.5" - eslint-webpack-plugin: "npm:^5.0.1" + eslint-webpack-plugin: "npm:^5.0.2" extract-text-webpack-plugin: "npm:^3.0.2" fbjs: "npm:*" fetch-mock: "npm:^7.7.3" @@ -18955,7 +18849,7 @@ __metadata: es6-object-assign: "npm:^1.1.0" eslint: "npm:9.38.0" eslint-plugin-react: "npm:7.37.5" - eslint-webpack-plugin: "npm:^5.0.1" + eslint-webpack-plugin: "npm:^5.0.2" file-loader: "npm:6.2.0" globals: "npm:^16.4.0" less: "npm:4.1.3" @@ -19422,7 +19316,7 @@ __metadata: css-loader: "npm:^7.1.2" eslint: "npm:9.38.0" eslint-plugin-react: "npm:7.37.5" - eslint-webpack-plugin: "npm:^5.0.1" + eslint-webpack-plugin: "npm:^5.0.2" file-loader: "npm:6.2.0" globals: "npm:^16.4.0" less: "npm:4.1.3" @@ -19553,7 +19447,7 @@ __metadata: es6-object-assign: "npm:1.1.0" eslint: "npm:9.38.0" eslint-plugin-react: "npm:7.37.5" - eslint-webpack-plugin: "npm:^5.0.1" + eslint-webpack-plugin: "npm:^5.0.2" file-loader: "npm:6.2.0" globals: "npm:^16.4.0" less: "npm:4.1.3" @@ -19655,7 +19549,7 @@ __metadata: dayjs: "npm:^1.11.9" eslint: "npm:9.38.0" eslint-plugin-react: "npm:7.37.5" - eslint-webpack-plugin: "npm:^5.0.1" + eslint-webpack-plugin: "npm:^5.0.2" file-loader: "npm:6.2.0" globals: "npm:^16.4.0" less: "npm:4.1.3" @@ -19926,7 +19820,7 @@ __metadata: css-loader: "npm:^7.1.2" eslint: "npm:9.38.0" eslint-plugin-react: "npm:7.37.5" - eslint-webpack-plugin: "npm:^5.0.1" + eslint-webpack-plugin: "npm:^5.0.2" globals: "npm:^16.4.0" i18n-webpack-plugin: "npm:1.0.0" less: "npm:4.1.3" @@ -19977,7 +19871,7 @@ __metadata: eslint: "npm:9.38.0" eslint-plugin-jest: "npm:^29.0.1" eslint-plugin-react: "npm:7.37.5" - eslint-webpack-plugin: "npm:^5.0.1" + eslint-webpack-plugin: "npm:^5.0.2" file-loader: "npm:6.2.0" globals: "npm:^16.4.0" jest: "npm:^28.1.3" @@ -20021,7 +19915,7 @@ __metadata: css-loader: "npm:^7.1.2" eslint: "npm:9.38.0" eslint-plugin-react: "npm:7.37.5" - eslint-webpack-plugin: "npm:^5.0.1" + eslint-webpack-plugin: "npm:^5.0.2" file-loader: "npm:6.2.0" globals: "npm:^16.4.0" less: "npm:4.1.3" @@ -20559,7 +20453,7 @@ __metadata: languageName: node linkType: hard -"string.prototype.matchall@npm:^4.0.11, string.prototype.matchall@npm:^4.0.12": +"string.prototype.matchall@npm:^4.0.12": version: 4.0.12 resolution: "string.prototype.matchall@npm:4.0.12" dependencies: @@ -20798,11 +20692,11 @@ __metadata: dependencies: "@dnncommunity/dnn-elements": "npm:^0.27.4" "@stencil/core": "npm:^4.22.2" - "@stencil/eslint-plugin": "npm:^1.0.0" + "@stencil/eslint-plugin": "npm:^1.1.0" "@stencil/sass": "npm:^3.0.12" "@types/node": "npm:^22.9.0" - "@typescript-eslint/eslint-plugin": "npm:^8.32.1" - "@typescript-eslint/parser": "npm:^8.32.1" + "@typescript-eslint/eslint-plugin": "npm:^8.46.2" + "@typescript-eslint/parser": "npm:^8.46.2" eslint: "npm:^9.38.0" jiti: "npm:^2.4.2" typescript-eslint: "npm:^8.46.2" @@ -20997,7 +20891,7 @@ __metadata: es6-object-assign: "npm:1.1.0" eslint: "npm:9.38.0" eslint-plugin-react: "npm:7.37.5" - eslint-webpack-plugin: "npm:^5.0.1" + eslint-webpack-plugin: "npm:^5.0.2" file-loader: "npm:6.2.0" globals: "npm:^16.4.0" less: "npm:4.1.3" @@ -21038,7 +20932,7 @@ __metadata: es6-object-assign: "npm:1.1.0" eslint: "npm:9.38.0" eslint-plugin-react: "npm:7.37.5" - eslint-webpack-plugin: "npm:^5.0.1" + eslint-webpack-plugin: "npm:^5.0.2" file-loader: "npm:6.2.0" globals: "npm:^16.4.0" less: "npm:4.1.3" @@ -21147,7 +21041,7 @@ __metadata: css-loader: "npm:^7.1.2" eslint: "npm:9.38.0" eslint-plugin-react: "npm:7.37.5" - eslint-webpack-plugin: "npm:^5.0.1" + eslint-webpack-plugin: "npm:^5.0.2" file-loader: "npm:6.2.0" globals: "npm:^16.4.0" less: "npm:4.1.3" @@ -22057,7 +21951,7 @@ __metadata: css-loader: "npm:^7.1.2" eslint: "npm:9.38.0" eslint-plugin-react: "npm:7.37.5" - eslint-webpack-plugin: "npm:^5.0.1" + eslint-webpack-plugin: "npm:^5.0.2" file-loader: "npm:6.2.0" globals: "npm:^16.4.0" jest: "npm:^28.1.3" From 8c265453627a863319065ec4b365c0f6abd2e312 Mon Sep 17 00:00:00 2001 From: Brian Dukes Date: Tue, 21 Oct 2025 15:54:56 -0500 Subject: [PATCH 090/199] Bump @dnncommunity/dnn-elements to 0.27.7 --- .../ResourceManager/ResourceManager.Web/package.json | 2 +- .../ClientSide/Styles.Web/package.json | 2 +- yarn.lock | 12 ++++++------ 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/package.json b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/package.json index 8c2d14a0a16..7490f706ad5 100644 --- a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/package.json +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/package.json @@ -31,7 +31,7 @@ }, "license": "MIT", "devDependencies": { - "@dnncommunity/dnn-elements": "^0.27.5", + "@dnncommunity/dnn-elements": "^0.27.7", "@eslint/js": "^9.38.0", "@stencil/eslint-plugin": "^1.1.0", "@stencil/sass": "^3.0.12", diff --git a/Dnn.AdminExperience/ClientSide/Styles.Web/package.json b/Dnn.AdminExperience/ClientSide/Styles.Web/package.json index a59b97827f3..805dae660f4 100644 --- a/Dnn.AdminExperience/ClientSide/Styles.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Styles.Web/package.json @@ -30,7 +30,7 @@ "@stencil/core": "^4.22.2" }, "devDependencies": { - "@dnncommunity/dnn-elements": "^0.27.4", + "@dnncommunity/dnn-elements": "^0.27.7", "@stencil/eslint-plugin": "^1.1.0", "@stencil/sass": "^3.0.12", "@types/node": "^22.9.0", diff --git a/yarn.lock b/yarn.lock index ed174585e16..15c9892da46 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1629,14 +1629,14 @@ __metadata: languageName: node linkType: hard -"@dnncommunity/dnn-elements@npm:^0.27.4, @dnncommunity/dnn-elements@npm:^0.27.5": - version: 0.27.5 - resolution: "@dnncommunity/dnn-elements@npm:0.27.5" +"@dnncommunity/dnn-elements@npm:^0.27.7": + version: 0.27.7 + resolution: "@dnncommunity/dnn-elements@npm:0.27.7" dependencies: jodit: "npm:^4.6.2" peerDependencies: "@typescript-eslint/utils": ^8.30.1 - checksum: 10/ec1e20dd418651818fdc69fa6ca02f5307a6f87629c44548998f3af9e67c810ddefcec42bb513f96ef2720881b2fd66a30d8a56ab06c7d8716e92db5c063d9ec + checksum: 10/cb4f918993223411b412a52005ec0893b2c5d09c508d1a05e2f66385cf3116a060b454635f7544f287e1e079fb562ceb84c6139b3fc6c505bcfbd95eb0bca2bd languageName: node linkType: hard @@ -8844,7 +8844,7 @@ __metadata: version: 0.0.0-use.local resolution: "dnn-resource-manager@workspace:DNN Platform/Modules/ResourceManager/ResourceManager.Web" dependencies: - "@dnncommunity/dnn-elements": "npm:^0.27.5" + "@dnncommunity/dnn-elements": "npm:^0.27.7" "@eslint/js": "npm:^9.38.0" "@stencil/core": "npm:^4.22.2" "@stencil/eslint-plugin": "npm:^1.1.0" @@ -20690,7 +20690,7 @@ __metadata: version: 0.0.0-use.local resolution: "styles@workspace:Dnn.AdminExperience/ClientSide/Styles.Web" dependencies: - "@dnncommunity/dnn-elements": "npm:^0.27.4" + "@dnncommunity/dnn-elements": "npm:^0.27.7" "@stencil/core": "npm:^4.22.2" "@stencil/eslint-plugin": "npm:^1.1.0" "@stencil/sass": "npm:^3.0.12" From c7064f695777c7ad61c56004819e35c630e1711a Mon Sep 17 00:00:00 2001 From: Brian Dukes Date: Tue, 21 Oct 2025 15:56:18 -0500 Subject: [PATCH 091/199] Bump stencil and sass Bump sass to 1.93.2 Bump @stencil/core to 4.38.2 Bump @stencil/sass to 3.2.2 Bump @stencil/store to 2.2.0 --- DNN Platform/Dnn.ClientSide/package.json | 2 +- .../ResourceManager.Web/package.json | 6 +- DNN Platform/Skins/Aperture/package.json | 2 +- .../ClientSide/Styles.Web/package.json | 4 +- yarn.lock | 208 ++++++++++-------- 5 files changed, 123 insertions(+), 99 deletions(-) diff --git a/DNN Platform/Dnn.ClientSide/package.json b/DNN Platform/Dnn.ClientSide/package.json index f8bcd71f067..5acba36f645 100644 --- a/DNN Platform/Dnn.ClientSide/package.json +++ b/DNN Platform/Dnn.ClientSide/package.json @@ -29,7 +29,7 @@ "postcss-banner": "^4.0.1", "postcss-cli": "^11.0.0", "postcss-import": "^16.1.0", - "sass": "^1.83.4", + "sass": "^1.93.2", "tsx": "^4.19.2", "typescript": "^5.7.3" } diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/package.json b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/package.json index 7490f706ad5..31cd5600196 100644 --- a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/package.json +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/package.json @@ -27,15 +27,15 @@ "lint": "eslint --fix" }, "dependencies": { - "@stencil/core": "^4.22.2" + "@stencil/core": "^4.38.2" }, "license": "MIT", "devDependencies": { "@dnncommunity/dnn-elements": "^0.27.7", "@eslint/js": "^9.38.0", "@stencil/eslint-plugin": "^1.1.0", - "@stencil/sass": "^3.0.12", - "@stencil/store": "^2.0.16", + "@stencil/sass": "^3.2.2", + "@stencil/store": "^2.2.0", "@types/node": "^22.9.0", "@typescript-eslint/utils": "^8.46.2", "eslint": "^9.38.0", diff --git a/DNN Platform/Skins/Aperture/package.json b/DNN Platform/Skins/Aperture/package.json index 24ffef32f72..600709fdf68 100644 --- a/DNN Platform/Skins/Aperture/package.json +++ b/DNN Platform/Skins/Aperture/package.json @@ -25,7 +25,7 @@ "postcss-banner": "^4.0.1", "postcss-cli": "^11.0.0", "postcss-import": "^16.1.0", - "sass": "^1.69.5", + "sass": "^1.93.2", "tsx": "^4.19.2", "typescript": "^5.3.2", "zip-lib": "^0.7.3" diff --git a/Dnn.AdminExperience/ClientSide/Styles.Web/package.json b/Dnn.AdminExperience/ClientSide/Styles.Web/package.json index 805dae660f4..b413c3ec7a5 100644 --- a/Dnn.AdminExperience/ClientSide/Styles.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Styles.Web/package.json @@ -27,12 +27,12 @@ "lint": "eslint --fix" }, "dependencies": { - "@stencil/core": "^4.22.2" + "@stencil/core": "^4.38.2" }, "devDependencies": { "@dnncommunity/dnn-elements": "^0.27.7", "@stencil/eslint-plugin": "^1.1.0", - "@stencil/sass": "^3.0.12", + "@stencil/sass": "^3.2.2", "@types/node": "^22.9.0", "@typescript-eslint/eslint-plugin": "^8.46.2", "@typescript-eslint/parser": "^8.46.2", diff --git a/yarn.lock b/yarn.lock index 15c9892da46..850ba3c9882 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3433,9 +3433,9 @@ __metadata: languageName: node linkType: hard -"@stencil/core@npm:^4.22.2": - version: 4.35.3 - resolution: "@stencil/core@npm:4.35.3" +"@stencil/core@npm:^4.38.2": + version: 4.38.2 + resolution: "@stencil/core@npm:4.38.2" dependencies: "@rollup/rollup-darwin-arm64": "npm:4.34.9" "@rollup/rollup-darwin-x64": "npm:4.34.9" @@ -3464,7 +3464,7 @@ __metadata: optional: true bin: stencil: bin/stencil - checksum: 10/424acf0092cce4870b96cf5e081ff46a5e31cb8a3fb5d1a89a95cb95fe3d918a4d011abe8e43f2dd4fc3ccedbc0ce388badb9da024089db470638027ee44747a + checksum: 10/b8067febdc3e4d21de4ffa2d5330e52aae50d2ea7b48ead20444581c982ff6877e781c4d3c9723f9a5e6702528b72ff55668b1c65ffac436ea69d24dccaf3a58 languageName: node linkType: hard @@ -3485,23 +3485,23 @@ __metadata: languageName: node linkType: hard -"@stencil/sass@npm:^3.0.12": - version: 3.2.1 - resolution: "@stencil/sass@npm:3.2.1" +"@stencil/sass@npm:^3.2.2": + version: 3.2.2 + resolution: "@stencil/sass@npm:3.2.2" dependencies: - sass-embedded: "npm:^1.85.1" + sass-embedded: "npm:^1.89.2" peerDependencies: "@stencil/core": ">=2.0.0 || >=3.0.0-beta.0 || >= 4.0.0-beta.0 || >= 4.0.0" - checksum: 10/bcb4febf6955d9db8d5780b9e6557b41e8e560e1a0cad9aecff8007b960d3bf16d188c497ad09454b32725d8e764443da7b3d1603605937c64ff944085621c4f + checksum: 10/5ecb92a98388a118f20f5cc5196a19f45fa4f5087d0009a21faaf687dc6224f686acdd37e36a829cb85b76c9854f645b7339a3a624f0cac1696b5007a96532f5 languageName: node linkType: hard -"@stencil/store@npm:^2.0.16": - version: 2.1.3 - resolution: "@stencil/store@npm:2.1.3" +"@stencil/store@npm:^2.2.0": + version: 2.2.0 + resolution: "@stencil/store@npm:2.2.0" peerDependencies: "@stencil/core": ">=2.0.0 || >=3.0.0 || >= 4.0.0-beta.0 || >= 4.0.0" - checksum: 10/52a158f37b3dc1324ee3ab68b382a384e453eb841df1d5ce14d5b57e73dd067c527f831aac7ec64d03ebe9e928c465ff117a5fc5ff31382583083565b7c2426d + checksum: 10/dbd7d9ee489e0732987da841e414a2f8d3b69928d3e2548a32426513ac213f8adb9970aced538e4c7eef6d2620133d51b531ed448d69494c5d46249e1a289794 languageName: node linkType: hard @@ -5433,7 +5433,7 @@ __metadata: postcss-banner: "npm:^4.0.1" postcss-cli: "npm:^11.0.0" postcss-import: "npm:^16.1.0" - sass: "npm:^1.69.5" + sass: "npm:^1.93.2" tsx: "npm:^4.19.2" typescript: "npm:^5.3.2" zip-lib: "npm:^0.7.3" @@ -8846,10 +8846,10 @@ __metadata: dependencies: "@dnncommunity/dnn-elements": "npm:^0.27.7" "@eslint/js": "npm:^9.38.0" - "@stencil/core": "npm:^4.22.2" + "@stencil/core": "npm:^4.38.2" "@stencil/eslint-plugin": "npm:^1.1.0" - "@stencil/sass": "npm:^3.0.12" - "@stencil/store": "npm:^2.0.16" + "@stencil/sass": "npm:^3.2.2" + "@stencil/store": "npm:^2.2.0" "@types/node": "npm:^22.9.0" "@typescript-eslint/utils": "npm:^8.46.2" eslint: "npm:^9.38.0" @@ -8989,7 +8989,7 @@ __metadata: postcss-banner: "npm:^4.0.1" postcss-cli: "npm:^11.0.0" postcss-import: "npm:^16.1.0" - sass: "npm:^1.83.4" + sass: "npm:^1.93.2" tsx: "npm:^4.19.2" typescript: "npm:^5.7.3" languageName: unknown @@ -19000,147 +19000,169 @@ __metadata: languageName: node linkType: hard -"sass-embedded-android-arm64@npm:1.89.2": - version: 1.89.2 - resolution: "sass-embedded-android-arm64@npm:1.89.2" +"sass-embedded-all-unknown@npm:1.93.2": + version: 1.93.2 + resolution: "sass-embedded-all-unknown@npm:1.93.2" + dependencies: + sass: "npm:1.93.2" + conditions: (!cpu=arm | !cpu=arm64 | !cpu=riscv64 | !cpu=x64) + languageName: node + linkType: hard + +"sass-embedded-android-arm64@npm:1.93.2": + version: 1.93.2 + resolution: "sass-embedded-android-arm64@npm:1.93.2" conditions: os=android & cpu=arm64 languageName: node linkType: hard -"sass-embedded-android-arm@npm:1.89.2": - version: 1.89.2 - resolution: "sass-embedded-android-arm@npm:1.89.2" +"sass-embedded-android-arm@npm:1.93.2": + version: 1.93.2 + resolution: "sass-embedded-android-arm@npm:1.93.2" conditions: os=android & cpu=arm languageName: node linkType: hard -"sass-embedded-android-riscv64@npm:1.89.2": - version: 1.89.2 - resolution: "sass-embedded-android-riscv64@npm:1.89.2" +"sass-embedded-android-riscv64@npm:1.93.2": + version: 1.93.2 + resolution: "sass-embedded-android-riscv64@npm:1.93.2" conditions: os=android & cpu=riscv64 languageName: node linkType: hard -"sass-embedded-android-x64@npm:1.89.2": - version: 1.89.2 - resolution: "sass-embedded-android-x64@npm:1.89.2" +"sass-embedded-android-x64@npm:1.93.2": + version: 1.93.2 + resolution: "sass-embedded-android-x64@npm:1.93.2" conditions: os=android & cpu=x64 languageName: node linkType: hard -"sass-embedded-darwin-arm64@npm:1.89.2": - version: 1.89.2 - resolution: "sass-embedded-darwin-arm64@npm:1.89.2" +"sass-embedded-darwin-arm64@npm:1.93.2": + version: 1.93.2 + resolution: "sass-embedded-darwin-arm64@npm:1.93.2" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"sass-embedded-darwin-x64@npm:1.89.2": - version: 1.89.2 - resolution: "sass-embedded-darwin-x64@npm:1.89.2" +"sass-embedded-darwin-x64@npm:1.93.2": + version: 1.93.2 + resolution: "sass-embedded-darwin-x64@npm:1.93.2" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"sass-embedded-linux-arm64@npm:1.89.2": - version: 1.89.2 - resolution: "sass-embedded-linux-arm64@npm:1.89.2" +"sass-embedded-linux-arm64@npm:1.93.2": + version: 1.93.2 + resolution: "sass-embedded-linux-arm64@npm:1.93.2" conditions: os=linux & cpu=arm64 languageName: node linkType: hard -"sass-embedded-linux-arm@npm:1.89.2": - version: 1.89.2 - resolution: "sass-embedded-linux-arm@npm:1.89.2" +"sass-embedded-linux-arm@npm:1.93.2": + version: 1.93.2 + resolution: "sass-embedded-linux-arm@npm:1.93.2" conditions: os=linux & cpu=arm languageName: node linkType: hard -"sass-embedded-linux-musl-arm64@npm:1.89.2": - version: 1.89.2 - resolution: "sass-embedded-linux-musl-arm64@npm:1.89.2" +"sass-embedded-linux-musl-arm64@npm:1.93.2": + version: 1.93.2 + resolution: "sass-embedded-linux-musl-arm64@npm:1.93.2" conditions: os=linux & cpu=arm64 languageName: node linkType: hard -"sass-embedded-linux-musl-arm@npm:1.89.2": - version: 1.89.2 - resolution: "sass-embedded-linux-musl-arm@npm:1.89.2" +"sass-embedded-linux-musl-arm@npm:1.93.2": + version: 1.93.2 + resolution: "sass-embedded-linux-musl-arm@npm:1.93.2" conditions: os=linux & cpu=arm languageName: node linkType: hard -"sass-embedded-linux-musl-riscv64@npm:1.89.2": - version: 1.89.2 - resolution: "sass-embedded-linux-musl-riscv64@npm:1.89.2" +"sass-embedded-linux-musl-riscv64@npm:1.93.2": + version: 1.93.2 + resolution: "sass-embedded-linux-musl-riscv64@npm:1.93.2" conditions: os=linux & cpu=riscv64 languageName: node linkType: hard -"sass-embedded-linux-musl-x64@npm:1.89.2": - version: 1.89.2 - resolution: "sass-embedded-linux-musl-x64@npm:1.89.2" +"sass-embedded-linux-musl-x64@npm:1.93.2": + version: 1.93.2 + resolution: "sass-embedded-linux-musl-x64@npm:1.93.2" conditions: os=linux & cpu=x64 languageName: node linkType: hard -"sass-embedded-linux-riscv64@npm:1.89.2": - version: 1.89.2 - resolution: "sass-embedded-linux-riscv64@npm:1.89.2" +"sass-embedded-linux-riscv64@npm:1.93.2": + version: 1.93.2 + resolution: "sass-embedded-linux-riscv64@npm:1.93.2" conditions: os=linux & cpu=riscv64 languageName: node linkType: hard -"sass-embedded-linux-x64@npm:1.89.2": - version: 1.89.2 - resolution: "sass-embedded-linux-x64@npm:1.89.2" +"sass-embedded-linux-x64@npm:1.93.2": + version: 1.93.2 + resolution: "sass-embedded-linux-x64@npm:1.93.2" conditions: os=linux & cpu=x64 languageName: node linkType: hard -"sass-embedded-win32-arm64@npm:1.89.2": - version: 1.89.2 - resolution: "sass-embedded-win32-arm64@npm:1.89.2" +"sass-embedded-unknown-all@npm:1.93.2": + version: 1.93.2 + resolution: "sass-embedded-unknown-all@npm:1.93.2" + dependencies: + sass: "npm:1.93.2" + conditions: (!os=android | !os=darwin | !os=linux | !os=win32) + languageName: node + linkType: hard + +"sass-embedded-win32-arm64@npm:1.93.2": + version: 1.93.2 + resolution: "sass-embedded-win32-arm64@npm:1.93.2" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"sass-embedded-win32-x64@npm:1.89.2": - version: 1.89.2 - resolution: "sass-embedded-win32-x64@npm:1.89.2" +"sass-embedded-win32-x64@npm:1.93.2": + version: 1.93.2 + resolution: "sass-embedded-win32-x64@npm:1.93.2" conditions: os=win32 & cpu=x64 languageName: node linkType: hard -"sass-embedded@npm:^1.85.1": - version: 1.89.2 - resolution: "sass-embedded@npm:1.89.2" +"sass-embedded@npm:^1.89.2": + version: 1.93.2 + resolution: "sass-embedded@npm:1.93.2" dependencies: "@bufbuild/protobuf": "npm:^2.5.0" buffer-builder: "npm:^0.2.0" colorjs.io: "npm:^0.5.0" immutable: "npm:^5.0.2" rxjs: "npm:^7.4.0" - sass-embedded-android-arm: "npm:1.89.2" - sass-embedded-android-arm64: "npm:1.89.2" - sass-embedded-android-riscv64: "npm:1.89.2" - sass-embedded-android-x64: "npm:1.89.2" - sass-embedded-darwin-arm64: "npm:1.89.2" - sass-embedded-darwin-x64: "npm:1.89.2" - sass-embedded-linux-arm: "npm:1.89.2" - sass-embedded-linux-arm64: "npm:1.89.2" - sass-embedded-linux-musl-arm: "npm:1.89.2" - sass-embedded-linux-musl-arm64: "npm:1.89.2" - sass-embedded-linux-musl-riscv64: "npm:1.89.2" - sass-embedded-linux-musl-x64: "npm:1.89.2" - sass-embedded-linux-riscv64: "npm:1.89.2" - sass-embedded-linux-x64: "npm:1.89.2" - sass-embedded-win32-arm64: "npm:1.89.2" - sass-embedded-win32-x64: "npm:1.89.2" + sass-embedded-all-unknown: "npm:1.93.2" + sass-embedded-android-arm: "npm:1.93.2" + sass-embedded-android-arm64: "npm:1.93.2" + sass-embedded-android-riscv64: "npm:1.93.2" + sass-embedded-android-x64: "npm:1.93.2" + sass-embedded-darwin-arm64: "npm:1.93.2" + sass-embedded-darwin-x64: "npm:1.93.2" + sass-embedded-linux-arm: "npm:1.93.2" + sass-embedded-linux-arm64: "npm:1.93.2" + sass-embedded-linux-musl-arm: "npm:1.93.2" + sass-embedded-linux-musl-arm64: "npm:1.93.2" + sass-embedded-linux-musl-riscv64: "npm:1.93.2" + sass-embedded-linux-musl-x64: "npm:1.93.2" + sass-embedded-linux-riscv64: "npm:1.93.2" + sass-embedded-linux-x64: "npm:1.93.2" + sass-embedded-unknown-all: "npm:1.93.2" + sass-embedded-win32-arm64: "npm:1.93.2" + sass-embedded-win32-x64: "npm:1.93.2" supports-color: "npm:^8.1.1" sync-child-process: "npm:^1.0.2" varint: "npm:^6.0.0" dependenciesMeta: + sass-embedded-all-unknown: + optional: true sass-embedded-android-arm: optional: true sass-embedded-android-arm64: @@ -19169,19 +19191,21 @@ __metadata: optional: true sass-embedded-linux-x64: optional: true + sass-embedded-unknown-all: + optional: true sass-embedded-win32-arm64: optional: true sass-embedded-win32-x64: optional: true bin: sass: dist/bin/sass.js - checksum: 10/90dbf6fbc38e2b0442d8ac51d0d8c7f7be138df64944521de551933ea9c16867814a4bb2bfa6035080f3419fc3ef9a6d5e25908b62ef348c8c229ae26bb532f6 + checksum: 10/1f5c6fe5e0533d54472f1b17af964e3e4361bf51e6fe4d1fea784c3f26e56d53fa570ef696ae7bf0d38a2197ac242fe450b5b0c22c1f99c8f43bec6bb0fee242 languageName: node linkType: hard -"sass@npm:^1.69.5, sass@npm:^1.83.4": - version: 1.89.2 - resolution: "sass@npm:1.89.2" +"sass@npm:1.93.2, sass@npm:^1.93.2": + version: 1.93.2 + resolution: "sass@npm:1.93.2" dependencies: "@parcel/watcher": "npm:^2.4.1" chokidar: "npm:^4.0.0" @@ -19192,7 +19216,7 @@ __metadata: optional: true bin: sass: sass.js - checksum: 10/7e9044f3c88b23580731de321cdf4c53fe6139395e2241fce7ff353c60a7cc8fe36b5eedc9701e092d2975f2c124e886379bb9ceab27b5ed053548f202b992b3 + checksum: 10/2fc0dcafdf3050f4131650a00ddd772790af1dc3e31a97c6533f323efabddce81bd139a920f13a88af80d630a255f51ee91067a7478364b2a13fcc6f5f7e8308 languageName: node linkType: hard @@ -20691,9 +20715,9 @@ __metadata: resolution: "styles@workspace:Dnn.AdminExperience/ClientSide/Styles.Web" dependencies: "@dnncommunity/dnn-elements": "npm:^0.27.7" - "@stencil/core": "npm:^4.22.2" + "@stencil/core": "npm:^4.38.2" "@stencil/eslint-plugin": "npm:^1.1.0" - "@stencil/sass": "npm:^3.0.12" + "@stencil/sass": "npm:^3.2.2" "@types/node": "npm:^22.9.0" "@typescript-eslint/eslint-plugin": "npm:^8.46.2" "@typescript-eslint/parser": "npm:^8.46.2" From 8d33dea389344abd50d82dd38cc098214b68ffaa Mon Sep 17 00:00:00 2001 From: Brian Dukes Date: Tue, 21 Oct 2025 16:00:37 -0500 Subject: [PATCH 092/199] Bump babel Bump @babel/core to 7.28.4 Bump @babel/plugin-transform-object-assign to 7.27.1 Bump @babel/plugin-transform-react-jsx to 7.27.1 Bump @babel/preset-env to 7.28.3 Bump @babel/preset-react to 7.27.1 Bump babel-jest to 30.2.0 Bump babel-loader to 10.0.0 --- .../ClientSide/AdminLogs.Web/package.json | 10 +- .../ClientSide/Bundle.Web/package.json | 8 +- .../ClientSide/Dnn.React.Common/package.json | 10 +- .../ClientSide/Extensions.Web/package.json | 8 +- .../ClientSide/Licensing.Web/package.json | 8 +- .../ClientSide/Pages.Web/package.json | 10 +- .../ClientSide/Prompt.Web/package.json | 10 +- .../ClientSide/Roles.Web/package.json | 8 +- .../ClientSide/Security.Web/package.json | 10 +- .../ClientSide/Seo.Web/package.json | 8 +- .../ClientSide/Servers.Web/package.json | 8 +- .../ClientSide/SiteGroups.Web/package.json | 10 +- .../SiteImportExport.Web/package.json | 10 +- .../ClientSide/SiteSettings.Web/package.json | 10 +- .../ClientSide/Sites.Web/package.json | 10 +- .../Sites.Web/src/_exportables/package.json | 10 +- .../ClientSide/TaskScheduler.Web/package.json | 8 +- .../ClientSide/Themes.Web/package.json | 8 +- .../ClientSide/Users.Web/package.json | 10 +- .../Users.Web/src/_exportables/package.json | 10 +- .../ClientSide/Vocabularies.Web/package.json | 8 +- yarn.lock | 1002 +++++++++-------- 22 files changed, 643 insertions(+), 551 deletions(-) diff --git a/Dnn.AdminExperience/ClientSide/AdminLogs.Web/package.json b/Dnn.AdminExperience/ClientSide/AdminLogs.Web/package.json index 47ca676c642..335c9adc128 100644 --- a/Dnn.AdminExperience/ClientSide/AdminLogs.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/AdminLogs.Web/package.json @@ -9,15 +9,15 @@ "lint": "eslint --fix" }, "devDependencies": { - "@babel/core": "^7.26.0", + "@babel/core": "^7.28.4", "@babel/plugin-proposal-object-rest-spread": "^7.20.7", - "@babel/plugin-transform-object-assign": "^7.25.9", - "@babel/preset-env": "^7.26.0", - "@babel/preset-react": "^7.25.9", + "@babel/plugin-transform-object-assign": "^7.27.1", + "@babel/preset-env": "^7.28.3", + "@babel/preset-react": "^7.27.1", "@dnnsoftware/dnn-react-common": "10.1.0", "array.prototype.find": "2.2.3", "array.prototype.findindex": "2.2.4", - "babel-loader": "8.3.0", + "babel-loader": "10.0.0", "babel-plugin-transform-react-remove-prop-types": "0.4.24", "babel-polyfill": "6.26.0", "create-react-class": "^15.7.0", diff --git a/Dnn.AdminExperience/ClientSide/Bundle.Web/package.json b/Dnn.AdminExperience/ClientSide/Bundle.Web/package.json index 3b3d7ec15d4..1655a46f599 100644 --- a/Dnn.AdminExperience/ClientSide/Bundle.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Bundle.Web/package.json @@ -10,11 +10,11 @@ "lint": "eslint --fix" }, "devDependencies": { - "@babel/core": "^7.26.0", + "@babel/core": "^7.28.4", "@babel/plugin-proposal-object-rest-spread": "^7.20.7", - "@babel/preset-env": "^7.26.0", - "@babel/preset-react": "^7.25.9", - "babel-loader": "^8.3.0", + "@babel/preset-env": "^7.28.3", + "@babel/preset-react": "^7.27.1", + "babel-loader": "^10.0.0", "babel-plugin-transform-object-assign": "6.22.0", "babel-plugin-transform-object-rest-spread": "6.26.0", "babel-plugin-transform-react-remove-prop-types": "0.4.24", diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/package.json b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/package.json index c7305d313bf..4b7994a8dfd 100644 --- a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/package.json +++ b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/package.json @@ -45,20 +45,20 @@ "throttle-debounce": "^5.0.0" }, "devDependencies": { - "@babel/core": "^7.26.0", + "@babel/core": "^7.28.4", "@babel/eslint-parser": "^7.28.4", "@babel/eslint-plugin": "7.27.1", "@babel/plugin-proposal-object-rest-spread": "^7.20.7", - "@babel/plugin-transform-object-assign": "^7.25.9", - "@babel/preset-env": "^7.26.0", - "@babel/preset-react": "^7.25.9", + "@babel/plugin-transform-object-assign": "^7.27.1", + "@babel/preset-env": "^7.28.3", + "@babel/preset-react": "^7.27.1", "@eslint/compat": "^1.4.0", "@storybook/addon-docs": "9.0.4", "@storybook/addon-onboarding": "9.0.4", "@storybook/addon-webpack5-compiler-swc": "4.0.1", "@storybook/react-webpack5": "9.0.4", "babel-eslint": "^10.1.0", - "babel-loader": "^8.3.0", + "babel-loader": "^10.0.0", "babel-plugin-transform-react-remove-prop-types": "0.4.24", "babel-polyfill": "6.26.0", "cpy-cli": "^2.0.0", diff --git a/Dnn.AdminExperience/ClientSide/Extensions.Web/package.json b/Dnn.AdminExperience/ClientSide/Extensions.Web/package.json index 247bd1bbe8b..456dca235ad 100644 --- a/Dnn.AdminExperience/ClientSide/Extensions.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Extensions.Web/package.json @@ -10,11 +10,11 @@ "lint": "eslint --fix" }, "devDependencies": { - "@babel/core": "^7.26.0", - "@babel/preset-env": "^7.26.0", - "@babel/preset-react": "^7.25.9", + "@babel/core": "^7.28.4", + "@babel/preset-env": "^7.28.3", + "@babel/preset-react": "^7.27.1", "@dnnsoftware/dnn-react-common": "10.1.0", - "babel-loader": "8.3.0", + "babel-loader": "10.0.0", "babel-plugin-transform-object-assign": "6.22.0", "babel-plugin-transform-object-rest-spread": "6.26.0", "babel-plugin-transform-react-remove-prop-types": "0.4.24", diff --git a/Dnn.AdminExperience/ClientSide/Licensing.Web/package.json b/Dnn.AdminExperience/ClientSide/Licensing.Web/package.json index 1acbe62c819..f21dbd5ee03 100644 --- a/Dnn.AdminExperience/ClientSide/Licensing.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Licensing.Web/package.json @@ -10,13 +10,13 @@ "lint": "eslint --fix" }, "devDependencies": { - "@babel/core": "^7.26.0", - "@babel/preset-env": "^7.26.0", - "@babel/preset-react": "^7.25.9", + "@babel/core": "^7.28.4", + "@babel/preset-env": "^7.28.3", + "@babel/preset-react": "^7.27.1", "@dnnsoftware/dnn-react-common": "10.1.0", "array.prototype.find": "2.2.3", "array.prototype.findindex": "2.2.4", - "babel-loader": "8.3.0", + "babel-loader": "10.0.0", "babel-plugin-transform-object-assign": "6.22.0", "babel-plugin-transform-object-rest-spread": "6.26.0", "babel-plugin-transform-react-remove-prop-types": "0.4.24", diff --git a/Dnn.AdminExperience/ClientSide/Pages.Web/package.json b/Dnn.AdminExperience/ClientSide/Pages.Web/package.json index 495ae3df858..f583c490589 100644 --- a/Dnn.AdminExperience/ClientSide/Pages.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Pages.Web/package.json @@ -19,16 +19,16 @@ "es6-promise": "4.0.5" }, "devDependencies": { - "@babel/core": "^7.26.0", + "@babel/core": "^7.28.4", "@babel/plugin-proposal-object-rest-spread": "^7.20.7", - "@babel/preset-env": "^7.26.0", - "@babel/preset-react": "^7.25.9", + "@babel/preset-env": "^7.28.3", + "@babel/preset-react": "^7.27.1", "@dnnsoftware/dnn-react-common": "10.1.0", "@types/knockout": "^3.4.72", "@types/redux": "3.6.31", "babel-eslint": "^10.1.0", - "babel-jest": "^29.7.0", - "babel-loader": "8.3.0", + "babel-jest": "^30.2.0", + "babel-loader": "10.0.0", "babel-plugin-transform-object-assign": "^6.22.0", "babel-plugin-transform-object-rest-spread": "6.26.0", "babel-plugin-transform-react-remove-prop-types": "0.4.24", diff --git a/Dnn.AdminExperience/ClientSide/Prompt.Web/package.json b/Dnn.AdminExperience/ClientSide/Prompt.Web/package.json index a3e656e31c9..435813914f8 100644 --- a/Dnn.AdminExperience/ClientSide/Prompt.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Prompt.Web/package.json @@ -12,15 +12,15 @@ "lint": "eslint --fix" }, "devDependencies": { - "@babel/core": "^7.26.0", - "@babel/preset-env": "^7.26.0", - "@babel/preset-react": "^7.25.9", + "@babel/core": "^7.28.4", + "@babel/preset-env": "^7.28.3", + "@babel/preset-react": "^7.27.1", "@dnnsoftware/dnn-react-common": "10.1.0", "array.prototype.find": "2.2.3", "array.prototype.findindex": "2.2.4", "babel-eslint": "^10.1.0", - "babel-jest": "^29.7.0", - "babel-loader": "^8.3.0", + "babel-jest": "^30.2.0", + "babel-loader": "^10.0.0", "babel-plugin-transform-object-assign": "6.22.0", "babel-plugin-transform-object-rest-spread": "6.26.0", "babel-plugin-transform-react-remove-prop-types": "0.4.24", diff --git a/Dnn.AdminExperience/ClientSide/Roles.Web/package.json b/Dnn.AdminExperience/ClientSide/Roles.Web/package.json index 73860a054c3..82dec7852b6 100644 --- a/Dnn.AdminExperience/ClientSide/Roles.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Roles.Web/package.json @@ -10,13 +10,13 @@ "lint": "eslint --fix" }, "devDependencies": { - "@babel/core": "^7.26.0", - "@babel/preset-env": "^7.26.0", - "@babel/preset-react": "^7.25.9", + "@babel/core": "^7.28.4", + "@babel/preset-env": "^7.28.3", + "@babel/preset-react": "^7.27.1", "@dnnsoftware/dnn-react-common": "10.1.0", "array.prototype.find": "^2.2.3", "array.prototype.findindex": "^2.2.1", - "babel-loader": "^8.3.0", + "babel-loader": "^10.0.0", "babel-plugin-transform-object-assign": "6.22.0", "babel-plugin-transform-object-rest-spread": "6.26.0", "babel-plugin-transform-react-remove-prop-types": "0.4.24", diff --git a/Dnn.AdminExperience/ClientSide/Security.Web/package.json b/Dnn.AdminExperience/ClientSide/Security.Web/package.json index c0a99d90a9e..ce3d6722085 100644 --- a/Dnn.AdminExperience/ClientSide/Security.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Security.Web/package.json @@ -10,13 +10,13 @@ "lint": "eslint --fix" }, "devDependencies": { - "@babel/core": "^7.26.0", + "@babel/core": "^7.28.4", "@babel/plugin-proposal-object-rest-spread": "^7.20.7", - "@babel/plugin-transform-react-jsx": "^7.25.9", - "@babel/preset-env": "^7.26.0", - "@babel/preset-react": "^7.25.9", + "@babel/plugin-transform-react-jsx": "^7.27.1", + "@babel/preset-env": "^7.28.3", + "@babel/preset-react": "^7.27.1", "@dnnsoftware/dnn-react-common": "10.1.0", - "babel-loader": "8.3.0", + "babel-loader": "10.0.0", "babel-plugin-transform-react-remove-prop-types": "0.4.24", "create-react-class": "^15.7.0", "css-loader": "^7.1.2", diff --git a/Dnn.AdminExperience/ClientSide/Seo.Web/package.json b/Dnn.AdminExperience/ClientSide/Seo.Web/package.json index 642829c9c33..b49623654e6 100644 --- a/Dnn.AdminExperience/ClientSide/Seo.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Seo.Web/package.json @@ -10,14 +10,14 @@ "lint": "eslint --fix" }, "devDependencies": { - "@babel/core": "^7.26.0", + "@babel/core": "^7.28.4", "@babel/plugin-proposal-object-rest-spread": "^7.20.7", - "@babel/preset-env": "^7.26.0", - "@babel/preset-react": "^7.25.9", + "@babel/preset-env": "^7.28.3", + "@babel/preset-react": "^7.27.1", "@dnnsoftware/dnn-react-common": "10.1.0", "array.prototype.find": "2.2.3", "array.prototype.findindex": "2.2.4", - "babel-loader": "8.3.0", + "babel-loader": "10.0.0", "babel-plugin-transform-object-assign": "6.22.0", "babel-plugin-transform-object-rest-spread": "6.26.0", "babel-plugin-transform-react-remove-prop-types": "0.4.24", diff --git a/Dnn.AdminExperience/ClientSide/Servers.Web/package.json b/Dnn.AdminExperience/ClientSide/Servers.Web/package.json index c12e7b5985d..b5fe2c871f5 100644 --- a/Dnn.AdminExperience/ClientSide/Servers.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Servers.Web/package.json @@ -10,13 +10,13 @@ "lint": "eslint --fix" }, "devDependencies": { - "@babel/core": "^7.26.0", + "@babel/core": "^7.28.4", "@babel/plugin-proposal-object-rest-spread": "^7.20.7", - "@babel/preset-env": "^7.26.0", - "@babel/preset-react": "^7.25.9", + "@babel/preset-env": "^7.28.3", + "@babel/preset-react": "^7.27.1", "@dnnsoftware/dnn-react-common": "10.1.0", "@types/redux": "^3.6.31", - "babel-loader": "8.3.0", + "babel-loader": "10.0.0", "babel-plugin-transform-object-assign": "6.22.0", "babel-plugin-transform-object-rest-spread": "6.26.0", "babel-plugin-transform-react-remove-prop-types": "0.4.24", diff --git a/Dnn.AdminExperience/ClientSide/SiteGroups.Web/package.json b/Dnn.AdminExperience/ClientSide/SiteGroups.Web/package.json index 91f546f5498..4981a663189 100644 --- a/Dnn.AdminExperience/ClientSide/SiteGroups.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/SiteGroups.Web/package.json @@ -10,13 +10,13 @@ "lint": "eslint --fix" }, "devDependencies": { - "@babel/core": "7.26.0", + "@babel/core": "7.28.4", "@babel/plugin-proposal-object-rest-spread": "7.20.7", - "@babel/plugin-transform-object-assign": "7.25.9", - "@babel/preset-env": "7.26.0", - "@babel/preset-react": "7.25.9", + "@babel/plugin-transform-object-assign": "7.27.1", + "@babel/preset-env": "7.28.3", + "@babel/preset-react": "7.27.1", "@dnnsoftware/dnn-react-common": "10.1.0", - "babel-loader": "8.3.0", + "babel-loader": "10.0.0", "babel-plugin-transform-react-remove-prop-types": "0.4.24", "babel-polyfill": "6.26.0", "create-react-class": "^15.7.0", diff --git a/Dnn.AdminExperience/ClientSide/SiteImportExport.Web/package.json b/Dnn.AdminExperience/ClientSide/SiteImportExport.Web/package.json index 77fa828ce52..0c3893a25a7 100644 --- a/Dnn.AdminExperience/ClientSide/SiteImportExport.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/SiteImportExport.Web/package.json @@ -10,14 +10,14 @@ "lint": "eslint --fix" }, "devDependencies": { - "@babel/core": "^7.26.0", + "@babel/core": "^7.28.4", "@babel/plugin-proposal-object-rest-spread": "^7.20.7", - "@babel/plugin-transform-react-jsx": "^7.25.9", - "@babel/preset-env": "^7.26.0", - "@babel/preset-react": "^7.25.9", + "@babel/plugin-transform-react-jsx": "^7.27.1", + "@babel/preset-env": "^7.28.3", + "@babel/preset-react": "^7.27.1", "@dnnsoftware/dnn-react-common": "10.1.0", "babel-eslint": "^10.1.0", - "babel-loader": "8.3.0", + "babel-loader": "10.0.0", "babel-plugin-transform-class-properties": "^6.24.1", "babel-plugin-transform-object-assign": "6.22.0", "babel-plugin-transform-object-rest-spread": "6.26.0", diff --git a/Dnn.AdminExperience/ClientSide/SiteSettings.Web/package.json b/Dnn.AdminExperience/ClientSide/SiteSettings.Web/package.json index f9fa18f3b37..52603ad0628 100644 --- a/Dnn.AdminExperience/ClientSide/SiteSettings.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/SiteSettings.Web/package.json @@ -12,15 +12,15 @@ "lint": "eslint --fix" }, "devDependencies": { - "@babel/core": "^7.26.0", + "@babel/core": "^7.28.4", "@babel/plugin-proposal-object-rest-spread": "^7.20.7", - "@babel/plugin-transform-react-jsx": "^7.25.9", - "@babel/preset-env": "^7.26.0", - "@babel/preset-react": "^7.25.9", + "@babel/plugin-transform-react-jsx": "^7.27.1", + "@babel/preset-env": "^7.28.3", + "@babel/preset-react": "^7.27.1", "@dnnsoftware/dnn-react-common": "10.1.0", "array.prototype.find": "2.2.3", "array.prototype.findindex": "2.2.4", - "babel-loader": "^8.3.0", + "babel-loader": "^10.0.0", "babel-plugin-transform-react-remove-prop-types": "^0.4.24", "create-react-class": "^15.7.0", "css-loader": "^7.1.2", diff --git a/Dnn.AdminExperience/ClientSide/Sites.Web/package.json b/Dnn.AdminExperience/ClientSide/Sites.Web/package.json index 6494a71989d..543293642d1 100644 --- a/Dnn.AdminExperience/ClientSide/Sites.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Sites.Web/package.json @@ -10,13 +10,13 @@ "lint": "eslint --fix" }, "devDependencies": { - "@babel/core": "7.26.0", + "@babel/core": "7.28.4", "@babel/plugin-proposal-object-rest-spread": "7.20.7", - "@babel/plugin-transform-object-assign": "7.25.9", - "@babel/preset-env": "7.26.0", - "@babel/preset-react": "7.25.9", + "@babel/plugin-transform-object-assign": "7.27.1", + "@babel/preset-env": "7.28.3", + "@babel/preset-react": "7.27.1", "@dnnsoftware/dnn-react-common": "10.1.0", - "babel-loader": "8.3.0", + "babel-loader": "10.0.0", "babel-plugin-transform-react-remove-prop-types": "0.4.24", "babel-polyfill": "6.26.0", "create-react-class": "^15.7.0", diff --git a/Dnn.AdminExperience/ClientSide/Sites.Web/src/_exportables/package.json b/Dnn.AdminExperience/ClientSide/Sites.Web/src/_exportables/package.json index db555005b26..658b30167e2 100644 --- a/Dnn.AdminExperience/ClientSide/Sites.Web/src/_exportables/package.json +++ b/Dnn.AdminExperience/ClientSide/Sites.Web/src/_exportables/package.json @@ -10,13 +10,13 @@ }, "license": "UNLICENSED", "devDependencies": { - "@babel/core": "7.26.0", + "@babel/core": "7.28.4", "@babel/plugin-proposal-object-rest-spread": "7.20.7", - "@babel/plugin-transform-object-assign": "7.25.9", - "@babel/preset-env": "7.26.0", - "@babel/preset-react": "7.25.9", + "@babel/plugin-transform-object-assign": "7.27.1", + "@babel/preset-env": "7.28.3", + "@babel/preset-react": "7.27.1", "@dnnsoftware/dnn-react-common": "10.1.0", - "babel-loader": "8.3.0", + "babel-loader": "10.0.0", "babel-plugin-transform-react-remove-prop-types": "0.4.24", "babel-polyfill": "6.26.0", "create-react-class": "^15.7.0", diff --git a/Dnn.AdminExperience/ClientSide/TaskScheduler.Web/package.json b/Dnn.AdminExperience/ClientSide/TaskScheduler.Web/package.json index 51901458834..ff2bc30ff27 100644 --- a/Dnn.AdminExperience/ClientSide/TaskScheduler.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/TaskScheduler.Web/package.json @@ -10,14 +10,14 @@ "lint": "eslint --fix" }, "devDependencies": { - "@babel/core": "^7.26.0", + "@babel/core": "^7.28.4", "@babel/plugin-proposal-object-rest-spread": "^7.20.7", - "@babel/preset-env": "^7.26.0", - "@babel/preset-react": "^7.25.9", + "@babel/preset-env": "^7.28.3", + "@babel/preset-react": "^7.27.1", "@dnnsoftware/dnn-react-common": "10.1.0", "array.prototype.find": "2.2.3", "array.prototype.findindex": "2.2.4", - "babel-loader": "8.3.0", + "babel-loader": "10.0.0", "babel-plugin-transform-object-assign": "6.22.0", "babel-plugin-transform-object-rest-spread": "6.26.0", "babel-plugin-transform-react-remove-prop-types": "0.4.24", diff --git a/Dnn.AdminExperience/ClientSide/Themes.Web/package.json b/Dnn.AdminExperience/ClientSide/Themes.Web/package.json index bd3358fc313..d45d012521a 100644 --- a/Dnn.AdminExperience/ClientSide/Themes.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Themes.Web/package.json @@ -10,12 +10,12 @@ "lint": "eslint --fix" }, "devDependencies": { - "@babel/core": "^7.26.0", + "@babel/core": "^7.28.4", "@babel/plugin-proposal-object-rest-spread": "^7.20.7", - "@babel/preset-env": "^7.26.0", - "@babel/preset-react": "^7.25.9", + "@babel/preset-env": "^7.28.3", + "@babel/preset-react": "^7.27.1", "@dnnsoftware/dnn-react-common": "10.1.0", - "babel-loader": "8.3.0", + "babel-loader": "10.0.0", "babel-plugin-transform-object-assign": "6.22.0", "babel-plugin-transform-object-rest-spread": "6.26.0", "babel-plugin-transform-react-remove-prop-types": "0.4.24", diff --git a/Dnn.AdminExperience/ClientSide/Users.Web/package.json b/Dnn.AdminExperience/ClientSide/Users.Web/package.json index 3a363317e99..6d9e16ed682 100644 --- a/Dnn.AdminExperience/ClientSide/Users.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Users.Web/package.json @@ -12,12 +12,12 @@ "lint": "eslint --fix" }, "devDependencies": { - "@babel/core": "^7.26.0", + "@babel/core": "^7.28.4", "@babel/plugin-proposal-object-rest-spread": "^7.20.7", - "@babel/plugin-transform-react-jsx": "^7.25.9", - "@babel/preset-env": "^7.26.0", - "@babel/preset-react": "^7.25.9", - "babel-loader": "^8.3.0", + "@babel/plugin-transform-react-jsx": "^7.27.1", + "@babel/preset-env": "^7.28.3", + "@babel/preset-react": "^7.27.1", + "babel-loader": "^10.0.0", "create-react-class": "^15.7.0", "css-loader": "^7.1.2", "eslint": "9.38.0", diff --git a/Dnn.AdminExperience/ClientSide/Users.Web/src/_exportables/package.json b/Dnn.AdminExperience/ClientSide/Users.Web/src/_exportables/package.json index 073ecf14f8a..262f54f5131 100644 --- a/Dnn.AdminExperience/ClientSide/Users.Web/src/_exportables/package.json +++ b/Dnn.AdminExperience/ClientSide/Users.Web/src/_exportables/package.json @@ -11,13 +11,13 @@ }, "license": "UNLICENSED", "devDependencies": { - "@babel/core": "^7.26.0", + "@babel/core": "^7.28.4", "@babel/plugin-proposal-object-rest-spread": "^7.20.7", - "@babel/plugin-transform-react-jsx": "^7.25.9", - "@babel/preset-env": "^7.26.0", - "@babel/preset-react": "^7.25.9", + "@babel/plugin-transform-react-jsx": "^7.27.1", + "@babel/preset-env": "^7.28.3", + "@babel/preset-react": "^7.27.1", "@dnnsoftware/dnn-react-common": "10.1.0", - "babel-loader": "8.3.0", + "babel-loader": "10.0.0", "create-react-class": "^15.7.0", "css-loader": "^7.1.2", "dayjs": "^1.11.9", diff --git a/Dnn.AdminExperience/ClientSide/Vocabularies.Web/package.json b/Dnn.AdminExperience/ClientSide/Vocabularies.Web/package.json index be0957ced4f..ff0730a964c 100644 --- a/Dnn.AdminExperience/ClientSide/Vocabularies.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Vocabularies.Web/package.json @@ -10,14 +10,14 @@ "lint": "eslint --fix" }, "devDependencies": { - "@babel/core": "^7.26.0", + "@babel/core": "^7.28.4", "@babel/plugin-proposal-object-rest-spread": "^7.20.7", - "@babel/preset-env": "^7.26.0", - "@babel/preset-react": "^7.25.9", + "@babel/preset-env": "^7.28.3", + "@babel/preset-react": "^7.27.1", "@dnnsoftware/dnn-react-common": "10.1.0", "array.prototype.find": "2.2.3", "array.prototype.findindex": "2.2.4", - "babel-loader": "^8.3.0", + "babel-loader": "^10.0.0", "babel-plugin-transform-object-assign": "6.22.0", "babel-plugin-transform-object-rest-spread": "6.26.0", "babel-plugin-transform-react-remove-prop-types": "0.4.24", diff --git a/yarn.lock b/yarn.lock index 850ba3c9882..28745ef1977 100644 --- a/yarn.lock +++ b/yarn.lock @@ -35,7 +35,7 @@ __metadata: languageName: node linkType: hard -"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.16.7, @babel/code-frame@npm:^7.26.0, @babel/code-frame@npm:^7.27.1": +"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.16.7, @babel/code-frame@npm:^7.27.1": version: 7.27.1 resolution: "@babel/code-frame@npm:7.27.1" dependencies: @@ -46,37 +46,37 @@ __metadata: languageName: node linkType: hard -"@babel/compat-data@npm:^7.20.5, @babel/compat-data@npm:^7.26.0, @babel/compat-data@npm:^7.27.2, @babel/compat-data@npm:^7.27.7, @babel/compat-data@npm:^7.28.0": +"@babel/compat-data@npm:^7.20.5, @babel/compat-data@npm:^7.27.2, @babel/compat-data@npm:^7.27.7, @babel/compat-data@npm:^7.28.0": version: 7.28.0 resolution: "@babel/compat-data@npm:7.28.0" checksum: 10/1a56a5e48c7259f72cc4329adeca38e72fd650ea09de267ea4aa070e3da91e5c265313b6656823fff77d64a8bab9554f276c66dade9355fdc0d8604deea015aa languageName: node linkType: hard -"@babel/core@npm:7.26.0": - version: 7.26.0 - resolution: "@babel/core@npm:7.26.0" +"@babel/core@npm:7.28.4, @babel/core@npm:^7.23.9, @babel/core@npm:^7.27.4, @babel/core@npm:^7.28.4": + version: 7.28.4 + resolution: "@babel/core@npm:7.28.4" dependencies: - "@ampproject/remapping": "npm:^2.2.0" - "@babel/code-frame": "npm:^7.26.0" - "@babel/generator": "npm:^7.26.0" - "@babel/helper-compilation-targets": "npm:^7.25.9" - "@babel/helper-module-transforms": "npm:^7.26.0" - "@babel/helpers": "npm:^7.26.0" - "@babel/parser": "npm:^7.26.0" - "@babel/template": "npm:^7.25.9" - "@babel/traverse": "npm:^7.25.9" - "@babel/types": "npm:^7.26.0" + "@babel/code-frame": "npm:^7.27.1" + "@babel/generator": "npm:^7.28.3" + "@babel/helper-compilation-targets": "npm:^7.27.2" + "@babel/helper-module-transforms": "npm:^7.28.3" + "@babel/helpers": "npm:^7.28.4" + "@babel/parser": "npm:^7.28.4" + "@babel/template": "npm:^7.27.2" + "@babel/traverse": "npm:^7.28.4" + "@babel/types": "npm:^7.28.4" + "@jridgewell/remapping": "npm:^2.3.5" convert-source-map: "npm:^2.0.0" debug: "npm:^4.1.0" gensync: "npm:^1.0.0-beta.2" json5: "npm:^2.2.3" semver: "npm:^6.3.1" - checksum: 10/65767bfdb1f02e80d3af4f138066670ef8fdd12293de85ef151758a901c191c797e86d2e99b11c4cdfca33c72385ecaf38bbd7fa692791ec44c77763496b9b93 + checksum: 10/0593295241fac9be567145ef16f3858d34fc91390a9438c6d47476be9823af4cc0488c851c59702dd46b968e9fd46d17ddf0105ea30195ca85f5a66b4044c519 languageName: node linkType: hard -"@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.18.9, @babel/core@npm:^7.26.0": +"@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.18.9": version: 7.28.0 resolution: "@babel/core@npm:7.28.0" dependencies: @@ -125,7 +125,7 @@ __metadata: languageName: node linkType: hard -"@babel/generator@npm:^7.26.0, @babel/generator@npm:^7.28.0, @babel/generator@npm:^7.7.2": +"@babel/generator@npm:^7.28.0, @babel/generator@npm:^7.7.2": version: 7.28.0 resolution: "@babel/generator@npm:7.28.0" dependencies: @@ -138,6 +138,19 @@ __metadata: languageName: node linkType: hard +"@babel/generator@npm:^7.28.3": + version: 7.28.3 + resolution: "@babel/generator@npm:7.28.3" + dependencies: + "@babel/parser": "npm:^7.28.3" + "@babel/types": "npm:^7.28.2" + "@jridgewell/gen-mapping": "npm:^0.3.12" + "@jridgewell/trace-mapping": "npm:^0.3.28" + jsesc: "npm:^3.0.2" + checksum: 10/d00d1e6b51059e47594aab7920b88ec6fcef6489954a9172235ab57ad2e91b39c95376963a6e2e4cc7e8b88fa4f931018f71f9ab32bbc9c0bc0de35a0231f26c + languageName: node + linkType: hard + "@babel/helper-annotate-as-pure@npm:^7.27.1, @babel/helper-annotate-as-pure@npm:^7.27.3": version: 7.27.3 resolution: "@babel/helper-annotate-as-pure@npm:7.27.3" @@ -147,7 +160,7 @@ __metadata: languageName: node linkType: hard -"@babel/helper-compilation-targets@npm:^7.20.7, @babel/helper-compilation-targets@npm:^7.25.9, @babel/helper-compilation-targets@npm:^7.27.1, @babel/helper-compilation-targets@npm:^7.27.2": +"@babel/helper-compilation-targets@npm:^7.20.7, @babel/helper-compilation-targets@npm:^7.27.1, @babel/helper-compilation-targets@npm:^7.27.2": version: 7.27.2 resolution: "@babel/helper-compilation-targets@npm:7.27.2" dependencies: @@ -177,6 +190,23 @@ __metadata: languageName: node linkType: hard +"@babel/helper-create-class-features-plugin@npm:^7.28.3": + version: 7.28.3 + resolution: "@babel/helper-create-class-features-plugin@npm:7.28.3" + dependencies: + "@babel/helper-annotate-as-pure": "npm:^7.27.3" + "@babel/helper-member-expression-to-functions": "npm:^7.27.1" + "@babel/helper-optimise-call-expression": "npm:^7.27.1" + "@babel/helper-replace-supers": "npm:^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.27.1" + "@babel/traverse": "npm:^7.28.3" + semver: "npm:^6.3.1" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10/32d01bdd601b4d129b1d510058a19644abc764badcc543adaec9e71443e874ef252783cceb2809645bdf0e92b07f206fd439c75a2a48cf702c627aba7f3ee34a + languageName: node + linkType: hard + "@babel/helper-create-regexp-features-plugin@npm:^7.18.6, @babel/helper-create-regexp-features-plugin@npm:^7.27.1": version: 7.27.1 resolution: "@babel/helper-create-regexp-features-plugin@npm:7.27.1" @@ -190,7 +220,7 @@ __metadata: languageName: node linkType: hard -"@babel/helper-define-polyfill-provider@npm:^0.6.2, @babel/helper-define-polyfill-provider@npm:^0.6.5": +"@babel/helper-define-polyfill-provider@npm:^0.6.5": version: 0.6.5 resolution: "@babel/helper-define-polyfill-provider@npm:0.6.5" dependencies: @@ -232,7 +262,7 @@ __metadata: languageName: node linkType: hard -"@babel/helper-module-transforms@npm:^7.26.0, @babel/helper-module-transforms@npm:^7.27.1, @babel/helper-module-transforms@npm:^7.27.3": +"@babel/helper-module-transforms@npm:^7.27.1, @babel/helper-module-transforms@npm:^7.27.3": version: 7.27.3 resolution: "@babel/helper-module-transforms@npm:7.27.3" dependencies: @@ -245,6 +275,19 @@ __metadata: languageName: node linkType: hard +"@babel/helper-module-transforms@npm:^7.28.3": + version: 7.28.3 + resolution: "@babel/helper-module-transforms@npm:7.28.3" + dependencies: + "@babel/helper-module-imports": "npm:^7.27.1" + "@babel/helper-validator-identifier": "npm:^7.27.1" + "@babel/traverse": "npm:^7.28.3" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10/598fdd8aa5b91f08542d0ba62a737847d0e752c8b95ae2566bc9d11d371856d6867d93e50db870fb836a6c44cfe481c189d8a2b35ca025a224f070624be9fa87 + languageName: node + linkType: hard + "@babel/helper-optimise-call-expression@npm:^7.27.1": version: 7.27.1 resolution: "@babel/helper-optimise-call-expression@npm:7.27.1" @@ -254,7 +297,7 @@ __metadata: languageName: node linkType: hard -"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.20.2, @babel/helper-plugin-utils@npm:^7.25.9, @babel/helper-plugin-utils@npm:^7.27.1, @babel/helper-plugin-utils@npm:^7.8.0": +"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.20.2, @babel/helper-plugin-utils@npm:^7.27.1, @babel/helper-plugin-utils@npm:^7.8.0": version: 7.27.1 resolution: "@babel/helper-plugin-utils@npm:7.27.1" checksum: 10/96136c2428888e620e2ec493c25888f9ceb4a21099dcf3dd4508ea64b58cdedbd5a9fb6c7b352546de84d6c24edafe482318646932a22c449ebd16d16c22d864 @@ -311,7 +354,7 @@ __metadata: languageName: node linkType: hard -"@babel/helper-validator-option@npm:^7.25.9, @babel/helper-validator-option@npm:^7.27.1": +"@babel/helper-validator-option@npm:^7.27.1": version: 7.27.1 resolution: "@babel/helper-validator-option@npm:7.27.1" checksum: 10/db73e6a308092531c629ee5de7f0d04390835b21a263be2644276cb27da2384b64676cab9f22cd8d8dbd854c92b1d7d56fc8517cf0070c35d1c14a8c828b0903 @@ -329,7 +372,7 @@ __metadata: languageName: node linkType: hard -"@babel/helpers@npm:^7.26.0, @babel/helpers@npm:^7.27.6": +"@babel/helpers@npm:^7.27.6": version: 7.27.6 resolution: "@babel/helpers@npm:7.27.6" dependencies: @@ -339,7 +382,17 @@ __metadata: languageName: node linkType: hard -"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.26.0, @babel/parser@npm:^7.27.2, @babel/parser@npm:^7.28.0, @babel/parser@npm:^7.7.0": +"@babel/helpers@npm:^7.28.4": + version: 7.28.4 + resolution: "@babel/helpers@npm:7.28.4" + dependencies: + "@babel/template": "npm:^7.27.2" + "@babel/types": "npm:^7.28.4" + checksum: 10/5a70a82e196cf8808f8a449cc4780c34d02edda2bb136d39ce9d26e63b615f18e89a95472230c3ce7695db0d33e7026efeee56f6454ed43480f223007ed205eb + languageName: node + linkType: hard + +"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.27.2, @babel/parser@npm:^7.28.0, @babel/parser@npm:^7.7.0": version: 7.28.0 resolution: "@babel/parser@npm:7.28.0" dependencies: @@ -350,7 +403,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:^7.25.9, @babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:^7.27.1": +"@babel/parser@npm:^7.23.9, @babel/parser@npm:^7.28.3, @babel/parser@npm:^7.28.4": + version: 7.28.4 + resolution: "@babel/parser@npm:7.28.4" + dependencies: + "@babel/types": "npm:^7.28.4" + bin: + parser: ./bin/babel-parser.js + checksum: 10/f54c46213ef180b149f6a17ea765bf40acc1aebe2009f594e2a283aec69a190c6dda1fdf24c61a258dbeb903abb8ffb7a28f1a378f8ab5d333846ce7b7e23bf1 + languageName: node + linkType: hard + +"@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:7.27.1" dependencies: @@ -362,7 +426,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-bugfix-safari-class-field-initializer-scope@npm:^7.25.9, @babel/plugin-bugfix-safari-class-field-initializer-scope@npm:^7.27.1": +"@babel/plugin-bugfix-safari-class-field-initializer-scope@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-bugfix-safari-class-field-initializer-scope@npm:7.27.1" dependencies: @@ -373,7 +437,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.25.9, @babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.27.1": +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.27.1" dependencies: @@ -384,7 +448,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.25.9, @babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.27.1": +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.27.1" dependencies: @@ -397,15 +461,15 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:^7.25.9, @babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:7.27.1" +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:^7.28.3": + version: 7.28.3 + resolution: "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:7.28.3" dependencies: "@babel/helper-plugin-utils": "npm:^7.27.1" - "@babel/traverse": "npm:^7.27.1" + "@babel/traverse": "npm:^7.28.3" peerDependencies: "@babel/core": ^7.0.0 - checksum: 10/dfa68da5f68c0fa9deff1739ac270a5643ea07540b26a2a05403bc536c96595f0fe98a5eac9f9b3501b79ce57caa3045a94c75d5ccbfed946a62469a370ecdc2 + checksum: 10/eeacdb7fa5ae19e366cbc4da98736b898e05b9abe572aa23093e6be842c6c8284d08af538528ec771073a3749718033be3713ff455ca008d11a7b0e90e62a53d languageName: node linkType: hard @@ -477,7 +541,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-import-assertions@npm:^7.26.0, @babel/plugin-syntax-import-assertions@npm:^7.27.1": +"@babel/plugin-syntax-import-assertions@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-syntax-import-assertions@npm:7.27.1" dependencies: @@ -488,7 +552,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-import-attributes@npm:^7.24.7, @babel/plugin-syntax-import-attributes@npm:^7.26.0, @babel/plugin-syntax-import-attributes@npm:^7.27.1": +"@babel/plugin-syntax-import-attributes@npm:^7.24.7, @babel/plugin-syntax-import-attributes@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-syntax-import-attributes@npm:7.27.1" dependencies: @@ -643,7 +707,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-arrow-functions@npm:^7.25.9, @babel/plugin-transform-arrow-functions@npm:^7.27.1": +"@babel/plugin-transform-arrow-functions@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-arrow-functions@npm:7.27.1" dependencies: @@ -654,7 +718,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-async-generator-functions@npm:^7.25.9, @babel/plugin-transform-async-generator-functions@npm:^7.28.0": +"@babel/plugin-transform-async-generator-functions@npm:^7.28.0": version: 7.28.0 resolution: "@babel/plugin-transform-async-generator-functions@npm:7.28.0" dependencies: @@ -667,7 +731,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-async-to-generator@npm:^7.25.9, @babel/plugin-transform-async-to-generator@npm:^7.27.1": +"@babel/plugin-transform-async-to-generator@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-async-to-generator@npm:7.27.1" dependencies: @@ -680,7 +744,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-block-scoped-functions@npm:^7.25.9, @babel/plugin-transform-block-scoped-functions@npm:^7.27.1": +"@babel/plugin-transform-block-scoped-functions@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.27.1" dependencies: @@ -691,7 +755,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-block-scoping@npm:^7.25.9, @babel/plugin-transform-block-scoping@npm:^7.28.0": +"@babel/plugin-transform-block-scoping@npm:^7.28.0": version: 7.28.0 resolution: "@babel/plugin-transform-block-scoping@npm:7.28.0" dependencies: @@ -702,7 +766,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-class-properties@npm:^7.25.9, @babel/plugin-transform-class-properties@npm:^7.27.1": +"@babel/plugin-transform-class-properties@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-class-properties@npm:7.27.1" dependencies: @@ -714,35 +778,35 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-class-static-block@npm:^7.26.0, @babel/plugin-transform-class-static-block@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-class-static-block@npm:7.27.1" +"@babel/plugin-transform-class-static-block@npm:^7.28.3": + version: 7.28.3 + resolution: "@babel/plugin-transform-class-static-block@npm:7.28.3" dependencies: - "@babel/helper-create-class-features-plugin": "npm:^7.27.1" + "@babel/helper-create-class-features-plugin": "npm:^7.28.3" "@babel/helper-plugin-utils": "npm:^7.27.1" peerDependencies: "@babel/core": ^7.12.0 - checksum: 10/2d49de0f5ffc66ae873be1d8c3bf4d22e51889cc779d534e4dbda0f91e36907479e5c650b209fcfc80f922a6c3c2d76c905fc2f5dc78cc9a836f8c31b10686c4 + checksum: 10/c0ba8f0cbf3699287e5a711907dab3b29f346d9c107faa4e424aa26252e45845d74ca08ee6245bfccf32a8c04bc1d07a89b635e51522592c6044b810a48d3f58 languageName: node linkType: hard -"@babel/plugin-transform-classes@npm:^7.25.9, @babel/plugin-transform-classes@npm:^7.28.0": - version: 7.28.0 - resolution: "@babel/plugin-transform-classes@npm:7.28.0" +"@babel/plugin-transform-classes@npm:^7.28.3": + version: 7.28.4 + resolution: "@babel/plugin-transform-classes@npm:7.28.4" dependencies: "@babel/helper-annotate-as-pure": "npm:^7.27.3" "@babel/helper-compilation-targets": "npm:^7.27.2" "@babel/helper-globals": "npm:^7.28.0" "@babel/helper-plugin-utils": "npm:^7.27.1" "@babel/helper-replace-supers": "npm:^7.27.1" - "@babel/traverse": "npm:^7.28.0" + "@babel/traverse": "npm:^7.28.4" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/1a812a02f641ffc80b139b3c690ceba52476576f9df1a62dbdde9c412e88ca143b7b872da71665838c34276c4ed92f6547199044a424222b84f9a8ee7c85798f + checksum: 10/1f8423d0ba287ba4ae3aac89299e704a666ef2fc5950cd581e056c068486917a460efd5731fdd0d0fb0a8a08852e13b31c1add089028e89a8991a7fdfaff5c43 languageName: node linkType: hard -"@babel/plugin-transform-computed-properties@npm:^7.25.9, @babel/plugin-transform-computed-properties@npm:^7.27.1": +"@babel/plugin-transform-computed-properties@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-computed-properties@npm:7.27.1" dependencies: @@ -754,7 +818,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-destructuring@npm:^7.25.9, @babel/plugin-transform-destructuring@npm:^7.28.0": +"@babel/plugin-transform-destructuring@npm:^7.28.0": version: 7.28.0 resolution: "@babel/plugin-transform-destructuring@npm:7.28.0" dependencies: @@ -766,7 +830,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-dotall-regex@npm:^7.25.9, @babel/plugin-transform-dotall-regex@npm:^7.27.1": +"@babel/plugin-transform-dotall-regex@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-dotall-regex@npm:7.27.1" dependencies: @@ -778,7 +842,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-duplicate-keys@npm:^7.25.9, @babel/plugin-transform-duplicate-keys@npm:^7.27.1": +"@babel/plugin-transform-duplicate-keys@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-duplicate-keys@npm:7.27.1" dependencies: @@ -789,7 +853,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-duplicate-named-capturing-groups-regex@npm:^7.25.9, @babel/plugin-transform-duplicate-named-capturing-groups-regex@npm:^7.27.1": +"@babel/plugin-transform-duplicate-named-capturing-groups-regex@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-duplicate-named-capturing-groups-regex@npm:7.27.1" dependencies: @@ -801,7 +865,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-dynamic-import@npm:^7.25.9, @babel/plugin-transform-dynamic-import@npm:^7.27.1": +"@babel/plugin-transform-dynamic-import@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-dynamic-import@npm:7.27.1" dependencies: @@ -824,7 +888,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-exponentiation-operator@npm:^7.25.9, @babel/plugin-transform-exponentiation-operator@npm:^7.27.1": +"@babel/plugin-transform-exponentiation-operator@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-exponentiation-operator@npm:7.27.1" dependencies: @@ -835,7 +899,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-export-namespace-from@npm:^7.25.9, @babel/plugin-transform-export-namespace-from@npm:^7.27.1": +"@babel/plugin-transform-export-namespace-from@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-export-namespace-from@npm:7.27.1" dependencies: @@ -846,7 +910,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-for-of@npm:^7.25.9, @babel/plugin-transform-for-of@npm:^7.27.1": +"@babel/plugin-transform-for-of@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-for-of@npm:7.27.1" dependencies: @@ -858,7 +922,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-function-name@npm:^7.25.9, @babel/plugin-transform-function-name@npm:^7.27.1": +"@babel/plugin-transform-function-name@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-function-name@npm:7.27.1" dependencies: @@ -871,7 +935,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-json-strings@npm:^7.25.9, @babel/plugin-transform-json-strings@npm:^7.27.1": +"@babel/plugin-transform-json-strings@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-json-strings@npm:7.27.1" dependencies: @@ -882,7 +946,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-literals@npm:^7.25.9, @babel/plugin-transform-literals@npm:^7.27.1": +"@babel/plugin-transform-literals@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-literals@npm:7.27.1" dependencies: @@ -893,7 +957,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-logical-assignment-operators@npm:^7.25.9, @babel/plugin-transform-logical-assignment-operators@npm:^7.27.1": +"@babel/plugin-transform-logical-assignment-operators@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-logical-assignment-operators@npm:7.27.1" dependencies: @@ -904,7 +968,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-member-expression-literals@npm:^7.25.9, @babel/plugin-transform-member-expression-literals@npm:^7.27.1": +"@babel/plugin-transform-member-expression-literals@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-member-expression-literals@npm:7.27.1" dependencies: @@ -915,7 +979,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-modules-amd@npm:^7.25.9, @babel/plugin-transform-modules-amd@npm:^7.27.1": +"@babel/plugin-transform-modules-amd@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-modules-amd@npm:7.27.1" dependencies: @@ -927,7 +991,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-modules-commonjs@npm:^7.25.9, @babel/plugin-transform-modules-commonjs@npm:^7.27.1": +"@babel/plugin-transform-modules-commonjs@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-modules-commonjs@npm:7.27.1" dependencies: @@ -939,7 +1003,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-modules-systemjs@npm:^7.25.9, @babel/plugin-transform-modules-systemjs@npm:^7.27.1": +"@babel/plugin-transform-modules-systemjs@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-modules-systemjs@npm:7.27.1" dependencies: @@ -953,7 +1017,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-modules-umd@npm:^7.25.9, @babel/plugin-transform-modules-umd@npm:^7.27.1": +"@babel/plugin-transform-modules-umd@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-modules-umd@npm:7.27.1" dependencies: @@ -965,7 +1029,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.25.9, @babel/plugin-transform-named-capturing-groups-regex@npm:^7.27.1": +"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.27.1" dependencies: @@ -977,7 +1041,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-new-target@npm:^7.25.9, @babel/plugin-transform-new-target@npm:^7.27.1": +"@babel/plugin-transform-new-target@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-new-target@npm:7.27.1" dependencies: @@ -988,7 +1052,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-nullish-coalescing-operator@npm:^7.25.9, @babel/plugin-transform-nullish-coalescing-operator@npm:^7.27.1": +"@babel/plugin-transform-nullish-coalescing-operator@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-nullish-coalescing-operator@npm:7.27.1" dependencies: @@ -999,7 +1063,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-numeric-separator@npm:^7.25.9, @babel/plugin-transform-numeric-separator@npm:^7.27.1": +"@babel/plugin-transform-numeric-separator@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-numeric-separator@npm:7.27.1" dependencies: @@ -1010,18 +1074,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-object-assign@npm:7.25.9": - version: 7.25.9 - resolution: "@babel/plugin-transform-object-assign@npm:7.25.9" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.9" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/4f9df41226f0572a04451179fe1d3cec88e2065bda841bb7d57c24e7adce7d79a75c0047f1e6d2b2c2f0d07b2872f6dbb4cc0c07aa3086171b0c1b1b203661c7 - languageName: node - linkType: hard - -"@babel/plugin-transform-object-assign@npm:^7.25.9": +"@babel/plugin-transform-object-assign@npm:7.27.1, @babel/plugin-transform-object-assign@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-object-assign@npm:7.27.1" dependencies: @@ -1032,7 +1085,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-object-rest-spread@npm:^7.25.9, @babel/plugin-transform-object-rest-spread@npm:^7.28.0": +"@babel/plugin-transform-object-rest-spread@npm:^7.28.0": version: 7.28.0 resolution: "@babel/plugin-transform-object-rest-spread@npm:7.28.0" dependencies: @@ -1047,7 +1100,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-object-super@npm:^7.25.9, @babel/plugin-transform-object-super@npm:^7.27.1": +"@babel/plugin-transform-object-super@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-object-super@npm:7.27.1" dependencies: @@ -1059,7 +1112,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-optional-catch-binding@npm:^7.25.9, @babel/plugin-transform-optional-catch-binding@npm:^7.27.1": +"@babel/plugin-transform-optional-catch-binding@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-optional-catch-binding@npm:7.27.1" dependencies: @@ -1070,7 +1123,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-optional-chaining@npm:^7.25.9, @babel/plugin-transform-optional-chaining@npm:^7.27.1": +"@babel/plugin-transform-optional-chaining@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-optional-chaining@npm:7.27.1" dependencies: @@ -1082,7 +1135,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-parameters@npm:^7.20.7, @babel/plugin-transform-parameters@npm:^7.25.9, @babel/plugin-transform-parameters@npm:^7.27.7": +"@babel/plugin-transform-parameters@npm:^7.20.7, @babel/plugin-transform-parameters@npm:^7.27.7": version: 7.27.7 resolution: "@babel/plugin-transform-parameters@npm:7.27.7" dependencies: @@ -1093,7 +1146,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-private-methods@npm:^7.25.9, @babel/plugin-transform-private-methods@npm:^7.27.1": +"@babel/plugin-transform-private-methods@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-private-methods@npm:7.27.1" dependencies: @@ -1105,7 +1158,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-private-property-in-object@npm:^7.25.9, @babel/plugin-transform-private-property-in-object@npm:^7.27.1": +"@babel/plugin-transform-private-property-in-object@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-private-property-in-object@npm:7.27.1" dependencies: @@ -1118,7 +1171,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-property-literals@npm:^7.25.9, @babel/plugin-transform-property-literals@npm:^7.27.1": +"@babel/plugin-transform-property-literals@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-property-literals@npm:7.27.1" dependencies: @@ -1129,7 +1182,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-react-display-name@npm:^7.25.9, @babel/plugin-transform-react-display-name@npm:^7.27.1": +"@babel/plugin-transform-react-display-name@npm:^7.27.1": version: 7.28.0 resolution: "@babel/plugin-transform-react-display-name@npm:7.28.0" dependencies: @@ -1140,7 +1193,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-react-jsx-development@npm:^7.25.9, @babel/plugin-transform-react-jsx-development@npm:^7.27.1": +"@babel/plugin-transform-react-jsx-development@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-react-jsx-development@npm:7.27.1" dependencies: @@ -1151,7 +1204,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-react-jsx@npm:^7.25.9, @babel/plugin-transform-react-jsx@npm:^7.27.1": +"@babel/plugin-transform-react-jsx@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-react-jsx@npm:7.27.1" dependencies: @@ -1166,7 +1219,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-react-pure-annotations@npm:^7.25.9, @babel/plugin-transform-react-pure-annotations@npm:^7.27.1": +"@babel/plugin-transform-react-pure-annotations@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-react-pure-annotations@npm:7.27.1" dependencies: @@ -1178,18 +1231,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-regenerator@npm:^7.25.9, @babel/plugin-transform-regenerator@npm:^7.28.0": - version: 7.28.0 - resolution: "@babel/plugin-transform-regenerator@npm:7.28.0" +"@babel/plugin-transform-regenerator@npm:^7.28.3": + version: 7.28.4 + resolution: "@babel/plugin-transform-regenerator@npm:7.28.4" dependencies: "@babel/helper-plugin-utils": "npm:^7.27.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/f8d4e635857b32b7ff8eeff0726e9bbfbece12eccd65e53d081fe0176cb432cd6bfcc64d28edc34c3cfa1aa79da46ec8d0b9b4f9242da7ec2153c34ea6d2163c + checksum: 10/24da51a659d882e02bd4353da9d8e045e58d967c1cddaf985ad699a9fc9f920a45eff421c4283a248d83dc16590b8956e66fd710be5db8723b274cfea0b51b2f languageName: node linkType: hard -"@babel/plugin-transform-regexp-modifiers@npm:^7.26.0, @babel/plugin-transform-regexp-modifiers@npm:^7.27.1": +"@babel/plugin-transform-regexp-modifiers@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-regexp-modifiers@npm:7.27.1" dependencies: @@ -1201,7 +1254,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-reserved-words@npm:^7.25.9, @babel/plugin-transform-reserved-words@npm:^7.27.1": +"@babel/plugin-transform-reserved-words@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-reserved-words@npm:7.27.1" dependencies: @@ -1212,7 +1265,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-shorthand-properties@npm:^7.25.9, @babel/plugin-transform-shorthand-properties@npm:^7.27.1": +"@babel/plugin-transform-shorthand-properties@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-shorthand-properties@npm:7.27.1" dependencies: @@ -1223,7 +1276,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-spread@npm:^7.25.9, @babel/plugin-transform-spread@npm:^7.27.1": +"@babel/plugin-transform-spread@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-spread@npm:7.27.1" dependencies: @@ -1235,7 +1288,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-sticky-regex@npm:^7.25.9, @babel/plugin-transform-sticky-regex@npm:^7.27.1": +"@babel/plugin-transform-sticky-regex@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-sticky-regex@npm:7.27.1" dependencies: @@ -1246,7 +1299,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-template-literals@npm:^7.25.9, @babel/plugin-transform-template-literals@npm:^7.27.1": +"@babel/plugin-transform-template-literals@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-template-literals@npm:7.27.1" dependencies: @@ -1257,7 +1310,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-typeof-symbol@npm:^7.25.9, @babel/plugin-transform-typeof-symbol@npm:^7.27.1": +"@babel/plugin-transform-typeof-symbol@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-typeof-symbol@npm:7.27.1" dependencies: @@ -1268,7 +1321,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-unicode-escapes@npm:^7.25.9, @babel/plugin-transform-unicode-escapes@npm:^7.27.1": +"@babel/plugin-transform-unicode-escapes@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-unicode-escapes@npm:7.27.1" dependencies: @@ -1279,7 +1332,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-unicode-property-regex@npm:^7.25.9, @babel/plugin-transform-unicode-property-regex@npm:^7.27.1": +"@babel/plugin-transform-unicode-property-regex@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-unicode-property-regex@npm:7.27.1" dependencies: @@ -1291,7 +1344,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-unicode-regex@npm:^7.25.9, @babel/plugin-transform-unicode-regex@npm:^7.27.1": +"@babel/plugin-transform-unicode-regex@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-unicode-regex@npm:7.27.1" dependencies: @@ -1303,7 +1356,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-unicode-sets-regex@npm:^7.25.9, @babel/plugin-transform-unicode-sets-regex@npm:^7.27.1": +"@babel/plugin-transform-unicode-sets-regex@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-unicode-sets-regex@npm:7.27.1" dependencies: @@ -1315,88 +1368,9 @@ __metadata: languageName: node linkType: hard -"@babel/preset-env@npm:7.26.0": - version: 7.26.0 - resolution: "@babel/preset-env@npm:7.26.0" - dependencies: - "@babel/compat-data": "npm:^7.26.0" - "@babel/helper-compilation-targets": "npm:^7.25.9" - "@babel/helper-plugin-utils": "npm:^7.25.9" - "@babel/helper-validator-option": "npm:^7.25.9" - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "npm:^7.25.9" - "@babel/plugin-bugfix-safari-class-field-initializer-scope": "npm:^7.25.9" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "npm:^7.25.9" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "npm:^7.25.9" - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "npm:^7.25.9" - "@babel/plugin-proposal-private-property-in-object": "npm:7.21.0-placeholder-for-preset-env.2" - "@babel/plugin-syntax-import-assertions": "npm:^7.26.0" - "@babel/plugin-syntax-import-attributes": "npm:^7.26.0" - "@babel/plugin-syntax-unicode-sets-regex": "npm:^7.18.6" - "@babel/plugin-transform-arrow-functions": "npm:^7.25.9" - "@babel/plugin-transform-async-generator-functions": "npm:^7.25.9" - "@babel/plugin-transform-async-to-generator": "npm:^7.25.9" - "@babel/plugin-transform-block-scoped-functions": "npm:^7.25.9" - "@babel/plugin-transform-block-scoping": "npm:^7.25.9" - "@babel/plugin-transform-class-properties": "npm:^7.25.9" - "@babel/plugin-transform-class-static-block": "npm:^7.26.0" - "@babel/plugin-transform-classes": "npm:^7.25.9" - "@babel/plugin-transform-computed-properties": "npm:^7.25.9" - "@babel/plugin-transform-destructuring": "npm:^7.25.9" - "@babel/plugin-transform-dotall-regex": "npm:^7.25.9" - "@babel/plugin-transform-duplicate-keys": "npm:^7.25.9" - "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "npm:^7.25.9" - "@babel/plugin-transform-dynamic-import": "npm:^7.25.9" - "@babel/plugin-transform-exponentiation-operator": "npm:^7.25.9" - "@babel/plugin-transform-export-namespace-from": "npm:^7.25.9" - "@babel/plugin-transform-for-of": "npm:^7.25.9" - "@babel/plugin-transform-function-name": "npm:^7.25.9" - "@babel/plugin-transform-json-strings": "npm:^7.25.9" - "@babel/plugin-transform-literals": "npm:^7.25.9" - "@babel/plugin-transform-logical-assignment-operators": "npm:^7.25.9" - "@babel/plugin-transform-member-expression-literals": "npm:^7.25.9" - "@babel/plugin-transform-modules-amd": "npm:^7.25.9" - "@babel/plugin-transform-modules-commonjs": "npm:^7.25.9" - "@babel/plugin-transform-modules-systemjs": "npm:^7.25.9" - "@babel/plugin-transform-modules-umd": "npm:^7.25.9" - "@babel/plugin-transform-named-capturing-groups-regex": "npm:^7.25.9" - "@babel/plugin-transform-new-target": "npm:^7.25.9" - "@babel/plugin-transform-nullish-coalescing-operator": "npm:^7.25.9" - "@babel/plugin-transform-numeric-separator": "npm:^7.25.9" - "@babel/plugin-transform-object-rest-spread": "npm:^7.25.9" - "@babel/plugin-transform-object-super": "npm:^7.25.9" - "@babel/plugin-transform-optional-catch-binding": "npm:^7.25.9" - "@babel/plugin-transform-optional-chaining": "npm:^7.25.9" - "@babel/plugin-transform-parameters": "npm:^7.25.9" - "@babel/plugin-transform-private-methods": "npm:^7.25.9" - "@babel/plugin-transform-private-property-in-object": "npm:^7.25.9" - "@babel/plugin-transform-property-literals": "npm:^7.25.9" - "@babel/plugin-transform-regenerator": "npm:^7.25.9" - "@babel/plugin-transform-regexp-modifiers": "npm:^7.26.0" - "@babel/plugin-transform-reserved-words": "npm:^7.25.9" - "@babel/plugin-transform-shorthand-properties": "npm:^7.25.9" - "@babel/plugin-transform-spread": "npm:^7.25.9" - "@babel/plugin-transform-sticky-regex": "npm:^7.25.9" - "@babel/plugin-transform-template-literals": "npm:^7.25.9" - "@babel/plugin-transform-typeof-symbol": "npm:^7.25.9" - "@babel/plugin-transform-unicode-escapes": "npm:^7.25.9" - "@babel/plugin-transform-unicode-property-regex": "npm:^7.25.9" - "@babel/plugin-transform-unicode-regex": "npm:^7.25.9" - "@babel/plugin-transform-unicode-sets-regex": "npm:^7.25.9" - "@babel/preset-modules": "npm:0.1.6-no-external-plugins" - babel-plugin-polyfill-corejs2: "npm:^0.4.10" - babel-plugin-polyfill-corejs3: "npm:^0.10.6" - babel-plugin-polyfill-regenerator: "npm:^0.6.1" - core-js-compat: "npm:^3.38.1" - semver: "npm:^6.3.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/a7a80314f845deea713985a6316361c476621c76cfe5c6c28e8b9558f01634b49bbfdd3581ef94b5d6cff5c2b8830468aa53a73f5b5c1224db2dfea5db7e676f - languageName: node - linkType: hard - -"@babel/preset-env@npm:^7.26.0": - version: 7.28.0 - resolution: "@babel/preset-env@npm:7.28.0" +"@babel/preset-env@npm:7.28.3, @babel/preset-env@npm:^7.28.3": + version: 7.28.3 + resolution: "@babel/preset-env@npm:7.28.3" dependencies: "@babel/compat-data": "npm:^7.28.0" "@babel/helper-compilation-targets": "npm:^7.27.2" @@ -1406,7 +1380,7 @@ __metadata: "@babel/plugin-bugfix-safari-class-field-initializer-scope": "npm:^7.27.1" "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "npm:^7.27.1" "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "npm:^7.27.1" - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "npm:^7.27.1" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "npm:^7.28.3" "@babel/plugin-proposal-private-property-in-object": "npm:7.21.0-placeholder-for-preset-env.2" "@babel/plugin-syntax-import-assertions": "npm:^7.27.1" "@babel/plugin-syntax-import-attributes": "npm:^7.27.1" @@ -1417,8 +1391,8 @@ __metadata: "@babel/plugin-transform-block-scoped-functions": "npm:^7.27.1" "@babel/plugin-transform-block-scoping": "npm:^7.28.0" "@babel/plugin-transform-class-properties": "npm:^7.27.1" - "@babel/plugin-transform-class-static-block": "npm:^7.27.1" - "@babel/plugin-transform-classes": "npm:^7.28.0" + "@babel/plugin-transform-class-static-block": "npm:^7.28.3" + "@babel/plugin-transform-classes": "npm:^7.28.3" "@babel/plugin-transform-computed-properties": "npm:^7.27.1" "@babel/plugin-transform-destructuring": "npm:^7.28.0" "@babel/plugin-transform-dotall-regex": "npm:^7.27.1" @@ -1450,7 +1424,7 @@ __metadata: "@babel/plugin-transform-private-methods": "npm:^7.27.1" "@babel/plugin-transform-private-property-in-object": "npm:^7.27.1" "@babel/plugin-transform-property-literals": "npm:^7.27.1" - "@babel/plugin-transform-regenerator": "npm:^7.28.0" + "@babel/plugin-transform-regenerator": "npm:^7.28.3" "@babel/plugin-transform-regexp-modifiers": "npm:^7.27.1" "@babel/plugin-transform-reserved-words": "npm:^7.27.1" "@babel/plugin-transform-shorthand-properties": "npm:^7.27.1" @@ -1470,7 +1444,7 @@ __metadata: semver: "npm:^6.3.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/8814453ffe4cfd5926cf2af0ecc956240bcc1e5f49592015962a5f1c115c5c0c34c1e0a5c66d3d4e1a283644bb5ea4e199ced0b6117ffd20113a994fd3080798 + checksum: 10/b09991276a5ea4f2f95077bb451420f683e19d59405bc1fbbb392bb3571592edc922daac4eaa50b2b407c0b24c4e1e9df0f76738c3c573dac4e6bcf028daa8c5 languageName: node linkType: hard @@ -1487,23 +1461,7 @@ __metadata: languageName: node linkType: hard -"@babel/preset-react@npm:7.25.9": - version: 7.25.9 - resolution: "@babel/preset-react@npm:7.25.9" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.25.9" - "@babel/helper-validator-option": "npm:^7.25.9" - "@babel/plugin-transform-react-display-name": "npm:^7.25.9" - "@babel/plugin-transform-react-jsx": "npm:^7.25.9" - "@babel/plugin-transform-react-jsx-development": "npm:^7.25.9" - "@babel/plugin-transform-react-pure-annotations": "npm:^7.25.9" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10/3c9daf47cf51568d96984d21b9f83992590c0e91f16a333f999100bb3c2c200730cde6806ed37fd2c999e0a63becefc881740b8f765b5a4aff4efc674e3e4197 - languageName: node - linkType: hard - -"@babel/preset-react@npm:^7.25.9": +"@babel/preset-react@npm:7.27.1, @babel/preset-react@npm:^7.27.1": version: 7.27.1 resolution: "@babel/preset-react@npm:7.27.1" dependencies: @@ -1526,7 +1484,7 @@ __metadata: languageName: node linkType: hard -"@babel/template@npm:^7.25.9, @babel/template@npm:^7.27.1, @babel/template@npm:^7.27.2, @babel/template@npm:^7.3.3": +"@babel/template@npm:^7.27.1, @babel/template@npm:^7.27.2, @babel/template@npm:^7.3.3": version: 7.27.2 resolution: "@babel/template@npm:7.27.2" dependencies: @@ -1537,7 +1495,7 @@ __metadata: languageName: node linkType: hard -"@babel/traverse@npm:^7.18.9, @babel/traverse@npm:^7.25.9, @babel/traverse@npm:^7.27.1, @babel/traverse@npm:^7.27.3, @babel/traverse@npm:^7.28.0, @babel/traverse@npm:^7.7.0, @babel/traverse@npm:^7.7.2": +"@babel/traverse@npm:^7.18.9, @babel/traverse@npm:^7.27.1, @babel/traverse@npm:^7.27.3, @babel/traverse@npm:^7.28.0, @babel/traverse@npm:^7.7.0, @babel/traverse@npm:^7.7.2": version: 7.28.0 resolution: "@babel/traverse@npm:7.28.0" dependencies: @@ -1552,7 +1510,22 @@ __metadata: languageName: node linkType: hard -"@babel/types@npm:^7.0.0, @babel/types@npm:^7.18.9, @babel/types@npm:^7.20.7, @babel/types@npm:^7.26.0, @babel/types@npm:^7.27.1, @babel/types@npm:^7.27.3, @babel/types@npm:^7.27.6, @babel/types@npm:^7.28.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4, @babel/types@npm:^7.7.0": +"@babel/traverse@npm:^7.28.3, @babel/traverse@npm:^7.28.4": + version: 7.28.4 + resolution: "@babel/traverse@npm:7.28.4" + dependencies: + "@babel/code-frame": "npm:^7.27.1" + "@babel/generator": "npm:^7.28.3" + "@babel/helper-globals": "npm:^7.28.0" + "@babel/parser": "npm:^7.28.4" + "@babel/template": "npm:^7.27.2" + "@babel/types": "npm:^7.28.4" + debug: "npm:^4.3.1" + checksum: 10/c3099364b7b1c36bcd111099195d4abeef16499e5defb1e56766b754e8b768c252e856ed9041665158aa1b31215fc6682632756803c8fa53405381ec08c4752b + languageName: node + linkType: hard + +"@babel/types@npm:^7.0.0, @babel/types@npm:^7.18.9, @babel/types@npm:^7.20.7, @babel/types@npm:^7.27.1, @babel/types@npm:^7.27.3, @babel/types@npm:^7.27.6, @babel/types@npm:^7.28.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4, @babel/types@npm:^7.7.0": version: 7.28.0 resolution: "@babel/types@npm:7.28.0" dependencies: @@ -1562,6 +1535,16 @@ __metadata: languageName: node linkType: hard +"@babel/types@npm:^7.28.2, @babel/types@npm:^7.28.4": + version: 7.28.4 + resolution: "@babel/types@npm:7.28.4" + dependencies: + "@babel/helper-string-parser": "npm:^7.27.1" + "@babel/helper-validator-identifier": "npm:^7.27.1" + checksum: 10/db50bf257aafa5d845ad16dae0587f57d596e4be4cbb233ea539976a4c461f9fbcc0bf3d37adae3f8ce5dcb4001462aa608f3558161258b585f6ce6ce21a2e45 + languageName: node + linkType: hard + "@bcoe/v8-coverage@npm:^0.2.3": version: 0.2.3 resolution: "@bcoe/v8-coverage@npm:0.2.3" @@ -1644,20 +1627,20 @@ __metadata: version: 0.0.0-use.local resolution: "@dnnsoftware/dnn-react-common@workspace:Dnn.AdminExperience/ClientSide/Dnn.React.Common" dependencies: - "@babel/core": "npm:^7.26.0" + "@babel/core": "npm:^7.28.4" "@babel/eslint-parser": "npm:^7.28.4" "@babel/eslint-plugin": "npm:7.27.1" "@babel/plugin-proposal-object-rest-spread": "npm:^7.20.7" - "@babel/plugin-transform-object-assign": "npm:^7.25.9" - "@babel/preset-env": "npm:^7.26.0" - "@babel/preset-react": "npm:^7.25.9" + "@babel/plugin-transform-object-assign": "npm:^7.27.1" + "@babel/preset-env": "npm:^7.28.3" + "@babel/preset-react": "npm:^7.27.1" "@eslint/compat": "npm:^1.4.0" "@storybook/addon-docs": "npm:9.0.4" "@storybook/addon-onboarding": "npm:9.0.4" "@storybook/addon-webpack5-compiler-swc": "npm:4.0.1" "@storybook/react-webpack5": "npm:9.0.4" babel-eslint: "npm:^10.1.0" - babel-loader: "npm:^8.3.0" + babel-loader: "npm:^10.0.0" babel-plugin-transform-react-remove-prop-types: "npm:0.4.24" babel-polyfill: "npm:6.26.0" cpy-cli: "npm:^2.0.0" @@ -2130,7 +2113,7 @@ __metadata: languageName: node linkType: hard -"@istanbuljs/schema@npm:^0.1.2": +"@istanbuljs/schema@npm:^0.1.2, @istanbuljs/schema@npm:^0.1.3": version: 0.1.3 resolution: "@istanbuljs/schema@npm:0.1.3" checksum: 10/a9b1e49acdf5efc2f5b2359f2df7f90c5c725f2656f16099e8b2cd3a000619ecca9fc48cf693ba789cf0fd989f6e0df6a22bc05574be4223ecdbb7997d04384b @@ -2249,6 +2232,16 @@ __metadata: languageName: node linkType: hard +"@jest/pattern@npm:30.0.1": + version: 30.0.1 + resolution: "@jest/pattern@npm:30.0.1" + dependencies: + "@types/node": "npm:*" + jest-regex-util: "npm:30.0.1" + checksum: 10/afd03b4d3eadc9c9970cf924955dee47984a7e767901fe6fa463b17b246f0ddeec07b3e82c09715c54bde3c8abb92074160c0d79967bd23778724f184e7f5b7b + languageName: node + linkType: hard + "@jest/reporters@npm:^28.1.3": version: 28.1.3 resolution: "@jest/reporters@npm:28.1.3" @@ -2287,6 +2280,15 @@ __metadata: languageName: node linkType: hard +"@jest/schemas@npm:30.0.5": + version: 30.0.5 + resolution: "@jest/schemas@npm:30.0.5" + dependencies: + "@sinclair/typebox": "npm:^0.34.0" + checksum: 10/40df4db55d4aeed09d1c7e19caf23788309cea34490a1c5d584c913494195e698b9967e996afc27226cac6d76e7512fe73ae6b9584480695c60dd18a5459cdba + languageName: node + linkType: hard + "@jest/schemas@npm:^28.1.3": version: 28.1.3 resolution: "@jest/schemas@npm:28.1.3" @@ -2340,6 +2342,29 @@ __metadata: languageName: node linkType: hard +"@jest/transform@npm:30.2.0": + version: 30.2.0 + resolution: "@jest/transform@npm:30.2.0" + dependencies: + "@babel/core": "npm:^7.27.4" + "@jest/types": "npm:30.2.0" + "@jridgewell/trace-mapping": "npm:^0.3.25" + babel-plugin-istanbul: "npm:^7.0.1" + chalk: "npm:^4.1.2" + convert-source-map: "npm:^2.0.0" + fast-json-stable-stringify: "npm:^2.1.0" + graceful-fs: "npm:^4.2.11" + jest-haste-map: "npm:30.2.0" + jest-regex-util: "npm:30.0.1" + jest-util: "npm:30.2.0" + micromatch: "npm:^4.0.8" + pirates: "npm:^4.0.7" + slash: "npm:^3.0.0" + write-file-atomic: "npm:^5.0.1" + checksum: 10/c75d72d524c2a50ea6c05778a9b76a6e48bc228a3390896a6edd4416f7b4954ee0a07e229ed7b4949ce8889324b70034c784751e3fc455a25648bd8dcad17d0d + languageName: node + linkType: hard + "@jest/transform@npm:^28.1.3": version: 28.1.3 resolution: "@jest/transform@npm:28.1.3" @@ -2363,26 +2388,18 @@ __metadata: languageName: node linkType: hard -"@jest/transform@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/transform@npm:29.7.0" +"@jest/types@npm:30.2.0": + version: 30.2.0 + resolution: "@jest/types@npm:30.2.0" dependencies: - "@babel/core": "npm:^7.11.6" - "@jest/types": "npm:^29.6.3" - "@jridgewell/trace-mapping": "npm:^0.3.18" - babel-plugin-istanbul: "npm:^6.1.1" - chalk: "npm:^4.0.0" - convert-source-map: "npm:^2.0.0" - fast-json-stable-stringify: "npm:^2.1.0" - graceful-fs: "npm:^4.2.9" - jest-haste-map: "npm:^29.7.0" - jest-regex-util: "npm:^29.6.3" - jest-util: "npm:^29.7.0" - micromatch: "npm:^4.0.4" - pirates: "npm:^4.0.4" - slash: "npm:^3.0.0" - write-file-atomic: "npm:^4.0.2" - checksum: 10/30f42293545ab037d5799c81d3e12515790bb58513d37f788ce32d53326d0d72ebf5b40f989e6896739aa50a5f77be44686e510966370d58511d5ad2637c68c1 + "@jest/pattern": "npm:30.0.1" + "@jest/schemas": "npm:30.0.5" + "@types/istanbul-lib-coverage": "npm:^2.0.6" + "@types/istanbul-reports": "npm:^3.0.4" + "@types/node": "npm:*" + "@types/yargs": "npm:^17.0.33" + chalk: "npm:^4.1.2" + checksum: 10/f50fcaea56f873a51d19254ab16762f2ea8ca88e3e08da2e496af5da2b67c322915a4fcd0153803cc05063ffe87ebef2ab4330e0a1b06ab984a26c916cbfc26b languageName: node linkType: hard @@ -2424,6 +2441,16 @@ __metadata: languageName: node linkType: hard +"@jridgewell/remapping@npm:^2.3.5": + version: 2.3.5 + resolution: "@jridgewell/remapping@npm:2.3.5" + dependencies: + "@jridgewell/gen-mapping": "npm:^0.3.5" + "@jridgewell/trace-mapping": "npm:^0.3.24" + checksum: 10/c2bb01856e65b506d439455f28aceacf130d6c023d1d4e3b48705e88def3571753e1a887daa04b078b562316c92d26ce36408a60534bceca3f830aec88a339ad + languageName: node + linkType: hard + "@jridgewell/resolve-uri@npm:^3.1.0": version: 3.1.2 resolution: "@jridgewell/resolve-uri@npm:3.1.2" @@ -2448,7 +2475,7 @@ __metadata: languageName: node linkType: hard -"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.13, @jridgewell/trace-mapping@npm:^0.3.18, @jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25, @jridgewell/trace-mapping@npm:^0.3.28": +"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.13, @jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25, @jridgewell/trace-mapping@npm:^0.3.28": version: 0.3.29 resolution: "@jridgewell/trace-mapping@npm:0.3.29" dependencies: @@ -3401,6 +3428,13 @@ __metadata: languageName: node linkType: hard +"@sinclair/typebox@npm:^0.34.0": + version: 0.34.41 + resolution: "@sinclair/typebox@npm:0.34.41" + checksum: 10/5c04a7f42156a7813a159947a0c3fe7e9f11aa722141ac3ff32242faf031b443ef71763d8791ce8d01bd5856770de51fd6fcda94b3a51558ba1f6d5112fa33f4 + languageName: node + linkType: hard + "@sindresorhus/is@npm:^4.6.0": version: 4.6.0 resolution: "@sindresorhus/is@npm:4.6.0" @@ -3890,7 +3924,7 @@ __metadata: languageName: node linkType: hard -"@types/babel__core@npm:^7.1.14, @types/babel__core@npm:^7.18.0": +"@types/babel__core@npm:^7.1.14, @types/babel__core@npm:^7.18.0, @types/babel__core@npm:^7.20.5": version: 7.20.5 resolution: "@types/babel__core@npm:7.20.5" dependencies: @@ -4148,7 +4182,7 @@ __metadata: languageName: node linkType: hard -"@types/istanbul-lib-coverage@npm:*, @types/istanbul-lib-coverage@npm:^2.0.0, @types/istanbul-lib-coverage@npm:^2.0.1": +"@types/istanbul-lib-coverage@npm:*, @types/istanbul-lib-coverage@npm:^2.0.0, @types/istanbul-lib-coverage@npm:^2.0.1, @types/istanbul-lib-coverage@npm:^2.0.6": version: 2.0.6 resolution: "@types/istanbul-lib-coverage@npm:2.0.6" checksum: 10/3feac423fd3e5449485afac999dcfcb3d44a37c830af898b689fadc65d26526460bedb889db278e0d4d815a670331796494d073a10ee6e3a6526301fe7415778 @@ -4164,7 +4198,7 @@ __metadata: languageName: node linkType: hard -"@types/istanbul-reports@npm:^3.0.0": +"@types/istanbul-reports@npm:^3.0.0, @types/istanbul-reports@npm:^3.0.4": version: 3.0.4 resolution: "@types/istanbul-reports@npm:3.0.4" dependencies: @@ -4479,7 +4513,7 @@ __metadata: languageName: node linkType: hard -"@types/yargs@npm:^17.0.8": +"@types/yargs@npm:^17.0.33, @types/yargs@npm:^17.0.8": version: 17.0.33 resolution: "@types/yargs@npm:17.0.33" dependencies: @@ -4793,6 +4827,13 @@ __metadata: languageName: node linkType: hard +"@ungap/structured-clone@npm:^1.3.0": + version: 1.3.0 + resolution: "@ungap/structured-clone@npm:1.3.0" + checksum: 10/80d6910946f2b1552a2406650051c91bbd1f24a6bf854354203d84fe2714b3e8ce4618f49cc3410494173a1c1e8e9777372fe68dce74bd45faf0a7a1a6ccf448 + languageName: node + linkType: hard + "@vitest/expect@npm:3.0.9": version: 3.0.9 resolution: "@vitest/expect@npm:3.0.9" @@ -5150,15 +5191,15 @@ __metadata: version: 0.0.0-use.local resolution: "admin-logs@workspace:Dnn.AdminExperience/ClientSide/AdminLogs.Web" dependencies: - "@babel/core": "npm:^7.26.0" + "@babel/core": "npm:^7.28.4" "@babel/plugin-proposal-object-rest-spread": "npm:^7.20.7" - "@babel/plugin-transform-object-assign": "npm:^7.25.9" - "@babel/preset-env": "npm:^7.26.0" - "@babel/preset-react": "npm:^7.25.9" + "@babel/plugin-transform-object-assign": "npm:^7.27.1" + "@babel/preset-env": "npm:^7.28.3" + "@babel/preset-react": "npm:^7.27.1" "@dnnsoftware/dnn-react-common": "npm:10.1.0" array.prototype.find: "npm:2.2.3" array.prototype.findindex: "npm:2.2.4" - babel-loader: "npm:8.3.0" + babel-loader: "npm:10.0.0" babel-plugin-transform-react-remove-prop-types: "npm:0.4.24" babel-polyfill: "npm:6.26.0" create-react-class: "npm:^15.7.0" @@ -5407,7 +5448,7 @@ __metadata: languageName: node linkType: hard -"anymatch@npm:^3.0.3, anymatch@npm:~3.1.2": +"anymatch@npm:^3.0.3, anymatch@npm:^3.1.3, anymatch@npm:~3.1.2": version: 3.1.3 resolution: "anymatch@npm:3.1.3" dependencies: @@ -6035,50 +6076,32 @@ __metadata: languageName: node linkType: hard -"babel-jest@npm:^29.7.0": - version: 29.7.0 - resolution: "babel-jest@npm:29.7.0" +"babel-jest@npm:^30.2.0": + version: 30.2.0 + resolution: "babel-jest@npm:30.2.0" dependencies: - "@jest/transform": "npm:^29.7.0" - "@types/babel__core": "npm:^7.1.14" - babel-plugin-istanbul: "npm:^6.1.1" - babel-preset-jest: "npm:^29.6.3" - chalk: "npm:^4.0.0" - graceful-fs: "npm:^4.2.9" + "@jest/transform": "npm:30.2.0" + "@types/babel__core": "npm:^7.20.5" + babel-plugin-istanbul: "npm:^7.0.1" + babel-preset-jest: "npm:30.2.0" + chalk: "npm:^4.1.2" + graceful-fs: "npm:^4.2.11" slash: "npm:^3.0.0" peerDependencies: - "@babel/core": ^7.8.0 - checksum: 10/8a0953bd813b3a8926008f7351611055548869e9a53dd36d6e7e96679001f71e65fd7dbfe253265c3ba6a4e630dc7c845cf3e78b17d758ef1880313ce8fba258 + "@babel/core": ^7.11.0 || ^8.0.0-0 + checksum: 10/4c7351a366cf8ac2b8a2e4e438867693eb9d83ed24c29c648da4576f700767aaf72a5d14337fc3f92c50b069f5025b26c7b89e3b7b867914b7cf8997fc15f095 languageName: node linkType: hard -"babel-loader@npm:8.3.0": - version: 8.3.0 - resolution: "babel-loader@npm:8.3.0" - dependencies: - find-cache-dir: "npm:^3.3.1" - loader-utils: "npm:^2.0.0" - make-dir: "npm:^3.1.0" - schema-utils: "npm:^2.6.5" - peerDependencies: - "@babel/core": ^7.0.0 - webpack: ">=2" - checksum: 10/e775e96f605f10d68adc693403ccda2470e856cc52e6017f3621c17dade003d0fc53facfce7b4ada02273a1c0a6a48167f798cc81b73110585d74bf890b39bd5 - languageName: node - linkType: hard - -"babel-loader@npm:^8.3.0": - version: 8.4.1 - resolution: "babel-loader@npm:8.4.1" +"babel-loader@npm:10.0.0, babel-loader@npm:^10.0.0": + version: 10.0.0 + resolution: "babel-loader@npm:10.0.0" dependencies: - find-cache-dir: "npm:^3.3.1" - loader-utils: "npm:^2.0.4" - make-dir: "npm:^3.1.0" - schema-utils: "npm:^2.6.5" + find-up: "npm:^5.0.0" peerDependencies: - "@babel/core": ^7.0.0 - webpack: ">=2" - checksum: 10/b54ae3796a351e5b5186cd7a8d53a902b679a33a187424c2858e385850142139a4343524c9fddd0eb4356250e51e67e47a9efeef79d01e132976c406212cba1d + "@babel/core": ^7.12.0 + webpack: ">=5.61.0" + checksum: 10/f22dc803e38a6b29cc61fbc3482f1f42a8787df2a43706dc937d328103ba6b947a223f67706b07af765d415664ad56e9fed00f85b524fe223f3ac3f00b03770b languageName: node linkType: hard @@ -6113,31 +6136,41 @@ __metadata: languageName: node linkType: hard -"babel-plugin-jest-hoist@npm:^28.1.3": - version: 28.1.3 - resolution: "babel-plugin-jest-hoist@npm:28.1.3" +"babel-plugin-istanbul@npm:^7.0.1": + version: 7.0.1 + resolution: "babel-plugin-istanbul@npm:7.0.1" dependencies: - "@babel/template": "npm:^7.3.3" - "@babel/types": "npm:^7.3.3" - "@types/babel__core": "npm:^7.1.14" - "@types/babel__traverse": "npm:^7.0.6" - checksum: 10/355e383dae2b50efa0aff73a751f6bc55e7ae19ddfe72c73f4a0ad7667a671175aba17d824833d98b33602da18dd04e5e5d37d03c4f245940d8664c45ad29df5 + "@babel/helper-plugin-utils": "npm:^7.0.0" + "@istanbuljs/load-nyc-config": "npm:^1.0.0" + "@istanbuljs/schema": "npm:^0.1.3" + istanbul-lib-instrument: "npm:^6.0.2" + test-exclude: "npm:^6.0.0" + checksum: 10/fe9f865f975aaa7a033de9ccb2b63fdcca7817266c5e98d3e02ac7ffd774c695093d215302796cb3770a71ef4574e7a9b298504c3c0c104cf4b48c8eda67b2a6 languageName: node linkType: hard -"babel-plugin-jest-hoist@npm:^29.6.3": - version: 29.6.3 - resolution: "babel-plugin-jest-hoist@npm:29.6.3" +"babel-plugin-jest-hoist@npm:30.2.0": + version: 30.2.0 + resolution: "babel-plugin-jest-hoist@npm:30.2.0" + dependencies: + "@types/babel__core": "npm:^7.20.5" + checksum: 10/360e87a9aa35f4cf208a10ba79e1821ea906f9e3399db2a9762cbc5076fd59f808e571d88b5b1106738d22e23f9ddefbb8137b2780b2abd401c8573b85c8a2f5 + languageName: node + linkType: hard + +"babel-plugin-jest-hoist@npm:^28.1.3": + version: 28.1.3 + resolution: "babel-plugin-jest-hoist@npm:28.1.3" dependencies: "@babel/template": "npm:^7.3.3" "@babel/types": "npm:^7.3.3" "@types/babel__core": "npm:^7.1.14" "@types/babel__traverse": "npm:^7.0.6" - checksum: 10/9bfa86ec4170bd805ab8ca5001ae50d8afcb30554d236ba4a7ffc156c1a92452e220e4acbd98daefc12bf0216fccd092d0a2efed49e7e384ec59e0597a926d65 + checksum: 10/355e383dae2b50efa0aff73a751f6bc55e7ae19ddfe72c73f4a0ad7667a671175aba17d824833d98b33602da18dd04e5e5d37d03c4f245940d8664c45ad29df5 languageName: node linkType: hard -"babel-plugin-polyfill-corejs2@npm:^0.4.10, babel-plugin-polyfill-corejs2@npm:^0.4.14": +"babel-plugin-polyfill-corejs2@npm:^0.4.14": version: 0.4.14 resolution: "babel-plugin-polyfill-corejs2@npm:0.4.14" dependencies: @@ -6150,18 +6183,6 @@ __metadata: languageName: node linkType: hard -"babel-plugin-polyfill-corejs3@npm:^0.10.6": - version: 0.10.6 - resolution: "babel-plugin-polyfill-corejs3@npm:0.10.6" - dependencies: - "@babel/helper-define-polyfill-provider": "npm:^0.6.2" - core-js-compat: "npm:^3.38.0" - peerDependencies: - "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 - checksum: 10/360ac9054a57a18c540059dc627ad5d84d15f79790cb3d84d19a02eec7188c67d08a07db789c3822d6f5df22d918e296d1f27c4055fec2e287d328f09ea8a78a - languageName: node - linkType: hard - "babel-plugin-polyfill-corejs3@npm:^0.13.0": version: 0.13.0 resolution: "babel-plugin-polyfill-corejs3@npm:0.13.0" @@ -6174,7 +6195,7 @@ __metadata: languageName: node linkType: hard -"babel-plugin-polyfill-regenerator@npm:^0.6.1, babel-plugin-polyfill-regenerator@npm:^0.6.5": +"babel-plugin-polyfill-regenerator@npm:^0.6.5": version: 0.6.5 resolution: "babel-plugin-polyfill-regenerator@npm:0.6.5" dependencies: @@ -6590,6 +6611,31 @@ __metadata: languageName: node linkType: hard +"babel-preset-current-node-syntax@npm:^1.2.0": + version: 1.2.0 + resolution: "babel-preset-current-node-syntax@npm:1.2.0" + dependencies: + "@babel/plugin-syntax-async-generators": "npm:^7.8.4" + "@babel/plugin-syntax-bigint": "npm:^7.8.3" + "@babel/plugin-syntax-class-properties": "npm:^7.12.13" + "@babel/plugin-syntax-class-static-block": "npm:^7.14.5" + "@babel/plugin-syntax-import-attributes": "npm:^7.24.7" + "@babel/plugin-syntax-import-meta": "npm:^7.10.4" + "@babel/plugin-syntax-json-strings": "npm:^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators": "npm:^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator": "npm:^7.8.3" + "@babel/plugin-syntax-numeric-separator": "npm:^7.10.4" + "@babel/plugin-syntax-object-rest-spread": "npm:^7.8.3" + "@babel/plugin-syntax-optional-catch-binding": "npm:^7.8.3" + "@babel/plugin-syntax-optional-chaining": "npm:^7.8.3" + "@babel/plugin-syntax-private-property-in-object": "npm:^7.14.5" + "@babel/plugin-syntax-top-level-await": "npm:^7.14.5" + peerDependencies: + "@babel/core": ^7.0.0 || ^8.0.0-0 + checksum: 10/3608fa671cfa46364ea6ec704b8fcdd7514b7b70e6ec09b1199e13ae73ed346c51d5ce2cb6d4d5b295f6a3f2cad1fdeec2308aa9e037002dd7c929194cc838ea + languageName: node + linkType: hard + "babel-preset-es2015@npm:6.24.1": version: 6.24.1 resolution: "babel-preset-es2015@npm:6.24.1" @@ -6631,27 +6677,27 @@ __metadata: languageName: node linkType: hard -"babel-preset-jest@npm:^28.1.3": - version: 28.1.3 - resolution: "babel-preset-jest@npm:28.1.3" +"babel-preset-jest@npm:30.2.0": + version: 30.2.0 + resolution: "babel-preset-jest@npm:30.2.0" dependencies: - babel-plugin-jest-hoist: "npm:^28.1.3" - babel-preset-current-node-syntax: "npm:^1.0.0" + babel-plugin-jest-hoist: "npm:30.2.0" + babel-preset-current-node-syntax: "npm:^1.2.0" peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10/8248a4a5ca4242cc06ad13b10b9183ad2664da8fb0da060c352223dcf286f0ce9c708fa17901dc44ecabec25e6d309e5e5b9830a61dd777c3925f187a345a47d + "@babel/core": ^7.11.0 || ^8.0.0-beta.1 + checksum: 10/f75e155a8cf63ea1c5ca942bf757b934427630a1eeafdf861e9117879b3367931fc521da3c41fd52f8d59d705d1093ffb46c9474b3fd4d765d194bea5659d7d9 languageName: node linkType: hard -"babel-preset-jest@npm:^29.6.3": - version: 29.6.3 - resolution: "babel-preset-jest@npm:29.6.3" +"babel-preset-jest@npm:^28.1.3": + version: 28.1.3 + resolution: "babel-preset-jest@npm:28.1.3" dependencies: - babel-plugin-jest-hoist: "npm:^29.6.3" + babel-plugin-jest-hoist: "npm:^28.1.3" babel-preset-current-node-syntax: "npm:^1.0.0" peerDependencies: "@babel/core": ^7.0.0 - checksum: 10/aa4ff2a8a728d9d698ed521e3461a109a1e66202b13d3494e41eea30729a5e7cc03b3a2d56c594423a135429c37bf63a9fa8b0b9ce275298be3095a88c69f6fb + checksum: 10/8248a4a5ca4242cc06ad13b10b9183ad2664da8fb0da060c352223dcf286f0ce9c708fa17901dc44ecabec25e6d309e5e5b9830a61dd777c3925f187a345a47d languageName: node linkType: hard @@ -7467,6 +7513,13 @@ __metadata: languageName: node linkType: hard +"ci-info@npm:^4.2.0": + version: 4.3.1 + resolution: "ci-info@npm:4.3.1" + checksum: 10/9dc952bef67e665ccde2e7a552d42d5d095529d21829ece060a00925ede2dfa136160c70ef2471ea6ed6c9b133218b47c007f56955c0f1734a2e57f240aa7445 + languageName: node + linkType: hard + "cjs-module-lexer@npm:^1.0.0, cjs-module-lexer@npm:^1.2.3": version: 1.4.3 resolution: "cjs-module-lexer@npm:1.4.3" @@ -8055,7 +8108,7 @@ __metadata: languageName: node linkType: hard -"core-js-compat@npm:^3.38.0, core-js-compat@npm:^3.38.1, core-js-compat@npm:^3.43.0": +"core-js-compat@npm:^3.43.0": version: 3.44.0 resolution: "core-js-compat@npm:3.44.0" dependencies: @@ -8863,13 +8916,13 @@ __metadata: version: 0.0.0-use.local resolution: "dnn-sitegroups@workspace:Dnn.AdminExperience/ClientSide/SiteGroups.Web" dependencies: - "@babel/core": "npm:7.26.0" + "@babel/core": "npm:7.28.4" "@babel/plugin-proposal-object-rest-spread": "npm:7.20.7" - "@babel/plugin-transform-object-assign": "npm:7.25.9" - "@babel/preset-env": "npm:7.26.0" - "@babel/preset-react": "npm:7.25.9" + "@babel/plugin-transform-object-assign": "npm:7.27.1" + "@babel/preset-env": "npm:7.28.3" + "@babel/preset-react": "npm:7.27.1" "@dnnsoftware/dnn-react-common": "npm:10.1.0" - babel-loader: "npm:8.3.0" + babel-loader: "npm:10.0.0" babel-plugin-transform-react-remove-prop-types: "npm:0.4.24" babel-polyfill: "npm:6.26.0" create-react-class: "npm:^15.7.0" @@ -8899,13 +8952,13 @@ __metadata: version: 0.0.0-use.local resolution: "dnn-sites-list-view@workspace:Dnn.AdminExperience/ClientSide/Sites.Web/src/_exportables" dependencies: - "@babel/core": "npm:7.26.0" + "@babel/core": "npm:7.28.4" "@babel/plugin-proposal-object-rest-spread": "npm:7.20.7" - "@babel/plugin-transform-object-assign": "npm:7.25.9" - "@babel/preset-env": "npm:7.26.0" - "@babel/preset-react": "npm:7.25.9" + "@babel/plugin-transform-object-assign": "npm:7.27.1" + "@babel/preset-env": "npm:7.28.3" + "@babel/preset-react": "npm:7.27.1" "@dnnsoftware/dnn-react-common": "npm:10.1.0" - babel-loader: "npm:8.3.0" + babel-loader: "npm:10.0.0" babel-plugin-transform-react-remove-prop-types: "npm:0.4.24" babel-polyfill: "npm:6.26.0" create-react-class: "npm:^15.7.0" @@ -8936,13 +8989,13 @@ __metadata: version: 0.0.0-use.local resolution: "dnn-users-exportables@workspace:Dnn.AdminExperience/ClientSide/Users.Web/src/_exportables" dependencies: - "@babel/core": "npm:^7.26.0" + "@babel/core": "npm:^7.28.4" "@babel/plugin-proposal-object-rest-spread": "npm:^7.20.7" - "@babel/plugin-transform-react-jsx": "npm:^7.25.9" - "@babel/preset-env": "npm:^7.26.0" - "@babel/preset-react": "npm:^7.25.9" + "@babel/plugin-transform-react-jsx": "npm:^7.27.1" + "@babel/preset-env": "npm:^7.28.3" + "@babel/preset-react": "npm:^7.27.1" "@dnnsoftware/dnn-react-common": "npm:10.1.0" - babel-loader: "npm:8.3.0" + babel-loader: "npm:10.0.0" create-react-class: "npm:^15.7.0" css-loader: "npm:^7.1.2" dayjs: "npm:^1.11.9" @@ -10350,12 +10403,12 @@ __metadata: version: 0.0.0-use.local resolution: "export-bundle@workspace:Dnn.AdminExperience/ClientSide/Bundle.Web" dependencies: - "@babel/core": "npm:^7.26.0" + "@babel/core": "npm:^7.28.4" "@babel/plugin-proposal-object-rest-spread": "npm:^7.20.7" - "@babel/preset-env": "npm:^7.26.0" - "@babel/preset-react": "npm:^7.25.9" + "@babel/preset-env": "npm:^7.28.3" + "@babel/preset-react": "npm:^7.27.1" "@dnnsoftware/dnn-react-common": "npm:10.1.0" - babel-loader: "npm:^8.3.0" + babel-loader: "npm:^10.0.0" babel-plugin-transform-object-assign: "npm:6.22.0" babel-plugin-transform-object-rest-spread: "npm:6.26.0" babel-plugin-transform-react-remove-prop-types: "npm:0.4.24" @@ -10481,11 +10534,11 @@ __metadata: version: 0.0.0-use.local resolution: "extensions@workspace:Dnn.AdminExperience/ClientSide/Extensions.Web" dependencies: - "@babel/core": "npm:^7.26.0" - "@babel/preset-env": "npm:^7.26.0" - "@babel/preset-react": "npm:^7.25.9" + "@babel/core": "npm:^7.28.4" + "@babel/preset-env": "npm:^7.28.3" + "@babel/preset-react": "npm:^7.27.1" "@dnnsoftware/dnn-react-common": "npm:10.1.0" - babel-loader: "npm:8.3.0" + babel-loader: "npm:10.0.0" babel-plugin-transform-object-assign: "npm:6.22.0" babel-plugin-transform-object-rest-spread: "npm:6.26.0" babel-plugin-transform-react-remove-prop-types: "npm:0.4.24" @@ -10648,7 +10701,7 @@ __metadata: languageName: node linkType: hard -"fb-watchman@npm:^2.0.0": +"fb-watchman@npm:^2.0.0, fb-watchman@npm:^2.0.2": version: 2.0.2 resolution: "fb-watchman@npm:2.0.2" dependencies: @@ -11170,7 +11223,7 @@ __metadata: languageName: node linkType: hard -"fsevents@npm:^2.3.2, fsevents@npm:~2.3.2, fsevents@npm:~2.3.3": +"fsevents@npm:^2.3.2, fsevents@npm:^2.3.3, fsevents@npm:~2.3.2, fsevents@npm:~2.3.3": version: 2.3.3 resolution: "fsevents@npm:2.3.3" dependencies: @@ -11180,7 +11233,7 @@ __metadata: languageName: node linkType: hard -"fsevents@patch:fsevents@npm%3A^2.3.2#optional!builtin, fsevents@patch:fsevents@npm%3A~2.3.2#optional!builtin, fsevents@patch:fsevents@npm%3A~2.3.3#optional!builtin": +"fsevents@patch:fsevents@npm%3A^2.3.2#optional!builtin, fsevents@patch:fsevents@npm%3A^2.3.3#optional!builtin, fsevents@patch:fsevents@npm%3A~2.3.2#optional!builtin, fsevents@patch:fsevents@npm%3A~2.3.3#optional!builtin": version: 2.3.3 resolution: "fsevents@patch:fsevents@npm%3A2.3.3#optional!builtin::version=2.3.3&hash=df0bf1" dependencies: @@ -12965,6 +13018,19 @@ __metadata: languageName: node linkType: hard +"istanbul-lib-instrument@npm:^6.0.2": + version: 6.0.3 + resolution: "istanbul-lib-instrument@npm:6.0.3" + dependencies: + "@babel/core": "npm:^7.23.9" + "@babel/parser": "npm:^7.23.9" + "@istanbuljs/schema": "npm:^0.1.3" + istanbul-lib-coverage: "npm:^3.2.0" + semver: "npm:^7.5.4" + checksum: 10/aa5271c0008dfa71b6ecc9ba1e801bf77b49dc05524e8c30d58aaf5b9505e0cd12f25f93165464d4266a518c5c75284ecb598fbd89fec081ae77d2c9d3327695 + languageName: node + linkType: hard + "istanbul-lib-report@npm:^3.0.0": version: 3.0.1 resolution: "istanbul-lib-report@npm:3.0.1" @@ -13214,49 +13280,48 @@ __metadata: languageName: node linkType: hard -"jest-haste-map@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-haste-map@npm:28.1.3" +"jest-haste-map@npm:30.2.0": + version: 30.2.0 + resolution: "jest-haste-map@npm:30.2.0" dependencies: - "@jest/types": "npm:^28.1.3" - "@types/graceful-fs": "npm:^4.1.3" + "@jest/types": "npm:30.2.0" "@types/node": "npm:*" - anymatch: "npm:^3.0.3" - fb-watchman: "npm:^2.0.0" - fsevents: "npm:^2.3.2" - graceful-fs: "npm:^4.2.9" - jest-regex-util: "npm:^28.0.2" - jest-util: "npm:^28.1.3" - jest-worker: "npm:^28.1.3" - micromatch: "npm:^4.0.4" + anymatch: "npm:^3.1.3" + fb-watchman: "npm:^2.0.2" + fsevents: "npm:^2.3.3" + graceful-fs: "npm:^4.2.11" + jest-regex-util: "npm:30.0.1" + jest-util: "npm:30.2.0" + jest-worker: "npm:30.2.0" + micromatch: "npm:^4.0.8" walker: "npm:^1.0.8" dependenciesMeta: fsevents: optional: true - checksum: 10/c78e0e81e3f138f379440fb2ddfdc3753da377b74477df02ef404d5de1508d6545d28cf02516713dbde093a8c112098be6f50080a7a8fab6b888992720322a57 + checksum: 10/a88be6b0b672144aa30fe2d72e630d639c8d8729ee2cef84d0f830eac2005ac021cd8354f8ed8ecd74223f6a8b281efb62f466f5c9e01ed17650e38761051f4c languageName: node linkType: hard -"jest-haste-map@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-haste-map@npm:29.7.0" +"jest-haste-map@npm:^28.1.3": + version: 28.1.3 + resolution: "jest-haste-map@npm:28.1.3" dependencies: - "@jest/types": "npm:^29.6.3" + "@jest/types": "npm:^28.1.3" "@types/graceful-fs": "npm:^4.1.3" "@types/node": "npm:*" anymatch: "npm:^3.0.3" fb-watchman: "npm:^2.0.0" fsevents: "npm:^2.3.2" graceful-fs: "npm:^4.2.9" - jest-regex-util: "npm:^29.6.3" - jest-util: "npm:^29.7.0" - jest-worker: "npm:^29.7.0" + jest-regex-util: "npm:^28.0.2" + jest-util: "npm:^28.1.3" + jest-worker: "npm:^28.1.3" micromatch: "npm:^4.0.4" walker: "npm:^1.0.8" dependenciesMeta: fsevents: optional: true - checksum: 10/8531b42003581cb18a69a2774e68c456fb5a5c3280b1b9b77475af9e346b6a457250f9d756bfeeae2fe6cbc9ef28434c205edab9390ee970a919baddfa08bb85 + checksum: 10/c78e0e81e3f138f379440fb2ddfdc3753da377b74477df02ef404d5de1508d6545d28cf02516713dbde093a8c112098be6f50080a7a8fab6b888992720322a57 languageName: node linkType: hard @@ -13321,6 +13386,13 @@ __metadata: languageName: node linkType: hard +"jest-regex-util@npm:30.0.1": + version: 30.0.1 + resolution: "jest-regex-util@npm:30.0.1" + checksum: 10/fa8dac80c3e94db20d5e1e51d1bdf101cf5ede8f4e0b8f395ba8b8ea81e71804ffd747452a6bb6413032865de98ac656ef8ae43eddd18d980b6442a2764ed562 + languageName: node + linkType: hard + "jest-regex-util@npm:^28.0.2": version: 28.0.2 resolution: "jest-regex-util@npm:28.0.2" @@ -13328,13 +13400,6 @@ __metadata: languageName: node linkType: hard -"jest-regex-util@npm:^29.6.3": - version: 29.6.3 - resolution: "jest-regex-util@npm:29.6.3" - checksum: 10/0518beeb9bf1228261695e54f0feaad3606df26a19764bc19541e0fc6e2a3737191904607fb72f3f2ce85d9c16b28df79b7b1ec9443aa08c3ef0e9efda6f8f2a - languageName: node - linkType: hard - "jest-resolve-dependencies@npm:^28.1.3": version: 28.1.3 resolution: "jest-resolve-dependencies@npm:28.1.3" @@ -13452,6 +13517,20 @@ __metadata: languageName: node linkType: hard +"jest-util@npm:30.2.0": + version: 30.2.0 + resolution: "jest-util@npm:30.2.0" + dependencies: + "@jest/types": "npm:30.2.0" + "@types/node": "npm:*" + chalk: "npm:^4.1.2" + ci-info: "npm:^4.2.0" + graceful-fs: "npm:^4.2.11" + picomatch: "npm:^4.0.2" + checksum: 10/cf2f2fb83417ea69f9992121561c95cf4e9aad7946819b771b8b52addf78811101b33b51d0a39fa0c305f2751dab262feed7699de052659ff03d51827c8862f5 + languageName: node + linkType: hard + "jest-util@npm:^28.1.3": version: 28.1.3 resolution: "jest-util@npm:28.1.3" @@ -13510,6 +13589,19 @@ __metadata: languageName: node linkType: hard +"jest-worker@npm:30.2.0": + version: 30.2.0 + resolution: "jest-worker@npm:30.2.0" + dependencies: + "@types/node": "npm:*" + "@ungap/structured-clone": "npm:^1.3.0" + jest-util: "npm:30.2.0" + merge-stream: "npm:^2.0.0" + supports-color: "npm:^8.1.1" + checksum: 10/9354b0c71c80173f673da6bbc0ddaad26e4395b06532f7332e0c1e93e855b873b10139b040e01eda77f3dc5a0b67613e2bd7c56c4947ee771acfc3611de2ca29 + languageName: node + linkType: hard + "jest-worker@npm:^27.4.5": version: 27.5.1 resolution: "jest-worker@npm:27.5.1" @@ -14102,13 +14194,13 @@ __metadata: version: 0.0.0-use.local resolution: "licensing@workspace:Dnn.AdminExperience/ClientSide/Licensing.Web" dependencies: - "@babel/core": "npm:^7.26.0" - "@babel/preset-env": "npm:^7.26.0" - "@babel/preset-react": "npm:^7.25.9" + "@babel/core": "npm:^7.28.4" + "@babel/preset-env": "npm:^7.28.3" + "@babel/preset-react": "npm:^7.27.1" "@dnnsoftware/dnn-react-common": "npm:10.1.0" array.prototype.find: "npm:2.2.3" array.prototype.findindex: "npm:2.2.4" - babel-loader: "npm:8.3.0" + babel-loader: "npm:10.0.0" babel-plugin-transform-object-assign: "npm:6.22.0" babel-plugin-transform-object-rest-spread: "npm:6.26.0" babel-plugin-transform-react-remove-prop-types: "npm:0.4.24" @@ -14214,7 +14306,7 @@ __metadata: languageName: node linkType: hard -"loader-utils@npm:^2.0.0, loader-utils@npm:^2.0.3, loader-utils@npm:^2.0.4": +"loader-utils@npm:^2.0.0, loader-utils@npm:^2.0.3": version: 2.0.4 resolution: "loader-utils@npm:2.0.4" dependencies: @@ -14517,7 +14609,7 @@ __metadata: languageName: node linkType: hard -"make-dir@npm:^3.0.2, make-dir@npm:^3.1.0": +"make-dir@npm:^3.0.2": version: 3.1.0 resolution: "make-dir@npm:3.1.0" dependencies: @@ -16296,16 +16388,16 @@ __metadata: version: 0.0.0-use.local resolution: "pages@workspace:Dnn.AdminExperience/ClientSide/Pages.Web" dependencies: - "@babel/core": "npm:^7.26.0" + "@babel/core": "npm:^7.28.4" "@babel/plugin-proposal-object-rest-spread": "npm:^7.20.7" - "@babel/preset-env": "npm:^7.26.0" - "@babel/preset-react": "npm:^7.25.9" + "@babel/preset-env": "npm:^7.28.3" + "@babel/preset-react": "npm:^7.27.1" "@dnnsoftware/dnn-react-common": "npm:10.1.0" "@types/knockout": "npm:^3.4.72" "@types/redux": "npm:3.6.31" babel-eslint: "npm:^10.1.0" - babel-jest: "npm:^29.7.0" - babel-loader: "npm:8.3.0" + babel-jest: "npm:^30.2.0" + babel-loader: "npm:10.0.0" babel-plugin-transform-object-assign: "npm:^6.22.0" babel-plugin-transform-object-rest-spread: "npm:6.26.0" babel-plugin-transform-react-remove-prop-types: "npm:0.4.24" @@ -16657,7 +16749,7 @@ __metadata: languageName: node linkType: hard -"pirates@npm:^4.0.4": +"pirates@npm:^4.0.4, pirates@npm:^4.0.7": version: 4.0.7 resolution: "pirates@npm:4.0.7" checksum: 10/2427f371366081ae42feb58214f04805d6b41d6b84d74480ebcc9e0ddbd7105a139f7c653daeaf83ad8a1a77214cf07f64178e76de048128fec501eab3305a96 @@ -17322,15 +17414,15 @@ __metadata: version: 0.0.0-use.local resolution: "prompt@workspace:Dnn.AdminExperience/ClientSide/Prompt.Web" dependencies: - "@babel/core": "npm:^7.26.0" - "@babel/preset-env": "npm:^7.26.0" - "@babel/preset-react": "npm:^7.25.9" + "@babel/core": "npm:^7.28.4" + "@babel/preset-env": "npm:^7.28.3" + "@babel/preset-react": "npm:^7.27.1" "@dnnsoftware/dnn-react-common": "npm:10.1.0" array.prototype.find: "npm:2.2.3" array.prototype.findindex: "npm:2.2.4" babel-eslint: "npm:^10.1.0" - babel-jest: "npm:^29.7.0" - babel-loader: "npm:^8.3.0" + babel-jest: "npm:^30.2.0" + babel-loader: "npm:^10.0.0" babel-plugin-transform-object-assign: "npm:6.22.0" babel-plugin-transform-object-rest-spread: "npm:6.26.0" babel-plugin-transform-react-remove-prop-types: "npm:0.4.24" @@ -18833,13 +18925,13 @@ __metadata: version: 0.0.0-use.local resolution: "roles@workspace:Dnn.AdminExperience/ClientSide/Roles.Web" dependencies: - "@babel/core": "npm:^7.26.0" - "@babel/preset-env": "npm:^7.26.0" - "@babel/preset-react": "npm:^7.25.9" + "@babel/core": "npm:^7.28.4" + "@babel/preset-env": "npm:^7.28.3" + "@babel/preset-react": "npm:^7.27.1" "@dnnsoftware/dnn-react-common": "npm:10.1.0" array.prototype.find: "npm:^2.2.3" array.prototype.findindex: "npm:^2.2.1" - babel-loader: "npm:^8.3.0" + babel-loader: "npm:^10.0.0" babel-plugin-transform-object-assign: "npm:6.22.0" babel-plugin-transform-object-rest-spread: "npm:6.26.0" babel-plugin-transform-react-remove-prop-types: "npm:0.4.24" @@ -19283,7 +19375,7 @@ __metadata: languageName: node linkType: hard -"schema-utils@npm:^2.0.0, schema-utils@npm:^2.6.5": +"schema-utils@npm:^2.0.0": version: 2.7.1 resolution: "schema-utils@npm:2.7.1" dependencies: @@ -19328,13 +19420,13 @@ __metadata: version: 0.0.0-use.local resolution: "security-settings@workspace:Dnn.AdminExperience/ClientSide/Security.Web" dependencies: - "@babel/core": "npm:^7.26.0" + "@babel/core": "npm:^7.28.4" "@babel/plugin-proposal-object-rest-spread": "npm:^7.20.7" - "@babel/plugin-transform-react-jsx": "npm:^7.25.9" - "@babel/preset-env": "npm:^7.26.0" - "@babel/preset-react": "npm:^7.25.9" + "@babel/plugin-transform-react-jsx": "npm:^7.27.1" + "@babel/preset-env": "npm:^7.28.3" + "@babel/preset-react": "npm:^7.27.1" "@dnnsoftware/dnn-react-common": "npm:10.1.0" - babel-loader: "npm:8.3.0" + babel-loader: "npm:10.0.0" babel-plugin-transform-react-remove-prop-types: "npm:0.4.24" create-react-class: "npm:^15.7.0" css-loader: "npm:^7.1.2" @@ -19454,14 +19546,14 @@ __metadata: version: 0.0.0-use.local resolution: "seo@workspace:Dnn.AdminExperience/ClientSide/Seo.Web" dependencies: - "@babel/core": "npm:^7.26.0" + "@babel/core": "npm:^7.28.4" "@babel/plugin-proposal-object-rest-spread": "npm:^7.20.7" - "@babel/preset-env": "npm:^7.26.0" - "@babel/preset-react": "npm:^7.25.9" + "@babel/preset-env": "npm:^7.28.3" + "@babel/preset-react": "npm:^7.27.1" "@dnnsoftware/dnn-react-common": "npm:10.1.0" array.prototype.find: "npm:2.2.3" array.prototype.findindex: "npm:2.2.4" - babel-loader: "npm:8.3.0" + babel-loader: "npm:10.0.0" babel-plugin-transform-object-assign: "npm:6.22.0" babel-plugin-transform-object-rest-spread: "npm:6.26.0" babel-plugin-transform-react-remove-prop-types: "npm:0.4.24" @@ -19557,13 +19649,13 @@ __metadata: version: 0.0.0-use.local resolution: "servers@workspace:Dnn.AdminExperience/ClientSide/Servers.Web" dependencies: - "@babel/core": "npm:^7.26.0" + "@babel/core": "npm:^7.28.4" "@babel/plugin-proposal-object-rest-spread": "npm:^7.20.7" - "@babel/preset-env": "npm:^7.26.0" - "@babel/preset-react": "npm:^7.25.9" + "@babel/preset-env": "npm:^7.28.3" + "@babel/preset-react": "npm:^7.27.1" "@dnnsoftware/dnn-react-common": "npm:10.1.0" "@types/redux": "npm:^3.6.31" - babel-loader: "npm:8.3.0" + babel-loader: "npm:10.0.0" babel-plugin-transform-object-assign: "npm:6.22.0" babel-plugin-transform-object-rest-spread: "npm:6.26.0" babel-plugin-transform-react-remove-prop-types: "npm:0.4.24" @@ -19827,14 +19919,14 @@ __metadata: version: 0.0.0-use.local resolution: "site-import-export@workspace:Dnn.AdminExperience/ClientSide/SiteImportExport.Web" dependencies: - "@babel/core": "npm:^7.26.0" + "@babel/core": "npm:^7.28.4" "@babel/plugin-proposal-object-rest-spread": "npm:^7.20.7" - "@babel/plugin-transform-react-jsx": "npm:^7.25.9" - "@babel/preset-env": "npm:^7.26.0" - "@babel/preset-react": "npm:^7.25.9" + "@babel/plugin-transform-react-jsx": "npm:^7.27.1" + "@babel/preset-env": "npm:^7.28.3" + "@babel/preset-react": "npm:^7.27.1" "@dnnsoftware/dnn-react-common": "npm:10.1.0" babel-eslint: "npm:^10.1.0" - babel-loader: "npm:8.3.0" + babel-loader: "npm:10.0.0" babel-plugin-transform-class-properties: "npm:^6.24.1" babel-plugin-transform-object-assign: "npm:6.22.0" babel-plugin-transform-object-rest-spread: "npm:6.26.0" @@ -19880,15 +19972,15 @@ __metadata: version: 0.0.0-use.local resolution: "site-settings@workspace:Dnn.AdminExperience/ClientSide/SiteSettings.Web" dependencies: - "@babel/core": "npm:^7.26.0" + "@babel/core": "npm:^7.28.4" "@babel/plugin-proposal-object-rest-spread": "npm:^7.20.7" - "@babel/plugin-transform-react-jsx": "npm:^7.25.9" - "@babel/preset-env": "npm:^7.26.0" - "@babel/preset-react": "npm:^7.25.9" + "@babel/plugin-transform-react-jsx": "npm:^7.27.1" + "@babel/preset-env": "npm:^7.28.3" + "@babel/preset-react": "npm:^7.27.1" "@dnnsoftware/dnn-react-common": "npm:10.1.0" array.prototype.find: "npm:2.2.3" array.prototype.findindex: "npm:2.2.4" - babel-loader: "npm:^8.3.0" + babel-loader: "npm:^10.0.0" babel-plugin-transform-react-remove-prop-types: "npm:^0.4.24" create-react-class: "npm:^15.7.0" css-loader: "npm:^7.1.2" @@ -19926,13 +20018,13 @@ __metadata: version: 0.0.0-use.local resolution: "sites@workspace:Dnn.AdminExperience/ClientSide/Sites.Web" dependencies: - "@babel/core": "npm:7.26.0" + "@babel/core": "npm:7.28.4" "@babel/plugin-proposal-object-rest-spread": "npm:7.20.7" - "@babel/plugin-transform-object-assign": "npm:7.25.9" - "@babel/preset-env": "npm:7.26.0" - "@babel/preset-react": "npm:7.25.9" + "@babel/plugin-transform-object-assign": "npm:7.27.1" + "@babel/preset-env": "npm:7.28.3" + "@babel/preset-react": "npm:7.27.1" "@dnnsoftware/dnn-react-common": "npm:10.1.0" - babel-loader: "npm:8.3.0" + babel-loader: "npm:10.0.0" babel-plugin-transform-react-remove-prop-types: "npm:0.4.24" babel-polyfill: "npm:6.26.0" create-react-class: "npm:^15.7.0" @@ -20898,14 +20990,14 @@ __metadata: version: 0.0.0-use.local resolution: "task-scheduler@workspace:Dnn.AdminExperience/ClientSide/TaskScheduler.Web" dependencies: - "@babel/core": "npm:^7.26.0" + "@babel/core": "npm:^7.28.4" "@babel/plugin-proposal-object-rest-spread": "npm:^7.20.7" - "@babel/preset-env": "npm:^7.26.0" - "@babel/preset-react": "npm:^7.25.9" + "@babel/preset-env": "npm:^7.28.3" + "@babel/preset-react": "npm:^7.27.1" "@dnnsoftware/dnn-react-common": "npm:10.1.0" array.prototype.find: "npm:2.2.3" array.prototype.findindex: "npm:2.2.4" - babel-loader: "npm:8.3.0" + babel-loader: "npm:10.0.0" babel-plugin-transform-object-assign: "npm:6.22.0" babel-plugin-transform-object-rest-spread: "npm:6.26.0" babel-plugin-transform-react-remove-prop-types: "npm:0.4.24" @@ -20939,14 +21031,14 @@ __metadata: version: 0.0.0-use.local resolution: "taxonomy@workspace:Dnn.AdminExperience/ClientSide/Vocabularies.Web" dependencies: - "@babel/core": "npm:^7.26.0" + "@babel/core": "npm:^7.28.4" "@babel/plugin-proposal-object-rest-spread": "npm:^7.20.7" - "@babel/preset-env": "npm:^7.26.0" - "@babel/preset-react": "npm:^7.25.9" + "@babel/preset-env": "npm:^7.28.3" + "@babel/preset-react": "npm:^7.27.1" "@dnnsoftware/dnn-react-common": "npm:10.1.0" array.prototype.find: "npm:2.2.3" array.prototype.findindex: "npm:2.2.4" - babel-loader: "npm:^8.3.0" + babel-loader: "npm:^10.0.0" babel-plugin-transform-object-assign: "npm:6.22.0" babel-plugin-transform-object-rest-spread: "npm:6.26.0" babel-plugin-transform-react-remove-prop-types: "npm:0.4.24" @@ -21051,12 +21143,12 @@ __metadata: version: 0.0.0-use.local resolution: "themes@workspace:Dnn.AdminExperience/ClientSide/Themes.Web" dependencies: - "@babel/core": "npm:^7.26.0" + "@babel/core": "npm:^7.28.4" "@babel/plugin-proposal-object-rest-spread": "npm:^7.20.7" - "@babel/preset-env": "npm:^7.26.0" - "@babel/preset-react": "npm:^7.25.9" + "@babel/preset-env": "npm:^7.28.3" + "@babel/preset-react": "npm:^7.27.1" "@dnnsoftware/dnn-react-common": "npm:10.1.0" - babel-loader: "npm:8.3.0" + babel-loader: "npm:10.0.0" babel-plugin-transform-object-assign: "npm:6.22.0" babel-plugin-transform-object-rest-spread: "npm:6.26.0" babel-plugin-transform-react-remove-prop-types: "npm:0.4.24" @@ -21964,13 +22056,13 @@ __metadata: version: 0.0.0-use.local resolution: "users@workspace:Dnn.AdminExperience/ClientSide/Users.Web" dependencies: - "@babel/core": "npm:^7.26.0" + "@babel/core": "npm:^7.28.4" "@babel/plugin-proposal-object-rest-spread": "npm:^7.20.7" - "@babel/plugin-transform-react-jsx": "npm:^7.25.9" - "@babel/preset-env": "npm:^7.26.0" - "@babel/preset-react": "npm:^7.25.9" + "@babel/plugin-transform-react-jsx": "npm:^7.27.1" + "@babel/preset-env": "npm:^7.28.3" + "@babel/preset-react": "npm:^7.27.1" "@dnnsoftware/dnn-react-common": "npm:10.1.0" - babel-loader: "npm:^8.3.0" + babel-loader: "npm:^10.0.0" create-react-class: "npm:^15.7.0" css-loader: "npm:^7.1.2" eslint: "npm:9.38.0" @@ -22728,7 +22820,7 @@ __metadata: languageName: node linkType: hard -"write-file-atomic@npm:5.0.1, write-file-atomic@npm:^5.0.0": +"write-file-atomic@npm:5.0.1, write-file-atomic@npm:^5.0.0, write-file-atomic@npm:^5.0.1": version: 5.0.1 resolution: "write-file-atomic@npm:5.0.1" dependencies: @@ -22749,7 +22841,7 @@ __metadata: languageName: node linkType: hard -"write-file-atomic@npm:^4.0.1, write-file-atomic@npm:^4.0.2": +"write-file-atomic@npm:^4.0.1": version: 4.0.2 resolution: "write-file-atomic@npm:4.0.2" dependencies: From 4b9b9338d5249b1f25c4797ed7eba470c0a3341f Mon Sep 17 00:00:00 2001 From: Brian Dukes Date: Tue, 21 Oct 2025 16:01:04 -0500 Subject: [PATCH 093/199] Bump Yarn to 4.10.3 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 54aacb92308..16747430d87 100644 --- a/package.json +++ b/package.json @@ -44,5 +44,5 @@ "resolutions": { "@types/ws": "8.5.4" }, - "packageManager": "yarn@4.9.2" + "packageManager": "yarn@4.10.3" } From dba71e4a9e9a04c2a63bf36f902a08702f848cd5 Mon Sep 17 00:00:00 2001 From: Brian Dukes Date: Tue, 21 Oct 2025 16:03:19 -0500 Subject: [PATCH 094/199] Require npm packages to be at least 24 hours old See https://pnpm.io/supply-chain-security --- .yarnrc.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.yarnrc.yml b/.yarnrc.yml index 70ec1882d0c..053eeb7f358 100644 --- a/.yarnrc.yml +++ b/.yarnrc.yml @@ -1,3 +1,5 @@ compressionLevel: mixed nodeLinker: node-modules + +npmMinimalAgeGate: 1440 From fe10d2e8849cefa81a9f0c1ec064a4526f08e151 Mon Sep 17 00:00:00 2001 From: Brian Dukes Date: Tue, 21 Oct 2025 16:04:21 -0500 Subject: [PATCH 095/199] Bump storybook to 9.1.13 --- .../ClientSide/Dnn.React.Common/package.json | 8 +- yarn.lock | 320 ++++++++++++------ 2 files changed, 228 insertions(+), 100 deletions(-) diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/package.json b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/package.json index 4b7994a8dfd..31baa34c598 100644 --- a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/package.json +++ b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/package.json @@ -53,10 +53,10 @@ "@babel/preset-env": "^7.28.3", "@babel/preset-react": "^7.27.1", "@eslint/compat": "^1.4.0", - "@storybook/addon-docs": "9.0.4", - "@storybook/addon-onboarding": "9.0.4", + "@storybook/addon-docs": "9.1.13", + "@storybook/addon-onboarding": "9.1.13", "@storybook/addon-webpack5-compiler-swc": "4.0.1", - "@storybook/react-webpack5": "9.0.4", + "@storybook/react-webpack5": "9.1.13", "babel-eslint": "^10.1.0", "babel-loader": "^10.0.0", "babel-plugin-transform-react-remove-prop-types": "0.4.24", @@ -87,7 +87,7 @@ "react-dom": "^16.14.0", "react-hot-loader": "^4.13.1", "react-test-renderer": "^17.0.2", - "storybook": "9.0.4", + "storybook": "9.1.13", "style-loader": "^4.0.0", "url-loader": "1.1.2", "webpack": "5.94.0", diff --git a/yarn.lock b/yarn.lock index 28745ef1977..059c60b417c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1635,10 +1635,10 @@ __metadata: "@babel/preset-env": "npm:^7.28.3" "@babel/preset-react": "npm:^7.27.1" "@eslint/compat": "npm:^1.4.0" - "@storybook/addon-docs": "npm:9.0.4" - "@storybook/addon-onboarding": "npm:9.0.4" + "@storybook/addon-docs": "npm:9.1.13" + "@storybook/addon-onboarding": "npm:9.1.13" "@storybook/addon-webpack5-compiler-swc": "npm:4.0.1" - "@storybook/react-webpack5": "npm:9.0.4" + "@storybook/react-webpack5": "npm:9.1.13" babel-eslint: "npm:^10.1.0" babel-loader: "npm:^10.0.0" babel-plugin-transform-react-remove-prop-types: "npm:0.4.24" @@ -1685,7 +1685,7 @@ __metadata: react-widgets: "npm:^5.8.4" redux-undo: "npm:^1.0.0-beta9" scroll: "npm:^3.0.1" - storybook: "npm:9.0.4" + storybook: "npm:9.1.13" style-loader: "npm:^4.0.0" throttle-debounce: "npm:^5.0.0" url-loader: "npm:1.1.2" @@ -2475,6 +2475,13 @@ __metadata: languageName: node linkType: hard +"@jridgewell/sourcemap-codec@npm:^1.5.5": + version: 1.5.5 + resolution: "@jridgewell/sourcemap-codec@npm:1.5.5" + checksum: 10/5d9d207b462c11e322d71911e55e21a4e2772f71ffe8d6f1221b8eb5ae6774458c1d242f897fb0814e8714ca9a6b498abfa74dfe4f434493342902b1a48b33a5 + languageName: node + linkType: hard + "@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.13, @jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25, @jridgewell/trace-mapping@npm:^0.3.28": version: 0.3.29 resolution: "@jridgewell/trace-mapping@npm:0.3.29" @@ -3539,29 +3546,29 @@ __metadata: languageName: node linkType: hard -"@storybook/addon-docs@npm:9.0.4": - version: 9.0.4 - resolution: "@storybook/addon-docs@npm:9.0.4" +"@storybook/addon-docs@npm:9.1.13": + version: 9.1.13 + resolution: "@storybook/addon-docs@npm:9.1.13" dependencies: "@mdx-js/react": "npm:^3.0.0" - "@storybook/csf-plugin": "npm:9.0.4" - "@storybook/icons": "npm:^1.2.12" - "@storybook/react-dom-shim": "npm:9.0.4" + "@storybook/csf-plugin": "npm:9.1.13" + "@storybook/icons": "npm:^1.4.0" + "@storybook/react-dom-shim": "npm:9.1.13" react: "npm:^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" react-dom: "npm:^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" ts-dedent: "npm:^2.0.0" peerDependencies: - storybook: ^9.0.4 - checksum: 10/26e6090ac9a4c30561ee19f0de9a5cf6ce700720b66c3ca1b1887e350bfc4924142273ac4038d1e635d9f4b246cdbe3b5f4b577aca2c909cc618997c3d13bcc8 + storybook: ^9.1.13 + checksum: 10/ea89f0aedf05ddf4e40b45c03bd5c9677fef45afc2794f21aee942af4abf34ba80cc32f04d5634f5f70c7fbbdc65874c30f5d6eaddcfe8e2812953061c0d9b46 languageName: node linkType: hard -"@storybook/addon-onboarding@npm:9.0.4": - version: 9.0.4 - resolution: "@storybook/addon-onboarding@npm:9.0.4" +"@storybook/addon-onboarding@npm:9.1.13": + version: 9.1.13 + resolution: "@storybook/addon-onboarding@npm:9.1.13" peerDependencies: - storybook: ^9.0.4 - checksum: 10/66f66d0dd4106f6854885d3a330bf992148df9e10b4f978c0267d171c57c2a12a9edbfef9efd8ade419547c8a3144a93c52d93ff0564ae3aa21b69ceadb3d4bf + storybook: ^9.1.13 + checksum: 10/ee7f2300ba3df320b638c0d7205dd1bc8c821b2ba87fa4a4653be2731af8386e38bd75dfb308b5e7ff6de9f5e2f3d222040858522eeaff81f1d6f1946de21506 languageName: node linkType: hard @@ -3577,11 +3584,11 @@ __metadata: languageName: node linkType: hard -"@storybook/builder-webpack5@npm:9.0.4": - version: 9.0.4 - resolution: "@storybook/builder-webpack5@npm:9.0.4" +"@storybook/builder-webpack5@npm:9.1.13": + version: 9.1.13 + resolution: "@storybook/builder-webpack5@npm:9.1.13" dependencies: - "@storybook/core-webpack": "npm:9.0.4" + "@storybook/core-webpack": "npm:9.1.13" case-sensitive-paths-webpack-plugin: "npm:^2.4.0" cjs-module-lexer: "npm:^1.2.3" css-loader: "npm:^6.7.1" @@ -3597,33 +3604,33 @@ __metadata: webpack-hot-middleware: "npm:^2.25.1" webpack-virtual-modules: "npm:^0.6.0" peerDependencies: - storybook: ^9.0.4 + storybook: ^9.1.13 peerDependenciesMeta: typescript: optional: true - checksum: 10/4b2b053345bfb0354723fb70d3ba92e595e34fa2ad9cf8f0003a8b5145c579a7cbccf4188420e34e0e1f144677cacfe76be5a7f8d6e82efe7936a7599cbee20c + checksum: 10/801187f26250096c1a5e9edf0c8f05d2ea3c42b06b6433936083b832c0002fae655035a9b62015f0d4b7ded0ed3239df5710090b93776c43e2519b1b25a4e997 languageName: node linkType: hard -"@storybook/core-webpack@npm:9.0.4": - version: 9.0.4 - resolution: "@storybook/core-webpack@npm:9.0.4" +"@storybook/core-webpack@npm:9.1.13": + version: 9.1.13 + resolution: "@storybook/core-webpack@npm:9.1.13" dependencies: ts-dedent: "npm:^2.0.0" peerDependencies: - storybook: ^9.0.4 - checksum: 10/968cdfcfb6e1b62525a90dc5228ec2ae17fa5b32df2be276aad6689d015da9b177ae2d087a95d71e6b85b23e4d53cd2714042ea710fd8ee7afcf1440ea5b39a7 + storybook: ^9.1.13 + checksum: 10/4250b158a802d3481fa0d242470065c511a8354821e91be9322096c9f446293e290905175251c086d4404becde2836a2bc2f090228b735856fb4b8d1b5f0818e languageName: node linkType: hard -"@storybook/csf-plugin@npm:9.0.4": - version: 9.0.4 - resolution: "@storybook/csf-plugin@npm:9.0.4" +"@storybook/csf-plugin@npm:9.1.13": + version: 9.1.13 + resolution: "@storybook/csf-plugin@npm:9.1.13" dependencies: unplugin: "npm:^1.3.1" peerDependencies: - storybook: ^9.0.4 - checksum: 10/1dfaef4478405d3fc8f3401ad95c4595cac0f4fbcb65a8b9b51874ae1c2a3259f9ae94412bd6e1c981c1008905de4ed00d2590c8479c9e8b44a1a16e75af7650 + storybook: ^9.1.13 + checksum: 10/5ce6fc05b36dde6ac975ad0bb93c8d926e8a8ca7366a47aa4680a899131b0e07f97b368d562671fbd1505c256c7cb0e21791292dcab2a2b9e057e91550dc8df4 languageName: node linkType: hard @@ -3634,24 +3641,24 @@ __metadata: languageName: node linkType: hard -"@storybook/icons@npm:^1.2.12": - version: 1.4.0 - resolution: "@storybook/icons@npm:1.4.0" +"@storybook/icons@npm:^1.4.0": + version: 1.6.0 + resolution: "@storybook/icons@npm:1.6.0" peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - checksum: 10/513d36188bb84f1f64dd982b6bd577de4c3d7bc2aa9d318a2acf8c654d16994bac0b669787a4ced6720e471251bcb0ec68b8d8dc2cc7245d11102bd617243700 + checksum: 10/f9036ca3b0d2904778eb4e202305f2780b549434380f9760f0bc704fe3ee19d7332f9560a66435ebb2156346cee9a863e40fa5e4b27790bf993b0c1180a3146d languageName: node linkType: hard -"@storybook/preset-react-webpack@npm:9.0.4": - version: 9.0.4 - resolution: "@storybook/preset-react-webpack@npm:9.0.4" +"@storybook/preset-react-webpack@npm:9.1.13": + version: 9.1.13 + resolution: "@storybook/preset-react-webpack@npm:9.1.13" dependencies: - "@storybook/core-webpack": "npm:9.0.4" + "@storybook/core-webpack": "npm:9.1.13" "@storybook/react-docgen-typescript-plugin": "npm:1.0.6--canary.9.0c3f3b7.0" "@types/semver": "npm:^7.3.4" - find-up: "npm:^5.0.0" + find-up: "npm:^7.0.0" magic-string: "npm:^0.30.5" react-docgen: "npm:^7.1.1" resolve: "npm:^1.22.8" @@ -3661,11 +3668,11 @@ __metadata: peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: ^9.0.4 + storybook: ^9.1.13 peerDependenciesMeta: typescript: optional: true - checksum: 10/1fc603107698cbd22a7649affddfd85b8077d5d2c4ed4f8b3c2b10cce412617e8c7c156692ad7293738e9b4db1699d7154dda69cd1d6bf9f9f21f5d44506b7fd + checksum: 10/1a7a3a7fe31eb829737b7101a2faa7d5eabc5cc0690da02fa2b8bcb5f7a3313e7e9c085bc62eda72455c45ce188fe662fcbf69b36ff528fe678481b23300cbde languageName: node linkType: hard @@ -3687,51 +3694,51 @@ __metadata: languageName: node linkType: hard -"@storybook/react-dom-shim@npm:9.0.4": - version: 9.0.4 - resolution: "@storybook/react-dom-shim@npm:9.0.4" +"@storybook/react-dom-shim@npm:9.1.13": + version: 9.1.13 + resolution: "@storybook/react-dom-shim@npm:9.1.13" peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: ^9.0.4 - checksum: 10/740cbb37b2bf5264891ec5806500295d4d5e8aeee1340a3c2fd262baa5188046ac3f1cdbc771ae80958c729adf4a34b4205e1a53e141e38eef7b163c2f636cfe + storybook: ^9.1.13 + checksum: 10/01243edbe9f188822b8de718936ec98460b1930d9a9bb431eb77a92f54cbd146163fd462a08bafde2f4010f2f0475313cf47d7109f6805b3f8cb13f7ce0a3bdd languageName: node linkType: hard -"@storybook/react-webpack5@npm:9.0.4": - version: 9.0.4 - resolution: "@storybook/react-webpack5@npm:9.0.4" +"@storybook/react-webpack5@npm:9.1.13": + version: 9.1.13 + resolution: "@storybook/react-webpack5@npm:9.1.13" dependencies: - "@storybook/builder-webpack5": "npm:9.0.4" - "@storybook/preset-react-webpack": "npm:9.0.4" - "@storybook/react": "npm:9.0.4" + "@storybook/builder-webpack5": "npm:9.1.13" + "@storybook/preset-react-webpack": "npm:9.1.13" + "@storybook/react": "npm:9.1.13" peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: ^9.0.4 + storybook: ^9.1.13 typescript: ">= 4.9.x" peerDependenciesMeta: typescript: optional: true - checksum: 10/0850d5ef0d1156078e9e85d4e101e863a8de755f5c67f212103bbebfcb5110288b0dd6cd6ffabd59b918292b30dc1af68d66966f5205249bd3c3da74965ef88e + checksum: 10/0f56d70766fd57c04dffce9fa95564fa3a24f754c777b0c280bd08ec45296950ebf72e459a3fb64baca8746ea8cd7e7efc56c2fc7309d10fd0950f9f82632d0a languageName: node linkType: hard -"@storybook/react@npm:9.0.4": - version: 9.0.4 - resolution: "@storybook/react@npm:9.0.4" +"@storybook/react@npm:9.1.13": + version: 9.1.13 + resolution: "@storybook/react@npm:9.1.13" dependencies: "@storybook/global": "npm:^5.0.0" - "@storybook/react-dom-shim": "npm:9.0.4" + "@storybook/react-dom-shim": "npm:9.1.13" peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: ^9.0.4 + storybook: ^9.1.13 typescript: ">= 4.9.x" peerDependenciesMeta: typescript: optional: true - checksum: 10/1e31f4059cee3ed51b2fd213a6fcd09973f6d75e87499bd0f3b347f200456f77018eadea4d492f0edc5f46633712dd7c1fec409b196cd144b602dd30ce05767c + checksum: 10/4a407f8a7ae9f3080ebcd74e0282e018aca658c83fb5354c1456c27c0e44f4162503f4c5ca25df4ac3aa42f0494f169aa09bd22cf8aa599821e459f979915269 languageName: node linkType: hard @@ -4003,6 +4010,15 @@ __metadata: languageName: node linkType: hard +"@types/chai@npm:^5.2.2": + version: 5.2.2 + resolution: "@types/chai@npm:5.2.2" + dependencies: + "@types/deep-eql": "npm:*" + checksum: 10/de425e7b02cc1233a93923866e019dffbafa892774813940b780ebb1ac9f8a8c57b7438c78686bf4e5db05cd3fc8a970fedf6b83638543995ecca88ef2060668 + languageName: node + linkType: hard + "@types/cheerio@npm:^0.22.22": version: 0.22.35 resolution: "@types/cheerio@npm:0.22.35" @@ -4049,6 +4065,13 @@ __metadata: languageName: node linkType: hard +"@types/deep-eql@npm:*": + version: 4.0.2 + resolution: "@types/deep-eql@npm:4.0.2" + checksum: 10/249a27b0bb22f6aa28461db56afa21ec044fa0e303221a62dff81831b20c8530502175f1a49060f7099e7be06181078548ac47c668de79ff9880241968d43d0c + languageName: node + linkType: hard + "@types/doctrine@npm:^0.0.9": version: 0.0.9 resolution: "@types/doctrine@npm:0.0.9" @@ -4076,7 +4099,7 @@ __metadata: languageName: node linkType: hard -"@types/estree@npm:*, @types/estree@npm:^1.0.5, @types/estree@npm:^1.0.6": +"@types/estree@npm:*, @types/estree@npm:^1.0.0, @types/estree@npm:^1.0.5, @types/estree@npm:^1.0.6": version: 1.0.8 resolution: "@types/estree@npm:1.0.8" checksum: 10/25a4c16a6752538ffde2826c2cc0c6491d90e69cd6187bef4a006dd2c3c45469f049e643d7e516c515f21484dc3d48fd5c870be158a5beb72f5baf3dc43e4099 @@ -4834,44 +4857,64 @@ __metadata: languageName: node linkType: hard -"@vitest/expect@npm:3.0.9": - version: 3.0.9 - resolution: "@vitest/expect@npm:3.0.9" +"@vitest/expect@npm:3.2.4": + version: 3.2.4 + resolution: "@vitest/expect@npm:3.2.4" dependencies: - "@vitest/spy": "npm:3.0.9" - "@vitest/utils": "npm:3.0.9" + "@types/chai": "npm:^5.2.2" + "@vitest/spy": "npm:3.2.4" + "@vitest/utils": "npm:3.2.4" chai: "npm:^5.2.0" tinyrainbow: "npm:^2.0.0" - checksum: 10/09fc02ae3a639d5db23705a393ef571001f7f1006f7527529ec7807699b739788d5b54b71cb917c56379874b006f2de49933585694927b23c0d50787f96b9e94 + checksum: 10/dc69ce886c13714dfbbff78f2d2cb7eb536017e82301a73c42d573a9e9d2bf91005ac7abd9b977adf0a3bd431209f45a8ac2418029b68b0a377e092607c843ce + languageName: node + linkType: hard + +"@vitest/mocker@npm:3.2.4": + version: 3.2.4 + resolution: "@vitest/mocker@npm:3.2.4" + dependencies: + "@vitest/spy": "npm:3.2.4" + estree-walker: "npm:^3.0.3" + magic-string: "npm:^0.30.17" + peerDependencies: + msw: ^2.4.9 + vite: ^5.0.0 || ^6.0.0 || ^7.0.0-0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + checksum: 10/5e92431b6ed9fc1679060e4caef3e4623f4750542a5d7cd944774f8217c4d231e273202e8aea00bab33260a5a9222ecb7005d80da0348c3c829bd37d123071a8 languageName: node linkType: hard -"@vitest/pretty-format@npm:3.0.9": - version: 3.0.9 - resolution: "@vitest/pretty-format@npm:3.0.9" +"@vitest/pretty-format@npm:3.2.4": + version: 3.2.4 + resolution: "@vitest/pretty-format@npm:3.2.4" dependencies: tinyrainbow: "npm:^2.0.0" - checksum: 10/cfcdda2c72cf16a5e76ad2c9b014a4e36fea3988389613497cad5a2491ebc380ded4397afc95c32a2bd2734b0386996df76f6c5cbfc6be561262b8d112fb7a27 + checksum: 10/8dd30cbf956e01fbab042fe651fb5175d9f0cd00b7b569a46cd98df89c4fec47dab12916201ad6e09a4f25f2a2ec8927a4bfdc61118593097f759c90b18a51d4 languageName: node linkType: hard -"@vitest/spy@npm:3.0.9": - version: 3.0.9 - resolution: "@vitest/spy@npm:3.0.9" +"@vitest/spy@npm:3.2.4": + version: 3.2.4 + resolution: "@vitest/spy@npm:3.2.4" dependencies: - tinyspy: "npm:^3.0.2" - checksum: 10/967b403293c9325292be4843753bf8ae516ec158df2372a14bec98c9bfb233fa6bbf76cb319cf1a9ea1b5ab795e3abff68ca66fa7523045562d7449a95ed8bf9 + tinyspy: "npm:^4.0.3" + checksum: 10/7d38c299f42a8c7e5e41652b203af98ca54e63df69c3b072d0e401d5a57fbbba3e39d8538ac1b3022c26718a6388d0bcc222bc2f07faab75942543b9247c007d languageName: node linkType: hard -"@vitest/utils@npm:3.0.9": - version: 3.0.9 - resolution: "@vitest/utils@npm:3.0.9" +"@vitest/utils@npm:3.2.4": + version: 3.2.4 + resolution: "@vitest/utils@npm:3.2.4" dependencies: - "@vitest/pretty-format": "npm:3.0.9" - loupe: "npm:^3.1.3" + "@vitest/pretty-format": "npm:3.2.4" + loupe: "npm:^3.1.4" tinyrainbow: "npm:^2.0.0" - checksum: 10/c77e2a4a5c62dabc57c0d27536428e6b4f9a7998b59161deb82cf797e1d6cb61a7531bef19f079c4bdca7b48fd656b48e4d1bcfb4a5bdf3c177931670a287163 + checksum: 10/7f12ef63bd8ee13957744d1f336b0405f164ade4358bf9dfa531f75bbb58ffac02bf61aba65724311ddbc50b12ba54853a169e59c6b837c16086173b9a480710 languageName: node linkType: hard @@ -10288,6 +10331,15 @@ __metadata: languageName: node linkType: hard +"estree-walker@npm:^3.0.3": + version: 3.0.3 + resolution: "estree-walker@npm:3.0.3" + dependencies: + "@types/estree": "npm:^1.0.0" + checksum: 10/a65728d5727b71de172c5df323385755a16c0fdab8234dc756c3854cfee343261ddfbb72a809a5660fac8c75d960bb3e21aa898c2d7e9b19bb298482ca58a3af + languageName: node + linkType: hard + "esutils@npm:^2.0.2": version: 2.0.3 resolution: "esutils@npm:2.0.3" @@ -10955,6 +11007,17 @@ __metadata: languageName: node linkType: hard +"find-up@npm:^7.0.0": + version: 7.0.0 + resolution: "find-up@npm:7.0.0" + dependencies: + locate-path: "npm:^7.2.0" + path-exists: "npm:^5.0.0" + unicorn-magic: "npm:^0.1.0" + checksum: 10/7e6b08fbc05a10677e25e74bb0a020054a86b31d1806c5e6a9e32e75472bbf177210bc16e5f97453be8bda7ae2e3d97669dbb2901f8c30b39ce53929cbea6746 + languageName: node + linkType: hard + "flat-cache@npm:^3.0.4": version: 3.2.0 resolution: "flat-cache@npm:3.2.0" @@ -14376,6 +14439,15 @@ __metadata: languageName: node linkType: hard +"locate-path@npm:^7.2.0": + version: 7.2.0 + resolution: "locate-path@npm:7.2.0" + dependencies: + p-locate: "npm:^6.0.0" + checksum: 10/1c6d269d4efec555937081be964e8a9b4a136319c79ca1d45ac6382212a8466113c75bd89e44521ca8ecd1c47fb08523b56eee5c0712bc7d14fec5f729deeb42 + languageName: node + linkType: hard + "lodash-es@npm:^4.2.1": version: 4.17.21 resolution: "lodash-es@npm:4.17.21" @@ -14540,13 +14612,20 @@ __metadata: languageName: node linkType: hard -"loupe@npm:^3.1.0, loupe@npm:^3.1.3": +"loupe@npm:^3.1.0": version: 3.1.4 resolution: "loupe@npm:3.1.4" checksum: 10/06ab1893731f167f2ce71f464a8a68372dc4cb807ecae20f9b844660c93813a298ca76bcd747ba6568b057af725ea63f0034ba3140c8f1d1fbb482d797e593ef languageName: node linkType: hard +"loupe@npm:^3.1.4": + version: 3.2.1 + resolution: "loupe@npm:3.2.1" + checksum: 10/a4d78ec758aaa04e0e35d5cd1c15e970beb9cdbfd3d0f34f98b9bcda489f896a7190b3b6cc40b7a6dcb8e97e82e96eafaae10096aaa469804acdba6f7c2bde5f + languageName: node + linkType: hard + "lower-case@npm:^2.0.2": version: 2.0.2 resolution: "lower-case@npm:2.0.2" @@ -14581,6 +14660,15 @@ __metadata: languageName: node linkType: hard +"magic-string@npm:^0.30.17": + version: 0.30.19 + resolution: "magic-string@npm:0.30.19" + dependencies: + "@jridgewell/sourcemap-codec": "npm:^1.5.5" + checksum: 10/5045467fad59ddfba6ccfb00fde6edbc0f841089f0da07d844cf513c73de289bbbf933bde16168cba2c9ef38d75ac68e1617a5ce74aae16d6f39285bda1d51c4 + languageName: node + linkType: hard + "magic-string@npm:^0.30.5": version: 0.30.17 resolution: "magic-string@npm:0.30.17" @@ -16224,6 +16312,15 @@ __metadata: languageName: node linkType: hard +"p-limit@npm:^4.0.0": + version: 4.0.0 + resolution: "p-limit@npm:4.0.0" + dependencies: + yocto-queue: "npm:^1.0.0" + checksum: 10/01d9d70695187788f984226e16c903475ec6a947ee7b21948d6f597bed788e3112cc7ec2e171c1d37125057a5f45f3da21d8653e04a3a793589e12e9e80e756b + languageName: node + linkType: hard + "p-locate@npm:^2.0.0": version: 2.0.0 resolution: "p-locate@npm:2.0.0" @@ -16260,6 +16357,15 @@ __metadata: languageName: node linkType: hard +"p-locate@npm:^6.0.0": + version: 6.0.0 + resolution: "p-locate@npm:6.0.0" + dependencies: + p-limit: "npm:^4.0.0" + checksum: 10/2bfe5234efa5e7a4e74b30a5479a193fdd9236f8f6b4d2f3f69e3d286d9a7d7ab0c118a2a50142efcf4e41625def635bd9332d6cbf9cc65d85eb0718c579ab38 + languageName: node + linkType: hard + "p-map-series@npm:2.1.0": version: 2.1.0 resolution: "p-map-series@npm:2.1.0" @@ -16611,6 +16717,13 @@ __metadata: languageName: node linkType: hard +"path-exists@npm:^5.0.0": + version: 5.0.0 + resolution: "path-exists@npm:5.0.0" + checksum: 10/8ca842868cab09423994596eb2c5ec2a971c17d1a3cb36dbf060592c730c725cd524b9067d7d2a1e031fef9ba7bd2ac6dc5ec9fb92aa693265f7be3987045254 + languageName: node + linkType: hard + "path-is-absolute@npm:^1.0.0": version: 1.0.1 resolution: "path-is-absolute@npm:1.0.1" @@ -20482,15 +20595,16 @@ __metadata: languageName: node linkType: hard -"storybook@npm:9.0.4": - version: 9.0.4 - resolution: "storybook@npm:9.0.4" +"storybook@npm:9.1.13": + version: 9.1.13 + resolution: "storybook@npm:9.1.13" dependencies: "@storybook/global": "npm:^5.0.0" "@testing-library/jest-dom": "npm:^6.6.3" "@testing-library/user-event": "npm:^14.6.1" - "@vitest/expect": "npm:3.0.9" - "@vitest/spy": "npm:3.0.9" + "@vitest/expect": "npm:3.2.4" + "@vitest/mocker": "npm:3.2.4" + "@vitest/spy": "npm:3.2.4" better-opn: "npm:^3.0.2" esbuild: "npm:^0.18.0 || ^0.19.0 || ^0.20.0 || ^0.21.0 || ^0.22.0 || ^0.23.0 || ^0.24.0 || ^0.25.0" esbuild-register: "npm:^3.5.0" @@ -20504,7 +20618,7 @@ __metadata: optional: true bin: storybook: ./bin/index.cjs - checksum: 10/ba2e6630403f4f81e847cb5d64298657782e76c78d37c153917fd00c48a58677593fd3900567ee10abd079b85e7ca95c7a3c2ab6f000bab0e0621a043c2abfd6 + checksum: 10/fa97a2f73c980e3c13daa22931545a4ddfec85dffac51c557387a46482fcaf348c1ea9721bd9c5104376bd36b56749e6797611d8ae8b865135f5d95d0b481349 languageName: node linkType: hard @@ -21271,10 +21385,10 @@ __metadata: languageName: node linkType: hard -"tinyspy@npm:^3.0.2": - version: 3.0.2 - resolution: "tinyspy@npm:3.0.2" - checksum: 10/5db671b2ff5cd309de650c8c4761ca945459d7204afb1776db9a04fb4efa28a75f08517a8620c01ee32a577748802231ad92f7d5b194dc003ee7f987a2a06337 +"tinyspy@npm:^4.0.3": + version: 4.0.4 + resolution: "tinyspy@npm:4.0.4" + checksum: 10/858a99e3ded2fba8fe7c243099d9e58e926d6525af03d19cdf86c1a9a30398161fb830b4f77890d266bcc1c69df08fa6f4baf29d089385e4cdaa98d7b6296e7c languageName: node linkType: hard @@ -21862,6 +21976,13 @@ __metadata: languageName: node linkType: hard +"unicorn-magic@npm:^0.1.0": + version: 0.1.0 + resolution: "unicorn-magic@npm:0.1.0" + checksum: 10/9b4d0e9809807823dc91d0920a4a4c0cff2de3ebc54ee87ac1ee9bc75eafd609b09d1f14495e0173aef26e01118706196b6ab06a75fe0841028b3983a8af313f + languageName: node + linkType: hard + "union-value@npm:^1.0.0": version: 1.0.1 resolution: "union-value@npm:1.0.1" @@ -23094,6 +23215,13 @@ __metadata: languageName: node linkType: hard +"yocto-queue@npm:^1.0.0": + version: 1.2.1 + resolution: "yocto-queue@npm:1.2.1" + checksum: 10/0843d6c2c0558e5c06e98edf9c17942f25c769e21b519303a5c2adefd5b738c9b2054204dc856ac0cd9d134b1bc27d928ce84fd23c9e2423b7e013d5a6f50577 + languageName: node + linkType: hard + "zip-lib@npm:^0.7.3": version: 0.7.3 resolution: "zip-lib@npm:0.7.3" From e969b1229586a6caf6c862d5bc1d7022fc117db3 Mon Sep 17 00:00:00 2001 From: Brian Dukes Date: Tue, 21 Oct 2025 16:06:00 -0500 Subject: [PATCH 096/199] Bump postcss to 8.5.6 Bump autoprefixer to 10.4.21 Bump cssnano to 7.1.1 Bump postcss-cli to 11.0.1 Bump postcss-import to 16.1.1 --- DNN Platform/Dnn.ClientSide/package.json | 10 +- DNN Platform/Skins/Aperture/package.json | 8 +- yarn.lock | 182 +++++++++++------------ 3 files changed, 100 insertions(+), 100 deletions(-) diff --git a/DNN Platform/Dnn.ClientSide/package.json b/DNN Platform/Dnn.ClientSide/package.json index 5acba36f645..9f892deb22c 100644 --- a/DNN Platform/Dnn.ClientSide/package.json +++ b/DNN Platform/Dnn.ClientSide/package.json @@ -19,16 +19,16 @@ "devDependencies": { "@types/node": "^22.10.7", "@types/postcss-import": "^14.0.3", - "autoprefixer": "^10.4.20", + "autoprefixer": "^10.4.21", "chokidar": "^4.0.3", - "cssnano": "^7.0.6", + "cssnano": "^7.1.1", "esbuild": "^0.25.0", "eslint": "^9.38.0", "modern-normalize": "^3.0.1", - "postcss": "^8.5.1", + "postcss": "^8.5.6", "postcss-banner": "^4.0.1", - "postcss-cli": "^11.0.0", - "postcss-import": "^16.1.0", + "postcss-cli": "^11.0.1", + "postcss-import": "^16.1.1", "sass": "^1.93.2", "tsx": "^4.19.2", "typescript": "^5.7.3" diff --git a/DNN Platform/Skins/Aperture/package.json b/DNN Platform/Skins/Aperture/package.json index 600709fdf68..dac695c4bf1 100644 --- a/DNN Platform/Skins/Aperture/package.json +++ b/DNN Platform/Skins/Aperture/package.json @@ -19,12 +19,12 @@ "@types/postcss-import": "^14.0.3", "browser-sync": "^2.29.3", "chokidar": "^3.6.0", - "cssnano": "^7.0.6", + "cssnano": "^7.1.1", "glob": "^10.3.10", - "postcss": "^8.5.1", + "postcss": "^8.5.6", "postcss-banner": "^4.0.1", - "postcss-cli": "^11.0.0", - "postcss-import": "^16.1.0", + "postcss-cli": "^11.0.1", + "postcss-import": "^16.1.1", "sass": "^1.93.2", "tsx": "^4.19.2", "typescript": "^5.3.2", diff --git a/yarn.lock b/yarn.lock index 059c60b417c..368afe85f35 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3898,13 +3898,6 @@ __metadata: languageName: node linkType: hard -"@trysound/sax@npm:0.2.0": - version: 0.2.0 - resolution: "@trysound/sax@npm:0.2.0" - checksum: 10/7379713eca480ac0d9b6c7b063e06b00a7eac57092354556c81027066eb65b61ea141a69d0cc2e15d32e05b2834d4c9c2184793a5e36bbf5daf05ee5676af18c - languageName: node - linkType: hard - "@tufjs/canonical-json@npm:2.0.0": version: 2.0.0 resolution: "@tufjs/canonical-json@npm:2.0.0" @@ -5510,13 +5503,13 @@ __metadata: "@types/postcss-import": "npm:^14.0.3" browser-sync: "npm:^2.29.3" chokidar: "npm:^3.6.0" - cssnano: "npm:^7.0.6" + cssnano: "npm:^7.1.1" glob: "npm:^10.3.10" normalize.css: "npm:^8.0.1" - postcss: "npm:^8.5.1" + postcss: "npm:^8.5.6" postcss-banner: "npm:^4.0.1" - postcss-cli: "npm:^11.0.0" - postcss-import: "npm:^16.1.0" + postcss-cli: "npm:^11.0.1" + postcss-import: "npm:^16.1.1" sass: "npm:^1.93.2" tsx: "npm:^4.19.2" typescript: "npm:^5.3.2" @@ -5925,7 +5918,7 @@ __metadata: languageName: node linkType: hard -"autoprefixer@npm:^10.4.20": +"autoprefixer@npm:^10.4.21": version: 10.4.21 resolution: "autoprefixer@npm:10.4.21" dependencies: @@ -7821,6 +7814,13 @@ __metadata: languageName: node linkType: hard +"commander@npm:^11.1.0": + version: 11.1.0 + resolution: "commander@npm:11.1.0" + checksum: 10/66bd2d8a0547f6cb1d34022efb25f348e433b0e04ad76a65279b1b09da108f59a4d3001ca539c60a7a46ea38bcf399fc17d91adad76a8cf43845d8dcbaf5cda1 + languageName: node + linkType: hard + "commander@npm:^2.19.0, commander@npm:^2.2.0, commander@npm:^2.20.0": version: 2.20.3 resolution: "commander@npm:2.20.3" @@ -8364,13 +8364,13 @@ __metadata: languageName: node linkType: hard -"css-tree@npm:^2.3.1": - version: 2.3.1 - resolution: "css-tree@npm:2.3.1" +"css-tree@npm:^3.0.1": + version: 3.1.0 + resolution: "css-tree@npm:3.1.0" dependencies: - mdn-data: "npm:2.0.30" + mdn-data: "npm:2.12.2" source-map-js: "npm:^1.0.1" - checksum: 10/e5e39b82eb4767c664fa5c2cd9968c8c7e6b7fd2c0079b52680a28466d851e2826d5e64699c449d933c0e8ca0554beca43c41a9fcb09fb6a46139d462dbdf0df + checksum: 10/e8c5c8e98e3aa4a620fda0b813ce57ccf99281652bf9d23e5cdfc9961c9a93a6769941f9a92e31e65d90f446f42fa83879ab0185206dc7a178d9f656d0913e14 languageName: node linkType: hard @@ -8407,25 +8407,25 @@ __metadata: languageName: node linkType: hard -"cssnano-preset-default@npm:^7.0.7": - version: 7.0.7 - resolution: "cssnano-preset-default@npm:7.0.7" +"cssnano-preset-default@npm:^7.0.9": + version: 7.0.9 + resolution: "cssnano-preset-default@npm:7.0.9" dependencies: - browserslist: "npm:^4.24.5" + browserslist: "npm:^4.25.1" css-declaration-sorter: "npm:^7.2.0" cssnano-utils: "npm:^5.0.1" postcss-calc: "npm:^10.1.1" - postcss-colormin: "npm:^7.0.3" - postcss-convert-values: "npm:^7.0.5" + postcss-colormin: "npm:^7.0.4" + postcss-convert-values: "npm:^7.0.7" postcss-discard-comments: "npm:^7.0.4" postcss-discard-duplicates: "npm:^7.0.2" postcss-discard-empty: "npm:^7.0.1" postcss-discard-overridden: "npm:^7.0.1" postcss-merge-longhand: "npm:^7.0.5" - postcss-merge-rules: "npm:^7.0.5" + postcss-merge-rules: "npm:^7.0.6" postcss-minify-font-values: "npm:^7.0.1" postcss-minify-gradients: "npm:^7.0.1" - postcss-minify-params: "npm:^7.0.3" + postcss-minify-params: "npm:^7.0.4" postcss-minify-selectors: "npm:^7.0.5" postcss-normalize-charset: "npm:^7.0.1" postcss-normalize-display-values: "npm:^7.0.1" @@ -8433,17 +8433,17 @@ __metadata: postcss-normalize-repeat-style: "npm:^7.0.1" postcss-normalize-string: "npm:^7.0.1" postcss-normalize-timing-functions: "npm:^7.0.1" - postcss-normalize-unicode: "npm:^7.0.3" + postcss-normalize-unicode: "npm:^7.0.4" postcss-normalize-url: "npm:^7.0.1" postcss-normalize-whitespace: "npm:^7.0.1" postcss-ordered-values: "npm:^7.0.2" - postcss-reduce-initial: "npm:^7.0.3" + postcss-reduce-initial: "npm:^7.0.4" postcss-reduce-transforms: "npm:^7.0.1" - postcss-svgo: "npm:^7.0.2" + postcss-svgo: "npm:^7.1.0" postcss-unique-selectors: "npm:^7.0.4" peerDependencies: postcss: ^8.4.32 - checksum: 10/1ca9b739531acc2dff66347cc1b6195da0549058b5b00b9d36c3f241535ad67476218f61201cfb15e8b460357ec42414aa53bf78a7f01ee26ac26b7852e6c244 + checksum: 10/521b1c39a84c5fd306bf48da3ea911ab953c767ea2312199cca1595b5dfce74b579852c76d77e6217201eba160858dbbbfc4953a19ad9030b96cdfa3e3ed9578 languageName: node linkType: hard @@ -8456,15 +8456,15 @@ __metadata: languageName: node linkType: hard -"cssnano@npm:^7.0.6": - version: 7.0.7 - resolution: "cssnano@npm:7.0.7" +"cssnano@npm:^7.1.1": + version: 7.1.1 + resolution: "cssnano@npm:7.1.1" dependencies: - cssnano-preset-default: "npm:^7.0.7" + cssnano-preset-default: "npm:^7.0.9" lilconfig: "npm:^3.1.3" peerDependencies: postcss: ^8.4.32 - checksum: 10/c5b3123757834537f818e0f3eb6b20da51a194fefed599632f7ddd600c9e25d38abe38a22582a579660a49368a146c294e2096b2837cbeeda51ddfc85b108601 + checksum: 10/ab4fbc40ecdfb194984ef6e9d928e04070966deb94eef8f02fe69eea22efea4f01036324ee103f9da2193748ac45f79ca9a489618715e4a1e902b77863abd9b1 languageName: node linkType: hard @@ -9075,16 +9075,16 @@ __metadata: dependencies: "@types/node": "npm:^22.10.7" "@types/postcss-import": "npm:^14.0.3" - autoprefixer: "npm:^10.4.20" + autoprefixer: "npm:^10.4.21" chokidar: "npm:^4.0.3" - cssnano: "npm:^7.0.6" + cssnano: "npm:^7.1.1" esbuild: "npm:^0.25.0" eslint: "npm:^9.38.0" modern-normalize: "npm:^3.0.1" - postcss: "npm:^8.5.1" + postcss: "npm:^8.5.6" postcss-banner: "npm:^4.0.1" - postcss-cli: "npm:^11.0.0" - postcss-import: "npm:^16.1.0" + postcss-cli: "npm:^11.0.1" + postcss-import: "npm:^16.1.1" sass: "npm:^1.93.2" tsx: "npm:^4.19.2" typescript: "npm:^5.7.3" @@ -14832,10 +14832,10 @@ __metadata: languageName: node linkType: hard -"mdn-data@npm:2.0.30": - version: 2.0.30 - resolution: "mdn-data@npm:2.0.30" - checksum: 10/e4944322bf3e0461a2daa2aee7e14e208960a036289531e4ef009e53d32bd41528350c070c4a33be867980443fe4c0523518d99318423cffa7c825fe7b1154e2 +"mdn-data@npm:2.12.2": + version: 2.12.2 + resolution: "mdn-data@npm:2.12.2" + checksum: 10/854e41715a9358e69f9a530117cd6ca7e71d06176469de8d70b1e629753b6827f5bd730995c16ad3750f3c9bad92230f8e4e178de2b34926b05f5205d27d76af languageName: node linkType: hard @@ -16932,7 +16932,7 @@ __metadata: languageName: node linkType: hard -"postcss-cli@npm:^11.0.0": +"postcss-cli@npm:^11.0.1": version: 11.0.1 resolution: "postcss-cli@npm:11.0.1" dependencies: @@ -16955,29 +16955,29 @@ __metadata: languageName: node linkType: hard -"postcss-colormin@npm:^7.0.3": - version: 7.0.3 - resolution: "postcss-colormin@npm:7.0.3" +"postcss-colormin@npm:^7.0.4": + version: 7.0.4 + resolution: "postcss-colormin@npm:7.0.4" dependencies: - browserslist: "npm:^4.24.5" + browserslist: "npm:^4.25.1" caniuse-api: "npm:^3.0.0" colord: "npm:^2.9.3" postcss-value-parser: "npm:^4.2.0" peerDependencies: postcss: ^8.4.32 - checksum: 10/b9016d205eaf61a25efb187264a2ce35cb59aa1734b946268abcd747b5796e0d855c081b460ead4042a17c6806e011b57ee543b9e1f6312620f8daf661a7e40c + checksum: 10/6848beeb0bae3ff40ff1bf71cd438aba779422a6934b1ebce2ceecc77eecf10761ccc764b1f553bc62dbd941f2b6f9144942a1a52475ff0d9e4abfca1a860c4e languageName: node linkType: hard -"postcss-convert-values@npm:^7.0.5": - version: 7.0.5 - resolution: "postcss-convert-values@npm:7.0.5" +"postcss-convert-values@npm:^7.0.7": + version: 7.0.7 + resolution: "postcss-convert-values@npm:7.0.7" dependencies: - browserslist: "npm:^4.24.5" + browserslist: "npm:^4.25.1" postcss-value-parser: "npm:^4.2.0" peerDependencies: postcss: ^8.4.32 - checksum: 10/67920f9ba823a6f6aa3b46c3a098c2d4a7a2a32349971cfa6ce986e08e7cbae6badeb23de680d36d1439e7d3f2cdbf26f5ee080a66f2823931c1d3f8146bc2a6 + checksum: 10/bc1f7c62ad5523b23c3d22518499d8ee1a14230737c104845afa775f560a120bdd1ea2cdc2a02343d4805b85be5cbaded15f87b87a12fe71613d69e1a6bc7154 languageName: node linkType: hard @@ -17019,7 +17019,7 @@ __metadata: languageName: node linkType: hard -"postcss-import@npm:^16.1.0": +"postcss-import@npm:^16.1.1": version: 16.1.1 resolution: "postcss-import@npm:16.1.1" dependencies: @@ -17065,17 +17065,17 @@ __metadata: languageName: node linkType: hard -"postcss-merge-rules@npm:^7.0.5": - version: 7.0.5 - resolution: "postcss-merge-rules@npm:7.0.5" +"postcss-merge-rules@npm:^7.0.6": + version: 7.0.6 + resolution: "postcss-merge-rules@npm:7.0.6" dependencies: - browserslist: "npm:^4.24.5" + browserslist: "npm:^4.25.1" caniuse-api: "npm:^3.0.0" cssnano-utils: "npm:^5.0.1" postcss-selector-parser: "npm:^7.1.0" peerDependencies: postcss: ^8.4.32 - checksum: 10/fa490791ea5e907e4498701593252ce33df468a821e5f3acf5f126f73c8262189c13ca7a0c1645ae3d66a46a03cf930048e10d808182a3e9bec78af30a02893a + checksum: 10/809a7caac2d0129a6086a9bde8da3f380d9c520ea1030443ddbeec36c2893c8242c3ed390dbd07f329afa782c59f792c77a1e6bdc8df1511f021d18fe89129b4 languageName: node linkType: hard @@ -17103,16 +17103,16 @@ __metadata: languageName: node linkType: hard -"postcss-minify-params@npm:^7.0.3": - version: 7.0.3 - resolution: "postcss-minify-params@npm:7.0.3" +"postcss-minify-params@npm:^7.0.4": + version: 7.0.4 + resolution: "postcss-minify-params@npm:7.0.4" dependencies: - browserslist: "npm:^4.24.5" + browserslist: "npm:^4.25.1" cssnano-utils: "npm:^5.0.1" postcss-value-parser: "npm:^4.2.0" peerDependencies: postcss: ^8.4.32 - checksum: 10/97de22d6ba0310685d33b530dbfeefa930f7ac48effe623fc8a4a59d2b98bed221d0d2edad4f2e1f4590322240d0e1e94bdb162069c40b5d7ae00c58637c90c9 + checksum: 10/888029becb986f00a5a69618be1b63228948f7734eb6dc2a31a74d93c747984dfc41044f15b09b71cd4a9e15d7fac15ccec14d20199a2631cd37f4244685a47f languageName: node linkType: hard @@ -17236,15 +17236,15 @@ __metadata: languageName: node linkType: hard -"postcss-normalize-unicode@npm:^7.0.3": - version: 7.0.3 - resolution: "postcss-normalize-unicode@npm:7.0.3" +"postcss-normalize-unicode@npm:^7.0.4": + version: 7.0.4 + resolution: "postcss-normalize-unicode@npm:7.0.4" dependencies: - browserslist: "npm:^4.24.5" + browserslist: "npm:^4.25.1" postcss-value-parser: "npm:^4.2.0" peerDependencies: postcss: ^8.4.32 - checksum: 10/fc10205655f77d6467da811fbd26aa607c519cbf162ae2ba40821cf64227233445490881119c820c6988c0943cb2f4dc755abe94cb30637001ca35cce5d07b61 + checksum: 10/bbc67aa0e70ca9f783f871174c358b1d1682a58231dc890babf2261874ea55977417bdd5f11dff41be44421b1820236bfe39b651611ca1b9faad0ff1e9687bed languageName: node linkType: hard @@ -17282,15 +17282,15 @@ __metadata: languageName: node linkType: hard -"postcss-reduce-initial@npm:^7.0.3": - version: 7.0.3 - resolution: "postcss-reduce-initial@npm:7.0.3" +"postcss-reduce-initial@npm:^7.0.4": + version: 7.0.4 + resolution: "postcss-reduce-initial@npm:7.0.4" dependencies: - browserslist: "npm:^4.24.5" + browserslist: "npm:^4.25.1" caniuse-api: "npm:^3.0.0" peerDependencies: postcss: ^8.4.32 - checksum: 10/8fd9ff4b49a2f7e1b7c51b7da637578e32a178363e3e932c80565241454dca306658dacd390ad3d73647d55dace8be8fe29278668afa32fd9d872ee7026bdbf7 + checksum: 10/4652a2e011742683a8bed5729bc6f56bd795d0b72f05f4f97dbf3d7be903f680b63612c41c95f45f13675c7c6a90d7a9633df04c59651a1d5f45966bf057efd8 languageName: node linkType: hard @@ -17337,15 +17337,15 @@ __metadata: languageName: node linkType: hard -"postcss-svgo@npm:^7.0.2": - version: 7.0.2 - resolution: "postcss-svgo@npm:7.0.2" +"postcss-svgo@npm:^7.1.0": + version: 7.1.0 + resolution: "postcss-svgo@npm:7.1.0" dependencies: postcss-value-parser: "npm:^4.2.0" - svgo: "npm:^3.3.2" + svgo: "npm:^4.0.0" peerDependencies: postcss: ^8.4.32 - checksum: 10/8615877dffbac2bb2b971fb0e8c882ebff479c2529a0fc20937d09623fcaf35a2d934c4046188bae2534729aba1de5a1ba227630aaf96a800b6f2acdbfbf1d32 + checksum: 10/ef067e83ff52562d2c9ba46f767012e0bdb3438bf051b092a739ff849f6df06a22d9ee87e4d9e0edb5ab82340155547550f57da21b71ac86c13513fb4f44daf8 languageName: node linkType: hard @@ -17367,7 +17367,7 @@ __metadata: languageName: node linkType: hard -"postcss@npm:^8.0.0, postcss@npm:^8.2.2, postcss@npm:^8.4.33, postcss@npm:^8.5.1": +"postcss@npm:^8.0.0, postcss@npm:^8.2.2, postcss@npm:^8.4.33, postcss@npm:^8.5.6": version: 8.5.6 resolution: "postcss@npm:8.5.6" dependencies: @@ -19425,7 +19425,7 @@ __metadata: languageName: node linkType: hard -"sax@npm:^1.2.4": +"sax@npm:^1.2.4, sax@npm:^1.4.1": version: 1.4.1 resolution: "sax@npm:1.4.1" checksum: 10/b1c784b545019187b53a0c28edb4f6314951c971e2963a69739c6ce222bfbc767e54d320e689352daba79b7d5e06d22b5d7113b99336219d6e93718e2f99d335 @@ -20986,20 +20986,20 @@ __metadata: languageName: node linkType: hard -"svgo@npm:^3.3.2": - version: 3.3.2 - resolution: "svgo@npm:3.3.2" +"svgo@npm:^4.0.0": + version: 4.0.0 + resolution: "svgo@npm:4.0.0" dependencies: - "@trysound/sax": "npm:0.2.0" - commander: "npm:^7.2.0" + commander: "npm:^11.1.0" css-select: "npm:^5.1.0" - css-tree: "npm:^2.3.1" + css-tree: "npm:^3.0.1" css-what: "npm:^6.1.0" csso: "npm:^5.0.5" - picocolors: "npm:^1.0.0" + picocolors: "npm:^1.1.1" + sax: "npm:^1.4.1" bin: - svgo: ./bin/svgo - checksum: 10/82fdea9b938884d808506104228e4d3af0050d643d5b46ff7abc903ff47a91bbf6561373394868aaf07a28f006c4057b8fbf14bbd666298abdd7cc590d4f7700 + svgo: ./bin/svgo.js + checksum: 10/1b49fc523284a0c6d8e277a7299dd657a7ec18e4e2bd0b9003f33d47fc962348604b37d4951d91f1bce1e15579eacd89e117b787caec226d76cf8ca97f7972d1 languageName: node linkType: hard From aa83c41801f46e39b8dfdf698ec6fc088bd23aa3 Mon Sep 17 00:00:00 2001 From: Brian Dukes Date: Tue, 21 Oct 2025 16:08:02 -0500 Subject: [PATCH 097/199] Bump browser-sync to 3.0.4 --- DNN Platform/Skins/Aperture/package.json | 4 +- yarn.lock | 188 ++++++----------------- 2 files changed, 46 insertions(+), 146 deletions(-) diff --git a/DNN Platform/Skins/Aperture/package.json b/DNN Platform/Skins/Aperture/package.json index dac695c4bf1..093ce7edf6a 100644 --- a/DNN Platform/Skins/Aperture/package.json +++ b/DNN Platform/Skins/Aperture/package.json @@ -14,10 +14,10 @@ "normalize.css": "^8.0.1" }, "devDependencies": { - "@types/browser-sync": "^2.27.5", + "@types/browser-sync": "^2.29.0", "@types/node": "^20.10.5", "@types/postcss-import": "^14.0.3", - "browser-sync": "^2.29.3", + "browser-sync": "^3.0.4", "chokidar": "^3.6.0", "cssnano": "^7.1.1", "glob": "^10.3.10", diff --git a/yarn.lock b/yarn.lock index 368afe85f35..ddec9385db9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3991,7 +3991,7 @@ __metadata: languageName: node linkType: hard -"@types/browser-sync@npm:^2.27.5": +"@types/browser-sync@npm:^2.29.0": version: 2.29.0 resolution: "@types/browser-sync@npm:2.29.0" dependencies: @@ -5498,10 +5498,10 @@ __metadata: version: 0.0.0-use.local resolution: "aperture@workspace:DNN Platform/Skins/Aperture" dependencies: - "@types/browser-sync": "npm:^2.27.5" + "@types/browser-sync": "npm:^2.29.0" "@types/node": "npm:^20.10.5" "@types/postcss-import": "npm:^14.0.3" - browser-sync: "npm:^2.29.3" + browser-sync: "npm:^3.0.4" chokidar: "npm:^3.6.0" cssnano: "npm:^7.1.1" glob: "npm:^10.3.10" @@ -5945,15 +5945,6 @@ __metadata: languageName: node linkType: hard -"axios@npm:0.21.4": - version: 0.21.4 - resolution: "axios@npm:0.21.4" - dependencies: - follow-redirects: "npm:^1.14.0" - checksum: 10/da644592cb6f8f9f8c64fdabd7e1396d6769d7a4c1ea5f8ae8beb5c2eb90a823e3a574352b0b934ac62edc762c0f52647753dc54f7d07279127a7e5c4cd20272 - languageName: node - linkType: hard - "axios@npm:^1.8.3": version: 1.10.0 resolution: "axios@npm:1.10.0" @@ -7005,20 +6996,20 @@ __metadata: languageName: node linkType: hard -"browser-sync-client@npm:^2.29.3": - version: 2.29.3 - resolution: "browser-sync-client@npm:2.29.3" +"browser-sync-client@npm:^3.0.4": + version: 3.0.4 + resolution: "browser-sync-client@npm:3.0.4" dependencies: etag: "npm:1.8.1" fresh: "npm:0.5.2" mitt: "npm:^1.1.3" - checksum: 10/ebf892320da5bc5556dfe276a3f18162c60fe11d8cc16834bdb1be4dfb7a3c153a9d8554c92645c78b3653d2e5b0a013f7b04f1ab5ac0f8d03f81a65995edea2 + checksum: 10/4dd371aa7deb99833aeea2663ed5a5107b1a759164c867e4fa33229a005e46bc67aff2b50eb249b17c5256cf324e695c52cfd39cb31c06a08593098906ee4dd3 languageName: node linkType: hard -"browser-sync-ui@npm:^2.29.3": - version: 2.29.3 - resolution: "browser-sync-ui@npm:2.29.3" +"browser-sync-ui@npm:^3.0.4": + version: 3.0.4 + resolution: "browser-sync-ui@npm:3.0.4" dependencies: async-each-series: "npm:0.1.1" chalk: "npm:4.1.2" @@ -7027,16 +7018,16 @@ __metadata: server-destroy: "npm:1.0.1" socket.io-client: "npm:^4.4.1" stream-throttle: "npm:^0.1.3" - checksum: 10/2ab77b68676163465621ee534f8720101cda32e1fc41d4b89ee0371099a09572abbeb1c30d4605e239d1467805d72c6f9c23d3ada92a06ae3e57a6b999fdca14 + checksum: 10/4cdfb5dc4ea099f34ac7f4e926f4de511e3e4f9c97ddd0c994dffb8a1dfed0287d141f616c7f398d1102869350ac4c3ad6bafdefed2fd286ec2c81ca68b046cf languageName: node linkType: hard -"browser-sync@npm:^2.29.3": - version: 2.29.3 - resolution: "browser-sync@npm:2.29.3" +"browser-sync@npm:^3.0.4": + version: 3.0.4 + resolution: "browser-sync@npm:3.0.4" dependencies: - browser-sync-client: "npm:^2.29.3" - browser-sync-ui: "npm:^2.29.3" + browser-sync-client: "npm:^3.0.4" + browser-sync-ui: "npm:^3.0.4" bs-recipes: "npm:1.3.4" chalk: "npm:4.1.2" chokidar: "npm:^3.5.1" @@ -7044,29 +7035,28 @@ __metadata: connect-history-api-fallback: "npm:^1" dev-ip: "npm:^1.0.1" easy-extender: "npm:^2.3.4" - eazy-logger: "npm:^4.0.1" + eazy-logger: "npm:^4.1.0" etag: "npm:^1.8.1" fresh: "npm:^0.5.2" fs-extra: "npm:3.0.1" http-proxy: "npm:^1.18.1" immutable: "npm:^3" - localtunnel: "npm:^2.0.1" - micromatch: "npm:^4.0.2" + micromatch: "npm:^4.0.8" opn: "npm:5.3.0" portscanner: "npm:2.2.0" raw-body: "npm:^2.3.2" resp-modifier: "npm:6.0.2" rx: "npm:4.1.0" - send: "npm:0.16.2" - serve-index: "npm:1.9.1" - serve-static: "npm:1.13.2" + send: "npm:^0.19.0" + serve-index: "npm:^1.9.1" + serve-static: "npm:^1.16.2" server-destroy: "npm:1.0.1" socket.io: "npm:^4.4.1" ua-parser-js: "npm:^1.0.33" yargs: "npm:^17.3.1" bin: browser-sync: dist/bin.js - checksum: 10/4afaa3b758ad7775bfc009e702e65fe1eda7a1ee8b8170dfce3bb69fbe30f8db9b3601ca1a6c2cd4694f8724b885ef8f06f0aaedc7789c550b8ce5ed19c356db + checksum: 10/405c40ba84f9d0865b8ea0d8b6efe42b06dc938cc88721625d0a3081c9ff3f5edc51f07f43952e3a9fa9c641be46b0994eaf4c51ebddbaf041b8c583d20c6124 languageName: node linkType: hard @@ -8609,18 +8599,6 @@ __metadata: languageName: node linkType: hard -"debug@npm:4.3.2": - version: 4.3.2 - resolution: "debug@npm:4.3.2" - dependencies: - ms: "npm:2.1.2" - peerDependenciesMeta: - supports-color: - optional: true - checksum: 10/6a2980374e16f1bd2be7a19adb4ebaae76bdb059b7c35e5f2a94c638a858518193c7be51991f87bc38e544acd4067bb6852ac8e8d02be5105a01601eb3f92f2a - languageName: node - linkType: hard - "debug@npm:^3.2.7": version: 3.2.7 resolution: "debug@npm:3.2.7" @@ -8852,13 +8830,6 @@ __metadata: languageName: node linkType: hard -"destroy@npm:~1.0.4": - version: 1.0.4 - resolution: "destroy@npm:1.0.4" - checksum: 10/da9ab4961dc61677c709da0c25ef01733042614453924d65636a7db37308fef8a24cd1e07172e61173d471ca175371295fbc984b0af5b2b4ff47cd57bd784c03 - languageName: node - linkType: hard - "detect-indent@npm:^5.0.0": version: 5.0.0 resolution: "detect-indent@npm:5.0.0" @@ -9331,7 +9302,7 @@ __metadata: languageName: node linkType: hard -"eazy-logger@npm:^4.0.1": +"eazy-logger@npm:^4.1.0": version: 4.1.0 resolution: "eazy-logger@npm:4.1.0" dependencies: @@ -11065,7 +11036,7 @@ __metadata: languageName: node linkType: hard -"follow-redirects@npm:^1.0.0, follow-redirects@npm:^1.14.0, follow-redirects@npm:^1.15.6": +"follow-redirects@npm:^1.0.0, follow-redirects@npm:^1.15.6": version: 1.15.9 resolution: "follow-redirects@npm:1.15.9" peerDependenciesMeta: @@ -14387,20 +14358,6 @@ __metadata: languageName: node linkType: hard -"localtunnel@npm:^2.0.1": - version: 2.0.2 - resolution: "localtunnel@npm:2.0.2" - dependencies: - axios: "npm:0.21.4" - debug: "npm:4.3.2" - openurl: "npm:1.1.1" - yargs: "npm:17.1.1" - bin: - lt: bin/lt.js - checksum: 10/dfceeb457724283a51dd1c7d6b7636e9bab032a5a1545cb695c90a2ef5e561b10e926479984a8da493a71ad005faf52d7728fba6a1fe33fd997a744fb5fea6bb - languageName: node - linkType: hard - "locate-path@npm:^2.0.0": version: 2.0.0 resolution: "locate-path@npm:2.0.0" @@ -14992,15 +14949,6 @@ __metadata: languageName: node linkType: hard -"mime@npm:1.4.1": - version: 1.4.1 - resolution: "mime@npm:1.4.1" - bin: - mime: cli.js - checksum: 10/94eccd9d1a849a99aee8cca6a684db13cd35475a3938b766e43c6846a0ecfc7052ca31786a2038aa851c0061fce907794630595e7871c6df3e6a99885282f502 - languageName: node - linkType: hard - "mime@npm:1.6.0, mime@npm:^1.4.1": version: 1.6.0 resolution: "mime@npm:1.6.0" @@ -15359,13 +15307,6 @@ __metadata: languageName: node linkType: hard -"ms@npm:2.1.2": - version: 2.1.2 - resolution: "ms@npm:2.1.2" - checksum: 10/673cdb2c3133eb050c745908d8ce632ed2c02d85640e2edb3ace856a2266a813b30c613569bf3354fdf4ea7d1a1494add3bfa95e2713baa27d0c2c71fc44f58f - languageName: node - linkType: hard - "ms@npm:2.1.3, ms@npm:^2.1.1, ms@npm:^2.1.3": version: 2.1.3 resolution: "ms@npm:2.1.3" @@ -16197,13 +16138,6 @@ __metadata: languageName: node linkType: hard -"openurl@npm:1.1.1": - version: 1.1.1 - resolution: "openurl@npm:1.1.1" - checksum: 10/c90f2f065bc5950f1402aff67a3ce4b5fb0e4475cb07b5ff84247686f7436fbc5bc2d0e38bda4ebc9cf8aea866788424e07f25a68f7e97502d412527964351a9 - languageName: node - linkType: hard - "opn@npm:5.3.0": version: 5.3.0 resolution: "opn@npm:5.3.0" @@ -17782,7 +17716,7 @@ __metadata: languageName: node linkType: hard -"range-parser@npm:^1.2.1, range-parser@npm:~1.2.0, range-parser@npm:~1.2.1": +"range-parser@npm:^1.2.1, range-parser@npm:~1.2.1": version: 1.2.1 resolution: "range-parser@npm:1.2.1" checksum: 10/ce21ef2a2dd40506893157970dc76e835c78cf56437e26e19189c48d5291e7279314477b06ac38abd6a401b661a6840f7b03bd0b1249da9b691deeaa15872c26 @@ -19613,35 +19547,35 @@ __metadata: languageName: node linkType: hard -"send@npm:0.16.2": - version: 0.16.2 - resolution: "send@npm:0.16.2" +"send@npm:0.19.0": + version: 0.19.0 + resolution: "send@npm:0.19.0" dependencies: debug: "npm:2.6.9" - depd: "npm:~1.1.2" - destroy: "npm:~1.0.4" + depd: "npm:2.0.0" + destroy: "npm:1.2.0" encodeurl: "npm:~1.0.2" escape-html: "npm:~1.0.3" etag: "npm:~1.8.1" fresh: "npm:0.5.2" - http-errors: "npm:~1.6.2" - mime: "npm:1.4.1" - ms: "npm:2.0.0" - on-finished: "npm:~2.3.0" - range-parser: "npm:~1.2.0" - statuses: "npm:~1.4.0" - checksum: 10/32e40d382811547acb66dcc56ac22651bd3c800d52835fc01b74f4e37886b3230b0ba18b5c9d643322bc7587f8893d37ad5ebc514a34bf54b185969a054a6227 + http-errors: "npm:2.0.0" + mime: "npm:1.6.0" + ms: "npm:2.1.3" + on-finished: "npm:2.4.1" + range-parser: "npm:~1.2.1" + statuses: "npm:2.0.1" + checksum: 10/1f6064dea0ae4cbe4878437aedc9270c33f2a6650a77b56a16b62d057527f2766d96ee282997dd53ec0339082f2aad935bc7d989b46b48c82fc610800dc3a1d0 languageName: node linkType: hard -"send@npm:0.19.0": - version: 0.19.0 - resolution: "send@npm:0.19.0" +"send@npm:^0.19.0": + version: 0.19.1 + resolution: "send@npm:0.19.1" dependencies: debug: "npm:2.6.9" depd: "npm:2.0.0" destroy: "npm:1.2.0" - encodeurl: "npm:~1.0.2" + encodeurl: "npm:~2.0.0" escape-html: "npm:~1.0.3" etag: "npm:~1.8.1" fresh: "npm:0.5.2" @@ -19651,7 +19585,7 @@ __metadata: on-finished: "npm:2.4.1" range-parser: "npm:~1.2.1" statuses: "npm:2.0.1" - checksum: 10/1f6064dea0ae4cbe4878437aedc9270c33f2a6650a77b56a16b62d057527f2766d96ee282997dd53ec0339082f2aad935bc7d989b46b48c82fc610800dc3a1d0 + checksum: 10/360bf50a839c7bbc181f67c3a0f3424a7ad8016dfebcd9eb90891f4b762b4377da14414c32250d67b53872e884171c27469110626f6c22765caa7c38c207ee1d languageName: node linkType: hard @@ -19712,7 +19646,7 @@ __metadata: languageName: node linkType: hard -"serve-index@npm:1.9.1, serve-index@npm:^1.9.1": +"serve-index@npm:^1.9.1": version: 1.9.1 resolution: "serve-index@npm:1.9.1" dependencies: @@ -19727,19 +19661,7 @@ __metadata: languageName: node linkType: hard -"serve-static@npm:1.13.2": - version: 1.13.2 - resolution: "serve-static@npm:1.13.2" - dependencies: - encodeurl: "npm:~1.0.2" - escape-html: "npm:~1.0.3" - parseurl: "npm:~1.3.2" - send: "npm:0.16.2" - checksum: 10/9e8bafc227a02c5d53c744e748042054f4568b707e4ea6b55b44ba98c5d47357324a2969a7391388df4c6b0854d174ce3bade44aa47b9ca234b1bf675091426a - languageName: node - linkType: hard - -"serve-static@npm:1.16.2": +"serve-static@npm:1.16.2, serve-static@npm:^1.16.2": version: 1.16.2 resolution: "serve-static@npm:1.16.2" dependencies: @@ -20578,13 +20500,6 @@ __metadata: languageName: node linkType: hard -"statuses@npm:~1.4.0": - version: 1.4.0 - resolution: "statuses@npm:1.4.0" - checksum: 10/a9e7fbd3bc4859643e183101ed074c877fb70fb2d32379320713e78106360ef0d41d31598e1345390cf4a003d108edecb9607eb466bfbc31ec808c13a527434f - languageName: node - linkType: hard - "stop-iteration-iterator@npm:^1.1.0": version: 1.1.0 resolution: "stop-iteration-iterator@npm:1.1.0" @@ -23144,21 +23059,6 @@ __metadata: languageName: node linkType: hard -"yargs@npm:17.1.1": - version: 17.1.1 - resolution: "yargs@npm:17.1.1" - dependencies: - cliui: "npm:^7.0.2" - escalade: "npm:^3.1.1" - get-caller-file: "npm:^2.0.5" - require-directory: "npm:^2.1.1" - string-width: "npm:^4.2.0" - y18n: "npm:^5.0.5" - yargs-parser: "npm:^20.2.2" - checksum: 10/159a3dfa2a792acaf4970fbc00158e305887de3f666bda337b8bc71abb91a98d9439a1ec6fc9dbae1c33d3f861bea720f69b4c722ff5752010dd995654933889 - languageName: node - linkType: hard - "yargs@npm:17.7.2, yargs@npm:^17.0.0, yargs@npm:^17.3.1, yargs@npm:^17.6.2": version: 17.7.2 resolution: "yargs@npm:17.7.2" From b1f01753eee2f6b1007e76f47c6388ad78d87c3e Mon Sep 17 00:00:00 2001 From: Brian Dukes Date: Tue, 21 Oct 2025 16:08:36 -0500 Subject: [PATCH 098/199] Bump @types/knockout to 3.4.77 --- Dnn.AdminExperience/ClientSide/Pages.Web/package.json | 2 +- yarn.lock | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Dnn.AdminExperience/ClientSide/Pages.Web/package.json b/Dnn.AdminExperience/ClientSide/Pages.Web/package.json index f583c490589..2e79ef678d0 100644 --- a/Dnn.AdminExperience/ClientSide/Pages.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Pages.Web/package.json @@ -24,7 +24,7 @@ "@babel/preset-env": "^7.28.3", "@babel/preset-react": "^7.27.1", "@dnnsoftware/dnn-react-common": "10.1.0", - "@types/knockout": "^3.4.72", + "@types/knockout": "^3.4.77", "@types/redux": "3.6.31", "babel-eslint": "^10.1.0", "babel-jest": "^30.2.0", diff --git a/yarn.lock b/yarn.lock index ddec9385db9..2b80f22d10b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4237,7 +4237,7 @@ __metadata: languageName: node linkType: hard -"@types/knockout@npm:^3.4.72": +"@types/knockout@npm:^3.4.77": version: 3.4.77 resolution: "@types/knockout@npm:3.4.77" checksum: 10/0b3ec7d0151ac5dbd4ecaf6579f46c341a3a08b6a92c90acad7a82fdff6962179fd1680640a8aa571d95076e5259c2ef1732bd3314cd6277afd8ae619b6d8dfe @@ -16433,7 +16433,7 @@ __metadata: "@babel/preset-env": "npm:^7.28.3" "@babel/preset-react": "npm:^7.27.1" "@dnnsoftware/dnn-react-common": "npm:10.1.0" - "@types/knockout": "npm:^3.4.72" + "@types/knockout": "npm:^3.4.77" "@types/redux": "npm:3.6.31" babel-eslint: "npm:^10.1.0" babel-jest: "npm:^30.2.0" From 458e830ee6e5edcc46db16a8c638f056895fdeb6 Mon Sep 17 00:00:00 2001 From: Brian Dukes Date: Tue, 21 Oct 2025 16:09:37 -0500 Subject: [PATCH 099/199] Bump @types/node to 24.9.0 --- DNN Platform/Dnn.ClientSide/package.json | 2 +- .../ResourceManager.Web/package.json | 2 +- DNN Platform/Skins/Aperture/package.json | 2 +- .../ClientSide/Styles.Web/package.json | 2 +- yarn.lock | 35 +++++++------------ 5 files changed, 17 insertions(+), 26 deletions(-) diff --git a/DNN Platform/Dnn.ClientSide/package.json b/DNN Platform/Dnn.ClientSide/package.json index 9f892deb22c..66824d519be 100644 --- a/DNN Platform/Dnn.ClientSide/package.json +++ b/DNN Platform/Dnn.ClientSide/package.json @@ -17,7 +17,7 @@ "not dead" ], "devDependencies": { - "@types/node": "^22.10.7", + "@types/node": "^24.9.0", "@types/postcss-import": "^14.0.3", "autoprefixer": "^10.4.21", "chokidar": "^4.0.3", diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/package.json b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/package.json index 31cd5600196..d02ad03bb42 100644 --- a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/package.json +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/package.json @@ -36,7 +36,7 @@ "@stencil/eslint-plugin": "^1.1.0", "@stencil/sass": "^3.2.2", "@stencil/store": "^2.2.0", - "@types/node": "^22.9.0", + "@types/node": "^24.9.0", "@typescript-eslint/utils": "^8.46.2", "eslint": "^9.38.0", "jiti": "^2.4.2", diff --git a/DNN Platform/Skins/Aperture/package.json b/DNN Platform/Skins/Aperture/package.json index 093ce7edf6a..619ad341b85 100644 --- a/DNN Platform/Skins/Aperture/package.json +++ b/DNN Platform/Skins/Aperture/package.json @@ -15,7 +15,7 @@ }, "devDependencies": { "@types/browser-sync": "^2.29.0", - "@types/node": "^20.10.5", + "@types/node": "^24.9.0", "@types/postcss-import": "^14.0.3", "browser-sync": "^3.0.4", "chokidar": "^3.6.0", diff --git a/Dnn.AdminExperience/ClientSide/Styles.Web/package.json b/Dnn.AdminExperience/ClientSide/Styles.Web/package.json index b413c3ec7a5..e20c1fa02d9 100644 --- a/Dnn.AdminExperience/ClientSide/Styles.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Styles.Web/package.json @@ -33,7 +33,7 @@ "@dnncommunity/dnn-elements": "^0.27.7", "@stencil/eslint-plugin": "^1.1.0", "@stencil/sass": "^3.2.2", - "@types/node": "^22.9.0", + "@types/node": "^24.9.0", "@typescript-eslint/eslint-plugin": "^8.46.2", "@typescript-eslint/parser": "^8.46.2", "eslint": "^9.38.0", diff --git a/yarn.lock b/yarn.lock index 2b80f22d10b..e3d51b383fa 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4322,21 +4322,12 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:^20.10.5": - version: 20.19.5 - resolution: "@types/node@npm:20.19.5" +"@types/node@npm:^24.9.0": + version: 24.9.0 + resolution: "@types/node@npm:24.9.0" dependencies: - undici-types: "npm:~6.21.0" - checksum: 10/bab9631d097694b4147dd555ce241547d1de1d5dbc1e0550646da5db9123ba0a2572617fcd1c79270950fcf3443c92da8ea3adc1545b25b36ae7172b7bb5a2c0 - languageName: node - linkType: hard - -"@types/node@npm:^22.10.7, @types/node@npm:^22.9.0": - version: 22.16.1 - resolution: "@types/node@npm:22.16.1" - dependencies: - undici-types: "npm:~6.21.0" - checksum: 10/830f684e8d20e421923c32d2832f42814dc91c1aa5db6a2d72beea29d5c96032fd28b19eed1b4bc8a95387ee845a81f9c7afc16be1600ce354083f25020f22eb + undici-types: "npm:~7.16.0" + checksum: 10/485bb1c2bb713e34935b47d41ecbdb02af8454ad72b013275992d09be885729a65c78733f054534ef9104df24c4cca2eb3a6c3082eae3c6c7ae078a643cacf9d languageName: node linkType: hard @@ -5499,7 +5490,7 @@ __metadata: resolution: "aperture@workspace:DNN Platform/Skins/Aperture" dependencies: "@types/browser-sync": "npm:^2.29.0" - "@types/node": "npm:^20.10.5" + "@types/node": "npm:^24.9.0" "@types/postcss-import": "npm:^14.0.3" browser-sync: "npm:^3.0.4" chokidar: "npm:^3.6.0" @@ -8917,7 +8908,7 @@ __metadata: "@stencil/eslint-plugin": "npm:^1.1.0" "@stencil/sass": "npm:^3.2.2" "@stencil/store": "npm:^2.2.0" - "@types/node": "npm:^22.9.0" + "@types/node": "npm:^24.9.0" "@typescript-eslint/utils": "npm:^8.46.2" eslint: "npm:^9.38.0" jiti: "npm:^2.4.2" @@ -9044,7 +9035,7 @@ __metadata: version: 0.0.0-use.local resolution: "dnn.clientside@workspace:DNN Platform/Dnn.ClientSide" dependencies: - "@types/node": "npm:^22.10.7" + "@types/node": "npm:^24.9.0" "@types/postcss-import": "npm:^14.0.3" autoprefixer: "npm:^10.4.21" chokidar: "npm:^4.0.3" @@ -20839,7 +20830,7 @@ __metadata: "@stencil/core": "npm:^4.38.2" "@stencil/eslint-plugin": "npm:^1.1.0" "@stencil/sass": "npm:^3.2.2" - "@types/node": "npm:^22.9.0" + "@types/node": "npm:^24.9.0" "@typescript-eslint/eslint-plugin": "npm:^8.46.2" "@typescript-eslint/parser": "npm:^8.46.2" eslint: "npm:^9.38.0" @@ -21832,10 +21823,10 @@ __metadata: languageName: node linkType: hard -"undici-types@npm:~6.21.0": - version: 6.21.0 - resolution: "undici-types@npm:6.21.0" - checksum: 10/ec8f41aa4359d50f9b59fa61fe3efce3477cc681908c8f84354d8567bb3701fafdddf36ef6bff307024d3feb42c837cf6f670314ba37fc8145e219560e473d14 +"undici-types@npm:~7.16.0": + version: 7.16.0 + resolution: "undici-types@npm:7.16.0" + checksum: 10/db43439f69c2d94cc29f75cbfe9de86df87061d6b0c577ebe9bb3255f49b22c50162a7d7eb413b0458b6510b8ca299ac7cff38c3a29fbd31af9f504bcf7fbc0d languageName: node linkType: hard From 2ff820dd6ec6688269353f18442117bf3d801fba Mon Sep 17 00:00:00 2001 From: Brian Dukes Date: Tue, 21 Oct 2025 16:27:27 -0500 Subject: [PATCH 100/199] Bump array.prototype.findindex to 2.2.4 --- Dnn.AdminExperience/ClientSide/Roles.Web/package.json | 2 +- yarn.lock | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Dnn.AdminExperience/ClientSide/Roles.Web/package.json b/Dnn.AdminExperience/ClientSide/Roles.Web/package.json index 82dec7852b6..a2961109732 100644 --- a/Dnn.AdminExperience/ClientSide/Roles.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Roles.Web/package.json @@ -15,7 +15,7 @@ "@babel/preset-react": "^7.27.1", "@dnnsoftware/dnn-react-common": "10.1.0", "array.prototype.find": "^2.2.3", - "array.prototype.findindex": "^2.2.1", + "array.prototype.findindex": "^2.2.4", "babel-loader": "^10.0.0", "babel-plugin-transform-object-assign": "6.22.0", "babel-plugin-transform-object-rest-spread": "6.26.0", diff --git a/yarn.lock b/yarn.lock index e3d51b383fa..1316449ca77 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5717,7 +5717,7 @@ __metadata: languageName: node linkType: hard -"array.prototype.findindex@npm:2.2.4, array.prototype.findindex@npm:^2.2.1": +"array.prototype.findindex@npm:2.2.4, array.prototype.findindex@npm:^2.2.4": version: 2.2.4 resolution: "array.prototype.findindex@npm:2.2.4" dependencies: @@ -18968,7 +18968,7 @@ __metadata: "@babel/preset-react": "npm:^7.27.1" "@dnnsoftware/dnn-react-common": "npm:10.1.0" array.prototype.find: "npm:^2.2.3" - array.prototype.findindex: "npm:^2.2.1" + array.prototype.findindex: "npm:^2.2.4" babel-loader: "npm:^10.0.0" babel-plugin-transform-object-assign: "npm:6.22.0" babel-plugin-transform-object-rest-spread: "npm:6.26.0" From be700d4314dca4afc231c4fe9b7d94740af698f4 Mon Sep 17 00:00:00 2001 From: Brian Dukes Date: Tue, 21 Oct 2025 16:34:46 -0500 Subject: [PATCH 101/199] Bump chokidar to 4.0.3 --- DNN Platform/Skins/Aperture/build.ts | 4 +--- DNN Platform/Skins/Aperture/package.json | 2 +- yarn.lock | 2 +- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/DNN Platform/Skins/Aperture/build.ts b/DNN Platform/Skins/Aperture/build.ts index c2cfaf88456..84c31b7c47a 100644 --- a/DNN Platform/Skins/Aperture/build.ts +++ b/DNN Platform/Skins/Aperture/build.ts @@ -179,9 +179,7 @@ async function buildAll(firstRun = true): Promise { /** Watch for changes (optional) */ function watchFiles(): void { const watcher = chokidar.watch([ - "*.ascx", - "*.txt", - "*.png", + ...globSync(['*.ascx', '*.txt', '*.png']), "./src", "./containers", "./menus", diff --git a/DNN Platform/Skins/Aperture/package.json b/DNN Platform/Skins/Aperture/package.json index 619ad341b85..af56b0e61cd 100644 --- a/DNN Platform/Skins/Aperture/package.json +++ b/DNN Platform/Skins/Aperture/package.json @@ -18,7 +18,7 @@ "@types/node": "^24.9.0", "@types/postcss-import": "^14.0.3", "browser-sync": "^3.0.4", - "chokidar": "^3.6.0", + "chokidar": "^4.0.3", "cssnano": "^7.1.1", "glob": "^10.3.10", "postcss": "^8.5.6", diff --git a/yarn.lock b/yarn.lock index 1316449ca77..eb15f2b1815 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5493,7 +5493,7 @@ __metadata: "@types/node": "npm:^24.9.0" "@types/postcss-import": "npm:^14.0.3" browser-sync: "npm:^3.0.4" - chokidar: "npm:^3.6.0" + chokidar: "npm:^4.0.3" cssnano: "npm:^7.1.1" glob: "npm:^10.3.10" normalize.css: "npm:^8.0.1" From f803f77a89b44d6207957238abc034e6412a7986 Mon Sep 17 00:00:00 2001 From: Brian Dukes Date: Tue, 21 Oct 2025 16:45:34 -0500 Subject: [PATCH 102/199] Remove unused cpy-cli package --- .../ClientSide/Dnn.React.Common/package.json | 209 ++-- yarn.lock | 997 +----------------- 2 files changed, 128 insertions(+), 1078 deletions(-) diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/package.json b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/package.json index 31baa34c598..76855d0eed5 100644 --- a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/package.json +++ b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/package.json @@ -1,105 +1,104 @@ -{ - "name": "@dnnsoftware/dnn-react-common", - "version": "10.1.0", - "description": "DNN React Component Library", - "main": "dist/dnn-react-common.min.js", - "repository": { - "type": "git", - "url": "https://github.com/dnnsoftware/Dnn.React.Common.git" - }, - "license": "MIT", - "keywords": [ - "DNN", - "dnnsoftware", - "React", - "DNN Module", - "Persona Bar" - ], - "scripts": { - "lint": "eslint --fix", - "test": "echo \"No tests script specified to run.\"", - "build": "set NODE_ENV=production && webpack --mode production --config dist.webpack.config.js", - "watch": "set NODE_ENV=debug && webpack --mode development --config dist.webpack.config.js --watch", - "debug": "set NODE_ENV=debug && webpack --mode production --config dist.webpack.config.js", - "storybook": "storybook dev -p 6006", - "build-storybook": "storybook build" - }, - "dependencies": { - "dayjs": "^1.11.9", - "interact.js": "^1.2.8", - "raw-loader": "4.0.2", - "react-accessible-tooltip": "^2.0.3", - "react-collapse": "^5.1.1", - "react-custom-scrollbars": "^4.2.1", - "react-day-picker": "^7.4.10", - "react-height": "^3.0.2", - "react-modal": "^3.16.1", - "react-motion": "^0.5.2", - "react-scrollbar": "^0.5.6", - "react-slider": "2.0.6", - "react-tabs": "3.2.3", - "react-tooltip": "^4.5.1", - "react-widgets": "^5.8.4", - "redux-undo": "^1.0.0-beta9", - "scroll": "^3.0.1", - "throttle-debounce": "^5.0.0" - }, - "devDependencies": { - "@babel/core": "^7.28.4", - "@babel/eslint-parser": "^7.28.4", - "@babel/eslint-plugin": "7.27.1", - "@babel/plugin-proposal-object-rest-spread": "^7.20.7", - "@babel/plugin-transform-object-assign": "^7.27.1", - "@babel/preset-env": "^7.28.3", - "@babel/preset-react": "^7.27.1", - "@eslint/compat": "^1.4.0", - "@storybook/addon-docs": "9.1.13", - "@storybook/addon-onboarding": "9.1.13", - "@storybook/addon-webpack5-compiler-swc": "4.0.1", - "@storybook/react-webpack5": "9.1.13", - "babel-eslint": "^10.1.0", - "babel-loader": "^10.0.0", - "babel-plugin-transform-react-remove-prop-types": "0.4.24", - "babel-polyfill": "6.26.0", - "cpy-cli": "^2.0.0", - "create-react-class": "^15.7.0", - "css-loader": "^7.1.2", - "enzyme": "^3.11.0", - "enzyme-adapter-react-16": "^1.15.7", - "enzyme-to-json": "^3.6.2", - "eslint": "^9.38.0", - "eslint-import-resolver-node": "^0.3.9", - "eslint-import-resolver-webpack": "^0.13.10", - "eslint-plugin-filenames": "^1.3.2", - "eslint-plugin-import": "^2.32.0", - "eslint-plugin-jest": "^29.0.1", - "eslint-plugin-react": "7.37.5", - "eslint-plugin-storybook": "9.1.13", - "eslint-webpack-plugin": "^5.0.2", - "file-loader": "6.2.0", - "less": "4.1.3", - "less-loader": "12.2.0", - "nanoid": "^5.0.7", - "prop-types": "^15.8.1", - "raw-loader": "4.0.2", - "react": "^16.14.0", - "react-addons-test-utils": "^15.6.2", - "react-dom": "^16.14.0", - "react-hot-loader": "^4.13.1", - "react-test-renderer": "^17.0.2", - "storybook": "9.1.13", - "style-loader": "^4.0.0", - "url-loader": "1.1.2", - "webpack": "5.94.0", - "webpack-bundle-size-analyzer": "3.1.0", - "webpack-cli": "5.1.4", - "webpack-dev-server": "5.2.1", - "webpack-node-externals": "^3.0.0" - }, - "peerDependencies": { - "prop-types": "^15.6.2", - "react": "^16.4.2", - "react-dom": "^16.4.2", - "react-hot-loader": "^4.8.5" - } -} +{ + "name": "@dnnsoftware/dnn-react-common", + "version": "10.1.0", + "description": "DNN React Component Library", + "main": "dist/dnn-react-common.min.js", + "repository": { + "type": "git", + "url": "https://github.com/dnnsoftware/Dnn.React.Common.git" + }, + "license": "MIT", + "keywords": [ + "DNN", + "dnnsoftware", + "React", + "DNN Module", + "Persona Bar" + ], + "scripts": { + "lint": "eslint --fix", + "test": "echo \"No tests script specified to run.\"", + "build": "set NODE_ENV=production && webpack --mode production --config dist.webpack.config.js", + "watch": "set NODE_ENV=debug && webpack --mode development --config dist.webpack.config.js --watch", + "debug": "set NODE_ENV=debug && webpack --mode production --config dist.webpack.config.js", + "storybook": "storybook dev -p 6006", + "build-storybook": "storybook build" + }, + "dependencies": { + "dayjs": "^1.11.9", + "interact.js": "^1.2.8", + "raw-loader": "4.0.2", + "react-accessible-tooltip": "^2.0.3", + "react-collapse": "^5.1.1", + "react-custom-scrollbars": "^4.2.1", + "react-day-picker": "^7.4.10", + "react-height": "^3.0.2", + "react-modal": "^3.16.1", + "react-motion": "^0.5.2", + "react-scrollbar": "^0.5.6", + "react-slider": "2.0.6", + "react-tabs": "3.2.3", + "react-tooltip": "^4.5.1", + "react-widgets": "^5.8.4", + "redux-undo": "^1.0.0-beta9", + "scroll": "^3.0.1", + "throttle-debounce": "^5.0.0" + }, + "devDependencies": { + "@babel/core": "^7.28.4", + "@babel/eslint-parser": "^7.28.4", + "@babel/eslint-plugin": "7.27.1", + "@babel/plugin-proposal-object-rest-spread": "^7.20.7", + "@babel/plugin-transform-object-assign": "^7.27.1", + "@babel/preset-env": "^7.28.3", + "@babel/preset-react": "^7.27.1", + "@eslint/compat": "^1.4.0", + "@storybook/addon-docs": "9.1.13", + "@storybook/addon-onboarding": "9.1.13", + "@storybook/addon-webpack5-compiler-swc": "4.0.1", + "@storybook/react-webpack5": "9.1.13", + "babel-eslint": "^10.1.0", + "babel-loader": "^10.0.0", + "babel-plugin-transform-react-remove-prop-types": "0.4.24", + "babel-polyfill": "6.26.0", + "create-react-class": "^15.7.0", + "css-loader": "^7.1.2", + "enzyme": "^3.11.0", + "enzyme-adapter-react-16": "^1.15.7", + "enzyme-to-json": "^3.6.2", + "eslint": "^9.38.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-import-resolver-webpack": "^0.13.10", + "eslint-plugin-filenames": "^1.3.2", + "eslint-plugin-import": "^2.32.0", + "eslint-plugin-jest": "^29.0.1", + "eslint-plugin-react": "7.37.5", + "eslint-plugin-storybook": "9.1.13", + "eslint-webpack-plugin": "^5.0.2", + "file-loader": "6.2.0", + "less": "4.1.3", + "less-loader": "12.2.0", + "nanoid": "^5.0.7", + "prop-types": "^15.8.1", + "raw-loader": "4.0.2", + "react": "^16.14.0", + "react-addons-test-utils": "^15.6.2", + "react-dom": "^16.14.0", + "react-hot-loader": "^4.13.1", + "react-test-renderer": "^17.0.2", + "storybook": "9.1.13", + "style-loader": "^4.0.0", + "url-loader": "1.1.2", + "webpack": "5.94.0", + "webpack-bundle-size-analyzer": "3.1.0", + "webpack-cli": "5.1.4", + "webpack-dev-server": "5.2.1", + "webpack-node-externals": "^3.0.0" + }, + "peerDependencies": { + "prop-types": "^15.6.2", + "react": "^16.4.2", + "react-dom": "^16.4.2", + "react-hot-loader": "^4.8.5" + } +} diff --git a/yarn.lock b/yarn.lock index eb15f2b1815..79411e4465b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1643,7 +1643,6 @@ __metadata: babel-loader: "npm:^10.0.0" babel-plugin-transform-react-remove-prop-types: "npm:0.4.24" babel-polyfill: "npm:6.26.0" - cpy-cli: "npm:^2.0.0" create-react-class: "npm:^15.7.0" css-loader: "npm:^7.1.2" dayjs: "npm:^1.11.9" @@ -2621,16 +2620,6 @@ __metadata: languageName: node linkType: hard -"@mrmlnc/readdir-enhanced@npm:^2.2.1": - version: 2.2.1 - resolution: "@mrmlnc/readdir-enhanced@npm:2.2.1" - dependencies: - call-me-maybe: "npm:^1.0.1" - glob-to-regexp: "npm:^0.3.0" - checksum: 10/55d898d3d65b0a3a6029ee4f4c41e1601d0907b45b543edc4b50580848c996046360626480222e10228e1cecb91fc9766526c9dae1817c94d01d25f3376c27dd - languageName: node - linkType: hard - "@napi-rs/wasm-runtime@npm:0.2.4": version: 0.2.4 resolution: "@napi-rs/wasm-runtime@npm:0.2.4" @@ -2668,13 +2657,6 @@ __metadata: languageName: node linkType: hard -"@nodelib/fs.stat@npm:^1.1.2": - version: 1.1.3 - resolution: "@nodelib/fs.stat@npm:1.1.3" - checksum: 10/318deab369b518a34778cdaa0054dd28a4381c0c78e40bbd20252f67d084b1d7bf9295fea4423de2c19ac8e1a34f120add9125f481b2a710f7068bcac7e3e305 - languageName: node - linkType: hard - "@nodelib/fs.walk@npm:^1.2.3": version: 1.2.8 resolution: "@nodelib/fs.walk@npm:1.2.8" @@ -4146,16 +4128,6 @@ __metadata: languageName: node linkType: hard -"@types/glob@npm:^7.1.1": - version: 7.2.0 - resolution: "@types/glob@npm:7.2.0" - dependencies: - "@types/minimatch": "npm:*" - "@types/node": "npm:*" - checksum: 10/6ae717fedfdfdad25f3d5a568323926c64f52ef35897bcac8aca8e19bc50c0bd84630bbd063e5d52078b2137d8e7d3c26eabebd1a2f03ff350fff8a91e79fc19 - languageName: node - linkType: hard - "@types/graceful-fs@npm:^4.1.3": version: 4.1.9 resolution: "@types/graceful-fs@npm:4.1.9" @@ -4283,13 +4255,6 @@ __metadata: languageName: node linkType: hard -"@types/minimatch@npm:*": - version: 5.1.2 - resolution: "@types/minimatch@npm:5.1.2" - checksum: 10/94db5060d20df2b80d77b74dd384df3115f01889b5b6c40fa2dfa27cfc03a68fb0ff7c1f2a0366070263eb2e9d6bfd8c87111d4bc3ae93c3f291297c1bf56c85 - languageName: node - linkType: hard - "@types/minimatch@npm:^3.0.3": version: 3.0.5 resolution: "@types/minimatch@npm:3.0.5" @@ -5555,14 +5520,7 @@ __metadata: languageName: node linkType: hard -"arr-diff@npm:^4.0.0": - version: 4.0.0 - resolution: "arr-diff@npm:4.0.0" - checksum: 10/ea7c8834842ad3869297f7915689bef3494fd5b102ac678c13ffccab672d3d1f35802b79e90c4cfec2f424af3392e44112d1ccf65da34562ed75e049597276a0 - languageName: node - linkType: hard - -"arr-flatten@npm:^1.0.1, arr-flatten@npm:^1.1.0": +"arr-flatten@npm:^1.0.1": version: 1.1.0 resolution: "arr-flatten@npm:1.1.0" checksum: 10/963fe12564fca2f72c055f3f6c206b9e031f7c433a0c66ca9858b484821f248c5b1e5d53c8e4989d80d764cd776cf6d9b160ad05f47bdc63022bfd63b5455e22 @@ -5578,7 +5536,7 @@ __metadata: languageName: node linkType: hard -"arr-union@npm:^3.0.0, arr-union@npm:^3.1.0": +"arr-union@npm:^3.0.0": version: 3.1.0 resolution: "arr-union@npm:3.1.0" checksum: 10/b5b0408c6eb7591143c394f3be082fee690ddd21f0fdde0a0a01106799e847f67fcae1b7e56b0a0c173290e29c6aca9562e82b300708a268bc8f88f3d6613cb9 @@ -5609,13 +5567,6 @@ __metadata: languageName: node linkType: hard -"array-find-index@npm:^1.0.1": - version: 1.0.2 - resolution: "array-find-index@npm:1.0.2" - checksum: 10/aac128bf369e1ac6c06ff0bb330788371c0e256f71279fb92d745e26fb4b9db8920e485b4ec25e841c93146bf71a34dcdbcefa115e7e0f96927a214d237b7081 - languageName: node - linkType: hard - "array-flatten@npm:1.1.1": version: 1.1.1 resolution: "array-flatten@npm:1.1.1" @@ -5653,15 +5604,6 @@ __metadata: languageName: node linkType: hard -"array-union@npm:^1.0.2": - version: 1.0.2 - resolution: "array-union@npm:1.0.2" - dependencies: - array-uniq: "npm:^1.0.1" - checksum: 10/82cec6421b6e6766556c484835a6d476a873f1b71cace5ab2b4f1b15b1e3162dc4da0d16f7a2b04d4aec18146c6638fe8f661340b31ba8e469fd811a1b45dc8d - languageName: node - linkType: hard - "array-union@npm:^2.1.0": version: 2.1.0 resolution: "array-union@npm:2.1.0" @@ -5669,13 +5611,6 @@ __metadata: languageName: node linkType: hard -"array-uniq@npm:^1.0.1": - version: 1.0.3 - resolution: "array-uniq@npm:1.0.3" - checksum: 10/1625f06b093d8bf279b81adfec6e72951c0857d65b5e3f65f053fffe9f9dd61c2fc52cff57e38a4700817e7e3f01a4faa433d505ea9e33cdae4514c334e0bf9e - languageName: node - linkType: hard - "array-unique@npm:^0.2.1": version: 0.2.1 resolution: "array-unique@npm:0.2.1" @@ -5683,13 +5618,6 @@ __metadata: languageName: node linkType: hard -"array-unique@npm:^0.3.2": - version: 0.3.2 - resolution: "array-unique@npm:0.3.2" - checksum: 10/da344b89cfa6b0a5c221f965c21638bfb76b57b45184a01135382186924f55973cd9b171d4dad6bf606c6d9d36b0d721d091afdc9791535ead97ccbe78f8a888 - languageName: node - linkType: hard - "array.prototype.filter@npm:^1.0.0": version: 1.0.4 resolution: "array.prototype.filter@npm:1.0.4" @@ -5840,13 +5768,6 @@ __metadata: languageName: node linkType: hard -"assign-symbols@npm:^1.0.0": - version: 1.0.0 - resolution: "assign-symbols@npm:1.0.0" - checksum: 10/c0eb895911d05b6b2d245154f70461c5e42c107457972e5ebba38d48967870dee53bcdf6c7047990586daa80fab8dab3cc6300800fbd47b454247fdedd859a2c - languageName: node - linkType: hard - "ast-types@npm:^0.16.1": version: 0.16.1 resolution: "ast-types@npm:0.16.1" @@ -5893,15 +5814,6 @@ __metadata: languageName: node linkType: hard -"atob@npm:^2.1.2": - version: 2.1.2 - resolution: "atob@npm:2.1.2" - bin: - atob: bin/atob.js - checksum: 10/0624406cc0295533b38b60ab2e3b028aa7b8225f37e0cde6be3bc5c13a8015c889b192e874fd7660671179cef055f2e258855f372b0e495bd4096cf0b4785c25 - languageName: node - linkType: hard - "autobind-decorator@npm:^2.4.0": version: 2.4.0 resolution: "autobind-decorator@npm:2.4.0" @@ -6822,21 +6734,6 @@ __metadata: languageName: node linkType: hard -"base@npm:^0.11.1": - version: 0.11.2 - resolution: "base@npm:0.11.2" - dependencies: - cache-base: "npm:^1.0.1" - class-utils: "npm:^0.3.5" - component-emitter: "npm:^1.2.1" - define-property: "npm:^1.0.0" - isobject: "npm:^3.0.1" - mixin-deep: "npm:^1.2.0" - pascalcase: "npm:^0.1.1" - checksum: 10/33b0c5d570840873cf370248e653d43e8d82ce4f03161ad3c58b7da6238583cfc65bf4bbb06b27050d6c2d8f40628777f3933f483c0a7c0274fcef4c51f70a7e - languageName: node - linkType: hard - "batch@npm:0.6.1": version: 0.6.1 resolution: "batch@npm:0.6.1" @@ -6960,24 +6857,6 @@ __metadata: languageName: node linkType: hard -"braces@npm:^2.3.1": - version: 2.3.2 - resolution: "braces@npm:2.3.2" - dependencies: - arr-flatten: "npm:^1.1.0" - array-unique: "npm:^0.3.2" - extend-shallow: "npm:^2.0.1" - fill-range: "npm:^4.0.0" - isobject: "npm:^3.0.1" - repeat-element: "npm:^1.1.2" - snapdragon: "npm:^0.8.1" - snapdragon-node: "npm:^2.0.1" - split-string: "npm:^3.0.2" - to-regex: "npm:^3.0.1" - checksum: 10/7c0f0d962570812009b050ee2e6243fd425ea80d3136aace908d0038bde9e7a43e9326fa35538cebf7c753f0482655f08ea11be074c9a140394287980a5c66c9 - languageName: node - linkType: hard - "braces@npm:^3.0.3, braces@npm:~3.0.2": version: 3.0.3 resolution: "braces@npm:3.0.3" @@ -7198,23 +7077,6 @@ __metadata: languageName: node linkType: hard -"cache-base@npm:^1.0.1": - version: 1.0.1 - resolution: "cache-base@npm:1.0.1" - dependencies: - collection-visit: "npm:^1.0.0" - component-emitter: "npm:^1.2.1" - get-value: "npm:^2.0.6" - has-value: "npm:^1.0.0" - isobject: "npm:^3.0.1" - set-value: "npm:^2.0.0" - to-object-path: "npm:^0.3.0" - union-value: "npm:^1.0.0" - unset-value: "npm:^1.0.0" - checksum: 10/50dd11af5ce4aaa8a8bff190a870c940db80234cf087cd47dd177be8629c36ad8cd0716e62418ec1e135f2d01b28aafff62cd22d33412c3d18b2109dd9073711 - languageName: node - linkType: hard - "call-bind-apply-helpers@npm:^1.0.0, call-bind-apply-helpers@npm:^1.0.1, call-bind-apply-helpers@npm:^1.0.2": version: 1.0.2 resolution: "call-bind-apply-helpers@npm:1.0.2" @@ -7247,13 +7109,6 @@ __metadata: languageName: node linkType: hard -"call-me-maybe@npm:^1.0.1": - version: 1.0.2 - resolution: "call-me-maybe@npm:1.0.2" - checksum: 10/3d375b6f810a82c751157b199daba60452876186c19ac653e81bfc5fc10d1e2ba7aedb8622367c3a8aca6879f0e6a29435a1193b35edb8f7fd8267a67ea32373 - languageName: node - linkType: hard - "callsites@npm:^3.0.0": version: 3.1.0 resolution: "callsites@npm:3.1.0" @@ -7271,17 +7126,6 @@ __metadata: languageName: node linkType: hard -"camelcase-keys@npm:^4.0.0": - version: 4.2.0 - resolution: "camelcase-keys@npm:4.2.0" - dependencies: - camelcase: "npm:^4.1.0" - map-obj: "npm:^2.0.0" - quick-lru: "npm:^1.0.0" - checksum: 10/8cb52633f2d335bf7efd9ec4169df3174047dbeadbe9b7604fb4a24cbc53a976bc26bb8557f6e9da5feff139bf94e36f40e2636b31225670f9524f586070c3ec - languageName: node - linkType: hard - "camelcase-keys@npm:^6.2.2": version: 6.2.2 resolution: "camelcase-keys@npm:6.2.2" @@ -7293,13 +7137,6 @@ __metadata: languageName: node linkType: hard -"camelcase@npm:^4.1.0": - version: 4.1.0 - resolution: "camelcase@npm:4.1.0" - checksum: 10/9683356daf9b64fae4b30c91f8ceb1f34f22746e03d1804efdbe738357d38b47f206cdd71efcf2ed72018b2e88eeb8ec3f79adb09c02f1253a4b6d5d405ff2ae - languageName: node - linkType: hard - "camelcase@npm:^5.3.1": version: 5.3.1 resolution: "camelcase@npm:5.3.1" @@ -7544,18 +7381,6 @@ __metadata: languageName: node linkType: hard -"class-utils@npm:^0.3.5": - version: 0.3.6 - resolution: "class-utils@npm:0.3.6" - dependencies: - arr-union: "npm:^3.1.0" - define-property: "npm:^0.2.5" - isobject: "npm:^3.0.0" - static-extend: "npm:^0.1.1" - checksum: 10/b236d9deb6594828966e45c5f48abac9a77453ee0dbdb89c635ce876f59755d7952309d554852b6f7d909198256c335a4bd51b09c1d238b36b92152eb2b9d47a - languageName: node - linkType: hard - "classnames@npm:*, classnames@npm:^2.2.6, classnames@npm:^2.3.1": version: 2.5.1 resolution: "classnames@npm:2.5.1" @@ -7677,16 +7502,6 @@ __metadata: languageName: node linkType: hard -"collection-visit@npm:^1.0.0": - version: 1.0.0 - resolution: "collection-visit@npm:1.0.0" - dependencies: - map-visit: "npm:^1.0.0" - object-visit: "npm:^1.0.0" - checksum: 10/15d9658fe6eb23594728346adad5433b86bb7a04fd51bbab337755158722f9313a5376ef479de5b35fbc54140764d0d39de89c339f5d25b959ed221466981da9 - languageName: node - linkType: hard - "color-convert@npm:^1.9.3": version: 1.9.3 resolution: "color-convert@npm:1.9.3" @@ -7847,13 +7662,6 @@ __metadata: languageName: node linkType: hard -"component-emitter@npm:^1.2.1": - version: 1.3.1 - resolution: "component-emitter@npm:1.3.1" - checksum: 10/94550aa462c7bd5a61c1bc480e28554aa306066930152d1b1844a0dd3845d4e5db7e261ddec62ae184913b3e59b55a2ad84093b9d3596a8f17c341514d6c483d - languageName: node - linkType: hard - "compressible@npm:~2.0.18": version: 2.0.18 resolution: "compressible@npm:2.0.18" @@ -8125,13 +7933,6 @@ __metadata: languageName: node linkType: hard -"copy-descriptor@npm:^0.1.0": - version: 0.1.1 - resolution: "copy-descriptor@npm:0.1.1" - checksum: 10/edf4651bce36166c7fcc60b5c1db2c5dad1d87820f468507331dd154b686ece8775f5d383127d44aeef813462520c866f83908aa2d4291708f898df776816860 - languageName: node - linkType: hard - "core-js-compat@npm:^3.43.0": version: 3.44.0 resolution: "core-js-compat@npm:3.44.0" @@ -8195,43 +7996,6 @@ __metadata: languageName: node linkType: hard -"cp-file@npm:^6.1.0": - version: 6.2.0 - resolution: "cp-file@npm:6.2.0" - dependencies: - graceful-fs: "npm:^4.1.2" - make-dir: "npm:^2.0.0" - nested-error-stacks: "npm:^2.0.0" - pify: "npm:^4.0.1" - safe-buffer: "npm:^5.0.1" - checksum: 10/7e61b3ca311e74bce4b5f60aad978dc29b957d083fe94a4aba896b927af9ccd51e2e2000ada09542e0f22f0f220b107b0857f6dab21e5cdf189fc14742b94f62 - languageName: node - linkType: hard - -"cpy-cli@npm:^2.0.0": - version: 2.0.0 - resolution: "cpy-cli@npm:2.0.0" - dependencies: - cpy: "npm:^7.0.0" - meow: "npm:^5.0.0" - bin: - cpy: cli.js - checksum: 10/870c8b76a579676ba5a907f127fb25adeaad335c39546b3c1cde6fabf8a4283c937c93c7c2de7617b1ba080a5b316bb316ba6033e6b4d385096ae6e7583ded01 - languageName: node - linkType: hard - -"cpy@npm:^7.0.0": - version: 7.3.0 - resolution: "cpy@npm:7.3.0" - dependencies: - arrify: "npm:^1.0.1" - cp-file: "npm:^6.1.0" - globby: "npm:^9.2.0" - nested-error-stacks: "npm:^2.1.0" - checksum: 10/87e0c6040e0de529a4dc594526b4f29c3c8e75a1c3bdc2895e38b5c37809ac2ad2a5a33129877d86da74af4dcca6eafc2af5dd7fb6371b61e4ba1cd86f39bb5d - languageName: node - linkType: hard - "create-react-class@npm:^15.7.0": version: 15.7.0 resolution: "create-react-class@npm:15.7.0" @@ -8475,15 +8239,6 @@ __metadata: languageName: node linkType: hard -"currently-unhandled@npm:^0.4.1": - version: 0.4.1 - resolution: "currently-unhandled@npm:0.4.1" - dependencies: - array-find-index: "npm:^1.0.1" - checksum: 10/53fb803e582737bdb5de6b150f0924dd9abf7be606648b4c2871db1c682bf288e248e8066ef10548979732a680cfb6c047294e3877846c2cf2f8d40437d8a741 - languageName: node - linkType: hard - "cyclist@npm:^1.0.1": version: 1.0.2 resolution: "cyclist@npm:1.0.2" @@ -8569,7 +8324,7 @@ __metadata: languageName: node linkType: hard -"debug@npm:2.6.9, debug@npm:^2.2.0, debug@npm:^2.3.3, debug@npm:^2.6.8": +"debug@npm:2.6.9, debug@npm:^2.2.0, debug@npm:^2.6.8": version: 2.6.9 resolution: "debug@npm:2.6.9" dependencies: @@ -8611,7 +8366,7 @@ __metadata: languageName: node linkType: hard -"decamelize-keys@npm:^1.0.0, decamelize-keys@npm:^1.1.0": +"decamelize-keys@npm:^1.1.0": version: 1.1.1 resolution: "decamelize-keys@npm:1.1.1" dependencies: @@ -8635,13 +8390,6 @@ __metadata: languageName: node linkType: hard -"decode-uri-component@npm:^0.2.0": - version: 0.2.2 - resolution: "decode-uri-component@npm:0.2.2" - checksum: 10/17a0e5fa400bf9ea84432226e252aa7b5e72793e16bf80b907c99b46a799aeacc139ec20ea57121e50c7bd875a1a4365928f884e92abf02e21a5a13790a0f33e - languageName: node - linkType: hard - "dedent@npm:1.5.3": version: 1.5.3 resolution: "dedent@npm:1.5.3" @@ -8744,34 +8492,6 @@ __metadata: languageName: node linkType: hard -"define-property@npm:^0.2.5": - version: 0.2.5 - resolution: "define-property@npm:0.2.5" - dependencies: - is-descriptor: "npm:^0.1.0" - checksum: 10/85af107072b04973b13f9e4128ab74ddfda48ec7ad2e54b193c0ffb57067c4ce5b7786a7b4ae1f24bd03e87c5d18766b094571810b314d7540f86d4354dbd394 - languageName: node - linkType: hard - -"define-property@npm:^1.0.0": - version: 1.0.0 - resolution: "define-property@npm:1.0.0" - dependencies: - is-descriptor: "npm:^1.0.0" - checksum: 10/5fbed11dace44dd22914035ba9ae83ad06008532ca814d7936a53a09e897838acdad5b108dd0688cc8d2a7cf0681acbe00ee4136cf36743f680d10517379350a - languageName: node - linkType: hard - -"define-property@npm:^2.0.2": - version: 2.0.2 - resolution: "define-property@npm:2.0.2" - dependencies: - is-descriptor: "npm:^1.0.2" - isobject: "npm:^3.0.1" - checksum: 10/3217ed53fc9eed06ba8da6f4d33e28c68a82e2f2a8ab4d562c4920d8169a166fe7271453675e6c69301466f36a65d7f47edf0cf7f474b9aa52a5ead9c1b13c99 - languageName: node - linkType: hard - "delayed-stream@npm:~1.0.0": version: 1.0.0 resolution: "delayed-stream@npm:1.0.0" @@ -8874,15 +8594,6 @@ __metadata: languageName: node linkType: hard -"dir-glob@npm:^2.2.2": - version: 2.2.2 - resolution: "dir-glob@npm:2.2.2" - dependencies: - path-type: "npm:^3.0.0" - checksum: 10/3aa48714a9f7845ffc30ab03a5c674fe760477cc55e67b0847333371549227d93953e6627ec160f75140c5bea5c5f88d13c01de79bd1997a588efbcf06980842 - languageName: node - linkType: hard - "discontinuous-range@npm:1.0.0": version: 1.0.0 resolution: "discontinuous-range@npm:1.0.0" @@ -10378,21 +10089,6 @@ __metadata: languageName: node linkType: hard -"expand-brackets@npm:^2.1.4": - version: 2.1.4 - resolution: "expand-brackets@npm:2.1.4" - dependencies: - debug: "npm:^2.3.3" - define-property: "npm:^0.2.5" - extend-shallow: "npm:^2.0.1" - posix-character-classes: "npm:^0.1.0" - regex-not: "npm:^1.0.0" - snapdragon: "npm:^0.8.1" - to-regex: "npm:^3.0.1" - checksum: 10/aa4acc62084638c761ecdbe178bd3136f01121939f96bbfc3be27c46c66625075f77fe0a446b627c9071b1aaf6d93ccf5bde5ff34b7ef883e4f46067a8e63e41 - languageName: node - linkType: hard - "expect@npm:^28.1.3": version: 28.1.3 resolution: "expect@npm:28.1.3" @@ -10525,25 +10221,6 @@ __metadata: languageName: node linkType: hard -"extend-shallow@npm:^2.0.1": - version: 2.0.1 - resolution: "extend-shallow@npm:2.0.1" - dependencies: - is-extendable: "npm:^0.1.0" - checksum: 10/8fb58d9d7a511f4baf78d383e637bd7d2e80843bd9cd0853649108ea835208fb614da502a553acc30208e1325240bb7cc4a68473021612496bb89725483656d8 - languageName: node - linkType: hard - -"extend-shallow@npm:^3.0.0, extend-shallow@npm:^3.0.2": - version: 3.0.2 - resolution: "extend-shallow@npm:3.0.2" - dependencies: - assign-symbols: "npm:^1.0.0" - is-extendable: "npm:^1.0.1" - checksum: 10/a920b0cd5838a9995ace31dfd11ab5e79bf6e295aa566910ce53dff19f4b1c0fda2ef21f26b28586c7a2450ca2b42d97bd8c0f5cec9351a819222bf861e02461 - languageName: node - linkType: hard - "extensions@workspace:Dnn.AdminExperience/ClientSide/Extensions.Web": version: 0.0.0-use.local resolution: "extensions@workspace:Dnn.AdminExperience/ClientSide/Extensions.Web" @@ -10591,22 +10268,6 @@ __metadata: languageName: node linkType: hard -"extglob@npm:^2.0.4": - version: 2.0.4 - resolution: "extglob@npm:2.0.4" - dependencies: - array-unique: "npm:^0.3.2" - define-property: "npm:^1.0.0" - expand-brackets: "npm:^2.1.4" - extend-shallow: "npm:^2.0.1" - fragment-cache: "npm:^0.2.1" - regex-not: "npm:^1.0.0" - snapdragon: "npm:^0.8.1" - to-regex: "npm:^3.0.1" - checksum: 10/6869edd48d40c322e1cda9bf494ed2407c69a19063fd2897184cb62d6d35c14fa7402b01d9dedd65d77ed1ccc74a291235a702c68b4f28a7314da0cdee97c85b - languageName: node - linkType: hard - "extract-text-webpack-plugin@npm:^3.0.2": version: 3.0.2 resolution: "extract-text-webpack-plugin@npm:3.0.2" @@ -10635,20 +10296,6 @@ __metadata: languageName: node linkType: hard -"fast-glob@npm:^2.2.6": - version: 2.2.7 - resolution: "fast-glob@npm:2.2.7" - dependencies: - "@mrmlnc/readdir-enhanced": "npm:^2.2.1" - "@nodelib/fs.stat": "npm:^1.1.2" - glob-parent: "npm:^3.1.0" - is-glob: "npm:^4.0.0" - merge2: "npm:^1.2.3" - micromatch: "npm:^3.1.10" - checksum: 10/9e7d4e4d99ee8cd5a409b862ce9837b0c1d00e179810b820ee3274e22179ecc92a6a2f93f6119781e9bc44945e87c9a8920fa02280ebbb532381730ebe26e138 - languageName: node - linkType: hard - "fast-glob@npm:^3.3.2": version: 3.3.3 resolution: "fast-glob@npm:3.3.3" @@ -10851,18 +10498,6 @@ __metadata: languageName: node linkType: hard -"fill-range@npm:^4.0.0": - version: 4.0.0 - resolution: "fill-range@npm:4.0.0" - dependencies: - extend-shallow: "npm:^2.0.1" - is-number: "npm:^3.0.0" - repeat-string: "npm:^1.6.1" - to-regex-range: "npm:^2.1.0" - checksum: 10/68be23b3c40d5a3fd2847ce18e3a5eac25d9f4c05627291e048ba1346ed0e429668b58a3429e61c0db9fa5954c4402fe99322a65d8a0eb06ebed8d3a18fbb09a - languageName: node - linkType: hard - "fill-range@npm:^7.1.1": version: 7.1.1 resolution: "fill-range@npm:7.1.1" @@ -11053,7 +10688,7 @@ __metadata: languageName: node linkType: hard -"for-in@npm:^1.0.1, for-in@npm:^1.0.2": +"for-in@npm:^1.0.1": version: 1.0.2 resolution: "for-in@npm:1.0.2" checksum: 10/09f4ae93ce785d253ac963d94c7f3432d89398bf25ac7a24ed034ca393bf74380bdeccc40e0f2d721a895e54211b07c8fad7132e8157827f6f7f059b70b4043d @@ -11129,15 +10764,6 @@ __metadata: languageName: node linkType: hard -"fragment-cache@npm:^0.2.1": - version: 0.2.1 - resolution: "fragment-cache@npm:0.2.1" - dependencies: - map-cache: "npm:^0.2.2" - checksum: 10/1cbbd0b0116b67d5790175de0038a11df23c1cd2e8dcdbade58ebba5594c2d641dade6b4f126d82a7b4a6ffc2ea12e3d387dbb64ea2ae97cf02847d436f60fdc - languageName: node - linkType: hard - "fresh@npm:0.5.2, fresh@npm:^0.5.2": version: 0.5.2 resolution: "fresh@npm:0.5.2" @@ -11399,13 +11025,6 @@ __metadata: languageName: node linkType: hard -"get-value@npm:^2.0.3, get-value@npm:^2.0.6": - version: 2.0.6 - resolution: "get-value@npm:2.0.6" - checksum: 10/5c3b99cb5398ea8016bf46ff17afc5d1d286874d2ad38ca5edb6e87d75c0965b0094cb9a9dddef2c59c23d250702323539a7fbdd870620db38c7e7d7ec87c1eb - languageName: node - linkType: hard - "git-raw-commits@npm:^3.0.0": version: 3.0.0 resolution: "git-raw-commits@npm:3.0.0" @@ -11478,16 +11097,6 @@ __metadata: languageName: node linkType: hard -"glob-parent@npm:^3.1.0": - version: 3.1.0 - resolution: "glob-parent@npm:3.1.0" - dependencies: - is-glob: "npm:^3.1.0" - path-dirname: "npm:^1.0.0" - checksum: 10/653d559237e89a11b9934bef3f392ec42335602034c928590544d383ff5ef449f7b12f3cfa539708e74bc0a6c28ab1fe51d663cc07463cdf899ba92afd85a855 - languageName: node - linkType: hard - "glob-parent@npm:^5.1.2, glob-parent@npm:~5.1.2": version: 5.1.2 resolution: "glob-parent@npm:5.1.2" @@ -11497,13 +11106,6 @@ __metadata: languageName: node linkType: hard -"glob-to-regexp@npm:^0.3.0": - version: 0.3.0 - resolution: "glob-to-regexp@npm:0.3.0" - checksum: 10/a716708f7887a1d3c46188dbbd5baf6b1647fa670e458d49db949369e20eb79fad9828d6601f618455f87fd13041b6087b01233d95ba7092aba7acb7491c9d39 - languageName: node - linkType: hard - "glob-to-regexp@npm:^0.4.0, glob-to-regexp@npm:^0.4.1": version: 0.4.1 resolution: "glob-to-regexp@npm:0.4.1" @@ -11603,22 +11205,6 @@ __metadata: languageName: node linkType: hard -"globby@npm:^9.2.0": - version: 9.2.0 - resolution: "globby@npm:9.2.0" - dependencies: - "@types/glob": "npm:^7.1.1" - array-union: "npm:^1.0.2" - dir-glob: "npm:^2.2.2" - fast-glob: "npm:^2.2.6" - glob: "npm:^7.1.3" - ignore: "npm:^4.0.3" - pify: "npm:^4.0.1" - slash: "npm:^2.0.0" - checksum: 10/8035f1e5d8f3fd9df6e4b475f4e2b17ace1ac679bb8477fbfaefea6958cc9c4cfbe50080fd7e76a821501ecd28bf94cc1bd9e42ed127723dbeefee31d0e198fe - languageName: node - linkType: hard - "gopd@npm:^1.0.1, gopd@npm:^1.2.0": version: 1.2.0 resolution: "gopd@npm:1.2.0" @@ -11745,45 +11331,13 @@ __metadata: languageName: node linkType: hard -"has-value@npm:^0.3.1": - version: 0.3.1 - resolution: "has-value@npm:0.3.1" - dependencies: - get-value: "npm:^2.0.3" - has-values: "npm:^0.1.4" - isobject: "npm:^2.0.0" - checksum: 10/29e2a1e6571dad83451b769c7ce032fce6009f65bccace07c2962d3ad4d5530b6743d8f3229e4ecf3ea8e905d23a752c5f7089100c1f3162039fa6dc3976558f - languageName: node - linkType: hard - -"has-value@npm:^1.0.0": - version: 1.0.0 - resolution: "has-value@npm:1.0.0" - dependencies: - get-value: "npm:^2.0.6" - has-values: "npm:^1.0.0" - isobject: "npm:^3.0.0" - checksum: 10/b9421d354e44f03d3272ac39fd49f804f19bc1e4fa3ceef7745df43d6b402053f828445c03226b21d7d934a21ac9cf4bc569396dc312f496ddff873197bbd847 - languageName: node - linkType: hard - -"has-values@npm:^0.1.3, has-values@npm:^0.1.4": +"has-values@npm:^0.1.3": version: 0.1.4 resolution: "has-values@npm:0.1.4" checksum: 10/ab1c4bcaf811ccd1856c11cfe90e62fca9e2b026ebe474233a3d282d8d67e3b59ed85b622c7673bac3db198cb98bd1da2b39300a2f98e453729b115350af49bc languageName: node linkType: hard -"has-values@npm:^1.0.0": - version: 1.0.0 - resolution: "has-values@npm:1.0.0" - dependencies: - is-number: "npm:^3.0.0" - kind-of: "npm:^4.0.0" - checksum: 10/77e6693f732b5e4cf6c38dfe85fdcefad0fab011af74995c3e83863fabf5e3a836f406d83565816baa0bc0a523c9410db8b990fe977074d61aeb6d8f4fcffa11 - languageName: node - linkType: hard - "has@npm:^1.0.3": version: 1.0.4 resolution: "has@npm:1.0.4" @@ -12169,13 +11723,6 @@ __metadata: languageName: node linkType: hard -"ignore@npm:^4.0.3": - version: 4.0.6 - resolution: "ignore@npm:4.0.6" - checksum: 10/e04d6bd60d9da12cfe8896acf470824172843dddc25a9be0726199d5e031254634a69ce8479a82f194154b9b28cb3b08bb7a53e56f7f7eba2663e04791e74742 - languageName: node - linkType: hard - "ignore@npm:^5.0.4, ignore@npm:^5.2.0": version: 5.3.2 resolution: "ignore@npm:5.3.2" @@ -12254,13 +11801,6 @@ __metadata: languageName: node linkType: hard -"indent-string@npm:^3.0.0": - version: 3.2.0 - resolution: "indent-string@npm:3.2.0" - checksum: 10/a0b72603bba6c985d367fda3a25aad16423d2056b22a7e83ee2dd9ce0ce3d03d1e078644b679087aa7edf1cfb457f0d96d9eeadc0b12f38582088cc00e995d2f - languageName: node - linkType: hard - "indent-string@npm:^4.0.0": version: 4.0.0 resolution: "indent-string@npm:4.0.0" @@ -12423,15 +11963,6 @@ __metadata: languageName: node linkType: hard -"is-accessor-descriptor@npm:^1.0.1": - version: 1.0.1 - resolution: "is-accessor-descriptor@npm:1.0.1" - dependencies: - hasown: "npm:^2.0.0" - checksum: 10/df0d1da1a320e57c594e6f9b52dab8a6bece6dc90e51689d05ac8e5247164aa3eb3e9c66b37027bebfc0ea5fcce6d9503dbc41dccd82f4b57add79a307735365 - languageName: node - linkType: hard - "is-array-buffer@npm:^3.0.4, is-array-buffer@npm:^3.0.5": version: 3.0.5 resolution: "is-array-buffer@npm:3.0.5" @@ -12532,15 +12063,6 @@ __metadata: languageName: node linkType: hard -"is-data-descriptor@npm:^1.0.1": - version: 1.0.1 - resolution: "is-data-descriptor@npm:1.0.1" - dependencies: - hasown: "npm:^2.0.0" - checksum: 10/49b36e903b31623b0c5b416e182e366810ef97a3a19ab0e6cd501eb5599112680b7d9e768b07a84fb52aa2510a92b3eb51a3e18ce8d5f7978a49f4b50e6ec6dd - languageName: node - linkType: hard - "is-data-view@npm:^1.0.1, is-data-view@npm:^1.0.2": version: 1.0.2 resolution: "is-data-view@npm:1.0.2" @@ -12562,26 +12084,6 @@ __metadata: languageName: node linkType: hard -"is-descriptor@npm:^0.1.0": - version: 0.1.7 - resolution: "is-descriptor@npm:0.1.7" - dependencies: - is-accessor-descriptor: "npm:^1.0.1" - is-data-descriptor: "npm:^1.0.1" - checksum: 10/38783182c3d83f839a9fa3e87b4d6de11fa9639833ed98993ea51aea2296b2da155121956e148695a738228871d1057c5f963d0b1c857bb8a4a38d8dd9ceeb56 - languageName: node - linkType: hard - -"is-descriptor@npm:^1.0.0, is-descriptor@npm:^1.0.2": - version: 1.0.3 - resolution: "is-descriptor@npm:1.0.3" - dependencies: - is-accessor-descriptor: "npm:^1.0.1" - is-data-descriptor: "npm:^1.0.1" - checksum: 10/b940d04d93adaffb749b3ca7f7f6d73dd3c5582b674f372513ecb5511a8a3f3ff4a24f4c1161cb10e48fe4886f9e84c09fa71785def27905ca8df1197e563dc6 - languageName: node - linkType: hard - "is-docker@npm:^2.0.0, is-docker@npm:^2.1.1": version: 2.2.1 resolution: "is-docker@npm:2.2.1" @@ -12600,23 +12102,14 @@ __metadata: languageName: node linkType: hard -"is-extendable@npm:^0.1.0, is-extendable@npm:^0.1.1": +"is-extendable@npm:^0.1.1": version: 0.1.1 resolution: "is-extendable@npm:0.1.1" checksum: 10/3875571d20a7563772ecc7a5f36cb03167e9be31ad259041b4a8f73f33f885441f778cee1f1fe0085eb4bc71679b9d8c923690003a36a6a5fdf8023e6e3f0672 languageName: node linkType: hard -"is-extendable@npm:^1.0.1": - version: 1.0.1 - resolution: "is-extendable@npm:1.0.1" - dependencies: - is-plain-object: "npm:^2.0.4" - checksum: 10/db07bc1e9de6170de70eff7001943691f05b9d1547730b11be01c0ebfe67362912ba743cf4be6fd20a5e03b4180c685dad80b7c509fe717037e3eee30ad8e84f - languageName: node - linkType: hard - -"is-extglob@npm:^2.1.0, is-extglob@npm:^2.1.1": +"is-extglob@npm:^2.1.1": version: 2.1.1 resolution: "is-extglob@npm:2.1.1" checksum: 10/df033653d06d0eb567461e58a7a8c9f940bd8c22274b94bf7671ab36df5719791aae15eef6d83bbb5e23283967f2f984b8914559d4449efda578c775c4be6f85 @@ -12658,15 +12151,6 @@ __metadata: languageName: node linkType: hard -"is-glob@npm:^3.1.0": - version: 3.1.0 - resolution: "is-glob@npm:3.1.0" - dependencies: - is-extglob: "npm:^2.1.0" - checksum: 10/9d483bca84f16f01230f7c7c8c63735248fe1064346f292e0f6f8c76475fd20c6f50fc19941af5bec35f85d6bf26f4b7768f39a48a5f5fdc72b408dc74e07afc - languageName: node - linkType: hard - "is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3, is-glob@npm:~4.0.1": version: 4.0.3 resolution: "is-glob@npm:4.0.3" @@ -12750,15 +12234,6 @@ __metadata: languageName: node linkType: hard -"is-number@npm:^3.0.0": - version: 3.0.0 - resolution: "is-number@npm:3.0.0" - dependencies: - kind-of: "npm:^3.0.2" - checksum: 10/0c62bf8e9d72c4dd203a74d8cfc751c746e75513380fef420cda8237e619a988ee43e678ddb23c87ac24d91ac0fe9f22e4ffb1301a50310c697e9d73ca3994e9 - languageName: node - linkType: hard - "is-number@npm:^7.0.0": version: 7.0.0 resolution: "is-number@npm:7.0.0" @@ -12787,7 +12262,7 @@ __metadata: languageName: node linkType: hard -"is-plain-object@npm:^2.0.1, is-plain-object@npm:^2.0.3, is-plain-object@npm:^2.0.4": +"is-plain-object@npm:^2.0.1, is-plain-object@npm:^2.0.4": version: 2.0.4 resolution: "is-plain-object@npm:2.0.4" dependencies: @@ -12940,13 +12415,6 @@ __metadata: languageName: node linkType: hard -"is-windows@npm:^1.0.2": - version: 1.0.2 - resolution: "is-windows@npm:1.0.2" - checksum: 10/438b7e52656fe3b9b293b180defb4e448088e7023a523ec21a91a80b9ff8cdb3377ddb5b6e60f7c7de4fa8b63ab56e121b6705fe081b3cf1b828b0a380009ad7 - languageName: node - linkType: hard - "is-wsl@npm:^1.1.0": version: 1.1.0 resolution: "is-wsl@npm:1.1.0" @@ -12972,13 +12440,6 @@ __metadata: languageName: node linkType: hard -"isarray@npm:1.0.0, isarray@npm:~1.0.0": - version: 1.0.0 - resolution: "isarray@npm:1.0.0" - checksum: 10/f032df8e02dce8ec565cf2eb605ea939bdccea528dbcf565cdf92bfa2da9110461159d86a537388ef1acef8815a330642d7885b29010e8f7eac967c9993b65ab - languageName: node - linkType: hard - "isarray@npm:^2.0.5": version: 2.0.5 resolution: "isarray@npm:2.0.5" @@ -12986,6 +12447,13 @@ __metadata: languageName: node linkType: hard +"isarray@npm:~1.0.0": + version: 1.0.0 + resolution: "isarray@npm:1.0.0" + checksum: 10/f032df8e02dce8ec565cf2eb605ea939bdccea528dbcf565cdf92bfa2da9110461159d86a537388ef1acef8815a330642d7885b29010e8f7eac967c9993b65ab + languageName: node + linkType: hard + "isexe@npm:^2.0.0": version: 2.0.0 resolution: "isexe@npm:2.0.0" @@ -13007,16 +12475,7 @@ __metadata: languageName: node linkType: hard -"isobject@npm:^2.0.0": - version: 2.1.0 - resolution: "isobject@npm:2.1.0" - dependencies: - isarray: "npm:1.0.0" - checksum: 10/811c6f5a866877d31f0606a88af4a45f282544de886bf29f6a34c46616a1ae2ed17076cc6bf34c0128f33eecf7e1fcaa2c82cf3770560d3e26810894e96ae79f - languageName: node - linkType: hard - -"isobject@npm:^3.0.0, isobject@npm:^3.0.1": +"isobject@npm:^3.0.1": version: 3.0.1 resolution: "isobject@npm:3.0.1" checksum: 10/db85c4c970ce30693676487cca0e61da2ca34e8d4967c2e1309143ff910c207133a969f9e4ddb2dc6aba670aabce4e0e307146c310350b298e74a31f7d464703 @@ -13982,7 +13441,7 @@ __metadata: languageName: node linkType: hard -"kind-of@npm:^3.0.2, kind-of@npm:^3.0.3, kind-of@npm:^3.2.0": +"kind-of@npm:^3.0.2, kind-of@npm:^3.0.3": version: 3.2.2 resolution: "kind-of@npm:3.2.2" dependencies: @@ -13991,15 +13450,6 @@ __metadata: languageName: node linkType: hard -"kind-of@npm:^4.0.0": - version: 4.0.0 - resolution: "kind-of@npm:4.0.0" - dependencies: - is-buffer: "npm:^1.1.5" - checksum: 10/b35a90e0690f06bf07c8970b5290256b1740625fb3bf17ef8c9813a9e197302dbe9ad710b0d97a44556c9280becfc2132cbc3b370056f63b7e350a85f79088f1 - languageName: node - linkType: hard - "kind-of@npm:^6.0.2, kind-of@npm:^6.0.3": version: 6.0.3 resolution: "kind-of@npm:6.0.3" @@ -14550,16 +14000,6 @@ __metadata: languageName: node linkType: hard -"loud-rejection@npm:^1.0.0": - version: 1.6.0 - resolution: "loud-rejection@npm:1.6.0" - dependencies: - currently-unhandled: "npm:^0.4.1" - signal-exit: "npm:^3.0.0" - checksum: 10/750e12defde34e8cbf263c2bff16f028a89b56e022ad6b368aa7c39495b5ac33f2349a8d00665a9b6d25c030b376396524d8a31eb0dde98aaa97956d7324f927 - languageName: node - linkType: hard - "loupe@npm:^3.1.0": version: 3.1.4 resolution: "loupe@npm:3.1.4" @@ -14729,13 +14169,6 @@ __metadata: languageName: node linkType: hard -"map-cache@npm:^0.2.2": - version: 0.2.2 - resolution: "map-cache@npm:0.2.2" - checksum: 10/3067cea54285c43848bb4539f978a15dedc63c03022abeec6ef05c8cb6829f920f13b94bcaf04142fc6a088318e564c4785704072910d120d55dbc2e0c421969 - languageName: node - linkType: hard - "map-obj@npm:^1.0.0": version: 1.0.1 resolution: "map-obj@npm:1.0.1" @@ -14743,13 +14176,6 @@ __metadata: languageName: node linkType: hard -"map-obj@npm:^2.0.0": - version: 2.0.0 - resolution: "map-obj@npm:2.0.0" - checksum: 10/77d2b7b03398a71c84bd7df8ab7be2139e5459fc1e18dbb5f15055fe7284bec0fc37fe410185b5f8ca2e3c3e01fd0fd1f946c579607878adb26cad1cd75314aa - languageName: node - linkType: hard - "map-obj@npm:^4.0.0": version: 4.3.0 resolution: "map-obj@npm:4.3.0" @@ -14757,15 +14183,6 @@ __metadata: languageName: node linkType: hard -"map-visit@npm:^1.0.0": - version: 1.0.0 - resolution: "map-visit@npm:1.0.0" - dependencies: - object-visit: "npm:^1.0.0" - checksum: 10/c27045a5021c344fc19b9132eb30313e441863b2951029f8f8b66f79d3d8c1e7e5091578075a996f74e417479506fe9ede28c44ca7bc351a61c9d8073daec36a - languageName: node - linkType: hard - "math-intrinsics@npm:^1.1.0": version: 1.1.0 resolution: "math-intrinsics@npm:1.1.0" @@ -14822,23 +14239,6 @@ __metadata: languageName: node linkType: hard -"meow@npm:^5.0.0": - version: 5.0.0 - resolution: "meow@npm:5.0.0" - dependencies: - camelcase-keys: "npm:^4.0.0" - decamelize-keys: "npm:^1.0.0" - loud-rejection: "npm:^1.0.0" - minimist-options: "npm:^3.0.1" - normalize-package-data: "npm:^2.3.4" - read-pkg-up: "npm:^3.0.0" - redent: "npm:^2.0.0" - trim-newlines: "npm:^2.0.0" - yargs-parser: "npm:^10.0.0" - checksum: 10/921efd57a9155fa1cd8d431f9642aebd1aa342921e1d9bbf45baa7f1f6328c73ece1c1063443f003e512e91b2d48a2ef50672e5394436aa2cbce02c620d25edd - languageName: node - linkType: hard - "meow@npm:^8.1.2": version: 8.1.2 resolution: "meow@npm:8.1.2" @@ -14872,7 +14272,7 @@ __metadata: languageName: node linkType: hard -"merge2@npm:^1.2.3, merge2@npm:^1.3.0": +"merge2@npm:^1.3.0": version: 1.4.1 resolution: "merge2@npm:1.4.1" checksum: 10/7268db63ed5169466540b6fb947aec313200bcf6d40c5ab722c22e242f651994619bcd85601602972d3c85bd2cc45a358a4c61937e9f11a061919a1da569b0c2 @@ -14886,27 +14286,6 @@ __metadata: languageName: node linkType: hard -"micromatch@npm:^3.1.10": - version: 3.1.10 - resolution: "micromatch@npm:3.1.10" - dependencies: - arr-diff: "npm:^4.0.0" - array-unique: "npm:^0.3.2" - braces: "npm:^2.3.1" - define-property: "npm:^2.0.2" - extend-shallow: "npm:^3.0.2" - extglob: "npm:^2.0.4" - fragment-cache: "npm:^0.2.1" - kind-of: "npm:^6.0.2" - nanomatch: "npm:^1.2.9" - object.pick: "npm:^1.3.0" - regex-not: "npm:^1.0.0" - snapdragon: "npm:^0.8.1" - to-regex: "npm:^3.0.2" - checksum: 10/4102bac83685dc7882ca1a28443d158b464653f84450de68c07cf77dbd531ed98c25006e9d9f6082bf3b95aabbff4cf231b26fd3bc84f7c4e7f263376101fad6 - languageName: node - linkType: hard - "micromatch@npm:^4.0.2, micromatch@npm:^4.0.4, micromatch@npm:^4.0.5, micromatch@npm:^4.0.8": version: 4.0.8 resolution: "micromatch@npm:4.0.8" @@ -15053,16 +14432,6 @@ __metadata: languageName: node linkType: hard -"minimist-options@npm:^3.0.1": - version: 3.0.2 - resolution: "minimist-options@npm:3.0.2" - dependencies: - arrify: "npm:^1.0.1" - is-plain-obj: "npm:^1.1.0" - checksum: 10/f111ff4a3371312f3827bc5a519d757bd5bd8406599193b6cd32b8137eeaee74dd8f1896b66778ac26069ecbaee0659dd0ca4b65c6ec9d0683b09a9573e4f389 - languageName: node - linkType: hard - "minimist@npm:^1.2.0, minimist@npm:^1.2.5, minimist@npm:^1.2.6": version: 1.2.8 resolution: "minimist@npm:1.2.8" @@ -15210,16 +14579,6 @@ __metadata: languageName: node linkType: hard -"mixin-deep@npm:^1.2.0": - version: 1.3.2 - resolution: "mixin-deep@npm:1.3.2" - dependencies: - for-in: "npm:^1.0.2" - is-extendable: "npm:^1.0.1" - checksum: 10/820d5a51fcb7479f2926b97f2c3bb223546bc915e6b3a3eb5d906dda871bba569863595424a76682f2b15718252954644f3891437cb7e3f220949bed54b1750d - languageName: node - linkType: hard - "mkdirp@npm:^0.5.1": version: 0.5.6 resolution: "mkdirp@npm:0.5.6" @@ -15362,25 +14721,6 @@ __metadata: languageName: node linkType: hard -"nanomatch@npm:^1.2.9": - version: 1.2.13 - resolution: "nanomatch@npm:1.2.13" - dependencies: - arr-diff: "npm:^4.0.0" - array-unique: "npm:^0.3.2" - define-property: "npm:^2.0.2" - extend-shallow: "npm:^3.0.2" - fragment-cache: "npm:^0.2.1" - is-windows: "npm:^1.0.2" - kind-of: "npm:^6.0.2" - object.pick: "npm:^1.3.0" - regex-not: "npm:^1.0.0" - snapdragon: "npm:^0.8.1" - to-regex: "npm:^3.0.1" - checksum: 10/5c4ec7d6264b93795248f22d19672f0b972f900772c057bc67e43ae4999165b5fea7b937359efde78707930a460ceaa6d93e0732ac1d993dab8654655a2e959b - languageName: node - linkType: hard - "natural-compare@npm:^1.4.0": version: 1.4.0 resolution: "natural-compare@npm:1.4.0" @@ -15445,13 +14785,6 @@ __metadata: languageName: node linkType: hard -"nested-error-stacks@npm:^2.0.0, nested-error-stacks@npm:^2.1.0": - version: 2.1.1 - resolution: "nested-error-stacks@npm:2.1.1" - checksum: 10/5f452fad75db8480b4db584e1602894ff5977f8bf3d2822f7ba5cb7be80e89adf1fffa34dada3347ef313a4288850b4486eb0635b315c32bdfb505577e8880e3 - languageName: node - linkType: hard - "no-case@npm:^3.0.4": version: 3.0.4 resolution: "no-case@npm:3.0.4" @@ -15608,7 +14941,7 @@ __metadata: languageName: node linkType: hard -"normalize-package-data@npm:^2.3.2, normalize-package-data@npm:^2.3.4, normalize-package-data@npm:^2.5.0": +"normalize-package-data@npm:^2.3.2, normalize-package-data@npm:^2.5.0": version: 2.5.0 resolution: "normalize-package-data@npm:2.5.0" dependencies: @@ -15878,17 +15211,6 @@ __metadata: languageName: node linkType: hard -"object-copy@npm:^0.1.0": - version: 0.1.0 - resolution: "object-copy@npm:0.1.0" - dependencies: - copy-descriptor: "npm:^0.1.0" - define-property: "npm:^0.2.5" - kind-of: "npm:^3.0.3" - checksum: 10/a9e35f07e3a2c882a7e979090360d1a20ab51d1fa19dfdac3aa8873b328a7c4c7683946ee97c824ae40079d848d6740a3788fa14f2185155dab7ed970a72c783 - languageName: node - linkType: hard - "object-inspect@npm:^1.13.3, object-inspect@npm:^1.13.4, object-inspect@npm:^1.7.0": version: 1.13.4 resolution: "object-inspect@npm:1.13.4" @@ -15920,15 +15242,6 @@ __metadata: languageName: node linkType: hard -"object-visit@npm:^1.0.0": - version: 1.0.1 - resolution: "object-visit@npm:1.0.1" - dependencies: - isobject: "npm:^3.0.0" - checksum: 10/77abf807de86fa65bf1ba92699b45b1e5485f2d899300d5cb92cca0863909e9528b6cbf366c237c9f5d2264dab6cfbeda2201252ed0e605ae1b3e263515c5cea - languageName: node - linkType: hard - "object.assign@npm:^4.1.0, object.assign@npm:^4.1.4, object.assign@npm:^4.1.5, object.assign@npm:^4.1.7": version: 4.1.7 resolution: "object.assign@npm:4.1.7" @@ -16010,7 +15323,7 @@ __metadata: languageName: node linkType: hard -"object.pick@npm:^1.1.1, object.pick@npm:^1.3.0": +"object.pick@npm:^1.1.1": version: 1.3.0 resolution: "object.pick@npm:1.3.0" dependencies: @@ -16614,20 +15927,6 @@ __metadata: languageName: node linkType: hard -"pascalcase@npm:^0.1.1": - version: 0.1.1 - resolution: "pascalcase@npm:0.1.1" - checksum: 10/f83681c3c8ff75fa473a2bb2b113289952f802ff895d435edd717e7cb898b0408cbdb247117a938edcbc5d141020909846cc2b92c47213d764e2a94d2ad2b925 - languageName: node - linkType: hard - -"path-dirname@npm:^1.0.0": - version: 1.0.2 - resolution: "path-dirname@npm:1.0.2" - checksum: 10/0d2f6604ae05a252a0025318685f290e2764ecf9c5436f203cdacfc8c0b17c24cdedaa449d766beb94ab88cc7fc70a09ec21e7933f31abc2b719180883e5e33f - languageName: node - linkType: hard - "path-exists@npm:^3.0.0": version: 3.0.0 resolution: "path-exists@npm:3.0.0" @@ -16822,13 +16121,6 @@ __metadata: languageName: node linkType: hard -"posix-character-classes@npm:^0.1.0": - version: 0.1.1 - resolution: "posix-character-classes@npm:0.1.1" - checksum: 10/dedb99913c60625a16050cfed2fb5c017648fc075be41ac18474e1c6c3549ef4ada201c8bd9bd006d36827e289c571b6092e1ef6e756cdbab2fd7046b25c6442 - languageName: node - linkType: hard - "possible-typed-array-names@npm:^1.0.0": version: 1.1.0 resolution: "possible-typed-array-names@npm:1.1.0" @@ -17658,13 +16950,6 @@ __metadata: languageName: node linkType: hard -"quick-lru@npm:^1.0.0": - version: 1.1.0 - resolution: "quick-lru@npm:1.1.0" - checksum: 10/7fd3fb3fb19dfc1d32bc0799c336f5867adc9ba3d9a662a50fdb463d2bb27d9c89b5e55b01a51fe09c3e251389ea858e1c38326bac8f550ff92dcebbf26665a3 - languageName: node - linkType: hard - "quick-lru@npm:^4.0.1": version: 4.0.1 resolution: "quick-lru@npm:4.0.1" @@ -18405,16 +17690,6 @@ __metadata: languageName: node linkType: hard -"redent@npm:^2.0.0": - version: 2.0.0 - resolution: "redent@npm:2.0.0" - dependencies: - indent-string: "npm:^3.0.0" - strip-indent: "npm:^2.0.0" - checksum: 10/c3bcea97de01023efbe826cd72abf2e5948e096acd808a498b4de5dd25e64ad8df0cb4218403197b4ea050ce73f2264a318bf469a27f87ba8ca31543892011d4 - languageName: node - linkType: hard - "redent@npm:^3.0.0": version: 3.0.0 resolution: "redent@npm:3.0.0" @@ -18626,16 +17901,6 @@ __metadata: languageName: node linkType: hard -"regex-not@npm:^1.0.0, regex-not@npm:^1.0.2": - version: 1.0.2 - resolution: "regex-not@npm:1.0.2" - dependencies: - extend-shallow: "npm:^3.0.2" - safe-regex: "npm:^1.1.0" - checksum: 10/3081403de79559387a35ef9d033740e41818a559512668cef3d12da4e8a29ef34ee13c8ed1256b07e27ae392790172e8a15c8a06b72962fd4550476cde3d8f77 - languageName: node - linkType: hard - "regexp.prototype.flags@npm:^1.5.3, regexp.prototype.flags@npm:^1.5.4": version: 1.5.4 resolution: "regexp.prototype.flags@npm:1.5.4" @@ -18731,14 +17996,7 @@ __metadata: languageName: node linkType: hard -"repeat-element@npm:^1.1.2": - version: 1.1.4 - resolution: "repeat-element@npm:1.1.4" - checksum: 10/1edd0301b7edad71808baad226f0890ba709443f03a698224c9ee4f2494c317892dc5211b2ba8cbea7194a9ddbcac01e283bd66de0467ab24ee1fc1a3711d8a9 - languageName: node - linkType: hard - -"repeat-string@npm:^1.5.2, repeat-string@npm:^1.6.1": +"repeat-string@npm:^1.5.2": version: 1.6.1 resolution: "repeat-string@npm:1.6.1" checksum: 10/1b809fc6db97decdc68f5b12c4d1a671c8e3f65ec4a40c238bc5200e44e85bcc52a54f78268ab9c29fcf5fe4f1343e805420056d1f30fa9a9ee4c2d93e3cc6c0 @@ -18796,13 +18054,6 @@ __metadata: languageName: node linkType: hard -"resolve-url@npm:^0.2.1": - version: 0.2.1 - resolution: "resolve-url@npm:0.2.1" - checksum: 10/c8bbf6385730add6657103929ebd7e4aa623a2c2df29bba28a58fec73097c003edcce475efefa51c448a904aa344a4ebabe6ad85c8e75c72c4ce9a0c0b5652d2 - languageName: node - linkType: hard - "resolve.exports@npm:2.0.3": version: 2.0.3 resolution: "resolve.exports@npm:2.0.3" @@ -19079,7 +18330,7 @@ __metadata: languageName: node linkType: hard -"safe-buffer@npm:5.2.1, safe-buffer@npm:>=5.1.0, safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.0, safe-buffer@npm:~5.2.0": +"safe-buffer@npm:5.2.1, safe-buffer@npm:>=5.1.0, safe-buffer@npm:^5.1.0, safe-buffer@npm:~5.2.0": version: 5.2.1 resolution: "safe-buffer@npm:5.2.1" checksum: 10/32872cd0ff68a3ddade7a7617b8f4c2ae8764d8b7d884c651b74457967a9e0e886267d3ecc781220629c44a865167b61c375d2da6c720c840ecd73f45d5d9451 @@ -19114,15 +18365,6 @@ __metadata: languageName: node linkType: hard -"safe-regex@npm:^1.1.0": - version: 1.1.0 - resolution: "safe-regex@npm:1.1.0" - dependencies: - ret: "npm:~0.1.10" - checksum: 10/5405b5a3effed649e6133d51d45cecbbbb02a1dd8d5b78a5e7979a69035870c817a5d2682d0ebb62188d3a840f7b24ea00ebbad2e418d5afabed151e8db96d04 - languageName: node - linkType: hard - "safer-buffer@npm:>= 2.1.2 < 3, safer-buffer@npm:>= 2.1.2 < 3.0.0": version: 2.1.2 resolution: "safer-buffer@npm:2.1.2" @@ -19766,18 +19008,6 @@ __metadata: languageName: node linkType: hard -"set-value@npm:^2.0.0, set-value@npm:^2.0.1": - version: 2.0.1 - resolution: "set-value@npm:2.0.1" - dependencies: - extend-shallow: "npm:^2.0.1" - is-extendable: "npm:^0.1.1" - is-plain-object: "npm:^2.0.3" - split-string: "npm:^3.0.1" - checksum: 10/4f1ccac2e9ad4d1b0851761d41df4bbd3780ed69805f24a80ab237a56d9629760b7b98551cd370931620defe5da329645834e1e9a18574cecad09ce7b2b83296 - languageName: node - linkType: hard - "setimmediate@npm:^1.0.5": version: 1.0.5 resolution: "setimmediate@npm:1.0.5" @@ -19886,7 +19116,7 @@ __metadata: languageName: node linkType: hard -"signal-exit@npm:3.0.7, signal-exit@npm:^3.0.0, signal-exit@npm:^3.0.2, signal-exit@npm:^3.0.3, signal-exit@npm:^3.0.7": +"signal-exit@npm:3.0.7, signal-exit@npm:^3.0.2, signal-exit@npm:^3.0.3, signal-exit@npm:^3.0.7": version: 3.0.7 resolution: "signal-exit@npm:3.0.7" checksum: 10/a2f098f247adc367dffc27845853e9959b9e88b01cb301658cfe4194352d8d2bb32e18467c786a7fe15f1d44b233ea35633d076d5e737870b7139949d1ab6318 @@ -20092,13 +19322,6 @@ __metadata: languageName: node linkType: hard -"slash@npm:^2.0.0": - version: 2.0.0 - resolution: "slash@npm:2.0.0" - checksum: 10/512d4350735375bd11647233cb0e2f93beca6f53441015eea241fe784d8068281c3987fbaa93e7ef1c38df68d9c60013045c92837423c69115297d6169aa85e6 - languageName: node - linkType: hard - "slash@npm:^5.0.0": version: 5.1.0 resolution: "slash@npm:5.1.0" @@ -20113,42 +19336,6 @@ __metadata: languageName: node linkType: hard -"snapdragon-node@npm:^2.0.1": - version: 2.1.1 - resolution: "snapdragon-node@npm:2.1.1" - dependencies: - define-property: "npm:^1.0.0" - isobject: "npm:^3.0.0" - snapdragon-util: "npm:^3.0.1" - checksum: 10/093c3584efc51103d8607d28cb7a3079f7e371b2320a60c685a84a57956cf9693f3dec8b2f77250ba48063cf42cb5261f3970e6d3bb7e68fd727299c991e0bff - languageName: node - linkType: hard - -"snapdragon-util@npm:^3.0.1": - version: 3.0.1 - resolution: "snapdragon-util@npm:3.0.1" - dependencies: - kind-of: "npm:^3.2.0" - checksum: 10/b776b15bf683c9ac0243582d7b13f2070f85c9036d73c2ba31da61d1effe22d4a39845b6f43ce7e7ec82c7e686dc47d9c3cffa1a75327bb16505b9afc34f516d - languageName: node - linkType: hard - -"snapdragon@npm:^0.8.1": - version: 0.8.2 - resolution: "snapdragon@npm:0.8.2" - dependencies: - base: "npm:^0.11.1" - debug: "npm:^2.2.0" - define-property: "npm:^0.2.5" - extend-shallow: "npm:^2.0.1" - map-cache: "npm:^0.2.2" - source-map: "npm:^0.5.6" - source-map-resolve: "npm:^0.5.0" - use: "npm:^3.1.0" - checksum: 10/cbe35b25dca5504be0ced90d907948d8efeda0b118d9a032bfc499e22b7f78515832f2706d9c9297c87906eaa51c12bfcaa8ea5a4f3e98ecf1116a73428e344a - languageName: node - linkType: hard - "socket.io-adapter@npm:~2.5.2": version: 2.5.5 resolution: "socket.io-adapter@npm:2.5.5" @@ -20261,19 +19448,6 @@ __metadata: languageName: node linkType: hard -"source-map-resolve@npm:^0.5.0": - version: 0.5.3 - resolution: "source-map-resolve@npm:0.5.3" - dependencies: - atob: "npm:^2.1.2" - decode-uri-component: "npm:^0.2.0" - resolve-url: "npm:^0.2.1" - source-map-url: "npm:^0.4.0" - urix: "npm:^0.1.0" - checksum: 10/98e281cceb86b80c8bd3453110617b9df93132d6a50c7bf5847b5d74b4b5d6e1d4d261db276035b9b7e5ba7f32c2d6a0d2c13d581e37870a0219a524402efcab - languageName: node - linkType: hard - "source-map-support@npm:0.5.13": version: 0.5.13 resolution: "source-map-support@npm:0.5.13" @@ -20294,20 +19468,6 @@ __metadata: languageName: node linkType: hard -"source-map-url@npm:^0.4.0": - version: 0.4.1 - resolution: "source-map-url@npm:0.4.1" - checksum: 10/7fec0460ca017330568e1a4d67c80c397871f27d75b034e1117eaa802076db5cda5944659144d26eafd2a95008ada19296c8e0d5ec116302c32c6daa4e430003 - languageName: node - linkType: hard - -"source-map@npm:^0.5.6": - version: 0.5.7 - resolution: "source-map@npm:0.5.7" - checksum: 10/9b4ac749ec5b5831cad1f8cc4c19c4298ebc7474b24a0acf293e2f040f03f8eeccb3d01f12aa0f90cf46d555c887e03912b83a042c627f419bda5152d89c5269 - languageName: node - linkType: hard - "source-map@npm:^0.6.0, source-map@npm:^0.6.1, source-map@npm:~0.6.0, source-map@npm:~0.6.1": version: 0.6.1 resolution: "source-map@npm:0.6.1" @@ -20383,15 +19543,6 @@ __metadata: languageName: node linkType: hard -"split-string@npm:^3.0.1, split-string@npm:^3.0.2": - version: 3.1.0 - resolution: "split-string@npm:3.1.0" - dependencies: - extend-shallow: "npm:^3.0.0" - checksum: 10/f31f4709d2b14fe4ff46b4fb88b2fb68a1c59b59e573c5417907c182397ddb2cb67903232bdc3a8b9dd3bb660c6f533ff11b5d624aff7b1fe0a213e3e4c75f20 - languageName: node - linkType: hard - "split2@npm:^3.2.2": version: 3.2.2 resolution: "split2@npm:3.2.2" @@ -20460,16 +19611,6 @@ __metadata: languageName: node linkType: hard -"static-extend@npm:^0.1.1": - version: 0.1.2 - resolution: "static-extend@npm:0.1.2" - dependencies: - define-property: "npm:^0.2.5" - object-copy: "npm:^0.1.0" - checksum: 10/8657485b831f79e388a437260baf22784540417a9b29e11572c87735df24c22b84eda42107403a64b30861b2faf13df9f7fc5525d51f9d1d2303aba5cbf4e12c - languageName: node - linkType: hard - "statuses@npm:2.0.1": version: 2.0.1 resolution: "statuses@npm:2.0.1" @@ -20735,13 +19876,6 @@ __metadata: languageName: node linkType: hard -"strip-indent@npm:^2.0.0": - version: 2.0.0 - resolution: "strip-indent@npm:2.0.0" - checksum: 10/7d9080d02ddace616ebbc17846e41d3880cb147e2a81e51142281322ded6b05b230a4fb12c2e5266f62735cf8f5fb9839e55d74799d11f26bcc8c71ca049a0ba - languageName: node - linkType: hard - "strip-indent@npm:^3.0.0": version: 3.0.0 resolution: "strip-indent@npm:3.0.0" @@ -21362,25 +20496,6 @@ __metadata: languageName: node linkType: hard -"to-object-path@npm:^0.3.0": - version: 0.3.0 - resolution: "to-object-path@npm:0.3.0" - dependencies: - kind-of: "npm:^3.0.2" - checksum: 10/9425effee5b43e61d720940fa2b889623f77473d459c2ce3d4a580a4405df4403eec7be6b857455908070566352f9e2417304641ed158dda6f6a365fe3e66d70 - languageName: node - linkType: hard - -"to-regex-range@npm:^2.1.0": - version: 2.1.1 - resolution: "to-regex-range@npm:2.1.1" - dependencies: - is-number: "npm:^3.0.0" - repeat-string: "npm:^1.6.1" - checksum: 10/2eed5f897188de8ec8745137f80c0f564810082d506278dd6a80db4ea313b6d363ce8d7dc0e0406beeaba0bb7f90f01b41fa3d08fb72dd02c329b2ec579cd4e8 - languageName: node - linkType: hard - "to-regex-range@npm:^5.0.1": version: 5.0.1 resolution: "to-regex-range@npm:5.0.1" @@ -21390,18 +20505,6 @@ __metadata: languageName: node linkType: hard -"to-regex@npm:^3.0.1, to-regex@npm:^3.0.2": - version: 3.0.2 - resolution: "to-regex@npm:3.0.2" - dependencies: - define-property: "npm:^2.0.2" - extend-shallow: "npm:^3.0.2" - regex-not: "npm:^1.0.2" - safe-regex: "npm:^1.1.0" - checksum: 10/ab87c22f0719f7def00145b53e2c90d2fdcc75efa0fec1227b383aaf88ed409db2542b2b16bcbfbf95fe0727f879045803bb635b777c0306762241ca3e5562c6 - languageName: node - linkType: hard - "to-space-case@npm:^1.0.0": version: 1.0.0 resolution: "to-space-case@npm:1.0.0" @@ -21475,13 +20578,6 @@ __metadata: languageName: node linkType: hard -"trim-newlines@npm:^2.0.0": - version: 2.0.0 - resolution: "trim-newlines@npm:2.0.0" - checksum: 10/8a288a860f051f585bdda07ffb97e9e0791ca7c5c1c025b6af4badac185f2eed23ccedeb54da2a79e06ead69824d69b6c9c35c7a69c48e07ee56ac76f91c3096 - languageName: node - linkType: hard - "trim-newlines@npm:^3.0.0": version: 3.0.1 resolution: "trim-newlines@npm:3.0.1" @@ -21889,18 +20985,6 @@ __metadata: languageName: node linkType: hard -"union-value@npm:^1.0.0": - version: 1.0.1 - resolution: "union-value@npm:1.0.1" - dependencies: - arr-union: "npm:^3.1.0" - get-value: "npm:^2.0.6" - is-extendable: "npm:^0.1.1" - set-value: "npm:^2.0.1" - checksum: 10/a3464097d3f27f6aa90cf103ed9387541bccfc006517559381a10e0dffa62f465a9d9a09c9b9c3d26d0f4cbe61d4d010e2fbd710fd4bf1267a768ba8a774b0ba - languageName: node - linkType: hard - "unique-filename@npm:^1.1.1": version: 1.1.1 resolution: "unique-filename@npm:1.1.1" @@ -21993,16 +21077,6 @@ __metadata: languageName: node linkType: hard -"unset-value@npm:^1.0.0": - version: 1.0.0 - resolution: "unset-value@npm:1.0.0" - dependencies: - has-value: "npm:^0.3.1" - isobject: "npm:^3.0.0" - checksum: 10/0ca644870613dece963e4abb762b0da4c1cf6be4ac2f0859a463e4e9520c1ec85e512cfbfd73371ee0bb09ef536a0c4abd6f2c357715a08b43448aedc82acee6 - languageName: node - linkType: hard - "upath@npm:2.0.1": version: 2.0.1 resolution: "upath@npm:2.0.1" @@ -22033,13 +21107,6 @@ __metadata: languageName: node linkType: hard -"urix@npm:^0.1.0": - version: 0.1.0 - resolution: "urix@npm:0.1.0" - checksum: 10/ebf5df5491c1d40ea88f7529ee9d8fd6501f44c47b8017d168fd1558d40f7d613c6f39869643344e58b71ba2da357a7c26f353a2a54d416492fcdca81f05b338 - languageName: node - linkType: hard - "url-loader@npm:1.1.2": version: 1.1.2 resolution: "url-loader@npm:1.1.2" @@ -22072,13 +21139,6 @@ __metadata: languageName: node linkType: hard -"use@npm:^3.1.0": - version: 3.1.1 - resolution: "use@npm:3.1.1" - checksum: 10/08a130289f5238fcbf8f59a18951286a6e660d17acccc9d58d9b69dfa0ee19aa038e8f95721b00b432c36d1629a9e32a464bf2e7e0ae6a244c42ddb30bdd8b33 - languageName: node - linkType: hard - "users@workspace:Dnn.AdminExperience/ClientSide/Users.Web": version: 0.0.0-use.local resolution: "users@workspace:Dnn.AdminExperience/ClientSide/Users.Web" @@ -23034,15 +22094,6 @@ __metadata: languageName: node linkType: hard -"yargs-parser@npm:^10.0.0": - version: 10.1.0 - resolution: "yargs-parser@npm:10.1.0" - dependencies: - camelcase: "npm:^4.1.0" - checksum: 10/7be10b61334ce1b08e1d4cd3587ec9a2f2229b48c95333a0ddeac8e7ea00520513914ae1f4694a4e29ec97048d42c3835de61fd0864767c45d8ac0afd837a02f - languageName: node - linkType: hard - "yargs-parser@npm:^20.2.2, yargs-parser@npm:^20.2.3": version: 20.2.9 resolution: "yargs-parser@npm:20.2.9" From c20cf72376cc1eab0e237d24e7771d40ca0dbcf1 Mon Sep 17 00:00:00 2001 From: Brian Dukes Date: Tue, 21 Oct 2025 16:46:49 -0500 Subject: [PATCH 103/199] Bump dayjs to 1.11.18 --- .../ClientSide/Bundle.Web/package.json | 132 +++++++-------- .../ClientSide/Dnn.React.Common/package.json | 2 +- .../ClientSide/Pages.Web/package.json | 150 +++++++++--------- .../ClientSide/Servers.Web/package.json | 2 +- .../Sites.Web/src/_exportables/package.json | 2 +- .../Users.Web/src/_exportables/package.json | 98 ++++++------ yarn.lock | 20 +-- 7 files changed, 203 insertions(+), 203 deletions(-) diff --git a/Dnn.AdminExperience/ClientSide/Bundle.Web/package.json b/Dnn.AdminExperience/ClientSide/Bundle.Web/package.json index 1655a46f599..bc83d3fab75 100644 --- a/Dnn.AdminExperience/ClientSide/Bundle.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Bundle.Web/package.json @@ -1,66 +1,66 @@ -{ - "name": "export-bundle", - "version": "10.1.0", - "private": true, - "scripts": { - "build": "set NODE_ENV=production&&webpack --mode production --progress", - "debug": "set NODE_ENV=debug&&webpack --mode production --progress", - "watch": "set NODE_ENV=debug & webpack --mode=development --progress --watch", - "analyze": "set NODE_ENV=production&&webpack --config webpack.config.js --profile --json > stats.json&&webpack-bundle-analyzer stats.json", - "lint": "eslint --fix" - }, - "devDependencies": { - "@babel/core": "^7.28.4", - "@babel/plugin-proposal-object-rest-spread": "^7.20.7", - "@babel/preset-env": "^7.28.3", - "@babel/preset-react": "^7.27.1", - "babel-loader": "^10.0.0", - "babel-plugin-transform-object-assign": "6.22.0", - "babel-plugin-transform-object-rest-spread": "6.26.0", - "babel-plugin-transform-react-remove-prop-types": "0.4.24", - "babel-polyfill": "6.26.0", - "create-react-class": "^15.7.0", - "css-loader": "^7.1.2", - "dayjs": "^1.11.9", - "es6-promise": "4.2.8", - "eslint": "9.38.0", - "eslint-plugin-react": "7.37.5", - "eslint-webpack-plugin": "^5.0.2", - "file-loader": "4.2.0", - "globals": "^16.4.0", - "json-loader": "^0.5.7", - "less": "4.1.3", - "less-loader": "12.2.0", - "prop-types": "^15.8.1", - "raw-loader": "4.0.2", - "react": "^16.14.0", - "react-collapse": "5.1.1", - "react-custom-scrollbars": "4.2.1", - "react-dom": "^16.14.0", - "react-height": "3.0.2", - "react-hot-loader": "4.13.1", - "react-modal": "3.16.1", - "react-motion": "0.5.2", - "react-redux": "8.1.1", - "react-tabs": "3.2.3", - "react-tooltip": "4.5.1", - "react-widgets": "^5.8.4", - "redux": "4.2.1", - "redux-devtools": "3.7.0", - "redux-devtools-dock-monitor": "1.2.0", - "redux-devtools-log-monitor": "2.1.0", - "redux-immutable-state-invariant": "2.1.0", - "redux-thunk": "2.4.2", - "source-map-loader": "^0.2.4", - "style-loader": "4.0.0", - "throttle-debounce": "5.0.0", - "url-loader": "1.1.2", - "webpack": "5.94.0", - "webpack-bundle-analyzer": "^4.9.0", - "webpack-cli": "5.1.4", - "webpack-dev-server": "5.2.1" - }, - "dependencies": { - "@dnnsoftware/dnn-react-common": "10.1.0" - } -} +{ + "name": "export-bundle", + "version": "10.1.0", + "private": true, + "scripts": { + "build": "set NODE_ENV=production&&webpack --mode production --progress", + "debug": "set NODE_ENV=debug&&webpack --mode production --progress", + "watch": "set NODE_ENV=debug & webpack --mode=development --progress --watch", + "analyze": "set NODE_ENV=production&&webpack --config webpack.config.js --profile --json > stats.json&&webpack-bundle-analyzer stats.json", + "lint": "eslint --fix" + }, + "devDependencies": { + "@babel/core": "^7.28.4", + "@babel/plugin-proposal-object-rest-spread": "^7.20.7", + "@babel/preset-env": "^7.28.3", + "@babel/preset-react": "^7.27.1", + "babel-loader": "^10.0.0", + "babel-plugin-transform-object-assign": "6.22.0", + "babel-plugin-transform-object-rest-spread": "6.26.0", + "babel-plugin-transform-react-remove-prop-types": "0.4.24", + "babel-polyfill": "6.26.0", + "create-react-class": "^15.7.0", + "css-loader": "^7.1.2", + "dayjs": "^1.11.18", + "es6-promise": "4.2.8", + "eslint": "9.38.0", + "eslint-plugin-react": "7.37.5", + "eslint-webpack-plugin": "^5.0.2", + "file-loader": "4.2.0", + "globals": "^16.4.0", + "json-loader": "^0.5.7", + "less": "4.1.3", + "less-loader": "12.2.0", + "prop-types": "^15.8.1", + "raw-loader": "4.0.2", + "react": "^16.14.0", + "react-collapse": "5.1.1", + "react-custom-scrollbars": "4.2.1", + "react-dom": "^16.14.0", + "react-height": "3.0.2", + "react-hot-loader": "4.13.1", + "react-modal": "3.16.1", + "react-motion": "0.5.2", + "react-redux": "8.1.1", + "react-tabs": "3.2.3", + "react-tooltip": "4.5.1", + "react-widgets": "^5.8.4", + "redux": "4.2.1", + "redux-devtools": "3.7.0", + "redux-devtools-dock-monitor": "1.2.0", + "redux-devtools-log-monitor": "2.1.0", + "redux-immutable-state-invariant": "2.1.0", + "redux-thunk": "2.4.2", + "source-map-loader": "^0.2.4", + "style-loader": "4.0.0", + "throttle-debounce": "5.0.0", + "url-loader": "1.1.2", + "webpack": "5.94.0", + "webpack-bundle-analyzer": "^4.9.0", + "webpack-cli": "5.1.4", + "webpack-dev-server": "5.2.1" + }, + "dependencies": { + "@dnnsoftware/dnn-react-common": "10.1.0" + } +} diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/package.json b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/package.json index 76855d0eed5..11e77b614ce 100644 --- a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/package.json +++ b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/package.json @@ -25,7 +25,7 @@ "build-storybook": "storybook build" }, "dependencies": { - "dayjs": "^1.11.9", + "dayjs": "^1.11.18", "interact.js": "^1.2.8", "raw-loader": "4.0.2", "react-accessible-tooltip": "^2.0.3", diff --git a/Dnn.AdminExperience/ClientSide/Pages.Web/package.json b/Dnn.AdminExperience/ClientSide/Pages.Web/package.json index 2e79ef678d0..708368a5921 100644 --- a/Dnn.AdminExperience/ClientSide/Pages.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Pages.Web/package.json @@ -1,75 +1,75 @@ -{ - "name": "pages", - "version": "10.1.0", - "private": true, - "scripts": { - "start": "npm run webpack", - "test": "jest", - "test:watch": "jest --watch", - "build": "set NODE_ENV=production&&webpack --mode production", - "debug": "set NODE_ENV=debug&&webpack --mode production", - "watch": "set NODE_ENV=debug & webpack --mode=development --progress --watch", - "analyze": "set NODE_ENV=production&&webpack --mode production --json | webpack-bundle-size-analyzer", - "lint": "eslint --fix" - }, - "jest": { - "setupTestFrameworkScriptFile": "./src/jest.config.js" - }, - "peerDependencies": { - "es6-promise": "4.0.5" - }, - "devDependencies": { - "@babel/core": "^7.28.4", - "@babel/plugin-proposal-object-rest-spread": "^7.20.7", - "@babel/preset-env": "^7.28.3", - "@babel/preset-react": "^7.27.1", - "@dnnsoftware/dnn-react-common": "10.1.0", - "@types/knockout": "^3.4.77", - "@types/redux": "3.6.31", - "babel-eslint": "^10.1.0", - "babel-jest": "^30.2.0", - "babel-loader": "10.0.0", - "babel-plugin-transform-object-assign": "^6.22.0", - "babel-plugin-transform-object-rest-spread": "6.26.0", - "babel-plugin-transform-react-remove-prop-types": "0.4.24", - "babel-polyfill": "6.26.0", - "babel-preset-es2015": "6.24.1", - "babel-preset-react": "6.24.1", - "create-react-class": "^15.7.0", - "css-loader": "^7.1.2", - "enzyme": "^3.11.0", - "enzyme-adapter-react-16": "^1.15.7", - "eslint": "^9.38.0", - "eslint-plugin-react": "7.37.5", - "eslint-webpack-plugin": "^5.0.2", - "file-loader": "6.2.0", - "globals": "^16.4.0", - "jest": "^28.1.3", - "less": "4.1.3", - "less-loader": "12.2.0", - "lodash": "4.17.21", - "raw-loader": "4.0.2", - "react-custom-scrollbars": "4.2.1", - "react-dom": "^16.14.0", - "react-hot-loader": "4.13.1", - "react-test-renderer": "^17.0.2", - "react-widgets": "5.8.4", - "string.prototype.startswith": "1.0.1", - "style-loader": "^4.0.0", - "throttle-debounce": "^5.0.0", - "uglifyjs-webpack-plugin": "^2.2.0", - "url-loader": "1.1.2", - "webpack": "5.94.0", - "webpack-bundle-size-analyzer": "3.1.0", - "webpack-cli": "5.1.4", - "webpack-dev-server": "5.2.1" - }, - "dependencies": { - "dayjs": "^1.11.9", - "promise": "^8.3.0", - "prop-types": "^15.8.1", - "react": "^16.14.0", - "react-day-picker": "^7.4.10", - "url-parse": "^1.5.10" - } -} +{ + "name": "pages", + "version": "10.1.0", + "private": true, + "scripts": { + "start": "npm run webpack", + "test": "jest", + "test:watch": "jest --watch", + "build": "set NODE_ENV=production&&webpack --mode production", + "debug": "set NODE_ENV=debug&&webpack --mode production", + "watch": "set NODE_ENV=debug & webpack --mode=development --progress --watch", + "analyze": "set NODE_ENV=production&&webpack --mode production --json | webpack-bundle-size-analyzer", + "lint": "eslint --fix" + }, + "jest": { + "setupTestFrameworkScriptFile": "./src/jest.config.js" + }, + "peerDependencies": { + "es6-promise": "4.0.5" + }, + "devDependencies": { + "@babel/core": "^7.28.4", + "@babel/plugin-proposal-object-rest-spread": "^7.20.7", + "@babel/preset-env": "^7.28.3", + "@babel/preset-react": "^7.27.1", + "@dnnsoftware/dnn-react-common": "10.1.0", + "@types/knockout": "^3.4.77", + "@types/redux": "3.6.31", + "babel-eslint": "^10.1.0", + "babel-jest": "^30.2.0", + "babel-loader": "10.0.0", + "babel-plugin-transform-object-assign": "^6.22.0", + "babel-plugin-transform-object-rest-spread": "6.26.0", + "babel-plugin-transform-react-remove-prop-types": "0.4.24", + "babel-polyfill": "6.26.0", + "babel-preset-es2015": "6.24.1", + "babel-preset-react": "6.24.1", + "create-react-class": "^15.7.0", + "css-loader": "^7.1.2", + "enzyme": "^3.11.0", + "enzyme-adapter-react-16": "^1.15.7", + "eslint": "^9.38.0", + "eslint-plugin-react": "7.37.5", + "eslint-webpack-plugin": "^5.0.2", + "file-loader": "6.2.0", + "globals": "^16.4.0", + "jest": "^28.1.3", + "less": "4.1.3", + "less-loader": "12.2.0", + "lodash": "4.17.21", + "raw-loader": "4.0.2", + "react-custom-scrollbars": "4.2.1", + "react-dom": "^16.14.0", + "react-hot-loader": "4.13.1", + "react-test-renderer": "^17.0.2", + "react-widgets": "5.8.4", + "string.prototype.startswith": "1.0.1", + "style-loader": "^4.0.0", + "throttle-debounce": "^5.0.0", + "uglifyjs-webpack-plugin": "^2.2.0", + "url-loader": "1.1.2", + "webpack": "5.94.0", + "webpack-bundle-size-analyzer": "3.1.0", + "webpack-cli": "5.1.4", + "webpack-dev-server": "5.2.1" + }, + "dependencies": { + "dayjs": "^1.11.18", + "promise": "^8.3.0", + "prop-types": "^15.8.1", + "react": "^16.14.0", + "react-day-picker": "^7.4.10", + "url-parse": "^1.5.10" + } +} diff --git a/Dnn.AdminExperience/ClientSide/Servers.Web/package.json b/Dnn.AdminExperience/ClientSide/Servers.Web/package.json index b5fe2c871f5..583ec8430e1 100644 --- a/Dnn.AdminExperience/ClientSide/Servers.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Servers.Web/package.json @@ -23,7 +23,7 @@ "babel-polyfill": "6.26.0", "create-react-class": "^15.7.0", "css-loader": "^7.1.2", - "dayjs": "^1.11.9", + "dayjs": "^1.11.18", "eslint": "9.38.0", "eslint-plugin-react": "7.37.5", "eslint-webpack-plugin": "^5.0.2", diff --git a/Dnn.AdminExperience/ClientSide/Sites.Web/src/_exportables/package.json b/Dnn.AdminExperience/ClientSide/Sites.Web/src/_exportables/package.json index 658b30167e2..9dab3ce3b30 100644 --- a/Dnn.AdminExperience/ClientSide/Sites.Web/src/_exportables/package.json +++ b/Dnn.AdminExperience/ClientSide/Sites.Web/src/_exportables/package.json @@ -21,7 +21,7 @@ "babel-polyfill": "6.26.0", "create-react-class": "^15.7.0", "css-loader": "^7.1.2", - "dayjs": "^1.11.9", + "dayjs": "^1.11.18", "eslint": "9.38.0", "eslint-import-resolver-webpack": "^0.13.10", "eslint-plugin-filenames": "^1.3.2", diff --git a/Dnn.AdminExperience/ClientSide/Users.Web/src/_exportables/package.json b/Dnn.AdminExperience/ClientSide/Users.Web/src/_exportables/package.json index 262f54f5131..6b8ea3a6f0c 100644 --- a/Dnn.AdminExperience/ClientSide/Users.Web/src/_exportables/package.json +++ b/Dnn.AdminExperience/ClientSide/Users.Web/src/_exportables/package.json @@ -1,49 +1,49 @@ -{ - "name": "dnn-users-exportables", - "version": "10.1.0", - "description": "DNN Users Exportables", - "scripts": { - "start": "npm run webpack", - "test": "echo \"Error: no test specified\" && exit 1", - "build": "set NODE_ENV=production&&webpack --mode production", - "debug": "set NODE_ENV=debug&&webpack --mode production", - "watch": "set NODE_ENV=debug & webpack --mode=development --progress --watch" - }, - "license": "UNLICENSED", - "devDependencies": { - "@babel/core": "^7.28.4", - "@babel/plugin-proposal-object-rest-spread": "^7.20.7", - "@babel/plugin-transform-react-jsx": "^7.27.1", - "@babel/preset-env": "^7.28.3", - "@babel/preset-react": "^7.27.1", - "@dnnsoftware/dnn-react-common": "10.1.0", - "babel-loader": "10.0.0", - "create-react-class": "^15.7.0", - "css-loader": "^7.1.2", - "dayjs": "^1.11.9", - "eslint": "9.38.0", - "eslint-import-resolver-webpack": "^0.13.10", - "eslint-plugin-filenames": "^1.3.2", - "eslint-plugin-import": "^2.32.0", - "eslint-plugin-react": "7.37.5", - "eslint-plugin-spellcheck": "0.0.20", - "eslint-webpack-plugin": "^5.0.2", - "less": "4.1.3", - "less-loader": "12.2.0", - "localization": "^1.0.2", - "null-loader": "^4.0.1", - "prop-types": "15.8.1", - "react": "^16.14.0", - "react-dom": "^16.14.0", - "react-hot-loader": "^4.13.1", - "react-redux": "^8.1.1", - "react-widgets": "^5.8.4", - "redux": "4.2.1", - "style-loader": "^4.0.0", - "throttle-debounce": "^5.0.0", - "utils": "^0.3.1", - "webpack": "5.94.0", - "webpack-cli": "5.1.4", - "webpack-dev-server": "5.2.1" - } -} +{ + "name": "dnn-users-exportables", + "version": "10.1.0", + "description": "DNN Users Exportables", + "scripts": { + "start": "npm run webpack", + "test": "echo \"Error: no test specified\" && exit 1", + "build": "set NODE_ENV=production&&webpack --mode production", + "debug": "set NODE_ENV=debug&&webpack --mode production", + "watch": "set NODE_ENV=debug & webpack --mode=development --progress --watch" + }, + "license": "UNLICENSED", + "devDependencies": { + "@babel/core": "^7.28.4", + "@babel/plugin-proposal-object-rest-spread": "^7.20.7", + "@babel/plugin-transform-react-jsx": "^7.27.1", + "@babel/preset-env": "^7.28.3", + "@babel/preset-react": "^7.27.1", + "@dnnsoftware/dnn-react-common": "10.1.0", + "babel-loader": "10.0.0", + "create-react-class": "^15.7.0", + "css-loader": "^7.1.2", + "dayjs": "^1.11.18", + "eslint": "9.38.0", + "eslint-import-resolver-webpack": "^0.13.10", + "eslint-plugin-filenames": "^1.3.2", + "eslint-plugin-import": "^2.32.0", + "eslint-plugin-react": "7.37.5", + "eslint-plugin-spellcheck": "0.0.20", + "eslint-webpack-plugin": "^5.0.2", + "less": "4.1.3", + "less-loader": "12.2.0", + "localization": "^1.0.2", + "null-loader": "^4.0.1", + "prop-types": "15.8.1", + "react": "^16.14.0", + "react-dom": "^16.14.0", + "react-hot-loader": "^4.13.1", + "react-redux": "^8.1.1", + "react-widgets": "^5.8.4", + "redux": "4.2.1", + "style-loader": "^4.0.0", + "throttle-debounce": "^5.0.0", + "utils": "^0.3.1", + "webpack": "5.94.0", + "webpack-cli": "5.1.4", + "webpack-dev-server": "5.2.1" + } +} diff --git a/yarn.lock b/yarn.lock index 79411e4465b..22542ca8e80 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1645,7 +1645,7 @@ __metadata: babel-polyfill: "npm:6.26.0" create-react-class: "npm:^15.7.0" css-loader: "npm:^7.1.2" - dayjs: "npm:^1.11.9" + dayjs: "npm:^1.11.18" enzyme: "npm:^3.11.0" enzyme-adapter-react-16: "npm:^1.15.7" enzyme-to-json: "npm:^3.6.2" @@ -8310,10 +8310,10 @@ __metadata: languageName: node linkType: hard -"dayjs@npm:^1.11.9": - version: 1.11.13 - resolution: "dayjs@npm:1.11.13" - checksum: 10/7374d63ab179b8d909a95e74790def25c8986e329ae989840bacb8b1888be116d20e1c4eee75a69ea0dfbae13172efc50ef85619d304ee7ca3c01d5878b704f5 +"dayjs@npm:^1.11.18": + version: 1.11.18 + resolution: "dayjs@npm:1.11.18" + checksum: 10/7d29a90834cf4da2feb437c2f34b8235c3f94493a06d2f1bf9f506f1fa49eadf796f26e1d685b9fe8cb5e75ce6ee067825115e196f1af3d07b3552ff857bfc39 languageName: node linkType: hard @@ -8679,7 +8679,7 @@ __metadata: babel-polyfill: "npm:6.26.0" create-react-class: "npm:^15.7.0" css-loader: "npm:^7.1.2" - dayjs: "npm:^1.11.9" + dayjs: "npm:^1.11.18" eslint: "npm:9.38.0" eslint-import-resolver-webpack: "npm:^0.13.10" eslint-plugin-filenames: "npm:^1.3.2" @@ -8714,7 +8714,7 @@ __metadata: babel-loader: "npm:10.0.0" create-react-class: "npm:^15.7.0" css-loader: "npm:^7.1.2" - dayjs: "npm:^1.11.9" + dayjs: "npm:^1.11.18" eslint: "npm:9.38.0" eslint-import-resolver-webpack: "npm:^0.13.10" eslint-plugin-filenames: "npm:^1.3.2" @@ -10125,7 +10125,7 @@ __metadata: babel-polyfill: "npm:6.26.0" create-react-class: "npm:^15.7.0" css-loader: "npm:^7.1.2" - dayjs: "npm:^1.11.9" + dayjs: "npm:^1.11.18" es6-promise: "npm:4.2.8" eslint: "npm:9.38.0" eslint-plugin-react: "npm:7.37.5" @@ -15750,7 +15750,7 @@ __metadata: babel-preset-react: "npm:6.24.1" create-react-class: "npm:^15.7.0" css-loader: "npm:^7.1.2" - dayjs: "npm:^1.11.9" + dayjs: "npm:^1.11.18" enzyme: "npm:^3.11.0" enzyme-adapter-react-16: "npm:^1.15.7" eslint: "npm:^9.38.0" @@ -18930,7 +18930,7 @@ __metadata: babel-polyfill: "npm:6.26.0" create-react-class: "npm:^15.7.0" css-loader: "npm:^7.1.2" - dayjs: "npm:^1.11.9" + dayjs: "npm:^1.11.18" eslint: "npm:9.38.0" eslint-plugin-react: "npm:7.37.5" eslint-webpack-plugin: "npm:^5.0.2" From 27e5bf5782f13659721fbf0d144a02b940777126 Mon Sep 17 00:00:00 2001 From: Brian Dukes Date: Tue, 21 Oct 2025 16:47:07 -0500 Subject: [PATCH 104/199] Bump dompurify to 3.3.0 --- Dnn.AdminExperience/ClientSide/Prompt.Web/package.json | 2 +- yarn.lock | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Dnn.AdminExperience/ClientSide/Prompt.Web/package.json b/Dnn.AdminExperience/ClientSide/Prompt.Web/package.json index 435813914f8..73a3d116d4e 100644 --- a/Dnn.AdminExperience/ClientSide/Prompt.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Prompt.Web/package.json @@ -67,7 +67,7 @@ "webpack-dev-server": "5.2.1" }, "dependencies": { - "dompurify": "^3.2.6", + "dompurify": "^3.3.0", "html-react-parser": "^5.2.5" } } diff --git a/yarn.lock b/yarn.lock index 22542ca8e80..42f0ee68ae8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8882,15 +8882,15 @@ __metadata: languageName: node linkType: hard -"dompurify@npm:^3.2.6": - version: 3.2.6 - resolution: "dompurify@npm:3.2.6" +"dompurify@npm:^3.3.0": + version: 3.3.0 + resolution: "dompurify@npm:3.3.0" dependencies: "@types/trusted-types": "npm:^2.0.7" dependenciesMeta: "@types/trusted-types": optional: true - checksum: 10/b91631ed0e4d17fae950ef53613cc009ed7e73adc43ac94a41dd52f35483f7538d13caebdafa7626e0da145fc8184e7ac7935f14f25b7e841b32fda777e40447 + checksum: 10/d8782b10a0454344476936c91038d06c9450b3e3ada2ceb8f722525e6b54e64d847939b9f35bf385facd4139f0a2eaf7f5553efce351f8e9295620570875f002 languageName: node linkType: hard @@ -16759,7 +16759,7 @@ __metadata: babel-polyfill: "npm:6.26.0" create-react-class: "npm:^15.7.0" css-loader: "npm:^7.1.2" - dompurify: "npm:^3.2.6" + dompurify: "npm:^3.3.0" enzyme: "npm:^3.11.0" enzyme-adapter-react-16: "npm:^1.15.7" es6-object-assign: "npm:1.1.0" From 1d07003337f0693ab4a43829b3d25e8ff21a4ee7 Mon Sep 17 00:00:00 2001 From: Brian Dukes Date: Tue, 21 Oct 2025 16:47:48 -0500 Subject: [PATCH 105/199] Bump enzyme-adapter-react-16 to 1.15.8 --- .../ClientSide/Dnn.React.Common/package.json | 2 +- Dnn.AdminExperience/ClientSide/Pages.Web/package.json | 2 +- Dnn.AdminExperience/ClientSide/Prompt.Web/package.json | 2 +- yarn.lock | 8 ++++---- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/package.json b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/package.json index 11e77b614ce..bc8bbdd5a6f 100644 --- a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/package.json +++ b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/package.json @@ -64,7 +64,7 @@ "create-react-class": "^15.7.0", "css-loader": "^7.1.2", "enzyme": "^3.11.0", - "enzyme-adapter-react-16": "^1.15.7", + "enzyme-adapter-react-16": "^1.15.8", "enzyme-to-json": "^3.6.2", "eslint": "^9.38.0", "eslint-import-resolver-node": "^0.3.9", diff --git a/Dnn.AdminExperience/ClientSide/Pages.Web/package.json b/Dnn.AdminExperience/ClientSide/Pages.Web/package.json index 708368a5921..43a1c9292e2 100644 --- a/Dnn.AdminExperience/ClientSide/Pages.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Pages.Web/package.json @@ -38,7 +38,7 @@ "create-react-class": "^15.7.0", "css-loader": "^7.1.2", "enzyme": "^3.11.0", - "enzyme-adapter-react-16": "^1.15.7", + "enzyme-adapter-react-16": "^1.15.8", "eslint": "^9.38.0", "eslint-plugin-react": "7.37.5", "eslint-webpack-plugin": "^5.0.2", diff --git a/Dnn.AdminExperience/ClientSide/Prompt.Web/package.json b/Dnn.AdminExperience/ClientSide/Prompt.Web/package.json index 73a3d116d4e..2214c8a63d9 100644 --- a/Dnn.AdminExperience/ClientSide/Prompt.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Prompt.Web/package.json @@ -28,7 +28,7 @@ "create-react-class": "^15.7.0", "css-loader": "^7.1.2", "enzyme": "^3.11.0", - "enzyme-adapter-react-16": "^1.15.7", + "enzyme-adapter-react-16": "^1.15.8", "es6-object-assign": "1.1.0", "eslint": "9.38.0", "eslint-plugin-react": "7.37.5", diff --git a/yarn.lock b/yarn.lock index 42f0ee68ae8..614a56b2b6a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1647,7 +1647,7 @@ __metadata: css-loader: "npm:^7.1.2" dayjs: "npm:^1.11.18" enzyme: "npm:^3.11.0" - enzyme-adapter-react-16: "npm:^1.15.7" + enzyme-adapter-react-16: "npm:^1.15.8" enzyme-to-json: "npm:^3.6.2" eslint: "npm:^9.38.0" eslint-import-resolver-node: "npm:^0.3.9" @@ -9239,7 +9239,7 @@ __metadata: languageName: node linkType: hard -"enzyme-adapter-react-16@npm:^1.15.7": +"enzyme-adapter-react-16@npm:^1.15.8": version: 1.15.8 resolution: "enzyme-adapter-react-16@npm:1.15.8" dependencies: @@ -15752,7 +15752,7 @@ __metadata: css-loader: "npm:^7.1.2" dayjs: "npm:^1.11.18" enzyme: "npm:^3.11.0" - enzyme-adapter-react-16: "npm:^1.15.7" + enzyme-adapter-react-16: "npm:^1.15.8" eslint: "npm:^9.38.0" eslint-plugin-react: "npm:7.37.5" eslint-webpack-plugin: "npm:^5.0.2" @@ -16761,7 +16761,7 @@ __metadata: css-loader: "npm:^7.1.2" dompurify: "npm:^3.3.0" enzyme: "npm:^3.11.0" - enzyme-adapter-react-16: "npm:^1.15.7" + enzyme-adapter-react-16: "npm:^1.15.8" es6-object-assign: "npm:1.1.0" eslint: "npm:9.38.0" eslint-plugin-react: "npm:7.37.5" From edb9f4c9bdeb1ca93cae593fa8cbc37db6954ae2 Mon Sep 17 00:00:00 2001 From: Brian Dukes Date: Tue, 21 Oct 2025 16:48:19 -0500 Subject: [PATCH 106/199] Bump esbuild to 0.25.11 --- DNN Platform/Dnn.ClientSide/package.json | 2 +- yarn.lock | 275 ++++++++++++++++++++++- 2 files changed, 274 insertions(+), 3 deletions(-) diff --git a/DNN Platform/Dnn.ClientSide/package.json b/DNN Platform/Dnn.ClientSide/package.json index 66824d519be..76a1f1232e2 100644 --- a/DNN Platform/Dnn.ClientSide/package.json +++ b/DNN Platform/Dnn.ClientSide/package.json @@ -22,7 +22,7 @@ "autoprefixer": "^10.4.21", "chokidar": "^4.0.3", "cssnano": "^7.1.1", - "esbuild": "^0.25.0", + "esbuild": "^0.25.11", "eslint": "^9.38.0", "modern-normalize": "^3.0.1", "postcss": "^8.5.6", diff --git a/yarn.lock b/yarn.lock index 614a56b2b6a..0619c11268b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1729,6 +1729,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/aix-ppc64@npm:0.25.11": + version: 0.25.11 + resolution: "@esbuild/aix-ppc64@npm:0.25.11" + conditions: os=aix & cpu=ppc64 + languageName: node + linkType: hard + "@esbuild/aix-ppc64@npm:0.25.8": version: 0.25.8 resolution: "@esbuild/aix-ppc64@npm:0.25.8" @@ -1736,6 +1743,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/android-arm64@npm:0.25.11": + version: 0.25.11 + resolution: "@esbuild/android-arm64@npm:0.25.11" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/android-arm64@npm:0.25.8": version: 0.25.8 resolution: "@esbuild/android-arm64@npm:0.25.8" @@ -1743,6 +1757,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/android-arm@npm:0.25.11": + version: 0.25.11 + resolution: "@esbuild/android-arm@npm:0.25.11" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + "@esbuild/android-arm@npm:0.25.8": version: 0.25.8 resolution: "@esbuild/android-arm@npm:0.25.8" @@ -1750,6 +1771,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/android-x64@npm:0.25.11": + version: 0.25.11 + resolution: "@esbuild/android-x64@npm:0.25.11" + conditions: os=android & cpu=x64 + languageName: node + linkType: hard + "@esbuild/android-x64@npm:0.25.8": version: 0.25.8 resolution: "@esbuild/android-x64@npm:0.25.8" @@ -1757,6 +1785,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/darwin-arm64@npm:0.25.11": + version: 0.25.11 + resolution: "@esbuild/darwin-arm64@npm:0.25.11" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/darwin-arm64@npm:0.25.8": version: 0.25.8 resolution: "@esbuild/darwin-arm64@npm:0.25.8" @@ -1764,6 +1799,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/darwin-x64@npm:0.25.11": + version: 0.25.11 + resolution: "@esbuild/darwin-x64@npm:0.25.11" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + "@esbuild/darwin-x64@npm:0.25.8": version: 0.25.8 resolution: "@esbuild/darwin-x64@npm:0.25.8" @@ -1771,6 +1813,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/freebsd-arm64@npm:0.25.11": + version: 0.25.11 + resolution: "@esbuild/freebsd-arm64@npm:0.25.11" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/freebsd-arm64@npm:0.25.8": version: 0.25.8 resolution: "@esbuild/freebsd-arm64@npm:0.25.8" @@ -1778,6 +1827,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/freebsd-x64@npm:0.25.11": + version: 0.25.11 + resolution: "@esbuild/freebsd-x64@npm:0.25.11" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + "@esbuild/freebsd-x64@npm:0.25.8": version: 0.25.8 resolution: "@esbuild/freebsd-x64@npm:0.25.8" @@ -1785,6 +1841,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-arm64@npm:0.25.11": + version: 0.25.11 + resolution: "@esbuild/linux-arm64@npm:0.25.11" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/linux-arm64@npm:0.25.8": version: 0.25.8 resolution: "@esbuild/linux-arm64@npm:0.25.8" @@ -1792,6 +1855,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-arm@npm:0.25.11": + version: 0.25.11 + resolution: "@esbuild/linux-arm@npm:0.25.11" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + "@esbuild/linux-arm@npm:0.25.8": version: 0.25.8 resolution: "@esbuild/linux-arm@npm:0.25.8" @@ -1799,6 +1869,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-ia32@npm:0.25.11": + version: 0.25.11 + resolution: "@esbuild/linux-ia32@npm:0.25.11" + conditions: os=linux & cpu=ia32 + languageName: node + linkType: hard + "@esbuild/linux-ia32@npm:0.25.8": version: 0.25.8 resolution: "@esbuild/linux-ia32@npm:0.25.8" @@ -1806,6 +1883,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-loong64@npm:0.25.11": + version: 0.25.11 + resolution: "@esbuild/linux-loong64@npm:0.25.11" + conditions: os=linux & cpu=loong64 + languageName: node + linkType: hard + "@esbuild/linux-loong64@npm:0.25.8": version: 0.25.8 resolution: "@esbuild/linux-loong64@npm:0.25.8" @@ -1813,6 +1897,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-mips64el@npm:0.25.11": + version: 0.25.11 + resolution: "@esbuild/linux-mips64el@npm:0.25.11" + conditions: os=linux & cpu=mips64el + languageName: node + linkType: hard + "@esbuild/linux-mips64el@npm:0.25.8": version: 0.25.8 resolution: "@esbuild/linux-mips64el@npm:0.25.8" @@ -1820,6 +1911,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-ppc64@npm:0.25.11": + version: 0.25.11 + resolution: "@esbuild/linux-ppc64@npm:0.25.11" + conditions: os=linux & cpu=ppc64 + languageName: node + linkType: hard + "@esbuild/linux-ppc64@npm:0.25.8": version: 0.25.8 resolution: "@esbuild/linux-ppc64@npm:0.25.8" @@ -1827,6 +1925,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-riscv64@npm:0.25.11": + version: 0.25.11 + resolution: "@esbuild/linux-riscv64@npm:0.25.11" + conditions: os=linux & cpu=riscv64 + languageName: node + linkType: hard + "@esbuild/linux-riscv64@npm:0.25.8": version: 0.25.8 resolution: "@esbuild/linux-riscv64@npm:0.25.8" @@ -1834,6 +1939,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-s390x@npm:0.25.11": + version: 0.25.11 + resolution: "@esbuild/linux-s390x@npm:0.25.11" + conditions: os=linux & cpu=s390x + languageName: node + linkType: hard + "@esbuild/linux-s390x@npm:0.25.8": version: 0.25.8 resolution: "@esbuild/linux-s390x@npm:0.25.8" @@ -1841,6 +1953,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-x64@npm:0.25.11": + version: 0.25.11 + resolution: "@esbuild/linux-x64@npm:0.25.11" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + "@esbuild/linux-x64@npm:0.25.8": version: 0.25.8 resolution: "@esbuild/linux-x64@npm:0.25.8" @@ -1848,6 +1967,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/netbsd-arm64@npm:0.25.11": + version: 0.25.11 + resolution: "@esbuild/netbsd-arm64@npm:0.25.11" + conditions: os=netbsd & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/netbsd-arm64@npm:0.25.8": version: 0.25.8 resolution: "@esbuild/netbsd-arm64@npm:0.25.8" @@ -1855,6 +1981,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/netbsd-x64@npm:0.25.11": + version: 0.25.11 + resolution: "@esbuild/netbsd-x64@npm:0.25.11" + conditions: os=netbsd & cpu=x64 + languageName: node + linkType: hard + "@esbuild/netbsd-x64@npm:0.25.8": version: 0.25.8 resolution: "@esbuild/netbsd-x64@npm:0.25.8" @@ -1862,6 +1995,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/openbsd-arm64@npm:0.25.11": + version: 0.25.11 + resolution: "@esbuild/openbsd-arm64@npm:0.25.11" + conditions: os=openbsd & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/openbsd-arm64@npm:0.25.8": version: 0.25.8 resolution: "@esbuild/openbsd-arm64@npm:0.25.8" @@ -1869,6 +2009,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/openbsd-x64@npm:0.25.11": + version: 0.25.11 + resolution: "@esbuild/openbsd-x64@npm:0.25.11" + conditions: os=openbsd & cpu=x64 + languageName: node + linkType: hard + "@esbuild/openbsd-x64@npm:0.25.8": version: 0.25.8 resolution: "@esbuild/openbsd-x64@npm:0.25.8" @@ -1876,6 +2023,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/openharmony-arm64@npm:0.25.11": + version: 0.25.11 + resolution: "@esbuild/openharmony-arm64@npm:0.25.11" + conditions: os=openharmony & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/openharmony-arm64@npm:0.25.8": version: 0.25.8 resolution: "@esbuild/openharmony-arm64@npm:0.25.8" @@ -1883,6 +2037,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/sunos-x64@npm:0.25.11": + version: 0.25.11 + resolution: "@esbuild/sunos-x64@npm:0.25.11" + conditions: os=sunos & cpu=x64 + languageName: node + linkType: hard + "@esbuild/sunos-x64@npm:0.25.8": version: 0.25.8 resolution: "@esbuild/sunos-x64@npm:0.25.8" @@ -1890,6 +2051,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/win32-arm64@npm:0.25.11": + version: 0.25.11 + resolution: "@esbuild/win32-arm64@npm:0.25.11" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/win32-arm64@npm:0.25.8": version: 0.25.8 resolution: "@esbuild/win32-arm64@npm:0.25.8" @@ -1897,6 +2065,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/win32-ia32@npm:0.25.11": + version: 0.25.11 + resolution: "@esbuild/win32-ia32@npm:0.25.11" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + "@esbuild/win32-ia32@npm:0.25.8": version: 0.25.8 resolution: "@esbuild/win32-ia32@npm:0.25.8" @@ -1904,6 +2079,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/win32-x64@npm:0.25.11": + version: 0.25.11 + resolution: "@esbuild/win32-x64@npm:0.25.11" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + "@esbuild/win32-x64@npm:0.25.8": version: 0.25.8 resolution: "@esbuild/win32-x64@npm:0.25.8" @@ -8751,7 +8933,7 @@ __metadata: autoprefixer: "npm:^10.4.21" chokidar: "npm:^4.0.3" cssnano: "npm:^7.1.1" - esbuild: "npm:^0.25.0" + esbuild: "npm:^0.25.11" eslint: "npm:^9.38.0" modern-normalize: "npm:^3.0.1" postcss: "npm:^8.5.6" @@ -9537,7 +9719,7 @@ __metadata: languageName: node linkType: hard -"esbuild@npm:^0.18.0 || ^0.19.0 || ^0.20.0 || ^0.21.0 || ^0.22.0 || ^0.23.0 || ^0.24.0 || ^0.25.0, esbuild@npm:^0.25.0, esbuild@npm:~0.25.0": +"esbuild@npm:^0.18.0 || ^0.19.0 || ^0.20.0 || ^0.21.0 || ^0.22.0 || ^0.23.0 || ^0.24.0 || ^0.25.0, esbuild@npm:~0.25.0": version: 0.25.8 resolution: "esbuild@npm:0.25.8" dependencies: @@ -9626,6 +9808,95 @@ __metadata: languageName: node linkType: hard +"esbuild@npm:^0.25.11": + version: 0.25.11 + resolution: "esbuild@npm:0.25.11" + dependencies: + "@esbuild/aix-ppc64": "npm:0.25.11" + "@esbuild/android-arm": "npm:0.25.11" + "@esbuild/android-arm64": "npm:0.25.11" + "@esbuild/android-x64": "npm:0.25.11" + "@esbuild/darwin-arm64": "npm:0.25.11" + "@esbuild/darwin-x64": "npm:0.25.11" + "@esbuild/freebsd-arm64": "npm:0.25.11" + "@esbuild/freebsd-x64": "npm:0.25.11" + "@esbuild/linux-arm": "npm:0.25.11" + "@esbuild/linux-arm64": "npm:0.25.11" + "@esbuild/linux-ia32": "npm:0.25.11" + "@esbuild/linux-loong64": "npm:0.25.11" + "@esbuild/linux-mips64el": "npm:0.25.11" + "@esbuild/linux-ppc64": "npm:0.25.11" + "@esbuild/linux-riscv64": "npm:0.25.11" + "@esbuild/linux-s390x": "npm:0.25.11" + "@esbuild/linux-x64": "npm:0.25.11" + "@esbuild/netbsd-arm64": "npm:0.25.11" + "@esbuild/netbsd-x64": "npm:0.25.11" + "@esbuild/openbsd-arm64": "npm:0.25.11" + "@esbuild/openbsd-x64": "npm:0.25.11" + "@esbuild/openharmony-arm64": "npm:0.25.11" + "@esbuild/sunos-x64": "npm:0.25.11" + "@esbuild/win32-arm64": "npm:0.25.11" + "@esbuild/win32-ia32": "npm:0.25.11" + "@esbuild/win32-x64": "npm:0.25.11" + dependenciesMeta: + "@esbuild/aix-ppc64": + optional: true + "@esbuild/android-arm": + optional: true + "@esbuild/android-arm64": + optional: true + "@esbuild/android-x64": + optional: true + "@esbuild/darwin-arm64": + optional: true + "@esbuild/darwin-x64": + optional: true + "@esbuild/freebsd-arm64": + optional: true + "@esbuild/freebsd-x64": + optional: true + "@esbuild/linux-arm": + optional: true + "@esbuild/linux-arm64": + optional: true + "@esbuild/linux-ia32": + optional: true + "@esbuild/linux-loong64": + optional: true + "@esbuild/linux-mips64el": + optional: true + "@esbuild/linux-ppc64": + optional: true + "@esbuild/linux-riscv64": + optional: true + "@esbuild/linux-s390x": + optional: true + "@esbuild/linux-x64": + optional: true + "@esbuild/netbsd-arm64": + optional: true + "@esbuild/netbsd-x64": + optional: true + "@esbuild/openbsd-arm64": + optional: true + "@esbuild/openbsd-x64": + optional: true + "@esbuild/openharmony-arm64": + optional: true + "@esbuild/sunos-x64": + optional: true + "@esbuild/win32-arm64": + optional: true + "@esbuild/win32-ia32": + optional: true + "@esbuild/win32-x64": + optional: true + bin: + esbuild: bin/esbuild + checksum: 10/287dfc7909d169501be9daa55973ae9398bd69c7114dfc0b682eef04c22f5c33fdba934398af0f36ed5aab1366ee4be25062235d6a1bff4b74fa3d185e208e56 + languageName: node + linkType: hard + "escalade@npm:^3.1.1, escalade@npm:^3.2.0": version: 3.2.0 resolution: "escalade@npm:3.2.0" From 517d2de996c029e9b209900d6ebc7671705e9e3e Mon Sep 17 00:00:00 2001 From: Brian Dukes Date: Tue, 21 Oct 2025 16:49:41 -0500 Subject: [PATCH 107/199] Remove unused fetch-mock package --- .../ClientSide/Prompt.Web/package.json | 1 - yarn.lock | 67 +------------------ 2 files changed, 3 insertions(+), 65 deletions(-) diff --git a/Dnn.AdminExperience/ClientSide/Prompt.Web/package.json b/Dnn.AdminExperience/ClientSide/Prompt.Web/package.json index 2214c8a63d9..60316c22a45 100644 --- a/Dnn.AdminExperience/ClientSide/Prompt.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Prompt.Web/package.json @@ -35,7 +35,6 @@ "eslint-webpack-plugin": "^5.0.2", "extract-text-webpack-plugin": "^3.0.2", "fbjs": "*", - "fetch-mock": "^7.7.3", "file-loader": "6.2.0", "globals": "^16.4.0", "i18n-webpack-plugin": "1.0.0", diff --git a/yarn.lock b/yarn.lock index 0619c11268b..4484fd339f4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6687,7 +6687,7 @@ __metadata: languageName: node linkType: hard -"babel-polyfill@npm:6.26.0, babel-polyfill@npm:^6.26.0": +"babel-polyfill@npm:6.26.0": version: 6.26.0 resolution: "babel-polyfill@npm:6.26.0" dependencies: @@ -8124,7 +8124,7 @@ __metadata: languageName: node linkType: hard -"core-js@npm:^2.4.0, core-js@npm:^2.5.0, core-js@npm:^2.6.9": +"core-js@npm:^2.4.0, core-js@npm:^2.5.0": version: 2.6.12 resolution: "core-js@npm:2.6.12" checksum: 10/7c624eb00a59c74c769d5d80f751f3bf1fc6201205b6562f27286ad5e00bbca1483f2f7eb0c2854b86f526ef5c7dc958b45f2ff536f8a31b8e9cb1a13a96efca @@ -10685,25 +10685,6 @@ __metadata: languageName: node linkType: hard -"fetch-mock@npm:^7.7.3": - version: 7.7.3 - resolution: "fetch-mock@npm:7.7.3" - dependencies: - babel-polyfill: "npm:^6.26.0" - core-js: "npm:^2.6.9" - glob-to-regexp: "npm:^0.4.0" - lodash.isequal: "npm:^4.5.0" - path-to-regexp: "npm:^2.2.1" - whatwg-url: "npm:^6.5.0" - peerDependencies: - node-fetch: "*" - peerDependenciesMeta: - node-fetch: - optional: true - checksum: 10/0e04a94d4d4882ce86afa1e1732c3874405c114292f28cda5250176200c3efa483dc64208e037e9ed7e4050bdf0d3549d15508ed3082769403cf466c87682e37 - languageName: node - linkType: hard - "figgy-pudding@npm:^3.5.1": version: 3.5.2 resolution: "figgy-pudding@npm:3.5.2" @@ -11377,7 +11358,7 @@ __metadata: languageName: node linkType: hard -"glob-to-regexp@npm:^0.4.0, glob-to-regexp@npm:^0.4.1": +"glob-to-regexp@npm:^0.4.1": version: 0.4.1 resolution: "glob-to-regexp@npm:0.4.1" checksum: 10/9009529195a955c40d7b9690794aeff5ba665cc38f1519e111c58bb54366fd0c106bde80acf97ba4e533208eb53422c83b136611a54c5fefb1edd8dc267cb62e @@ -14215,13 +14196,6 @@ __metadata: languageName: node linkType: hard -"lodash.sortby@npm:^4.7.0": - version: 4.7.0 - resolution: "lodash.sortby@npm:4.7.0" - checksum: 10/38df19ae28608af2c50ac342fc1f414508309d53e1d58ed9adfb2c3cd17c3af290058c0a0478028d932c5404df3d53349d19fa364ef6bed6145a6bc21320399e - languageName: node - linkType: hard - "lodash.uniq@npm:^4.5.0": version: 4.5.0 resolution: "lodash.uniq@npm:4.5.0" @@ -16257,13 +16231,6 @@ __metadata: languageName: node linkType: hard -"path-to-regexp@npm:^2.2.1": - version: 2.4.0 - resolution: "path-to-regexp@npm:2.4.0" - checksum: 10/0afcae75a233ea8e1728522f25820896e3243bfa8c2da2f138e6b51e27db30fcf4cd1c97d77bec7fb4bf819d5e73534cf667f7ace012a0fc89b91ef415690756 - languageName: node - linkType: hard - "path-type@npm:^3.0.0": version: 3.0.0 resolution: "path-type@npm:3.0.0" @@ -17039,7 +17006,6 @@ __metadata: eslint-webpack-plugin: "npm:^5.0.2" extract-text-webpack-plugin: "npm:^3.0.2" fbjs: "npm:*" - fetch-mock: "npm:^7.7.3" file-loader: "npm:6.2.0" globals: "npm:^16.4.0" html-react-parser: "npm:^5.2.5" @@ -20808,15 +20774,6 @@ __metadata: languageName: node linkType: hard -"tr46@npm:^1.0.1": - version: 1.0.1 - resolution: "tr46@npm:1.0.1" - dependencies: - punycode: "npm:^2.1.0" - checksum: 10/6e80d75480cb6658f7f283c15f5f41c2d4dfa243ca99a0e1baf3de6cc823fc4c829f89782a7a11e029905781fccfea42d08d8a6674ba7948c7dbc595b6f27dd3 - languageName: node - linkType: hard - "tr46@npm:^5.1.0": version: 5.1.1 resolution: "tr46@npm:5.1.1" @@ -21651,13 +21608,6 @@ __metadata: languageName: node linkType: hard -"webidl-conversions@npm:^4.0.2": - version: 4.0.2 - resolution: "webidl-conversions@npm:4.0.2" - checksum: 10/594187c36f2d7898f89c0ed3b9248a095fa549ecc1befb10a97bc884b5680dc96677f58df5579334d8e0d1018e5ef075689cfa2a6c459f45a61a9deb512cb59e - languageName: node - linkType: hard - "webidl-conversions@npm:^7.0.0": version: 7.0.0 resolution: "webidl-conversions@npm:7.0.0" @@ -21994,17 +21944,6 @@ __metadata: languageName: node linkType: hard -"whatwg-url@npm:^6.5.0": - version: 6.5.0 - resolution: "whatwg-url@npm:6.5.0" - dependencies: - lodash.sortby: "npm:^4.7.0" - tr46: "npm:^1.0.1" - webidl-conversions: "npm:^4.0.2" - checksum: 10/fbe8e9d81f8f07343f60bc135962ff346d7d19efc9e2f842f54b5c525837dcf1a36d13be21902311a2922b6342799dd82454e552b4e460d74451794f187ba0a5 - languageName: node - linkType: hard - "which-boxed-primitive@npm:^1.1.0, which-boxed-primitive@npm:^1.1.1": version: 1.1.1 resolution: "which-boxed-primitive@npm:1.1.1" From 4042145b7d4c79ff95e2f9fb6caa65deb7e3586c Mon Sep 17 00:00:00 2001 From: Brian Dukes Date: Tue, 21 Oct 2025 16:50:24 -0500 Subject: [PATCH 108/199] Bump glob to 11.0.3 --- DNN Platform/Skins/Aperture/package.json | 2 +- yarn.lock | 71 +++++++++++++++++++++++- 2 files changed, 70 insertions(+), 3 deletions(-) diff --git a/DNN Platform/Skins/Aperture/package.json b/DNN Platform/Skins/Aperture/package.json index af56b0e61cd..aabd949ffcd 100644 --- a/DNN Platform/Skins/Aperture/package.json +++ b/DNN Platform/Skins/Aperture/package.json @@ -20,7 +20,7 @@ "browser-sync": "^3.0.4", "chokidar": "^4.0.3", "cssnano": "^7.1.1", - "glob": "^10.3.10", + "glob": "^11.0.3", "postcss": "^8.5.6", "postcss-banner": "^4.0.1", "postcss-cli": "^11.0.1", diff --git a/yarn.lock b/yarn.lock index 4484fd339f4..1c0b07d4757 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2251,6 +2251,22 @@ __metadata: languageName: node linkType: hard +"@isaacs/balanced-match@npm:^4.0.1": + version: 4.0.1 + resolution: "@isaacs/balanced-match@npm:4.0.1" + checksum: 10/102fbc6d2c0d5edf8f6dbf2b3feb21695a21bc850f11bc47c4f06aa83bd8884fde3fe9d6d797d619901d96865fdcb4569ac2a54c937992c48885c5e3d9967fe8 + languageName: node + linkType: hard + +"@isaacs/brace-expansion@npm:^5.0.0": + version: 5.0.0 + resolution: "@isaacs/brace-expansion@npm:5.0.0" + dependencies: + "@isaacs/balanced-match": "npm:^4.0.1" + checksum: 10/cf3b7f206aff12128214a1df764ac8cdbc517c110db85249b945282407e3dfc5c6e66286383a7c9391a059fc8e6e6a8ca82262fc9d2590bd615376141fbebd2d + languageName: node + linkType: hard + "@isaacs/cliui@npm:^8.0.2": version: 8.0.2 resolution: "@isaacs/cliui@npm:8.0.2" @@ -5642,7 +5658,7 @@ __metadata: browser-sync: "npm:^3.0.4" chokidar: "npm:^4.0.3" cssnano: "npm:^7.1.1" - glob: "npm:^10.3.10" + glob: "npm:^11.0.3" normalize.css: "npm:^8.0.1" postcss: "npm:^8.5.6" postcss-banner: "npm:^4.0.1" @@ -10956,7 +10972,7 @@ __metadata: languageName: node linkType: hard -"foreground-child@npm:^3.1.0": +"foreground-child@npm:^3.1.0, foreground-child@npm:^3.3.1": version: 3.3.1 resolution: "foreground-child@npm:3.3.1" dependencies: @@ -11381,6 +11397,22 @@ __metadata: languageName: node linkType: hard +"glob@npm:^11.0.3": + version: 11.0.3 + resolution: "glob@npm:11.0.3" + dependencies: + foreground-child: "npm:^3.3.1" + jackspeak: "npm:^4.1.1" + minimatch: "npm:^10.0.3" + minipass: "npm:^7.1.2" + package-json-from-dist: "npm:^1.0.0" + path-scurry: "npm:^2.0.0" + bin: + glob: dist/esm/bin.mjs + checksum: 10/2ae536c1360c0266b523b2bfa6aadc10144a8b7e08869b088e37ac3c27cd30774f82e4bfb291cde796776e878f9e13200c7ff44010eb7054e00f46f649397893 + languageName: node + linkType: hard + "glob@npm:^7.1.3, glob@npm:^7.1.4": version: 7.2.3 resolution: "glob@npm:7.2.3" @@ -12826,6 +12858,15 @@ __metadata: languageName: node linkType: hard +"jackspeak@npm:^4.1.1": + version: 4.1.1 + resolution: "jackspeak@npm:4.1.1" + dependencies: + "@isaacs/cliui": "npm:^8.0.2" + checksum: 10/ffceb270ec286841f48413bfb4a50b188662dfd599378ce142b6540f3f0a66821dc9dcb1e9ebc55c6c3b24dc2226c96e5819ba9bd7a241bd29031b61911718c7 + languageName: node + linkType: hard + "jake@npm:^10.8.5": version: 10.9.2 resolution: "jake@npm:10.9.2" @@ -14275,6 +14316,13 @@ __metadata: languageName: node linkType: hard +"lru-cache@npm:^11.0.0": + version: 11.2.2 + resolution: "lru-cache@npm:11.2.2" + checksum: 10/fa7919fbf068a739f79a1ad461eb273514da7246cebb9dca68e3cd7ba19e3839e7e2aaecd9b72867e08038561eeb96941189e89b3d4091c75ced4f56c71c80db + languageName: node + linkType: hard + "lru-cache@npm:^5.1.1": version: 5.1.1 resolution: "lru-cache@npm:5.1.1" @@ -14630,6 +14678,15 @@ __metadata: languageName: node linkType: hard +"minimatch@npm:^10.0.3": + version: 10.0.3 + resolution: "minimatch@npm:10.0.3" + dependencies: + "@isaacs/brace-expansion": "npm:^5.0.0" + checksum: 10/d5b8b2538b367f2cfd4aeef27539fddeee58d1efb692102b848e4a968a09780a302c530eb5aacfa8c57f7299155fb4b4e85219ad82664dcef5c66f657111d9b8 + languageName: node + linkType: hard + "minimatch@npm:^3.0.2, minimatch@npm:^3.0.4, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": version: 3.1.2 resolution: "minimatch@npm:3.1.2" @@ -16224,6 +16281,16 @@ __metadata: languageName: node linkType: hard +"path-scurry@npm:^2.0.0": + version: 2.0.0 + resolution: "path-scurry@npm:2.0.0" + dependencies: + lru-cache: "npm:^11.0.0" + minipass: "npm:^7.1.2" + checksum: 10/285ae0c2d6c34ae91dc1d5378ede21981c9a2f6de1ea9ca5a88b5a270ce9763b83dbadc7a324d512211d8d36b0c540427d3d0817030849d97a60fa840a2c59ec + languageName: node + linkType: hard + "path-to-regexp@npm:0.1.12": version: 0.1.12 resolution: "path-to-regexp@npm:0.1.12" From 308dc123a1de6947375dd800b99fea38cd6507a4 Mon Sep 17 00:00:00 2001 From: Brian Dukes Date: Tue, 21 Oct 2025 16:55:58 -0500 Subject: [PATCH 109/199] Remove unused fbjs package --- .../ClientSide/Prompt.Web/package.json | 1 - .../Admin Persona Bar Referenced Licences.txt | 5 -- yarn.lock | 68 +------------------ 3 files changed, 3 insertions(+), 71 deletions(-) diff --git a/Dnn.AdminExperience/ClientSide/Prompt.Web/package.json b/Dnn.AdminExperience/ClientSide/Prompt.Web/package.json index 60316c22a45..af1fa404a58 100644 --- a/Dnn.AdminExperience/ClientSide/Prompt.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Prompt.Web/package.json @@ -34,7 +34,6 @@ "eslint-plugin-react": "7.37.5", "eslint-webpack-plugin": "^5.0.2", "extract-text-webpack-plugin": "^3.0.2", - "fbjs": "*", "file-loader": "6.2.0", "globals": "^16.4.0", "i18n-webpack-plugin": "1.0.0", diff --git a/Dnn.AdminExperience/Library/Dnn.PersonaBar.UI/Licenses/Admin Persona Bar Referenced Licences.txt b/Dnn.AdminExperience/Library/Dnn.PersonaBar.UI/Licenses/Admin Persona Bar Referenced Licences.txt index 716dc806c20..49ff17a05e1 100644 --- a/Dnn.AdminExperience/Library/Dnn.PersonaBar.UI/Licenses/Admin Persona Bar Referenced Licences.txt +++ b/Dnn.AdminExperience/Library/Dnn.PersonaBar.UI/Licenses/Admin Persona Bar Referenced Licences.txt @@ -661,11 +661,6 @@ MIT License License File: Admin Persona Bar Referenced Licences.zip\fast-levenshtein\LICENSE.md -------------------------------------------------------------------------------------- -fbjs (A collection of utility libraries used by other Facebook JS projects) -MIT License -License File: Admin Persona Bar Referenced Licences.zip\fbjs\LICENSE --------------------------------------------------------------------------------------- - figures (Unicode symbols with Windows CMD fallbacks) MIT License License File: Admin Persona Bar Referenced Licences.zip\figures\license diff --git a/yarn.lock b/yarn.lock index 1c0b07d4757..64c7fc2e432 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5952,7 +5952,7 @@ __metadata: languageName: node linkType: hard -"asap@npm:~2.0.3, asap@npm:~2.0.6": +"asap@npm:~2.0.6": version: 2.0.6 resolution: "asap@npm:2.0.6" checksum: 10/b244c0458c571945e4b3be0b14eb001bea5596f9868cc50cc711dc03d58a7e953517d3f0dad81ccde3ff37d1f074701fa76a6f07d41aaa992d7204a37b915dda @@ -8204,15 +8204,6 @@ __metadata: languageName: node linkType: hard -"cross-fetch@npm:^3.1.5": - version: 3.2.0 - resolution: "cross-fetch@npm:3.2.0" - dependencies: - node-fetch: "npm:^2.7.0" - checksum: 10/e4ab1d390a5b6ca8bb0605f028af2ffc1127d2e407b954654949f506d04873c4863ece264662c074865d7874060e35f938cec74fe7b5736d46d545e2685f6aec - languageName: node - linkType: hard - "cross-spawn@npm:^7.0.3, cross-spawn@npm:^7.0.6": version: 7.0.6 resolution: "cross-spawn@npm:7.0.6" @@ -10658,28 +10649,6 @@ __metadata: languageName: node linkType: hard -"fbjs-css-vars@npm:^1.0.0": - version: 1.0.2 - resolution: "fbjs-css-vars@npm:1.0.2" - checksum: 10/72baf6d22c45b75109118b4daecb6c8016d4c83c8c0f23f683f22e9d7c21f32fff6201d288df46eb561e3c7d4bb4489b8ad140b7f56444c453ba407e8bd28511 - languageName: node - linkType: hard - -"fbjs@npm:*": - version: 3.0.5 - resolution: "fbjs@npm:3.0.5" - dependencies: - cross-fetch: "npm:^3.1.5" - fbjs-css-vars: "npm:^1.0.0" - loose-envify: "npm:^1.0.0" - object-assign: "npm:^4.1.0" - promise: "npm:^7.1.1" - setimmediate: "npm:^1.0.5" - ua-parser-js: "npm:^1.0.35" - checksum: 10/71252595b00b06fb0475a295c74d81ada1cc499b7e11f2cde51fef04618affa568f5b7f4927f61720c23254b9144be28f8acb2086a5001cf65df8eec87c6ca5c - languageName: node - linkType: hard - "fd-slicer@npm:~1.1.0": version: 1.1.0 resolution: "fd-slicer@npm:1.1.0" @@ -15139,20 +15108,6 @@ __metadata: languageName: node linkType: hard -"node-fetch@npm:^2.7.0": - version: 2.7.0 - resolution: "node-fetch@npm:2.7.0" - dependencies: - whatwg-url: "npm:^5.0.0" - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true - checksum: 10/b24f8a3dc937f388192e59bcf9d0857d7b6940a2496f328381641cb616efccc9866e89ec43f2ec956bbd6c3d3ee05524ce77fe7b29ccd34692b3a16f237d6676 - languageName: node - linkType: hard - "node-forge@npm:^1": version: 1.3.1 resolution: "node-forge@npm:1.3.1" @@ -15506,7 +15461,7 @@ __metadata: languageName: node linkType: hard -"object-assign@npm:*, object-assign@npm:^4, object-assign@npm:^4.1.0, object-assign@npm:^4.1.1": +"object-assign@npm:*, object-assign@npm:^4, object-assign@npm:^4.1.1": version: 4.1.1 resolution: "object-assign@npm:4.1.1" checksum: 10/fcc6e4ea8c7fe48abfbb552578b1c53e0d194086e2e6bbbf59e0a536381a292f39943c6e9628af05b5528aa5e3318bb30d6b2e53cadaf5b8fe9e12c4b69af23f @@ -17027,15 +16982,6 @@ __metadata: languageName: node linkType: hard -"promise@npm:^7.1.1": - version: 7.3.1 - resolution: "promise@npm:7.3.1" - dependencies: - asap: "npm:~2.0.3" - checksum: 10/37dbe58ca7b0716cc881f0618128f1fd6ff9c46cdc529a269fd70004e567126a449a94e9428e2d19b53d06182d11b45d0c399828f103e06b2bb87643319bd2e7 - languageName: node - linkType: hard - "promise@npm:^8.3.0": version: 8.3.0 resolution: "promise@npm:8.3.0" @@ -17072,7 +17018,6 @@ __metadata: eslint-plugin-react: "npm:7.37.5" eslint-webpack-plugin: "npm:^5.0.2" extract-text-webpack-plugin: "npm:^3.0.2" - fbjs: "npm:*" file-loader: "npm:6.2.0" globals: "npm:^16.4.0" html-react-parser: "npm:^5.2.5" @@ -19312,13 +19257,6 @@ __metadata: languageName: node linkType: hard -"setimmediate@npm:^1.0.5": - version: 1.0.5 - resolution: "setimmediate@npm:1.0.5" - checksum: 10/76e3f5d7f4b581b6100ff819761f04a984fa3f3990e72a6554b57188ded53efce2d3d6c0932c10f810b7c59414f85e2ab3c11521877d1dea1ce0b56dc906f485 - languageName: node - linkType: hard - "setprototypeof@npm:1.1.0": version: 1.1.0 resolution: "setprototypeof@npm:1.1.0" @@ -21134,7 +21072,7 @@ __metadata: languageName: node linkType: hard -"ua-parser-js@npm:^1.0.33, ua-parser-js@npm:^1.0.35": +"ua-parser-js@npm:^1.0.33": version: 1.0.40 resolution: "ua-parser-js@npm:1.0.40" bin: From 012027b443b812eb9232eb9ccea89b09b7d2719c Mon Sep 17 00:00:00 2001 From: Brian Dukes Date: Tue, 21 Oct 2025 16:58:44 -0500 Subject: [PATCH 110/199] Bump file-loader to 6.2.0 --- .../ClientSide/AdminLogs.Web/package.json | 110 +++++++++--------- .../ClientSide/Bundle.Web/package.json | 2 +- yarn.lock | 31 +---- 3 files changed, 60 insertions(+), 83 deletions(-) diff --git a/Dnn.AdminExperience/ClientSide/AdminLogs.Web/package.json b/Dnn.AdminExperience/ClientSide/AdminLogs.Web/package.json index 335c9adc128..e53748570d8 100644 --- a/Dnn.AdminExperience/ClientSide/AdminLogs.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/AdminLogs.Web/package.json @@ -1,55 +1,55 @@ -{ - "name": "admin-logs", - "version": "10.1.0", - "private": true, - "scripts": { - "build": "set NODE_ENV=production&&webpack --mode production", - "debug": "set NODE_ENV=debug&&webpack --mode production", - "watch": "set NODE_ENV=debug & webpack --mode=development --progress --watch", - "lint": "eslint --fix" - }, - "devDependencies": { - "@babel/core": "^7.28.4", - "@babel/plugin-proposal-object-rest-spread": "^7.20.7", - "@babel/plugin-transform-object-assign": "^7.27.1", - "@babel/preset-env": "^7.28.3", - "@babel/preset-react": "^7.27.1", - "@dnnsoftware/dnn-react-common": "10.1.0", - "array.prototype.find": "2.2.3", - "array.prototype.findindex": "2.2.4", - "babel-loader": "10.0.0", - "babel-plugin-transform-react-remove-prop-types": "0.4.24", - "babel-polyfill": "6.26.0", - "create-react-class": "^15.7.0", - "css-loader": "^7.1.2", - "es6-object-assign": "1.1.0", - "eslint": "9.38.0", - "eslint-plugin-react": "7.37.5", - "eslint-webpack-plugin": "^5.0.2", - "file-loader": "4.2.0", - "globals": "^16.4.0", - "i18n-webpack-plugin": "1.0.0", - "less": "4.1.3", - "less-loader": "12.2.0", - "prop-types": "15.8.1", - "raw-loader": "4.0.2", - "react": "^16.14.0", - "react-click-outside": "^3.0.1", - "react-dom": "^16.14.0", - "react-hot-loader": "4.13.1", - "react-redux": "^8.1.1", - "redux": "^4.2.1", - "redux-devtools": "3.7.0", - "redux-devtools-dock-monitor": "1.2.0", - "redux-devtools-log-monitor": "2.1.0", - "redux-immutable-state-invariant": "2.1.0", - "redux-thunk": "2.4.2", - "style-loader": "^4.0.0", - "throttle-debounce": "^5.0.0", - "url-loader": "1.1.2", - "webpack": "5.94.0", - "webpack-bundle-size-analyzer": "3.1.0", - "webpack-cli": "5.1.4", - "webpack-dev-server": "5.2.1" - } -} +{ + "name": "admin-logs", + "version": "10.1.0", + "private": true, + "scripts": { + "build": "set NODE_ENV=production&&webpack --mode production", + "debug": "set NODE_ENV=debug&&webpack --mode production", + "watch": "set NODE_ENV=debug & webpack --mode=development --progress --watch", + "lint": "eslint --fix" + }, + "devDependencies": { + "@babel/core": "^7.28.4", + "@babel/plugin-proposal-object-rest-spread": "^7.20.7", + "@babel/plugin-transform-object-assign": "^7.27.1", + "@babel/preset-env": "^7.28.3", + "@babel/preset-react": "^7.27.1", + "@dnnsoftware/dnn-react-common": "10.1.0", + "array.prototype.find": "2.2.3", + "array.prototype.findindex": "2.2.4", + "babel-loader": "10.0.0", + "babel-plugin-transform-react-remove-prop-types": "0.4.24", + "babel-polyfill": "6.26.0", + "create-react-class": "^15.7.0", + "css-loader": "^7.1.2", + "es6-object-assign": "1.1.0", + "eslint": "9.38.0", + "eslint-plugin-react": "7.37.5", + "eslint-webpack-plugin": "^5.0.2", + "file-loader": "6.2.0", + "globals": "^16.4.0", + "i18n-webpack-plugin": "1.0.0", + "less": "4.1.3", + "less-loader": "12.2.0", + "prop-types": "15.8.1", + "raw-loader": "4.0.2", + "react": "^16.14.0", + "react-click-outside": "^3.0.1", + "react-dom": "^16.14.0", + "react-hot-loader": "4.13.1", + "react-redux": "^8.1.1", + "redux": "^4.2.1", + "redux-devtools": "3.7.0", + "redux-devtools-dock-monitor": "1.2.0", + "redux-devtools-log-monitor": "2.1.0", + "redux-immutable-state-invariant": "2.1.0", + "redux-thunk": "2.4.2", + "style-loader": "^4.0.0", + "throttle-debounce": "^5.0.0", + "url-loader": "1.1.2", + "webpack": "5.94.0", + "webpack-bundle-size-analyzer": "3.1.0", + "webpack-cli": "5.1.4", + "webpack-dev-server": "5.2.1" + } +} diff --git a/Dnn.AdminExperience/ClientSide/Bundle.Web/package.json b/Dnn.AdminExperience/ClientSide/Bundle.Web/package.json index bc83d3fab75..af64626ed3b 100644 --- a/Dnn.AdminExperience/ClientSide/Bundle.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Bundle.Web/package.json @@ -26,7 +26,7 @@ "eslint": "9.38.0", "eslint-plugin-react": "7.37.5", "eslint-webpack-plugin": "^5.0.2", - "file-loader": "4.2.0", + "file-loader": "6.2.0", "globals": "^16.4.0", "json-loader": "^0.5.7", "less": "4.1.3", diff --git a/yarn.lock b/yarn.lock index 64c7fc2e432..880ebc96cb8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4393,7 +4393,7 @@ __metadata: languageName: node linkType: hard -"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.15, @types/json-schema@npm:^7.0.5, @types/json-schema@npm:^7.0.8, @types/json-schema@npm:^7.0.9": +"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.15, @types/json-schema@npm:^7.0.8, @types/json-schema@npm:^7.0.9": version: 7.0.15 resolution: "@types/json-schema@npm:7.0.15" checksum: 10/1a3c3e06236e4c4aab89499c428d585527ce50c24fe8259e8b3926d3df4cfbbbcf306cfc73ddfb66cbafc973116efd15967020b0f738f63e09e64c7d260519e7 @@ -5398,7 +5398,7 @@ __metadata: eslint: "npm:9.38.0" eslint-plugin-react: "npm:7.37.5" eslint-webpack-plugin: "npm:^5.0.2" - file-loader: "npm:4.2.0" + file-loader: "npm:6.2.0" globals: "npm:^16.4.0" i18n-webpack-plugin: "npm:1.0.0" less: "npm:4.1.3" @@ -10408,7 +10408,7 @@ __metadata: eslint: "npm:9.38.0" eslint-plugin-react: "npm:7.37.5" eslint-webpack-plugin: "npm:^5.0.2" - file-loader: "npm:4.2.0" + file-loader: "npm:6.2.0" globals: "npm:^16.4.0" json-loader: "npm:^0.5.7" less: "npm:4.1.3" @@ -10695,18 +10695,6 @@ __metadata: languageName: node linkType: hard -"file-loader@npm:4.2.0": - version: 4.2.0 - resolution: "file-loader@npm:4.2.0" - dependencies: - loader-utils: "npm:^1.2.3" - schema-utils: "npm:^2.0.0" - peerDependencies: - webpack: ^4.0.0 - checksum: 10/a9bda2da31e03d760b88e414973510bf94b0a8288b257a5950d07871a648d1194bd27d1116cb98812e5e172f9b088e0e8de6f8f3ca6e46c974414743e7f72f0f - languageName: node - linkType: hard - "file-loader@npm:6.2.0, file-loader@npm:~6.2.0": version: 6.2.0 resolution: "file-loader@npm:6.2.0" @@ -14032,7 +14020,7 @@ __metadata: languageName: node linkType: hard -"loader-utils@npm:^1.1.0, loader-utils@npm:^1.2.3": +"loader-utils@npm:^1.1.0": version: 1.4.2 resolution: "loader-utils@npm:1.4.2" dependencies: @@ -18904,17 +18892,6 @@ __metadata: languageName: node linkType: hard -"schema-utils@npm:^2.0.0": - version: 2.7.1 - resolution: "schema-utils@npm:2.7.1" - dependencies: - "@types/json-schema": "npm:^7.0.5" - ajv: "npm:^6.12.4" - ajv-keywords: "npm:^3.5.2" - checksum: 10/86c3038798981dbc702d5f6a86d4e4a308a2ec6e8eb1bf7d1a3ea95cb3f1972491833b76ce1c86a068652417019126d5b68219c33a9ad069358dd10429d4096d - languageName: node - linkType: hard - "schema-utils@npm:^3.0.0, schema-utils@npm:^3.1.1, schema-utils@npm:^3.2.0": version: 3.3.0 resolution: "schema-utils@npm:3.3.0" From 90a519aec66adb3b373f3b97e71c33d78c859005 Mon Sep 17 00:00:00 2001 From: Brian Dukes Date: Tue, 21 Oct 2025 16:59:42 -0500 Subject: [PATCH 111/199] Bump html-react-parser to 5.2.7 --- .../ClientSide/Prompt.Web/package.json | 2 +- yarn.lock | 30 +++++++++---------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/Dnn.AdminExperience/ClientSide/Prompt.Web/package.json b/Dnn.AdminExperience/ClientSide/Prompt.Web/package.json index af1fa404a58..52e184e3cc1 100644 --- a/Dnn.AdminExperience/ClientSide/Prompt.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Prompt.Web/package.json @@ -66,6 +66,6 @@ }, "dependencies": { "dompurify": "^3.3.0", - "html-react-parser": "^5.2.5" + "html-react-parser": "^5.2.7" } } diff --git a/yarn.lock b/yarn.lock index 880ebc96cb8..463b4238530 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11717,21 +11717,21 @@ __metadata: languageName: node linkType: hard -"html-react-parser@npm:^5.2.5": - version: 5.2.6 - resolution: "html-react-parser@npm:5.2.6" +"html-react-parser@npm:^5.2.7": + version: 5.2.7 + resolution: "html-react-parser@npm:5.2.7" dependencies: domhandler: "npm:5.0.3" html-dom-parser: "npm:5.1.1" react-property: "npm:2.0.2" - style-to-js: "npm:1.1.17" + style-to-js: "npm:1.1.18" peerDependencies: "@types/react": 0.14 || 15 || 16 || 17 || 18 || 19 react: 0.14 || 15 || 16 || 17 || 18 || 19 peerDependenciesMeta: "@types/react": optional: true - checksum: 10/be2903fd932d44ff6cae66bd18b025d318879e16eb1e67c0ae6dc640e5c77509da41b61948c0d404a43b5362b57b7cfa3963df242b9773d4c7a16f410db7f2ac + checksum: 10/8627823e9c4931bf1457d703fc57ee81feeea7f0d170ffc5f6b8d73c8b8002d1bf1d05b3f1dd92210b717a95087122464e527321bd9a345ee48b9aa383938198 languageName: node linkType: hard @@ -17008,7 +17008,7 @@ __metadata: extract-text-webpack-plugin: "npm:^3.0.2" file-loader: "npm:6.2.0" globals: "npm:^16.4.0" - html-react-parser: "npm:^5.2.5" + html-react-parser: "npm:^5.2.7" i18n-webpack-plugin: "npm:1.0.0" jest: "npm:^28.1.3" less: "npm:4.1.3" @@ -20145,21 +20145,21 @@ __metadata: languageName: node linkType: hard -"style-to-js@npm:1.1.17": - version: 1.1.17 - resolution: "style-to-js@npm:1.1.17" +"style-to-js@npm:1.1.18": + version: 1.1.18 + resolution: "style-to-js@npm:1.1.18" dependencies: - style-to-object: "npm:1.0.9" - checksum: 10/431f2fca8a55a61939a83ff0f58638e2996621ad93a97cf93f2be5115f411330d4e506ccf18621bd45607ec161546b763bb6961ad08238ad939b6261ff377230 + style-to-object: "npm:1.0.11" + checksum: 10/6cef016881e436b2c29059d7082f8604b654c8fcfba4aa4448a49f0269d0b6e1c66cbde9478e4a8b6088b5ef1d3f609f7233d0c26fa435c17842a9eeb2a327e9 languageName: node linkType: hard -"style-to-object@npm:1.0.9": - version: 1.0.9 - resolution: "style-to-object@npm:1.0.9" +"style-to-object@npm:1.0.11": + version: 1.0.11 + resolution: "style-to-object@npm:1.0.11" dependencies: inline-style-parser: "npm:0.2.4" - checksum: 10/fd0c131a83103fe4025afd8e0fd90c605054d485ad80f2ab402e7afa79f482f4b05fff40b6aa661cb1b835e5c56bb0644dc38cbf9b3d2982fc552435db3dae50 + checksum: 10/8a201b1dd2a1cc5418deed4fc4b16d1383ba5bf57672b0be3955b5281eb6485b89ecdd85be59557d6e79ff842c65f65a84c0465e78cf761ae27e9b3d9ea2e5ba languageName: node linkType: hard From f26604bbb2297126b7ad2f5924acf849b72b1716 Mon Sep 17 00:00:00 2001 From: Brian Dukes Date: Tue, 21 Oct 2025 17:03:59 -0500 Subject: [PATCH 112/199] Bump jest to 30.2.0 Platform/Website/Providers/DataProviders/SqlDataProvider/10.01.03.SqlDataProvider --- .../ClientSide/Pages.Web/package.json | 2 +- .../ClientSide/Prompt.Web/package.json | 2 +- .../ClientSide/SiteSettings.Web/package.json | 110 +- .../ClientSide/Users.Web/package.json | 2 +- yarn.lock | 1577 +++++++++-------- 5 files changed, 872 insertions(+), 821 deletions(-) diff --git a/Dnn.AdminExperience/ClientSide/Pages.Web/package.json b/Dnn.AdminExperience/ClientSide/Pages.Web/package.json index 43a1c9292e2..1a6ebf16230 100644 --- a/Dnn.AdminExperience/ClientSide/Pages.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Pages.Web/package.json @@ -44,7 +44,7 @@ "eslint-webpack-plugin": "^5.0.2", "file-loader": "6.2.0", "globals": "^16.4.0", - "jest": "^28.1.3", + "jest": "^30.2.0", "less": "4.1.3", "less-loader": "12.2.0", "lodash": "4.17.21", diff --git a/Dnn.AdminExperience/ClientSide/Prompt.Web/package.json b/Dnn.AdminExperience/ClientSide/Prompt.Web/package.json index 52e184e3cc1..72ff16a3d85 100644 --- a/Dnn.AdminExperience/ClientSide/Prompt.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Prompt.Web/package.json @@ -37,7 +37,7 @@ "file-loader": "6.2.0", "globals": "^16.4.0", "i18n-webpack-plugin": "1.0.0", - "jest": "^28.1.3", + "jest": "^30.2.0", "less": "4.1.3", "less-loader": "12.2.0", "localization": "^1.0.2", diff --git a/Dnn.AdminExperience/ClientSide/SiteSettings.Web/package.json b/Dnn.AdminExperience/ClientSide/SiteSettings.Web/package.json index 52603ad0628..c97fc9dc61b 100644 --- a/Dnn.AdminExperience/ClientSide/SiteSettings.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/SiteSettings.Web/package.json @@ -1,55 +1,55 @@ -{ - "name": "site-settings", - "version": "10.1.0", - "private": true, - "scripts": { - "build": "set NODE_ENV=production&&webpack --mode production", - "test": "jest", - "test:watch": "jest --watch", - "debug": "set NODE_ENV=debug&&webpack --mode production", - "watch": "set NODE_ENV=debug & webpack --mode=development --progress --watch", - "analyze": "set NODE_ENV=production&&webpack --mode production --json | webpack-bundle-size-analyzer", - "lint": "eslint --fix" - }, - "devDependencies": { - "@babel/core": "^7.28.4", - "@babel/plugin-proposal-object-rest-spread": "^7.20.7", - "@babel/plugin-transform-react-jsx": "^7.27.1", - "@babel/preset-env": "^7.28.3", - "@babel/preset-react": "^7.27.1", - "@dnnsoftware/dnn-react-common": "10.1.0", - "array.prototype.find": "2.2.3", - "array.prototype.findindex": "2.2.4", - "babel-loader": "^10.0.0", - "babel-plugin-transform-react-remove-prop-types": "^0.4.24", - "create-react-class": "^15.7.0", - "css-loader": "^7.1.2", - "eslint": "9.38.0", - "eslint-plugin-jest": "^29.0.1", - "eslint-plugin-react": "7.37.5", - "eslint-webpack-plugin": "^5.0.2", - "file-loader": "6.2.0", - "globals": "^16.4.0", - "jest": "^28.1.3", - "less": "4.1.3", - "less-loader": "12.2.0", - "prop-types": "^15.8.1", - "raw-loader": "4.0.2", - "react": "^16.14.0", - "react-custom-scrollbars": "4.2.1", - "react-dom": "^16.14.0", - "react-hot-loader": "4.13.1", - "react-modal": "3.16.1", - "react-redux": "^8.1.1", - "redux": "^4.2.1", - "redux-immutable-state-invariant": "^2.1.0", - "redux-thunk": "^2.4.2", - "source-map-loader": "^0.2.4", - "style-loader": "^4.0.0", - "url-loader": "1.1.2", - "webpack": "5.94.0", - "webpack-bundle-size-analyzer": "3.1.0", - "webpack-cli": "5.1.4", - "webpack-dev-server": "5.2.1" - } -} +{ + "name": "site-settings", + "version": "10.1.0", + "private": true, + "scripts": { + "build": "set NODE_ENV=production&&webpack --mode production", + "test": "jest", + "test:watch": "jest --watch", + "debug": "set NODE_ENV=debug&&webpack --mode production", + "watch": "set NODE_ENV=debug & webpack --mode=development --progress --watch", + "analyze": "set NODE_ENV=production&&webpack --mode production --json | webpack-bundle-size-analyzer", + "lint": "eslint --fix" + }, + "devDependencies": { + "@babel/core": "^7.28.4", + "@babel/plugin-proposal-object-rest-spread": "^7.20.7", + "@babel/plugin-transform-react-jsx": "^7.27.1", + "@babel/preset-env": "^7.28.3", + "@babel/preset-react": "^7.27.1", + "@dnnsoftware/dnn-react-common": "10.1.0", + "array.prototype.find": "2.2.3", + "array.prototype.findindex": "2.2.4", + "babel-loader": "^10.0.0", + "babel-plugin-transform-react-remove-prop-types": "^0.4.24", + "create-react-class": "^15.7.0", + "css-loader": "^7.1.2", + "eslint": "9.38.0", + "eslint-plugin-jest": "^29.0.1", + "eslint-plugin-react": "7.37.5", + "eslint-webpack-plugin": "^5.0.2", + "file-loader": "6.2.0", + "globals": "^16.4.0", + "jest": "^30.2.0", + "less": "4.1.3", + "less-loader": "12.2.0", + "prop-types": "^15.8.1", + "raw-loader": "4.0.2", + "react": "^16.14.0", + "react-custom-scrollbars": "4.2.1", + "react-dom": "^16.14.0", + "react-hot-loader": "4.13.1", + "react-modal": "3.16.1", + "react-redux": "^8.1.1", + "redux": "^4.2.1", + "redux-immutable-state-invariant": "^2.1.0", + "redux-thunk": "^2.4.2", + "source-map-loader": "^0.2.4", + "style-loader": "^4.0.0", + "url-loader": "1.1.2", + "webpack": "5.94.0", + "webpack-bundle-size-analyzer": "3.1.0", + "webpack-cli": "5.1.4", + "webpack-dev-server": "5.2.1" + } +} diff --git a/Dnn.AdminExperience/ClientSide/Users.Web/package.json b/Dnn.AdminExperience/ClientSide/Users.Web/package.json index 6d9e16ed682..ce4ab070ac0 100644 --- a/Dnn.AdminExperience/ClientSide/Users.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Users.Web/package.json @@ -25,7 +25,7 @@ "eslint-webpack-plugin": "^5.0.2", "file-loader": "6.2.0", "globals": "^16.4.0", - "jest": "^28.1.3", + "jest": "^30.2.0", "less": "4.1.3", "less-loader": "12.2.0", "null-loader": "^4.0.1", diff --git a/yarn.lock b/yarn.lock index 463b4238530..abd69a87189 100644 --- a/yarn.lock +++ b/yarn.lock @@ -35,7 +35,7 @@ __metadata: languageName: node linkType: hard -"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.16.7, @babel/code-frame@npm:^7.27.1": +"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.16.7, @babel/code-frame@npm:^7.27.1": version: 7.27.1 resolution: "@babel/code-frame@npm:7.27.1" dependencies: @@ -76,7 +76,7 @@ __metadata: languageName: node linkType: hard -"@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.18.9": +"@babel/core@npm:^7.18.9": version: 7.28.0 resolution: "@babel/core@npm:7.28.0" dependencies: @@ -125,29 +125,29 @@ __metadata: languageName: node linkType: hard -"@babel/generator@npm:^7.28.0, @babel/generator@npm:^7.7.2": - version: 7.28.0 - resolution: "@babel/generator@npm:7.28.0" +"@babel/generator@npm:^7.27.5, @babel/generator@npm:^7.28.3": + version: 7.28.3 + resolution: "@babel/generator@npm:7.28.3" dependencies: - "@babel/parser": "npm:^7.28.0" - "@babel/types": "npm:^7.28.0" + "@babel/parser": "npm:^7.28.3" + "@babel/types": "npm:^7.28.2" "@jridgewell/gen-mapping": "npm:^0.3.12" "@jridgewell/trace-mapping": "npm:^0.3.28" jsesc: "npm:^3.0.2" - checksum: 10/064c5ba4c07ecd7600377bd0022d5f6bdb3b35e9ff78d9378f6bd1e656467ca902c091647222ab2f0d2967f6d6c0ca33157d37dd9b1c51926c9b0e1527ab9b92 + checksum: 10/d00d1e6b51059e47594aab7920b88ec6fcef6489954a9172235ab57ad2e91b39c95376963a6e2e4cc7e8b88fa4f931018f71f9ab32bbc9c0bc0de35a0231f26c languageName: node linkType: hard -"@babel/generator@npm:^7.28.3": - version: 7.28.3 - resolution: "@babel/generator@npm:7.28.3" +"@babel/generator@npm:^7.28.0": + version: 7.28.0 + resolution: "@babel/generator@npm:7.28.0" dependencies: - "@babel/parser": "npm:^7.28.3" - "@babel/types": "npm:^7.28.2" + "@babel/parser": "npm:^7.28.0" + "@babel/types": "npm:^7.28.0" "@jridgewell/gen-mapping": "npm:^0.3.12" "@jridgewell/trace-mapping": "npm:^0.3.28" jsesc: "npm:^3.0.2" - checksum: 10/d00d1e6b51059e47594aab7920b88ec6fcef6489954a9172235ab57ad2e91b39c95376963a6e2e4cc7e8b88fa4f931018f71f9ab32bbc9c0bc0de35a0231f26c + checksum: 10/064c5ba4c07ecd7600377bd0022d5f6bdb3b35e9ff78d9378f6bd1e656467ca902c091647222ab2f0d2967f6d6c0ca33157d37dd9b1c51926c9b0e1527ab9b92 languageName: node linkType: hard @@ -392,7 +392,7 @@ __metadata: languageName: node linkType: hard -"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.27.2, @babel/parser@npm:^7.28.0, @babel/parser@npm:^7.7.0": +"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.27.2, @babel/parser@npm:^7.28.0, @babel/parser@npm:^7.7.0": version: 7.28.0 resolution: "@babel/parser@npm:7.28.0" dependencies: @@ -684,7 +684,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-typescript@npm:^7.7.2": +"@babel/plugin-syntax-typescript@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-syntax-typescript@npm:7.27.1" dependencies: @@ -1484,7 +1484,7 @@ __metadata: languageName: node linkType: hard -"@babel/template@npm:^7.27.1, @babel/template@npm:^7.27.2, @babel/template@npm:^7.3.3": +"@babel/template@npm:^7.27.1, @babel/template@npm:^7.27.2": version: 7.27.2 resolution: "@babel/template@npm:7.27.2" dependencies: @@ -1495,7 +1495,7 @@ __metadata: languageName: node linkType: hard -"@babel/traverse@npm:^7.18.9, @babel/traverse@npm:^7.27.1, @babel/traverse@npm:^7.27.3, @babel/traverse@npm:^7.28.0, @babel/traverse@npm:^7.7.0, @babel/traverse@npm:^7.7.2": +"@babel/traverse@npm:^7.18.9, @babel/traverse@npm:^7.27.1, @babel/traverse@npm:^7.27.3, @babel/traverse@npm:^7.28.0, @babel/traverse@npm:^7.7.0": version: 7.28.0 resolution: "@babel/traverse@npm:7.28.0" dependencies: @@ -1525,7 +1525,7 @@ __metadata: languageName: node linkType: hard -"@babel/types@npm:^7.0.0, @babel/types@npm:^7.18.9, @babel/types@npm:^7.20.7, @babel/types@npm:^7.27.1, @babel/types@npm:^7.27.3, @babel/types@npm:^7.27.6, @babel/types@npm:^7.28.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4, @babel/types@npm:^7.7.0": +"@babel/types@npm:^7.0.0, @babel/types@npm:^7.18.9, @babel/types@npm:^7.20.7, @babel/types@npm:^7.27.1, @babel/types@npm:^7.27.3, @babel/types@npm:^7.27.6, @babel/types@npm:^7.28.0, @babel/types@npm:^7.4.4, @babel/types@npm:^7.7.0": version: 7.28.0 resolution: "@babel/types@npm:7.28.0" dependencies: @@ -1711,6 +1711,16 @@ __metadata: languageName: node linkType: hard +"@emnapi/core@npm:^1.4.3": + version: 1.5.0 + resolution: "@emnapi/core@npm:1.5.0" + dependencies: + "@emnapi/wasi-threads": "npm:1.1.0" + tslib: "npm:^2.4.0" + checksum: 10/b500a69df001580731b0d355298b58832d44ab176937c0db7d10073a396f7a801ebcca10581f125a1cd88af4e6ecd6fbb04b78629cc703a424218b3a36d7bf50 + languageName: node + linkType: hard + "@emnapi/runtime@npm:^1.1.0": version: 1.4.4 resolution: "@emnapi/runtime@npm:1.4.4" @@ -1720,6 +1730,15 @@ __metadata: languageName: node linkType: hard +"@emnapi/runtime@npm:^1.4.3": + version: 1.5.0 + resolution: "@emnapi/runtime@npm:1.5.0" + dependencies: + tslib: "npm:^2.4.0" + checksum: 10/5311ce854306babc77f4bd94c2f973722714a0fab93c126239104ad52dea16a147bfed4c4cff3ca1eb32709607221c25d2f747ae8524cbeb9088058f02ff962b + languageName: node + linkType: hard + "@emnapi/wasi-threads@npm:1.0.3": version: 1.0.3 resolution: "@emnapi/wasi-threads@npm:1.0.3" @@ -1729,6 +1748,15 @@ __metadata: languageName: node linkType: hard +"@emnapi/wasi-threads@npm:1.1.0": + version: 1.1.0 + resolution: "@emnapi/wasi-threads@npm:1.1.0" + dependencies: + tslib: "npm:^2.4.0" + checksum: 10/0d557e75262d2f4c95cb2a456ba0785ef61f919ce488c1d76e5e3acfd26e00c753ef928cd80068363e0c166ba8cc0141305daf0f81aad5afcd421f38f11e0f4e + languageName: node + linkType: hard + "@esbuild/aix-ppc64@npm:0.25.11": version: 0.25.11 resolution: "@esbuild/aix-ppc64@npm:0.25.11" @@ -2317,115 +2345,129 @@ __metadata: languageName: node linkType: hard -"@jest/console@npm:^28.1.3": - version: 28.1.3 - resolution: "@jest/console@npm:28.1.3" +"@jest/console@npm:30.2.0": + version: 30.2.0 + resolution: "@jest/console@npm:30.2.0" dependencies: - "@jest/types": "npm:^28.1.3" + "@jest/types": "npm:30.2.0" "@types/node": "npm:*" - chalk: "npm:^4.0.0" - jest-message-util: "npm:^28.1.3" - jest-util: "npm:^28.1.3" + chalk: "npm:^4.1.2" + jest-message-util: "npm:30.2.0" + jest-util: "npm:30.2.0" slash: "npm:^3.0.0" - checksum: 10/82153eb24e61bd442bff350a7537d598e7c49097aabd9545b340582dcf1f17e5749baa342a67e564816a3a6ce746038b618ed9f66702140264bfa1e1d5cc9e5e + checksum: 10/7cda9793962afa5c7fcfdde0ff5012694683b17941ee3c6a55ea9fd9a02f1c51ec4b4c767b867e1226f85a26af1d0f0d72c6a344e34c5bc4300312ebffd6e50b languageName: node linkType: hard -"@jest/core@npm:^28.1.3": - version: 28.1.3 - resolution: "@jest/core@npm:28.1.3" +"@jest/core@npm:30.2.0": + version: 30.2.0 + resolution: "@jest/core@npm:30.2.0" dependencies: - "@jest/console": "npm:^28.1.3" - "@jest/reporters": "npm:^28.1.3" - "@jest/test-result": "npm:^28.1.3" - "@jest/transform": "npm:^28.1.3" - "@jest/types": "npm:^28.1.3" + "@jest/console": "npm:30.2.0" + "@jest/pattern": "npm:30.0.1" + "@jest/reporters": "npm:30.2.0" + "@jest/test-result": "npm:30.2.0" + "@jest/transform": "npm:30.2.0" + "@jest/types": "npm:30.2.0" "@types/node": "npm:*" - ansi-escapes: "npm:^4.2.1" - chalk: "npm:^4.0.0" - ci-info: "npm:^3.2.0" - exit: "npm:^0.1.2" - graceful-fs: "npm:^4.2.9" - jest-changed-files: "npm:^28.1.3" - jest-config: "npm:^28.1.3" - jest-haste-map: "npm:^28.1.3" - jest-message-util: "npm:^28.1.3" - jest-regex-util: "npm:^28.0.2" - jest-resolve: "npm:^28.1.3" - jest-resolve-dependencies: "npm:^28.1.3" - jest-runner: "npm:^28.1.3" - jest-runtime: "npm:^28.1.3" - jest-snapshot: "npm:^28.1.3" - jest-util: "npm:^28.1.3" - jest-validate: "npm:^28.1.3" - jest-watcher: "npm:^28.1.3" - micromatch: "npm:^4.0.4" - pretty-format: "npm:^28.1.3" - rimraf: "npm:^3.0.0" + ansi-escapes: "npm:^4.3.2" + chalk: "npm:^4.1.2" + ci-info: "npm:^4.2.0" + exit-x: "npm:^0.2.2" + graceful-fs: "npm:^4.2.11" + jest-changed-files: "npm:30.2.0" + jest-config: "npm:30.2.0" + jest-haste-map: "npm:30.2.0" + jest-message-util: "npm:30.2.0" + jest-regex-util: "npm:30.0.1" + jest-resolve: "npm:30.2.0" + jest-resolve-dependencies: "npm:30.2.0" + jest-runner: "npm:30.2.0" + jest-runtime: "npm:30.2.0" + jest-snapshot: "npm:30.2.0" + jest-util: "npm:30.2.0" + jest-validate: "npm:30.2.0" + jest-watcher: "npm:30.2.0" + micromatch: "npm:^4.0.8" + pretty-format: "npm:30.2.0" slash: "npm:^3.0.0" - strip-ansi: "npm:^6.0.0" peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: node-notifier: optional: true - checksum: 10/72b56c7591dd1ec325c40e9f60f8111e17d4a09c918b7e5882de58ed1c656d6d34f085dfbdb49f65e6ac95b49919976c7b07821663cbcccd7f3a55c29db542b9 + checksum: 10/6763bb1efd937778f009821cd94c3705d3c31a156258a224b8745c1e0887976683f5413745ffb361b526f0fa2692e36aaa963aa197cc77ba932cff9d6d28af9d languageName: node linkType: hard -"@jest/environment@npm:^28.1.3": - version: 28.1.3 - resolution: "@jest/environment@npm:28.1.3" +"@jest/diff-sequences@npm:30.0.1": + version: 30.0.1 + resolution: "@jest/diff-sequences@npm:30.0.1" + checksum: 10/0ddb7c7ba92d6057a2ee51a9cfc2155b77cca707fe959167466ea02dcb0687018cc3c22b9622f25f3a417d6ad370e2d4dcfedf9f1410dc9c02954a7484423cc7 + languageName: node + linkType: hard + +"@jest/environment@npm:30.2.0": + version: 30.2.0 + resolution: "@jest/environment@npm:30.2.0" dependencies: - "@jest/fake-timers": "npm:^28.1.3" - "@jest/types": "npm:^28.1.3" + "@jest/fake-timers": "npm:30.2.0" + "@jest/types": "npm:30.2.0" "@types/node": "npm:*" - jest-mock: "npm:^28.1.3" - checksum: 10/63a8efd099f8d5cd70398c7608d45fc91a5796b14d8f9f8c7fdb3a529e42004e3b60cf0c6e117cc88305d18ab7bb453f803a737e09293e9027a1e76ce835da57 + jest-mock: "npm:30.2.0" + checksum: 10/e168a4ff328980eb9fde5e43aea80807fd0b2dbd4579ae8f68a03415a1e58adf5661db298054fa2351c7cb2b5a74bf67b8ab996656cf5927d0b0d0b6e2c2966b languageName: node linkType: hard -"@jest/expect-utils@npm:^28.1.3": - version: 28.1.3 - resolution: "@jest/expect-utils@npm:28.1.3" +"@jest/expect-utils@npm:30.2.0": + version: 30.2.0 + resolution: "@jest/expect-utils@npm:30.2.0" dependencies: - jest-get-type: "npm:^28.0.2" - checksum: 10/f48e4c5b267438a565b6e4c00a06f2bd566dc65d8bb6114d57276ec1fa4f4cded548371e45caffe37c58e5cf3716dbec715c10cfacdae35c4c04b755d83fac96 + "@jest/get-type": "npm:30.1.0" + checksum: 10/f2442f1bceb3411240d0f16fd0074377211b4373d3b8b2dc28929e861b6527a6deb403a362c25afa511d933cda4dfbdc98d4a08eeb51ee4968f7cb0299562349 languageName: node linkType: hard -"@jest/expect@npm:^28.1.3": - version: 28.1.3 - resolution: "@jest/expect@npm:28.1.3" +"@jest/expect@npm:30.2.0": + version: 30.2.0 + resolution: "@jest/expect@npm:30.2.0" dependencies: - expect: "npm:^28.1.3" - jest-snapshot: "npm:^28.1.3" - checksum: 10/31ea089e83a4c24f850043a97dfd777a352dd28a936819785f3d0de6e0bd537bfbfa8fd2df081db1adc68a6a55699e7d4ab3990d6a54e41753d86e5d2b66df2f + expect: "npm:30.2.0" + jest-snapshot: "npm:30.2.0" + checksum: 10/d950d95a64d5c6a39d56171dabb8dbe59423096231bb4f21d8ee0019878e6626701ac9d782803dc2589e2799ed39704031f818533f8a3e571b57032eafa85d12 languageName: node linkType: hard -"@jest/fake-timers@npm:^28.1.3": - version: 28.1.3 - resolution: "@jest/fake-timers@npm:28.1.3" +"@jest/fake-timers@npm:30.2.0": + version: 30.2.0 + resolution: "@jest/fake-timers@npm:30.2.0" dependencies: - "@jest/types": "npm:^28.1.3" - "@sinonjs/fake-timers": "npm:^9.1.2" + "@jest/types": "npm:30.2.0" + "@sinonjs/fake-timers": "npm:^13.0.0" "@types/node": "npm:*" - jest-message-util: "npm:^28.1.3" - jest-mock: "npm:^28.1.3" - jest-util: "npm:^28.1.3" - checksum: 10/4002208f6637adc374175c97e845a19783f58874e9503fb956b801061ba1869a218964cf4631e1ac348e06e1667e982ceb94734db63ccfafdf37508f6b59be17 + jest-message-util: "npm:30.2.0" + jest-mock: "npm:30.2.0" + jest-util: "npm:30.2.0" + checksum: 10/c2df66576ba8049b07d5f239777243e21fcdaa09a446be1e55fac709d6273e2a926c1562e0372c3013142557ed9d386381624023549267a667b6e1b656e37fe6 + languageName: node + linkType: hard + +"@jest/get-type@npm:30.1.0": + version: 30.1.0 + resolution: "@jest/get-type@npm:30.1.0" + checksum: 10/e2a95fbb49ce2d15547db8af5602626caf9b05f62a5e583b4a2de9bd93a2bfe7175f9bbb2b8a5c3909ce261d467b6991d7265bb1d547cb60e7e97f571f361a70 languageName: node linkType: hard -"@jest/globals@npm:^28.1.3": - version: 28.1.3 - resolution: "@jest/globals@npm:28.1.3" +"@jest/globals@npm:30.2.0": + version: 30.2.0 + resolution: "@jest/globals@npm:30.2.0" dependencies: - "@jest/environment": "npm:^28.1.3" - "@jest/expect": "npm:^28.1.3" - "@jest/types": "npm:^28.1.3" - checksum: 10/3504bb23de629d466c6f2b6b75d2e1c1b10caccbbcfb7eaa82d22cc37711c8e364c243929581184846605c023b475ea6c42c2e3ea5994429a988d8d527af32cd + "@jest/environment": "npm:30.2.0" + "@jest/expect": "npm:30.2.0" + "@jest/types": "npm:30.2.0" + jest-mock: "npm:30.2.0" + checksum: 10/d4a331d3847cebb3acefe120350d8a6bb5517c1403de7cd2b4dc67be425f37ba0511beee77d6837b4da2d93a25a06d6f829ad7837da365fae45e1da57523525c languageName: node linkType: hard @@ -2439,41 +2481,39 @@ __metadata: languageName: node linkType: hard -"@jest/reporters@npm:^28.1.3": - version: 28.1.3 - resolution: "@jest/reporters@npm:28.1.3" +"@jest/reporters@npm:30.2.0": + version: 30.2.0 + resolution: "@jest/reporters@npm:30.2.0" dependencies: "@bcoe/v8-coverage": "npm:^0.2.3" - "@jest/console": "npm:^28.1.3" - "@jest/test-result": "npm:^28.1.3" - "@jest/transform": "npm:^28.1.3" - "@jest/types": "npm:^28.1.3" - "@jridgewell/trace-mapping": "npm:^0.3.13" + "@jest/console": "npm:30.2.0" + "@jest/test-result": "npm:30.2.0" + "@jest/transform": "npm:30.2.0" + "@jest/types": "npm:30.2.0" + "@jridgewell/trace-mapping": "npm:^0.3.25" "@types/node": "npm:*" - chalk: "npm:^4.0.0" - collect-v8-coverage: "npm:^1.0.0" - exit: "npm:^0.1.2" - glob: "npm:^7.1.3" - graceful-fs: "npm:^4.2.9" + chalk: "npm:^4.1.2" + collect-v8-coverage: "npm:^1.0.2" + exit-x: "npm:^0.2.2" + glob: "npm:^10.3.10" + graceful-fs: "npm:^4.2.11" istanbul-lib-coverage: "npm:^3.0.0" - istanbul-lib-instrument: "npm:^5.1.0" + istanbul-lib-instrument: "npm:^6.0.0" istanbul-lib-report: "npm:^3.0.0" - istanbul-lib-source-maps: "npm:^4.0.0" + istanbul-lib-source-maps: "npm:^5.0.0" istanbul-reports: "npm:^3.1.3" - jest-message-util: "npm:^28.1.3" - jest-util: "npm:^28.1.3" - jest-worker: "npm:^28.1.3" + jest-message-util: "npm:30.2.0" + jest-util: "npm:30.2.0" + jest-worker: "npm:30.2.0" slash: "npm:^3.0.0" - string-length: "npm:^4.0.1" - strip-ansi: "npm:^6.0.0" - terminal-link: "npm:^2.0.0" + string-length: "npm:^4.0.2" v8-to-istanbul: "npm:^9.0.1" peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: node-notifier: optional: true - checksum: 10/bdce58bf1cf1fc0f7fb0c2ae02b5a9a1da32da83ee4697b2b23b8a5b0ac056af55dac07dcf7e869f963943e935da3bd26a788c478b6d52064c77320530d95a89 + checksum: 10/3848b59bf740c10c4e5c234dcc41c54adbd74932bf05d1d1582d09d86e9baa86ddaf3c43903505fd042ba1203c2889a732137d08058ce9dc0069ba33b5d5373d languageName: node linkType: hard @@ -2486,15 +2526,6 @@ __metadata: languageName: node linkType: hard -"@jest/schemas@npm:^28.1.3": - version: 28.1.3 - resolution: "@jest/schemas@npm:28.1.3" - dependencies: - "@sinclair/typebox": "npm:^0.24.1" - checksum: 10/3cf1d4b66c9c4ffda58b246de1ddcba8e6ad085af63dccdf07922511f13b68c0cc480a7bc620cb4f3099a6f134801c747e1df7bfc7a4ef4dceefbdea3e31e1de - languageName: node - linkType: hard - "@jest/schemas@npm:^29.6.3": version: 29.6.3 resolution: "@jest/schemas@npm:29.6.3" @@ -2504,38 +2535,50 @@ __metadata: languageName: node linkType: hard -"@jest/source-map@npm:^28.1.2": - version: 28.1.2 - resolution: "@jest/source-map@npm:28.1.2" +"@jest/snapshot-utils@npm:30.2.0": + version: 30.2.0 + resolution: "@jest/snapshot-utils@npm:30.2.0" dependencies: - "@jridgewell/trace-mapping": "npm:^0.3.13" - callsites: "npm:^3.0.0" - graceful-fs: "npm:^4.2.9" - checksum: 10/b82a5c2e93d35d86779c61a02ccb967d1b5cd2e9dd67d26d8add44958637cbbb99daeeb8129c7653389cb440dc2a2f5ae4d2183dc453c67669ff98938b775a3a + "@jest/types": "npm:30.2.0" + chalk: "npm:^4.1.2" + graceful-fs: "npm:^4.2.11" + natural-compare: "npm:^1.4.0" + checksum: 10/6b30ab2b0682117e3ce775e70b5be1eb01e1ea53a74f12ac7090cd1a5f37e9b795cd8de83853afa7b4b799c96b1c482499aa993ca2034ea0679525d32b7f9625 languageName: node linkType: hard -"@jest/test-result@npm:^28.1.3": - version: 28.1.3 - resolution: "@jest/test-result@npm:28.1.3" +"@jest/source-map@npm:30.0.1": + version: 30.0.1 + resolution: "@jest/source-map@npm:30.0.1" dependencies: - "@jest/console": "npm:^28.1.3" - "@jest/types": "npm:^28.1.3" - "@types/istanbul-lib-coverage": "npm:^2.0.0" - collect-v8-coverage: "npm:^1.0.0" - checksum: 10/d343f08e6e4971e8132540014711c5d29887651b036f03db8c7e9d6509fe9801316f0a6a393cd0af0431c50e6d1c1d310957f06b6cc20c08cab2e67b66a00c88 + "@jridgewell/trace-mapping": "npm:^0.3.25" + callsites: "npm:^3.1.0" + graceful-fs: "npm:^4.2.11" + checksum: 10/161b27cdf8d9d80fd99374d55222b90478864c6990514be6ebee72b7184a034224c9aceed12c476f3a48d48601bf8ed2e0c047a5a81bd907dc192ebe71365ed4 languageName: node linkType: hard -"@jest/test-sequencer@npm:^28.1.3": - version: 28.1.3 - resolution: "@jest/test-sequencer@npm:28.1.3" +"@jest/test-result@npm:30.2.0": + version: 30.2.0 + resolution: "@jest/test-result@npm:30.2.0" dependencies: - "@jest/test-result": "npm:^28.1.3" - graceful-fs: "npm:^4.2.9" - jest-haste-map: "npm:^28.1.3" + "@jest/console": "npm:30.2.0" + "@jest/types": "npm:30.2.0" + "@types/istanbul-lib-coverage": "npm:^2.0.6" + collect-v8-coverage: "npm:^1.0.2" + checksum: 10/f58f79c3c3ba6dd15325e05b0b5a300777cd8cc38327f622608b6fe849b1073ee9633e33d1e5d7ef5b97a1ce71543d0ad92674b7a279f53033143e8dd7c22959 + languageName: node + linkType: hard + +"@jest/test-sequencer@npm:30.2.0": + version: 30.2.0 + resolution: "@jest/test-sequencer@npm:30.2.0" + dependencies: + "@jest/test-result": "npm:30.2.0" + graceful-fs: "npm:^4.2.11" + jest-haste-map: "npm:30.2.0" slash: "npm:^3.0.0" - checksum: 10/a2f05475c39a8e3e446a0f98c6830aa2492daffe8286db58c95e1870479ed4c2a74e2e51fac1d8b2958858aeb194331145c217d04482fb9312ba1a9e7dded171 + checksum: 10/7923964b27048b2233858b32aa1b34d4dd9e404311626d944a706bcdcaa0b1585f43f2ffa3fa893ecbf133566f31ba2b79ab5eaaaf674b8558c6c7029ecbea5e languageName: node linkType: hard @@ -2562,29 +2605,6 @@ __metadata: languageName: node linkType: hard -"@jest/transform@npm:^28.1.3": - version: 28.1.3 - resolution: "@jest/transform@npm:28.1.3" - dependencies: - "@babel/core": "npm:^7.11.6" - "@jest/types": "npm:^28.1.3" - "@jridgewell/trace-mapping": "npm:^0.3.13" - babel-plugin-istanbul: "npm:^6.1.1" - chalk: "npm:^4.0.0" - convert-source-map: "npm:^1.4.0" - fast-json-stable-stringify: "npm:^2.0.0" - graceful-fs: "npm:^4.2.9" - jest-haste-map: "npm:^28.1.3" - jest-regex-util: "npm:^28.0.2" - jest-util: "npm:^28.1.3" - micromatch: "npm:^4.0.4" - pirates: "npm:^4.0.4" - slash: "npm:^3.0.0" - write-file-atomic: "npm:^4.0.1" - checksum: 10/89bc17ca22d5e81eb35e9549beaa5778da0209c12c108552322b72fa7b41a387d119168dea28fd9415f16883fc6dd7a811690654ebb958375e70158b4d0e2965 - languageName: node - linkType: hard - "@jest/types@npm:30.2.0": version: 30.2.0 resolution: "@jest/types@npm:30.2.0" @@ -2600,20 +2620,6 @@ __metadata: languageName: node linkType: hard -"@jest/types@npm:^28.1.3": - version: 28.1.3 - resolution: "@jest/types@npm:28.1.3" - dependencies: - "@jest/schemas": "npm:^28.1.3" - "@types/istanbul-lib-coverage": "npm:^2.0.0" - "@types/istanbul-reports": "npm:^3.0.0" - "@types/node": "npm:*" - "@types/yargs": "npm:^17.0.8" - chalk: "npm:^4.0.0" - checksum: 10/a90e636df760799b6c3d91e34e539e701ea803e80312257e674e345a3c23a7c892df7a301afbc7883ec1d623daf3ba266cde57c5965e0692e5f1e61915d3524b - languageName: node - linkType: hard - "@jest/types@npm:^29.6.3": version: 29.6.3 resolution: "@jest/types@npm:29.6.3" @@ -2679,7 +2685,7 @@ __metadata: languageName: node linkType: hard -"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.13, @jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25, @jridgewell/trace-mapping@npm:^0.3.28": +"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25, @jridgewell/trace-mapping@npm:^0.3.28": version: 0.3.29 resolution: "@jridgewell/trace-mapping@npm:0.3.29" dependencies: @@ -2689,6 +2695,16 @@ __metadata: languageName: node linkType: hard +"@jridgewell/trace-mapping@npm:^0.3.23": + version: 0.3.31 + resolution: "@jridgewell/trace-mapping@npm:0.3.31" + dependencies: + "@jridgewell/resolve-uri": "npm:^3.1.0" + "@jridgewell/sourcemap-codec": "npm:^1.4.14" + checksum: 10/da0283270e691bdb5543806077548532791608e52386cfbbf3b9e8fb00457859d1bd01d512851161c886eb3a2f3ce6fd9bcf25db8edf3bddedd275bd4a88d606 + languageName: node + linkType: hard + "@jsonjoy.com/base64@npm:^1.1.1": version: 1.1.2 resolution: "@jsonjoy.com/base64@npm:1.1.2" @@ -2829,6 +2845,17 @@ __metadata: languageName: node linkType: hard +"@napi-rs/wasm-runtime@npm:^0.2.11": + version: 0.2.12 + resolution: "@napi-rs/wasm-runtime@npm:0.2.12" + dependencies: + "@emnapi/core": "npm:^1.4.3" + "@emnapi/runtime": "npm:^1.4.3" + "@tybys/wasm-util": "npm:^0.10.0" + checksum: 10/5fd518182427980c28bc724adf06c5f32f9a8915763ef560b5f7d73607d30cd15ac86d0cbd2eb80d4cfab23fc80d0876d89ca36a9daadcb864bc00917c94187c + languageName: node + linkType: hard + "@nicolo-ribaudo/eslint-scope-5-internals@npm:5.1.1-v1": version: 5.1.1-v1 resolution: "@nicolo-ribaudo/eslint-scope-5-internals@npm:5.1.1-v1" @@ -3462,6 +3489,13 @@ __metadata: languageName: node linkType: hard +"@pkgr/core@npm:^0.2.9": + version: 0.2.9 + resolution: "@pkgr/core@npm:0.2.9" + checksum: 10/bb2fb86977d63f836f8f5b09015d74e6af6488f7a411dcd2bfdca79d76b5a681a9112f41c45bdf88a9069f049718efc6f3900d7f1de66a2ec966068308ae517f + languageName: node + linkType: hard + "@polka/url@npm:^1.0.0-next.24": version: 1.0.0-next.29 resolution: "@polka/url@npm:1.0.0-next.29" @@ -3601,13 +3635,6 @@ __metadata: languageName: node linkType: hard -"@sinclair/typebox@npm:^0.24.1": - version: 0.24.51 - resolution: "@sinclair/typebox@npm:0.24.51" - checksum: 10/7886847b9deda1d926934066fe69165a1d9bbe7b0f836543c25efb96173c17009ef7a98619f48b379294bf27958844da3428eb35e65f8d941ea43563ad6e961e - languageName: node - linkType: hard - "@sinclair/typebox@npm:^0.27.8": version: 0.27.8 resolution: "@sinclair/typebox@npm:0.27.8" @@ -3629,21 +3656,21 @@ __metadata: languageName: node linkType: hard -"@sinonjs/commons@npm:^1.7.0": - version: 1.8.6 - resolution: "@sinonjs/commons@npm:1.8.6" +"@sinonjs/commons@npm:^3.0.1": + version: 3.0.1 + resolution: "@sinonjs/commons@npm:3.0.1" dependencies: type-detect: "npm:4.0.8" - checksum: 10/51987338fd8b4d1e135822ad593dd23a3288764aa41d83c695124d512bc38b87eece859078008651ecc7f1df89a7e558a515dc6f02d21a93be4ba50b39a28914 + checksum: 10/a0af217ba7044426c78df52c23cedede6daf377586f3ac58857c565769358ab1f44ebf95ba04bbe38814fba6e316ca6f02870a009328294fc2c555d0f85a7117 languageName: node linkType: hard -"@sinonjs/fake-timers@npm:^9.1.2": - version: 9.1.2 - resolution: "@sinonjs/fake-timers@npm:9.1.2" +"@sinonjs/fake-timers@npm:^13.0.0": + version: 13.0.5 + resolution: "@sinonjs/fake-timers@npm:13.0.5" dependencies: - "@sinonjs/commons": "npm:^1.7.0" - checksum: 10/033c74ad389b0655b6af2fa1af31dddf45878e65879f06c5d1940e0ceb053a234f2f46c728dcd97df8ee9312431e45dd7aedaee3a69d47f73a2001a7547fc3d6 + "@sinonjs/commons": "npm:^3.0.1" + checksum: 10/11ee417968fc4dce1896ab332ac13f353866075a9d2a88ed1f6258f17cc4f7d93e66031b51fcddb8c203aa4d53fd980b0ae18aba06269f4682164878a992ec3f languageName: node linkType: hard @@ -4095,6 +4122,15 @@ __metadata: languageName: node linkType: hard +"@tybys/wasm-util@npm:^0.10.0": + version: 0.10.1 + resolution: "@tybys/wasm-util@npm:0.10.1" + dependencies: + tslib: "npm:^2.4.0" + checksum: 10/7fe0d239397aebb002ac4855d30c197c06a05ea8df8511350a3a5b1abeefe26167c60eda8a5508337571161e4c4b53d7c1342296123f9607af8705369de9fa7f + languageName: node + linkType: hard + "@tybys/wasm-util@npm:^0.9.0": version: 0.9.0 resolution: "@tybys/wasm-util@npm:0.9.0" @@ -4104,7 +4140,7 @@ __metadata: languageName: node linkType: hard -"@types/babel__core@npm:^7.1.14, @types/babel__core@npm:^7.18.0, @types/babel__core@npm:^7.20.5": +"@types/babel__core@npm:^7.18.0, @types/babel__core@npm:^7.20.5": version: 7.20.5 resolution: "@types/babel__core@npm:7.20.5" dependencies: @@ -4136,7 +4172,7 @@ __metadata: languageName: node linkType: hard -"@types/babel__traverse@npm:*, @types/babel__traverse@npm:^7.0.6, @types/babel__traverse@npm:^7.18.0": +"@types/babel__traverse@npm:*, @types/babel__traverse@npm:^7.18.0": version: 7.20.7 resolution: "@types/babel__traverse@npm:7.20.7" dependencies: @@ -4326,15 +4362,6 @@ __metadata: languageName: node linkType: hard -"@types/graceful-fs@npm:^4.1.3": - version: 4.1.9 - resolution: "@types/graceful-fs@npm:4.1.9" - dependencies: - "@types/node": "npm:*" - checksum: 10/79d746a8f053954bba36bd3d94a90c78de995d126289d656fb3271dd9f1229d33f678da04d10bce6be440494a5a73438e2e363e92802d16b8315b051036c5256 - languageName: node - linkType: hard - "@types/hoist-non-react-statics@npm:^3.3.1": version: 3.3.6 resolution: "@types/hoist-non-react-statics@npm:3.3.6" @@ -4524,13 +4551,6 @@ __metadata: languageName: node linkType: hard -"@types/prettier@npm:^2.1.5": - version: 2.7.3 - resolution: "@types/prettier@npm:2.7.3" - checksum: 10/cda84c19acc3bf327545b1ce71114a7d08efbd67b5030b9e8277b347fa57b05178045f70debe1d363ff7efdae62f237260713aafc2d7217e06fc99b048a88497 - languageName: node - linkType: hard - "@types/prop-types@npm:^15.7.3": version: 15.7.15 resolution: "@types/prop-types@npm:15.7.15" @@ -4646,7 +4666,7 @@ __metadata: languageName: node linkType: hard -"@types/stack-utils@npm:^2.0.0": +"@types/stack-utils@npm:^2.0.3": version: 2.0.3 resolution: "@types/stack-utils@npm:2.0.3" checksum: 10/72576cc1522090fe497337c2b99d9838e320659ac57fa5560fcbdcbafcf5d0216c6b3a0a8a4ee4fdb3b1f5e3420aa4f6223ab57b82fef3578bec3206425c6cf5 @@ -5004,6 +5024,141 @@ __metadata: languageName: node linkType: hard +"@unrs/resolver-binding-android-arm-eabi@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-android-arm-eabi@npm:1.11.1" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@unrs/resolver-binding-android-arm64@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-android-arm64@npm:1.11.1" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@unrs/resolver-binding-darwin-arm64@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-darwin-arm64@npm:1.11.1" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@unrs/resolver-binding-darwin-x64@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-darwin-x64@npm:1.11.1" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@unrs/resolver-binding-freebsd-x64@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-freebsd-x64@npm:1.11.1" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@unrs/resolver-binding-linux-arm-gnueabihf@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-linux-arm-gnueabihf@npm:1.11.1" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@unrs/resolver-binding-linux-arm-musleabihf@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-linux-arm-musleabihf@npm:1.11.1" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@unrs/resolver-binding-linux-arm64-gnu@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-linux-arm64-gnu@npm:1.11.1" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@unrs/resolver-binding-linux-arm64-musl@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-linux-arm64-musl@npm:1.11.1" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@unrs/resolver-binding-linux-ppc64-gnu@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-linux-ppc64-gnu@npm:1.11.1" + conditions: os=linux & cpu=ppc64 & libc=glibc + languageName: node + linkType: hard + +"@unrs/resolver-binding-linux-riscv64-gnu@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-linux-riscv64-gnu@npm:1.11.1" + conditions: os=linux & cpu=riscv64 & libc=glibc + languageName: node + linkType: hard + +"@unrs/resolver-binding-linux-riscv64-musl@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-linux-riscv64-musl@npm:1.11.1" + conditions: os=linux & cpu=riscv64 & libc=musl + languageName: node + linkType: hard + +"@unrs/resolver-binding-linux-s390x-gnu@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-linux-s390x-gnu@npm:1.11.1" + conditions: os=linux & cpu=s390x & libc=glibc + languageName: node + linkType: hard + +"@unrs/resolver-binding-linux-x64-gnu@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-linux-x64-gnu@npm:1.11.1" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@unrs/resolver-binding-linux-x64-musl@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-linux-x64-musl@npm:1.11.1" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@unrs/resolver-binding-wasm32-wasi@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-wasm32-wasi@npm:1.11.1" + dependencies: + "@napi-rs/wasm-runtime": "npm:^0.2.11" + conditions: cpu=wasm32 + languageName: node + linkType: hard + +"@unrs/resolver-binding-win32-arm64-msvc@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-win32-arm64-msvc@npm:1.11.1" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@unrs/resolver-binding-win32-ia32-msvc@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-win32-ia32-msvc@npm:1.11.1" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@unrs/resolver-binding-win32-x64-msvc@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-win32-x64-msvc@npm:1.11.1" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + "@vitest/expect@npm:3.2.4": version: 3.2.4 resolution: "@vitest/expect@npm:3.2.4" @@ -5559,7 +5714,7 @@ __metadata: languageName: node linkType: hard -"ansi-escapes@npm:^4.2.1": +"ansi-escapes@npm:^4.2.1, ansi-escapes@npm:^4.3.2": version: 4.3.2 resolution: "ansi-escapes@npm:4.3.2" dependencies: @@ -5614,7 +5769,7 @@ __metadata: languageName: node linkType: hard -"ansi-styles@npm:^5.0.0": +"ansi-styles@npm:^5.0.0, ansi-styles@npm:^5.2.0": version: 5.2.0 resolution: "ansi-styles@npm:5.2.0" checksum: 10/d7f4e97ce0623aea6bc0d90dcd28881ee04cba06c570b97fd3391bd7a268eedfd9d5e2dd4fdcbdd82b8105df5faf6f24aaedc08eaf3da898e702db5948f63469 @@ -5638,7 +5793,7 @@ __metadata: languageName: node linkType: hard -"anymatch@npm:^3.0.3, anymatch@npm:^3.1.3, anymatch@npm:~3.1.2": +"anymatch@npm:^3.1.3, anymatch@npm:~3.1.2": version: 3.1.3 resolution: "anymatch@npm:3.1.3" dependencies: @@ -6187,24 +6342,7 @@ __metadata: languageName: node linkType: hard -"babel-jest@npm:^28.1.3": - version: 28.1.3 - resolution: "babel-jest@npm:28.1.3" - dependencies: - "@jest/transform": "npm:^28.1.3" - "@types/babel__core": "npm:^7.1.14" - babel-plugin-istanbul: "npm:^6.1.1" - babel-preset-jest: "npm:^28.1.3" - chalk: "npm:^4.0.0" - graceful-fs: "npm:^4.2.9" - slash: "npm:^3.0.0" - peerDependencies: - "@babel/core": ^7.8.0 - checksum: 10/6dcbf194a037fb3df18d2aee56a3919a98a9b34292d1eb4aad823ebfa8b67f5a55f897213c1aafd52183928e99770319b8a094681ccb2910dc9993e6a7c1fd61 - languageName: node - linkType: hard - -"babel-jest@npm:^30.2.0": +"babel-jest@npm:30.2.0, babel-jest@npm:^30.2.0": version: 30.2.0 resolution: "babel-jest@npm:30.2.0" dependencies: @@ -6251,19 +6389,6 @@ __metadata: languageName: node linkType: hard -"babel-plugin-istanbul@npm:^6.1.1": - version: 6.1.1 - resolution: "babel-plugin-istanbul@npm:6.1.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.0.0" - "@istanbuljs/load-nyc-config": "npm:^1.0.0" - "@istanbuljs/schema": "npm:^0.1.2" - istanbul-lib-instrument: "npm:^5.0.4" - test-exclude: "npm:^6.0.0" - checksum: 10/ffd436bb2a77bbe1942a33245d770506ab2262d9c1b3c1f1da7f0592f78ee7445a95bc2efafe619dd9c1b6ee52c10033d6c7d29ddefe6f5383568e60f31dfe8d - languageName: node - linkType: hard - "babel-plugin-istanbul@npm:^7.0.1": version: 7.0.1 resolution: "babel-plugin-istanbul@npm:7.0.1" @@ -6286,18 +6411,6 @@ __metadata: languageName: node linkType: hard -"babel-plugin-jest-hoist@npm:^28.1.3": - version: 28.1.3 - resolution: "babel-plugin-jest-hoist@npm:28.1.3" - dependencies: - "@babel/template": "npm:^7.3.3" - "@babel/types": "npm:^7.3.3" - "@types/babel__core": "npm:^7.1.14" - "@types/babel__traverse": "npm:^7.0.6" - checksum: 10/355e383dae2b50efa0aff73a751f6bc55e7ae19ddfe72c73f4a0ad7667a671175aba17d824833d98b33602da18dd04e5e5d37d03c4f245940d8664c45ad29df5 - languageName: node - linkType: hard - "babel-plugin-polyfill-corejs2@npm:^0.4.14": version: 0.4.14 resolution: "babel-plugin-polyfill-corejs2@npm:0.4.14" @@ -6714,31 +6827,6 @@ __metadata: languageName: node linkType: hard -"babel-preset-current-node-syntax@npm:^1.0.0": - version: 1.1.0 - resolution: "babel-preset-current-node-syntax@npm:1.1.0" - dependencies: - "@babel/plugin-syntax-async-generators": "npm:^7.8.4" - "@babel/plugin-syntax-bigint": "npm:^7.8.3" - "@babel/plugin-syntax-class-properties": "npm:^7.12.13" - "@babel/plugin-syntax-class-static-block": "npm:^7.14.5" - "@babel/plugin-syntax-import-attributes": "npm:^7.24.7" - "@babel/plugin-syntax-import-meta": "npm:^7.10.4" - "@babel/plugin-syntax-json-strings": "npm:^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators": "npm:^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator": "npm:^7.8.3" - "@babel/plugin-syntax-numeric-separator": "npm:^7.10.4" - "@babel/plugin-syntax-object-rest-spread": "npm:^7.8.3" - "@babel/plugin-syntax-optional-catch-binding": "npm:^7.8.3" - "@babel/plugin-syntax-optional-chaining": "npm:^7.8.3" - "@babel/plugin-syntax-private-property-in-object": "npm:^7.14.5" - "@babel/plugin-syntax-top-level-await": "npm:^7.14.5" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10/46331111ae72b7121172fd9e6a4a7830f651ad44bf26dbbf77b3c8a60a18009411a3eacb5e72274004290c110371230272109957d5224d155436b4794ead2f1b - languageName: node - linkType: hard - "babel-preset-current-node-syntax@npm:^1.2.0": version: 1.2.0 resolution: "babel-preset-current-node-syntax@npm:1.2.0" @@ -6817,18 +6905,6 @@ __metadata: languageName: node linkType: hard -"babel-preset-jest@npm:^28.1.3": - version: 28.1.3 - resolution: "babel-preset-jest@npm:28.1.3" - dependencies: - babel-plugin-jest-hoist: "npm:^28.1.3" - babel-preset-current-node-syntax: "npm:^1.0.0" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10/8248a4a5ca4242cc06ad13b10b9183ad2664da8fb0da060c352223dcf286f0ce9c708fa17901dc44ecabec25e6d309e5e5b9830a61dd777c3925f187a345a47d - languageName: node - linkType: hard - "babel-preset-react@npm:6.24.1": version: 6.24.1 resolution: "babel-preset-react@npm:6.24.1" @@ -7307,7 +7383,7 @@ __metadata: languageName: node linkType: hard -"callsites@npm:^3.0.0": +"callsites@npm:^3.0.0, callsites@npm:^3.1.0": version: 3.1.0 resolution: "callsites@npm:3.1.0" checksum: 10/072d17b6abb459c2ba96598918b55868af677154bec7e73d222ef95a8fdb9bbf7dae96a8421085cdad8cd190d86653b5b6dc55a4484f2e5b2e27d5e0c3fc15b3 @@ -7342,7 +7418,7 @@ __metadata: languageName: node linkType: hard -"camelcase@npm:^6.2.0": +"camelcase@npm:^6.3.0": version: 6.3.0 resolution: "camelcase@npm:6.3.0" checksum: 10/8c96818a9076434998511251dcb2761a94817ea17dbdc37f47ac080bd088fc62c7369429a19e2178b993497132c8cbcf5cc1f44ba963e76782ba469c0474938d @@ -7572,13 +7648,20 @@ __metadata: languageName: node linkType: hard -"cjs-module-lexer@npm:^1.0.0, cjs-module-lexer@npm:^1.2.3": +"cjs-module-lexer@npm:^1.2.3": version: 1.4.3 resolution: "cjs-module-lexer@npm:1.4.3" checksum: 10/d2b92f919a2dedbfd61d016964fce8da0035f827182ed6839c97cac56e8a8077cfa6a59388adfe2bc588a19cef9bbe830d683a76a6e93c51f65852062cfe2591 languageName: node linkType: hard +"cjs-module-lexer@npm:^2.1.0": + version: 2.1.0 + resolution: "cjs-module-lexer@npm:2.1.0" + checksum: 10/97cf8e7ddbf685ce0fe1a89349f42a015e89ddf02f1f0d764ddb8a07bd642d58a036c21b5cae078cdf6a96b332b95f806948d772adcd2c346ce5a897f5feefb7 + languageName: node + linkType: hard + "classnames@npm:*, classnames@npm:^2.2.6, classnames@npm:^2.3.1": version: 2.5.1 resolution: "classnames@npm:2.5.1" @@ -7693,10 +7776,10 @@ __metadata: languageName: node linkType: hard -"collect-v8-coverage@npm:^1.0.0": - version: 1.0.2 - resolution: "collect-v8-coverage@npm:1.0.2" - checksum: 10/30ea7d5c9ee51f2fdba4901d4186c5b7114a088ef98fd53eda3979da77eed96758a2cae81cc6d97e239aaea6065868cf908b24980663f7b7e96aa291b3e12fa4 +"collect-v8-coverage@npm:^1.0.2": + version: 1.0.3 + resolution: "collect-v8-coverage@npm:1.0.3" + checksum: 10/656443261fb7b79cf79e89cba4b55622b07c1d4976c630829d7c5c585c73cda1c2ff101f316bfb19bb9e2c58d724c7db1f70a21e213dcd14099227c5e6019860 languageName: node linkType: hard @@ -8073,13 +8156,6 @@ __metadata: languageName: node linkType: hard -"convert-source-map@npm:^1.4.0": - version: 1.9.0 - resolution: "convert-source-map@npm:1.9.0" - checksum: 10/dc55a1f28ddd0e9485ef13565f8f756b342f9a46c4ae18b843fe3c30c675d058d6a4823eff86d472f187b176f0adf51ea7b69ea38be34be4a63cbbf91b0593c8 - languageName: node - linkType: hard - "convert-source-map@npm:^2.0.0": version: 2.0.0 resolution: "convert-source-map@npm:2.0.0" @@ -8598,6 +8674,18 @@ __metadata: languageName: node linkType: hard +"dedent@npm:^1.6.0": + version: 1.7.0 + resolution: "dedent@npm:1.7.0" + peerDependencies: + babel-plugin-macros: ^3.1.0 + peerDependenciesMeta: + babel-plugin-macros: + optional: true + checksum: 10/c902f3e7e828923bd642c12c1d8996616ff5588f8279a2951790bd7c7e479fa4dd7f016b55ce2c9ea1aa2895fc503e7d6c0cde6ebc95ca683ac0230f7c911fd7 + languageName: node + linkType: hard + "deep-eql@npm:^5.0.1": version: 5.0.2 resolution: "deep-eql@npm:5.0.2" @@ -8612,7 +8700,7 @@ __metadata: languageName: node linkType: hard -"deepmerge@npm:^4.2.2": +"deepmerge@npm:^4.2.2, deepmerge@npm:^4.3.1": version: 4.3.1 resolution: "deepmerge@npm:4.3.1" checksum: 10/058d9e1b0ff1a154468bf3837aea436abcfea1ba1d165ddaaf48ca93765fdd01a30d33c36173da8fbbed951dd0a267602bc782fe288b0fc4b7e1e7091afc4529 @@ -8746,7 +8834,7 @@ __metadata: languageName: node linkType: hard -"detect-newline@npm:^3.0.0": +"detect-newline@npm:^3.1.0": version: 3.1.0 resolution: "detect-newline@npm:3.1.0" checksum: 10/ae6cd429c41ad01b164c59ea36f264a2c479598e61cba7c99da24175a7ab80ddf066420f2bec9a1c57a6bead411b4655ff15ad7d281c000a89791f48cbe939e7 @@ -8765,14 +8853,7 @@ __metadata: resolution: "dev-ip@npm:1.0.1" bin: dev-ip: lib/dev-ip.js - checksum: 10/274a6470c2143e4cdcb2b27e0bea137dbc2b42667eb59c890e703185054cb2bcaf2d8533e7ad2f532fe551a90542abc6b37053e8d73918a4fcfb7ffd76589620 - languageName: node - linkType: hard - -"diff-sequences@npm:^28.1.1": - version: 28.1.1 - resolution: "diff-sequences@npm:28.1.1" - checksum: 10/89752708215cf0d13ec98cb3cded36154951beec9ac8c23d5a665498ba880e1e3aad544ad046ad5223c141fc35b362665fae534e14a253654da77b514a28438d + checksum: 10/274a6470c2143e4cdcb2b27e0bea137dbc2b42667eb59c890e703185054cb2bcaf2d8533e7ad2f532fe551a90542abc6b37053e8d73918a4fcfb7ffd76589620 languageName: node linkType: hard @@ -9227,10 +9308,10 @@ __metadata: languageName: node linkType: hard -"emittery@npm:^0.10.2": - version: 0.10.2 - resolution: "emittery@npm:0.10.2" - checksum: 10/fa86fc2b1f4c792d7d479a4de1a6a1f74b0b597770bae770336f0be6501e64be0995aa07d284ae502b269f5cec960cd0c44c91dd090d06d8deecee6d9787e396 +"emittery@npm:^0.13.1": + version: 0.13.1 + resolution: "emittery@npm:0.13.1" + checksum: 10/fbe214171d878b924eedf1757badf58a5dce071cd1fa7f620fa841a0901a80d6da47ff05929d53163105e621ce11a71b9d8acb1148ffe1745e045145f6e69521 languageName: node linkType: hard @@ -10336,7 +10417,7 @@ __metadata: languageName: node linkType: hard -"execa@npm:^5.0.0": +"execa@npm:^5.1.1": version: 5.1.1 resolution: "execa@npm:5.1.1" dependencies: @@ -10360,23 +10441,24 @@ __metadata: languageName: node linkType: hard -"exit@npm:^0.1.2": - version: 0.1.2 - resolution: "exit@npm:0.1.2" - checksum: 10/387555050c5b3c10e7a9e8df5f43194e95d7737c74532c409910e585d5554eaff34960c166643f5e23d042196529daad059c292dcf1fb61b8ca878d3677f4b87 +"exit-x@npm:^0.2.2": + version: 0.2.2 + resolution: "exit-x@npm:0.2.2" + checksum: 10/ee043053e6c1e237adf5ad9c4faf9f085b606f64a4ff859e2b138fab63fe642711d00c9af452a9134c4c92c55f752e818bfabab78c24d345022db163f3137027 languageName: node linkType: hard -"expect@npm:^28.1.3": - version: 28.1.3 - resolution: "expect@npm:28.1.3" +"expect@npm:30.2.0": + version: 30.2.0 + resolution: "expect@npm:30.2.0" dependencies: - "@jest/expect-utils": "npm:^28.1.3" - jest-get-type: "npm:^28.0.2" - jest-matcher-utils: "npm:^28.1.3" - jest-message-util: "npm:^28.1.3" - jest-util: "npm:^28.1.3" - checksum: 10/87033c88f7a578063ae7de98000fbd423bdb751756b1c6a1c69cd2b093bdb8b11a5b7a66eb89984068850d14978c7daffc2cc8ed56eb912424c24885a7573061 + "@jest/expect-utils": "npm:30.2.0" + "@jest/get-type": "npm:30.1.0" + jest-matcher-utils: "npm:30.2.0" + jest-message-util: "npm:30.2.0" + jest-mock: "npm:30.2.0" + jest-util: "npm:30.2.0" + checksum: 10/cf98ab45ab2e9f2fb9943a3ae0097f72d63a94be179a19fd2818d8fdc3b7681d31cc8ef540606eb8dd967d9c44d73fef263a614e9de260c22943ffb122ad66fd languageName: node linkType: hard @@ -10640,7 +10722,7 @@ __metadata: languageName: node linkType: hard -"fb-watchman@npm:^2.0.0, fb-watchman@npm:^2.0.2": +"fb-watchman@npm:^2.0.2": version: 2.0.2 resolution: "fb-watchman@npm:2.0.2" dependencies: @@ -11099,7 +11181,7 @@ __metadata: languageName: node linkType: hard -"fsevents@npm:^2.3.2, fsevents@npm:^2.3.3, fsevents@npm:~2.3.2, fsevents@npm:~2.3.3": +"fsevents@npm:^2.3.3, fsevents@npm:~2.3.2, fsevents@npm:~2.3.3": version: 2.3.3 resolution: "fsevents@npm:2.3.3" dependencies: @@ -11109,7 +11191,7 @@ __metadata: languageName: node linkType: hard -"fsevents@patch:fsevents@npm%3A^2.3.2#optional!builtin, fsevents@patch:fsevents@npm%3A^2.3.3#optional!builtin, fsevents@patch:fsevents@npm%3A~2.3.2#optional!builtin, fsevents@patch:fsevents@npm%3A~2.3.3#optional!builtin": +"fsevents@patch:fsevents@npm%3A^2.3.3#optional!builtin, fsevents@patch:fsevents@npm%3A~2.3.2#optional!builtin, fsevents@patch:fsevents@npm%3A~2.3.3#optional!builtin": version: 2.3.3 resolution: "fsevents@patch:fsevents@npm%3A2.3.3#optional!builtin::version=2.3.3&hash=df0bf1" dependencies: @@ -12023,7 +12105,7 @@ __metadata: languageName: node linkType: hard -"import-local@npm:^3.0.2": +"import-local@npm:^3.0.2, import-local@npm:^3.2.0": version: 3.2.0 resolution: "import-local@npm:3.2.0" dependencies: @@ -12373,7 +12455,7 @@ __metadata: languageName: node linkType: hard -"is-generator-fn@npm:^2.0.0": +"is-generator-fn@npm:^2.1.0": version: 2.1.0 resolution: "is-generator-fn@npm:2.1.0" checksum: 10/a6ad5492cf9d1746f73b6744e0c43c0020510b59d56ddcb78a91cbc173f09b5e6beff53d75c9c5a29feb618bfef2bf458e025ecf3a57ad2268e2fb2569f56215 @@ -12730,20 +12812,7 @@ __metadata: languageName: node linkType: hard -"istanbul-lib-instrument@npm:^5.0.4, istanbul-lib-instrument@npm:^5.1.0": - version: 5.2.1 - resolution: "istanbul-lib-instrument@npm:5.2.1" - dependencies: - "@babel/core": "npm:^7.12.3" - "@babel/parser": "npm:^7.14.7" - "@istanbuljs/schema": "npm:^0.1.2" - istanbul-lib-coverage: "npm:^3.2.0" - semver: "npm:^6.3.0" - checksum: 10/bbc4496c2f304d799f8ec22202ab38c010ac265c441947f075c0f7d46bd440b45c00e46017cf9053453d42182d768b1d6ed0e70a142c95ab00df9843aa5ab80e - languageName: node - linkType: hard - -"istanbul-lib-instrument@npm:^6.0.2": +"istanbul-lib-instrument@npm:^6.0.0, istanbul-lib-instrument@npm:^6.0.2": version: 6.0.3 resolution: "istanbul-lib-instrument@npm:6.0.3" dependencies: @@ -12767,14 +12836,14 @@ __metadata: languageName: node linkType: hard -"istanbul-lib-source-maps@npm:^4.0.0": - version: 4.0.1 - resolution: "istanbul-lib-source-maps@npm:4.0.1" +"istanbul-lib-source-maps@npm:^5.0.0": + version: 5.0.6 + resolution: "istanbul-lib-source-maps@npm:5.0.6" dependencies: + "@jridgewell/trace-mapping": "npm:^0.3.23" debug: "npm:^4.1.1" istanbul-lib-coverage: "npm:^3.0.0" - source-map: "npm:^0.6.1" - checksum: 10/5526983462799aced011d776af166e350191b816821ea7bcf71cab3e5272657b062c47dc30697a22a43656e3ced78893a42de677f9ccf276a28c913190953b82 + checksum: 10/569dd0a392ee3464b1fe1accbaef5cc26de3479eacb5b91d8c67ebb7b425d39fd02247d85649c3a0e9c29b600809fa60b5af5a281a75a89c01f385b1e24823a2 languageName: node linkType: hard @@ -12838,105 +12907,122 @@ __metadata: languageName: node linkType: hard -"jest-changed-files@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-changed-files@npm:28.1.3" +"jest-changed-files@npm:30.2.0": + version: 30.2.0 + resolution: "jest-changed-files@npm:30.2.0" dependencies: - execa: "npm:^5.0.0" + execa: "npm:^5.1.1" + jest-util: "npm:30.2.0" p-limit: "npm:^3.1.0" - checksum: 10/206be715fed00c70d69f46f6274129816b2959dd9fe5d77b7c929d572eef8f55092baea48f51cf45848edd17e23b00aa720201b5e7781904e6ede06ba666e668 + checksum: 10/ff2275ed5839b88c12ffa66fdc5c17ba02d3e276be6b558bed92872c282d050c3fdd1a275a81187cbe35c16d6d40337b85838772836463c7a2fbd1cba9785ca0 languageName: node linkType: hard -"jest-circus@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-circus@npm:28.1.3" +"jest-circus@npm:30.2.0": + version: 30.2.0 + resolution: "jest-circus@npm:30.2.0" dependencies: - "@jest/environment": "npm:^28.1.3" - "@jest/expect": "npm:^28.1.3" - "@jest/test-result": "npm:^28.1.3" - "@jest/types": "npm:^28.1.3" + "@jest/environment": "npm:30.2.0" + "@jest/expect": "npm:30.2.0" + "@jest/test-result": "npm:30.2.0" + "@jest/types": "npm:30.2.0" "@types/node": "npm:*" - chalk: "npm:^4.0.0" + chalk: "npm:^4.1.2" co: "npm:^4.6.0" - dedent: "npm:^0.7.0" - is-generator-fn: "npm:^2.0.0" - jest-each: "npm:^28.1.3" - jest-matcher-utils: "npm:^28.1.3" - jest-message-util: "npm:^28.1.3" - jest-runtime: "npm:^28.1.3" - jest-snapshot: "npm:^28.1.3" - jest-util: "npm:^28.1.3" + dedent: "npm:^1.6.0" + is-generator-fn: "npm:^2.1.0" + jest-each: "npm:30.2.0" + jest-matcher-utils: "npm:30.2.0" + jest-message-util: "npm:30.2.0" + jest-runtime: "npm:30.2.0" + jest-snapshot: "npm:30.2.0" + jest-util: "npm:30.2.0" p-limit: "npm:^3.1.0" - pretty-format: "npm:^28.1.3" + pretty-format: "npm:30.2.0" + pure-rand: "npm:^7.0.0" slash: "npm:^3.0.0" - stack-utils: "npm:^2.0.3" - checksum: 10/3ac1f369cadbdd1982c123c04bc69f140b9790a8d0a729084f53aa13154bbdf318ba162dc70daecc37ef1d620afa339408d6b99a0314306238c547dc6a25b4a3 + stack-utils: "npm:^2.0.6" + checksum: 10/68bfc65d92385db1017643988215e4ff5af0b10bcab86fb749a063be6bb7d5eb556dc53dd21bedf833a19aa6ae1a781a8d27b2bea25562de02d294b3017435a9 languageName: node linkType: hard -"jest-cli@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-cli@npm:28.1.3" +"jest-cli@npm:30.2.0": + version: 30.2.0 + resolution: "jest-cli@npm:30.2.0" dependencies: - "@jest/core": "npm:^28.1.3" - "@jest/test-result": "npm:^28.1.3" - "@jest/types": "npm:^28.1.3" - chalk: "npm:^4.0.0" - exit: "npm:^0.1.2" - graceful-fs: "npm:^4.2.9" - import-local: "npm:^3.0.2" - jest-config: "npm:^28.1.3" - jest-util: "npm:^28.1.3" - jest-validate: "npm:^28.1.3" - prompts: "npm:^2.0.1" - yargs: "npm:^17.3.1" + "@jest/core": "npm:30.2.0" + "@jest/test-result": "npm:30.2.0" + "@jest/types": "npm:30.2.0" + chalk: "npm:^4.1.2" + exit-x: "npm:^0.2.2" + import-local: "npm:^3.2.0" + jest-config: "npm:30.2.0" + jest-util: "npm:30.2.0" + jest-validate: "npm:30.2.0" + yargs: "npm:^17.7.2" peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: node-notifier: optional: true bin: - jest: bin/jest.js - checksum: 10/935a0c517e7b972e60543fdb921302fc63d78e629ab077195c91336279c0815978ca2e03c65ec6dbff3226a5c4ee64b13c7ef5a86387330c9da54454cd4bbbfb + jest: ./bin/jest.js + checksum: 10/1cc8304f0e2608801c84cdecce9565a6178f668a6475aed3767a1d82cc539915f98e7404d7c387510313684011dc3095c15397d6725f73aac80fbd96c4155faa languageName: node linkType: hard -"jest-config@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-config@npm:28.1.3" +"jest-config@npm:30.2.0": + version: 30.2.0 + resolution: "jest-config@npm:30.2.0" dependencies: - "@babel/core": "npm:^7.11.6" - "@jest/test-sequencer": "npm:^28.1.3" - "@jest/types": "npm:^28.1.3" - babel-jest: "npm:^28.1.3" - chalk: "npm:^4.0.0" - ci-info: "npm:^3.2.0" - deepmerge: "npm:^4.2.2" - glob: "npm:^7.1.3" - graceful-fs: "npm:^4.2.9" - jest-circus: "npm:^28.1.3" - jest-environment-node: "npm:^28.1.3" - jest-get-type: "npm:^28.0.2" - jest-regex-util: "npm:^28.0.2" - jest-resolve: "npm:^28.1.3" - jest-runner: "npm:^28.1.3" - jest-util: "npm:^28.1.3" - jest-validate: "npm:^28.1.3" - micromatch: "npm:^4.0.4" + "@babel/core": "npm:^7.27.4" + "@jest/get-type": "npm:30.1.0" + "@jest/pattern": "npm:30.0.1" + "@jest/test-sequencer": "npm:30.2.0" + "@jest/types": "npm:30.2.0" + babel-jest: "npm:30.2.0" + chalk: "npm:^4.1.2" + ci-info: "npm:^4.2.0" + deepmerge: "npm:^4.3.1" + glob: "npm:^10.3.10" + graceful-fs: "npm:^4.2.11" + jest-circus: "npm:30.2.0" + jest-docblock: "npm:30.2.0" + jest-environment-node: "npm:30.2.0" + jest-regex-util: "npm:30.0.1" + jest-resolve: "npm:30.2.0" + jest-runner: "npm:30.2.0" + jest-util: "npm:30.2.0" + jest-validate: "npm:30.2.0" + micromatch: "npm:^4.0.8" parse-json: "npm:^5.2.0" - pretty-format: "npm:^28.1.3" + pretty-format: "npm:30.2.0" slash: "npm:^3.0.0" strip-json-comments: "npm:^3.1.1" peerDependencies: "@types/node": "*" + esbuild-register: ">=3.4.0" ts-node: ">=9.0.0" peerDependenciesMeta: "@types/node": optional: true + esbuild-register: + optional: true ts-node: optional: true - checksum: 10/457d8709e24e0e4d8a8a8e074a65092e896d80f30d80c0448f8ce6a24bd0b30060a1a593a20aa7fb8c3c2228d519f0a979ccdff3a176efb60afc7187785d59cf + checksum: 10/296786b0a3d62de77e2f691f208d54ab541c1a73f87747d922eda643c6f25b89125ef3150170c07a6c8a316a30c15428e46237d499f688b0777f38de8a61ad16 + languageName: node + linkType: hard + +"jest-diff@npm:30.2.0": + version: 30.2.0 + resolution: "jest-diff@npm:30.2.0" + dependencies: + "@jest/diff-sequences": "npm:30.0.1" + "@jest/get-type": "npm:30.1.0" + chalk: "npm:^4.1.2" + pretty-format: "npm:30.2.0" + checksum: 10/1fb9e4fb7dff81814b4f69eaa7db28e184d62306a3a8ea2447d02ca53d2cfa771e83ede513f67ec5239dffacfaac32ff2b49866d211e4c7516f51c1fc06ede42 languageName: node linkType: hard @@ -12952,58 +13038,40 @@ __metadata: languageName: node linkType: hard -"jest-diff@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-diff@npm:28.1.3" - dependencies: - chalk: "npm:^4.0.0" - diff-sequences: "npm:^28.1.1" - jest-get-type: "npm:^28.0.2" - pretty-format: "npm:^28.1.3" - checksum: 10/42b8d82c59df879b2cfdf3583fecd40c31ce8c9364644d8d430f5bd533a32e475ca0b383b7a744293332008c50f7901bedeac73c60463ac9e7e2b80249e1325c - languageName: node - linkType: hard - -"jest-docblock@npm:^28.1.1": - version: 28.1.1 - resolution: "jest-docblock@npm:28.1.1" +"jest-docblock@npm:30.2.0": + version: 30.2.0 + resolution: "jest-docblock@npm:30.2.0" dependencies: - detect-newline: "npm:^3.0.0" - checksum: 10/4062cb9ba54c88c88f5452fcd054937f35755240014ea277ff8dbfde30efcbdb77a4844a09279e55ec98f2fe9a1978a9b8583315e93fdf03602a619ae070356b + detect-newline: "npm:^3.1.0" + checksum: 10/e01a7d1193947ed0f9713c26bfc7852e51cb758cafec807e5665a0a8d582473a43778bee099f8aa5c70b2941963e5341f4b10bd86b036a4fa3bcec0f4c04e099 languageName: node linkType: hard -"jest-each@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-each@npm:28.1.3" +"jest-each@npm:30.2.0": + version: 30.2.0 + resolution: "jest-each@npm:30.2.0" dependencies: - "@jest/types": "npm:^28.1.3" - chalk: "npm:^4.0.0" - jest-get-type: "npm:^28.0.2" - jest-util: "npm:^28.1.3" - pretty-format: "npm:^28.1.3" - checksum: 10/4877cdda70048923ad6aabf25779e3e2c6bc580253d95739b8af291fbc506b95b043031b498f26807093abe9e6e93ecd7b50e3ce5b7ab175fc21637a197a248b + "@jest/get-type": "npm:30.1.0" + "@jest/types": "npm:30.2.0" + chalk: "npm:^4.1.2" + jest-util: "npm:30.2.0" + pretty-format: "npm:30.2.0" + checksum: 10/f95e7dc1cef4b6a77899325702a214834ae25d01276cc31279654dc7e04f63c1925a37848dd16a0d16508c0fd3d182145f43c10af93952b7a689df3aeac198e9 languageName: node linkType: hard -"jest-environment-node@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-environment-node@npm:28.1.3" +"jest-environment-node@npm:30.2.0": + version: 30.2.0 + resolution: "jest-environment-node@npm:30.2.0" dependencies: - "@jest/environment": "npm:^28.1.3" - "@jest/fake-timers": "npm:^28.1.3" - "@jest/types": "npm:^28.1.3" + "@jest/environment": "npm:30.2.0" + "@jest/fake-timers": "npm:30.2.0" + "@jest/types": "npm:30.2.0" "@types/node": "npm:*" - jest-mock: "npm:^28.1.3" - jest-util: "npm:^28.1.3" - checksum: 10/ab9ec5c57309a0ca40ebc58ba84b4980445f24d351cc3292c8c8715062c7ea14442d9d8e7701eccb9cb810f425bbdb7eba631fd76fb1835b92150b6bdda7cb18 - languageName: node - linkType: hard - -"jest-get-type@npm:^28.0.2": - version: 28.0.2 - resolution: "jest-get-type@npm:28.0.2" - checksum: 10/5281d7c89bc8156605f6d15784f45074f4548501195c26e9b188742768f72d40948252d13230ea905b5349038865a1a8eeff0e614cc530ff289dfc41fe843abd + jest-mock: "npm:30.2.0" + jest-util: "npm:30.2.0" + jest-validate: "npm:30.2.0" + checksum: 10/7918bfea7367bd3e12dbbc4ea5afb193b5c47e480a6d1382512f051e2f028458fc9f5ef2f6260737ad41a0b1894661790ff3aaf3cbb4148a33ce2ce7aec64847 languageName: node linkType: hard @@ -13036,79 +13104,57 @@ __metadata: languageName: node linkType: hard -"jest-haste-map@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-haste-map@npm:28.1.3" - dependencies: - "@jest/types": "npm:^28.1.3" - "@types/graceful-fs": "npm:^4.1.3" - "@types/node": "npm:*" - anymatch: "npm:^3.0.3" - fb-watchman: "npm:^2.0.0" - fsevents: "npm:^2.3.2" - graceful-fs: "npm:^4.2.9" - jest-regex-util: "npm:^28.0.2" - jest-util: "npm:^28.1.3" - jest-worker: "npm:^28.1.3" - micromatch: "npm:^4.0.4" - walker: "npm:^1.0.8" - dependenciesMeta: - fsevents: - optional: true - checksum: 10/c78e0e81e3f138f379440fb2ddfdc3753da377b74477df02ef404d5de1508d6545d28cf02516713dbde093a8c112098be6f50080a7a8fab6b888992720322a57 - languageName: node - linkType: hard - -"jest-leak-detector@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-leak-detector@npm:28.1.3" +"jest-leak-detector@npm:30.2.0": + version: 30.2.0 + resolution: "jest-leak-detector@npm:30.2.0" dependencies: - jest-get-type: "npm:^28.0.2" - pretty-format: "npm:^28.1.3" - checksum: 10/2e976a4880cf9af11f53a19f6a3820e0f90b635a900737a5427fc42e337d5628ba446dcd7c020ecea3806cf92bc0bbf6982ed62a9cd84e5a13d8751aa30fbbb7 + "@jest/get-type": "npm:30.1.0" + pretty-format: "npm:30.2.0" + checksum: 10/c430d6ed7910b2174738fbdca4ea64cbfe805216414c0d143c1090148f1389fec99d0733c0a8ed0a86709c89b4a4085b4749ac3a2cbc7deaf3ca87457afd24fc languageName: node linkType: hard -"jest-matcher-utils@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-matcher-utils@npm:28.1.3" +"jest-matcher-utils@npm:30.2.0": + version: 30.2.0 + resolution: "jest-matcher-utils@npm:30.2.0" dependencies: - chalk: "npm:^4.0.0" - jest-diff: "npm:^28.1.3" - jest-get-type: "npm:^28.0.2" - pretty-format: "npm:^28.1.3" - checksum: 10/958f4bacdaee6949f1d1da413129f2249083bc6fa3f4ac5c559795b370aec7159f99f02340f706cc895b90938c2bafe1aab347c9a34f8819c59afd1a4cd6c009 + "@jest/get-type": "npm:30.1.0" + chalk: "npm:^4.1.2" + jest-diff: "npm:30.2.0" + pretty-format: "npm:30.2.0" + checksum: 10/f3f1ecf68ca63c9d1d80a175637a8fc655edfd1ee83220f6e3f6bd464ecbe2f93148fdd440a5a5e5a2b0b2cc8ee84ddc3dcef58a6dbc66821c792f48d260c6d4 languageName: node linkType: hard -"jest-message-util@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-message-util@npm:28.1.3" +"jest-message-util@npm:30.2.0": + version: 30.2.0 + resolution: "jest-message-util@npm:30.2.0" dependencies: - "@babel/code-frame": "npm:^7.12.13" - "@jest/types": "npm:^28.1.3" - "@types/stack-utils": "npm:^2.0.0" - chalk: "npm:^4.0.0" - graceful-fs: "npm:^4.2.9" - micromatch: "npm:^4.0.4" - pretty-format: "npm:^28.1.3" + "@babel/code-frame": "npm:^7.27.1" + "@jest/types": "npm:30.2.0" + "@types/stack-utils": "npm:^2.0.3" + chalk: "npm:^4.1.2" + graceful-fs: "npm:^4.2.11" + micromatch: "npm:^4.0.8" + pretty-format: "npm:30.2.0" slash: "npm:^3.0.0" - stack-utils: "npm:^2.0.3" - checksum: 10/91137a507e9eb79ef6156a3d17c882a181fa662da28cc1a86245ff53ba13726653c8d5fed2660e922aae020a9caca4d22c3689bfe61a215c8a17a43e01b7eb5c + stack-utils: "npm:^2.0.6" + checksum: 10/e29ec76e8c8e4da5f5b25198be247535626ccf3a940e93fdd51fc6a6bcf70feaa2921baae3806182a090431d90b08c939eb13fb64249b171d2e9ae3a452a8fd2 languageName: node linkType: hard -"jest-mock@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-mock@npm:28.1.3" +"jest-mock@npm:30.2.0": + version: 30.2.0 + resolution: "jest-mock@npm:30.2.0" dependencies: - "@jest/types": "npm:^28.1.3" + "@jest/types": "npm:30.2.0" "@types/node": "npm:*" - checksum: 10/43cbec0ceddea795b8b2bc09f8632eecc97b88ef018a9c9737b887ed6cbdbda000a436e9165dce2bccfbb949be8b0daca6faa530dc390d43a0e5e3099f3ae216 + jest-util: "npm:30.2.0" + checksum: 10/cde9b56805f90bf811a9231873ee88a0fb83bf4bf50972ae76960725da65220fcb119688f2e90e1ef33fbfd662194858d7f43809d881f1c41bb55d94e62adeab languageName: node linkType: hard -"jest-pnp-resolver@npm:^1.2.2": +"jest-pnp-resolver@npm:^1.2.3": version: 1.2.3 resolution: "jest-pnp-resolver@npm:1.2.3" peerDependencies: @@ -13127,127 +13173,118 @@ __metadata: languageName: node linkType: hard -"jest-regex-util@npm:^28.0.2": - version: 28.0.2 - resolution: "jest-regex-util@npm:28.0.2" - checksum: 10/0ea8c5c82ec88bc85e273c0ec82e0c0f35f7a1e2d055070e50f0cc2a2177f848eec55f73e37ae0d045c3db5014c42b2f90ac62c1ab3fdb354d2abd66a9e08add - languageName: node - linkType: hard - -"jest-resolve-dependencies@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-resolve-dependencies@npm:28.1.3" +"jest-resolve-dependencies@npm:30.2.0": + version: 30.2.0 + resolution: "jest-resolve-dependencies@npm:30.2.0" dependencies: - jest-regex-util: "npm:^28.0.2" - jest-snapshot: "npm:^28.1.3" - checksum: 10/5c3128ea5f702a22141116b6a3d83c594c192d3e17b7235a1d47ecd64bcd9aa4924100668804e6b54faf5a1437a366f37165a2ea7170a2ce35899323b4ed7aac + jest-regex-util: "npm:30.0.1" + jest-snapshot: "npm:30.2.0" + checksum: 10/0ff1a574f8c07f2e54a4ac8ab17aea00dfe2982e99b03fbd44f4211a94b8e5a59fdc43a59f9d6c0578a10a7b56a0611ad5ab40e4893973ff3f40dd414433b194 languageName: node linkType: hard -"jest-resolve@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-resolve@npm:28.1.3" +"jest-resolve@npm:30.2.0": + version: 30.2.0 + resolution: "jest-resolve@npm:30.2.0" dependencies: - chalk: "npm:^4.0.0" - graceful-fs: "npm:^4.2.9" - jest-haste-map: "npm:^28.1.3" - jest-pnp-resolver: "npm:^1.2.2" - jest-util: "npm:^28.1.3" - jest-validate: "npm:^28.1.3" - resolve: "npm:^1.20.0" - resolve.exports: "npm:^1.1.0" + chalk: "npm:^4.1.2" + graceful-fs: "npm:^4.2.11" + jest-haste-map: "npm:30.2.0" + jest-pnp-resolver: "npm:^1.2.3" + jest-util: "npm:30.2.0" + jest-validate: "npm:30.2.0" slash: "npm:^3.0.0" - checksum: 10/742b2301a43172206bf88d405df73d19510cfd4eacb0fb16d620157de408e9f7399567a57c86c61b30aaa303c15d88a77b38a69ad0230d288e44db4d44d5f724 + unrs-resolver: "npm:^1.7.11" + checksum: 10/e1f03da6811a946f5d885ea739a973975d099cc760641f9e1f90ac9c6621408538ba1e909f789d45d6e8d2411b78fb09230f16f15669621aa407aed7511fdf01 languageName: node linkType: hard -"jest-runner@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-runner@npm:28.1.3" +"jest-runner@npm:30.2.0": + version: 30.2.0 + resolution: "jest-runner@npm:30.2.0" dependencies: - "@jest/console": "npm:^28.1.3" - "@jest/environment": "npm:^28.1.3" - "@jest/test-result": "npm:^28.1.3" - "@jest/transform": "npm:^28.1.3" - "@jest/types": "npm:^28.1.3" + "@jest/console": "npm:30.2.0" + "@jest/environment": "npm:30.2.0" + "@jest/test-result": "npm:30.2.0" + "@jest/transform": "npm:30.2.0" + "@jest/types": "npm:30.2.0" "@types/node": "npm:*" - chalk: "npm:^4.0.0" - emittery: "npm:^0.10.2" - graceful-fs: "npm:^4.2.9" - jest-docblock: "npm:^28.1.1" - jest-environment-node: "npm:^28.1.3" - jest-haste-map: "npm:^28.1.3" - jest-leak-detector: "npm:^28.1.3" - jest-message-util: "npm:^28.1.3" - jest-resolve: "npm:^28.1.3" - jest-runtime: "npm:^28.1.3" - jest-util: "npm:^28.1.3" - jest-watcher: "npm:^28.1.3" - jest-worker: "npm:^28.1.3" + chalk: "npm:^4.1.2" + emittery: "npm:^0.13.1" + exit-x: "npm:^0.2.2" + graceful-fs: "npm:^4.2.11" + jest-docblock: "npm:30.2.0" + jest-environment-node: "npm:30.2.0" + jest-haste-map: "npm:30.2.0" + jest-leak-detector: "npm:30.2.0" + jest-message-util: "npm:30.2.0" + jest-resolve: "npm:30.2.0" + jest-runtime: "npm:30.2.0" + jest-util: "npm:30.2.0" + jest-watcher: "npm:30.2.0" + jest-worker: "npm:30.2.0" p-limit: "npm:^3.1.0" source-map-support: "npm:0.5.13" - checksum: 10/0fb6ed4f628650da9ff502b89bfdf98ea7f3015ad0369429c223ddae793573d9c5f350e95756e8bb827e2e6e3de03e5cb94569075c5788e574697b63c09d80ae + checksum: 10/d3706aa70e64a7ef8b38360d34ea6c261ba4d0b42136d7fb603c4fa71c24fa81f22c39ed2e39ee0db2363a42827810291f3ceb6a299e5996b41d701ad9b24184 languageName: node linkType: hard -"jest-runtime@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-runtime@npm:28.1.3" +"jest-runtime@npm:30.2.0": + version: 30.2.0 + resolution: "jest-runtime@npm:30.2.0" dependencies: - "@jest/environment": "npm:^28.1.3" - "@jest/fake-timers": "npm:^28.1.3" - "@jest/globals": "npm:^28.1.3" - "@jest/source-map": "npm:^28.1.2" - "@jest/test-result": "npm:^28.1.3" - "@jest/transform": "npm:^28.1.3" - "@jest/types": "npm:^28.1.3" - chalk: "npm:^4.0.0" - cjs-module-lexer: "npm:^1.0.0" - collect-v8-coverage: "npm:^1.0.0" - execa: "npm:^5.0.0" - glob: "npm:^7.1.3" - graceful-fs: "npm:^4.2.9" - jest-haste-map: "npm:^28.1.3" - jest-message-util: "npm:^28.1.3" - jest-mock: "npm:^28.1.3" - jest-regex-util: "npm:^28.0.2" - jest-resolve: "npm:^28.1.3" - jest-snapshot: "npm:^28.1.3" - jest-util: "npm:^28.1.3" + "@jest/environment": "npm:30.2.0" + "@jest/fake-timers": "npm:30.2.0" + "@jest/globals": "npm:30.2.0" + "@jest/source-map": "npm:30.0.1" + "@jest/test-result": "npm:30.2.0" + "@jest/transform": "npm:30.2.0" + "@jest/types": "npm:30.2.0" + "@types/node": "npm:*" + chalk: "npm:^4.1.2" + cjs-module-lexer: "npm:^2.1.0" + collect-v8-coverage: "npm:^1.0.2" + glob: "npm:^10.3.10" + graceful-fs: "npm:^4.2.11" + jest-haste-map: "npm:30.2.0" + jest-message-util: "npm:30.2.0" + jest-mock: "npm:30.2.0" + jest-regex-util: "npm:30.0.1" + jest-resolve: "npm:30.2.0" + jest-snapshot: "npm:30.2.0" + jest-util: "npm:30.2.0" slash: "npm:^3.0.0" strip-bom: "npm:^4.0.0" - checksum: 10/d3d91b3f1082bbe3f87dc11ad7abce12f323797d98b3fa5ef7fb5efbd6d30e42041e3732cb8be5d41f0c8d8312d14461381d829ed1fe4e3712cfc82ea4a586fc + checksum: 10/81a3a9951420863f001e74c510bf35b85ae983f636f43ee1ffa1618b5a8ddafb681bc2810f71814bc8c8373e9593c89576b2325daf3c765e50057e48d5941df3 languageName: node linkType: hard -"jest-snapshot@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-snapshot@npm:28.1.3" +"jest-snapshot@npm:30.2.0": + version: 30.2.0 + resolution: "jest-snapshot@npm:30.2.0" dependencies: - "@babel/core": "npm:^7.11.6" - "@babel/generator": "npm:^7.7.2" - "@babel/plugin-syntax-typescript": "npm:^7.7.2" - "@babel/traverse": "npm:^7.7.2" - "@babel/types": "npm:^7.3.3" - "@jest/expect-utils": "npm:^28.1.3" - "@jest/transform": "npm:^28.1.3" - "@jest/types": "npm:^28.1.3" - "@types/babel__traverse": "npm:^7.0.6" - "@types/prettier": "npm:^2.1.5" - babel-preset-current-node-syntax: "npm:^1.0.0" - chalk: "npm:^4.0.0" - expect: "npm:^28.1.3" - graceful-fs: "npm:^4.2.9" - jest-diff: "npm:^28.1.3" - jest-get-type: "npm:^28.0.2" - jest-haste-map: "npm:^28.1.3" - jest-matcher-utils: "npm:^28.1.3" - jest-message-util: "npm:^28.1.3" - jest-util: "npm:^28.1.3" - natural-compare: "npm:^1.4.0" - pretty-format: "npm:^28.1.3" - semver: "npm:^7.3.5" - checksum: 10/4e1f4e2aa5ccc776f1fdaab75f96342534f737df0d43458e0614af362f7e80097909f69e5d8f2d0aed2caae07fa122b1cf7b8da0c97c44c3b2d06da472d7ad79 + "@babel/core": "npm:^7.27.4" + "@babel/generator": "npm:^7.27.5" + "@babel/plugin-syntax-jsx": "npm:^7.27.1" + "@babel/plugin-syntax-typescript": "npm:^7.27.1" + "@babel/types": "npm:^7.27.3" + "@jest/expect-utils": "npm:30.2.0" + "@jest/get-type": "npm:30.1.0" + "@jest/snapshot-utils": "npm:30.2.0" + "@jest/transform": "npm:30.2.0" + "@jest/types": "npm:30.2.0" + babel-preset-current-node-syntax: "npm:^1.2.0" + chalk: "npm:^4.1.2" + expect: "npm:30.2.0" + graceful-fs: "npm:^4.2.11" + jest-diff: "npm:30.2.0" + jest-matcher-utils: "npm:30.2.0" + jest-message-util: "npm:30.2.0" + jest-util: "npm:30.2.0" + pretty-format: "npm:30.2.0" + semver: "npm:^7.7.2" + synckit: "npm:^0.11.8" + checksum: 10/119390b49f397ed622ba7c375fc15f97af67c4fc49a34cf829c86ee732be2b06ad3c7171c76bb842a0e84a234783f1a4c721909aa316fbe00c6abc7c5962dfbc languageName: node linkType: hard @@ -13265,20 +13302,6 @@ __metadata: languageName: node linkType: hard -"jest-util@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-util@npm:28.1.3" - dependencies: - "@jest/types": "npm:^28.1.3" - "@types/node": "npm:*" - chalk: "npm:^4.0.0" - ci-info: "npm:^3.2.0" - graceful-fs: "npm:^4.2.9" - picomatch: "npm:^2.2.3" - checksum: 10/92895523d30ddde8f22bebbc20ed6e1be35b0a21c8e9df8a1fc289bf354f6a3f96e5d271340f2ed212a5aa0b55fd7717ff3167da8c5f247d623e2a93a3bf7b32 - languageName: node - linkType: hard - "jest-util@npm:^29.7.0": version: 29.7.0 resolution: "jest-util@npm:29.7.0" @@ -13293,33 +13316,33 @@ __metadata: languageName: node linkType: hard -"jest-validate@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-validate@npm:28.1.3" +"jest-validate@npm:30.2.0": + version: 30.2.0 + resolution: "jest-validate@npm:30.2.0" dependencies: - "@jest/types": "npm:^28.1.3" - camelcase: "npm:^6.2.0" - chalk: "npm:^4.0.0" - jest-get-type: "npm:^28.0.2" + "@jest/get-type": "npm:30.1.0" + "@jest/types": "npm:30.2.0" + camelcase: "npm:^6.3.0" + chalk: "npm:^4.1.2" leven: "npm:^3.1.0" - pretty-format: "npm:^28.1.3" - checksum: 10/c49c8c64b4afbfb5c7434cfd30f8adbe7c6f57ce3ad6be55cfd65403f9ae664822badc1f27844ae800b23c84653bea834e928ad79e18ea0afdc4aa2d0a121156 + pretty-format: "npm:30.2.0" + checksum: 10/61e66c6df29a1e181f8de063678dd2096bb52cc8a8ead3c9a3f853d54eca458ad04c7fb81931d9274affb67d0504a91a2a520456a139a26665810c3bf039b677 languageName: node linkType: hard -"jest-watcher@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-watcher@npm:28.1.3" +"jest-watcher@npm:30.2.0": + version: 30.2.0 + resolution: "jest-watcher@npm:30.2.0" dependencies: - "@jest/test-result": "npm:^28.1.3" - "@jest/types": "npm:^28.1.3" + "@jest/test-result": "npm:30.2.0" + "@jest/types": "npm:30.2.0" "@types/node": "npm:*" - ansi-escapes: "npm:^4.2.1" - chalk: "npm:^4.0.0" - emittery: "npm:^0.10.2" - jest-util: "npm:^28.1.3" - string-length: "npm:^4.0.1" - checksum: 10/e6d2c099d461408a992d144c230112fb282b2d8f54c49227bdb0c3efcfa5ecab70a019fc57d8ad6360000459087bb942c4f72670b52fc5b97ac0d9834f87d24e + ansi-escapes: "npm:^4.3.2" + chalk: "npm:^4.1.2" + emittery: "npm:^0.13.1" + jest-util: "npm:30.2.0" + string-length: "npm:^4.0.2" + checksum: 10/fa38d06dcc59dbbd6a9ff22dea499d3c81ed376d9993b82d01797a99bf466d48641a99b9f3670a4b5480ca31144c5e017b96b7059e4d7541358fb48cf517a2db languageName: node linkType: hard @@ -13347,17 +13370,6 @@ __metadata: languageName: node linkType: hard -"jest-worker@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-worker@npm:28.1.3" - dependencies: - "@types/node": "npm:*" - merge-stream: "npm:^2.0.0" - supports-color: "npm:^8.0.0" - checksum: 10/0b5992308276ac8440a789e5317ff8feaa496cd9a0512c9cd73dbb9b6d2ff81b717cef1aa20113633c7280c9e29319af00a4d53d6bb35adbd1e3c01f0c290152 - languageName: node - linkType: hard - "jest-worker@npm:^29.7.0": version: 29.7.0 resolution: "jest-worker@npm:29.7.0" @@ -13370,22 +13382,22 @@ __metadata: languageName: node linkType: hard -"jest@npm:^28.1.3": - version: 28.1.3 - resolution: "jest@npm:28.1.3" +"jest@npm:^30.2.0": + version: 30.2.0 + resolution: "jest@npm:30.2.0" dependencies: - "@jest/core": "npm:^28.1.3" - "@jest/types": "npm:^28.1.3" - import-local: "npm:^3.0.2" - jest-cli: "npm:^28.1.3" + "@jest/core": "npm:30.2.0" + "@jest/types": "npm:30.2.0" + import-local: "npm:^3.2.0" + jest-cli: "npm:30.2.0" peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: node-notifier: optional: true bin: - jest: bin/jest.js - checksum: 10/fb7c93e8a9d4c760a59e2b7638886f9f05465a14a88e263dca448f205464434967897a89784a37f7623999dfc33206d3d61d0acdc83eed99c4474d84a4ed3cf8 + jest: ./bin/jest.js + checksum: 10/61c9d100750e4354cd7305d1f3ba253ffde4deaf12cb4be4d42d54f2dd5986e383a39c4a8691dbdc3839c69094a52413ed36f1886540ac37b71914a990b810d0 languageName: node linkType: hard @@ -13707,13 +13719,6 @@ __metadata: languageName: node linkType: hard -"kleur@npm:^3.0.3": - version: 3.0.3 - resolution: "kleur@npm:3.0.3" - checksum: 10/0c0ecaf00a5c6173d25059c7db2113850b5457016dfa1d0e3ef26da4704fbb186b4938d7611246d86f0ddf1bccf26828daa5877b1f232a65e7373d0122a83e7f - languageName: node - linkType: hard - "launch-editor@npm:^2.6.1": version: 2.10.0 resolution: "launch-editor@npm:2.10.0" @@ -14536,7 +14541,7 @@ __metadata: languageName: node linkType: hard -"micromatch@npm:^4.0.2, micromatch@npm:^4.0.4, micromatch@npm:^4.0.5, micromatch@npm:^4.0.8": +"micromatch@npm:^4.0.2, micromatch@npm:^4.0.5, micromatch@npm:^4.0.8": version: 4.0.8 resolution: "micromatch@npm:4.0.8" dependencies: @@ -14980,6 +14985,15 @@ __metadata: languageName: node linkType: hard +"napi-postinstall@npm:^0.3.0": + version: 0.3.4 + resolution: "napi-postinstall@npm:0.3.4" + bin: + napi-postinstall: lib/cli.js + checksum: 10/5541381508f9e1051ff3518701c7130ebac779abb3a1ffe9391fcc3cab4cc0569b0ba0952357db3f6b12909c3bb508359a7a60261ffd795feebbdab967175832 + languageName: node + linkType: hard + "natural-compare@npm:^1.4.0": version: 1.4.0 resolution: "natural-compare@npm:1.4.0" @@ -16003,7 +16017,7 @@ __metadata: eslint-webpack-plugin: "npm:^5.0.2" file-loader: "npm:6.2.0" globals: "npm:^16.4.0" - jest: "npm:^28.1.3" + jest: "npm:^30.2.0" less: "npm:4.1.3" less-loader: "npm:12.2.0" lodash: "npm:4.17.21" @@ -16334,7 +16348,7 @@ __metadata: languageName: node linkType: hard -"pirates@npm:^4.0.4, pirates@npm:^4.0.7": +"pirates@npm:^4.0.7": version: 4.0.7 resolution: "pirates@npm:4.0.7" checksum: 10/2427f371366081ae42feb58214f04805d6b41d6b84d74480ebcc9e0ddbd7105a139f7c653daeaf83ad8a1a77214cf07f64178e76de048128fec501eab3305a96 @@ -16867,15 +16881,14 @@ __metadata: languageName: node linkType: hard -"pretty-format@npm:^28.1.3": - version: 28.1.3 - resolution: "pretty-format@npm:28.1.3" +"pretty-format@npm:30.2.0": + version: 30.2.0 + resolution: "pretty-format@npm:30.2.0" dependencies: - "@jest/schemas": "npm:^28.1.3" - ansi-regex: "npm:^5.0.1" - ansi-styles: "npm:^5.0.0" - react-is: "npm:^18.0.0" - checksum: 10/26626d33e201388174a1ce352be46b8087f28184bf3684a88b2f7cf633e28419ffc664628eec261ba13b0f03748c3a6f85db063a2022f75a354c7b9e4e06526b + "@jest/schemas": "npm:30.0.5" + ansi-styles: "npm:^5.2.0" + react-is: "npm:^18.3.1" + checksum: 10/725890d648e3400575eebc99a334a4cd1498e0d36746313913706bbeea20ada27e17c184a3cd45c50f705c16111afa829f3450233fc0fda5eed293c69757e926 languageName: node linkType: hard @@ -17010,7 +17023,7 @@ __metadata: globals: "npm:^16.4.0" html-react-parser: "npm:^5.2.7" i18n-webpack-plugin: "npm:1.0.0" - jest: "npm:^28.1.3" + jest: "npm:^30.2.0" less: "npm:4.1.3" less-loader: "npm:12.2.0" localization: "npm:^1.0.2" @@ -17039,16 +17052,6 @@ __metadata: languageName: unknown linkType: soft -"prompts@npm:^2.0.1": - version: 2.4.2 - resolution: "prompts@npm:2.4.2" - dependencies: - kleur: "npm:^3.0.3" - sisteransi: "npm:^1.0.5" - checksum: 10/c52536521a4d21eff4f2f2aa4572446cad227464066365a7167e52ccf8d9839c099f9afec1aba0eed3d5a2514b3e79e0b3e7a1dc326b9acde6b75d27ed74b1a9 - languageName: node - linkType: hard - "promzard@npm:^1.0.0": version: 1.0.2 resolution: "promzard@npm:1.0.2" @@ -17164,6 +17167,13 @@ __metadata: languageName: node linkType: hard +"pure-rand@npm:^7.0.0": + version: 7.0.1 + resolution: "pure-rand@npm:7.0.1" + checksum: 10/c61a576fda5032ec9763ecb000da4a8f19263b9e2f9ae9aa2759c8fbd9dc6b192b2ce78391ebd41abb394a5fedb7bcc4b03c9e6141ac8ab20882dd5717698b80 + languageName: node + linkType: hard + "qs@npm:6.13.0": version: 6.13.0 resolution: "qs@npm:6.13.0" @@ -17463,7 +17473,7 @@ __metadata: languageName: node linkType: hard -"react-is@npm:^16.12.0 || ^17.0.0 || ^18.0.0, react-is@npm:^18.0.0, react-is@npm:^18.2.0": +"react-is@npm:^16.12.0 || ^17.0.0 || ^18.0.0, react-is@npm:^18.0.0, react-is@npm:^18.2.0, react-is@npm:^18.3.1": version: 18.3.1 resolution: "react-is@npm:18.3.1" checksum: 10/d5f60c87d285af24b1e1e7eaeb123ec256c3c8bdea7061ab3932e3e14685708221bf234ec50b21e10dd07f008f1b966a2730a0ce4ff67905b3872ff2042aec22 @@ -18298,13 +18308,6 @@ __metadata: languageName: node linkType: hard -"resolve.exports@npm:^1.1.0": - version: 1.1.1 - resolution: "resolve.exports@npm:1.1.1" - checksum: 10/de58c30aca30883f0e29910e4ad1b7b9986ec5f69434ef2e957ddbe52d3250e138ddd2688e8cd67909b4ee9bf3437424c718a5962d59edd610f035b861ef8441 - languageName: node - linkType: hard - "resolve@npm:^1.1.7, resolve@npm:^1.10.0, resolve@npm:^1.12.0, resolve@npm:^1.20.0, resolve@npm:^1.22.1, resolve@npm:^1.22.10, resolve@npm:^1.22.4, resolve@npm:^1.22.8": version: 1.22.10 resolution: "resolve@npm:1.22.10" @@ -18425,7 +18428,7 @@ __metadata: languageName: node linkType: hard -"rimraf@npm:^3.0.0, rimraf@npm:^3.0.2": +"rimraf@npm:^3.0.2": version: 3.0.2 resolution: "rimraf@npm:3.0.2" dependencies: @@ -18988,7 +18991,7 @@ __metadata: languageName: node linkType: hard -"semver@npm:^6.0.0, semver@npm:^6.3.0, semver@npm:^6.3.1": +"semver@npm:^6.0.0, semver@npm:^6.3.1": version: 6.3.1 resolution: "semver@npm:6.3.1" bin: @@ -19006,6 +19009,15 @@ __metadata: languageName: node linkType: hard +"semver@npm:^7.7.2": + version: 7.7.3 + resolution: "semver@npm:7.7.3" + bin: + semver: bin/semver.js + checksum: 10/8dbc3168e057a38fc322af909c7f5617483c50caddba135439ff09a754b20bdd6482a5123ff543dad4affa488ecf46ec5fb56d61312ad20bb140199b88dfaea9 + languageName: node + linkType: hard + "send@npm:0.19.0": version: 0.19.0 resolution: "send@npm:0.19.0" @@ -19335,7 +19347,7 @@ __metadata: languageName: node linkType: hard -"signal-exit@npm:3.0.7, signal-exit@npm:^3.0.2, signal-exit@npm:^3.0.3, signal-exit@npm:^3.0.7": +"signal-exit@npm:3.0.7, signal-exit@npm:^3.0.2, signal-exit@npm:^3.0.3": version: 3.0.7 resolution: "signal-exit@npm:3.0.7" checksum: 10/a2f098f247adc367dffc27845853e9959b9e88b01cb301658cfe4194352d8d2bb32e18467c786a7fe15f1d44b233ea35633d076d5e737870b7139949d1ab6318 @@ -19383,13 +19395,6 @@ __metadata: languageName: node linkType: hard -"sisteransi@npm:^1.0.5": - version: 1.0.5 - resolution: "sisteransi@npm:1.0.5" - checksum: 10/aba6438f46d2bfcef94cf112c835ab395172c75f67453fe05c340c770d3c402363018ae1ab4172a1026a90c47eaccf3af7b6ff6fa749a680c2929bd7fa2b37a4 - languageName: node - linkType: hard - "site-import-export@workspace:Dnn.AdminExperience/ClientSide/SiteImportExport.Web": version: 0.0.0-use.local resolution: "site-import-export@workspace:Dnn.AdminExperience/ClientSide/SiteImportExport.Web" @@ -19465,7 +19470,7 @@ __metadata: eslint-webpack-plugin: "npm:^5.0.2" file-loader: "npm:6.2.0" globals: "npm:^16.4.0" - jest: "npm:^28.1.3" + jest: "npm:^30.2.0" less: "npm:4.1.3" less-loader: "npm:12.2.0" prop-types: "npm:^15.8.1" @@ -19821,7 +19826,7 @@ __metadata: languageName: node linkType: hard -"stack-utils@npm:^2.0.3": +"stack-utils@npm:^2.0.6": version: 2.0.6 resolution: "stack-utils@npm:2.0.6" dependencies: @@ -19917,7 +19922,7 @@ __metadata: languageName: node linkType: hard -"string-length@npm:^4.0.1": +"string-length@npm:^4.0.2": version: 4.0.2 resolution: "string-length@npm:4.0.2" dependencies: @@ -20199,7 +20204,7 @@ __metadata: languageName: node linkType: hard -"supports-color@npm:^7.0.0, supports-color@npm:^7.1.0": +"supports-color@npm:^7.1.0": version: 7.2.0 resolution: "supports-color@npm:7.2.0" dependencies: @@ -20217,16 +20222,6 @@ __metadata: languageName: node linkType: hard -"supports-hyperlinks@npm:^2.0.0": - version: 2.3.0 - resolution: "supports-hyperlinks@npm:2.3.0" - dependencies: - has-flag: "npm:^4.0.0" - supports-color: "npm:^7.0.0" - checksum: 10/3e7df6e9eaa177d7bfbbe065c91325e9b482f48de0f7c9133603e3ffa8af31cbceac104a0941cd0266a57f8e691de6eb58b79fec237852dc84ed7ad152b116b0 - languageName: node - linkType: hard - "supports-preserve-symlinks-flag@npm:^1.0.0": version: 1.0.0 resolution: "supports-preserve-symlinks-flag@npm:1.0.0" @@ -20304,6 +20299,15 @@ __metadata: languageName: node linkType: hard +"synckit@npm:^0.11.8": + version: 0.11.11 + resolution: "synckit@npm:0.11.11" + dependencies: + "@pkgr/core": "npm:^0.2.9" + checksum: 10/6ecd88212b5be80004376b6ea74babcba284566ff59a50d8803afcaa78c165b5d268635c1dd84532ee3f690a979409e1eda225a8a35bed2d135ffdcea06ce7b0 + languageName: node + linkType: hard + "tapable@npm:^0.1.8": version: 0.1.10 resolution: "tapable@npm:0.1.10" @@ -20448,16 +20452,6 @@ __metadata: languageName: node linkType: hard -"terminal-link@npm:^2.0.0": - version: 2.1.1 - resolution: "terminal-link@npm:2.1.1" - dependencies: - ansi-escapes: "npm:^4.2.1" - supports-hyperlinks: "npm:^2.0.0" - checksum: 10/ce3d2cd3a438c4a9453947aa664581519173ea40e77e2534d08c088ee6dda449eabdbe0a76d2a516b8b73c33262fedd10d5270ccf7576ae316e3db170ce6562f - languageName: node - linkType: hard - "terser-webpack-plugin@npm:^5.3.1, terser-webpack-plugin@npm:^5.3.10, terser-webpack-plugin@npm:^5.3.11": version: 5.3.14 resolution: "terser-webpack-plugin@npm:5.3.14" @@ -21287,6 +21281,73 @@ __metadata: languageName: node linkType: hard +"unrs-resolver@npm:^1.7.11": + version: 1.11.1 + resolution: "unrs-resolver@npm:1.11.1" + dependencies: + "@unrs/resolver-binding-android-arm-eabi": "npm:1.11.1" + "@unrs/resolver-binding-android-arm64": "npm:1.11.1" + "@unrs/resolver-binding-darwin-arm64": "npm:1.11.1" + "@unrs/resolver-binding-darwin-x64": "npm:1.11.1" + "@unrs/resolver-binding-freebsd-x64": "npm:1.11.1" + "@unrs/resolver-binding-linux-arm-gnueabihf": "npm:1.11.1" + "@unrs/resolver-binding-linux-arm-musleabihf": "npm:1.11.1" + "@unrs/resolver-binding-linux-arm64-gnu": "npm:1.11.1" + "@unrs/resolver-binding-linux-arm64-musl": "npm:1.11.1" + "@unrs/resolver-binding-linux-ppc64-gnu": "npm:1.11.1" + "@unrs/resolver-binding-linux-riscv64-gnu": "npm:1.11.1" + "@unrs/resolver-binding-linux-riscv64-musl": "npm:1.11.1" + "@unrs/resolver-binding-linux-s390x-gnu": "npm:1.11.1" + "@unrs/resolver-binding-linux-x64-gnu": "npm:1.11.1" + "@unrs/resolver-binding-linux-x64-musl": "npm:1.11.1" + "@unrs/resolver-binding-wasm32-wasi": "npm:1.11.1" + "@unrs/resolver-binding-win32-arm64-msvc": "npm:1.11.1" + "@unrs/resolver-binding-win32-ia32-msvc": "npm:1.11.1" + "@unrs/resolver-binding-win32-x64-msvc": "npm:1.11.1" + napi-postinstall: "npm:^0.3.0" + dependenciesMeta: + "@unrs/resolver-binding-android-arm-eabi": + optional: true + "@unrs/resolver-binding-android-arm64": + optional: true + "@unrs/resolver-binding-darwin-arm64": + optional: true + "@unrs/resolver-binding-darwin-x64": + optional: true + "@unrs/resolver-binding-freebsd-x64": + optional: true + "@unrs/resolver-binding-linux-arm-gnueabihf": + optional: true + "@unrs/resolver-binding-linux-arm-musleabihf": + optional: true + "@unrs/resolver-binding-linux-arm64-gnu": + optional: true + "@unrs/resolver-binding-linux-arm64-musl": + optional: true + "@unrs/resolver-binding-linux-ppc64-gnu": + optional: true + "@unrs/resolver-binding-linux-riscv64-gnu": + optional: true + "@unrs/resolver-binding-linux-riscv64-musl": + optional: true + "@unrs/resolver-binding-linux-s390x-gnu": + optional: true + "@unrs/resolver-binding-linux-x64-gnu": + optional: true + "@unrs/resolver-binding-linux-x64-musl": + optional: true + "@unrs/resolver-binding-wasm32-wasi": + optional: true + "@unrs/resolver-binding-win32-arm64-msvc": + optional: true + "@unrs/resolver-binding-win32-ia32-msvc": + optional: true + "@unrs/resolver-binding-win32-x64-msvc": + optional: true + checksum: 10/4de653508cbaae47883a896bd5cdfef0e5e87b428d62620d16fd35cd534beaebf08ebf0cf2f8b4922aa947b2fe745180facf6cc3f39ba364f7ce0f974cb06a70 + languageName: node + linkType: hard + "upath@npm:2.0.1": version: 2.0.1 resolution: "upath@npm:2.0.1" @@ -21367,7 +21428,7 @@ __metadata: eslint-webpack-plugin: "npm:^5.0.2" file-loader: "npm:6.2.0" globals: "npm:^16.4.0" - jest: "npm:^28.1.3" + jest: "npm:^30.2.0" less: "npm:4.1.3" less-loader: "npm:12.2.0" localization: "npm:^1.0.2" @@ -22120,16 +22181,6 @@ __metadata: languageName: node linkType: hard -"write-file-atomic@npm:^4.0.1": - version: 4.0.2 - resolution: "write-file-atomic@npm:4.0.2" - dependencies: - imurmurhash: "npm:^0.1.4" - signal-exit: "npm:^3.0.7" - checksum: 10/3be1f5508a46c190619d5386b1ac8f3af3dbe951ed0f7b0b4a0961eed6fc626bd84b50cf4be768dabc0a05b672f5d0c5ee7f42daa557b14415d18c3a13c7d246 - languageName: node - linkType: hard - "write-json-file@npm:^3.2.0": version: 3.2.0 resolution: "write-json-file@npm:3.2.0" @@ -22293,7 +22344,7 @@ __metadata: languageName: node linkType: hard -"yargs@npm:17.7.2, yargs@npm:^17.0.0, yargs@npm:^17.3.1, yargs@npm:^17.6.2": +"yargs@npm:17.7.2, yargs@npm:^17.0.0, yargs@npm:^17.3.1, yargs@npm:^17.6.2, yargs@npm:^17.7.2": version: 17.7.2 resolution: "yargs@npm:17.7.2" dependencies: From 9ff632cc2e47c3ad679dfedc87cc7cde057bada7 Mon Sep 17 00:00:00 2001 From: Brian Dukes Date: Tue, 21 Oct 2025 17:06:11 -0500 Subject: [PATCH 113/199] Bump jiti to 2.6.1 --- .../ResourceManager/ResourceManager.Web/package.json | 2 +- .../ClientSide/Styles.Web/package.json | 2 +- yarn.lock | 12 ++++++------ 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/package.json b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/package.json index d02ad03bb42..c562b9d1f3f 100644 --- a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/package.json +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/package.json @@ -39,7 +39,7 @@ "@types/node": "^24.9.0", "@typescript-eslint/utils": "^8.46.2", "eslint": "^9.38.0", - "jiti": "^2.4.2", + "jiti": "^2.6.1", "typescript": "^5.8.3", "typescript-eslint": "^8.46.2" } diff --git a/Dnn.AdminExperience/ClientSide/Styles.Web/package.json b/Dnn.AdminExperience/ClientSide/Styles.Web/package.json index e20c1fa02d9..7bacaff02c2 100644 --- a/Dnn.AdminExperience/ClientSide/Styles.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Styles.Web/package.json @@ -37,7 +37,7 @@ "@typescript-eslint/eslint-plugin": "^8.46.2", "@typescript-eslint/parser": "^8.46.2", "eslint": "^9.38.0", - "jiti": "^2.4.2", + "jiti": "^2.6.1", "typescript-eslint": "^8.46.2" } } diff --git a/yarn.lock b/yarn.lock index abd69a87189..8612e280d9f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8892,7 +8892,7 @@ __metadata: "@types/node": "npm:^24.9.0" "@typescript-eslint/utils": "npm:^8.46.2" eslint: "npm:^9.38.0" - jiti: "npm:^2.4.2" + jiti: "npm:^2.6.1" typescript: "npm:^5.8.3" typescript-eslint: "npm:^8.46.2" languageName: unknown @@ -13401,12 +13401,12 @@ __metadata: languageName: node linkType: hard -"jiti@npm:^2.4.2": - version: 2.4.2 - resolution: "jiti@npm:2.4.2" +"jiti@npm:^2.6.1": + version: 2.6.1 + resolution: "jiti@npm:2.6.1" bin: jiti: lib/jiti-cli.mjs - checksum: 10/e2b07eb2e3fbb245e29ad288dddecab31804967fc84d5e01d39858997d2743b5e248946defcecf99272275a00284ecaf7ec88b8c841331324f0c946d8274414b + checksum: 10/8cd72c5fd03a0502564c3f46c49761090f6dadead21fa191b73535724f095ad86c2fa89ee6fe4bc3515337e8d406cc8fb2d37b73fa0c99a34584bac35cd4a4de languageName: node linkType: hard @@ -20192,7 +20192,7 @@ __metadata: "@typescript-eslint/eslint-plugin": "npm:^8.46.2" "@typescript-eslint/parser": "npm:^8.46.2" eslint: "npm:^9.38.0" - jiti: "npm:^2.4.2" + jiti: "npm:^2.6.1" typescript-eslint: "npm:^8.46.2" languageName: unknown linkType: soft From 468cec7914ed2359f72e2fb6d3717bbba756161b Mon Sep 17 00:00:00 2001 From: Brian Dukes Date: Tue, 21 Oct 2025 17:06:52 -0500 Subject: [PATCH 114/199] Bump lerna to 9.0.0 --- package.json | 2 +- yarn.lock | 1863 +++++++++++++++++++++++++++++--------------------- 2 files changed, 1066 insertions(+), 799 deletions(-) diff --git a/package.json b/package.json index 16747430d87..16f4f80c094 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ "DNN Platform/Dnn.ClientSide" ], "devDependencies": { - "lerna": "^8.1.9" + "lerna": "^9.0.0" }, "scripts": { "build": "lerna run build --stream", diff --git a/yarn.lock b/yarn.lock index 8612e280d9f..6b431d1cb8d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2279,6 +2279,253 @@ __metadata: languageName: node linkType: hard +"@inquirer/ansi@npm:^1.0.0, @inquirer/ansi@npm:^1.0.1": + version: 1.0.1 + resolution: "@inquirer/ansi@npm:1.0.1" + checksum: 10/0dda65720736f3e730715f3778e0e90f039ebd1382c277495a4d1cdbd2b2863095aa7291cd8ea7d3c0618bdee04a375db6e10a7bae5fb904df0b632a1c7774f9 + languageName: node + linkType: hard + +"@inquirer/checkbox@npm:^4.3.0": + version: 4.3.0 + resolution: "@inquirer/checkbox@npm:4.3.0" + dependencies: + "@inquirer/ansi": "npm:^1.0.1" + "@inquirer/core": "npm:^10.3.0" + "@inquirer/figures": "npm:^1.0.14" + "@inquirer/type": "npm:^3.0.9" + yoctocolors-cjs: "npm:^2.1.2" + peerDependencies: + "@types/node": ">=18" + peerDependenciesMeta: + "@types/node": + optional: true + checksum: 10/aa7ddf0816bc1718afdc38d7ed1e16207bbf944164a5a3ac0d87072a5a1b51cf3417617c72128a78d66b2e40a45f4a5658bdfc4bb546e92a208e30c8006674e6 + languageName: node + linkType: hard + +"@inquirer/confirm@npm:^5.1.19": + version: 5.1.19 + resolution: "@inquirer/confirm@npm:5.1.19" + dependencies: + "@inquirer/core": "npm:^10.3.0" + "@inquirer/type": "npm:^3.0.9" + peerDependencies: + "@types/node": ">=18" + peerDependenciesMeta: + "@types/node": + optional: true + checksum: 10/d65e0addf80c146d71a74057d77048bd78a4a80d74a9e0d774b759ff1adf38a33cde6c06a6d6ef802bb61ef9158770315dec3931f89b3624c0e63c595c0473c1 + languageName: node + linkType: hard + +"@inquirer/core@npm:^10.2.2, @inquirer/core@npm:^10.3.0": + version: 10.3.0 + resolution: "@inquirer/core@npm:10.3.0" + dependencies: + "@inquirer/ansi": "npm:^1.0.1" + "@inquirer/figures": "npm:^1.0.14" + "@inquirer/type": "npm:^3.0.9" + cli-width: "npm:^4.1.0" + mute-stream: "npm:^2.0.0" + signal-exit: "npm:^4.1.0" + wrap-ansi: "npm:^6.2.0" + yoctocolors-cjs: "npm:^2.1.2" + peerDependencies: + "@types/node": ">=18" + peerDependenciesMeta: + "@types/node": + optional: true + checksum: 10/41392e38dc3253b3dbebda9cca344ca5cfd72c05e1c5b8460cb00e0ce7fa665a1970a2c4af89dcb951d75fedfdf775cdd7ac3be0748dbe3dec47db5d899d6963 + languageName: node + linkType: hard + +"@inquirer/editor@npm:^4.2.21": + version: 4.2.21 + resolution: "@inquirer/editor@npm:4.2.21" + dependencies: + "@inquirer/core": "npm:^10.3.0" + "@inquirer/external-editor": "npm:^1.0.2" + "@inquirer/type": "npm:^3.0.9" + peerDependencies: + "@types/node": ">=18" + peerDependenciesMeta: + "@types/node": + optional: true + checksum: 10/cf2d4237dc86abb2143ba6e99a4a60368ee992ba56b0072457e4dd472e7ac99ebffcbd0895bf36d5f694f3e327ff0dbb70265952b03ec8a0dbf4abd1db306991 + languageName: node + linkType: hard + +"@inquirer/expand@npm:^4.0.21": + version: 4.0.21 + resolution: "@inquirer/expand@npm:4.0.21" + dependencies: + "@inquirer/core": "npm:^10.3.0" + "@inquirer/type": "npm:^3.0.9" + yoctocolors-cjs: "npm:^2.1.2" + peerDependencies: + "@types/node": ">=18" + peerDependenciesMeta: + "@types/node": + optional: true + checksum: 10/eb1900c443895377c03652c3e2b6ca29c572fe6ee2682e264572957b9b4a596d3d55c9ea271934846fb05d5cc5195cca0dffde1386e41358ac5c308698320e93 + languageName: node + linkType: hard + +"@inquirer/external-editor@npm:^1.0.2": + version: 1.0.2 + resolution: "@inquirer/external-editor@npm:1.0.2" + dependencies: + chardet: "npm:^2.1.0" + iconv-lite: "npm:^0.7.0" + peerDependencies: + "@types/node": ">=18" + peerDependenciesMeta: + "@types/node": + optional: true + checksum: 10/d0c5c73249b8153f4cf872c4fba01c57a7653142a4cad496f17ed03ef3769330a4b3c519b68d70af69d4bb33003d2599b66b2242be85411c0b027ff383619666 + languageName: node + linkType: hard + +"@inquirer/figures@npm:^1.0.14": + version: 1.0.14 + resolution: "@inquirer/figures@npm:1.0.14" + checksum: 10/39df361eb607cea5a020d457e25f9c6aee3a1de8975c6295a4b3bfe86ba7e7f7bfbefa6a52b145b1790f2690e5c8f10eb822e5bc764aff7ba00a6cd24eec5a25 + languageName: node + linkType: hard + +"@inquirer/input@npm:^4.2.5": + version: 4.2.5 + resolution: "@inquirer/input@npm:4.2.5" + dependencies: + "@inquirer/core": "npm:^10.3.0" + "@inquirer/type": "npm:^3.0.9" + peerDependencies: + "@types/node": ">=18" + peerDependenciesMeta: + "@types/node": + optional: true + checksum: 10/150dee6d6094663439a9941e5df5f1dadb819cd5ac68a7b5be0e0aceb4b74db0c8fa9a5fa0d21879928df6a53c84c9214b699f3fddbb6c617dd9c253a9d95155 + languageName: node + linkType: hard + +"@inquirer/number@npm:^3.0.21": + version: 3.0.21 + resolution: "@inquirer/number@npm:3.0.21" + dependencies: + "@inquirer/core": "npm:^10.3.0" + "@inquirer/type": "npm:^3.0.9" + peerDependencies: + "@types/node": ">=18" + peerDependenciesMeta: + "@types/node": + optional: true + checksum: 10/7b254cb3947c78a83593d82347bf93929b0af714cffa20f9f4503ec338004b3c0d6813945e3e3d7062b5d50006412b181ed833ac88c7da4df538df8bb15775d0 + languageName: node + linkType: hard + +"@inquirer/password@npm:^4.0.21": + version: 4.0.21 + resolution: "@inquirer/password@npm:4.0.21" + dependencies: + "@inquirer/ansi": "npm:^1.0.1" + "@inquirer/core": "npm:^10.3.0" + "@inquirer/type": "npm:^3.0.9" + peerDependencies: + "@types/node": ">=18" + peerDependenciesMeta: + "@types/node": + optional: true + checksum: 10/07fb1527ea2d44a81b79d9263f59713e66977e21fbf44efedb6bf08d27d617900ef481c49c91b0a749caf1d282f2b5e19fe6b7474acc98db3edd174eb5d45416 + languageName: node + linkType: hard + +"@inquirer/prompts@npm:^7.8.6": + version: 7.9.0 + resolution: "@inquirer/prompts@npm:7.9.0" + dependencies: + "@inquirer/checkbox": "npm:^4.3.0" + "@inquirer/confirm": "npm:^5.1.19" + "@inquirer/editor": "npm:^4.2.21" + "@inquirer/expand": "npm:^4.0.21" + "@inquirer/input": "npm:^4.2.5" + "@inquirer/number": "npm:^3.0.21" + "@inquirer/password": "npm:^4.0.21" + "@inquirer/rawlist": "npm:^4.1.9" + "@inquirer/search": "npm:^3.2.0" + "@inquirer/select": "npm:^4.4.0" + peerDependencies: + "@types/node": ">=18" + peerDependenciesMeta: + "@types/node": + optional: true + checksum: 10/ca58889261018be39a58e93c03c542d47d25dd7f5bb93e98bde7e3bf63eb70f8d5243d32a3fd53797bb474471682490513d99ec5179323862e5a15cdeb35f4b5 + languageName: node + linkType: hard + +"@inquirer/rawlist@npm:^4.1.9": + version: 4.1.9 + resolution: "@inquirer/rawlist@npm:4.1.9" + dependencies: + "@inquirer/core": "npm:^10.3.0" + "@inquirer/type": "npm:^3.0.9" + yoctocolors-cjs: "npm:^2.1.2" + peerDependencies: + "@types/node": ">=18" + peerDependenciesMeta: + "@types/node": + optional: true + checksum: 10/ec23e087bfa9497b36d51b53e8da18c837e4a0c5c091bce7d1a6b52d9664035d7e22c3753993dd3c7c9ebfd5e9b71f1738873f2c25422668733ddb28d74bf26b + languageName: node + linkType: hard + +"@inquirer/search@npm:^3.2.0": + version: 3.2.0 + resolution: "@inquirer/search@npm:3.2.0" + dependencies: + "@inquirer/core": "npm:^10.3.0" + "@inquirer/figures": "npm:^1.0.14" + "@inquirer/type": "npm:^3.0.9" + yoctocolors-cjs: "npm:^2.1.2" + peerDependencies: + "@types/node": ">=18" + peerDependenciesMeta: + "@types/node": + optional: true + checksum: 10/b01a53d6f72090f45cda39b75dd2e613e2d7fa0f454c0781f846e543b833eed4da831fec8d9e5325ebd4383684a69a74c5a38520b7ee0734b1090f71cf5dd372 + languageName: node + linkType: hard + +"@inquirer/select@npm:^4.4.0": + version: 4.4.0 + resolution: "@inquirer/select@npm:4.4.0" + dependencies: + "@inquirer/ansi": "npm:^1.0.1" + "@inquirer/core": "npm:^10.3.0" + "@inquirer/figures": "npm:^1.0.14" + "@inquirer/type": "npm:^3.0.9" + yoctocolors-cjs: "npm:^2.1.2" + peerDependencies: + "@types/node": ">=18" + peerDependenciesMeta: + "@types/node": + optional: true + checksum: 10/97f1f167d640c668ea5f137fca76fd9096215546f0890732ab8ed0c58ac3d9f01db5d1877e877e74ef6877a139ab8970ee683c6c3f2c08f2e11522f5e0bfd61e + languageName: node + linkType: hard + +"@inquirer/type@npm:^3.0.8, @inquirer/type@npm:^3.0.9": + version: 3.0.9 + resolution: "@inquirer/type@npm:3.0.9" + peerDependencies: + "@types/node": ">=18" + peerDependenciesMeta: + "@types/node": + optional: true + checksum: 10/960ba4737405f70bac17e7cdc4696c60064b06c8dd13a4b3d0783763ba1714bdadbd598b88d537ab9415b7d5d61e011ac042cfbd1438b2a35298e2868724b853 + languageName: node + linkType: hard + "@isaacs/balanced-match@npm:^4.0.1": version: 4.0.1 resolution: "@isaacs/balanced-match@npm:4.0.1" @@ -2744,20 +2991,19 @@ __metadata: languageName: node linkType: hard -"@lerna/create@npm:8.2.3": - version: 8.2.3 - resolution: "@lerna/create@npm:8.2.3" +"@lerna/create@npm:9.0.0": + version: 9.0.0 + resolution: "@lerna/create@npm:9.0.0" dependencies: - "@npmcli/arborist": "npm:7.5.4" - "@npmcli/package-json": "npm:5.2.0" - "@npmcli/run-script": "npm:8.1.0" - "@nx/devkit": "npm:>=17.1.2 < 21" + "@npmcli/arborist": "npm:9.1.4" + "@npmcli/package-json": "npm:7.0.0" + "@npmcli/run-script": "npm:10.0.0" + "@nx/devkit": "npm:>=21.5.2 < 22.0.0" "@octokit/plugin-enterprise-rest": "npm:6.0.1" "@octokit/rest": "npm:20.1.2" aproba: "npm:2.0.0" byte-size: "npm:8.1.1" chalk: "npm:4.1.0" - clone-deep: "npm:4.0.1" cmd-shim: "npm:6.0.3" color-support: "npm:1.1.3" columnify: "npm:1.6.0" @@ -2771,54 +3017,52 @@ __metadata: get-stream: "npm:6.0.0" git-url-parse: "npm:14.0.0" glob-parent: "npm:6.0.2" - graceful-fs: "npm:4.2.11" has-unicode: "npm:2.0.1" ini: "npm:^1.3.8" - init-package-json: "npm:6.0.3" - inquirer: "npm:^8.2.4" + init-package-json: "npm:8.2.2" + inquirer: "npm:12.9.6" is-ci: "npm:3.0.1" is-stream: "npm:2.0.0" js-yaml: "npm:4.1.0" - libnpmpublish: "npm:9.0.9" + libnpmpublish: "npm:11.1.0" load-json-file: "npm:6.2.0" - lodash: "npm:^4.17.21" make-dir: "npm:4.0.0" + make-fetch-happen: "npm:15.0.2" minimatch: "npm:3.0.5" multimatch: "npm:5.0.0" - node-fetch: "npm:2.6.7" - npm-package-arg: "npm:11.0.2" - npm-packlist: "npm:8.0.2" - npm-registry-fetch: "npm:^17.1.0" - nx: "npm:>=17.1.2 < 21" + npm-package-arg: "npm:13.0.0" + npm-packlist: "npm:10.0.1" + npm-registry-fetch: "npm:19.0.0" + nx: "npm:>=21.5.3 < 22.0.0" p-map: "npm:4.0.0" p-map-series: "npm:2.1.0" p-queue: "npm:6.6.2" p-reduce: "npm:^2.1.0" - pacote: "npm:^18.0.6" + pacote: "npm:21.0.1" pify: "npm:5.0.0" read-cmd-shim: "npm:4.0.0" resolve-from: "npm:5.0.0" rimraf: "npm:^4.4.1" - semver: "npm:^7.3.4" + semver: "npm:7.7.2" set-blocking: "npm:^2.0.0" signal-exit: "npm:3.0.7" slash: "npm:^3.0.0" - ssri: "npm:^10.0.6" + ssri: "npm:12.0.0" string-width: "npm:^4.2.3" tar: "npm:6.2.1" temp-dir: "npm:1.0.0" through: "npm:2.3.8" tinyglobby: "npm:0.2.12" upath: "npm:2.0.1" - uuid: "npm:^10.0.0" - validate-npm-package-license: "npm:^3.0.4" - validate-npm-package-name: "npm:5.0.1" + uuid: "npm:^11.1.0" + validate-npm-package-license: "npm:3.0.4" + validate-npm-package-name: "npm:6.0.2" wide-align: "npm:1.1.5" write-file-atomic: "npm:5.0.1" write-pkg: "npm:4.0.0" yargs: "npm:17.7.2" yargs-parser: "npm:21.1.1" - checksum: 10/1264bf324de2c83377dbc0b49c6731b9e27401c552c34601846b012c46aee496c9a3bcdeba87e59cfaf8b54d3c82f7f3ece62ff4c77ca7b3a85acfc021b7cbb2 + checksum: 10/8e0c81cc52db722119de66d06663b8cde90fdf3bb7cac58c0bad81b9cce5517b6b2ed9aa087a2f9815028a03ea8e7cd32b52d8d0b5e55ad38fba21f585a32649 languageName: node linkType: hard @@ -2892,83 +3136,73 @@ __metadata: languageName: node linkType: hard -"@npmcli/agent@npm:^2.0.0": - version: 2.2.2 - resolution: "@npmcli/agent@npm:2.2.2" +"@npmcli/agent@npm:^3.0.0": + version: 3.0.0 + resolution: "@npmcli/agent@npm:3.0.0" dependencies: agent-base: "npm:^7.1.0" http-proxy-agent: "npm:^7.0.0" https-proxy-agent: "npm:^7.0.1" lru-cache: "npm:^10.0.1" socks-proxy-agent: "npm:^8.0.3" - checksum: 10/96fc0036b101bae5032dc2a4cd832efb815ce9b33f9ee2f29909ee49d96a0026b3565f73c507a69eb8603f5cb32e0ae45a70cab1e2655990a4e06ae99f7f572a + checksum: 10/775c9a7eb1f88c195dfb3bce70c31d0fe2a12b28b754e25c08a3edb4bc4816bfedb7ac64ef1e730579d078ca19dacf11630e99f8f3c3e0fd7b23caa5fd6d30a6 languageName: node linkType: hard -"@npmcli/agent@npm:^3.0.0": - version: 3.0.0 - resolution: "@npmcli/agent@npm:3.0.0" +"@npmcli/agent@npm:^4.0.0": + version: 4.0.0 + resolution: "@npmcli/agent@npm:4.0.0" dependencies: agent-base: "npm:^7.1.0" http-proxy-agent: "npm:^7.0.0" https-proxy-agent: "npm:^7.0.1" - lru-cache: "npm:^10.0.1" + lru-cache: "npm:^11.2.1" socks-proxy-agent: "npm:^8.0.3" - checksum: 10/775c9a7eb1f88c195dfb3bce70c31d0fe2a12b28b754e25c08a3edb4bc4816bfedb7ac64ef1e730579d078ca19dacf11630e99f8f3c3e0fd7b23caa5fd6d30a6 + checksum: 10/1a81573becc60515031accc696e6405e9b894e65c12b98ef4aeee03b5617c41948633159dbf6caf5dde5b47367eeb749bdc7b7dfb21960930a9060a935c6f636 languageName: node linkType: hard -"@npmcli/arborist@npm:7.5.4": - version: 7.5.4 - resolution: "@npmcli/arborist@npm:7.5.4" +"@npmcli/arborist@npm:9.1.4": + version: 9.1.4 + resolution: "@npmcli/arborist@npm:9.1.4" dependencies: "@isaacs/string-locale-compare": "npm:^1.1.0" - "@npmcli/fs": "npm:^3.1.1" - "@npmcli/installed-package-contents": "npm:^2.1.0" - "@npmcli/map-workspaces": "npm:^3.0.2" - "@npmcli/metavuln-calculator": "npm:^7.1.1" - "@npmcli/name-from-folder": "npm:^2.0.0" - "@npmcli/node-gyp": "npm:^3.0.0" - "@npmcli/package-json": "npm:^5.1.0" - "@npmcli/query": "npm:^3.1.0" - "@npmcli/redact": "npm:^2.0.0" - "@npmcli/run-script": "npm:^8.1.0" - bin-links: "npm:^4.0.4" - cacache: "npm:^18.0.3" + "@npmcli/fs": "npm:^4.0.0" + "@npmcli/installed-package-contents": "npm:^3.0.0" + "@npmcli/map-workspaces": "npm:^4.0.1" + "@npmcli/metavuln-calculator": "npm:^9.0.0" + "@npmcli/name-from-folder": "npm:^3.0.0" + "@npmcli/node-gyp": "npm:^4.0.0" + "@npmcli/package-json": "npm:^6.0.1" + "@npmcli/query": "npm:^4.0.0" + "@npmcli/redact": "npm:^3.0.0" + "@npmcli/run-script": "npm:^9.0.1" + bin-links: "npm:^5.0.0" + cacache: "npm:^19.0.1" common-ancestor-path: "npm:^1.0.1" - hosted-git-info: "npm:^7.0.2" - json-parse-even-better-errors: "npm:^3.0.2" + hosted-git-info: "npm:^8.0.0" json-stringify-nice: "npm:^1.1.4" lru-cache: "npm:^10.2.2" minimatch: "npm:^9.0.4" - nopt: "npm:^7.2.1" - npm-install-checks: "npm:^6.2.0" - npm-package-arg: "npm:^11.0.2" - npm-pick-manifest: "npm:^9.0.1" - npm-registry-fetch: "npm:^17.0.1" - pacote: "npm:^18.0.6" - parse-conflict-json: "npm:^3.0.0" - proc-log: "npm:^4.2.0" - proggy: "npm:^2.0.0" + nopt: "npm:^8.0.0" + npm-install-checks: "npm:^7.1.0" + npm-package-arg: "npm:^12.0.0" + npm-pick-manifest: "npm:^10.0.0" + npm-registry-fetch: "npm:^18.0.1" + pacote: "npm:^21.0.0" + parse-conflict-json: "npm:^4.0.0" + proc-log: "npm:^5.0.0" + proggy: "npm:^3.0.0" promise-all-reject-late: "npm:^1.0.0" promise-call-limit: "npm:^3.0.1" - read-package-json-fast: "npm:^3.0.2" + read-package-json-fast: "npm:^4.0.0" semver: "npm:^7.3.7" - ssri: "npm:^10.0.6" + ssri: "npm:^12.0.0" treeverse: "npm:^3.0.0" - walk-up-path: "npm:^3.0.1" + walk-up-path: "npm:^4.0.0" bin: arborist: bin/index.js - checksum: 10/b77170754f419171e5ca2abfb679a9c811443e2b67036916a62eda81fd069f12c98186941cd73a0d36c2ec76cda638b43ceeb4c5fae39de1bb9df825432f3ef7 - languageName: node - linkType: hard - -"@npmcli/fs@npm:^3.1.0, @npmcli/fs@npm:^3.1.1": - version: 3.1.1 - resolution: "@npmcli/fs@npm:3.1.1" - dependencies: - semver: "npm:^7.3.5" - checksum: 10/1e0e04087049b24b38bc0b30d87a9388ee3ca1d3fdfc347c2f77d84fcfe6a51f250bc57ba2c1f614d7e4285c6c62bf8c769bc19aa0949ea39e5b043ee023b0bd + checksum: 10/f0dec2a73ad8d8da95c9e2bb1c727084ba96c85c1050025a571d62263950a80e2b0f3e0588d590c9939751f43e784e92af2f9ae9770956abcca3c9a22772f960 languageName: node linkType: hard @@ -2981,227 +3215,270 @@ __metadata: languageName: node linkType: hard -"@npmcli/git@npm:^5.0.0": - version: 5.0.8 - resolution: "@npmcli/git@npm:5.0.8" +"@npmcli/git@npm:^6.0.0": + version: 6.0.3 + resolution: "@npmcli/git@npm:6.0.3" dependencies: - "@npmcli/promise-spawn": "npm:^7.0.0" - ini: "npm:^4.1.3" + "@npmcli/promise-spawn": "npm:^8.0.0" + ini: "npm:^5.0.0" lru-cache: "npm:^10.0.1" - npm-pick-manifest: "npm:^9.0.0" - proc-log: "npm:^4.0.0" - promise-inflight: "npm:^1.0.1" + npm-pick-manifest: "npm:^10.0.0" + proc-log: "npm:^5.0.0" promise-retry: "npm:^2.0.1" semver: "npm:^7.3.5" - which: "npm:^4.0.0" - checksum: 10/e6f94175fb9dde13d84849b29b32ffb4c4df968822cc85df2aebfca13bf8ca76f33b1d281911f5bcddc95bccba2f9e795669c736a38de4d9c76efb5047ffb4fb + which: "npm:^5.0.0" + checksum: 10/aef520bb32c13012568dfb9f4ae90cb214d7fc45736012cd9415f0ac80f76ddf6a582f8d524adf3f4bab50e5c9d35b5370589bc630377cbfd06a618504faa689 languageName: node linkType: hard -"@npmcli/installed-package-contents@npm:^2.0.1, @npmcli/installed-package-contents@npm:^2.1.0": - version: 2.1.0 - resolution: "@npmcli/installed-package-contents@npm:2.1.0" +"@npmcli/git@npm:^7.0.0": + version: 7.0.0 + resolution: "@npmcli/git@npm:7.0.0" dependencies: - npm-bundled: "npm:^3.0.0" - npm-normalize-package-bin: "npm:^3.0.0" + "@npmcli/promise-spawn": "npm:^8.0.0" + ini: "npm:^5.0.0" + lru-cache: "npm:^11.2.1" + npm-pick-manifest: "npm:^11.0.1" + proc-log: "npm:^5.0.0" + promise-retry: "npm:^2.0.1" + semver: "npm:^7.3.5" + which: "npm:^5.0.0" + checksum: 10/8ebdc8e8037c28cd549ac04e7be06d5ec14efcdcbe36da7f425efd58d24361f88401148c4ab90130e967f85deda8697ceb6fb60a5e3a750ad7e0784782ce385b + languageName: node + linkType: hard + +"@npmcli/installed-package-contents@npm:^3.0.0": + version: 3.0.0 + resolution: "@npmcli/installed-package-contents@npm:3.0.0" + dependencies: + npm-bundled: "npm:^4.0.0" + npm-normalize-package-bin: "npm:^4.0.0" bin: installed-package-contents: bin/index.js - checksum: 10/68ab3ea2994f5ea21c61940de94ec4f2755fe569ef0b86e22db0695d651a3c88915c5eab61d634cfa203b9c801ee307c8aa134c2c4bd2e4fe1aa8d295ce8a163 + checksum: 10/00fc2f0bdb63c510219a2d47ac0eb3cfaed9208efa4e1fe701eb976b91e6d08a533705a0629cbd3eb66a2b1a93abe8176b80723b9968ce874adbc299035f2fa5 languageName: node linkType: hard -"@npmcli/map-workspaces@npm:^3.0.2": - version: 3.0.6 - resolution: "@npmcli/map-workspaces@npm:3.0.6" +"@npmcli/map-workspaces@npm:^4.0.1": + version: 4.0.2 + resolution: "@npmcli/map-workspaces@npm:4.0.2" dependencies: - "@npmcli/name-from-folder": "npm:^2.0.0" + "@npmcli/name-from-folder": "npm:^3.0.0" + "@npmcli/package-json": "npm:^6.0.0" glob: "npm:^10.2.2" minimatch: "npm:^9.0.0" - read-package-json-fast: "npm:^3.0.0" - checksum: 10/b364b155991a4ff85db5ea5b9f809ab65936350fc36fe1e51d5ab8cd479bba57e69f02e17215c0e2126e383074c2987c268d8e589aacd26c9962e028f4da98f2 + checksum: 10/a31dfd359aa305d8e3db66dc36bc30dc9476b4c6f328f3c39d7b0b1db2200dbd44c3739b1f225fbfbd09bf0e2648ac821d91d8d09b6540d4836b7026605a8ec0 languageName: node linkType: hard -"@npmcli/metavuln-calculator@npm:^7.1.1": - version: 7.1.1 - resolution: "@npmcli/metavuln-calculator@npm:7.1.1" +"@npmcli/metavuln-calculator@npm:^9.0.0": + version: 9.0.2 + resolution: "@npmcli/metavuln-calculator@npm:9.0.2" dependencies: - cacache: "npm:^18.0.0" - json-parse-even-better-errors: "npm:^3.0.0" - pacote: "npm:^18.0.0" - proc-log: "npm:^4.1.0" + cacache: "npm:^20.0.0" + json-parse-even-better-errors: "npm:^4.0.0" + pacote: "npm:^21.0.0" + proc-log: "npm:^5.0.0" semver: "npm:^7.3.5" - checksum: 10/57163b4bde4af3f5badb0c9b0c868f9539e2a112ee73c606680b7548b148bf58e793952d74eb1e581c9cc2e630bc03bc60adc04b3f1e7960482f97af817f28d2 + checksum: 10/85b162be5a844224bb6827ccf3fd774f189b21c93984da1af7fdfbfb9399b4572ec04d9d080da5440596a31a3ec04eb5cb8aa6699860110c231c2421408169ad languageName: node linkType: hard -"@npmcli/name-from-folder@npm:^2.0.0": - version: 2.0.0 - resolution: "@npmcli/name-from-folder@npm:2.0.0" - checksum: 10/75beb40373f916cfcf7327958b3ab920ab4e32d24217197927dd1c76a325c7645695011fce9cb2a8f93616f8b74946e84eebe3830303e11ed9d400dae623a99b +"@npmcli/name-from-folder@npm:^3.0.0": + version: 3.0.0 + resolution: "@npmcli/name-from-folder@npm:3.0.0" + checksum: 10/c5a12b65def2a9e5a93b53fe6156b4a9c91e7586cda5d65d0e63af23564389b1a8eca2a24e6195bbfae7a199eaccfadd2fe4dc73b69be6ad347829885e79b66e languageName: node linkType: hard -"@npmcli/node-gyp@npm:^3.0.0": - version: 3.0.0 - resolution: "@npmcli/node-gyp@npm:3.0.0" - checksum: 10/dd9fed3e80df8fbb20443f28651a8ed7235f2c15286ecc010e2d3cd392c85912e59ef29218c0b02f098defb4cbc8cdf045aab1d32d5cef6ace289913196ed5df +"@npmcli/node-gyp@npm:^4.0.0": + version: 4.0.0 + resolution: "@npmcli/node-gyp@npm:4.0.0" + checksum: 10/edfbdc66dcb35b769d27f1d34b6149957a15fdf56d6f9dd01120720f2d56dbeb825e4b2fad0eebb36855f8a741a5128683c69c2d024412d799df843c32af3d5d languageName: node linkType: hard -"@npmcli/package-json@npm:5.2.0": - version: 5.2.0 - resolution: "@npmcli/package-json@npm:5.2.0" +"@npmcli/package-json@npm:7.0.0": + version: 7.0.0 + resolution: "@npmcli/package-json@npm:7.0.0" dependencies: - "@npmcli/git": "npm:^5.0.0" - glob: "npm:^10.2.2" - hosted-git-info: "npm:^7.0.0" - json-parse-even-better-errors: "npm:^3.0.0" - normalize-package-data: "npm:^6.0.0" - proc-log: "npm:^4.0.0" + "@npmcli/git": "npm:^6.0.0" + glob: "npm:^11.0.3" + hosted-git-info: "npm:^9.0.0" + json-parse-even-better-errors: "npm:^4.0.0" + proc-log: "npm:^5.0.0" semver: "npm:^7.5.3" - checksum: 10/c3d2218877bfc005bca3b7a11f53825bf16a68811b8e8ed0c9b219cceb8e8e646d70efab8c5d6decbd8007f286076468b3f456dab4d41d648aff73a5f3a6fce2 + validate-npm-package-license: "npm:^3.0.4" + checksum: 10/9150e6a9d41443751fcf479db0b4db90f4f906efd8e385c066c76b5c15236afeb8addda98228d158d9e288c60e133d1d27c952de662c1019ced3fdf9f0883dd5 languageName: node linkType: hard -"@npmcli/package-json@npm:^5.0.0, @npmcli/package-json@npm:^5.1.0": - version: 5.2.1 - resolution: "@npmcli/package-json@npm:5.2.1" +"@npmcli/package-json@npm:^6.0.0, @npmcli/package-json@npm:^6.0.1, @npmcli/package-json@npm:^6.2.0": + version: 6.2.0 + resolution: "@npmcli/package-json@npm:6.2.0" dependencies: - "@npmcli/git": "npm:^5.0.0" + "@npmcli/git": "npm:^6.0.0" glob: "npm:^10.2.2" - hosted-git-info: "npm:^7.0.0" - json-parse-even-better-errors: "npm:^3.0.0" - normalize-package-data: "npm:^6.0.0" - proc-log: "npm:^4.0.0" + hosted-git-info: "npm:^8.0.0" + json-parse-even-better-errors: "npm:^4.0.0" + proc-log: "npm:^5.0.0" semver: "npm:^7.5.3" - checksum: 10/304a819b93f79a6e0e56cb371961a66d2db72142e310d545ecbbbe4d917025a30601aa8e63a5f0cc28f0fe281c116bdaf79b334619b105a1d027a2b769ecd137 + validate-npm-package-license: "npm:^3.0.4" + checksum: 10/56b8ba471326cf0c3d2f956d46f82e843bf845302e1ead4cc8a3d1742a4bb6aea4e871d292f0fa4a836a0068cd4002afd7a964acf35b0d7a6ea838746eb74303 languageName: node linkType: hard -"@npmcli/promise-spawn@npm:^7.0.0": - version: 7.0.2 - resolution: "@npmcli/promise-spawn@npm:7.0.2" +"@npmcli/package-json@npm:^7.0.0": + version: 7.0.1 + resolution: "@npmcli/package-json@npm:7.0.1" dependencies: - which: "npm:^4.0.0" - checksum: 10/94cbbbeeb20342026c3b68fc8eb09e1600b7645d4e509f2588ef5ea7cff977eb01e628cc8e014595d04a6af4b4bc5c467c950a8135920f39f7c7b57fba43f4e9 + "@npmcli/git": "npm:^7.0.0" + glob: "npm:^11.0.3" + hosted-git-info: "npm:^9.0.0" + json-parse-even-better-errors: "npm:^4.0.0" + proc-log: "npm:^5.0.0" + semver: "npm:^7.5.3" + validate-npm-package-license: "npm:^3.0.4" + checksum: 10/be69096e889ebd3b832de24c56be17784ba00529af5f16d8092c0e911ac29acaf18ba86792e791a15f0681366ffd923a696b0b0f3840b1e68407909273c23e3e languageName: node linkType: hard -"@npmcli/query@npm:^3.1.0": - version: 3.1.0 - resolution: "@npmcli/query@npm:3.1.0" +"@npmcli/promise-spawn@npm:^8.0.0": + version: 8.0.3 + resolution: "@npmcli/promise-spawn@npm:8.0.3" dependencies: - postcss-selector-parser: "npm:^6.0.10" - checksum: 10/fa79ae317934c95d14b89cb149cb8eb0b2a4e611acf0661681cfa964bf9af6740f60efe095c8bb7e880398e0955666408cc8a3ffede90e87922cb81cce1efcdb + which: "npm:^5.0.0" + checksum: 10/2585597911082437b71b84d964f05c891b80546a87a4e0f549167c1331e4662e130d20158f40962c81a5ad7460ee48cb2c4910ad5f1532fd884fea8841f63cb2 languageName: node linkType: hard -"@npmcli/redact@npm:^2.0.0": - version: 2.0.1 - resolution: "@npmcli/redact@npm:2.0.1" - checksum: 10/f19a521fa71b539707eee69106ed3d97e3047712d4f279c80007a8d0aef63d137e3062941f11e19d6cec03812eaa0872891ae20c84f603d9e021dfb93cc9d6e5 +"@npmcli/query@npm:^4.0.0": + version: 4.0.1 + resolution: "@npmcli/query@npm:4.0.1" + dependencies: + postcss-selector-parser: "npm:^7.0.0" + checksum: 10/00193d829c41c7d0d997e4695a15bb6ad4728358e86c2737bedf1ecb42fc12f2e37e33bec8c487ae00323566705a3a944cacec07e1d46c3707d5fa2f2f401c0e languageName: node linkType: hard -"@npmcli/run-script@npm:8.1.0, @npmcli/run-script@npm:^8.0.0, @npmcli/run-script@npm:^8.1.0": - version: 8.1.0 - resolution: "@npmcli/run-script@npm:8.1.0" +"@npmcli/redact@npm:^3.0.0": + version: 3.2.2 + resolution: "@npmcli/redact@npm:3.2.2" + checksum: 10/06769db8807c342e45985379a2786f41c367953a200dfba31029d14d147fae36fe8b428b930678555dcbdb30488f471e972e927f42e3ddd5ca31f5726c1214e3 + languageName: node + linkType: hard + +"@npmcli/run-script@npm:10.0.0, @npmcli/run-script@npm:^10.0.0": + version: 10.0.0 + resolution: "@npmcli/run-script@npm:10.0.0" + dependencies: + "@npmcli/node-gyp": "npm:^4.0.0" + "@npmcli/package-json": "npm:^7.0.0" + "@npmcli/promise-spawn": "npm:^8.0.0" + node-gyp: "npm:^11.0.0" + proc-log: "npm:^5.0.0" + which: "npm:^5.0.0" + checksum: 10/400641d0fbbdc32851b7809c98bc796fdfa6b155987e45aef8473d0704d62b0127a2bd590d845c0ece464e1b6c33d00e239ba065517cf32fc879ade2e14a5df2 + languageName: node + linkType: hard + +"@npmcli/run-script@npm:^9.0.1": + version: 9.1.0 + resolution: "@npmcli/run-script@npm:9.1.0" dependencies: - "@npmcli/node-gyp": "npm:^3.0.0" - "@npmcli/package-json": "npm:^5.0.0" - "@npmcli/promise-spawn": "npm:^7.0.0" - node-gyp: "npm:^10.0.0" - proc-log: "npm:^4.0.0" - which: "npm:^4.0.0" - checksum: 10/256bd580f82b98db93e54065bf9bcc94946be4f2d668a062cf756cb8ea091f58ef7154b3d2450d79738081a150f25cc48f6075351911e672f24ffd34350f02f2 + "@npmcli/node-gyp": "npm:^4.0.0" + "@npmcli/package-json": "npm:^6.0.0" + "@npmcli/promise-spawn": "npm:^8.0.0" + node-gyp: "npm:^11.0.0" + proc-log: "npm:^5.0.0" + which: "npm:^5.0.0" + checksum: 10/6415151321e38ee46a9ffcf488a00826fdf859d264822abe4832c6db2b65957e15c3dfd64371cd3e62f1376e43b54fe91c5f8a737b848c16bf677ed97b963105 languageName: node linkType: hard -"@nx/devkit@npm:>=17.1.2 < 21": - version: 20.8.2 - resolution: "@nx/devkit@npm:20.8.2" +"@nx/devkit@npm:>=21.5.2 < 22.0.0": + version: 21.6.5 + resolution: "@nx/devkit@npm:21.6.5" dependencies: ejs: "npm:^3.1.7" enquirer: "npm:~2.3.6" ignore: "npm:^5.0.4" minimatch: "npm:9.0.3" semver: "npm:^7.5.3" - tmp: "npm:~0.2.1" tslib: "npm:^2.3.0" yargs-parser: "npm:21.1.1" peerDependencies: - nx: ">= 19 <= 21" - checksum: 10/27a013100435351da34eef669297bc6ab34ed32d5c2f1da237e6ba59188c1320b2c1cb19f08e56918c61dbe9aec5538b44101deffea02187f3a67ecc8ec90d54 + nx: ">= 20 <= 22" + checksum: 10/3543ee50f51a4f0e31af1716dc050809be5c546a918492b261d4f30d09cf6f7fd56ab3fec7a217b24b6ac9e907f3a615a54a86430f54470d3d7b9737a390e2f6 languageName: node linkType: hard -"@nx/nx-darwin-arm64@npm:20.8.2": - version: 20.8.2 - resolution: "@nx/nx-darwin-arm64@npm:20.8.2" +"@nx/nx-darwin-arm64@npm:21.6.5": + version: 21.6.5 + resolution: "@nx/nx-darwin-arm64@npm:21.6.5" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@nx/nx-darwin-x64@npm:20.8.2": - version: 20.8.2 - resolution: "@nx/nx-darwin-x64@npm:20.8.2" +"@nx/nx-darwin-x64@npm:21.6.5": + version: 21.6.5 + resolution: "@nx/nx-darwin-x64@npm:21.6.5" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@nx/nx-freebsd-x64@npm:20.8.2": - version: 20.8.2 - resolution: "@nx/nx-freebsd-x64@npm:20.8.2" +"@nx/nx-freebsd-x64@npm:21.6.5": + version: 21.6.5 + resolution: "@nx/nx-freebsd-x64@npm:21.6.5" conditions: os=freebsd & cpu=x64 languageName: node linkType: hard -"@nx/nx-linux-arm-gnueabihf@npm:20.8.2": - version: 20.8.2 - resolution: "@nx/nx-linux-arm-gnueabihf@npm:20.8.2" +"@nx/nx-linux-arm-gnueabihf@npm:21.6.5": + version: 21.6.5 + resolution: "@nx/nx-linux-arm-gnueabihf@npm:21.6.5" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@nx/nx-linux-arm64-gnu@npm:20.8.2": - version: 20.8.2 - resolution: "@nx/nx-linux-arm64-gnu@npm:20.8.2" +"@nx/nx-linux-arm64-gnu@npm:21.6.5": + version: 21.6.5 + resolution: "@nx/nx-linux-arm64-gnu@npm:21.6.5" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@nx/nx-linux-arm64-musl@npm:20.8.2": - version: 20.8.2 - resolution: "@nx/nx-linux-arm64-musl@npm:20.8.2" +"@nx/nx-linux-arm64-musl@npm:21.6.5": + version: 21.6.5 + resolution: "@nx/nx-linux-arm64-musl@npm:21.6.5" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@nx/nx-linux-x64-gnu@npm:20.8.2": - version: 20.8.2 - resolution: "@nx/nx-linux-x64-gnu@npm:20.8.2" +"@nx/nx-linux-x64-gnu@npm:21.6.5": + version: 21.6.5 + resolution: "@nx/nx-linux-x64-gnu@npm:21.6.5" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@nx/nx-linux-x64-musl@npm:20.8.2": - version: 20.8.2 - resolution: "@nx/nx-linux-x64-musl@npm:20.8.2" +"@nx/nx-linux-x64-musl@npm:21.6.5": + version: 21.6.5 + resolution: "@nx/nx-linux-x64-musl@npm:21.6.5" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@nx/nx-win32-arm64-msvc@npm:20.8.2": - version: 20.8.2 - resolution: "@nx/nx-win32-arm64-msvc@npm:20.8.2" +"@nx/nx-win32-arm64-msvc@npm:21.6.5": + version: 21.6.5 + resolution: "@nx/nx-win32-arm64-msvc@npm:21.6.5" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@nx/nx-win32-x64-msvc@npm:20.8.2": - version: 20.8.2 - resolution: "@nx/nx-win32-x64-msvc@npm:20.8.2" +"@nx/nx-win32-x64-msvc@npm:21.6.5": + version: 21.6.5 + resolution: "@nx/nx-win32-x64-msvc@npm:21.6.5" conditions: os=win32 & cpu=x64 languageName: node linkType: hard @@ -3577,61 +3854,119 @@ __metadata: languageName: node linkType: hard -"@sigstore/bundle@npm:^2.3.2": - version: 2.3.2 - resolution: "@sigstore/bundle@npm:2.3.2" +"@sigstore/bundle@npm:^3.1.0": + version: 3.1.0 + resolution: "@sigstore/bundle@npm:3.1.0" dependencies: - "@sigstore/protobuf-specs": "npm:^0.3.2" - checksum: 10/16c2dd624612171acf40c0daf6ca8f43332abfab3ea522e6fcff70df70207061f8a9faa43e10f8b5d0006ff1edebe5179101f4ba566ff6d271099158d3ae9503 + "@sigstore/protobuf-specs": "npm:^0.4.0" + checksum: 10/21b246ec63462e8508a8d001ca5d7937f63b6e15d5f2947ee2726d1e4674fb3f7640faa47b165bfea1d5b09df93fbdf10d1556427bba7e005e7f3a65b87f89b2 languageName: node linkType: hard -"@sigstore/core@npm:^1.0.0, @sigstore/core@npm:^1.1.0": - version: 1.1.0 - resolution: "@sigstore/core@npm:1.1.0" - checksum: 10/4149572091d61c246dd2ff636ff9a31441877db78cc3afe25fd0b28ece87f0094576f8b9077d1dc7c1c959ac4b000d407595becb6cd784c3664e9dd7cb6da36a +"@sigstore/bundle@npm:^4.0.0": + version: 4.0.0 + resolution: "@sigstore/bundle@npm:4.0.0" + dependencies: + "@sigstore/protobuf-specs": "npm:^0.5.0" + checksum: 10/09ef32284783cdcdcc7ecd16711f1d1be6b6fc6abe22bf7434071a6d3aa3512d15f68a4cc481513569a55a001c5bd112edfccbea7b3c16b5aa1557f73773f504 + languageName: node + linkType: hard + +"@sigstore/core@npm:^2.0.0": + version: 2.0.0 + resolution: "@sigstore/core@npm:2.0.0" + checksum: 10/ec1deae9430eeff580ad0f4ef2328b4eb7252db04587474fe9423d97736134ad79ee83aa2dfbc1fccfb18420c249e26e6e72e7176b592d7013eae5379dcb124d + languageName: node + linkType: hard + +"@sigstore/core@npm:^3.0.0": + version: 3.0.0 + resolution: "@sigstore/core@npm:3.0.0" + checksum: 10/b6dd1d0de2843d9fcad77f1052e2de795772f126b8dbcda887d36b5d6ea691f708dd64c13317ca98e1dd4987895098c4142c55a083f4e2cbcf1a1e75c95f650d + languageName: node + linkType: hard + +"@sigstore/protobuf-specs@npm:^0.4.0, @sigstore/protobuf-specs@npm:^0.4.1": + version: 0.4.3 + resolution: "@sigstore/protobuf-specs@npm:0.4.3" + checksum: 10/05bcb534b6096c095185c74b1718af89666299444490d84d35610f590bc4e2bf1a6a29c2c4f18598ddbd3a8a43c95f0a89faa98c05b44ff0be1dcd8b39f7e323 + languageName: node + linkType: hard + +"@sigstore/protobuf-specs@npm:^0.5.0": + version: 0.5.0 + resolution: "@sigstore/protobuf-specs@npm:0.5.0" + checksum: 10/98e84c5df1b5828e96a4c3cd39aca1ab069de53f0eaf4d0844ee50a19a15bff5707663e78eead7c27745fea3c55a37edfe5569242a1c695a146459159c104450 languageName: node linkType: hard -"@sigstore/protobuf-specs@npm:^0.3.2": - version: 0.3.3 - resolution: "@sigstore/protobuf-specs@npm:0.3.3" - checksum: 10/8de4a6f2fc5034b35e9d6e570fdb4dfa21d10cf544e68597276eba4991636a8fb0a399e2aba0ad68f86a3589e7ec8a28395e7e6bc08085237f81dec5640a310a +"@sigstore/sign@npm:^3.1.0": + version: 3.1.0 + resolution: "@sigstore/sign@npm:3.1.0" + dependencies: + "@sigstore/bundle": "npm:^3.1.0" + "@sigstore/core": "npm:^2.0.0" + "@sigstore/protobuf-specs": "npm:^0.4.0" + make-fetch-happen: "npm:^14.0.2" + proc-log: "npm:^5.0.0" + promise-retry: "npm:^2.0.1" + checksum: 10/e0ce0aa52b572eefa06a8260a7329f349c56217f2bbb6f167259c6e02e148987073e0dddc5e3c40ea4aafc89b8b0176e2617fb16f9c8c50cf0c1437b6c90fca4 languageName: node linkType: hard -"@sigstore/sign@npm:^2.3.2": - version: 2.3.2 - resolution: "@sigstore/sign@npm:2.3.2" +"@sigstore/sign@npm:^4.0.0": + version: 4.0.1 + resolution: "@sigstore/sign@npm:4.0.1" dependencies: - "@sigstore/bundle": "npm:^2.3.2" - "@sigstore/core": "npm:^1.0.0" - "@sigstore/protobuf-specs": "npm:^0.3.2" - make-fetch-happen: "npm:^13.0.1" - proc-log: "npm:^4.2.0" + "@sigstore/bundle": "npm:^4.0.0" + "@sigstore/core": "npm:^3.0.0" + "@sigstore/protobuf-specs": "npm:^0.5.0" + make-fetch-happen: "npm:^15.0.2" + proc-log: "npm:^5.0.0" promise-retry: "npm:^2.0.1" - checksum: 10/3b0198fb8f8c6fe1c7fd34e9be25484d4472cd93ec3709c68f4cf45a07a0a90ebceb2193e77dfe780bb0a3effa31152a7f9d01497010bde9d9ab4e85873e2843 + checksum: 10/41b2bcb8fb767a6b242e59659b3dc20bd43000637c594a469e9cece5201d24b3a697220b70829edfd527087e1ed7b8c41837031b65de345f7d4c7941d9ef7b35 languageName: node linkType: hard -"@sigstore/tuf@npm:^2.3.4": - version: 2.3.4 - resolution: "@sigstore/tuf@npm:2.3.4" +"@sigstore/tuf@npm:^3.1.0": + version: 3.1.1 + resolution: "@sigstore/tuf@npm:3.1.1" dependencies: - "@sigstore/protobuf-specs": "npm:^0.3.2" - tuf-js: "npm:^2.2.1" - checksum: 10/4ef978a0b29e1bdf4a8ac48580ff68bc7a3f10db7b301d033f212cc42b1ee58bf555ac77f67b21b44e8315de38640f23f24c7022fe46f66c236e0c0293d23b00 + "@sigstore/protobuf-specs": "npm:^0.4.1" + tuf-js: "npm:^3.0.1" + checksum: 10/f6eeba3fa72fa22b119af84b4a3d5ce2ad50c2e1600241f493ed4d8ec1d128a437d649c9e5cdf0135edf0db82468f8c7c25458ab97978aa5780ab7aece1ade48 languageName: node linkType: hard -"@sigstore/verify@npm:^1.2.1": - version: 1.2.1 - resolution: "@sigstore/verify@npm:1.2.1" +"@sigstore/tuf@npm:^4.0.0": + version: 4.0.0 + resolution: "@sigstore/tuf@npm:4.0.0" + dependencies: + "@sigstore/protobuf-specs": "npm:^0.5.0" + tuf-js: "npm:^4.0.0" + checksum: 10/8f47a0bc814a8ee1ef59bc90eb7954e0bb33734a913c77c04bdbf08fce2622d406feb0b243191154453a046224fcc512e916c1c919563fab902070b66837ad5e + languageName: node + linkType: hard + +"@sigstore/verify@npm:^2.1.0": + version: 2.1.1 + resolution: "@sigstore/verify@npm:2.1.1" + dependencies: + "@sigstore/bundle": "npm:^3.1.0" + "@sigstore/core": "npm:^2.0.0" + "@sigstore/protobuf-specs": "npm:^0.4.1" + checksum: 10/ff2aa8c441fd45b20a048b8746fa1d6096e3385a7098352b24703bca790d0555383d21f29b0ce8223c36dd98e14ed7dae82d044ff005c76e0e68c240f0a0458d + languageName: node + linkType: hard + +"@sigstore/verify@npm:^3.0.0": + version: 3.0.0 + resolution: "@sigstore/verify@npm:3.0.0" dependencies: - "@sigstore/bundle": "npm:^2.3.2" - "@sigstore/core": "npm:^1.1.0" - "@sigstore/protobuf-specs": "npm:^0.3.2" - checksum: 10/68a1bb341e93a86f738b4e55be8812034df398bdae1746b5f8c7e49d35c6a223ff634fa70b55152de5db992e8356cfaeae5779d6d805ecf4dd18caf167de8b95 + "@sigstore/bundle": "npm:^4.0.0" + "@sigstore/core": "npm:^3.0.0" + "@sigstore/protobuf-specs": "npm:^0.5.0" + checksum: 10/c5b4891f42586a4c68fb22f127f19dd16b0bda0388ae8a40727cedd2443919006df3ec1ac4d6c3bd2786cff4c3f8d987135e87979262790e718bcc53e8a3a6c1 languageName: node linkType: hard @@ -4112,13 +4447,23 @@ __metadata: languageName: node linkType: hard -"@tufjs/models@npm:2.0.1": - version: 2.0.1 - resolution: "@tufjs/models@npm:2.0.1" +"@tufjs/models@npm:3.0.1": + version: 3.0.1 + resolution: "@tufjs/models@npm:3.0.1" dependencies: "@tufjs/canonical-json": "npm:2.0.0" - minimatch: "npm:^9.0.4" - checksum: 10/7c5d2b8194195cecddc92ae37523c1375e7aaf2e554941c0f9b71db93bbef4f0af8190438dd321e8f9dfd4ce2a9b582e35a4c4c04bec87e25a289c9c8bedcd4e + minimatch: "npm:^9.0.5" + checksum: 10/00636238b2e3ce557e7b5f6884594ee2379fd5a9588401fd6c8be2e2867fcaf836e226c6be81d87006701746037847e13bbc263c0ed0f38b4f28b1108a4b1d81 + languageName: node + linkType: hard + +"@tufjs/models@npm:4.0.0": + version: 4.0.0 + resolution: "@tufjs/models@npm:4.0.0" + dependencies: + "@tufjs/canonical-json": "npm:2.0.0" + minimatch: "npm:^9.0.5" + checksum: 10/1b8d119b4144018d92237aa0dfcf4ac85ee609dd0062d15817736cfd0d0d594761e9179dd7b580894a6e7f67dd06d4421f16534756b66441c8838e8644e77632 languageName: node linkType: hard @@ -5458,13 +5803,6 @@ __metadata: languageName: node linkType: hard -"abbrev@npm:^2.0.0": - version: 2.0.0 - resolution: "abbrev@npm:2.0.0" - checksum: 10/ca0a54e35bea4ece0ecb68a47b312e1a9a6f772408d5bcb9051230aaa94b0460671c5b5c9cb3240eb5b7bc94c52476550eb221f65a0bbd0145bdc9f3113a6707 - languageName: node - linkType: hard - "abbrev@npm:^3.0.0": version: 3.0.1 resolution: "abbrev@npm:3.0.1" @@ -5714,7 +6052,7 @@ __metadata: languageName: node linkType: hard -"ansi-escapes@npm:^4.2.1, ansi-escapes@npm:^4.3.2": +"ansi-escapes@npm:^4.3.2": version: 4.3.2 resolution: "ansi-escapes@npm:4.3.2" dependencies: @@ -5769,7 +6107,7 @@ __metadata: languageName: node linkType: hard -"ansi-styles@npm:^5.0.0, ansi-styles@npm:^5.2.0": +"ansi-styles@npm:^5.2.0": version: 5.2.0 resolution: "ansi-styles@npm:5.2.0" checksum: 10/d7f4e97ce0623aea6bc0d90dcd28881ee04cba06c570b97fd3391bd7a268eedfd9d5e2dd4fdcbdd82b8105df5faf6f24aaedc08eaf3da898e702db5948f63469 @@ -6201,14 +6539,14 @@ __metadata: languageName: node linkType: hard -"axios@npm:^1.8.3": - version: 1.10.0 - resolution: "axios@npm:1.10.0" +"axios@npm:^1.12.0": + version: 1.12.2 + resolution: "axios@npm:1.12.2" dependencies: follow-redirects: "npm:^1.15.6" - form-data: "npm:^4.0.0" + form-data: "npm:^4.0.4" proxy-from-env: "npm:^1.1.0" - checksum: 10/d43c80316a45611fd395743e15d16ea69a95f2b7f7095f2bb12cb78f9ca0a905194a02e52a3bf4e0db9f85fd1186d6c690410644c10ecd8bb0a468e57c2040e4 + checksum: 10/886a79770594eaad76493fecf90344b567bd956240609b5dcd09bd0afe8d3e6f1ad6d3257a93a483b6192b409d4b673d9515a34619e3e3ed1b2c0ec2a83b20ba languageName: node linkType: hard @@ -7038,15 +7376,16 @@ __metadata: languageName: node linkType: hard -"bin-links@npm:^4.0.4": - version: 4.0.4 - resolution: "bin-links@npm:4.0.4" +"bin-links@npm:^5.0.0": + version: 5.0.0 + resolution: "bin-links@npm:5.0.0" dependencies: - cmd-shim: "npm:^6.0.0" - npm-normalize-package-bin: "npm:^3.0.0" - read-cmd-shim: "npm:^4.0.0" - write-file-atomic: "npm:^5.0.0" - checksum: 10/58d62143aacdbb783b076e9bdd970d8470f2750e1076d6fd1ae559fa532c4647478dd2550a911ba22d4c9e6339881451046e2fbc4b8958f4bf3bf8e5144d1e4d + cmd-shim: "npm:^7.0.0" + npm-normalize-package-bin: "npm:^4.0.0" + proc-log: "npm:^5.0.0" + read-cmd-shim: "npm:^5.0.0" + write-file-atomic: "npm:^6.0.0" + checksum: 10/9691c59e084d3243ddfa47435c03bb8f5a44d1fb971152b68009ca1a20267303189c7d6f5f51a4abdc93288574acbcd1698a452da6543960856b70a734b9dcef languageName: node linkType: hard @@ -7057,7 +7396,7 @@ __metadata: languageName: node linkType: hard -"bl@npm:^4.0.3, bl@npm:^4.1.0": +"bl@npm:^4.0.3": version: 4.1.0 resolution: "bl@npm:4.1.0" dependencies: @@ -7311,11 +7650,11 @@ __metadata: languageName: node linkType: hard -"cacache@npm:^18.0.0, cacache@npm:^18.0.3": - version: 18.0.4 - resolution: "cacache@npm:18.0.4" +"cacache@npm:^19.0.1": + version: 19.0.1 + resolution: "cacache@npm:19.0.1" dependencies: - "@npmcli/fs": "npm:^3.1.0" + "@npmcli/fs": "npm:^4.0.0" fs-minipass: "npm:^3.0.0" glob: "npm:^10.2.2" lru-cache: "npm:^10.0.1" @@ -7323,31 +7662,30 @@ __metadata: minipass-collect: "npm:^2.0.1" minipass-flush: "npm:^1.0.5" minipass-pipeline: "npm:^1.2.4" - p-map: "npm:^4.0.0" - ssri: "npm:^10.0.0" - tar: "npm:^6.1.11" - unique-filename: "npm:^3.0.0" - checksum: 10/ca2f7b2d3003f84d362da9580b5561058ccaecd46cba661cbcff0375c90734b610520d46b472a339fd032d91597ad6ed12dde8af81571197f3c9772b5d35b104 + p-map: "npm:^7.0.2" + ssri: "npm:^12.0.0" + tar: "npm:^7.4.3" + unique-filename: "npm:^4.0.0" + checksum: 10/ea026b27b13656330c2bbaa462a88181dcaa0435c1c2e705db89b31d9bdf7126049d6d0445ba746dca21454a0cfdf1d6f47fd39d34c8c8435296b30bc5738a13 languageName: node linkType: hard -"cacache@npm:^19.0.1": - version: 19.0.1 - resolution: "cacache@npm:19.0.1" +"cacache@npm:^20.0.0, cacache@npm:^20.0.1": + version: 20.0.1 + resolution: "cacache@npm:20.0.1" dependencies: "@npmcli/fs": "npm:^4.0.0" fs-minipass: "npm:^3.0.0" - glob: "npm:^10.2.2" - lru-cache: "npm:^10.0.1" + glob: "npm:^11.0.3" + lru-cache: "npm:^11.1.0" minipass: "npm:^7.0.3" minipass-collect: "npm:^2.0.1" minipass-flush: "npm:^1.0.5" minipass-pipeline: "npm:^1.2.4" p-map: "npm:^7.0.2" ssri: "npm:^12.0.0" - tar: "npm:^7.4.3" unique-filename: "npm:^4.0.0" - checksum: 10/ea026b27b13656330c2bbaa462a88181dcaa0435c1c2e705db89b31d9bdf7126049d6d0445ba746dca21454a0cfdf1d6f47fd39d34c8c8435296b30bc5738a13 + checksum: 10/b52a3ed18539608092f69db00cb0dba8c888876a6a9efebd3e275fec4d884df025372d018bc05560df9a4f36a08b880b9cbe03edaf52686789513228d0204bc9 languageName: node linkType: hard @@ -7484,7 +7822,7 @@ __metadata: languageName: node linkType: hard -"chalk@npm:4.1.2, chalk@npm:^4.0.0, chalk@npm:^4.0.2, chalk@npm:^4.1.0, chalk@npm:^4.1.1, chalk@npm:^4.1.2": +"chalk@npm:4.1.2, chalk@npm:^4.0.0, chalk@npm:^4.0.2, chalk@npm:^4.1.0, chalk@npm:^4.1.2": version: 4.1.2 resolution: "chalk@npm:4.1.2" dependencies: @@ -7524,10 +7862,10 @@ __metadata: languageName: node linkType: hard -"chardet@npm:^0.7.0": - version: 0.7.0 - resolution: "chardet@npm:0.7.0" - checksum: 10/b0ec668fba5eeec575ed2559a0917ba41a6481f49063c8445400e476754e0957ee09e44dc032310f526182b8f1bf25e9d4ed371f74050af7be1383e06bc44952 +"chardet@npm:^2.1.0": + version: 2.1.0 + resolution: "chardet@npm:2.1.0" + checksum: 10/8085fd8e5b1234fafacb279b4dab84dc127f512f953441daf09fc71ade70106af0dff28e86bfda00bab0de61fb475fa9003c87f82cbad3da02a4f299bfd427da languageName: node linkType: hard @@ -7708,10 +8046,10 @@ __metadata: languageName: node linkType: hard -"cli-width@npm:^3.0.0": - version: 3.0.0 - resolution: "cli-width@npm:3.0.0" - checksum: 10/8730848b04fb189666ab037a35888d191c8f05b630b1d770b0b0e4c920b47bb5cc14bddf6b8ffe5bfc66cee97c8211d4d18e756c1ffcc75d7dbe7e1186cd7826 +"cli-width@npm:^4.1.0": + version: 4.1.0 + resolution: "cli-width@npm:4.1.0" + checksum: 10/b58876fbf0310a8a35c79b72ecfcf579b354e18ad04e6b20588724ea2b522799a758507a37dfe132fafaf93a9922cafd9514d9e1598e6b2cd46694853aed099f languageName: node linkType: hard @@ -7737,7 +8075,7 @@ __metadata: languageName: node linkType: hard -"clone-deep@npm:4.0.1, clone-deep@npm:^4.0.1": +"clone-deep@npm:^4.0.1": version: 4.0.1 resolution: "clone-deep@npm:4.0.1" dependencies: @@ -7762,13 +8100,20 @@ __metadata: languageName: node linkType: hard -"cmd-shim@npm:6.0.3, cmd-shim@npm:^6.0.0": +"cmd-shim@npm:6.0.3": version: 6.0.3 resolution: "cmd-shim@npm:6.0.3" checksum: 10/791c9779cf57deae978ef24daf7e49e7fdb2070cc273aa7d691ed258a660ad3861edbc9f39daa2b6e5f72a64526b6812c04f08becc54402618b99946ccad7d71 languageName: node linkType: hard +"cmd-shim@npm:^7.0.0": + version: 7.0.0 + resolution: "cmd-shim@npm:7.0.0" + checksum: 10/2286f95099b4e748afacb4cd3218e2c4514ee7ced30bb321cfe0151ae1769bceeca8b925433d8e69b048b8038615c7c1c8165ea902814f8f3e13125499050e98 + languageName: node + linkType: hard + "co@npm:^4.6.0": version: 4.6.0 resolution: "co@npm:4.6.0" @@ -8857,13 +9202,6 @@ __metadata: languageName: node linkType: hard -"diff-sequences@npm:^29.6.3": - version: 29.6.3 - resolution: "diff-sequences@npm:29.6.3" - checksum: 10/179daf9d2f9af5c57ad66d97cb902a538bcf8ed64963fa7aa0c329b3de3665ce2eb6ffdc2f69f29d445fa4af2517e5e55e5b6e00c00a9ae4f43645f97f7078cb - languageName: node - linkType: hard - "discontinuous-range@npm:1.0.0": version: 1.0.0 resolution: "discontinuous-range@npm:1.0.0" @@ -8875,7 +9213,7 @@ __metadata: version: 0.0.0-use.local resolution: "dnn-platform@workspace:." dependencies: - lerna: "npm:^8.1.9" + lerna: "npm:^9.0.0" languageName: unknown linkType: soft @@ -10617,17 +10955,6 @@ __metadata: languageName: unknown linkType: soft -"external-editor@npm:^3.0.3": - version: 3.1.0 - resolution: "external-editor@npm:3.1.0" - dependencies: - chardet: "npm:^0.7.0" - iconv-lite: "npm:^0.4.24" - tmp: "npm:^0.0.33" - checksum: 10/776dff1d64a1d28f77ff93e9e75421a81c062983fd1544279d0a32f563c0b18c52abbb211f31262e2827e48edef5c9dc8f960d06dd2d42d1654443b88568056b - languageName: node - linkType: hard - "extract-text-webpack-plugin@npm:^3.0.2": version: 3.0.2 resolution: "extract-text-webpack-plugin@npm:3.0.2" @@ -10759,7 +11086,7 @@ __metadata: languageName: node linkType: hard -"figures@npm:3.2.0, figures@npm:^3.0.0": +"figures@npm:3.2.0": version: 3.2.0 resolution: "figures@npm:3.2.0" dependencies: @@ -11044,7 +11371,7 @@ __metadata: languageName: node linkType: hard -"form-data@npm:^4.0.0": +"form-data@npm:^4.0.4": version: 4.0.4 resolution: "form-data@npm:4.0.4" dependencies: @@ -11535,7 +11862,7 @@ __metadata: languageName: node linkType: hard -"graceful-fs@npm:4.2.11, graceful-fs@npm:^4.1.11, graceful-fs@npm:^4.1.15, graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.11, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9": +"graceful-fs@npm:^4.1.11, graceful-fs@npm:^4.1.15, graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.11, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9": version: 4.2.11 resolution: "graceful-fs@npm:4.2.11" checksum: 10/bf152d0ed1dc159239db1ba1f74fdbc40cb02f626770dcd5815c427ce0688c2635a06ed69af364396da4636d0408fcf7d4afdf7881724c3307e46aff30ca49e2 @@ -11718,12 +12045,21 @@ __metadata: languageName: node linkType: hard -"hosted-git-info@npm:^7.0.0, hosted-git-info@npm:^7.0.2": - version: 7.0.2 - resolution: "hosted-git-info@npm:7.0.2" +"hosted-git-info@npm:^8.0.0": + version: 8.1.0 + resolution: "hosted-git-info@npm:8.1.0" dependencies: lru-cache: "npm:^10.0.1" - checksum: 10/8f085df8a4a637d995f357f48b1e3f6fc1f9f92e82b33fb406415b5741834ed431a510a09141071001e8deea2eee43ce72786463e2aa5e5a70db8648c0eedeab + checksum: 10/872a1f3b5da6bff9d99410b96cf7ecb6415ef7d8c8842579cfb690144f40be4581cc4ea50d978829a5fc1ef0b1097151a722d14f905beaf3f09330e8ca40fa4c + languageName: node + linkType: hard + +"hosted-git-info@npm:^9.0.0": + version: 9.0.2 + resolution: "hosted-git-info@npm:9.0.2" + dependencies: + lru-cache: "npm:^11.1.0" + checksum: 10/0619c284ca7fc35322735e03fece90ed3ded67a2cf68e855e688d1bffd47078515d98ab8dff4bd08fb78d68d1a72ab8892180e15c7f23f24c922a6dfa601dbad languageName: node linkType: hard @@ -11996,7 +12332,7 @@ __metadata: languageName: node linkType: hard -"iconv-lite@npm:0.4.24, iconv-lite@npm:^0.4.24": +"iconv-lite@npm:0.4.24": version: 0.4.24 resolution: "iconv-lite@npm:0.4.24" dependencies: @@ -12014,6 +12350,15 @@ __metadata: languageName: node linkType: hard +"iconv-lite@npm:^0.7.0": + version: 0.7.0 + resolution: "iconv-lite@npm:0.7.0" + dependencies: + safer-buffer: "npm:>= 2.1.2 < 3.0.0" + checksum: 10/5bfc897fedfb7e29991ae5ef1c061ed4f864005f8c6d61ef34aba6a3885c04bd207b278c0642b041383aeac2d11645b4319d0ca7b863b0be4be0cde1c9238ca7 + languageName: node + linkType: hard + "icss-utils@npm:^5.0.0, icss-utils@npm:^5.1.0": version: 5.1.0 resolution: "icss-utils@npm:5.1.0" @@ -12037,12 +12382,12 @@ __metadata: languageName: node linkType: hard -"ignore-walk@npm:^6.0.4": - version: 6.0.5 - resolution: "ignore-walk@npm:6.0.5" +"ignore-walk@npm:^8.0.0": + version: 8.0.0 + resolution: "ignore-walk@npm:8.0.0" dependencies: - minimatch: "npm:^9.0.0" - checksum: 10/08757abff4dabca4f9f005f9a6cb6684e0c460a1e08c50319460ac13002de0ba8bbde6ad1f4477fefb264135d6253d1268339c18292f82485fcce576af0539d9 + minimatch: "npm:^10.0.3" + checksum: 10/694a66d481ca7073a85569d9751c0fcc4e4e0e08f69ba7e5bceed5ac3eef9bfa9184585327053be612022ea961033bfad1003d66058efdfb55bfab07dff23bba languageName: node linkType: hard @@ -12169,25 +12514,25 @@ __metadata: languageName: node linkType: hard -"ini@npm:^4.1.3": - version: 4.1.3 - resolution: "ini@npm:4.1.3" - checksum: 10/f536b414d1442e5b233429e2b56efcdb354109b2d65ddd489e5939d8f0f5ad23c88aa2b19c92987249d0dd63ba8192e9aeb1a02b0459549c5a9ff31acd729a5d +"ini@npm:^5.0.0": + version: 5.0.0 + resolution: "ini@npm:5.0.0" + checksum: 10/76e5567b46504b2b12650878ba6277204500a6ead3fe69eef419ee570456b364b39c040ee545846053f6d8a15797a82fc6d9efe06e392b9b6093935f4a2f2c30 languageName: node linkType: hard -"init-package-json@npm:6.0.3": - version: 6.0.3 - resolution: "init-package-json@npm:6.0.3" +"init-package-json@npm:8.2.2": + version: 8.2.2 + resolution: "init-package-json@npm:8.2.2" dependencies: - "@npmcli/package-json": "npm:^5.0.0" - npm-package-arg: "npm:^11.0.0" - promzard: "npm:^1.0.0" - read: "npm:^3.0.1" - semver: "npm:^7.3.5" + "@npmcli/package-json": "npm:^7.0.0" + npm-package-arg: "npm:^13.0.0" + promzard: "npm:^2.0.0" + read: "npm:^4.0.0" + semver: "npm:^7.7.2" validate-npm-package-license: "npm:^3.0.4" - validate-npm-package-name: "npm:^5.0.0" - checksum: 10/1274365e2c9e693395af07edc03692284b708fc101d7058cee956c02dca525f69c09748ac1c3de261f81ae42de301300bd62042b58943aa0088cb2c52e1e2e4f + validate-npm-package-name: "npm:^6.0.2" + checksum: 10/6e8c6aea9ef75900ba02173b371a7ba5a0211a269376853152b78edeb764d53bb65592387c059910c928dbb4723f7e5424c118a671ba90e44b71891975637821 languageName: node linkType: hard @@ -12198,26 +12543,23 @@ __metadata: languageName: node linkType: hard -"inquirer@npm:^8.2.4": - version: 8.2.6 - resolution: "inquirer@npm:8.2.6" +"inquirer@npm:12.9.6": + version: 12.9.6 + resolution: "inquirer@npm:12.9.6" dependencies: - ansi-escapes: "npm:^4.2.1" - chalk: "npm:^4.1.1" - cli-cursor: "npm:^3.1.0" - cli-width: "npm:^3.0.0" - external-editor: "npm:^3.0.3" - figures: "npm:^3.0.0" - lodash: "npm:^4.17.21" - mute-stream: "npm:0.0.8" - ora: "npm:^5.4.1" - run-async: "npm:^2.4.0" - rxjs: "npm:^7.5.5" - string-width: "npm:^4.1.0" - strip-ansi: "npm:^6.0.0" - through: "npm:^2.3.6" - wrap-ansi: "npm:^6.0.1" - checksum: 10/f642b9e5a94faaba54f277bdda2af0e0a6b592bd7f88c60e1614b5795b19336c7025e0c2923915d5f494f600a02fe8517413779a794415bb79a9563b061d68ab + "@inquirer/ansi": "npm:^1.0.0" + "@inquirer/core": "npm:^10.2.2" + "@inquirer/prompts": "npm:^7.8.6" + "@inquirer/type": "npm:^3.0.8" + mute-stream: "npm:^2.0.0" + run-async: "npm:^4.0.5" + rxjs: "npm:^7.8.2" + peerDependencies: + "@types/node": ">=18" + peerDependenciesMeta: + "@types/node": + optional: true + checksum: 10/bcac231b3eba055aa16dbdb60ba6d7bfe66109be654bfb19f92095f703af07fc01528f716e86ec62f7bf7bd17b4e21ad4bb32b677cf42075dee04568afe9686b languageName: node linkType: hard @@ -12501,13 +12843,6 @@ __metadata: languageName: node linkType: hard -"is-lambda@npm:^1.0.1": - version: 1.0.1 - resolution: "is-lambda@npm:1.0.1" - checksum: 10/93a32f01940220532e5948538699ad610d5924ac86093fcee83022252b363eb0cc99ba53ab084a04e4fb62bf7b5731f55496257a4c38adf87af9c4d352c71c35 - languageName: node - linkType: hard - "is-map@npm:^2.0.3": version: 2.0.3 resolution: "is-map@npm:2.0.3" @@ -13014,7 +13349,7 @@ __metadata: languageName: node linkType: hard -"jest-diff@npm:30.2.0": +"jest-diff@npm:30.2.0, jest-diff@npm:>=30.0.0 < 31, jest-diff@npm:^30.0.2": version: 30.2.0 resolution: "jest-diff@npm:30.2.0" dependencies: @@ -13026,18 +13361,6 @@ __metadata: languageName: node linkType: hard -"jest-diff@npm:>=29.4.3 < 30, jest-diff@npm:^29.4.1": - version: 29.7.0 - resolution: "jest-diff@npm:29.7.0" - dependencies: - chalk: "npm:^4.0.0" - diff-sequences: "npm:^29.6.3" - jest-get-type: "npm:^29.6.3" - pretty-format: "npm:^29.7.0" - checksum: 10/6f3a7eb9cd9de5ea9e5aa94aed535631fa6f80221832952839b3cb59dd419b91c20b73887deb0b62230d06d02d6b6cf34ebb810b88d904bb4fe1e2e4f0905c98 - languageName: node - linkType: hard - "jest-docblock@npm:30.2.0": version: 30.2.0 resolution: "jest-docblock@npm:30.2.0" @@ -13075,13 +13398,6 @@ __metadata: languageName: node linkType: hard -"jest-get-type@npm:^29.6.3": - version: 29.6.3 - resolution: "jest-get-type@npm:29.6.3" - checksum: 10/88ac9102d4679d768accae29f1e75f592b760b44277df288ad76ce5bf038c3f5ce3719dea8aa0f035dac30e9eb034b848ce716b9183ad7cc222d029f03e92205 - languageName: node - linkType: hard - "jest-haste-map@npm:30.2.0": version: 30.2.0 resolution: "jest-haste-map@npm:30.2.0" @@ -13551,10 +13867,10 @@ __metadata: languageName: node linkType: hard -"json-parse-even-better-errors@npm:^3.0.0, json-parse-even-better-errors@npm:^3.0.2": - version: 3.0.2 - resolution: "json-parse-even-better-errors@npm:3.0.2" - checksum: 10/6f04ea6c9ccb783630a59297959247e921cc90b917b8351197ca7fd058fccc7079268fd9362be21ba876fc26aa5039369dd0a2280aae49aae425784794a94927 +"json-parse-even-better-errors@npm:^4.0.0": + version: 4.0.0 + resolution: "json-parse-even-better-errors@npm:4.0.0" + checksum: 10/da1ae7ef0cc9db02972a06a71322f26bdcda5d7f648c23b28ce7f158ba35707461bcbd91945d8aace10d8d79c383b896725c65ffa410242352692328aa9b5edf languageName: node linkType: hard @@ -13736,21 +14052,20 @@ __metadata: languageName: node linkType: hard -"lerna@npm:^8.1.9": - version: 8.2.3 - resolution: "lerna@npm:8.2.3" +"lerna@npm:^9.0.0": + version: 9.0.0 + resolution: "lerna@npm:9.0.0" dependencies: - "@lerna/create": "npm:8.2.3" - "@npmcli/arborist": "npm:7.5.4" - "@npmcli/package-json": "npm:5.2.0" - "@npmcli/run-script": "npm:8.1.0" - "@nx/devkit": "npm:>=17.1.2 < 21" + "@lerna/create": "npm:9.0.0" + "@npmcli/arborist": "npm:9.1.4" + "@npmcli/package-json": "npm:7.0.0" + "@npmcli/run-script": "npm:10.0.0" + "@nx/devkit": "npm:>=21.5.2 < 22.0.0" "@octokit/plugin-enterprise-rest": "npm:6.0.1" "@octokit/rest": "npm:20.1.2" aproba: "npm:2.0.0" byte-size: "npm:8.1.1" chalk: "npm:4.1.0" - clone-deep: "npm:4.0.1" cmd-shim: "npm:6.0.3" color-support: "npm:1.1.3" columnify: "npm:1.6.0" @@ -13767,44 +14082,42 @@ __metadata: get-stream: "npm:6.0.0" git-url-parse: "npm:14.0.0" glob-parent: "npm:6.0.2" - graceful-fs: "npm:4.2.11" has-unicode: "npm:2.0.1" import-local: "npm:3.1.0" ini: "npm:^1.3.8" - init-package-json: "npm:6.0.3" - inquirer: "npm:^8.2.4" + init-package-json: "npm:8.2.2" + inquirer: "npm:12.9.6" is-ci: "npm:3.0.1" is-stream: "npm:2.0.0" - jest-diff: "npm:>=29.4.3 < 30" + jest-diff: "npm:>=30.0.0 < 31" js-yaml: "npm:4.1.0" - libnpmaccess: "npm:8.0.6" - libnpmpublish: "npm:9.0.9" + libnpmaccess: "npm:10.0.1" + libnpmpublish: "npm:11.1.0" load-json-file: "npm:6.2.0" - lodash: "npm:^4.17.21" make-dir: "npm:4.0.0" + make-fetch-happen: "npm:15.0.2" minimatch: "npm:3.0.5" multimatch: "npm:5.0.0" - node-fetch: "npm:2.6.7" - npm-package-arg: "npm:11.0.2" - npm-packlist: "npm:8.0.2" - npm-registry-fetch: "npm:^17.1.0" - nx: "npm:>=17.1.2 < 21" + npm-package-arg: "npm:13.0.0" + npm-packlist: "npm:10.0.1" + npm-registry-fetch: "npm:19.0.0" + nx: "npm:>=21.5.3 < 22.0.0" p-map: "npm:4.0.0" p-map-series: "npm:2.1.0" p-pipe: "npm:3.1.0" p-queue: "npm:6.6.2" p-reduce: "npm:2.1.0" p-waterfall: "npm:2.1.1" - pacote: "npm:^18.0.6" + pacote: "npm:21.0.1" pify: "npm:5.0.0" read-cmd-shim: "npm:4.0.0" resolve-from: "npm:5.0.0" rimraf: "npm:^4.4.1" - semver: "npm:^7.3.8" + semver: "npm:7.7.2" set-blocking: "npm:^2.0.0" signal-exit: "npm:3.0.7" slash: "npm:3.0.0" - ssri: "npm:^10.0.6" + ssri: "npm:12.0.0" string-width: "npm:^4.2.3" tar: "npm:6.2.1" temp-dir: "npm:1.0.0" @@ -13812,9 +14125,9 @@ __metadata: tinyglobby: "npm:0.2.12" typescript: "npm:>=3 < 6" upath: "npm:2.0.1" - uuid: "npm:^10.0.0" + uuid: "npm:^11.1.0" validate-npm-package-license: "npm:3.0.4" - validate-npm-package-name: "npm:5.0.1" + validate-npm-package-name: "npm:6.0.2" wide-align: "npm:1.1.5" write-file-atomic: "npm:5.0.1" write-pkg: "npm:4.0.0" @@ -13822,7 +14135,7 @@ __metadata: yargs-parser: "npm:21.1.1" bin: lerna: dist/cli.js - checksum: 10/3ef9e5c6e2ee20cad0c750817cf628dffa0056f9b87ee4956f641833ac3b06a8fdf50d4cd6ba63a818427c7e6c1482568c9e184f0535fd23239ed55e5eae57a7 + checksum: 10/cdd14cc04baf6cc1573628e96346f3b27aa6febdcba57f92a23b0c47daa758345592ac433ee790e6e66ccaa91999c6b8128509ad349204fdace9431209930b57 languageName: node linkType: hard @@ -13894,29 +14207,29 @@ __metadata: languageName: node linkType: hard -"libnpmaccess@npm:8.0.6": - version: 8.0.6 - resolution: "libnpmaccess@npm:8.0.6" +"libnpmaccess@npm:10.0.1": + version: 10.0.1 + resolution: "libnpmaccess@npm:10.0.1" dependencies: - npm-package-arg: "npm:^11.0.2" - npm-registry-fetch: "npm:^17.0.1" - checksum: 10/62fa6a476321268ebd379f35782d9ead8993964bd9dfc8afbd201921d9037b7bc9d956f8b2717f1247e44ab33cb7de45b556ded66144f4b3038a828299cb260d + npm-package-arg: "npm:^12.0.0" + npm-registry-fetch: "npm:^18.0.1" + checksum: 10/c8f7e30f7a6d33a63c4989087c2fb2d135b271c293f6e0963cd92dc45cc5b8a1ca488c1d8828b8d1d66ea25c20ebd1b56d1b92e69eacb00845960b9acbf1b134 languageName: node linkType: hard -"libnpmpublish@npm:9.0.9": - version: 9.0.9 - resolution: "libnpmpublish@npm:9.0.9" +"libnpmpublish@npm:11.1.0": + version: 11.1.0 + resolution: "libnpmpublish@npm:11.1.0" dependencies: + "@npmcli/package-json": "npm:^6.2.0" ci-info: "npm:^4.0.0" - normalize-package-data: "npm:^6.0.1" - npm-package-arg: "npm:^11.0.2" - npm-registry-fetch: "npm:^17.0.1" - proc-log: "npm:^4.2.0" + npm-package-arg: "npm:^12.0.0" + npm-registry-fetch: "npm:^18.0.1" + proc-log: "npm:^5.0.0" semver: "npm:^7.3.7" - sigstore: "npm:^2.2.0" - ssri: "npm:^10.0.6" - checksum: 10/ea1064a727938abefe345d5af1261db8bdc1e71aedabf6945187c2b3a6ef1a4c9db69747ad3ffd4ecd61ea16866890e0da1a4defcbed64e555e7dcae49e55a98 + sigstore: "npm:^3.0.0" + ssri: "npm:^12.0.0" + checksum: 10/dc5b84e21e9c94d64a898a92efb09a67004c86db528874776833d2b773f1e14e0f28e9553fc2bad3cdcceb1aba80b124ad549758464322fbdacab8e75a982e8a languageName: node linkType: hard @@ -14220,7 +14533,7 @@ __metadata: languageName: node linkType: hard -"log-symbols@npm:^4.0.0, log-symbols@npm:^4.1.0": +"log-symbols@npm:^4.0.0": version: 4.1.0 resolution: "log-symbols@npm:4.1.0" dependencies: @@ -14278,7 +14591,7 @@ __metadata: languageName: node linkType: hard -"lru-cache@npm:^11.0.0": +"lru-cache@npm:^11.0.0, lru-cache@npm:^11.1.0, lru-cache@npm:^11.2.1": version: 11.2.2 resolution: "lru-cache@npm:11.2.2" checksum: 10/fa7919fbf068a739f79a1ad461eb273514da7246cebb9dca68e3cd7ba19e3839e7e2aaecd9b72867e08038561eeb96941189e89b3d4091c75ced4f56c71c80db @@ -14349,27 +14662,26 @@ __metadata: languageName: node linkType: hard -"make-fetch-happen@npm:^13.0.0, make-fetch-happen@npm:^13.0.1": - version: 13.0.1 - resolution: "make-fetch-happen@npm:13.0.1" +"make-fetch-happen@npm:15.0.2, make-fetch-happen@npm:^15.0.0, make-fetch-happen@npm:^15.0.2": + version: 15.0.2 + resolution: "make-fetch-happen@npm:15.0.2" dependencies: - "@npmcli/agent": "npm:^2.0.0" - cacache: "npm:^18.0.0" + "@npmcli/agent": "npm:^4.0.0" + cacache: "npm:^20.0.1" http-cache-semantics: "npm:^4.1.1" - is-lambda: "npm:^1.0.1" minipass: "npm:^7.0.2" - minipass-fetch: "npm:^3.0.0" + minipass-fetch: "npm:^4.0.0" minipass-flush: "npm:^1.0.5" minipass-pipeline: "npm:^1.2.4" - negotiator: "npm:^0.6.3" - proc-log: "npm:^4.2.0" + negotiator: "npm:^1.0.0" + proc-log: "npm:^5.0.0" promise-retry: "npm:^2.0.1" - ssri: "npm:^10.0.0" - checksum: 10/11bae5ad6ac59b654dbd854f30782f9de052186c429dfce308eda42374528185a100ee40ac9ffdc36a2b6c821ecaba43913e4730a12f06f15e895ea9cb23fa59 + ssri: "npm:^12.0.0" + checksum: 10/66097eae91615d1ac817127b9a20b9a17a1cb18c6b52ad24ffa03f45f3a9300af03f3368c52bbe88060ba9bf73c4ec1e0f2a209d1598bb906cdb34f75d3600b4 languageName: node linkType: hard -"make-fetch-happen@npm:^14.0.3": +"make-fetch-happen@npm:^14.0.0, make-fetch-happen@npm:^14.0.2, make-fetch-happen@npm:^14.0.3": version: 14.0.3 resolution: "make-fetch-happen@npm:14.0.3" dependencies: @@ -14676,7 +14988,7 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:^9.0.0, minimatch@npm:^9.0.4": +"minimatch@npm:^9.0.0, minimatch@npm:^9.0.4, minimatch@npm:^9.0.5": version: 9.0.5 resolution: "minimatch@npm:9.0.5" dependencies: @@ -14705,25 +15017,10 @@ __metadata: "minipass-collect@npm:^2.0.1": version: 2.0.1 - resolution: "minipass-collect@npm:2.0.1" - dependencies: - minipass: "npm:^7.0.3" - checksum: 10/b251bceea62090f67a6cced7a446a36f4cd61ee2d5cea9aee7fff79ba8030e416327a1c5aa2908dc22629d06214b46d88fdab8c51ac76bacbf5703851b5ad342 - languageName: node - linkType: hard - -"minipass-fetch@npm:^3.0.0": - version: 3.0.5 - resolution: "minipass-fetch@npm:3.0.5" + resolution: "minipass-collect@npm:2.0.1" dependencies: - encoding: "npm:^0.1.13" minipass: "npm:^7.0.3" - minipass-sized: "npm:^1.0.3" - minizlib: "npm:^2.1.2" - dependenciesMeta: - encoding: - optional: true - checksum: 10/c669948bec1373313aaa8f104b962a3ced9f45c49b26366a4b0ae27ccdfa9c5740d72c8a84d3f8623d7a61c5fc7afdfda44789008c078f61a62441142efc4a97 + checksum: 10/b251bceea62090f67a6cced7a446a36f4cd61ee2d5cea9aee7fff79ba8030e416327a1c5aa2908dc22629d06214b46d88fdab8c51ac76bacbf5703851b5ad342 languageName: node linkType: hard @@ -14799,7 +15096,7 @@ __metadata: languageName: node linkType: hard -"minizlib@npm:^2.1.1, minizlib@npm:^2.1.2": +"minizlib@npm:^2.1.1": version: 2.1.2 resolution: "minizlib@npm:2.1.2" dependencies: @@ -14953,17 +15250,10 @@ __metadata: languageName: node linkType: hard -"mute-stream@npm:0.0.8": - version: 0.0.8 - resolution: "mute-stream@npm:0.0.8" - checksum: 10/a2d2e79dde87e3424ffc8c334472c7f3d17b072137734ca46e6f221131f1b014201cc593b69a38062e974fb2394d3d1cb4349f80f012bbf8b8ac1b28033e515f - languageName: node - linkType: hard - -"mute-stream@npm:^1.0.0": - version: 1.0.0 - resolution: "mute-stream@npm:1.0.0" - checksum: 10/36fc968b0e9c9c63029d4f9dc63911950a3bdf55c9a87f58d3a266289b67180201cade911e7699f8b2fa596b34c9db43dad37649e3f7fdd13c3bb9edb0017ee7 +"mute-stream@npm:^2.0.0": + version: 2.0.0 + resolution: "mute-stream@npm:2.0.0" + checksum: 10/d2e4fd2f5aa342b89b98134a8d899d8ef9b0a6d69274c4af9df46faa2d97aeb1f2ce83d867880d6de63643c52386579b99139801e24e7526c3b9b0a6d1e18d6c languageName: node linkType: hard @@ -15037,13 +15327,6 @@ __metadata: languageName: node linkType: hard -"negotiator@npm:^0.6.3, negotiator@npm:~0.6.4": - version: 0.6.4 - resolution: "negotiator@npm:0.6.4" - checksum: 10/d98c04a136583afd055746168f1067d58ce4bfe6e4c73ca1d339567f81ea1f7e665b5bd1e81f4771c67b6c2ea89b21cb2adaea2b16058c7dc31317778f931dab - languageName: node - linkType: hard - "negotiator@npm:^1.0.0": version: 1.0.0 resolution: "negotiator@npm:1.0.0" @@ -15051,6 +15334,13 @@ __metadata: languageName: node linkType: hard +"negotiator@npm:~0.6.4": + version: 0.6.4 + resolution: "negotiator@npm:0.6.4" + checksum: 10/d98c04a136583afd055746168f1067d58ce4bfe6e4c73ca1d339567f81ea1f7e665b5bd1e81f4771c67b6c2ea89b21cb2adaea2b16058c7dc31317778f931dab + languageName: node + linkType: hard + "neo-async@npm:^2.6.2": version: 2.6.2 resolution: "neo-async@npm:2.6.2" @@ -15096,20 +15386,6 @@ __metadata: languageName: node linkType: hard -"node-fetch@npm:2.6.7": - version: 2.6.7 - resolution: "node-fetch@npm:2.6.7" - dependencies: - whatwg-url: "npm:^5.0.0" - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true - checksum: 10/4bc9245383db92c35601a798c9a992fdf38d99920ceac11e0e6512ef3014d188b3807ccb060bc6c4bdb57a145030c73f5b5fd6730f665979f9264bc43ca3afea - languageName: node - linkType: hard - "node-forge@npm:^1": version: 1.3.1 resolution: "node-forge@npm:1.3.1" @@ -15117,23 +15393,23 @@ __metadata: languageName: node linkType: hard -"node-gyp@npm:^10.0.0": - version: 10.3.1 - resolution: "node-gyp@npm:10.3.1" +"node-gyp@npm:^11.0.0": + version: 11.5.0 + resolution: "node-gyp@npm:11.5.0" dependencies: env-paths: "npm:^2.2.0" exponential-backoff: "npm:^3.1.1" - glob: "npm:^10.3.10" graceful-fs: "npm:^4.2.6" - make-fetch-happen: "npm:^13.0.0" - nopt: "npm:^7.0.0" - proc-log: "npm:^4.1.0" + make-fetch-happen: "npm:^14.0.3" + nopt: "npm:^8.0.0" + proc-log: "npm:^5.0.0" semver: "npm:^7.3.5" - tar: "npm:^6.2.1" - which: "npm:^4.0.0" + tar: "npm:^7.4.3" + tinyglobby: "npm:^0.2.12" + which: "npm:^5.0.0" bin: node-gyp: bin/node-gyp.js - checksum: 10/d3004f648559e42d7ec8791ea75747fe8a163a6061c202e311e5d7a5f6266baa9a5f5c6fde7be563974c88b030c5d0855fd945364f52fcd230d2a2ceee7be80d + checksum: 10/15a600b626116e1e528c49f73027c5ff84dbf6986df77b0fb61d6eb079ab4230c39f245295cb67f0590e6541a848cbd267e00c5769e8fb8bf88a5cca3701b551 languageName: node linkType: hard @@ -15178,17 +15454,6 @@ __metadata: languageName: node linkType: hard -"nopt@npm:^7.0.0, nopt@npm:^7.2.1": - version: 7.2.1 - resolution: "nopt@npm:7.2.1" - dependencies: - abbrev: "npm:^2.0.0" - bin: - nopt: bin/nopt.js - checksum: 10/95a1f6dec8a81cd18cdc2fed93e6f0b4e02cf6bdb4501c848752c6e34f9883d9942f036a5e3b21a699047d8a448562d891e67492df68ec9c373e6198133337ae - languageName: node - linkType: hard - "nopt@npm:^8.0.0": version: 8.1.0 resolution: "nopt@npm:8.1.0" @@ -15224,17 +15489,6 @@ __metadata: languageName: node linkType: hard -"normalize-package-data@npm:^6.0.0, normalize-package-data@npm:^6.0.1": - version: 6.0.2 - resolution: "normalize-package-data@npm:6.0.2" - dependencies: - hosted-git-info: "npm:^7.0.0" - semver: "npm:^7.3.5" - validate-npm-package-license: "npm:^3.0.4" - checksum: 10/7c4216a2426aa76c0197f8372f06b23a0484d62b3518fb5c0f6ebccb16376bdfab29ceba96f95c75f60506473198f1337fe337b945c8df0541fe32b8049ab4c9 - languageName: node - linkType: hard - "normalize-path@npm:^3.0.0, normalize-path@npm:~3.0.0": version: 3.0.0 resolution: "normalize-path@npm:3.0.0" @@ -15256,89 +15510,139 @@ __metadata: languageName: node linkType: hard -"npm-bundled@npm:^3.0.0": - version: 3.0.1 - resolution: "npm-bundled@npm:3.0.1" +"npm-bundled@npm:^4.0.0": + version: 4.0.0 + resolution: "npm-bundled@npm:4.0.0" dependencies: - npm-normalize-package-bin: "npm:^3.0.0" - checksum: 10/113c9a35526d9a563694e9bda401dbda592f664fa146d365028bef1e3bfdc2a7b60ac9315a727529ef7e8e8d80b8d9e217742ccc2808e0db99c2204a3e33a465 + npm-normalize-package-bin: "npm:^4.0.0" + checksum: 10/aae98992772af7528a2e10c8edb6996dcb2070759aba1fd96c3f0cdba9c666fa6ba45c319376babffa9e11b1dca14960de35ce98750021184cc3ca0a4d5f1af6 languageName: node linkType: hard -"npm-install-checks@npm:^6.0.0, npm-install-checks@npm:^6.2.0": - version: 6.3.0 - resolution: "npm-install-checks@npm:6.3.0" +"npm-install-checks@npm:^7.1.0": + version: 7.1.2 + resolution: "npm-install-checks@npm:7.1.2" dependencies: semver: "npm:^7.1.1" - checksum: 10/6c20dadb878a0d2f1f777405217b6b63af1299d0b43e556af9363ee6eefaa98a17dfb7b612a473a473e96faf7e789c58b221e0d8ffdc1d34903c4f71618df3b4 + checksum: 10/f8990588ba3654beb720a105f1749f0ad36313cf25d5090fd9a2f013f17aa3d23b05b48c5d0ecd804445c79aded65394fdd79c726acf22806b0414d244469c27 languageName: node linkType: hard -"npm-normalize-package-bin@npm:^3.0.0": - version: 3.0.1 - resolution: "npm-normalize-package-bin@npm:3.0.1" - checksum: 10/de416d720ab22137a36292ff8a333af499ea0933ef2320a8c6f56a73b0f0448227fec4db5c890d702e26d21d04f271415eab6580b5546456861cc0c19498a4bf +"npm-normalize-package-bin@npm:^4.0.0": + version: 4.0.0 + resolution: "npm-normalize-package-bin@npm:4.0.0" + checksum: 10/e1a0971e5640bc116c5197f9707d86dc404b6d8e13da2c7ea82baa5583b8da279a3c8607234aa1d733c2baac3b3eba87b156f021f20ae183dc4806530e61675d languageName: node linkType: hard -"npm-package-arg@npm:11.0.2": - version: 11.0.2 - resolution: "npm-package-arg@npm:11.0.2" +"npm-package-arg@npm:13.0.0": + version: 13.0.0 + resolution: "npm-package-arg@npm:13.0.0" dependencies: - hosted-git-info: "npm:^7.0.0" - proc-log: "npm:^4.0.0" + hosted-git-info: "npm:^9.0.0" + proc-log: "npm:^5.0.0" semver: "npm:^7.3.5" - validate-npm-package-name: "npm:^5.0.0" - checksum: 10/ce4c51900a73aadb408c9830c38a61b1930e1ab08509ec5ebbcf625ad14326ee33b014df289c942039bd28071ab17e813368f68d26a4ccad0eb6e9928f8ad03c + validate-npm-package-name: "npm:^6.0.0" + checksum: 10/b9efce15357447bf908cda220ffdae19c6d120676fa17a155c6eb8940a06d45b40926995c4d65503eaacee7c7ade74984cc41c84e89f7db5daf1835af6e84441 languageName: node linkType: hard -"npm-package-arg@npm:^11.0.0, npm-package-arg@npm:^11.0.2": - version: 11.0.3 - resolution: "npm-package-arg@npm:11.0.3" +"npm-package-arg@npm:^12.0.0": + version: 12.0.2 + resolution: "npm-package-arg@npm:12.0.2" dependencies: - hosted-git-info: "npm:^7.0.0" - proc-log: "npm:^4.0.0" + hosted-git-info: "npm:^8.0.0" + proc-log: "npm:^5.0.0" semver: "npm:^7.3.5" - validate-npm-package-name: "npm:^5.0.0" - checksum: 10/bacc863907edf98940286edc2fd80327901c1e8b34426d538cdc708ed66bc6567f06d742d838eaf35db6804347bb4ba56ca9cef032c4b52743b33e7a22a2678e + validate-npm-package-name: "npm:^6.0.0" + checksum: 10/f61dacb42c02dfa00f97d9fbd7f3696b8fe651cf7dd0d8f4e7766b5835290d0967c20ec148b31b10d7f2931108c507813d9d2624b279769b1b2e4a356914d561 languageName: node linkType: hard -"npm-packlist@npm:8.0.2, npm-packlist@npm:^8.0.0": - version: 8.0.2 - resolution: "npm-packlist@npm:8.0.2" +"npm-package-arg@npm:^13.0.0": + version: 13.0.1 + resolution: "npm-package-arg@npm:13.0.1" dependencies: - ignore-walk: "npm:^6.0.4" - checksum: 10/707206e5c09a1b8aa04e590592715ba5ab8732add1bbb5eeaff54b9c6b2740764c9e94c99e390c13245970b51c2cc92b8d44594c2784fcd96f255c7109622322 + hosted-git-info: "npm:^9.0.0" + proc-log: "npm:^5.0.0" + semver: "npm:^7.3.5" + validate-npm-package-name: "npm:^6.0.0" + checksum: 10/2b8375230b3571709537413c6ef58e56b0923c0ebb375d42caa844aaf6fb77ec173edfb752d64dd57193afb470a5867319d8ed330ca5198c9fd1e1e04590a779 languageName: node linkType: hard -"npm-pick-manifest@npm:^9.0.0, npm-pick-manifest@npm:^9.0.1": - version: 9.1.0 - resolution: "npm-pick-manifest@npm:9.1.0" +"npm-packlist@npm:10.0.1": + version: 10.0.1 + resolution: "npm-packlist@npm:10.0.1" + dependencies: + ignore-walk: "npm:^8.0.0" + checksum: 10/89f3fbc5d0ba8b3192bdc0ff2b112f7cf1d9d7a3b9dcaf46846056463fc26f70c955505e17e44719a7311c7270057d825689d155d1b8e18755e3329373693113 + languageName: node + linkType: hard + +"npm-packlist@npm:^10.0.1": + version: 10.0.2 + resolution: "npm-packlist@npm:10.0.2" + dependencies: + ignore-walk: "npm:^8.0.0" + proc-log: "npm:^5.0.0" + checksum: 10/ff5a819ccfa6139eab2d1cee732cecec9b2eade0a82134ee89648b2a2ac0815c56fbd6117f2048d46ed48dcee83ec1f709ee9acbffdef1da48be99a681253b79 + languageName: node + linkType: hard + +"npm-pick-manifest@npm:^10.0.0": + version: 10.0.0 + resolution: "npm-pick-manifest@npm:10.0.0" + dependencies: + npm-install-checks: "npm:^7.1.0" + npm-normalize-package-bin: "npm:^4.0.0" + npm-package-arg: "npm:^12.0.0" + semver: "npm:^7.3.5" + checksum: 10/12439bb85d7399874b4f099c98966a875e46537c43ac7b9072804c46b7af8441e734068fff1ba23465832d08989d5f0ceeaa060c9a77761653decc2487460e09 + languageName: node + linkType: hard + +"npm-pick-manifest@npm:^11.0.1": + version: 11.0.1 + resolution: "npm-pick-manifest@npm:11.0.1" dependencies: - npm-install-checks: "npm:^6.0.0" - npm-normalize-package-bin: "npm:^3.0.0" - npm-package-arg: "npm:^11.0.0" + npm-install-checks: "npm:^7.1.0" + npm-normalize-package-bin: "npm:^4.0.0" + npm-package-arg: "npm:^13.0.0" semver: "npm:^7.3.5" - checksum: 10/e759e4fe4076da9169cf522964a80bbc096d50cd24c8c44b50b44706c4479bd9d9d018fbdb76c6ea0c6037e012e07c6c917a1ecaa7ae1a1169cddfae1c0f24b6 + checksum: 10/194fa3d11a044963f59a77c773bcc3b6b3c68f344ca0ee499adf31582cc7e9c684012eaa88eee2a47fddb816b101fd120b743fc290091665864dc5811cc31286 + languageName: node + linkType: hard + +"npm-registry-fetch@npm:19.0.0, npm-registry-fetch@npm:^19.0.0": + version: 19.0.0 + resolution: "npm-registry-fetch@npm:19.0.0" + dependencies: + "@npmcli/redact": "npm:^3.0.0" + jsonparse: "npm:^1.3.1" + make-fetch-happen: "npm:^15.0.0" + minipass: "npm:^7.0.2" + minipass-fetch: "npm:^4.0.0" + minizlib: "npm:^3.0.1" + npm-package-arg: "npm:^13.0.0" + proc-log: "npm:^5.0.0" + checksum: 10/02cbad3ca3bb7d81baee97cbd42c7f6df30986f172dd1c7982b4188d5f0fa587a795a017b33051df0fb0c5109f59d89aa3b4779be5187a818b17b1f6804a79a1 languageName: node linkType: hard -"npm-registry-fetch@npm:^17.0.0, npm-registry-fetch@npm:^17.0.1, npm-registry-fetch@npm:^17.1.0": - version: 17.1.0 - resolution: "npm-registry-fetch@npm:17.1.0" +"npm-registry-fetch@npm:^18.0.1": + version: 18.0.2 + resolution: "npm-registry-fetch@npm:18.0.2" dependencies: - "@npmcli/redact": "npm:^2.0.0" + "@npmcli/redact": "npm:^3.0.0" jsonparse: "npm:^1.3.1" - make-fetch-happen: "npm:^13.0.0" + make-fetch-happen: "npm:^14.0.0" minipass: "npm:^7.0.2" - minipass-fetch: "npm:^3.0.0" - minizlib: "npm:^2.1.2" - npm-package-arg: "npm:^11.0.0" - proc-log: "npm:^4.0.0" - checksum: 10/b9b2a73907fb5b2d8187031e040d7b2918f2b127ac858a84bd244f6435d16dd04df23c9660f32d7e9deb0216b91071623f040fd51b0bd375e8c7fed7d7a82a1c + minipass-fetch: "npm:^4.0.0" + minizlib: "npm:^3.0.1" + npm-package-arg: "npm:^12.0.0" + proc-log: "npm:^5.0.0" + checksum: 10/9e1dc4153be6e5868a732cbb6711347e97db6cf75caff8b65a58ed743cd1a445d3f1f4332481974389e9f507a0629380e91ab698c5362ff856f5785748f01ecf languageName: node linkType: hard @@ -15379,25 +15683,25 @@ __metadata: languageName: node linkType: hard -"nx@npm:>=17.1.2 < 21": - version: 20.8.2 - resolution: "nx@npm:20.8.2" +"nx@npm:>=21.5.3 < 22.0.0": + version: 21.6.5 + resolution: "nx@npm:21.6.5" dependencies: "@napi-rs/wasm-runtime": "npm:0.2.4" - "@nx/nx-darwin-arm64": "npm:20.8.2" - "@nx/nx-darwin-x64": "npm:20.8.2" - "@nx/nx-freebsd-x64": "npm:20.8.2" - "@nx/nx-linux-arm-gnueabihf": "npm:20.8.2" - "@nx/nx-linux-arm64-gnu": "npm:20.8.2" - "@nx/nx-linux-arm64-musl": "npm:20.8.2" - "@nx/nx-linux-x64-gnu": "npm:20.8.2" - "@nx/nx-linux-x64-musl": "npm:20.8.2" - "@nx/nx-win32-arm64-msvc": "npm:20.8.2" - "@nx/nx-win32-x64-msvc": "npm:20.8.2" + "@nx/nx-darwin-arm64": "npm:21.6.5" + "@nx/nx-darwin-x64": "npm:21.6.5" + "@nx/nx-freebsd-x64": "npm:21.6.5" + "@nx/nx-linux-arm-gnueabihf": "npm:21.6.5" + "@nx/nx-linux-arm64-gnu": "npm:21.6.5" + "@nx/nx-linux-arm64-musl": "npm:21.6.5" + "@nx/nx-linux-x64-gnu": "npm:21.6.5" + "@nx/nx-linux-x64-musl": "npm:21.6.5" + "@nx/nx-win32-arm64-msvc": "npm:21.6.5" + "@nx/nx-win32-x64-msvc": "npm:21.6.5" "@yarnpkg/lockfile": "npm:^1.1.0" "@yarnpkg/parsers": "npm:3.0.2" "@zkochan/js-yaml": "npm:0.0.7" - axios: "npm:^1.8.3" + axios: "npm:^1.12.0" chalk: "npm:^4.1.0" cli-cursor: "npm:3.1.0" cli-spinners: "npm:2.6.1" @@ -15409,7 +15713,7 @@ __metadata: flat: "npm:^5.0.2" front-matter: "npm:^4.0.2" ignore: "npm:^5.0.4" - jest-diff: "npm:^29.4.1" + jest-diff: "npm:^30.0.2" jsonc-parser: "npm:3.2.0" lines-and-columns: "npm:2.0.3" minimatch: "npm:9.0.3" @@ -15422,6 +15726,7 @@ __metadata: string-width: "npm:^4.2.3" tar-stream: "npm:~2.2.0" tmp: "npm:~0.2.1" + tree-kill: "npm:^1.2.2" tsconfig-paths: "npm:^4.1.2" tslib: "npm:^2.3.0" yaml: "npm:^2.6.0" @@ -15459,7 +15764,7 @@ __metadata: bin: nx: bin/nx.js nx-cloud: bin/nx-cloud.js - checksum: 10/29bc7b12599bb670224dd6f17644206c86a119ea398911fccaad10f93abb66d58649bd043393c4aebf20a28aa958870908c47adc9db9346993e1afc286a71d83 + checksum: 10/9a8a11465725777df90468296fdcb1b9d272b428fa43d5297edbcc7590aec8f98304ad27625f37365b4dde68bd1321cd902f4adfd55237a8455f8b211e37dd7e languageName: node linkType: hard @@ -15740,30 +16045,6 @@ __metadata: languageName: node linkType: hard -"ora@npm:^5.4.1": - version: 5.4.1 - resolution: "ora@npm:5.4.1" - dependencies: - bl: "npm:^4.1.0" - chalk: "npm:^4.1.0" - cli-cursor: "npm:^3.1.0" - cli-spinners: "npm:^2.5.0" - is-interactive: "npm:^1.0.0" - is-unicode-supported: "npm:^0.1.0" - log-symbols: "npm:^4.1.0" - strip-ansi: "npm:^6.0.0" - wcwidth: "npm:^1.0.1" - checksum: 10/8d071828f40090a8e1c6e8f350c6eb065808e9ab2b3e57fa37e0d5ae78cb46dac00117c8f12c3c8b8da2923454afbd8265e08c10b69881170c5b269f451e7fef - languageName: node - linkType: hard - -"os-tmpdir@npm:~1.0.2": - version: 1.0.2 - resolution: "os-tmpdir@npm:1.0.2" - checksum: 10/5666560f7b9f10182548bf7013883265be33620b1c1b4a4d405c25be2636f970c5488ff3e6c48de75b55d02bde037249fe5dbfbb4c0fb7714953d56aed062e6d - languageName: node - linkType: hard - "own-keys@npm:^1.0.0, own-keys@npm:^1.0.1": version: 1.0.1 resolution: "own-keys@npm:1.0.1" @@ -15870,7 +16151,7 @@ __metadata: languageName: node linkType: hard -"p-map@npm:4.0.0, p-map@npm:^4.0.0": +"p-map@npm:4.0.0": version: 4.0.0 resolution: "p-map@npm:4.0.0" dependencies: @@ -15960,30 +16241,57 @@ __metadata: languageName: node linkType: hard -"pacote@npm:^18.0.0, pacote@npm:^18.0.6": - version: 18.0.6 - resolution: "pacote@npm:18.0.6" +"pacote@npm:21.0.1": + version: 21.0.1 + resolution: "pacote@npm:21.0.1" dependencies: - "@npmcli/git": "npm:^5.0.0" - "@npmcli/installed-package-contents": "npm:^2.0.1" - "@npmcli/package-json": "npm:^5.1.0" - "@npmcli/promise-spawn": "npm:^7.0.0" - "@npmcli/run-script": "npm:^8.0.0" - cacache: "npm:^18.0.0" + "@npmcli/git": "npm:^6.0.0" + "@npmcli/installed-package-contents": "npm:^3.0.0" + "@npmcli/package-json": "npm:^7.0.0" + "@npmcli/promise-spawn": "npm:^8.0.0" + "@npmcli/run-script": "npm:^10.0.0" + cacache: "npm:^20.0.0" fs-minipass: "npm:^3.0.0" minipass: "npm:^7.0.2" - npm-package-arg: "npm:^11.0.0" - npm-packlist: "npm:^8.0.0" - npm-pick-manifest: "npm:^9.0.0" - npm-registry-fetch: "npm:^17.0.0" - proc-log: "npm:^4.0.0" + npm-package-arg: "npm:^13.0.0" + npm-packlist: "npm:^10.0.1" + npm-pick-manifest: "npm:^10.0.0" + npm-registry-fetch: "npm:^19.0.0" + proc-log: "npm:^5.0.0" + promise-retry: "npm:^2.0.1" + sigstore: "npm:^4.0.0" + ssri: "npm:^12.0.0" + tar: "npm:^7.4.3" + bin: + pacote: bin/index.js + checksum: 10/7293aec3d2464da7e22b949b1cee3ccb5e5082dfb5798506ce731fed83878339ca5790935d4ff9f9c97ca3df48dd79ff6a8829d367953e9b16d53c7134fc2c6d + languageName: node + linkType: hard + +"pacote@npm:^21.0.0": + version: 21.0.3 + resolution: "pacote@npm:21.0.3" + dependencies: + "@npmcli/git": "npm:^7.0.0" + "@npmcli/installed-package-contents": "npm:^3.0.0" + "@npmcli/package-json": "npm:^7.0.0" + "@npmcli/promise-spawn": "npm:^8.0.0" + "@npmcli/run-script": "npm:^10.0.0" + cacache: "npm:^20.0.0" + fs-minipass: "npm:^3.0.0" + minipass: "npm:^7.0.2" + npm-package-arg: "npm:^13.0.0" + npm-packlist: "npm:^10.0.1" + npm-pick-manifest: "npm:^11.0.1" + npm-registry-fetch: "npm:^19.0.0" + proc-log: "npm:^5.0.0" promise-retry: "npm:^2.0.1" - sigstore: "npm:^2.2.0" - ssri: "npm:^10.0.0" - tar: "npm:^6.1.11" + sigstore: "npm:^4.0.0" + ssri: "npm:^12.0.0" + tar: "npm:^7.4.3" bin: pacote: bin/index.js - checksum: 10/48cbcb3c20792952d431c995c2965340d3501e1795313d7225149435c883fb071d6a9bfbe11b1021dc888319f27a8c865cb70656f6472d7443545eb347447553 + checksum: 10/c39a9f7424f91fe0841ceffc2ace30356dfdcee5841bc67040c1f2b8d2b277873fa99a4510f03c4d426b1d7c55433ae98a8489ebaafccb9ccad6d6ac61b4607c languageName: node linkType: hard @@ -16076,14 +16384,14 @@ __metadata: languageName: node linkType: hard -"parse-conflict-json@npm:^3.0.0": - version: 3.0.1 - resolution: "parse-conflict-json@npm:3.0.1" +"parse-conflict-json@npm:^4.0.0": + version: 4.0.0 + resolution: "parse-conflict-json@npm:4.0.0" dependencies: - json-parse-even-better-errors: "npm:^3.0.0" + json-parse-even-better-errors: "npm:^4.0.0" just-diff: "npm:^6.0.0" just-diff-apply: "npm:^5.2.0" - checksum: 10/ceb13ca90bd75610559125dc7b519e2806c096640142d6524e9b1ffdf08d6625b03a29d8afe4630d95460f703b9d5bc6dac21fcdcb00089213ffdb70800c900b + checksum: 10/3e8391cfe6aafc52b97054959cea00d9cd34bc2281c6a3169bee13fd88ded0c7d8d202ea186a7bf905a1343366fc6d55df1014cad83f095fe7ed267a13f8b6c2 languageName: node linkType: hard @@ -16796,16 +17104,6 @@ __metadata: languageName: node linkType: hard -"postcss-selector-parser@npm:^6.0.10": - version: 6.1.2 - resolution: "postcss-selector-parser@npm:6.1.2" - dependencies: - cssesc: "npm:^3.0.0" - util-deprecate: "npm:^1.0.2" - checksum: 10/190034c94d809c115cd2f32ee6aade84e933450a43ec3899c3e78e7d7b33efd3a2a975bb45d7700b6c5b196c06a7d9acf3f1ba6f1d87032d9675a29d8bca1dd3 - languageName: node - linkType: hard - "postcss-selector-parser@npm:^7.0.0, postcss-selector-parser@npm:^7.1.0": version: 7.1.0 resolution: "postcss-selector-parser@npm:7.1.0" @@ -16892,17 +17190,6 @@ __metadata: languageName: node linkType: hard -"pretty-format@npm:^29.7.0": - version: 29.7.0 - resolution: "pretty-format@npm:29.7.0" - dependencies: - "@jest/schemas": "npm:^29.6.3" - ansi-styles: "npm:^5.0.0" - react-is: "npm:^18.0.0" - checksum: 10/dea96bc83c83cd91b2bfc55757b6b2747edcaac45b568e46de29deee80742f17bc76fe8898135a70d904f4928eafd8bb693cd1da4896e8bdd3c5e82cadf1d2bb - languageName: node - linkType: hard - "pretty-hrtime@npm:^1.0.3": version: 1.0.3 resolution: "pretty-hrtime@npm:1.0.3" @@ -16917,13 +17204,6 @@ __metadata: languageName: node linkType: hard -"proc-log@npm:^4.0.0, proc-log@npm:^4.1.0, proc-log@npm:^4.2.0": - version: 4.2.0 - resolution: "proc-log@npm:4.2.0" - checksum: 10/4e1394491b717f6c1ade15c570ecd4c2b681698474d3ae2d303c1e4b6ab9455bd5a81566211e82890d5a5ae9859718cc6954d5150bb18b09b72ecb297beae90a - languageName: node - linkType: hard - "proc-log@npm:^5.0.0": version: 5.0.0 resolution: "proc-log@npm:5.0.0" @@ -16945,10 +17225,10 @@ __metadata: languageName: node linkType: hard -"proggy@npm:^2.0.0": - version: 2.0.0 - resolution: "proggy@npm:2.0.0" - checksum: 10/9c96830d30516534c91e1260cae98d2c12aa32ea4ca7ff979876557ae293581c4874c95daf80497a7350179e7fec6d119cd589ef09af9c925f5842161897ed7e +"proggy@npm:^3.0.0": + version: 3.0.0 + resolution: "proggy@npm:3.0.0" + checksum: 10/0e09168c20282ddba82691118b6d1f9ea08b8a6d349a3fd30ccba598bb84577e8108da1cfd49f67c905b80e4b76ab36b58b611ebaaaa275e28d53ca066391f8e languageName: node linkType: hard @@ -17052,12 +17332,12 @@ __metadata: languageName: unknown linkType: soft -"promzard@npm:^1.0.0": - version: 1.0.2 - resolution: "promzard@npm:1.0.2" +"promzard@npm:^2.0.0": + version: 2.0.0 + resolution: "promzard@npm:2.0.0" dependencies: - read: "npm:^3.0.1" - checksum: 10/08dee9179e79d4a6446f707cce46fb3e8e8d93ec8b8d722ddc1ec4043c4c07e2e88dc90c64326a58f83d1a7e2b0d6b3bdf11b8b2687b9c74bfb410bafe630ad8 + read: "npm:^4.0.0" + checksum: 10/599ccf47b82df7b01dbef0fe833350436a9762c92237a684525733918179e7ae36151218d6a51d36f9cfffb83966d553cf1308de443836cf97d8be13fda1f57e languageName: node linkType: hard @@ -17803,20 +18083,27 @@ __metadata: languageName: node linkType: hard -"read-cmd-shim@npm:4.0.0, read-cmd-shim@npm:^4.0.0": +"read-cmd-shim@npm:4.0.0": version: 4.0.0 resolution: "read-cmd-shim@npm:4.0.0" checksum: 10/69a83acf0a3e2357762d5944a6f4a3f3c5527d0f9fe8a5c9362225aaf702ccfa580ff3bc0b84809c99e88861a5e5be147629717f02ff9befdac68fca1ccc7664 languageName: node linkType: hard -"read-package-json-fast@npm:^3.0.0, read-package-json-fast@npm:^3.0.2": - version: 3.0.2 - resolution: "read-package-json-fast@npm:3.0.2" +"read-cmd-shim@npm:^5.0.0": + version: 5.0.0 + resolution: "read-cmd-shim@npm:5.0.0" + checksum: 10/21ca52fd722e65e8fa0c5de331fee8275272834bce89810a627d4907a5911e69fee00fe30d384af012c5a3904dc2b867b23a5e8e014cacb775299486389facc3 + languageName: node + linkType: hard + +"read-package-json-fast@npm:^4.0.0": + version: 4.0.0 + resolution: "read-package-json-fast@npm:4.0.0" dependencies: - json-parse-even-better-errors: "npm:^3.0.0" - npm-normalize-package-bin: "npm:^3.0.0" - checksum: 10/8d406869f045f1d76e2a99865a8fd1c1af9c1dc06200b94d2b07eef87ed734b22703a8d72e1cd36ea36cc48e22020bdd187f88243c7dd0563f72114d38c17072 + json-parse-even-better-errors: "npm:^4.0.0" + npm-normalize-package-bin: "npm:^4.0.0" + checksum: 10/bf0becd7d0b652dcc5874b466d1dbd98313180e89505c072f35ff48a1ad6bdaf2427143301e1924d64e4af5064cda8be5df16f14de882f03130e29051bbaab87 languageName: node linkType: hard @@ -17864,12 +18151,12 @@ __metadata: languageName: node linkType: hard -"read@npm:^3.0.1": - version: 3.0.1 - resolution: "read@npm:3.0.1" +"read@npm:^4.0.0": + version: 4.1.0 + resolution: "read@npm:4.1.0" dependencies: - mute-stream: "npm:^1.0.0" - checksum: 10/446b463d04fc3fa82ed2ad9c924aef9174c9ea912ffc6a38b7b9e7b8fa10d6ce4735bcbd0dcc3b9833e9b8f561c182fa57cf6cdb9ca39c8c032ca3070d89baaa + mute-stream: "npm:^2.0.0" + checksum: 10/57e4e7b220bc63121dc9586bec898e79d45e074ec8326f7564b2b25f8483497ac27fcabbee2c1ab6eb73b38489814ab1a67e018902c4782a27575469838c4d83 languageName: node linkType: hard @@ -18516,10 +18803,10 @@ __metadata: languageName: node linkType: hard -"run-async@npm:^2.4.0": - version: 2.4.1 - resolution: "run-async@npm:2.4.1" - checksum: 10/c79551224dafa26ecc281cb1efad3510c82c79116aaf681f8a931ce70fdf4ca880d58f97d3b930a38992c7aad7955a08e065b32ec194e1dd49d7790c874ece50 +"run-async@npm:^4.0.5": + version: 4.0.6 + resolution: "run-async@npm:4.0.6" + checksum: 10/d23929e36d0422b871a8964d5cfcb1b88295950ea5f72e1dfed458d4c3f3a33a7395e08167d8a4446f2110cfaac7d7653d9c804d2becab8afa8a63e16b97da81 languageName: node linkType: hard @@ -18548,7 +18835,7 @@ __metadata: languageName: node linkType: hard -"rxjs@npm:^7.4.0, rxjs@npm:^7.5.5": +"rxjs@npm:^7.4.0, rxjs@npm:^7.8.2": version: 7.8.2 resolution: "rxjs@npm:7.8.2" dependencies: @@ -18991,21 +19278,21 @@ __metadata: languageName: node linkType: hard -"semver@npm:^6.0.0, semver@npm:^6.3.1": - version: 6.3.1 - resolution: "semver@npm:6.3.1" +"semver@npm:7.7.2, semver@npm:^7.0.0, semver@npm:^7.1.1, semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.5.3, semver@npm:^7.5.4, semver@npm:^7.6.0, semver@npm:^7.6.2": + version: 7.7.2 + resolution: "semver@npm:7.7.2" bin: semver: bin/semver.js - checksum: 10/1ef3a85bd02a760c6ef76a45b8c1ce18226de40831e02a00bad78485390b98b6ccaa31046245fc63bba4a47a6a592b6c7eedc65cc47126e60489f9cc1ce3ed7e + checksum: 10/7a24cffcaa13f53c09ce55e05efe25cd41328730b2308678624f8b9f5fc3093fc4d189f47950f0b811ff8f3c3039c24a2c36717ba7961615c682045bf03e1dda languageName: node linkType: hard -"semver@npm:^7.0.0, semver@npm:^7.1.1, semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.3.8, semver@npm:^7.5.3, semver@npm:^7.5.4, semver@npm:^7.6.0, semver@npm:^7.6.2": - version: 7.7.2 - resolution: "semver@npm:7.7.2" +"semver@npm:^6.0.0, semver@npm:^6.3.1": + version: 6.3.1 + resolution: "semver@npm:6.3.1" bin: semver: bin/semver.js - checksum: 10/7a24cffcaa13f53c09ce55e05efe25cd41328730b2308678624f8b9f5fc3093fc4d189f47950f0b811ff8f3c3039c24a2c36717ba7961615c682045bf03e1dda + checksum: 10/1ef3a85bd02a760c6ef76a45b8c1ce18226de40831e02a00bad78485390b98b6ccaa31046245fc63bba4a47a6a592b6c7eedc65cc47126e60489f9cc1ce3ed7e languageName: node linkType: hard @@ -19354,24 +19641,38 @@ __metadata: languageName: node linkType: hard -"signal-exit@npm:^4.0.1": +"signal-exit@npm:^4.0.1, signal-exit@npm:^4.1.0": version: 4.1.0 resolution: "signal-exit@npm:4.1.0" checksum: 10/c9fa63bbbd7431066174a48ba2dd9986dfd930c3a8b59de9c29d7b6854ec1c12a80d15310869ea5166d413b99f041bfa3dd80a7947bcd44ea8e6eb3ffeabfa1f languageName: node linkType: hard -"sigstore@npm:^2.2.0": - version: 2.3.1 - resolution: "sigstore@npm:2.3.1" +"sigstore@npm:^3.0.0": + version: 3.1.0 + resolution: "sigstore@npm:3.1.0" dependencies: - "@sigstore/bundle": "npm:^2.3.2" - "@sigstore/core": "npm:^1.0.0" - "@sigstore/protobuf-specs": "npm:^0.3.2" - "@sigstore/sign": "npm:^2.3.2" - "@sigstore/tuf": "npm:^2.3.4" - "@sigstore/verify": "npm:^1.2.1" - checksum: 10/4e0a82338d12370264dced2395cda18aaaad45fec630365ec88eaa1a4ba40f5eb08cd3b0c8688489d52e93f643b6598d682961f67858636f55300c590b1ddf62 + "@sigstore/bundle": "npm:^3.1.0" + "@sigstore/core": "npm:^2.0.0" + "@sigstore/protobuf-specs": "npm:^0.4.0" + "@sigstore/sign": "npm:^3.1.0" + "@sigstore/tuf": "npm:^3.1.0" + "@sigstore/verify": "npm:^2.1.0" + checksum: 10/fc2a38d11bd0e02b5dc8271e906ba7ea1aaa3dc19010dc6d29602b900532fa16b132cd6c80ec1c294f201f81f1277fb351020d0c65b6a62968f229db0b6c5a4f + languageName: node + linkType: hard + +"sigstore@npm:^4.0.0": + version: 4.0.0 + resolution: "sigstore@npm:4.0.0" + dependencies: + "@sigstore/bundle": "npm:^4.0.0" + "@sigstore/core": "npm:^3.0.0" + "@sigstore/protobuf-specs": "npm:^0.5.0" + "@sigstore/sign": "npm:^4.0.0" + "@sigstore/tuf": "npm:^4.0.0" + "@sigstore/verify": "npm:^3.0.0" + checksum: 10/22f6cf8f5922e186fec60dd9a427121377b0c7e8860f42e518f1d126d7700fc56964f122934060aaa89e299adb3494b43a3ba7a1af0fe9727339ce6b8cad7374 languageName: node linkType: hard @@ -19799,16 +20100,7 @@ __metadata: languageName: node linkType: hard -"ssri@npm:^10.0.0, ssri@npm:^10.0.6": - version: 10.0.6 - resolution: "ssri@npm:10.0.6" - dependencies: - minipass: "npm:^7.0.3" - checksum: 10/f92c1b3cc9bfd0a925417412d07d999935917bc87049f43ebec41074661d64cf720315661844106a77da9f8204b6d55ae29f9514e673083cae39464343af2a8b - languageName: node - linkType: hard - -"ssri@npm:^12.0.0": +"ssri@npm:12.0.0, ssri@npm:^12.0.0": version: 12.0.0 resolution: "ssri@npm:12.0.0" dependencies: @@ -20335,7 +20627,7 @@ __metadata: languageName: node linkType: hard -"tar@npm:6.2.1, tar@npm:^6.1.11, tar@npm:^6.2.1": +"tar@npm:6.2.1": version: 6.2.1 resolution: "tar@npm:6.2.1" dependencies: @@ -20583,7 +20875,7 @@ __metadata: languageName: node linkType: hard -"through@npm:2, through@npm:2.3.8, through@npm:>=2.2.7 <3, through@npm:^2.3.6": +"through@npm:2, through@npm:2.3.8, through@npm:>=2.2.7 <3": version: 2.3.8 resolution: "through@npm:2.3.8" checksum: 10/5da78346f70139a7d213b65a0106f3c398d6bc5301f9248b5275f420abc2c4b1e77c2abc72d218dedc28c41efb2e7c312cb76a7730d04f9c2d37d247da3f4198 @@ -20663,15 +20955,6 @@ __metadata: languageName: node linkType: hard -"tmp@npm:^0.0.33": - version: 0.0.33 - resolution: "tmp@npm:0.0.33" - dependencies: - os-tmpdir: "npm:~1.0.2" - checksum: 10/09c0abfd165cff29b32be42bc35e80b8c64727d97dedde6550022e88fa9fd39a084660415ed8e3ebaa2aca1ee142f86df8b31d4196d4f81c774a3a20fd4b6abf - languageName: node - linkType: hard - "tmp@npm:~0.2.1": version: 0.2.3 resolution: "tmp@npm:0.2.3" @@ -20759,13 +21042,6 @@ __metadata: languageName: node linkType: hard -"tr46@npm:~0.0.3": - version: 0.0.3 - resolution: "tr46@npm:0.0.3" - checksum: 10/8f1f5aa6cb232f9e1bdc86f485f916b7aa38caee8a778b378ffec0b70d9307873f253f5cbadbe2955ece2ac5c83d0dc14a77513166ccd0a0c7fe197e21396695 - languageName: node - linkType: hard - "tree-dump@npm:^1.0.1": version: 1.0.3 resolution: "tree-dump@npm:1.0.3" @@ -20775,6 +21051,15 @@ __metadata: languageName: node linkType: hard +"tree-kill@npm:^1.2.2": + version: 1.2.2 + resolution: "tree-kill@npm:1.2.2" + bin: + tree-kill: cli.js + checksum: 10/49117f5f410d19c84b0464d29afb9642c863bc5ba40fcb9a245d474c6d5cc64d1b177a6e6713129eb346b40aebb9d4631d967517f9fbe8251c35b21b13cd96c7 + languageName: node + linkType: hard + "treeverse@npm:^3.0.0": version: 3.0.0 resolution: "treeverse@npm:3.0.0" @@ -20869,14 +21154,25 @@ __metadata: languageName: node linkType: hard -"tuf-js@npm:^2.2.1": - version: 2.2.1 - resolution: "tuf-js@npm:2.2.1" +"tuf-js@npm:^3.0.1": + version: 3.1.0 + resolution: "tuf-js@npm:3.1.0" dependencies: - "@tufjs/models": "npm:2.0.1" - debug: "npm:^4.3.4" - make-fetch-happen: "npm:^13.0.1" - checksum: 10/4c057f4f0cfb183d8634c026a592f4fb29fd4e3d88260e32949642deedf87a1ae407645bae4cca58299458679a1cb7721245cde1885d466c2dbc1fbac0bc008a + "@tufjs/models": "npm:3.0.1" + debug: "npm:^4.4.1" + make-fetch-happen: "npm:^14.0.3" + checksum: 10/b0344853c0408312ecf6e6d6e02695f4b1043c28f110a2160d90c8b6716f156ef6d5aeea85b5dd01ee0da0dfee42567b7889a5b89881a116edee37d77c42044a + languageName: node + linkType: hard + +"tuf-js@npm:^4.0.0": + version: 4.0.0 + resolution: "tuf-js@npm:4.0.0" + dependencies: + "@tufjs/models": "npm:4.0.0" + debug: "npm:^4.4.1" + make-fetch-happen: "npm:^15.0.0" + checksum: 10/7de216e39578f7abd449b2eaed7977b9e99f3b66bcc7ff24f4f4a4a4bcca032a1c180e2a3fd20019ed820d898010fcd9f2654446c87dbf93a9b13f163bb99422 languageName: node linkType: hard @@ -21198,15 +21494,6 @@ __metadata: languageName: node linkType: hard -"unique-filename@npm:^3.0.0": - version: 3.0.0 - resolution: "unique-filename@npm:3.0.0" - dependencies: - unique-slug: "npm:^4.0.0" - checksum: 10/8e2f59b356cb2e54aab14ff98a51ac6c45781d15ceaab6d4f1c2228b780193dc70fae4463ce9e1df4479cb9d3304d7c2043a3fb905bdeca71cc7e8ce27e063df - languageName: node - linkType: hard - "unique-filename@npm:^4.0.0": version: 4.0.0 resolution: "unique-filename@npm:4.0.0" @@ -21225,15 +21512,6 @@ __metadata: languageName: node linkType: hard -"unique-slug@npm:^4.0.0": - version: 4.0.0 - resolution: "unique-slug@npm:4.0.0" - dependencies: - imurmurhash: "npm:^0.1.4" - checksum: 10/40912a8963fc02fb8b600cf50197df4a275c602c60de4cac4f75879d3c48558cfac48de08a25cc10df8112161f7180b3bbb4d662aadb711568602f9eddee54f0 - languageName: node - linkType: hard - "unique-slug@npm:^5.0.0": version: 5.0.0 resolution: "unique-slug@npm:5.0.0" @@ -21513,12 +21791,12 @@ __metadata: languageName: node linkType: hard -"uuid@npm:^10.0.0": - version: 10.0.0 - resolution: "uuid@npm:10.0.0" +"uuid@npm:^11.1.0": + version: 11.1.0 + resolution: "uuid@npm:11.1.0" bin: - uuid: dist/bin/uuid - checksum: 10/35aa60614811a201ff90f8ca5e9ecb7076a75c3821e17f0f5ff72d44e36c2d35fcbc2ceee9c4ac7317f4cc41895da30e74f3885e30313bee48fda6338f250538 + uuid: dist/esm/bin/uuid + checksum: 10/d2da43b49b154d154574891ced66d0c83fc70caaad87e043400cf644423b067542d6f3eb641b7c819224a7cd3b4c2f21906acbedd6ec9c6a05887aa9115a9cf5 languageName: node linkType: hard @@ -21561,10 +21839,10 @@ __metadata: languageName: node linkType: hard -"validate-npm-package-name@npm:5.0.1, validate-npm-package-name@npm:^5.0.0": - version: 5.0.1 - resolution: "validate-npm-package-name@npm:5.0.1" - checksum: 10/0d583a1af23aeffea7748742cf22b6802458736fb8b60323ba5949763824d46f796474b0e1b9206beb716f9d75269e19dbd7795d6b038b29d561be95dd827381 +"validate-npm-package-name@npm:6.0.2, validate-npm-package-name@npm:^6.0.0, validate-npm-package-name@npm:^6.0.2": + version: 6.0.2 + resolution: "validate-npm-package-name@npm:6.0.2" + checksum: 10/f0e022b0a7f11345a92b64121b059b720204cd64406a0d65d81526181dcb70aef551c7c6bf9ca37b91607a7c6ff4d62e1f63a86c8d9b7346d722a641a4bd8789 languageName: node linkType: hard @@ -21591,10 +21869,10 @@ __metadata: languageName: node linkType: hard -"walk-up-path@npm:^3.0.1": - version: 3.0.1 - resolution: "walk-up-path@npm:3.0.1" - checksum: 10/9ffca02fe30fb65f6db531260582988c5e766f4c739cf86a6109380a7f791236b5d0b92b1dce37a6f73e22dca6bc9d93bf3700413e16251b2bd6bbd1ca2be316 +"walk-up-path@npm:^4.0.0": + version: 4.0.0 + resolution: "walk-up-path@npm:4.0.0" + checksum: 10/6a230b20e5de296895116dc12b09dafaec1f72b8060c089533d296e241aff059dfaebe0d015c77467f857e4b40c78e08f7481add76f340233a1f34fa8af9ed63 languageName: node linkType: hard @@ -21644,13 +21922,6 @@ __metadata: languageName: node linkType: hard -"webidl-conversions@npm:^3.0.0": - version: 3.0.1 - resolution: "webidl-conversions@npm:3.0.1" - checksum: 10/b65b9f8d6854572a84a5c69615152b63371395f0c5dcd6729c45789052296df54314db2bc3e977df41705eacb8bc79c247cee139a63fa695192f95816ed528ad - languageName: node - linkType: hard - "webidl-conversions@npm:^7.0.0": version: 7.0.0 resolution: "webidl-conversions@npm:7.0.0" @@ -21977,16 +22248,6 @@ __metadata: languageName: node linkType: hard -"whatwg-url@npm:^5.0.0": - version: 5.0.0 - resolution: "whatwg-url@npm:5.0.0" - dependencies: - tr46: "npm:~0.0.3" - webidl-conversions: "npm:^3.0.0" - checksum: 10/f95adbc1e80820828b45cc671d97da7cd5e4ef9deb426c31bcd5ab00dc7103042291613b3ef3caec0a2335ed09e0d5ed026c940755dbb6d404e2b27f940fdf07 - languageName: node - linkType: hard - "which-boxed-primitive@npm:^1.1.0, which-boxed-primitive@npm:^1.1.1": version: 1.1.1 resolution: "which-boxed-primitive@npm:1.1.1" @@ -22059,17 +22320,6 @@ __metadata: languageName: node linkType: hard -"which@npm:^4.0.0": - version: 4.0.0 - resolution: "which@npm:4.0.0" - dependencies: - isexe: "npm:^3.1.1" - bin: - node-which: bin/which.js - checksum: 10/f17e84c042592c21e23c8195108cff18c64050b9efb8459589116999ea9da6dd1509e6a1bac3aeebefd137be00fabbb61b5c2bc0aa0f8526f32b58ee2f545651 - languageName: node - linkType: hard - "which@npm:^5.0.0": version: 5.0.0 resolution: "which@npm:5.0.0" @@ -22131,7 +22381,7 @@ __metadata: languageName: node linkType: hard -"wrap-ansi@npm:^6.0.1": +"wrap-ansi@npm:^6.2.0": version: 6.2.0 resolution: "wrap-ansi@npm:6.2.0" dependencies: @@ -22160,7 +22410,7 @@ __metadata: languageName: node linkType: hard -"write-file-atomic@npm:5.0.1, write-file-atomic@npm:^5.0.0, write-file-atomic@npm:^5.0.1": +"write-file-atomic@npm:5.0.1, write-file-atomic@npm:^5.0.1": version: 5.0.1 resolution: "write-file-atomic@npm:5.0.1" dependencies: @@ -22181,6 +22431,16 @@ __metadata: languageName: node linkType: hard +"write-file-atomic@npm:^6.0.0": + version: 6.0.0 + resolution: "write-file-atomic@npm:6.0.0" + dependencies: + imurmurhash: "npm:^0.1.4" + signal-exit: "npm:^4.0.1" + checksum: 10/8f6d9ff94963b392c425653728d7f7d883cc2208f3d6c94be97e1436ad3115d56106122f1aeee3925f21241ce14c72bfc56bbee0d260346cf7d7797e603ff917 + languageName: node + linkType: hard + "write-json-file@npm:^3.2.0": version: 3.2.0 resolution: "write-json-file@npm:3.2.0" @@ -22407,6 +22667,13 @@ __metadata: languageName: node linkType: hard +"yoctocolors-cjs@npm:^2.1.2": + version: 2.1.3 + resolution: "yoctocolors-cjs@npm:2.1.3" + checksum: 10/b2144b38807673a4254dae06fe1a212729550609e606289c305e45c585b36fab1dbba44fe6cde90db9b28be465ec63f4c2a50867aeec6672f6bc36b6c9a361a0 + languageName: node + linkType: hard + "zip-lib@npm:^0.7.3": version: 0.7.3 resolution: "zip-lib@npm:0.7.3" From 911cf90e652aec15f31ae6ea35e501b7a9c2af59 Mon Sep 17 00:00:00 2001 From: Brian Dukes Date: Tue, 21 Oct 2025 17:07:30 -0500 Subject: [PATCH 115/199] Bump less to 4.4.2 Bump less-loader to 12.3.0 --- .../ClientSide/AdminLogs.Web/package.json | 4 +- .../ClientSide/Bundle.Web/package.json | 4 +- .../ClientSide/Dnn.React.Common/package.json | 4 +- .../ClientSide/Extensions.Web/package.json | 4 +- .../ClientSide/Licensing.Web/package.json | 4 +- .../ClientSide/Pages.Web/package.json | 4 +- .../ClientSide/Prompt.Web/package.json | 4 +- .../ClientSide/Roles.Web/package.json | 4 +- .../ClientSide/Security.Web/package.json | 94 +++++++------- .../ClientSide/Seo.Web/package.json | 4 +- .../ClientSide/Servers.Web/package.json | 4 +- .../ClientSide/SiteGroups.Web/package.json | 4 +- .../SiteImportExport.Web/package.json | 120 +++++++++--------- .../ClientSide/SiteSettings.Web/package.json | 4 +- .../src/components/synonymsGroups/style.less | 2 +- .../ClientSide/Sites.Web/package.json | 4 +- .../Sites.Web/src/_exportables/package.json | 4 +- .../ClientSide/TaskScheduler.Web/package.json | 4 +- .../ClientSide/Themes.Web/package.json | 4 +- .../ClientSide/Users.Web/package.json | 4 +- .../Users.Web/src/_exportables/package.json | 4 +- .../ClientSide/Vocabularies.Web/package.json | 4 +- yarn.lock | 100 +++++++-------- 23 files changed, 196 insertions(+), 196 deletions(-) diff --git a/Dnn.AdminExperience/ClientSide/AdminLogs.Web/package.json b/Dnn.AdminExperience/ClientSide/AdminLogs.Web/package.json index e53748570d8..5745d7b651f 100644 --- a/Dnn.AdminExperience/ClientSide/AdminLogs.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/AdminLogs.Web/package.json @@ -29,8 +29,8 @@ "file-loader": "6.2.0", "globals": "^16.4.0", "i18n-webpack-plugin": "1.0.0", - "less": "4.1.3", - "less-loader": "12.2.0", + "less": "4.4.2", + "less-loader": "12.3.0", "prop-types": "15.8.1", "raw-loader": "4.0.2", "react": "^16.14.0", diff --git a/Dnn.AdminExperience/ClientSide/Bundle.Web/package.json b/Dnn.AdminExperience/ClientSide/Bundle.Web/package.json index af64626ed3b..7bcb36422f4 100644 --- a/Dnn.AdminExperience/ClientSide/Bundle.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Bundle.Web/package.json @@ -29,8 +29,8 @@ "file-loader": "6.2.0", "globals": "^16.4.0", "json-loader": "^0.5.7", - "less": "4.1.3", - "less-loader": "12.2.0", + "less": "4.4.2", + "less-loader": "12.3.0", "prop-types": "^15.8.1", "raw-loader": "4.0.2", "react": "^16.14.0", diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/package.json b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/package.json index bc8bbdd5a6f..bf7393ef689 100644 --- a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/package.json +++ b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/package.json @@ -76,8 +76,8 @@ "eslint-plugin-storybook": "9.1.13", "eslint-webpack-plugin": "^5.0.2", "file-loader": "6.2.0", - "less": "4.1.3", - "less-loader": "12.2.0", + "less": "4.4.2", + "less-loader": "12.3.0", "nanoid": "^5.0.7", "prop-types": "^15.8.1", "raw-loader": "4.0.2", diff --git a/Dnn.AdminExperience/ClientSide/Extensions.Web/package.json b/Dnn.AdminExperience/ClientSide/Extensions.Web/package.json index 456dca235ad..eea60fa19fc 100644 --- a/Dnn.AdminExperience/ClientSide/Extensions.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Extensions.Web/package.json @@ -26,8 +26,8 @@ "eslint-webpack-plugin": "^5.0.2", "file-loader": "6.2.0", "globals": "^16.4.0", - "less": "4.1.3", - "less-loader": "12.2.0", + "less": "4.4.2", + "less-loader": "12.3.0", "prop-types": "^15.8.1", "raw-loader": "4.0.2", "react": "^16.14.0", diff --git a/Dnn.AdminExperience/ClientSide/Licensing.Web/package.json b/Dnn.AdminExperience/ClientSide/Licensing.Web/package.json index f21dbd5ee03..b7576008b57 100644 --- a/Dnn.AdminExperience/ClientSide/Licensing.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Licensing.Web/package.json @@ -28,8 +28,8 @@ "eslint-webpack-plugin": "^5.0.2", "file-loader": "6.2.0", "globals": "^16.4.0", - "less": "4.1.3", - "less-loader": "12.2.0", + "less": "4.4.2", + "less-loader": "12.3.0", "prop-types": "^15.8.1", "raw-loader": "4.0.2", "react-hot-loader": "4.13.1", diff --git a/Dnn.AdminExperience/ClientSide/Pages.Web/package.json b/Dnn.AdminExperience/ClientSide/Pages.Web/package.json index 1a6ebf16230..d4170a104e2 100644 --- a/Dnn.AdminExperience/ClientSide/Pages.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Pages.Web/package.json @@ -45,8 +45,8 @@ "file-loader": "6.2.0", "globals": "^16.4.0", "jest": "^30.2.0", - "less": "4.1.3", - "less-loader": "12.2.0", + "less": "4.4.2", + "less-loader": "12.3.0", "lodash": "4.17.21", "raw-loader": "4.0.2", "react-custom-scrollbars": "4.2.1", diff --git a/Dnn.AdminExperience/ClientSide/Prompt.Web/package.json b/Dnn.AdminExperience/ClientSide/Prompt.Web/package.json index 72ff16a3d85..7f78a092896 100644 --- a/Dnn.AdminExperience/ClientSide/Prompt.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Prompt.Web/package.json @@ -38,8 +38,8 @@ "globals": "^16.4.0", "i18n-webpack-plugin": "1.0.0", "jest": "^30.2.0", - "less": "4.1.3", - "less-loader": "12.2.0", + "less": "4.4.2", + "less-loader": "12.3.0", "localization": "^1.0.2", "object-assign": "*", "prop-types": "^15.8.1", diff --git a/Dnn.AdminExperience/ClientSide/Roles.Web/package.json b/Dnn.AdminExperience/ClientSide/Roles.Web/package.json index a2961109732..505dbb9b996 100644 --- a/Dnn.AdminExperience/ClientSide/Roles.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Roles.Web/package.json @@ -29,8 +29,8 @@ "eslint-webpack-plugin": "^5.0.2", "file-loader": "6.2.0", "globals": "^16.4.0", - "less": "4.1.3", - "less-loader": "12.2.0", + "less": "4.4.2", + "less-loader": "12.3.0", "prop-types": "^15.8.1", "raw-loader": "^4.0.2", "react": "^16.14.0", diff --git a/Dnn.AdminExperience/ClientSide/Security.Web/package.json b/Dnn.AdminExperience/ClientSide/Security.Web/package.json index ce3d6722085..3bff3debf5f 100644 --- a/Dnn.AdminExperience/ClientSide/Security.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Security.Web/package.json @@ -1,47 +1,47 @@ -{ - "name": "security-settings", - "version": "10.1.0", - "private": true, - "scripts": { - "build": "set NODE_ENV=production&&webpack --mode production", - "debug": "set NODE_ENV=debug&&webpack --mode development", - "watch": "set NODE_ENV=debug && webpack --mode=development --progress --watch", - "analyze": "set NODE_ENV=production&&webpack --mode production --json | webpack-bundle-size-analyzer", - "lint": "eslint --fix" - }, - "devDependencies": { - "@babel/core": "^7.28.4", - "@babel/plugin-proposal-object-rest-spread": "^7.20.7", - "@babel/plugin-transform-react-jsx": "^7.27.1", - "@babel/preset-env": "^7.28.3", - "@babel/preset-react": "^7.27.1", - "@dnnsoftware/dnn-react-common": "10.1.0", - "babel-loader": "10.0.0", - "babel-plugin-transform-react-remove-prop-types": "0.4.24", - "create-react-class": "^15.7.0", - "css-loader": "^7.1.2", - "eslint": "9.38.0", - "eslint-plugin-react": "7.37.5", - "eslint-webpack-plugin": "^5.0.2", - "file-loader": "6.2.0", - "globals": "^16.4.0", - "less": "4.1.3", - "less-loader": "12.2.0", - "prop-types": "^15.8.1", - "raw-loader": "4.0.2", - "react": "^16.14.0", - "react-dom": "^16.14.0", - "react-hot-loader": "4.13.1", - "react-modal": "3.16.1", - "react-redux": "^8.1.1", - "redux": "^4.2.1", - "redux-immutable-state-invariant": "^2.1.0", - "redux-thunk": "^2.4.2", - "style-loader": "^4.0.0", - "url-loader": "1.1.2", - "webpack": "5.94.0", - "webpack-bundle-size-analyzer": "3.1.0", - "webpack-cli": "5.1.4", - "webpack-dev-server": "5.2.1" - } -} +{ + "name": "security-settings", + "version": "10.1.0", + "private": true, + "scripts": { + "build": "set NODE_ENV=production&&webpack --mode production", + "debug": "set NODE_ENV=debug&&webpack --mode development", + "watch": "set NODE_ENV=debug && webpack --mode=development --progress --watch", + "analyze": "set NODE_ENV=production&&webpack --mode production --json | webpack-bundle-size-analyzer", + "lint": "eslint --fix" + }, + "devDependencies": { + "@babel/core": "^7.28.4", + "@babel/plugin-proposal-object-rest-spread": "^7.20.7", + "@babel/plugin-transform-react-jsx": "^7.27.1", + "@babel/preset-env": "^7.28.3", + "@babel/preset-react": "^7.27.1", + "@dnnsoftware/dnn-react-common": "10.1.0", + "babel-loader": "10.0.0", + "babel-plugin-transform-react-remove-prop-types": "0.4.24", + "create-react-class": "^15.7.0", + "css-loader": "^7.1.2", + "eslint": "9.38.0", + "eslint-plugin-react": "7.37.5", + "eslint-webpack-plugin": "^5.0.2", + "file-loader": "6.2.0", + "globals": "^16.4.0", + "less": "4.4.2", + "less-loader": "12.3.0", + "prop-types": "^15.8.1", + "raw-loader": "4.0.2", + "react": "^16.14.0", + "react-dom": "^16.14.0", + "react-hot-loader": "4.13.1", + "react-modal": "3.16.1", + "react-redux": "^8.1.1", + "redux": "^4.2.1", + "redux-immutable-state-invariant": "^2.1.0", + "redux-thunk": "^2.4.2", + "style-loader": "^4.0.0", + "url-loader": "1.1.2", + "webpack": "5.94.0", + "webpack-bundle-size-analyzer": "3.1.0", + "webpack-cli": "5.1.4", + "webpack-dev-server": "5.2.1" + } +} diff --git a/Dnn.AdminExperience/ClientSide/Seo.Web/package.json b/Dnn.AdminExperience/ClientSide/Seo.Web/package.json index b49623654e6..8a3940c466c 100644 --- a/Dnn.AdminExperience/ClientSide/Seo.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Seo.Web/package.json @@ -30,8 +30,8 @@ "eslint-webpack-plugin": "^5.0.2", "file-loader": "6.2.0", "globals": "^16.4.0", - "less": "4.1.3", - "less-loader": "12.2.0", + "less": "4.4.2", + "less-loader": "12.3.0", "prop-types": "^15.8.1", "raw-loader": "4.0.2", "react": "^16.14.0", diff --git a/Dnn.AdminExperience/ClientSide/Servers.Web/package.json b/Dnn.AdminExperience/ClientSide/Servers.Web/package.json index 583ec8430e1..539459d1283 100644 --- a/Dnn.AdminExperience/ClientSide/Servers.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Servers.Web/package.json @@ -29,8 +29,8 @@ "eslint-webpack-plugin": "^5.0.2", "file-loader": "6.2.0", "globals": "^16.4.0", - "less": "4.1.3", - "less-loader": "12.2.0", + "less": "4.4.2", + "less-loader": "12.3.0", "null-loader": "^4.0.1", "prop-types": "^15.8.1", "raw-loader": "4.0.2", diff --git a/Dnn.AdminExperience/ClientSide/SiteGroups.Web/package.json b/Dnn.AdminExperience/ClientSide/SiteGroups.Web/package.json index 4981a663189..e8fba0b4e58 100644 --- a/Dnn.AdminExperience/ClientSide/SiteGroups.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/SiteGroups.Web/package.json @@ -26,8 +26,8 @@ "eslint-webpack-plugin": "^5.0.2", "file-loader": "6.2.0", "globals": "^16.4.0", - "less": "4.1.3", - "less-loader": "12.2.0", + "less": "4.4.2", + "less-loader": "12.3.0", "prop-types": "^15.8.1", "raw-loader": "4.0.2", "react": "^16.14.0", diff --git a/Dnn.AdminExperience/ClientSide/SiteImportExport.Web/package.json b/Dnn.AdminExperience/ClientSide/SiteImportExport.Web/package.json index 0c3893a25a7..fc3d0039136 100644 --- a/Dnn.AdminExperience/ClientSide/SiteImportExport.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/SiteImportExport.Web/package.json @@ -1,60 +1,60 @@ -{ - "name": "site-import-export", - "version": "10.1.0", - "private": true, - "scripts": { - "build": "set NODE_ENV=production&&webpack --mode production", - "debug": "set NODE_ENV=debug&&webpack --mode production", - "watch": "set NODE_ENV=debug & webpack --mode=development --progress --watch", - "analyze": "set NODE_ENV=production&&webpack --mode production --json | webpack-bundle-size-analyzer", - "lint": "eslint --fix" - }, - "devDependencies": { - "@babel/core": "^7.28.4", - "@babel/plugin-proposal-object-rest-spread": "^7.20.7", - "@babel/plugin-transform-react-jsx": "^7.27.1", - "@babel/preset-env": "^7.28.3", - "@babel/preset-react": "^7.27.1", - "@dnnsoftware/dnn-react-common": "10.1.0", - "babel-eslint": "^10.1.0", - "babel-loader": "10.0.0", - "babel-plugin-transform-class-properties": "^6.24.1", - "babel-plugin-transform-object-assign": "6.22.0", - "babel-plugin-transform-object-rest-spread": "6.26.0", - "babel-plugin-transform-react-remove-prop-types": "^0.4.24", - "babel-polyfill": "6.26.0", - "create-react-class": "^15.7.0", - "css-loader": "^7.1.2", - "eslint": "9.38.0", - "eslint-plugin-react": "7.37.5", - "eslint-webpack-plugin": "^5.0.2", - "globals": "^16.4.0", - "i18n-webpack-plugin": "1.0.0", - "less": "4.1.3", - "less-loader": "12.2.0", - "localization": "^1.0.2", - "prop-types": "^15.8.1", - "raw-loader": "^4.0.2", - "rc-progress": "^4.0.0", - "react": "^16.14.0", - "react-click-outside": "^3.0.1", - "react-dom": "^16.14.0", - "react-hot-loader": "4.13.1", - "react-redux": "^8.1.1", - "redux": "^4.2.1", - "redux-devtools": "3.7.0", - "redux-devtools-dock-monitor": "1.2.0", - "redux-devtools-log-monitor": "2.1.0", - "redux-immutable-state-invariant": "2.1.0", - "redux-thunk": "2.4.2", - "style-loader": "^4.0.0", - "svg-url-loader": "^8.0.0", - "throttle-debounce": "^5.0.0", - "url-loader": "1.1.2", - "utils": "^0.3.1", - "webpack": "5.94.0", - "webpack-bundle-size-analyzer": "3.1.0", - "webpack-cli": "5.1.4", - "webpack-dev-server": "5.2.1" - } -} +{ + "name": "site-import-export", + "version": "10.1.0", + "private": true, + "scripts": { + "build": "set NODE_ENV=production&&webpack --mode production", + "debug": "set NODE_ENV=debug&&webpack --mode production", + "watch": "set NODE_ENV=debug & webpack --mode=development --progress --watch", + "analyze": "set NODE_ENV=production&&webpack --mode production --json | webpack-bundle-size-analyzer", + "lint": "eslint --fix" + }, + "devDependencies": { + "@babel/core": "^7.28.4", + "@babel/plugin-proposal-object-rest-spread": "^7.20.7", + "@babel/plugin-transform-react-jsx": "^7.27.1", + "@babel/preset-env": "^7.28.3", + "@babel/preset-react": "^7.27.1", + "@dnnsoftware/dnn-react-common": "10.1.0", + "babel-eslint": "^10.1.0", + "babel-loader": "10.0.0", + "babel-plugin-transform-class-properties": "^6.24.1", + "babel-plugin-transform-object-assign": "6.22.0", + "babel-plugin-transform-object-rest-spread": "6.26.0", + "babel-plugin-transform-react-remove-prop-types": "^0.4.24", + "babel-polyfill": "6.26.0", + "create-react-class": "^15.7.0", + "css-loader": "^7.1.2", + "eslint": "9.38.0", + "eslint-plugin-react": "7.37.5", + "eslint-webpack-plugin": "^5.0.2", + "globals": "^16.4.0", + "i18n-webpack-plugin": "1.0.0", + "less": "4.4.2", + "less-loader": "12.3.0", + "localization": "^1.0.2", + "prop-types": "^15.8.1", + "raw-loader": "^4.0.2", + "rc-progress": "^4.0.0", + "react": "^16.14.0", + "react-click-outside": "^3.0.1", + "react-dom": "^16.14.0", + "react-hot-loader": "4.13.1", + "react-redux": "^8.1.1", + "redux": "^4.2.1", + "redux-devtools": "3.7.0", + "redux-devtools-dock-monitor": "1.2.0", + "redux-devtools-log-monitor": "2.1.0", + "redux-immutable-state-invariant": "2.1.0", + "redux-thunk": "2.4.2", + "style-loader": "^4.0.0", + "svg-url-loader": "^8.0.0", + "throttle-debounce": "^5.0.0", + "url-loader": "1.1.2", + "utils": "^0.3.1", + "webpack": "5.94.0", + "webpack-bundle-size-analyzer": "3.1.0", + "webpack-cli": "5.1.4", + "webpack-dev-server": "5.2.1" + } +} diff --git a/Dnn.AdminExperience/ClientSide/SiteSettings.Web/package.json b/Dnn.AdminExperience/ClientSide/SiteSettings.Web/package.json index c97fc9dc61b..e53d26c55e5 100644 --- a/Dnn.AdminExperience/ClientSide/SiteSettings.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/SiteSettings.Web/package.json @@ -31,8 +31,8 @@ "file-loader": "6.2.0", "globals": "^16.4.0", "jest": "^30.2.0", - "less": "4.1.3", - "less-loader": "12.2.0", + "less": "4.4.2", + "less-loader": "12.3.0", "prop-types": "^15.8.1", "raw-loader": "4.0.2", "react": "^16.14.0", diff --git a/Dnn.AdminExperience/ClientSide/SiteSettings.Web/src/components/synonymsGroups/style.less b/Dnn.AdminExperience/ClientSide/SiteSettings.Web/src/components/synonymsGroups/style.less index ac16a946275..042d80c2b62 100644 --- a/Dnn.AdminExperience/ClientSide/SiteSettings.Web/src/components/synonymsGroups/style.less +++ b/Dnn.AdminExperience/ClientSide/SiteSettings.Web/src/components/synonymsGroups/style.less @@ -26,7 +26,7 @@ overflow: hidden; } .header-row-no-border { - .header-row; + .header-row(); border-bottom: 0; } .header-Synonyms { diff --git a/Dnn.AdminExperience/ClientSide/Sites.Web/package.json b/Dnn.AdminExperience/ClientSide/Sites.Web/package.json index 543293642d1..f2b281186de 100644 --- a/Dnn.AdminExperience/ClientSide/Sites.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Sites.Web/package.json @@ -26,8 +26,8 @@ "eslint-webpack-plugin": "^5.0.2", "file-loader": "6.2.0", "globals": "^16.4.0", - "less": "4.1.3", - "less-loader": "12.2.0", + "less": "4.4.2", + "less-loader": "12.3.0", "prop-types": "^15.8.1", "raw-loader": "4.0.2", "react": "^16.14.0", diff --git a/Dnn.AdminExperience/ClientSide/Sites.Web/src/_exportables/package.json b/Dnn.AdminExperience/ClientSide/Sites.Web/src/_exportables/package.json index 9dab3ce3b30..9912e8915ae 100644 --- a/Dnn.AdminExperience/ClientSide/Sites.Web/src/_exportables/package.json +++ b/Dnn.AdminExperience/ClientSide/Sites.Web/src/_exportables/package.json @@ -29,8 +29,8 @@ "eslint-plugin-react": "7.37.5", "eslint-webpack-plugin": "^5.0.2", "globals": "^16.4.0", - "less": "4.1.3", - "less-loader": "12.2.0", + "less": "4.4.2", + "less-loader": "12.3.0", "null-loader": "^4.0.1", "prop-types": "^15.8.1", "react": "^16.14.0", diff --git a/Dnn.AdminExperience/ClientSide/TaskScheduler.Web/package.json b/Dnn.AdminExperience/ClientSide/TaskScheduler.Web/package.json index ff2bc30ff27..c165c1d409e 100644 --- a/Dnn.AdminExperience/ClientSide/TaskScheduler.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/TaskScheduler.Web/package.json @@ -30,8 +30,8 @@ "eslint-webpack-plugin": "^5.0.2", "file-loader": "6.2.0", "globals": "^16.4.0", - "less": "4.1.3", - "less-loader": "12.2.0", + "less": "4.4.2", + "less-loader": "12.3.0", "prop-types": "^15.8.1", "raw-loader": "4.0.2", "react": "^16.14.0", diff --git a/Dnn.AdminExperience/ClientSide/Themes.Web/package.json b/Dnn.AdminExperience/ClientSide/Themes.Web/package.json index d45d012521a..847062e00be 100644 --- a/Dnn.AdminExperience/ClientSide/Themes.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Themes.Web/package.json @@ -27,8 +27,8 @@ "eslint-webpack-plugin": "^5.0.2", "file-loader": "6.2.0", "globals": "^16.4.0", - "less": "4.1.3", - "less-loader": "12.2.0", + "less": "4.4.2", + "less-loader": "12.3.0", "prop-types": "^15.8.1", "raw-loader": "4.0.2", "react": "^16.14.0", diff --git a/Dnn.AdminExperience/ClientSide/Users.Web/package.json b/Dnn.AdminExperience/ClientSide/Users.Web/package.json index ce4ab070ac0..aa4597ad9cc 100644 --- a/Dnn.AdminExperience/ClientSide/Users.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Users.Web/package.json @@ -26,8 +26,8 @@ "file-loader": "6.2.0", "globals": "^16.4.0", "jest": "^30.2.0", - "less": "4.1.3", - "less-loader": "12.2.0", + "less": "4.4.2", + "less-loader": "12.3.0", "null-loader": "^4.0.1", "prop-types": "^15.8.1", "raw-loader": "4.0.2", diff --git a/Dnn.AdminExperience/ClientSide/Users.Web/src/_exportables/package.json b/Dnn.AdminExperience/ClientSide/Users.Web/src/_exportables/package.json index 6b8ea3a6f0c..338a342218e 100644 --- a/Dnn.AdminExperience/ClientSide/Users.Web/src/_exportables/package.json +++ b/Dnn.AdminExperience/ClientSide/Users.Web/src/_exportables/package.json @@ -28,8 +28,8 @@ "eslint-plugin-react": "7.37.5", "eslint-plugin-spellcheck": "0.0.20", "eslint-webpack-plugin": "^5.0.2", - "less": "4.1.3", - "less-loader": "12.2.0", + "less": "4.4.2", + "less-loader": "12.3.0", "localization": "^1.0.2", "null-loader": "^4.0.1", "prop-types": "15.8.1", diff --git a/Dnn.AdminExperience/ClientSide/Vocabularies.Web/package.json b/Dnn.AdminExperience/ClientSide/Vocabularies.Web/package.json index ff0730a964c..2c8b5f56a69 100644 --- a/Dnn.AdminExperience/ClientSide/Vocabularies.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Vocabularies.Web/package.json @@ -30,8 +30,8 @@ "eslint-webpack-plugin": "^5.0.2", "file-loader": "6.2.0", "globals": "^16.4.0", - "less": "4.1.3", - "less-loader": "12.2.0", + "less": "4.4.2", + "less-loader": "12.3.0", "object-path": "0.11.8", "prop-types": "^15.8.1", "raw-loader": "4.0.2", diff --git a/yarn.lock b/yarn.lock index 6b431d1cb8d..e5f716478bc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1660,8 +1660,8 @@ __metadata: eslint-webpack-plugin: "npm:^5.0.2" file-loader: "npm:6.2.0" interact.js: "npm:^1.2.8" - less: "npm:4.1.3" - less-loader: "npm:12.2.0" + less: "npm:4.4.2" + less-loader: "npm:12.3.0" nanoid: "npm:^5.0.7" prop-types: "npm:^15.8.1" raw-loader: "npm:4.0.2" @@ -5894,8 +5894,8 @@ __metadata: file-loader: "npm:6.2.0" globals: "npm:^16.4.0" i18n-webpack-plugin: "npm:1.0.0" - less: "npm:4.1.3" - less-loader: "npm:12.2.0" + less: "npm:4.4.2" + less-loader: "npm:12.3.0" prop-types: "npm:15.8.1" raw-loader: "npm:4.0.2" react: "npm:^16.14.0" @@ -9256,8 +9256,8 @@ __metadata: eslint-webpack-plugin: "npm:^5.0.2" file-loader: "npm:6.2.0" globals: "npm:^16.4.0" - less: "npm:4.1.3" - less-loader: "npm:12.2.0" + less: "npm:4.4.2" + less-loader: "npm:12.3.0" prop-types: "npm:^15.8.1" raw-loader: "npm:4.0.2" react: "npm:^16.14.0" @@ -9295,8 +9295,8 @@ __metadata: eslint-plugin-react: "npm:7.37.5" eslint-webpack-plugin: "npm:^5.0.2" globals: "npm:^16.4.0" - less: "npm:4.1.3" - less-loader: "npm:12.2.0" + less: "npm:4.4.2" + less-loader: "npm:12.3.0" null-loader: "npm:^4.0.1" prop-types: "npm:^15.8.1" react: "npm:^16.14.0" @@ -9330,8 +9330,8 @@ __metadata: eslint-plugin-react: "npm:7.37.5" eslint-plugin-spellcheck: "npm:0.0.20" eslint-webpack-plugin: "npm:^5.0.2" - less: "npm:4.1.3" - less-loader: "npm:12.2.0" + less: "npm:4.4.2" + less-loader: "npm:12.3.0" localization: "npm:^1.0.2" null-loader: "npm:^4.0.1" prop-types: "npm:15.8.1" @@ -10831,8 +10831,8 @@ __metadata: file-loader: "npm:6.2.0" globals: "npm:^16.4.0" json-loader: "npm:^0.5.7" - less: "npm:4.1.3" - less-loader: "npm:12.2.0" + less: "npm:4.4.2" + less-loader: "npm:12.3.0" prop-types: "npm:^15.8.1" raw-loader: "npm:4.0.2" react: "npm:^16.14.0" @@ -10939,8 +10939,8 @@ __metadata: eslint-webpack-plugin: "npm:^5.0.2" file-loader: "npm:6.2.0" globals: "npm:^16.4.0" - less: "npm:4.1.3" - less-loader: "npm:12.2.0" + less: "npm:4.4.2" + less-loader: "npm:12.3.0" prop-types: "npm:^15.8.1" raw-loader: "npm:4.0.2" react: "npm:^16.14.0" @@ -14139,9 +14139,9 @@ __metadata: languageName: node linkType: hard -"less-loader@npm:12.2.0": - version: 12.2.0 - resolution: "less-loader@npm:12.2.0" +"less-loader@npm:12.3.0": + version: 12.3.0 + resolution: "less-loader@npm:12.3.0" peerDependencies: "@rspack/core": 0.x || 1.x less: ^3.5.0 || ^4.0.0 @@ -14151,13 +14151,13 @@ __metadata: optional: true webpack: optional: true - checksum: 10/b9527053460aa82668f33bfbcfc23dbcb9023a9cd55f2f04fa9620e020acc3f032eb2dcb3625a1c3dd8852782c41490e6fde342e3185a477fa41d2f5eb35ca6f + checksum: 10/6f2eb5602c6d2f2d40afe340567b510dcbb8125d0cbf5e2ab02ed5cff43b26fe228d7baa0d47a940d7bebb1727be331f41c31a8f4d6ef8678fc96cc8a1dd60ad languageName: node linkType: hard -"less@npm:4.1.3": - version: 4.1.3 - resolution: "less@npm:4.1.3" +"less@npm:4.4.2": + version: 4.4.2 + resolution: "less@npm:4.4.2" dependencies: copy-anything: "npm:^2.0.1" errno: "npm:^0.1.1" @@ -14186,7 +14186,7 @@ __metadata: optional: true bin: lessc: bin/lessc - checksum: 10/d0688b6b46196b6d5378e4de153678e8b52d991d1a738e469fbc798a61d39df37ad4496ee398e26d59aad4bd463839441046542080b17e5719628fb4196e6ecc + checksum: 10/634e669514e6c59270b04bb8b9f9b058bf07f99a3d06cda068b60576c84cfe79bfe83bde5d84abd35c37118b0342924f978a178dc8103be0e3ea85ab75c0feb2 languageName: node linkType: hard @@ -14255,8 +14255,8 @@ __metadata: eslint-webpack-plugin: "npm:^5.0.2" file-loader: "npm:6.2.0" globals: "npm:^16.4.0" - less: "npm:4.1.3" - less-loader: "npm:12.2.0" + less: "npm:4.4.2" + less-loader: "npm:12.3.0" prop-types: "npm:^15.8.1" raw-loader: "npm:4.0.2" react-hot-loader: "npm:4.13.1" @@ -16326,8 +16326,8 @@ __metadata: file-loader: "npm:6.2.0" globals: "npm:^16.4.0" jest: "npm:^30.2.0" - less: "npm:4.1.3" - less-loader: "npm:12.2.0" + less: "npm:4.4.2" + less-loader: "npm:12.3.0" lodash: "npm:4.17.21" promise: "npm:^8.3.0" prop-types: "npm:^15.8.1" @@ -17304,8 +17304,8 @@ __metadata: html-react-parser: "npm:^5.2.7" i18n-webpack-plugin: "npm:1.0.0" jest: "npm:^30.2.0" - less: "npm:4.1.3" - less-loader: "npm:12.2.0" + less: "npm:4.4.2" + less-loader: "npm:12.3.0" localization: "npm:^1.0.2" object-assign: "npm:*" prop-types: "npm:^15.8.1" @@ -18760,8 +18760,8 @@ __metadata: eslint-webpack-plugin: "npm:^5.0.2" file-loader: "npm:6.2.0" globals: "npm:^16.4.0" - less: "npm:4.1.3" - less-loader: "npm:12.2.0" + less: "npm:4.4.2" + less-loader: "npm:12.3.0" prop-types: "npm:^15.8.1" raw-loader: "npm:^4.0.2" react: "npm:^16.14.0" @@ -19231,8 +19231,8 @@ __metadata: eslint-webpack-plugin: "npm:^5.0.2" file-loader: "npm:6.2.0" globals: "npm:^16.4.0" - less: "npm:4.1.3" - less-loader: "npm:12.2.0" + less: "npm:4.4.2" + less-loader: "npm:12.3.0" prop-types: "npm:^15.8.1" raw-loader: "npm:4.0.2" react: "npm:^16.14.0" @@ -19371,8 +19371,8 @@ __metadata: eslint-webpack-plugin: "npm:^5.0.2" file-loader: "npm:6.2.0" globals: "npm:^16.4.0" - less: "npm:4.1.3" - less-loader: "npm:12.2.0" + less: "npm:4.4.2" + less-loader: "npm:12.3.0" prop-types: "npm:^15.8.1" raw-loader: "npm:4.0.2" react: "npm:^16.14.0" @@ -19461,8 +19461,8 @@ __metadata: eslint-webpack-plugin: "npm:^5.0.2" file-loader: "npm:6.2.0" globals: "npm:^16.4.0" - less: "npm:4.1.3" - less-loader: "npm:12.2.0" + less: "npm:4.4.2" + less-loader: "npm:12.3.0" null-loader: "npm:^4.0.1" prop-types: "npm:^15.8.1" raw-loader: "npm:4.0.2" @@ -19720,8 +19720,8 @@ __metadata: eslint-webpack-plugin: "npm:^5.0.2" globals: "npm:^16.4.0" i18n-webpack-plugin: "npm:1.0.0" - less: "npm:4.1.3" - less-loader: "npm:12.2.0" + less: "npm:4.4.2" + less-loader: "npm:12.3.0" localization: "npm:^1.0.2" prop-types: "npm:^15.8.1" raw-loader: "npm:^4.0.2" @@ -19772,8 +19772,8 @@ __metadata: file-loader: "npm:6.2.0" globals: "npm:^16.4.0" jest: "npm:^30.2.0" - less: "npm:4.1.3" - less-loader: "npm:12.2.0" + less: "npm:4.4.2" + less-loader: "npm:12.3.0" prop-types: "npm:^15.8.1" raw-loader: "npm:4.0.2" react: "npm:^16.14.0" @@ -19815,8 +19815,8 @@ __metadata: eslint-webpack-plugin: "npm:^5.0.2" file-loader: "npm:6.2.0" globals: "npm:^16.4.0" - less: "npm:4.1.3" - less-loader: "npm:12.2.0" + less: "npm:4.4.2" + less-loader: "npm:12.3.0" prop-types: "npm:^15.8.1" raw-loader: "npm:4.0.2" react: "npm:^16.14.0" @@ -20679,8 +20679,8 @@ __metadata: eslint-webpack-plugin: "npm:^5.0.2" file-loader: "npm:6.2.0" globals: "npm:^16.4.0" - less: "npm:4.1.3" - less-loader: "npm:12.2.0" + less: "npm:4.4.2" + less-loader: "npm:12.3.0" prop-types: "npm:^15.8.1" raw-loader: "npm:4.0.2" react: "npm:^16.14.0" @@ -20720,8 +20720,8 @@ __metadata: eslint-webpack-plugin: "npm:^5.0.2" file-loader: "npm:6.2.0" globals: "npm:^16.4.0" - less: "npm:4.1.3" - less-loader: "npm:12.2.0" + less: "npm:4.4.2" + less-loader: "npm:12.3.0" object-path: "npm:0.11.8" prop-types: "npm:^15.8.1" raw-loader: "npm:4.0.2" @@ -20819,8 +20819,8 @@ __metadata: eslint-webpack-plugin: "npm:^5.0.2" file-loader: "npm:6.2.0" globals: "npm:^16.4.0" - less: "npm:4.1.3" - less-loader: "npm:12.2.0" + less: "npm:4.4.2" + less-loader: "npm:12.3.0" prop-types: "npm:^15.8.1" raw-loader: "npm:4.0.2" react: "npm:^16.14.0" @@ -21707,8 +21707,8 @@ __metadata: file-loader: "npm:6.2.0" globals: "npm:^16.4.0" jest: "npm:^30.2.0" - less: "npm:4.1.3" - less-loader: "npm:12.2.0" + less: "npm:4.4.2" + less-loader: "npm:12.3.0" localization: "npm:^1.0.2" null-loader: "npm:^4.0.1" prop-types: "npm:^15.8.1" From 3dbebb21f9867bd1f159aaee28a2ef54af73679b Mon Sep 17 00:00:00 2001 From: Brian Dukes Date: Tue, 21 Oct 2025 17:07:49 -0500 Subject: [PATCH 116/199] Bump nanoid to 5.1.6 --- .../ClientSide/Dnn.React.Common/package.json | 2 +- yarn.lock | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/package.json b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/package.json index bf7393ef689..06c28a52cf1 100644 --- a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/package.json +++ b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/package.json @@ -78,7 +78,7 @@ "file-loader": "6.2.0", "less": "4.4.2", "less-loader": "12.3.0", - "nanoid": "^5.0.7", + "nanoid": "^5.1.6", "prop-types": "^15.8.1", "raw-loader": "4.0.2", "react": "^16.14.0", diff --git a/yarn.lock b/yarn.lock index e5f716478bc..70eb6ac8423 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1662,7 +1662,7 @@ __metadata: interact.js: "npm:^1.2.8" less: "npm:4.4.2" less-loader: "npm:12.3.0" - nanoid: "npm:^5.0.7" + nanoid: "npm:^5.1.6" prop-types: "npm:^15.8.1" raw-loader: "npm:4.0.2" react: "npm:^16.14.0" @@ -15266,12 +15266,12 @@ __metadata: languageName: node linkType: hard -"nanoid@npm:^5.0.7": - version: 5.1.5 - resolution: "nanoid@npm:5.1.5" +"nanoid@npm:^5.1.6": + version: 5.1.6 + resolution: "nanoid@npm:5.1.6" bin: nanoid: bin/nanoid.js - checksum: 10/6de2d006b51c983be385ef7ee285f7f2a57bd96f8c0ca881c4111461644bd81fafc2544f8e07cb834ca0f3e0f3f676c1fe78052183f008b0809efe6e273119f5 + checksum: 10/4109dbcf596d7f297a9b42f459b8f01694a03ebbdd2f41408d963ad54e5ec7234cbe7b4acad137751f31add11bb4fb3415a3e688082516745812811f05570014 languageName: node linkType: hard From a38c9608efe1922333bab6cc87e5cde91311e08d Mon Sep 17 00:00:00 2001 From: Brian Dukes Date: Tue, 21 Oct 2025 17:08:55 -0500 Subject: [PATCH 117/199] Remove unused object-assign package --- Dnn.AdminExperience/ClientSide/Prompt.Web/package.json | 1 - yarn.lock | 3 +-- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/Dnn.AdminExperience/ClientSide/Prompt.Web/package.json b/Dnn.AdminExperience/ClientSide/Prompt.Web/package.json index 7f78a092896..e3954842e5c 100644 --- a/Dnn.AdminExperience/ClientSide/Prompt.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Prompt.Web/package.json @@ -41,7 +41,6 @@ "less": "4.4.2", "less-loader": "12.3.0", "localization": "^1.0.2", - "object-assign": "*", "prop-types": "^15.8.1", "raw-loader": "4.0.2", "react": "^16.14.0", diff --git a/yarn.lock b/yarn.lock index 70eb6ac8423..ab24a828037 100644 --- a/yarn.lock +++ b/yarn.lock @@ -15768,7 +15768,7 @@ __metadata: languageName: node linkType: hard -"object-assign@npm:*, object-assign@npm:^4, object-assign@npm:^4.1.1": +"object-assign@npm:^4, object-assign@npm:^4.1.1": version: 4.1.1 resolution: "object-assign@npm:4.1.1" checksum: 10/fcc6e4ea8c7fe48abfbb552578b1c53e0d194086e2e6bbbf59e0a536381a292f39943c6e9628af05b5528aa5e3318bb30d6b2e53cadaf5b8fe9e12c4b69af23f @@ -17307,7 +17307,6 @@ __metadata: less: "npm:4.4.2" less-loader: "npm:12.3.0" localization: "npm:^1.0.2" - object-assign: "npm:*" prop-types: "npm:^15.8.1" raw-loader: "npm:4.0.2" react: "npm:^16.14.0" From 8ccfb075f74d3a66165f2ebfc7881f5778979e78 Mon Sep 17 00:00:00 2001 From: Brian Dukes Date: Tue, 21 Oct 2025 17:09:30 -0500 Subject: [PATCH 118/199] Bump throttle-debounce to 5.0.2 --- .../ClientSide/AdminLogs.Web/package.json | 2 +- .../ClientSide/Bundle.Web/package.json | 2 +- .../ClientSide/Dnn.React.Common/package.json | 2 +- .../ClientSide/Pages.Web/package.json | 2 +- .../ClientSide/Prompt.Web/package.json | 2 +- .../ClientSide/Roles.Web/package.json | 2 +- .../SiteImportExport.Web/package.json | 2 +- .../ClientSide/Users.Web/package.json | 2 +- .../Users.Web/src/_exportables/package.json | 2 +- yarn.lock | 27 +++++++------------ 10 files changed, 19 insertions(+), 26 deletions(-) diff --git a/Dnn.AdminExperience/ClientSide/AdminLogs.Web/package.json b/Dnn.AdminExperience/ClientSide/AdminLogs.Web/package.json index 5745d7b651f..2a1b0964e5d 100644 --- a/Dnn.AdminExperience/ClientSide/AdminLogs.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/AdminLogs.Web/package.json @@ -45,7 +45,7 @@ "redux-immutable-state-invariant": "2.1.0", "redux-thunk": "2.4.2", "style-loader": "^4.0.0", - "throttle-debounce": "^5.0.0", + "throttle-debounce": "^5.0.2", "url-loader": "1.1.2", "webpack": "5.94.0", "webpack-bundle-size-analyzer": "3.1.0", diff --git a/Dnn.AdminExperience/ClientSide/Bundle.Web/package.json b/Dnn.AdminExperience/ClientSide/Bundle.Web/package.json index 7bcb36422f4..d9964b24870 100644 --- a/Dnn.AdminExperience/ClientSide/Bundle.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Bundle.Web/package.json @@ -53,7 +53,7 @@ "redux-thunk": "2.4.2", "source-map-loader": "^0.2.4", "style-loader": "4.0.0", - "throttle-debounce": "5.0.0", + "throttle-debounce": "5.0.2", "url-loader": "1.1.2", "webpack": "5.94.0", "webpack-bundle-analyzer": "^4.9.0", diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/package.json b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/package.json index 06c28a52cf1..ea9db3bf567 100644 --- a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/package.json +++ b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/package.json @@ -42,7 +42,7 @@ "react-widgets": "^5.8.4", "redux-undo": "^1.0.0-beta9", "scroll": "^3.0.1", - "throttle-debounce": "^5.0.0" + "throttle-debounce": "^5.0.2" }, "devDependencies": { "@babel/core": "^7.28.4", diff --git a/Dnn.AdminExperience/ClientSide/Pages.Web/package.json b/Dnn.AdminExperience/ClientSide/Pages.Web/package.json index d4170a104e2..815cca582bb 100644 --- a/Dnn.AdminExperience/ClientSide/Pages.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Pages.Web/package.json @@ -56,7 +56,7 @@ "react-widgets": "5.8.4", "string.prototype.startswith": "1.0.1", "style-loader": "^4.0.0", - "throttle-debounce": "^5.0.0", + "throttle-debounce": "^5.0.2", "uglifyjs-webpack-plugin": "^2.2.0", "url-loader": "1.1.2", "webpack": "5.94.0", diff --git a/Dnn.AdminExperience/ClientSide/Prompt.Web/package.json b/Dnn.AdminExperience/ClientSide/Prompt.Web/package.json index e3954842e5c..76ed50ae783 100644 --- a/Dnn.AdminExperience/ClientSide/Prompt.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Prompt.Web/package.json @@ -57,7 +57,7 @@ "redux-mock-store": "^1.5.4", "redux-thunk": "2.4.2", "style-loader": "^4.0.0", - "throttle-debounce": "^5.0.0", + "throttle-debounce": "^5.0.2", "url-loader": "1.1.2", "webpack": "5.94.0", "webpack-cli": "5.1.4", diff --git a/Dnn.AdminExperience/ClientSide/Roles.Web/package.json b/Dnn.AdminExperience/ClientSide/Roles.Web/package.json index 505dbb9b996..75321dbbad6 100644 --- a/Dnn.AdminExperience/ClientSide/Roles.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Roles.Web/package.json @@ -38,7 +38,7 @@ "react-dom": "^16.14.0", "react-hot-loader": "4.13.1", "style-loader": "4.0.0", - "throttle-debounce": "5.0.0", + "throttle-debounce": "5.0.2", "url-loader": "1.1.2", "webpack": "5.94.0", "webpack-bundle-size-analyzer": "3.1.0", diff --git a/Dnn.AdminExperience/ClientSide/SiteImportExport.Web/package.json b/Dnn.AdminExperience/ClientSide/SiteImportExport.Web/package.json index fc3d0039136..633e2e405f0 100644 --- a/Dnn.AdminExperience/ClientSide/SiteImportExport.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/SiteImportExport.Web/package.json @@ -49,7 +49,7 @@ "redux-thunk": "2.4.2", "style-loader": "^4.0.0", "svg-url-loader": "^8.0.0", - "throttle-debounce": "^5.0.0", + "throttle-debounce": "^5.0.2", "url-loader": "1.1.2", "utils": "^0.3.1", "webpack": "5.94.0", diff --git a/Dnn.AdminExperience/ClientSide/Users.Web/package.json b/Dnn.AdminExperience/ClientSide/Users.Web/package.json index aa4597ad9cc..71d9e49da2a 100644 --- a/Dnn.AdminExperience/ClientSide/Users.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Users.Web/package.json @@ -43,7 +43,7 @@ "redux-thunk": "^2.4.2", "services": "^0.0.3", "style-loader": "^4.0.0", - "throttle-debounce": "^5.0.0", + "throttle-debounce": "^5.0.2", "url-loader": "1.1.2", "utils": "^0.3.1", "webpack": "5.94.0", diff --git a/Dnn.AdminExperience/ClientSide/Users.Web/src/_exportables/package.json b/Dnn.AdminExperience/ClientSide/Users.Web/src/_exportables/package.json index 338a342218e..b44c154f78b 100644 --- a/Dnn.AdminExperience/ClientSide/Users.Web/src/_exportables/package.json +++ b/Dnn.AdminExperience/ClientSide/Users.Web/src/_exportables/package.json @@ -40,7 +40,7 @@ "react-widgets": "^5.8.4", "redux": "4.2.1", "style-loader": "^4.0.0", - "throttle-debounce": "^5.0.0", + "throttle-debounce": "^5.0.2", "utils": "^0.3.1", "webpack": "5.94.0", "webpack-cli": "5.1.4", diff --git a/yarn.lock b/yarn.lock index ab24a828037..893ffeda092 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1686,7 +1686,7 @@ __metadata: scroll: "npm:^3.0.1" storybook: "npm:9.1.13" style-loader: "npm:^4.0.0" - throttle-debounce: "npm:^5.0.0" + throttle-debounce: "npm:^5.0.2" url-loader: "npm:1.1.2" webpack: "npm:5.94.0" webpack-bundle-size-analyzer: "npm:3.1.0" @@ -5910,7 +5910,7 @@ __metadata: redux-immutable-state-invariant: "npm:2.1.0" redux-thunk: "npm:2.4.2" style-loader: "npm:^4.0.0" - throttle-debounce: "npm:^5.0.0" + throttle-debounce: "npm:^5.0.2" url-loader: "npm:1.1.2" webpack: "npm:5.94.0" webpack-bundle-size-analyzer: "npm:3.1.0" @@ -9342,7 +9342,7 @@ __metadata: react-widgets: "npm:^5.8.4" redux: "npm:4.2.1" style-loader: "npm:^4.0.0" - throttle-debounce: "npm:^5.0.0" + throttle-debounce: "npm:^5.0.2" utils: "npm:^0.3.1" webpack: "npm:5.94.0" webpack-cli: "npm:5.1.4" @@ -10855,7 +10855,7 @@ __metadata: redux-thunk: "npm:2.4.2" source-map-loader: "npm:^0.2.4" style-loader: "npm:4.0.0" - throttle-debounce: "npm:5.0.0" + throttle-debounce: "npm:5.0.2" url-loader: "npm:1.1.2" webpack: "npm:5.94.0" webpack-bundle-analyzer: "npm:^4.9.0" @@ -16341,7 +16341,7 @@ __metadata: react-widgets: "npm:5.8.4" string.prototype.startswith: "npm:1.0.1" style-loader: "npm:^4.0.0" - throttle-debounce: "npm:^5.0.0" + throttle-debounce: "npm:^5.0.2" uglifyjs-webpack-plugin: "npm:^2.2.0" url-loader: "npm:1.1.2" url-parse: "npm:^1.5.10" @@ -17323,7 +17323,7 @@ __metadata: redux-mock-store: "npm:^1.5.4" redux-thunk: "npm:2.4.2" style-loader: "npm:^4.0.0" - throttle-debounce: "npm:^5.0.0" + throttle-debounce: "npm:^5.0.2" url-loader: "npm:1.1.2" webpack: "npm:5.94.0" webpack-cli: "npm:5.1.4" @@ -18769,7 +18769,7 @@ __metadata: react-hot-loader: "npm:4.13.1" react-widgets: "npm:^5.8.4" style-loader: "npm:4.0.0" - throttle-debounce: "npm:5.0.0" + throttle-debounce: "npm:5.0.2" url-loader: "npm:1.1.2" webpack: "npm:5.94.0" webpack-bundle-size-analyzer: "npm:3.1.0" @@ -19738,7 +19738,7 @@ __metadata: redux-thunk: "npm:2.4.2" style-loader: "npm:^4.0.0" svg-url-loader: "npm:^8.0.0" - throttle-debounce: "npm:^5.0.0" + throttle-debounce: "npm:^5.0.2" url-loader: "npm:1.1.2" utils: "npm:^0.3.1" webpack: "npm:5.94.0" @@ -20850,14 +20850,7 @@ __metadata: languageName: node linkType: hard -"throttle-debounce@npm:5.0.0": - version: 5.0.0 - resolution: "throttle-debounce@npm:5.0.0" - checksum: 10/bedd5a20cd226c7a6e765719c73fa8ec7a43f0c552bfb658cbe7ed51e16ab5f315dd2baed66904c004a1d16b0bb4e85e10126695a787b13516c37d4907426ec5 - languageName: node - linkType: hard - -"throttle-debounce@npm:^5.0.0": +"throttle-debounce@npm:5.0.2, throttle-debounce@npm:^5.0.2": version: 5.0.2 resolution: "throttle-debounce@npm:5.0.2" checksum: 10/9a5e5ae7f93127d921e913ad741e75e6d2bb946d15e1898ed541037bc646adb9a759c481385400be917ec6d93f078fd8b016980c1a9143e09ea88c99559b0c93 @@ -21725,7 +21718,7 @@ __metadata: redux-thunk: "npm:^2.4.2" services: "npm:^0.0.3" style-loader: "npm:^4.0.0" - throttle-debounce: "npm:^5.0.0" + throttle-debounce: "npm:^5.0.2" url-loader: "npm:1.1.2" utils: "npm:^0.3.1" webpack: "npm:5.94.0" From 64e1adfcb30f3cb643b0fa89aeebd699f4d4831e Mon Sep 17 00:00:00 2001 From: Brian Dukes Date: Tue, 21 Oct 2025 17:10:03 -0500 Subject: [PATCH 119/199] Bump typescript to 5.9.3 Bump tsx to 4.20.6 --- DNN Platform/Dnn.ClientSide/package.json | 4 +- .../ResourceManager.Web/package.json | 2 +- DNN Platform/Skins/Aperture/package.json | 4 +- yarn.lock | 42 ++++++++++++++----- 4 files changed, 36 insertions(+), 16 deletions(-) diff --git a/DNN Platform/Dnn.ClientSide/package.json b/DNN Platform/Dnn.ClientSide/package.json index 76a1f1232e2..85bee4a3d27 100644 --- a/DNN Platform/Dnn.ClientSide/package.json +++ b/DNN Platform/Dnn.ClientSide/package.json @@ -30,7 +30,7 @@ "postcss-cli": "^11.0.1", "postcss-import": "^16.1.1", "sass": "^1.93.2", - "tsx": "^4.19.2", - "typescript": "^5.7.3" + "tsx": "^4.20.6", + "typescript": "^5.9.3" } } diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/package.json b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/package.json index c562b9d1f3f..7d77a7e7aae 100644 --- a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/package.json +++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/package.json @@ -40,7 +40,7 @@ "@typescript-eslint/utils": "^8.46.2", "eslint": "^9.38.0", "jiti": "^2.6.1", - "typescript": "^5.8.3", + "typescript": "^5.9.3", "typescript-eslint": "^8.46.2" } } diff --git a/DNN Platform/Skins/Aperture/package.json b/DNN Platform/Skins/Aperture/package.json index aabd949ffcd..88efa9d1622 100644 --- a/DNN Platform/Skins/Aperture/package.json +++ b/DNN Platform/Skins/Aperture/package.json @@ -26,8 +26,8 @@ "postcss-cli": "^11.0.1", "postcss-import": "^16.1.1", "sass": "^1.93.2", - "tsx": "^4.19.2", - "typescript": "^5.3.2", + "tsx": "^4.20.6", + "typescript": "^5.9.3", "zip-lib": "^0.7.3" }, "browserslist": [ diff --git a/yarn.lock b/yarn.lock index 893ffeda092..d9b843dffdf 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6158,8 +6158,8 @@ __metadata: postcss-cli: "npm:^11.0.1" postcss-import: "npm:^16.1.1" sass: "npm:^1.93.2" - tsx: "npm:^4.19.2" - typescript: "npm:^5.3.2" + tsx: "npm:^4.20.6" + typescript: "npm:^5.9.3" zip-lib: "npm:^0.7.3" languageName: unknown linkType: soft @@ -9231,7 +9231,7 @@ __metadata: "@typescript-eslint/utils": "npm:^8.46.2" eslint: "npm:^9.38.0" jiti: "npm:^2.6.1" - typescript: "npm:^5.8.3" + typescript: "npm:^5.9.3" typescript-eslint: "npm:^8.46.2" languageName: unknown linkType: soft @@ -9367,8 +9367,8 @@ __metadata: postcss-cli: "npm:^11.0.1" postcss-import: "npm:^16.1.1" sass: "npm:^1.93.2" - tsx: "npm:^4.19.2" - typescript: "npm:^5.7.3" + tsx: "npm:^4.20.6" + typescript: "npm:^5.9.3" languageName: unknown linkType: soft @@ -21130,9 +21130,9 @@ __metadata: languageName: node linkType: hard -"tsx@npm:^4.19.2": - version: 4.20.3 - resolution: "tsx@npm:4.20.3" +"tsx@npm:^4.20.6": + version: 4.20.6 + resolution: "tsx@npm:4.20.6" dependencies: esbuild: "npm:~0.25.0" fsevents: "npm:~2.3.3" @@ -21142,7 +21142,7 @@ __metadata: optional: true bin: tsx: dist/cli.mjs - checksum: 10/62f40d06a41deebd51690b086f4387d842a826542639b6a26fd6cf09158c6b44956ca9d9088146330ab0622587b2329981cc3584b89025040f3aa100c50ac13c + checksum: 10/16396df25c474d7526f7adf9cd0c1f0b71a8c42f70bb93c2399c561eae3998abc015e8fe36a1e149fd289472919fb02816c5b46d72cf9f4335932419ecf2de8b languageName: node linkType: hard @@ -21311,7 +21311,7 @@ __metadata: languageName: node linkType: hard -"typescript@npm:>=3 < 6, typescript@npm:^5.3.2, typescript@npm:^5.7.3, typescript@npm:^5.8.3": +"typescript@npm:>=3 < 6": version: 5.8.3 resolution: "typescript@npm:5.8.3" bin: @@ -21321,7 +21321,17 @@ __metadata: languageName: node linkType: hard -"typescript@patch:typescript@npm%3A>=3 < 6#optional!builtin, typescript@patch:typescript@npm%3A^5.3.2#optional!builtin, typescript@patch:typescript@npm%3A^5.7.3#optional!builtin, typescript@patch:typescript@npm%3A^5.8.3#optional!builtin": +"typescript@npm:^5.9.3": + version: 5.9.3 + resolution: "typescript@npm:5.9.3" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 10/c089d9d3da2729fd4ac517f9b0e0485914c4b3c26f80dc0cffcb5de1719a17951e92425d55db59515c1a7ddab65808466debb864d0d56dcf43f27007d0709594 + languageName: node + linkType: hard + +"typescript@patch:typescript@npm%3A>=3 < 6#optional!builtin": version: 5.8.3 resolution: "typescript@patch:typescript@npm%3A5.8.3#optional!builtin::version=5.8.3&hash=5786d5" bin: @@ -21331,6 +21341,16 @@ __metadata: languageName: node linkType: hard +"typescript@patch:typescript@npm%3A^5.9.3#optional!builtin": + version: 5.9.3 + resolution: "typescript@patch:typescript@npm%3A5.9.3#optional!builtin::version=5.9.3&hash=5786d5" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 10/696e1b017bc2635f4e0c94eb4435357701008e2f272f553d06e35b494b8ddc60aa221145e286c28ace0c89ee32827a28c2040e3a69bdc108b1a5dc8fb40b72e3 + languageName: node + linkType: hard + "ua-parser-js@npm:^1.0.33": version: 1.0.40 resolution: "ua-parser-js@npm:1.0.40" From e8bbcc96ad50328f42994bfa9fc8a9ed8c48cc16 Mon Sep 17 00:00:00 2001 From: Brian Dukes Date: Tue, 21 Oct 2025 17:11:35 -0500 Subject: [PATCH 120/199] Bump webpack to 5.102.1 Bump webpack-bundle-analyzer to 4.10.2 Bump webpack-cli to 6.0.1 Bump webpack-dev-server to 5.2.2 --- .../ClientSide/AdminLogs.Web/package.json | 6 +- .../ClientSide/Bundle.Web/package.json | 8 +- .../ClientSide/Dnn.React.Common/package.json | 6 +- .../ClientSide/Extensions.Web/package.json | 6 +- .../ClientSide/Licensing.Web/package.json | 6 +- .../ClientSide/Pages.Web/package.json | 6 +- .../ClientSide/Prompt.Web/package.json | 6 +- .../ClientSide/Roles.Web/package.json | 6 +- .../ClientSide/Security.Web/package.json | 6 +- .../ClientSide/Seo.Web/package.json | 6 +- .../ClientSide/Servers.Web/package.json | 6 +- .../ClientSide/SiteGroups.Web/package.json | 6 +- .../SiteImportExport.Web/package.json | 6 +- .../ClientSide/SiteSettings.Web/package.json | 6 +- .../ClientSide/Sites.Web/package.json | 6 +- .../Sites.Web/src/_exportables/package.json | 6 +- .../ClientSide/TaskScheduler.Web/package.json | 6 +- .../ClientSide/Themes.Web/package.json | 6 +- .../ClientSide/Users.Web/package.json | 6 +- .../Users.Web/src/_exportables/package.json | 6 +- .../ClientSide/Vocabularies.Web/package.json | 6 +- yarn.lock | 389 +++++++++++------- 22 files changed, 299 insertions(+), 218 deletions(-) diff --git a/Dnn.AdminExperience/ClientSide/AdminLogs.Web/package.json b/Dnn.AdminExperience/ClientSide/AdminLogs.Web/package.json index 2a1b0964e5d..634ad04dacd 100644 --- a/Dnn.AdminExperience/ClientSide/AdminLogs.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/AdminLogs.Web/package.json @@ -47,9 +47,9 @@ "style-loader": "^4.0.0", "throttle-debounce": "^5.0.2", "url-loader": "1.1.2", - "webpack": "5.94.0", + "webpack": "5.102.1", "webpack-bundle-size-analyzer": "3.1.0", - "webpack-cli": "5.1.4", - "webpack-dev-server": "5.2.1" + "webpack-cli": "6.0.1", + "webpack-dev-server": "5.2.2" } } diff --git a/Dnn.AdminExperience/ClientSide/Bundle.Web/package.json b/Dnn.AdminExperience/ClientSide/Bundle.Web/package.json index d9964b24870..d01e3dc4da7 100644 --- a/Dnn.AdminExperience/ClientSide/Bundle.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Bundle.Web/package.json @@ -55,10 +55,10 @@ "style-loader": "4.0.0", "throttle-debounce": "5.0.2", "url-loader": "1.1.2", - "webpack": "5.94.0", - "webpack-bundle-analyzer": "^4.9.0", - "webpack-cli": "5.1.4", - "webpack-dev-server": "5.2.1" + "webpack": "5.102.1", + "webpack-bundle-analyzer": "^4.10.2", + "webpack-cli": "6.0.1", + "webpack-dev-server": "5.2.2" }, "dependencies": { "@dnnsoftware/dnn-react-common": "10.1.0" diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/package.json b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/package.json index ea9db3bf567..f5fa0b3eea6 100644 --- a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/package.json +++ b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/package.json @@ -89,10 +89,10 @@ "storybook": "9.1.13", "style-loader": "^4.0.0", "url-loader": "1.1.2", - "webpack": "5.94.0", + "webpack": "5.102.1", "webpack-bundle-size-analyzer": "3.1.0", - "webpack-cli": "5.1.4", - "webpack-dev-server": "5.2.1", + "webpack-cli": "6.0.1", + "webpack-dev-server": "5.2.2", "webpack-node-externals": "^3.0.0" }, "peerDependencies": { diff --git a/Dnn.AdminExperience/ClientSide/Extensions.Web/package.json b/Dnn.AdminExperience/ClientSide/Extensions.Web/package.json index eea60fa19fc..835c44542f7 100644 --- a/Dnn.AdminExperience/ClientSide/Extensions.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Extensions.Web/package.json @@ -35,9 +35,9 @@ "react-hot-loader": "4.13.1", "style-loader": "^4.0.0", "url-loader": "1.1.2", - "webpack": "5.94.0", + "webpack": "5.102.1", "webpack-bundle-size-analyzer": "3.1.0", - "webpack-cli": "5.1.4", - "webpack-dev-server": "5.2.1" + "webpack-cli": "6.0.1", + "webpack-dev-server": "5.2.2" } } diff --git a/Dnn.AdminExperience/ClientSide/Licensing.Web/package.json b/Dnn.AdminExperience/ClientSide/Licensing.Web/package.json index b7576008b57..c46f4c9dfef 100644 --- a/Dnn.AdminExperience/ClientSide/Licensing.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Licensing.Web/package.json @@ -36,9 +36,9 @@ "react-modal": "3.16.1", "style-loader": "^4.0.0", "url-loader": "1.1.2", - "webpack": "5.94.0", + "webpack": "5.102.1", "webpack-bundle-size-analyzer": "3.1.0", - "webpack-cli": "5.1.4", - "webpack-dev-server": "5.2.1" + "webpack-cli": "6.0.1", + "webpack-dev-server": "5.2.2" } } diff --git a/Dnn.AdminExperience/ClientSide/Pages.Web/package.json b/Dnn.AdminExperience/ClientSide/Pages.Web/package.json index 815cca582bb..dba7d915dbc 100644 --- a/Dnn.AdminExperience/ClientSide/Pages.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Pages.Web/package.json @@ -59,10 +59,10 @@ "throttle-debounce": "^5.0.2", "uglifyjs-webpack-plugin": "^2.2.0", "url-loader": "1.1.2", - "webpack": "5.94.0", + "webpack": "5.102.1", "webpack-bundle-size-analyzer": "3.1.0", - "webpack-cli": "5.1.4", - "webpack-dev-server": "5.2.1" + "webpack-cli": "6.0.1", + "webpack-dev-server": "5.2.2" }, "dependencies": { "dayjs": "^1.11.18", diff --git a/Dnn.AdminExperience/ClientSide/Prompt.Web/package.json b/Dnn.AdminExperience/ClientSide/Prompt.Web/package.json index 76ed50ae783..7ee3377271c 100644 --- a/Dnn.AdminExperience/ClientSide/Prompt.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Prompt.Web/package.json @@ -59,9 +59,9 @@ "style-loader": "^4.0.0", "throttle-debounce": "^5.0.2", "url-loader": "1.1.2", - "webpack": "5.94.0", - "webpack-cli": "5.1.4", - "webpack-dev-server": "5.2.1" + "webpack": "5.102.1", + "webpack-cli": "6.0.1", + "webpack-dev-server": "5.2.2" }, "dependencies": { "dompurify": "^3.3.0", diff --git a/Dnn.AdminExperience/ClientSide/Roles.Web/package.json b/Dnn.AdminExperience/ClientSide/Roles.Web/package.json index 75321dbbad6..508d32d81ec 100644 --- a/Dnn.AdminExperience/ClientSide/Roles.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Roles.Web/package.json @@ -40,10 +40,10 @@ "style-loader": "4.0.0", "throttle-debounce": "5.0.2", "url-loader": "1.1.2", - "webpack": "5.94.0", + "webpack": "5.102.1", "webpack-bundle-size-analyzer": "3.1.0", - "webpack-cli": "5.1.4", - "webpack-dev-server": "5.2.1" + "webpack-cli": "6.0.1", + "webpack-dev-server": "5.2.2" }, "dependencies": { "react-widgets": "^5.8.4" diff --git a/Dnn.AdminExperience/ClientSide/Security.Web/package.json b/Dnn.AdminExperience/ClientSide/Security.Web/package.json index 3bff3debf5f..c119836b82a 100644 --- a/Dnn.AdminExperience/ClientSide/Security.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Security.Web/package.json @@ -39,9 +39,9 @@ "redux-thunk": "^2.4.2", "style-loader": "^4.0.0", "url-loader": "1.1.2", - "webpack": "5.94.0", + "webpack": "5.102.1", "webpack-bundle-size-analyzer": "3.1.0", - "webpack-cli": "5.1.4", - "webpack-dev-server": "5.2.1" + "webpack-cli": "6.0.1", + "webpack-dev-server": "5.2.2" } } diff --git a/Dnn.AdminExperience/ClientSide/Seo.Web/package.json b/Dnn.AdminExperience/ClientSide/Seo.Web/package.json index 8a3940c466c..65b8d5be8f2 100644 --- a/Dnn.AdminExperience/ClientSide/Seo.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Seo.Web/package.json @@ -40,9 +40,9 @@ "react-modal": "3.16.1", "style-loader": "^4.0.0", "url-loader": "1.1.2", - "webpack": "5.94.0", + "webpack": "5.102.1", "webpack-bundle-size-analyzer": "3.1.0", - "webpack-cli": "5.1.4", - "webpack-dev-server": "5.2.1" + "webpack-cli": "6.0.1", + "webpack-dev-server": "5.2.2" } } diff --git a/Dnn.AdminExperience/ClientSide/Servers.Web/package.json b/Dnn.AdminExperience/ClientSide/Servers.Web/package.json index 539459d1283..7e8c30bb5ba 100644 --- a/Dnn.AdminExperience/ClientSide/Servers.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Servers.Web/package.json @@ -39,10 +39,10 @@ "react-hot-loader": "4.13.1", "style-loader": "^4.0.0", "url-loader": "1.1.2", - "webpack": "5.94.0", + "webpack": "5.102.1", "webpack-bundle-size-analyzer": "3.1.0", - "webpack-cli": "5.1.4", - "webpack-dev-server": "5.2.1" + "webpack-cli": "6.0.1", + "webpack-dev-server": "5.2.2" }, "dependencies": { "react-custom-scrollbars": "^4.2.1" diff --git a/Dnn.AdminExperience/ClientSide/SiteGroups.Web/package.json b/Dnn.AdminExperience/ClientSide/SiteGroups.Web/package.json index e8fba0b4e58..2efd90314e2 100644 --- a/Dnn.AdminExperience/ClientSide/SiteGroups.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/SiteGroups.Web/package.json @@ -35,9 +35,9 @@ "react-hot-loader": "4.13.1", "style-loader": "^4.0.0", "url-loader": "1.1.2", - "webpack": "5.94.0", + "webpack": "5.102.1", "webpack-bundle-size-analyzer": "3.1.0", - "webpack-cli": "5.1.4", - "webpack-dev-server": "5.2.1" + "webpack-cli": "6.0.1", + "webpack-dev-server": "5.2.2" } } diff --git a/Dnn.AdminExperience/ClientSide/SiteImportExport.Web/package.json b/Dnn.AdminExperience/ClientSide/SiteImportExport.Web/package.json index 633e2e405f0..4b6bf387af9 100644 --- a/Dnn.AdminExperience/ClientSide/SiteImportExport.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/SiteImportExport.Web/package.json @@ -52,9 +52,9 @@ "throttle-debounce": "^5.0.2", "url-loader": "1.1.2", "utils": "^0.3.1", - "webpack": "5.94.0", + "webpack": "5.102.1", "webpack-bundle-size-analyzer": "3.1.0", - "webpack-cli": "5.1.4", - "webpack-dev-server": "5.2.1" + "webpack-cli": "6.0.1", + "webpack-dev-server": "5.2.2" } } diff --git a/Dnn.AdminExperience/ClientSide/SiteSettings.Web/package.json b/Dnn.AdminExperience/ClientSide/SiteSettings.Web/package.json index e53d26c55e5..b2f807b82c3 100644 --- a/Dnn.AdminExperience/ClientSide/SiteSettings.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/SiteSettings.Web/package.json @@ -47,9 +47,9 @@ "source-map-loader": "^0.2.4", "style-loader": "^4.0.0", "url-loader": "1.1.2", - "webpack": "5.94.0", + "webpack": "5.102.1", "webpack-bundle-size-analyzer": "3.1.0", - "webpack-cli": "5.1.4", - "webpack-dev-server": "5.2.1" + "webpack-cli": "6.0.1", + "webpack-dev-server": "5.2.2" } } diff --git a/Dnn.AdminExperience/ClientSide/Sites.Web/package.json b/Dnn.AdminExperience/ClientSide/Sites.Web/package.json index f2b281186de..70e52667505 100644 --- a/Dnn.AdminExperience/ClientSide/Sites.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Sites.Web/package.json @@ -35,9 +35,9 @@ "react-hot-loader": "4.13.1", "style-loader": "^4.0.0", "url-loader": "1.1.2", - "webpack": "5.94.0", + "webpack": "5.102.1", "webpack-bundle-size-analyzer": "3.1.0", - "webpack-cli": "5.1.4", - "webpack-dev-server": "5.2.1" + "webpack-cli": "6.0.1", + "webpack-dev-server": "5.2.2" } } diff --git a/Dnn.AdminExperience/ClientSide/Sites.Web/src/_exportables/package.json b/Dnn.AdminExperience/ClientSide/Sites.Web/src/_exportables/package.json index 9912e8915ae..26ca7c09418 100644 --- a/Dnn.AdminExperience/ClientSide/Sites.Web/src/_exportables/package.json +++ b/Dnn.AdminExperience/ClientSide/Sites.Web/src/_exportables/package.json @@ -37,8 +37,8 @@ "react-dom": "^16.14.0", "react-hot-loader": "4.13.1", "style-loader": "^4.0.0", - "webpack": "5.94.0", - "webpack-cli": "5.1.4", - "webpack-dev-server": "5.2.1" + "webpack": "5.102.1", + "webpack-cli": "6.0.1", + "webpack-dev-server": "5.2.2" } } diff --git a/Dnn.AdminExperience/ClientSide/TaskScheduler.Web/package.json b/Dnn.AdminExperience/ClientSide/TaskScheduler.Web/package.json index c165c1d409e..b4b3e4ada25 100644 --- a/Dnn.AdminExperience/ClientSide/TaskScheduler.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/TaskScheduler.Web/package.json @@ -40,9 +40,9 @@ "react-modal": "3.16.1", "style-loader": "^4.0.0", "url-loader": "1.1.2", - "webpack": "5.94.0", + "webpack": "5.102.1", "webpack-bundle-size-analyzer": "3.1.0", - "webpack-cli": "5.1.4", - "webpack-dev-server": "5.2.1" + "webpack-cli": "6.0.1", + "webpack-dev-server": "5.2.2" } } diff --git a/Dnn.AdminExperience/ClientSide/Themes.Web/package.json b/Dnn.AdminExperience/ClientSide/Themes.Web/package.json index 847062e00be..5f81427ac71 100644 --- a/Dnn.AdminExperience/ClientSide/Themes.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Themes.Web/package.json @@ -36,9 +36,9 @@ "react-hot-loader": "4.13.1", "style-loader": "^4.0.0", "url-loader": "1.1.2", - "webpack": "5.94.0", + "webpack": "5.102.1", "webpack-bundle-size-analyzer": "3.1.0", - "webpack-cli": "5.1.4", - "webpack-dev-server": "5.2.1" + "webpack-cli": "6.0.1", + "webpack-dev-server": "5.2.2" } } diff --git a/Dnn.AdminExperience/ClientSide/Users.Web/package.json b/Dnn.AdminExperience/ClientSide/Users.Web/package.json index 71d9e49da2a..e7b58d19e3d 100644 --- a/Dnn.AdminExperience/ClientSide/Users.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Users.Web/package.json @@ -46,10 +46,10 @@ "throttle-debounce": "^5.0.2", "url-loader": "1.1.2", "utils": "^0.3.1", - "webpack": "5.94.0", + "webpack": "5.102.1", "webpack-bundle-size-analyzer": "3.1.0", - "webpack-cli": "5.1.4", - "webpack-dev-server": "5.2.1" + "webpack-cli": "6.0.1", + "webpack-dev-server": "5.2.2" }, "dependencies": { "@dnnsoftware/dnn-react-common": "10.1.0", diff --git a/Dnn.AdminExperience/ClientSide/Users.Web/src/_exportables/package.json b/Dnn.AdminExperience/ClientSide/Users.Web/src/_exportables/package.json index b44c154f78b..da8d358b079 100644 --- a/Dnn.AdminExperience/ClientSide/Users.Web/src/_exportables/package.json +++ b/Dnn.AdminExperience/ClientSide/Users.Web/src/_exportables/package.json @@ -42,8 +42,8 @@ "style-loader": "^4.0.0", "throttle-debounce": "^5.0.2", "utils": "^0.3.1", - "webpack": "5.94.0", - "webpack-cli": "5.1.4", - "webpack-dev-server": "5.2.1" + "webpack": "5.102.1", + "webpack-cli": "6.0.1", + "webpack-dev-server": "5.2.2" } } diff --git a/Dnn.AdminExperience/ClientSide/Vocabularies.Web/package.json b/Dnn.AdminExperience/ClientSide/Vocabularies.Web/package.json index 2c8b5f56a69..063f7b1b529 100644 --- a/Dnn.AdminExperience/ClientSide/Vocabularies.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Vocabularies.Web/package.json @@ -40,9 +40,9 @@ "react-hot-loader": "4.13.1", "style-loader": "^4.0.0", "url-loader": "1.1.2", - "webpack": "5.94.0", + "webpack": "5.102.1", "webpack-bundle-size-analyzer": "3.1.0", - "webpack-cli": "5.1.4", - "webpack-dev-server": "5.2.1" + "webpack-cli": "6.0.1", + "webpack-dev-server": "5.2.2" } } diff --git a/yarn.lock b/yarn.lock index d9b843dffdf..ca09219e88e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1605,13 +1605,20 @@ __metadata: languageName: node linkType: hard -"@discoveryjs/json-ext@npm:0.5.7, @discoveryjs/json-ext@npm:^0.5.0": +"@discoveryjs/json-ext@npm:0.5.7": version: 0.5.7 resolution: "@discoveryjs/json-ext@npm:0.5.7" checksum: 10/b95682a852448e8ef50d6f8e3b7ba288aab3fd98a2bafbe46881a3db0c6e7248a2debe9e1ee0d4137c521e4743ca5bbcb1c0765c9d7b3e0ef53231506fec42b4 languageName: node linkType: hard +"@discoveryjs/json-ext@npm:^0.6.1": + version: 0.6.3 + resolution: "@discoveryjs/json-ext@npm:0.6.3" + checksum: 10/6cb35ce92c8f1e9533250da9a893def63cce4f9a4f67677259bf11619d83858ca9c010171f49b22d83153b7b7ff65c39bbbf0edf4734d67e864de1044b7a943c + languageName: node + linkType: hard + "@dnncommunity/dnn-elements@npm:^0.27.7": version: 0.27.7 resolution: "@dnncommunity/dnn-elements@npm:0.27.7" @@ -1688,10 +1695,10 @@ __metadata: style-loader: "npm:^4.0.0" throttle-debounce: "npm:^5.0.2" url-loader: "npm:1.1.2" - webpack: "npm:5.94.0" + webpack: "npm:5.102.1" webpack-bundle-size-analyzer: "npm:3.1.0" - webpack-cli: "npm:5.1.4" - webpack-dev-server: "npm:5.2.1" + webpack-cli: "npm:6.0.1" + webpack-dev-server: "npm:5.2.2" webpack-node-externals: "npm:^3.0.0" peerDependencies: prop-types: ^15.6.2 @@ -4653,7 +4660,7 @@ __metadata: languageName: node linkType: hard -"@types/estree@npm:*, @types/estree@npm:^1.0.0, @types/estree@npm:^1.0.5, @types/estree@npm:^1.0.6": +"@types/estree@npm:*, @types/estree@npm:^1.0.0, @types/estree@npm:^1.0.6, @types/estree@npm:^1.0.8": version: 1.0.8 resolution: "@types/estree@npm:1.0.8" checksum: 10/25a4c16a6752538ffde2826c2cc0c6491d90e69cd6187bef4a006dd2c3c45469f049e643d7e516c515f21484dc3d48fd5c870be158a5beb72f5baf3dc43e4099 @@ -5565,7 +5572,7 @@ __metadata: languageName: node linkType: hard -"@webassemblyjs/ast@npm:1.14.1, @webassemblyjs/ast@npm:^1.12.1, @webassemblyjs/ast@npm:^1.14.1": +"@webassemblyjs/ast@npm:1.14.1, @webassemblyjs/ast@npm:^1.14.1": version: 1.14.1 resolution: "@webassemblyjs/ast@npm:1.14.1" dependencies: @@ -5651,7 +5658,7 @@ __metadata: languageName: node linkType: hard -"@webassemblyjs/wasm-edit@npm:^1.12.1, @webassemblyjs/wasm-edit@npm:^1.14.1": +"@webassemblyjs/wasm-edit@npm:^1.14.1": version: 1.14.1 resolution: "@webassemblyjs/wasm-edit@npm:1.14.1" dependencies: @@ -5692,7 +5699,7 @@ __metadata: languageName: node linkType: hard -"@webassemblyjs/wasm-parser@npm:1.14.1, @webassemblyjs/wasm-parser@npm:^1.12.1, @webassemblyjs/wasm-parser@npm:^1.14.1": +"@webassemblyjs/wasm-parser@npm:1.14.1, @webassemblyjs/wasm-parser@npm:^1.14.1": version: 1.14.1 resolution: "@webassemblyjs/wasm-parser@npm:1.14.1" dependencies: @@ -5716,36 +5723,36 @@ __metadata: languageName: node linkType: hard -"@webpack-cli/configtest@npm:^2.1.1": - version: 2.1.1 - resolution: "@webpack-cli/configtest@npm:2.1.1" +"@webpack-cli/configtest@npm:^3.0.1": + version: 3.0.1 + resolution: "@webpack-cli/configtest@npm:3.0.1" peerDependencies: - webpack: 5.x.x - webpack-cli: 5.x.x - checksum: 10/9f9f9145c2d05471fc83d426db1df85cf49f329836b0c4b9f46b6948bed4b013464c00622b136d2a0a26993ce2306976682592245b08ee717500b1db45009a72 + webpack: ^5.82.0 + webpack-cli: 6.x.x + checksum: 10/a83301ff360de6c36fe98766f1f391db6149f0806450ce31484c49df3902584f73385453da23f3324a605d5afad4d2889654ada679afd49e35c59a2c4769ee97 languageName: node linkType: hard -"@webpack-cli/info@npm:^2.0.2": - version: 2.0.2 - resolution: "@webpack-cli/info@npm:2.0.2" +"@webpack-cli/info@npm:^3.0.1": + version: 3.0.1 + resolution: "@webpack-cli/info@npm:3.0.1" peerDependencies: - webpack: 5.x.x - webpack-cli: 5.x.x - checksum: 10/8f9a178afca5c82e113aed1efa552d64ee5ae4fdff63fe747c096a981ec74f18a5d07bd6e89bbe6715c3e57d96eea024a410e58977169489fe1df044c10dd94e + webpack: ^5.82.0 + webpack-cli: 6.x.x + checksum: 10/0ddcfd8b370d924f71cc085b17b31a77b362d8046fedb38ac601042733568cda05b0c8c7b1e0e1e050dc926ee76f754cd9c4f351e2b361a0d157465f8b03b689 languageName: node linkType: hard -"@webpack-cli/serve@npm:^2.0.5": - version: 2.0.5 - resolution: "@webpack-cli/serve@npm:2.0.5" +"@webpack-cli/serve@npm:^3.0.1": + version: 3.0.1 + resolution: "@webpack-cli/serve@npm:3.0.1" peerDependencies: - webpack: 5.x.x - webpack-cli: 5.x.x + webpack: ^5.82.0 + webpack-cli: 6.x.x peerDependenciesMeta: webpack-dev-server: optional: true - checksum: 10/20424e5c1e664e4d7ab11facee7033bb729f6acd86493138069532934c1299c1426da72942822dedb00caca8fc60cc8aec1626e610ee0e8a9679e3614f555860 + checksum: 10/688138f7b2f96ed7a5aae2798bd647e4db0fdf8e86850a493c987049eec6faf63ba78d8f08b4f0a9e41dc459cba80abfb621ae1a45890bb0fa2c09baef4db75b languageName: node linkType: hard @@ -5820,12 +5827,12 @@ __metadata: languageName: node linkType: hard -"acorn-import-attributes@npm:^1.9.5": - version: 1.9.5 - resolution: "acorn-import-attributes@npm:1.9.5" +"acorn-import-phases@npm:^1.0.3": + version: 1.0.4 + resolution: "acorn-import-phases@npm:1.0.4" peerDependencies: - acorn: ^8 - checksum: 10/8bfbfbb6e2467b9b47abb4d095df717ab64fce2525da65eabee073e85e7975fb3a176b6c8bba17c99a7d8ede283a10a590272304eb54a93c4aa1af9790d47a8b + acorn: ^8.14.0 + checksum: 10/471050ac7d9b61909c837b426de9eeef2958997f6277ad7dea88d5894fd9b3245d8ed4a225c2ca44f814dbb20688009db7a80e525e8196fc9e98c5285b66161d languageName: node linkType: hard @@ -5847,7 +5854,7 @@ __metadata: languageName: node linkType: hard -"acorn@npm:^8.0.4, acorn@npm:^8.11.0, acorn@npm:^8.14.0, acorn@npm:^8.15.0, acorn@npm:^8.7.1": +"acorn@npm:^8.0.4, acorn@npm:^8.11.0, acorn@npm:^8.14.0, acorn@npm:^8.15.0": version: 8.15.0 resolution: "acorn@npm:8.15.0" bin: @@ -5912,10 +5919,10 @@ __metadata: style-loader: "npm:^4.0.0" throttle-debounce: "npm:^5.0.2" url-loader: "npm:1.1.2" - webpack: "npm:5.94.0" + webpack: "npm:5.102.1" webpack-bundle-size-analyzer: "npm:3.1.0" - webpack-cli: "npm:5.1.4" - webpack-dev-server: "npm:5.2.1" + webpack-cli: "npm:6.0.1" + webpack-dev-server: "npm:5.2.2" languageName: unknown linkType: soft @@ -7346,6 +7353,15 @@ __metadata: languageName: node linkType: hard +"baseline-browser-mapping@npm:^2.8.9": + version: 2.8.18 + resolution: "baseline-browser-mapping@npm:2.8.18" + bin: + baseline-browser-mapping: dist/cli.js + checksum: 10/073e2548e0036e96f49644b94ba15e30ad273c5b2c314102c7b1473cd65c33878347e49185a4fc38fb1742957132c894f1229de1006924135f9e90c434601d1f + languageName: node + linkType: hard + "batch@npm:0.6.1": version: 0.6.1 resolution: "batch@npm:0.6.1" @@ -7543,7 +7559,7 @@ __metadata: languageName: node linkType: hard -"browserslist@npm:^4.0.0, browserslist@npm:^4.21.10, browserslist@npm:^4.24.0, browserslist@npm:^4.24.4, browserslist@npm:^4.24.5, browserslist@npm:^4.25.1": +"browserslist@npm:^4.0.0, browserslist@npm:^4.24.0, browserslist@npm:^4.24.4, browserslist@npm:^4.24.5, browserslist@npm:^4.25.1": version: 4.25.1 resolution: "browserslist@npm:4.25.1" dependencies: @@ -7557,6 +7573,21 @@ __metadata: languageName: node linkType: hard +"browserslist@npm:^4.26.3": + version: 4.26.3 + resolution: "browserslist@npm:4.26.3" + dependencies: + baseline-browser-mapping: "npm:^2.8.9" + caniuse-lite: "npm:^1.0.30001746" + electron-to-chromium: "npm:^1.5.227" + node-releases: "npm:^2.0.21" + update-browserslist-db: "npm:^1.1.3" + bin: + browserslist: cli.js + checksum: 10/49add06fd753a2514d84c75a7de8d9fb3d70be675e53b72981d87f0c0ff40d8a8cd0bd92f77400381704be0bf1c9c5c65aef95d03843d69475ff55188aa12124 + languageName: node + linkType: hard + "bs-recipes@npm:1.3.4": version: 1.3.4 resolution: "bs-recipes@npm:1.3.4" @@ -7782,6 +7813,13 @@ __metadata: languageName: node linkType: hard +"caniuse-lite@npm:^1.0.30001746": + version: 1.0.30001751 + resolution: "caniuse-lite@npm:1.0.30001751" + checksum: 10/608f7e1248b7023020382c7dbb0ef389693b3fc98193c3ccea2d44126306d6ac905a5061cf9e62bf640535a86e7a98e563b34c02f909296cfe228f41627a4dc7 + languageName: node + linkType: hard + "case-sensitive-paths-webpack-plugin@npm:^2.4.0": version: 2.4.0 resolution: "case-sensitive-paths-webpack-plugin@npm:2.4.0" @@ -8229,13 +8267,6 @@ __metadata: languageName: node linkType: hard -"commander@npm:^10.0.1": - version: 10.0.1 - resolution: "commander@npm:10.0.1" - checksum: 10/8799faa84a30da985802e661cc9856adfaee324d4b138413013ef7f087e8d7924b144c30a1f1405475f0909f467665cd9e1ce13270a2f41b141dab0b7a58f3fb - languageName: node - linkType: hard - "commander@npm:^11.1.0": version: 11.1.0 resolution: "commander@npm:11.1.0" @@ -8243,6 +8274,13 @@ __metadata: languageName: node linkType: hard +"commander@npm:^12.1.0": + version: 12.1.0 + resolution: "commander@npm:12.1.0" + checksum: 10/cdaeb672d979816853a4eed7f1310a9319e8b976172485c2a6b437ed0db0a389a44cfb222bfbde772781efa9f215bdd1b936f80d6b249485b465c6cb906e1f93 + languageName: node + linkType: hard + "commander@npm:^2.19.0, commander@npm:^2.2.0, commander@npm:^2.20.0": version: 2.20.3 resolution: "commander@npm:2.20.3" @@ -9265,10 +9303,10 @@ __metadata: react-hot-loader: "npm:4.13.1" style-loader: "npm:^4.0.0" url-loader: "npm:1.1.2" - webpack: "npm:5.94.0" + webpack: "npm:5.102.1" webpack-bundle-size-analyzer: "npm:3.1.0" - webpack-cli: "npm:5.1.4" - webpack-dev-server: "npm:5.2.1" + webpack-cli: "npm:6.0.1" + webpack-dev-server: "npm:5.2.2" languageName: unknown linkType: soft @@ -9303,9 +9341,9 @@ __metadata: react-dom: "npm:^16.14.0" react-hot-loader: "npm:4.13.1" style-loader: "npm:^4.0.0" - webpack: "npm:5.94.0" - webpack-cli: "npm:5.1.4" - webpack-dev-server: "npm:5.2.1" + webpack: "npm:5.102.1" + webpack-cli: "npm:6.0.1" + webpack-dev-server: "npm:5.2.2" languageName: unknown linkType: soft @@ -9344,9 +9382,9 @@ __metadata: style-loader: "npm:^4.0.0" throttle-debounce: "npm:^5.0.2" utils: "npm:^0.3.1" - webpack: "npm:5.94.0" - webpack-cli: "npm:5.1.4" - webpack-dev-server: "npm:5.2.1" + webpack: "npm:5.102.1" + webpack-cli: "npm:6.0.1" + webpack-dev-server: "npm:5.2.2" languageName: unknown linkType: soft @@ -9646,6 +9684,13 @@ __metadata: languageName: node linkType: hard +"electron-to-chromium@npm:^1.5.227": + version: 1.5.237 + resolution: "electron-to-chromium@npm:1.5.237" + checksum: 10/d21837cfc70038f547d8bf2328e5139f5e4143e365d64633fca568772dd68ceac2cf0d802f0d16921e6df925efb3527f2ba664dbcfa7ddd75e21465d2b0d4a6c + languageName: node + linkType: hard + "emittery@npm:^0.13.1": version: 0.13.1 resolution: "emittery@npm:0.13.1" @@ -9792,6 +9837,16 @@ __metadata: languageName: node linkType: hard +"enhanced-resolve@npm:^5.17.3": + version: 5.18.3 + resolution: "enhanced-resolve@npm:5.18.3" + dependencies: + graceful-fs: "npm:^4.2.4" + tapable: "npm:^2.2.0" + checksum: 10/a4d0a1eacba3079f617b68c8f7e17583c3cbc572055c2edca41c0fa0230a49f6e9b2c6ffd4128cc5f84e15ea6cc313ae2b01e1057fcd252fabef70220a5d9f6a + languageName: node + linkType: hard + "enquirer@npm:~2.3.6": version: 2.3.6 resolution: "enquirer@npm:2.3.6" @@ -9838,12 +9893,12 @@ __metadata: languageName: node linkType: hard -"envinfo@npm:^7.7.3": - version: 7.14.0 - resolution: "envinfo@npm:7.14.0" +"envinfo@npm:^7.14.0": + version: 7.19.0 + resolution: "envinfo@npm:7.19.0" bin: envinfo: dist/cli.js - checksum: 10/0d9d711f2b6ae02dec89dd768a3390acbcb99ac50d07f20e635a8d2db68447703476db535483592d1ed4656c3d36eee4883032d71a5118c917b4973e2d4fa027 + checksum: 10/133ea6a55e4a3b4fe4c06d3d5f6c97402b39ae4eb5675254d166c6a82a0da42adea92bdc0aceea2d479d1eabdcbbd0a6ab68bb80760181f578adbe83aed5f9b9 languageName: node linkType: hard @@ -10857,10 +10912,10 @@ __metadata: style-loader: "npm:4.0.0" throttle-debounce: "npm:5.0.2" url-loader: "npm:1.1.2" - webpack: "npm:5.94.0" - webpack-bundle-analyzer: "npm:^4.9.0" - webpack-cli: "npm:5.1.4" - webpack-dev-server: "npm:5.2.1" + webpack: "npm:5.102.1" + webpack-bundle-analyzer: "npm:^4.10.2" + webpack-cli: "npm:6.0.1" + webpack-dev-server: "npm:5.2.2" languageName: unknown linkType: soft @@ -10948,10 +11003,10 @@ __metadata: react-hot-loader: "npm:4.13.1" style-loader: "npm:^4.0.0" url-loader: "npm:1.1.2" - webpack: "npm:5.94.0" + webpack: "npm:5.102.1" webpack-bundle-size-analyzer: "npm:3.1.0" - webpack-cli: "npm:5.1.4" - webpack-dev-server: "npm:5.2.1" + webpack-cli: "npm:6.0.1" + webpack-dev-server: "npm:5.2.2" languageName: unknown linkType: soft @@ -12254,7 +12309,7 @@ __metadata: languageName: node linkType: hard -"http-proxy-middleware@npm:^2.0.7": +"http-proxy-middleware@npm:^2.0.9": version: 2.0.9 resolution: "http-proxy-middleware@npm:2.0.9" dependencies: @@ -14263,10 +14318,10 @@ __metadata: react-modal: "npm:3.16.1" style-loader: "npm:^4.0.0" url-loader: "npm:1.1.2" - webpack: "npm:5.94.0" + webpack: "npm:5.102.1" webpack-bundle-size-analyzer: "npm:3.1.0" - webpack-cli: "npm:5.1.4" - webpack-dev-server: "npm:5.2.1" + webpack-cli: "npm:6.0.1" + webpack-dev-server: "npm:5.2.2" languageName: unknown linkType: soft @@ -15454,6 +15509,13 @@ __metadata: languageName: node linkType: hard +"node-releases@npm:^2.0.21": + version: 2.0.25 + resolution: "node-releases@npm:2.0.25" + checksum: 10/f2d01bf94c4c629c38495329ed132fce87e0072fa36af7333a4a2071c89bdd6573bc267abeda152bd401247c261b4cf4554b8b70e306ce584c93dd6f63c7a202 + languageName: node + linkType: hard + "nopt@npm:^8.0.0": version: 8.1.0 resolution: "nopt@npm:8.1.0" @@ -16345,10 +16407,10 @@ __metadata: uglifyjs-webpack-plugin: "npm:^2.2.0" url-loader: "npm:1.1.2" url-parse: "npm:^1.5.10" - webpack: "npm:5.94.0" + webpack: "npm:5.102.1" webpack-bundle-size-analyzer: "npm:3.1.0" - webpack-cli: "npm:5.1.4" - webpack-dev-server: "npm:5.2.1" + webpack-cli: "npm:6.0.1" + webpack-dev-server: "npm:5.2.2" peerDependencies: es6-promise: 4.0.5 languageName: unknown @@ -17325,9 +17387,9 @@ __metadata: style-loader: "npm:^4.0.0" throttle-debounce: "npm:^5.0.2" url-loader: "npm:1.1.2" - webpack: "npm:5.94.0" - webpack-cli: "npm:5.1.4" - webpack-dev-server: "npm:5.2.1" + webpack: "npm:5.102.1" + webpack-cli: "npm:6.0.1" + webpack-dev-server: "npm:5.2.2" languageName: unknown linkType: soft @@ -18771,10 +18833,10 @@ __metadata: style-loader: "npm:4.0.0" throttle-debounce: "npm:5.0.2" url-loader: "npm:1.1.2" - webpack: "npm:5.94.0" + webpack: "npm:5.102.1" webpack-bundle-size-analyzer: "npm:3.1.0" - webpack-cli: "npm:5.1.4" - webpack-dev-server: "npm:5.2.1" + webpack-cli: "npm:6.0.1" + webpack-dev-server: "npm:5.2.2" languageName: unknown linkType: soft @@ -19181,7 +19243,7 @@ __metadata: languageName: node linkType: hard -"schema-utils@npm:^3.0.0, schema-utils@npm:^3.1.1, schema-utils@npm:^3.2.0": +"schema-utils@npm:^3.0.0, schema-utils@npm:^3.1.1": version: 3.3.0 resolution: "schema-utils@npm:3.3.0" dependencies: @@ -19204,6 +19266,18 @@ __metadata: languageName: node linkType: hard +"schema-utils@npm:^4.3.3": + version: 4.3.3 + resolution: "schema-utils@npm:4.3.3" + dependencies: + "@types/json-schema": "npm:^7.0.9" + ajv: "npm:^8.9.0" + ajv-formats: "npm:^2.1.1" + ajv-keywords: "npm:^5.1.0" + checksum: 10/dba77a46ad7ff0c906f7f09a1a61109e6cb56388f15a68070b93c47a691f516c6a3eb454f81a8cceb0a0e55b87f8b05770a02bfb1f4e0a3143b5887488b2f900 + languageName: node + linkType: hard + "scroll@npm:^3.0.1": version: 3.0.1 resolution: "scroll@npm:3.0.1" @@ -19244,10 +19318,10 @@ __metadata: redux-thunk: "npm:^2.4.2" style-loader: "npm:^4.0.0" url-loader: "npm:1.1.2" - webpack: "npm:5.94.0" + webpack: "npm:5.102.1" webpack-bundle-size-analyzer: "npm:3.1.0" - webpack-cli: "npm:5.1.4" - webpack-dev-server: "npm:5.2.1" + webpack-cli: "npm:6.0.1" + webpack-dev-server: "npm:5.2.2" languageName: unknown linkType: soft @@ -19380,10 +19454,10 @@ __metadata: react-modal: "npm:3.16.1" style-loader: "npm:^4.0.0" url-loader: "npm:1.1.2" - webpack: "npm:5.94.0" + webpack: "npm:5.102.1" webpack-bundle-size-analyzer: "npm:3.1.0" - webpack-cli: "npm:5.1.4" - webpack-dev-server: "npm:5.2.1" + webpack-cli: "npm:6.0.1" + webpack-dev-server: "npm:5.2.2" languageName: unknown linkType: soft @@ -19471,10 +19545,10 @@ __metadata: react-hot-loader: "npm:4.13.1" style-loader: "npm:^4.0.0" url-loader: "npm:1.1.2" - webpack: "npm:5.94.0" + webpack: "npm:5.102.1" webpack-bundle-size-analyzer: "npm:3.1.0" - webpack-cli: "npm:5.1.4" - webpack-dev-server: "npm:5.2.1" + webpack-cli: "npm:6.0.1" + webpack-dev-server: "npm:5.2.2" languageName: unknown linkType: soft @@ -19741,10 +19815,10 @@ __metadata: throttle-debounce: "npm:^5.0.2" url-loader: "npm:1.1.2" utils: "npm:^0.3.1" - webpack: "npm:5.94.0" + webpack: "npm:5.102.1" webpack-bundle-size-analyzer: "npm:3.1.0" - webpack-cli: "npm:5.1.4" - webpack-dev-server: "npm:5.2.1" + webpack-cli: "npm:6.0.1" + webpack-dev-server: "npm:5.2.2" languageName: unknown linkType: soft @@ -19787,10 +19861,10 @@ __metadata: source-map-loader: "npm:^0.2.4" style-loader: "npm:^4.0.0" url-loader: "npm:1.1.2" - webpack: "npm:5.94.0" + webpack: "npm:5.102.1" webpack-bundle-size-analyzer: "npm:3.1.0" - webpack-cli: "npm:5.1.4" - webpack-dev-server: "npm:5.2.1" + webpack-cli: "npm:6.0.1" + webpack-dev-server: "npm:5.2.2" languageName: unknown linkType: soft @@ -19823,10 +19897,10 @@ __metadata: react-hot-loader: "npm:4.13.1" style-loader: "npm:^4.0.0" url-loader: "npm:1.1.2" - webpack: "npm:5.94.0" + webpack: "npm:5.102.1" webpack-bundle-size-analyzer: "npm:3.1.0" - webpack-cli: "npm:5.1.4" - webpack-dev-server: "npm:5.2.1" + webpack-cli: "npm:6.0.1" + webpack-dev-server: "npm:5.2.2" languageName: unknown linkType: soft @@ -20613,6 +20687,13 @@ __metadata: languageName: node linkType: hard +"tapable@npm:^2.3.0": + version: 2.3.0 + resolution: "tapable@npm:2.3.0" + checksum: 10/496a841039960533bb6e44816a01fffc2a1eb428bb2051ecab9e87adf07f19e1f937566cbbbb09dceff31163c0ffd81baafcad84db900b601f0155dd0b37e9f2 + languageName: node + linkType: hard + "tar-stream@npm:~2.2.0": version: 2.2.0 resolution: "tar-stream@npm:2.2.0" @@ -20688,10 +20769,10 @@ __metadata: react-modal: "npm:3.16.1" style-loader: "npm:^4.0.0" url-loader: "npm:1.1.2" - webpack: "npm:5.94.0" + webpack: "npm:5.102.1" webpack-bundle-size-analyzer: "npm:3.1.0" - webpack-cli: "npm:5.1.4" - webpack-dev-server: "npm:5.2.1" + webpack-cli: "npm:6.0.1" + webpack-dev-server: "npm:5.2.2" languageName: unknown linkType: soft @@ -20729,10 +20810,10 @@ __metadata: react-hot-loader: "npm:4.13.1" style-loader: "npm:^4.0.0" url-loader: "npm:1.1.2" - webpack: "npm:5.94.0" + webpack: "npm:5.102.1" webpack-bundle-size-analyzer: "npm:3.1.0" - webpack-cli: "npm:5.1.4" - webpack-dev-server: "npm:5.2.1" + webpack-cli: "npm:6.0.1" + webpack-dev-server: "npm:5.2.2" languageName: unknown linkType: soft @@ -20743,7 +20824,7 @@ __metadata: languageName: node linkType: hard -"terser-webpack-plugin@npm:^5.3.1, terser-webpack-plugin@npm:^5.3.10, terser-webpack-plugin@npm:^5.3.11": +"terser-webpack-plugin@npm:^5.3.1, terser-webpack-plugin@npm:^5.3.11": version: 5.3.14 resolution: "terser-webpack-plugin@npm:5.3.14" dependencies: @@ -20827,10 +20908,10 @@ __metadata: react-hot-loader: "npm:4.13.1" style-loader: "npm:^4.0.0" url-loader: "npm:1.1.2" - webpack: "npm:5.94.0" + webpack: "npm:5.102.1" webpack-bundle-size-analyzer: "npm:3.1.0" - webpack-cli: "npm:5.1.4" - webpack-dev-server: "npm:5.2.1" + webpack-cli: "npm:6.0.1" + webpack-dev-server: "npm:5.2.2" languageName: unknown linkType: soft @@ -21741,10 +21822,10 @@ __metadata: throttle-debounce: "npm:^5.0.2" url-loader: "npm:1.1.2" utils: "npm:^0.3.1" - webpack: "npm:5.94.0" + webpack: "npm:5.102.1" webpack-bundle-size-analyzer: "npm:3.1.0" - webpack-cli: "npm:5.1.4" - webpack-dev-server: "npm:5.2.1" + webpack-cli: "npm:6.0.1" + webpack-dev-server: "npm:5.2.2" languageName: unknown linkType: soft @@ -21906,7 +21987,7 @@ __metadata: languageName: node linkType: hard -"watchpack@npm:^2.4.1": +"watchpack@npm:^2.4.1, watchpack@npm:^2.4.4": version: 2.4.4 resolution: "watchpack@npm:2.4.4" dependencies: @@ -21941,7 +22022,7 @@ __metadata: languageName: node linkType: hard -"webpack-bundle-analyzer@npm:^4.9.0": +"webpack-bundle-analyzer@npm:^4.10.2": version: 4.10.2 resolution: "webpack-bundle-analyzer@npm:4.10.2" dependencies: @@ -21976,35 +22057,33 @@ __metadata: languageName: node linkType: hard -"webpack-cli@npm:5.1.4": - version: 5.1.4 - resolution: "webpack-cli@npm:5.1.4" +"webpack-cli@npm:6.0.1": + version: 6.0.1 + resolution: "webpack-cli@npm:6.0.1" dependencies: - "@discoveryjs/json-ext": "npm:^0.5.0" - "@webpack-cli/configtest": "npm:^2.1.1" - "@webpack-cli/info": "npm:^2.0.2" - "@webpack-cli/serve": "npm:^2.0.5" + "@discoveryjs/json-ext": "npm:^0.6.1" + "@webpack-cli/configtest": "npm:^3.0.1" + "@webpack-cli/info": "npm:^3.0.1" + "@webpack-cli/serve": "npm:^3.0.1" colorette: "npm:^2.0.14" - commander: "npm:^10.0.1" + commander: "npm:^12.1.0" cross-spawn: "npm:^7.0.3" - envinfo: "npm:^7.7.3" + envinfo: "npm:^7.14.0" fastest-levenshtein: "npm:^1.0.12" import-local: "npm:^3.0.2" interpret: "npm:^3.1.1" rechoir: "npm:^0.8.0" - webpack-merge: "npm:^5.7.3" + webpack-merge: "npm:^6.0.1" peerDependencies: - webpack: 5.x.x + webpack: ^5.82.0 peerDependenciesMeta: - "@webpack-cli/generators": - optional: true webpack-bundle-analyzer: optional: true webpack-dev-server: optional: true bin: - webpack-cli: bin/cli.js - checksum: 10/9ac3ae7c43b032051de2803d751bd3b44e1f226b931dcd56066a8e01b12734d49730903df9235e1eb1b67b2ee7451faf24a219c8f4a229c4f42c42e827eac44c + webpack-cli: ./bin/cli.js + checksum: 10/f765a492babed4d2f42eb7a42a895550ad62f8ae56fde087243490c7ed685c6a3c8a280e27603f5b08c5221f4b8189582acd57a8ceea510fe95225e8229a0c51 languageName: node linkType: hard @@ -22045,9 +22124,9 @@ __metadata: languageName: node linkType: hard -"webpack-dev-server@npm:5.2.1": - version: 5.2.1 - resolution: "webpack-dev-server@npm:5.2.1" +"webpack-dev-server@npm:5.2.2": + version: 5.2.2 + resolution: "webpack-dev-server@npm:5.2.2" dependencies: "@types/bonjour": "npm:^3.5.13" "@types/connect-history-api-fallback": "npm:^1.5.4" @@ -22065,7 +22144,7 @@ __metadata: connect-history-api-fallback: "npm:^2.0.0" express: "npm:^4.21.2" graceful-fs: "npm:^4.2.6" - http-proxy-middleware: "npm:^2.0.7" + http-proxy-middleware: "npm:^2.0.9" ipaddr.js: "npm:^2.1.0" launch-editor: "npm:^2.6.1" open: "npm:^10.0.3" @@ -22086,7 +22165,7 @@ __metadata: optional: true bin: webpack-dev-server: bin/webpack-dev-server.js - checksum: 10/424edfe22b7bbe2301a38b8b519dfeb7643e0ca643be01af3fa48ec18512955c1952246741d7577bdb911ee09dcd6c521ade7d65e0059448ee69ab02bfac4624 + checksum: 10/59517409cd38c01a875a03b9658f3d20d492b5b8bead9ded4a0f3d33e6857daf2d352fe89f0181dcaea6d0fbe84b0494cb4750a87120fe81cdbb3c32b499451c languageName: node linkType: hard @@ -22101,14 +22180,14 @@ __metadata: languageName: node linkType: hard -"webpack-merge@npm:^5.7.3": - version: 5.10.0 - resolution: "webpack-merge@npm:5.10.0" +"webpack-merge@npm:^6.0.1": + version: 6.0.1 + resolution: "webpack-merge@npm:6.0.1" dependencies: clone-deep: "npm:^4.0.1" flat: "npm:^5.0.2" - wildcard: "npm:^2.0.0" - checksum: 10/fa46ab200f17d06c7cb49fc37ad91f15769753953c9724adac1061fa305a2a223cb37c3ed25a5f501580c91f11a0800990fe3814c70a77bf1aa5b3fca45a2ac6 + wildcard: "npm:^2.0.1" + checksum: 10/39ab911c26237922295d9b3d0617c8ea0c438c35a3b21b05506616a10423f5ece1962bccbedec932c5db61af57999b6d055d56d1f1755c63e2701bd4a55c3887 languageName: node linkType: hard @@ -22129,7 +22208,7 @@ __metadata: languageName: node linkType: hard -"webpack-sources@npm:^3.2.3": +"webpack-sources@npm:^3.2.3, webpack-sources@npm:^3.3.3": version: 3.3.3 resolution: "webpack-sources@npm:3.3.3" checksum: 10/ec5d72607e8068467370abccbfff855c596c098baedbe9d198a557ccf198e8546a322836a6f74241492576adba06100286592993a62b63196832cdb53c8bae91 @@ -22180,19 +22259,21 @@ __metadata: languageName: node linkType: hard -"webpack@npm:5.94.0": - version: 5.94.0 - resolution: "webpack@npm:5.94.0" +"webpack@npm:5.102.1": + version: 5.102.1 + resolution: "webpack@npm:5.102.1" dependencies: - "@types/estree": "npm:^1.0.5" - "@webassemblyjs/ast": "npm:^1.12.1" - "@webassemblyjs/wasm-edit": "npm:^1.12.1" - "@webassemblyjs/wasm-parser": "npm:^1.12.1" - acorn: "npm:^8.7.1" - acorn-import-attributes: "npm:^1.9.5" - browserslist: "npm:^4.21.10" + "@types/eslint-scope": "npm:^3.7.7" + "@types/estree": "npm:^1.0.8" + "@types/json-schema": "npm:^7.0.15" + "@webassemblyjs/ast": "npm:^1.14.1" + "@webassemblyjs/wasm-edit": "npm:^1.14.1" + "@webassemblyjs/wasm-parser": "npm:^1.14.1" + acorn: "npm:^8.15.0" + acorn-import-phases: "npm:^1.0.3" + browserslist: "npm:^4.26.3" chrome-trace-event: "npm:^1.0.2" - enhanced-resolve: "npm:^5.17.1" + enhanced-resolve: "npm:^5.17.3" es-module-lexer: "npm:^1.2.1" eslint-scope: "npm:5.1.1" events: "npm:^3.2.0" @@ -22202,17 +22283,17 @@ __metadata: loader-runner: "npm:^4.2.0" mime-types: "npm:^2.1.27" neo-async: "npm:^2.6.2" - schema-utils: "npm:^3.2.0" - tapable: "npm:^2.1.1" - terser-webpack-plugin: "npm:^5.3.10" - watchpack: "npm:^2.4.1" - webpack-sources: "npm:^3.2.3" + schema-utils: "npm:^4.3.3" + tapable: "npm:^2.3.0" + terser-webpack-plugin: "npm:^5.3.11" + watchpack: "npm:^2.4.4" + webpack-sources: "npm:^3.3.3" peerDependenciesMeta: webpack-cli: optional: true bin: webpack: bin/webpack.js - checksum: 10/648449c5fbbb0839814116e3b2b044ac6c75a7ba272435155ddeb1e64dfaa2f8079be3adfbb691f648b69900756ce0f6fb73beab0ced3cf5e0fd46868b4593a6 + checksum: 10/4ba737916c4b72812cdd1961ea82d0a6de8ac814134584b54d523a2c4b9e1d377490d63b2c74856e2b9146dbe6d09b05c8878439b0783c3e5195ca3e248b2131 languageName: node linkType: hard @@ -22352,7 +22433,7 @@ __metadata: languageName: node linkType: hard -"wildcard@npm:^2.0.0": +"wildcard@npm:^2.0.1": version: 2.0.1 resolution: "wildcard@npm:2.0.1" checksum: 10/e0c60a12a219e4b12065d1199802d81c27b841ed6ad6d9d28240980c73ceec6f856771d575af367cbec2982d9ae7838759168b551776577f155044f5a5ba843c From b7ceafb84cdead06969891d3167669261791f8ef Mon Sep 17 00:00:00 2001 From: Brian Dukes Date: Tue, 21 Oct 2025 17:13:40 -0500 Subject: [PATCH 121/199] Bump url-loader to 4.1.1 --- .../ClientSide/AdminLogs.Web/package.json | 2 +- .../ClientSide/Bundle.Web/package.json | 2 +- .../ClientSide/Dnn.React.Common/package.json | 2 +- .../ClientSide/Extensions.Web/package.json | 2 +- .../ClientSide/Licensing.Web/package.json | 2 +- .../ClientSide/Pages.Web/package.json | 2 +- .../ClientSide/Prompt.Web/package.json | 2 +- .../ClientSide/Roles.Web/package.json | 2 +- .../ClientSide/Security.Web/package.json | 2 +- .../ClientSide/Seo.Web/package.json | 2 +- .../ClientSide/Servers.Web/package.json | 2 +- .../ClientSide/SiteGroups.Web/package.json | 2 +- .../SiteImportExport.Web/package.json | 2 +- .../ClientSide/SiteSettings.Web/package.json | 2 +- .../ClientSide/Sites.Web/package.json | 2 +- .../ClientSide/TaskScheduler.Web/package.json | 2 +- .../ClientSide/Themes.Web/package.json | 2 +- .../ClientSide/Users.Web/package.json | 2 +- .../ClientSide/Vocabularies.Web/package.json | 2 +- yarn.lock | 67 +++++++++---------- 20 files changed, 50 insertions(+), 55 deletions(-) diff --git a/Dnn.AdminExperience/ClientSide/AdminLogs.Web/package.json b/Dnn.AdminExperience/ClientSide/AdminLogs.Web/package.json index 634ad04dacd..76fecb5bcca 100644 --- a/Dnn.AdminExperience/ClientSide/AdminLogs.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/AdminLogs.Web/package.json @@ -46,7 +46,7 @@ "redux-thunk": "2.4.2", "style-loader": "^4.0.0", "throttle-debounce": "^5.0.2", - "url-loader": "1.1.2", + "url-loader": "4.1.1", "webpack": "5.102.1", "webpack-bundle-size-analyzer": "3.1.0", "webpack-cli": "6.0.1", diff --git a/Dnn.AdminExperience/ClientSide/Bundle.Web/package.json b/Dnn.AdminExperience/ClientSide/Bundle.Web/package.json index d01e3dc4da7..6a2916f5189 100644 --- a/Dnn.AdminExperience/ClientSide/Bundle.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Bundle.Web/package.json @@ -54,7 +54,7 @@ "source-map-loader": "^0.2.4", "style-loader": "4.0.0", "throttle-debounce": "5.0.2", - "url-loader": "1.1.2", + "url-loader": "4.1.1", "webpack": "5.102.1", "webpack-bundle-analyzer": "^4.10.2", "webpack-cli": "6.0.1", diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/package.json b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/package.json index f5fa0b3eea6..24208dca31c 100644 --- a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/package.json +++ b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/package.json @@ -88,7 +88,7 @@ "react-test-renderer": "^17.0.2", "storybook": "9.1.13", "style-loader": "^4.0.0", - "url-loader": "1.1.2", + "url-loader": "4.1.1", "webpack": "5.102.1", "webpack-bundle-size-analyzer": "3.1.0", "webpack-cli": "6.0.1", diff --git a/Dnn.AdminExperience/ClientSide/Extensions.Web/package.json b/Dnn.AdminExperience/ClientSide/Extensions.Web/package.json index 835c44542f7..0536b69cd24 100644 --- a/Dnn.AdminExperience/ClientSide/Extensions.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Extensions.Web/package.json @@ -34,7 +34,7 @@ "react-dom": "^16.14.0", "react-hot-loader": "4.13.1", "style-loader": "^4.0.0", - "url-loader": "1.1.2", + "url-loader": "4.1.1", "webpack": "5.102.1", "webpack-bundle-size-analyzer": "3.1.0", "webpack-cli": "6.0.1", diff --git a/Dnn.AdminExperience/ClientSide/Licensing.Web/package.json b/Dnn.AdminExperience/ClientSide/Licensing.Web/package.json index c46f4c9dfef..2a4e8867105 100644 --- a/Dnn.AdminExperience/ClientSide/Licensing.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Licensing.Web/package.json @@ -35,7 +35,7 @@ "react-hot-loader": "4.13.1", "react-modal": "3.16.1", "style-loader": "^4.0.0", - "url-loader": "1.1.2", + "url-loader": "4.1.1", "webpack": "5.102.1", "webpack-bundle-size-analyzer": "3.1.0", "webpack-cli": "6.0.1", diff --git a/Dnn.AdminExperience/ClientSide/Pages.Web/package.json b/Dnn.AdminExperience/ClientSide/Pages.Web/package.json index dba7d915dbc..12f8ecc078b 100644 --- a/Dnn.AdminExperience/ClientSide/Pages.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Pages.Web/package.json @@ -58,7 +58,7 @@ "style-loader": "^4.0.0", "throttle-debounce": "^5.0.2", "uglifyjs-webpack-plugin": "^2.2.0", - "url-loader": "1.1.2", + "url-loader": "4.1.1", "webpack": "5.102.1", "webpack-bundle-size-analyzer": "3.1.0", "webpack-cli": "6.0.1", diff --git a/Dnn.AdminExperience/ClientSide/Prompt.Web/package.json b/Dnn.AdminExperience/ClientSide/Prompt.Web/package.json index 7ee3377271c..8a46381392b 100644 --- a/Dnn.AdminExperience/ClientSide/Prompt.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Prompt.Web/package.json @@ -58,7 +58,7 @@ "redux-thunk": "2.4.2", "style-loader": "^4.0.0", "throttle-debounce": "^5.0.2", - "url-loader": "1.1.2", + "url-loader": "4.1.1", "webpack": "5.102.1", "webpack-cli": "6.0.1", "webpack-dev-server": "5.2.2" diff --git a/Dnn.AdminExperience/ClientSide/Roles.Web/package.json b/Dnn.AdminExperience/ClientSide/Roles.Web/package.json index 508d32d81ec..99c5a4156f2 100644 --- a/Dnn.AdminExperience/ClientSide/Roles.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Roles.Web/package.json @@ -39,7 +39,7 @@ "react-hot-loader": "4.13.1", "style-loader": "4.0.0", "throttle-debounce": "5.0.2", - "url-loader": "1.1.2", + "url-loader": "4.1.1", "webpack": "5.102.1", "webpack-bundle-size-analyzer": "3.1.0", "webpack-cli": "6.0.1", diff --git a/Dnn.AdminExperience/ClientSide/Security.Web/package.json b/Dnn.AdminExperience/ClientSide/Security.Web/package.json index c119836b82a..0277392fd62 100644 --- a/Dnn.AdminExperience/ClientSide/Security.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Security.Web/package.json @@ -38,7 +38,7 @@ "redux-immutable-state-invariant": "^2.1.0", "redux-thunk": "^2.4.2", "style-loader": "^4.0.0", - "url-loader": "1.1.2", + "url-loader": "4.1.1", "webpack": "5.102.1", "webpack-bundle-size-analyzer": "3.1.0", "webpack-cli": "6.0.1", diff --git a/Dnn.AdminExperience/ClientSide/Seo.Web/package.json b/Dnn.AdminExperience/ClientSide/Seo.Web/package.json index 65b8d5be8f2..abcd41a6385 100644 --- a/Dnn.AdminExperience/ClientSide/Seo.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Seo.Web/package.json @@ -39,7 +39,7 @@ "react-hot-loader": "4.13.1", "react-modal": "3.16.1", "style-loader": "^4.0.0", - "url-loader": "1.1.2", + "url-loader": "4.1.1", "webpack": "5.102.1", "webpack-bundle-size-analyzer": "3.1.0", "webpack-cli": "6.0.1", diff --git a/Dnn.AdminExperience/ClientSide/Servers.Web/package.json b/Dnn.AdminExperience/ClientSide/Servers.Web/package.json index 7e8c30bb5ba..727cfff4205 100644 --- a/Dnn.AdminExperience/ClientSide/Servers.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Servers.Web/package.json @@ -38,7 +38,7 @@ "react-dom": "^16.14.0", "react-hot-loader": "4.13.1", "style-loader": "^4.0.0", - "url-loader": "1.1.2", + "url-loader": "4.1.1", "webpack": "5.102.1", "webpack-bundle-size-analyzer": "3.1.0", "webpack-cli": "6.0.1", diff --git a/Dnn.AdminExperience/ClientSide/SiteGroups.Web/package.json b/Dnn.AdminExperience/ClientSide/SiteGroups.Web/package.json index 2efd90314e2..56c3be95b2d 100644 --- a/Dnn.AdminExperience/ClientSide/SiteGroups.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/SiteGroups.Web/package.json @@ -34,7 +34,7 @@ "react-dom": "^16.14.0", "react-hot-loader": "4.13.1", "style-loader": "^4.0.0", - "url-loader": "1.1.2", + "url-loader": "4.1.1", "webpack": "5.102.1", "webpack-bundle-size-analyzer": "3.1.0", "webpack-cli": "6.0.1", diff --git a/Dnn.AdminExperience/ClientSide/SiteImportExport.Web/package.json b/Dnn.AdminExperience/ClientSide/SiteImportExport.Web/package.json index 4b6bf387af9..e03366fd930 100644 --- a/Dnn.AdminExperience/ClientSide/SiteImportExport.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/SiteImportExport.Web/package.json @@ -50,7 +50,7 @@ "style-loader": "^4.0.0", "svg-url-loader": "^8.0.0", "throttle-debounce": "^5.0.2", - "url-loader": "1.1.2", + "url-loader": "4.1.1", "utils": "^0.3.1", "webpack": "5.102.1", "webpack-bundle-size-analyzer": "3.1.0", diff --git a/Dnn.AdminExperience/ClientSide/SiteSettings.Web/package.json b/Dnn.AdminExperience/ClientSide/SiteSettings.Web/package.json index b2f807b82c3..64ba9a4695f 100644 --- a/Dnn.AdminExperience/ClientSide/SiteSettings.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/SiteSettings.Web/package.json @@ -46,7 +46,7 @@ "redux-thunk": "^2.4.2", "source-map-loader": "^0.2.4", "style-loader": "^4.0.0", - "url-loader": "1.1.2", + "url-loader": "4.1.1", "webpack": "5.102.1", "webpack-bundle-size-analyzer": "3.1.0", "webpack-cli": "6.0.1", diff --git a/Dnn.AdminExperience/ClientSide/Sites.Web/package.json b/Dnn.AdminExperience/ClientSide/Sites.Web/package.json index 70e52667505..1e04a57b890 100644 --- a/Dnn.AdminExperience/ClientSide/Sites.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Sites.Web/package.json @@ -34,7 +34,7 @@ "react-dom": "^16.14.0", "react-hot-loader": "4.13.1", "style-loader": "^4.0.0", - "url-loader": "1.1.2", + "url-loader": "4.1.1", "webpack": "5.102.1", "webpack-bundle-size-analyzer": "3.1.0", "webpack-cli": "6.0.1", diff --git a/Dnn.AdminExperience/ClientSide/TaskScheduler.Web/package.json b/Dnn.AdminExperience/ClientSide/TaskScheduler.Web/package.json index b4b3e4ada25..5b03fda38e4 100644 --- a/Dnn.AdminExperience/ClientSide/TaskScheduler.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/TaskScheduler.Web/package.json @@ -39,7 +39,7 @@ "react-hot-loader": "4.13.1", "react-modal": "3.16.1", "style-loader": "^4.0.0", - "url-loader": "1.1.2", + "url-loader": "4.1.1", "webpack": "5.102.1", "webpack-bundle-size-analyzer": "3.1.0", "webpack-cli": "6.0.1", diff --git a/Dnn.AdminExperience/ClientSide/Themes.Web/package.json b/Dnn.AdminExperience/ClientSide/Themes.Web/package.json index 5f81427ac71..4b748e340ad 100644 --- a/Dnn.AdminExperience/ClientSide/Themes.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Themes.Web/package.json @@ -35,7 +35,7 @@ "react-dom": "^16.14.0", "react-hot-loader": "4.13.1", "style-loader": "^4.0.0", - "url-loader": "1.1.2", + "url-loader": "4.1.1", "webpack": "5.102.1", "webpack-bundle-size-analyzer": "3.1.0", "webpack-cli": "6.0.1", diff --git a/Dnn.AdminExperience/ClientSide/Users.Web/package.json b/Dnn.AdminExperience/ClientSide/Users.Web/package.json index e7b58d19e3d..57cf170426c 100644 --- a/Dnn.AdminExperience/ClientSide/Users.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Users.Web/package.json @@ -44,7 +44,7 @@ "services": "^0.0.3", "style-loader": "^4.0.0", "throttle-debounce": "^5.0.2", - "url-loader": "1.1.2", + "url-loader": "4.1.1", "utils": "^0.3.1", "webpack": "5.102.1", "webpack-bundle-size-analyzer": "3.1.0", diff --git a/Dnn.AdminExperience/ClientSide/Vocabularies.Web/package.json b/Dnn.AdminExperience/ClientSide/Vocabularies.Web/package.json index 063f7b1b529..a384c07663f 100644 --- a/Dnn.AdminExperience/ClientSide/Vocabularies.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Vocabularies.Web/package.json @@ -39,7 +39,7 @@ "react-dom": "^16.14.0", "react-hot-loader": "4.13.1", "style-loader": "^4.0.0", - "url-loader": "1.1.2", + "url-loader": "4.1.1", "webpack": "5.102.1", "webpack-bundle-size-analyzer": "3.1.0", "webpack-cli": "6.0.1", diff --git a/yarn.lock b/yarn.lock index ca09219e88e..a08f8f3f880 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1694,7 +1694,7 @@ __metadata: storybook: "npm:9.1.13" style-loader: "npm:^4.0.0" throttle-debounce: "npm:^5.0.2" - url-loader: "npm:1.1.2" + url-loader: "npm:4.1.1" webpack: "npm:5.102.1" webpack-bundle-size-analyzer: "npm:3.1.0" webpack-cli: "npm:6.0.1" @@ -5918,7 +5918,7 @@ __metadata: redux-thunk: "npm:2.4.2" style-loader: "npm:^4.0.0" throttle-debounce: "npm:^5.0.2" - url-loader: "npm:1.1.2" + url-loader: "npm:4.1.1" webpack: "npm:5.102.1" webpack-bundle-size-analyzer: "npm:3.1.0" webpack-cli: "npm:6.0.1" @@ -9302,7 +9302,7 @@ __metadata: react-dom: "npm:^16.14.0" react-hot-loader: "npm:4.13.1" style-loader: "npm:^4.0.0" - url-loader: "npm:1.1.2" + url-loader: "npm:4.1.1" webpack: "npm:5.102.1" webpack-bundle-size-analyzer: "npm:3.1.0" webpack-cli: "npm:6.0.1" @@ -10911,7 +10911,7 @@ __metadata: source-map-loader: "npm:^0.2.4" style-loader: "npm:4.0.0" throttle-debounce: "npm:5.0.2" - url-loader: "npm:1.1.2" + url-loader: "npm:4.1.1" webpack: "npm:5.102.1" webpack-bundle-analyzer: "npm:^4.10.2" webpack-cli: "npm:6.0.1" @@ -11002,7 +11002,7 @@ __metadata: react-dom: "npm:^16.14.0" react-hot-loader: "npm:4.13.1" style-loader: "npm:^4.0.0" - url-loader: "npm:1.1.2" + url-loader: "npm:4.1.1" webpack: "npm:5.102.1" webpack-bundle-size-analyzer: "npm:3.1.0" webpack-cli: "npm:6.0.1" @@ -14317,7 +14317,7 @@ __metadata: react-hot-loader: "npm:4.13.1" react-modal: "npm:3.16.1" style-loader: "npm:^4.0.0" - url-loader: "npm:1.1.2" + url-loader: "npm:4.1.1" webpack: "npm:5.102.1" webpack-bundle-size-analyzer: "npm:3.1.0" webpack-cli: "npm:6.0.1" @@ -14950,15 +14950,6 @@ __metadata: languageName: node linkType: hard -"mime@npm:^2.0.3": - version: 2.6.0 - resolution: "mime@npm:2.6.0" - bin: - mime: cli.js - checksum: 10/7da117808b5cd0203bb1b5e33445c330fe213f4d8ee2402a84d62adbde9716ca4fb90dd6d9ab4e77a4128c6c5c24a9c4c9f6a4d720b095b1b342132d02dba58d - languageName: node - linkType: hard - "mimic-fn@npm:^2.1.0": version: 2.1.0 resolution: "mimic-fn@npm:2.1.0" @@ -16405,7 +16396,7 @@ __metadata: style-loader: "npm:^4.0.0" throttle-debounce: "npm:^5.0.2" uglifyjs-webpack-plugin: "npm:^2.2.0" - url-loader: "npm:1.1.2" + url-loader: "npm:4.1.1" url-parse: "npm:^1.5.10" webpack: "npm:5.102.1" webpack-bundle-size-analyzer: "npm:3.1.0" @@ -17386,7 +17377,7 @@ __metadata: redux-thunk: "npm:2.4.2" style-loader: "npm:^4.0.0" throttle-debounce: "npm:^5.0.2" - url-loader: "npm:1.1.2" + url-loader: "npm:4.1.1" webpack: "npm:5.102.1" webpack-cli: "npm:6.0.1" webpack-dev-server: "npm:5.2.2" @@ -18832,7 +18823,7 @@ __metadata: react-widgets: "npm:^5.8.4" style-loader: "npm:4.0.0" throttle-debounce: "npm:5.0.2" - url-loader: "npm:1.1.2" + url-loader: "npm:4.1.1" webpack: "npm:5.102.1" webpack-bundle-size-analyzer: "npm:3.1.0" webpack-cli: "npm:6.0.1" @@ -19317,7 +19308,7 @@ __metadata: redux-immutable-state-invariant: "npm:^2.1.0" redux-thunk: "npm:^2.4.2" style-loader: "npm:^4.0.0" - url-loader: "npm:1.1.2" + url-loader: "npm:4.1.1" webpack: "npm:5.102.1" webpack-bundle-size-analyzer: "npm:3.1.0" webpack-cli: "npm:6.0.1" @@ -19453,7 +19444,7 @@ __metadata: react-hot-loader: "npm:4.13.1" react-modal: "npm:3.16.1" style-loader: "npm:^4.0.0" - url-loader: "npm:1.1.2" + url-loader: "npm:4.1.1" webpack: "npm:5.102.1" webpack-bundle-size-analyzer: "npm:3.1.0" webpack-cli: "npm:6.0.1" @@ -19544,7 +19535,7 @@ __metadata: react-dom: "npm:^16.14.0" react-hot-loader: "npm:4.13.1" style-loader: "npm:^4.0.0" - url-loader: "npm:1.1.2" + url-loader: "npm:4.1.1" webpack: "npm:5.102.1" webpack-bundle-size-analyzer: "npm:3.1.0" webpack-cli: "npm:6.0.1" @@ -19813,7 +19804,7 @@ __metadata: style-loader: "npm:^4.0.0" svg-url-loader: "npm:^8.0.0" throttle-debounce: "npm:^5.0.2" - url-loader: "npm:1.1.2" + url-loader: "npm:4.1.1" utils: "npm:^0.3.1" webpack: "npm:5.102.1" webpack-bundle-size-analyzer: "npm:3.1.0" @@ -19860,7 +19851,7 @@ __metadata: redux-thunk: "npm:^2.4.2" source-map-loader: "npm:^0.2.4" style-loader: "npm:^4.0.0" - url-loader: "npm:1.1.2" + url-loader: "npm:4.1.1" webpack: "npm:5.102.1" webpack-bundle-size-analyzer: "npm:3.1.0" webpack-cli: "npm:6.0.1" @@ -19896,7 +19887,7 @@ __metadata: react-dom: "npm:^16.14.0" react-hot-loader: "npm:4.13.1" style-loader: "npm:^4.0.0" - url-loader: "npm:1.1.2" + url-loader: "npm:4.1.1" webpack: "npm:5.102.1" webpack-bundle-size-analyzer: "npm:3.1.0" webpack-cli: "npm:6.0.1" @@ -20768,7 +20759,7 @@ __metadata: react-hot-loader: "npm:4.13.1" react-modal: "npm:3.16.1" style-loader: "npm:^4.0.0" - url-loader: "npm:1.1.2" + url-loader: "npm:4.1.1" webpack: "npm:5.102.1" webpack-bundle-size-analyzer: "npm:3.1.0" webpack-cli: "npm:6.0.1" @@ -20809,7 +20800,7 @@ __metadata: react-dom: "npm:^16.14.0" react-hot-loader: "npm:4.13.1" style-loader: "npm:^4.0.0" - url-loader: "npm:1.1.2" + url-loader: "npm:4.1.1" webpack: "npm:5.102.1" webpack-bundle-size-analyzer: "npm:3.1.0" webpack-cli: "npm:6.0.1" @@ -20907,7 +20898,7 @@ __metadata: react-dom: "npm:^16.14.0" react-hot-loader: "npm:4.13.1" style-loader: "npm:^4.0.0" - url-loader: "npm:1.1.2" + url-loader: "npm:4.1.1" webpack: "npm:5.102.1" webpack-bundle-size-analyzer: "npm:3.1.0" webpack-cli: "npm:6.0.1" @@ -21749,16 +21740,20 @@ __metadata: languageName: node linkType: hard -"url-loader@npm:1.1.2": - version: 1.1.2 - resolution: "url-loader@npm:1.1.2" +"url-loader@npm:4.1.1": + version: 4.1.1 + resolution: "url-loader@npm:4.1.1" dependencies: - loader-utils: "npm:^1.1.0" - mime: "npm:^2.0.3" - schema-utils: "npm:^1.0.0" + loader-utils: "npm:^2.0.0" + mime-types: "npm:^2.1.27" + schema-utils: "npm:^3.0.0" peerDependencies: - webpack: ^3.0.0 || ^4.0.0 - checksum: 10/00ab1f4552e2c8c704ef1e5f07a9ca5074a5eeb3c6862a873dab15554f03fa13aeaa339b45c9d01f346bf8b8b6edb09298a00ab650f3b418e5c51035dd1ad124 + file-loader: "*" + webpack: ^4.0.0 || ^5.0.0 + peerDependenciesMeta: + file-loader: + optional: true + checksum: 10/f7e7258156f607bdd74469d22868a3522177bd895bb0eb1919363e32116ad7ed0c666b076d32dd700f1681c53d2edf046382bd9f6d9e77a19d4dd8ea36511da2 languageName: node linkType: hard @@ -21820,7 +21815,7 @@ __metadata: services: "npm:^0.0.3" style-loader: "npm:^4.0.0" throttle-debounce: "npm:^5.0.2" - url-loader: "npm:1.1.2" + url-loader: "npm:4.1.1" utils: "npm:^0.3.1" webpack: "npm:5.102.1" webpack-bundle-size-analyzer: "npm:3.1.0" From 30bc8b70a12a7b329c861ac8d75112713b45be7a Mon Sep 17 00:00:00 2001 From: Brian Dukes Date: Tue, 21 Oct 2025 17:14:59 -0500 Subject: [PATCH 122/199] Bump source-map-loader to 5.0.0 Platform/Website/Providers/DataProviders/SqlDataProvider/10.01.03.SqlDataProvider --- .../ClientSide/Bundle.Web/package.json | 2 +- .../ClientSide/SiteSettings.Web/package.json | 2 +- yarn.lock | 22 ++++++++++--------- 3 files changed, 14 insertions(+), 12 deletions(-) diff --git a/Dnn.AdminExperience/ClientSide/Bundle.Web/package.json b/Dnn.AdminExperience/ClientSide/Bundle.Web/package.json index 6a2916f5189..4f339d06bd7 100644 --- a/Dnn.AdminExperience/ClientSide/Bundle.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Bundle.Web/package.json @@ -51,7 +51,7 @@ "redux-devtools-log-monitor": "2.1.0", "redux-immutable-state-invariant": "2.1.0", "redux-thunk": "2.4.2", - "source-map-loader": "^0.2.4", + "source-map-loader": "^5.0.0", "style-loader": "4.0.0", "throttle-debounce": "5.0.2", "url-loader": "4.1.1", diff --git a/Dnn.AdminExperience/ClientSide/SiteSettings.Web/package.json b/Dnn.AdminExperience/ClientSide/SiteSettings.Web/package.json index 64ba9a4695f..74f44ddd966 100644 --- a/Dnn.AdminExperience/ClientSide/SiteSettings.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/SiteSettings.Web/package.json @@ -44,7 +44,7 @@ "redux": "^4.2.1", "redux-immutable-state-invariant": "^2.1.0", "redux-thunk": "^2.4.2", - "source-map-loader": "^0.2.4", + "source-map-loader": "^5.0.0", "style-loader": "^4.0.0", "url-loader": "4.1.1", "webpack": "5.102.1", diff --git a/yarn.lock b/yarn.lock index a08f8f3f880..47474865a04 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6489,7 +6489,7 @@ __metadata: languageName: node linkType: hard -"async@npm:^2.4.1, async@npm:^2.5.0, async@npm:^2.6.0": +"async@npm:^2.4.1, async@npm:^2.6.0": version: 2.6.4 resolution: "async@npm:2.6.4" dependencies: @@ -10908,7 +10908,7 @@ __metadata: redux-devtools-log-monitor: "npm:2.1.0" redux-immutable-state-invariant: "npm:2.1.0" redux-thunk: "npm:2.4.2" - source-map-loader: "npm:^0.2.4" + source-map-loader: "npm:^5.0.0" style-loader: "npm:4.0.0" throttle-debounce: "npm:5.0.2" url-loader: "npm:4.1.1" @@ -19849,7 +19849,7 @@ __metadata: redux: "npm:^4.2.1" redux-immutable-state-invariant: "npm:^2.1.0" redux-thunk: "npm:^2.4.2" - source-map-loader: "npm:^0.2.4" + source-map-loader: "npm:^5.0.0" style-loader: "npm:^4.0.0" url-loader: "npm:4.1.1" webpack: "npm:5.102.1" @@ -20020,20 +20020,22 @@ __metadata: languageName: node linkType: hard -"source-map-js@npm:>=0.6.2 <2.0.0, source-map-js@npm:^1.0.1, source-map-js@npm:^1.2.1": +"source-map-js@npm:>=0.6.2 <2.0.0, source-map-js@npm:^1.0.1, source-map-js@npm:^1.0.2, source-map-js@npm:^1.2.1": version: 1.2.1 resolution: "source-map-js@npm:1.2.1" checksum: 10/ff9d8c8bf096d534a5b7707e0382ef827b4dd360a577d3f34d2b9f48e12c9d230b5747974ee7c607f0df65113732711bb701fe9ece3c7edbd43cb2294d707df3 languageName: node linkType: hard -"source-map-loader@npm:^0.2.4": - version: 0.2.4 - resolution: "source-map-loader@npm:0.2.4" +"source-map-loader@npm:^5.0.0": + version: 5.0.0 + resolution: "source-map-loader@npm:5.0.0" dependencies: - async: "npm:^2.5.0" - loader-utils: "npm:^1.1.0" - checksum: 10/10641842a7efab6246a71b9bfe7a6765b29d6c518ea42056be22132c44e20e541fcfce36872dab1c6b7725901121d6f997b2044e2c52c805c3378637ed0560b5 + iconv-lite: "npm:^0.6.3" + source-map-js: "npm:^1.0.2" + peerDependencies: + webpack: ^5.72.1 + checksum: 10/9bc90a50df1a3570ddc1ea9cd1aeadb241fd6f6ddb03e72a8f45f5d3fcc357e7edcc9fff8d35d2e338d17edf13c38a7b6e530308ac263d1b462a1e6bfacaf1a1 languageName: node linkType: hard From 851bc1393ed764a5bbf7655f64e5ef49039d839e Mon Sep 17 00:00:00 2001 From: Brian Dukes Date: Tue, 21 Oct 2025 17:15:44 -0500 Subject: [PATCH 123/199] Bump zip-lib to 1.1.2 --- DNN Platform/Skins/Aperture/package.json | 2 +- yarn.lock | 50 ++++++++++++------------ 2 files changed, 25 insertions(+), 27 deletions(-) diff --git a/DNN Platform/Skins/Aperture/package.json b/DNN Platform/Skins/Aperture/package.json index 88efa9d1622..89244f455d7 100644 --- a/DNN Platform/Skins/Aperture/package.json +++ b/DNN Platform/Skins/Aperture/package.json @@ -28,7 +28,7 @@ "sass": "^1.93.2", "tsx": "^4.20.6", "typescript": "^5.9.3", - "zip-lib": "^0.7.3" + "zip-lib": "^1.1.2" }, "browserslist": [ "last 2 versions", diff --git a/yarn.lock b/yarn.lock index 47474865a04..346044022fe 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6167,7 +6167,7 @@ __metadata: sass: "npm:^1.93.2" tsx: "npm:^4.20.6" typescript: "npm:^5.9.3" - zip-lib: "npm:^0.7.3" + zip-lib: "npm:^1.1.2" languageName: unknown linkType: soft @@ -7611,6 +7611,13 @@ __metadata: languageName: node linkType: hard +"buffer-crc32@npm:^1.0.0": + version: 1.0.0 + resolution: "buffer-crc32@npm:1.0.0" + checksum: 10/ef3b7c07622435085c04300c9a51e850ec34a27b2445f758eef69b859c7827848c2282f3840ca6c1eef3829145a1580ce540cab03ccf4433827a2b95d3b09ca7 + languageName: node + linkType: hard + "buffer-crc32@npm:~0.2.3": version: 0.2.13 resolution: "buffer-crc32@npm:0.2.13" @@ -11113,15 +11120,6 @@ __metadata: languageName: node linkType: hard -"fd-slicer@npm:~1.1.0": - version: 1.1.0 - resolution: "fd-slicer@npm:1.1.0" - dependencies: - pend: "npm:~1.2.0" - checksum: 10/db3e34fa483b5873b73f248e818f8a8b59a6427fd8b1436cd439c195fdf11e8659419404826059a642b57d18075c856d06d6a50a1413b714f12f833a9341ead3 - languageName: node - linkType: hard - "fdir@npm:^6.4.3, fdir@npm:^6.4.4": version: 6.4.6 resolution: "fdir@npm:6.4.6" @@ -22724,22 +22722,22 @@ __metadata: languageName: node linkType: hard -"yauzl@npm:^2.10.0": - version: 2.10.0 - resolution: "yauzl@npm:2.10.0" +"yauzl@npm:^3.2.0": + version: 3.2.0 + resolution: "yauzl@npm:3.2.0" dependencies: buffer-crc32: "npm:~0.2.3" - fd-slicer: "npm:~1.1.0" - checksum: 10/1e4c311050dc0cf2ee3dbe8854fe0a6cde50e420b3e561a8d97042526b4cf7a0718d6c8d89e9e526a152f4a9cec55bcea9c3617264115f48bd6704cf12a04445 + pend: "npm:~1.2.0" + checksum: 10/a3cd2bfcf7590673bb35750f2a4e5107e3cc939d32d98a072c0673fe42329e390f471b4a53dbbd72512229099b18aa3b79e6ddb87a73b3a17446080c903a2c4b languageName: node linkType: hard -"yazl@npm:^2.5.1": - version: 2.5.1 - resolution: "yazl@npm:2.5.1" +"yazl@npm:^3.3.1": + version: 3.3.1 + resolution: "yazl@npm:3.3.1" dependencies: - buffer-crc32: "npm:~0.2.3" - checksum: 10/498ea4c6bca26130608c44db166e2f63b3437b94b7ad020ca0c161268d29517e8517146e91e51b78da100ad62feadc1a1a85aaa94aab0b2dc29b355ec75bc8f0 + buffer-crc32: "npm:^1.0.0" + checksum: 10/021e6c553ea826b90bd20a109ec293f2c2a02ac7c3c361f637e49c4c746b554a0c8e9380b984e12dfee66ca40894836dd8389bec83de2224eafa2eee8cf7be42 languageName: node linkType: hard @@ -22764,12 +22762,12 @@ __metadata: languageName: node linkType: hard -"zip-lib@npm:^0.7.3": - version: 0.7.3 - resolution: "zip-lib@npm:0.7.3" +"zip-lib@npm:^1.1.2": + version: 1.1.2 + resolution: "zip-lib@npm:1.1.2" dependencies: - yauzl: "npm:^2.10.0" - yazl: "npm:^2.5.1" - checksum: 10/372e0498405494e2af34826549227b1ae9148a58b49d6a99d605cb1a44b933756e9d0d9f0e61bb6805504ac74997f2c231fbd9958b981f1e3febea0c6d4cf18c + yauzl: "npm:^3.2.0" + yazl: "npm:^3.3.1" + checksum: 10/03c1c95a1fad986f3db21e014f2e39c0acaa5314b65dcce5dfe3be64f70755fab3706806ef70e33a2ca0f8fd3e74448ea7ee659d0b44a93890434c9c1d7aee2c languageName: node linkType: hard From f83dcfa0a76ad181aeaf5eda06023c0ac0e268af Mon Sep 17 00:00:00 2001 From: Brian Dukes Date: Wed, 22 Oct 2025 08:50:42 -0500 Subject: [PATCH 124/199] Bump react-modal to 3.16.3 Platform/Website/Providers/DataProviders/SqlDataProvider/10.01.03.SqlDataProvider --- .../ClientSide/Bundle.Web/package.json | 2 +- .../ClientSide/Dnn.React.Common/package.json | 2 +- .../ClientSide/Licensing.Web/package.json | 2 +- .../ClientSide/Security.Web/package.json | 2 +- .../ClientSide/Seo.Web/package.json | 2 +- .../ClientSide/SiteSettings.Web/package.json | 2 +- .../ClientSide/TaskScheduler.Web/package.json | 2 +- yarn.lock | 31 +++++-------------- 8 files changed, 15 insertions(+), 30 deletions(-) diff --git a/Dnn.AdminExperience/ClientSide/Bundle.Web/package.json b/Dnn.AdminExperience/ClientSide/Bundle.Web/package.json index 4f339d06bd7..3c14f8ab600 100644 --- a/Dnn.AdminExperience/ClientSide/Bundle.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Bundle.Web/package.json @@ -39,7 +39,7 @@ "react-dom": "^16.14.0", "react-height": "3.0.2", "react-hot-loader": "4.13.1", - "react-modal": "3.16.1", + "react-modal": "3.16.3", "react-motion": "0.5.2", "react-redux": "8.1.1", "react-tabs": "3.2.3", diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/package.json b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/package.json index 24208dca31c..128770aa55b 100644 --- a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/package.json +++ b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/package.json @@ -33,7 +33,7 @@ "react-custom-scrollbars": "^4.2.1", "react-day-picker": "^7.4.10", "react-height": "^3.0.2", - "react-modal": "^3.16.1", + "react-modal": "^3.16.3", "react-motion": "^0.5.2", "react-scrollbar": "^0.5.6", "react-slider": "2.0.6", diff --git a/Dnn.AdminExperience/ClientSide/Licensing.Web/package.json b/Dnn.AdminExperience/ClientSide/Licensing.Web/package.json index 2a4e8867105..25a03b4a329 100644 --- a/Dnn.AdminExperience/ClientSide/Licensing.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Licensing.Web/package.json @@ -33,7 +33,7 @@ "prop-types": "^15.8.1", "raw-loader": "4.0.2", "react-hot-loader": "4.13.1", - "react-modal": "3.16.1", + "react-modal": "3.16.3", "style-loader": "^4.0.0", "url-loader": "4.1.1", "webpack": "5.102.1", diff --git a/Dnn.AdminExperience/ClientSide/Security.Web/package.json b/Dnn.AdminExperience/ClientSide/Security.Web/package.json index 0277392fd62..696f54eefe7 100644 --- a/Dnn.AdminExperience/ClientSide/Security.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Security.Web/package.json @@ -32,7 +32,7 @@ "react": "^16.14.0", "react-dom": "^16.14.0", "react-hot-loader": "4.13.1", - "react-modal": "3.16.1", + "react-modal": "3.16.3", "react-redux": "^8.1.1", "redux": "^4.2.1", "redux-immutable-state-invariant": "^2.1.0", diff --git a/Dnn.AdminExperience/ClientSide/Seo.Web/package.json b/Dnn.AdminExperience/ClientSide/Seo.Web/package.json index abcd41a6385..f5328bc21ec 100644 --- a/Dnn.AdminExperience/ClientSide/Seo.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Seo.Web/package.json @@ -37,7 +37,7 @@ "react": "^16.14.0", "react-dom": "^16.14.0", "react-hot-loader": "4.13.1", - "react-modal": "3.16.1", + "react-modal": "3.16.3", "style-loader": "^4.0.0", "url-loader": "4.1.1", "webpack": "5.102.1", diff --git a/Dnn.AdminExperience/ClientSide/SiteSettings.Web/package.json b/Dnn.AdminExperience/ClientSide/SiteSettings.Web/package.json index 74f44ddd966..0569e0380e3 100644 --- a/Dnn.AdminExperience/ClientSide/SiteSettings.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/SiteSettings.Web/package.json @@ -39,7 +39,7 @@ "react-custom-scrollbars": "4.2.1", "react-dom": "^16.14.0", "react-hot-loader": "4.13.1", - "react-modal": "3.16.1", + "react-modal": "3.16.3", "react-redux": "^8.1.1", "redux": "^4.2.1", "redux-immutable-state-invariant": "^2.1.0", diff --git a/Dnn.AdminExperience/ClientSide/TaskScheduler.Web/package.json b/Dnn.AdminExperience/ClientSide/TaskScheduler.Web/package.json index 5b03fda38e4..0e35dbb1077 100644 --- a/Dnn.AdminExperience/ClientSide/TaskScheduler.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/TaskScheduler.Web/package.json @@ -37,7 +37,7 @@ "react": "^16.14.0", "react-dom": "^16.14.0", "react-hot-loader": "4.13.1", - "react-modal": "3.16.1", + "react-modal": "3.16.3", "style-loader": "^4.0.0", "url-loader": "4.1.1", "webpack": "5.102.1", diff --git a/yarn.lock b/yarn.lock index 346044022fe..0bd7ffc090d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1681,7 +1681,7 @@ __metadata: react-dom: "npm:^16.14.0" react-height: "npm:^3.0.2" react-hot-loader: "npm:^4.13.1" - react-modal: "npm:^3.16.1" + react-modal: "npm:^3.16.3" react-motion: "npm:^0.5.2" react-scrollbar: "npm:^0.5.6" react-slider: "npm:2.0.6" @@ -10903,7 +10903,7 @@ __metadata: react-dom: "npm:^16.14.0" react-height: "npm:3.0.2" react-hot-loader: "npm:4.13.1" - react-modal: "npm:3.16.1" + react-modal: "npm:3.16.3" react-motion: "npm:0.5.2" react-redux: "npm:8.1.1" react-tabs: "npm:3.2.3" @@ -14313,7 +14313,7 @@ __metadata: prop-types: "npm:^15.8.1" raw-loader: "npm:4.0.2" react-hot-loader: "npm:4.13.1" - react-modal: "npm:3.16.1" + react-modal: "npm:3.16.3" style-loader: "npm:^4.0.0" url-loader: "npm:4.1.1" webpack: "npm:5.102.1" @@ -17845,22 +17845,7 @@ __metadata: languageName: node linkType: hard -"react-modal@npm:3.16.1": - version: 3.16.1 - resolution: "react-modal@npm:3.16.1" - dependencies: - exenv: "npm:^1.2.0" - prop-types: "npm:^15.7.2" - react-lifecycles-compat: "npm:^3.0.0" - warning: "npm:^4.0.3" - peerDependencies: - react: ^0.14.0 || ^15.0.0 || ^16 || ^17 || ^18 - react-dom: ^0.14.0 || ^15.0.0 || ^16 || ^17 || ^18 - checksum: 10/79787ed2754f65168fccefcef50b509fa1cbc2b44907f92dcfd78ea6f9702668c70604f192a4bb45badb664902fb100179d6d191e478310be94e656271963905 - languageName: node - linkType: hard - -"react-modal@npm:^3.16.1": +"react-modal@npm:3.16.3, react-modal@npm:^3.16.3": version: 3.16.3 resolution: "react-modal@npm:3.16.3" dependencies: @@ -19300,7 +19285,7 @@ __metadata: react: "npm:^16.14.0" react-dom: "npm:^16.14.0" react-hot-loader: "npm:4.13.1" - react-modal: "npm:3.16.1" + react-modal: "npm:3.16.3" react-redux: "npm:^8.1.1" redux: "npm:^4.2.1" redux-immutable-state-invariant: "npm:^2.1.0" @@ -19440,7 +19425,7 @@ __metadata: react: "npm:^16.14.0" react-dom: "npm:^16.14.0" react-hot-loader: "npm:4.13.1" - react-modal: "npm:3.16.1" + react-modal: "npm:3.16.3" style-loader: "npm:^4.0.0" url-loader: "npm:4.1.1" webpack: "npm:5.102.1" @@ -19842,7 +19827,7 @@ __metadata: react-custom-scrollbars: "npm:4.2.1" react-dom: "npm:^16.14.0" react-hot-loader: "npm:4.13.1" - react-modal: "npm:3.16.1" + react-modal: "npm:3.16.3" react-redux: "npm:^8.1.1" redux: "npm:^4.2.1" redux-immutable-state-invariant: "npm:^2.1.0" @@ -20757,7 +20742,7 @@ __metadata: react: "npm:^16.14.0" react-dom: "npm:^16.14.0" react-hot-loader: "npm:4.13.1" - react-modal: "npm:3.16.1" + react-modal: "npm:3.16.3" style-loader: "npm:^4.0.0" url-loader: "npm:4.1.1" webpack: "npm:5.102.1" From daa09c241dd1fc304b6f4400b79992f2ee444f9c Mon Sep 17 00:00:00 2001 From: Brian Dukes Date: Wed, 22 Oct 2025 10:13:54 -0500 Subject: [PATCH 125/199] yarn dedupe --- yarn.lock | 833 ++---------------------------------------------------- 1 file changed, 28 insertions(+), 805 deletions(-) diff --git a/yarn.lock b/yarn.lock index 0bd7ffc090d..8052f8546e4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12,16 +12,6 @@ __metadata: languageName: node linkType: hard -"@ampproject/remapping@npm:^2.2.0": - version: 2.3.0 - resolution: "@ampproject/remapping@npm:2.3.0" - dependencies: - "@jridgewell/gen-mapping": "npm:^0.3.5" - "@jridgewell/trace-mapping": "npm:^0.3.24" - checksum: 10/f3451525379c68a73eb0a1e65247fbf28c0cccd126d93af21c75fceff77773d43c0d4a2d51978fb131aff25b5f2cb41a9fe48cc296e61ae65e679c4f6918b0ab - languageName: node - linkType: hard - "@asamuzakjp/css-color@npm:^3.2.0": version: 3.2.0 resolution: "@asamuzakjp/css-color@npm:3.2.0" @@ -53,7 +43,7 @@ __metadata: languageName: node linkType: hard -"@babel/core@npm:7.28.4, @babel/core@npm:^7.23.9, @babel/core@npm:^7.27.4, @babel/core@npm:^7.28.4": +"@babel/core@npm:7.28.4, @babel/core@npm:^7.18.9, @babel/core@npm:^7.23.9, @babel/core@npm:^7.27.4, @babel/core@npm:^7.28.4": version: 7.28.4 resolution: "@babel/core@npm:7.28.4" dependencies: @@ -76,29 +66,6 @@ __metadata: languageName: node linkType: hard -"@babel/core@npm:^7.18.9": - version: 7.28.0 - resolution: "@babel/core@npm:7.28.0" - dependencies: - "@ampproject/remapping": "npm:^2.2.0" - "@babel/code-frame": "npm:^7.27.1" - "@babel/generator": "npm:^7.28.0" - "@babel/helper-compilation-targets": "npm:^7.27.2" - "@babel/helper-module-transforms": "npm:^7.27.3" - "@babel/helpers": "npm:^7.27.6" - "@babel/parser": "npm:^7.28.0" - "@babel/template": "npm:^7.27.2" - "@babel/traverse": "npm:^7.28.0" - "@babel/types": "npm:^7.28.0" - convert-source-map: "npm:^2.0.0" - debug: "npm:^4.1.0" - gensync: "npm:^1.0.0-beta.2" - json5: "npm:^2.2.3" - semver: "npm:^6.3.1" - checksum: 10/1c86eec8d76053f7b1c5f65296d51d7b8ac00f80d169ff76d3cd2e7d85ab222eb100d40cc3314f41b96c8cc06e9abab21c63d246161f0f3f70ef14c958419c33 - languageName: node - linkType: hard - "@babel/eslint-parser@npm:^7.28.4": version: 7.28.4 resolution: "@babel/eslint-parser@npm:7.28.4" @@ -138,19 +105,6 @@ __metadata: languageName: node linkType: hard -"@babel/generator@npm:^7.28.0": - version: 7.28.0 - resolution: "@babel/generator@npm:7.28.0" - dependencies: - "@babel/parser": "npm:^7.28.0" - "@babel/types": "npm:^7.28.0" - "@jridgewell/gen-mapping": "npm:^0.3.12" - "@jridgewell/trace-mapping": "npm:^0.3.28" - jsesc: "npm:^3.0.2" - checksum: 10/064c5ba4c07ecd7600377bd0022d5f6bdb3b35e9ff78d9378f6bd1e656467ca902c091647222ab2f0d2967f6d6c0ca33157d37dd9b1c51926c9b0e1527ab9b92 - languageName: node - linkType: hard - "@babel/helper-annotate-as-pure@npm:^7.27.1, @babel/helper-annotate-as-pure@npm:^7.27.3": version: 7.27.3 resolution: "@babel/helper-annotate-as-pure@npm:7.27.3" @@ -173,24 +127,7 @@ __metadata: languageName: node linkType: hard -"@babel/helper-create-class-features-plugin@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/helper-create-class-features-plugin@npm:7.27.1" - dependencies: - "@babel/helper-annotate-as-pure": "npm:^7.27.1" - "@babel/helper-member-expression-to-functions": "npm:^7.27.1" - "@babel/helper-optimise-call-expression": "npm:^7.27.1" - "@babel/helper-replace-supers": "npm:^7.27.1" - "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.27.1" - "@babel/traverse": "npm:^7.27.1" - semver: "npm:^6.3.1" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10/701579b49046cd42f6a6b1e693e6827df8623185adf0911c4d68a219a082d8fd4501672880d92b6b96263d1c92a3beb891b3464a662a55e69e7539d8db9277da - languageName: node - linkType: hard - -"@babel/helper-create-class-features-plugin@npm:^7.28.3": +"@babel/helper-create-class-features-plugin@npm:^7.27.1, @babel/helper-create-class-features-plugin@npm:^7.28.3": version: 7.28.3 resolution: "@babel/helper-create-class-features-plugin@npm:7.28.3" dependencies: @@ -262,20 +199,7 @@ __metadata: languageName: node linkType: hard -"@babel/helper-module-transforms@npm:^7.27.1, @babel/helper-module-transforms@npm:^7.27.3": - version: 7.27.3 - resolution: "@babel/helper-module-transforms@npm:7.27.3" - dependencies: - "@babel/helper-module-imports": "npm:^7.27.1" - "@babel/helper-validator-identifier": "npm:^7.27.1" - "@babel/traverse": "npm:^7.27.3" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10/47abc90ceb181b4bdea9bf1717adf536d1b5e5acb6f6d8a7a4524080318b5ca8a99e6d58677268c596bad71077d1d98834d2c3815f2443e6d3f287962300f15d - languageName: node - linkType: hard - -"@babel/helper-module-transforms@npm:^7.28.3": +"@babel/helper-module-transforms@npm:^7.27.1, @babel/helper-module-transforms@npm:^7.28.3": version: 7.28.3 resolution: "@babel/helper-module-transforms@npm:7.28.3" dependencies: @@ -372,16 +296,6 @@ __metadata: languageName: node linkType: hard -"@babel/helpers@npm:^7.27.6": - version: 7.27.6 - resolution: "@babel/helpers@npm:7.27.6" - dependencies: - "@babel/template": "npm:^7.27.2" - "@babel/types": "npm:^7.27.6" - checksum: 10/33c1ab2b42f05317776a4d67c5b00d916dbecfbde38a9406a1300ad3ad6e0380a2f6fcd3361369119a82a7d3c20de6e66552d147297f17f656cf17912605aa97 - languageName: node - linkType: hard - "@babel/helpers@npm:^7.28.4": version: 7.28.4 resolution: "@babel/helpers@npm:7.28.4" @@ -392,18 +306,7 @@ __metadata: languageName: node linkType: hard -"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.27.2, @babel/parser@npm:^7.28.0, @babel/parser@npm:^7.7.0": - version: 7.28.0 - resolution: "@babel/parser@npm:7.28.0" - dependencies: - "@babel/types": "npm:^7.28.0" - bin: - parser: ./bin/babel-parser.js - checksum: 10/2c14a0d2600bae9ab81924df0a85bbd34e427caa099c260743f7c6c12b2042e743e776043a0d1a2573229ae648f7e66a80cfb26fc27e2a9eb59b55932d44c817 - languageName: node - linkType: hard - -"@babel/parser@npm:^7.23.9, @babel/parser@npm:^7.28.3, @babel/parser@npm:^7.28.4": +"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.23.9, @babel/parser@npm:^7.27.2, @babel/parser@npm:^7.28.3, @babel/parser@npm:^7.28.4, @babel/parser@npm:^7.7.0": version: 7.28.4 resolution: "@babel/parser@npm:7.28.4" dependencies: @@ -1495,22 +1398,7 @@ __metadata: languageName: node linkType: hard -"@babel/traverse@npm:^7.18.9, @babel/traverse@npm:^7.27.1, @babel/traverse@npm:^7.27.3, @babel/traverse@npm:^7.28.0, @babel/traverse@npm:^7.7.0": - version: 7.28.0 - resolution: "@babel/traverse@npm:7.28.0" - dependencies: - "@babel/code-frame": "npm:^7.27.1" - "@babel/generator": "npm:^7.28.0" - "@babel/helper-globals": "npm:^7.28.0" - "@babel/parser": "npm:^7.28.0" - "@babel/template": "npm:^7.27.2" - "@babel/types": "npm:^7.28.0" - debug: "npm:^4.3.1" - checksum: 10/c1c24b12b6cb46241ec5d11ddbd2989d6955c282715cbd8ee91a09fe156b3bdb0b88353ac33329c2992113e3dfb5198f616c834f8805bb3fa85da1f864bec5f3 - languageName: node - linkType: hard - -"@babel/traverse@npm:^7.28.3, @babel/traverse@npm:^7.28.4": +"@babel/traverse@npm:^7.18.9, @babel/traverse@npm:^7.27.1, @babel/traverse@npm:^7.28.0, @babel/traverse@npm:^7.28.3, @babel/traverse@npm:^7.28.4, @babel/traverse@npm:^7.7.0": version: 7.28.4 resolution: "@babel/traverse@npm:7.28.4" dependencies: @@ -1525,17 +1413,7 @@ __metadata: languageName: node linkType: hard -"@babel/types@npm:^7.0.0, @babel/types@npm:^7.18.9, @babel/types@npm:^7.20.7, @babel/types@npm:^7.27.1, @babel/types@npm:^7.27.3, @babel/types@npm:^7.27.6, @babel/types@npm:^7.28.0, @babel/types@npm:^7.4.4, @babel/types@npm:^7.7.0": - version: 7.28.0 - resolution: "@babel/types@npm:7.28.0" - dependencies: - "@babel/helper-string-parser": "npm:^7.27.1" - "@babel/helper-validator-identifier": "npm:^7.27.1" - checksum: 10/2f28b84efb5005d1e85fc3944219c284400c42aeefc1f6e10500a74fed43b3dfb4f9e349a5d6e0e3fc24f5d241c513b30ef00ede2885535ce7a0a4e111c2098e - languageName: node - linkType: hard - -"@babel/types@npm:^7.28.2, @babel/types@npm:^7.28.4": +"@babel/types@npm:^7.0.0, @babel/types@npm:^7.18.9, @babel/types@npm:^7.20.7, @babel/types@npm:^7.27.1, @babel/types@npm:^7.27.3, @babel/types@npm:^7.28.2, @babel/types@npm:^7.28.4, @babel/types@npm:^7.4.4, @babel/types@npm:^7.7.0": version: 7.28.4 resolution: "@babel/types@npm:7.28.4" dependencies: @@ -1708,17 +1586,7 @@ __metadata: languageName: unknown linkType: soft -"@emnapi/core@npm:^1.1.0": - version: 1.4.4 - resolution: "@emnapi/core@npm:1.4.4" - dependencies: - "@emnapi/wasi-threads": "npm:1.0.3" - tslib: "npm:^2.4.0" - checksum: 10/a6ce2461816a8b3f311350b51512c78b2359cd178dc1734a877341f1a859702d4ca69bd187447e172148977348ffa843adc990d546adac246a9ac10aedabb5b8 - languageName: node - linkType: hard - -"@emnapi/core@npm:^1.4.3": +"@emnapi/core@npm:^1.1.0, @emnapi/core@npm:^1.4.3": version: 1.5.0 resolution: "@emnapi/core@npm:1.5.0" dependencies: @@ -1728,16 +1596,7 @@ __metadata: languageName: node linkType: hard -"@emnapi/runtime@npm:^1.1.0": - version: 1.4.4 - resolution: "@emnapi/runtime@npm:1.4.4" - dependencies: - tslib: "npm:^2.4.0" - checksum: 10/56ebb7f24fd694358af4f5aa585cfae5bf00cc843bac9938f87b70e2d8a3c433cb8a938f6d5e4a20cedcc284abd9420c37f5009bdd5c898084f9b70cbd5827d8 - languageName: node - linkType: hard - -"@emnapi/runtime@npm:^1.4.3": +"@emnapi/runtime@npm:^1.1.0, @emnapi/runtime@npm:^1.4.3": version: 1.5.0 resolution: "@emnapi/runtime@npm:1.5.0" dependencies: @@ -1746,15 +1605,6 @@ __metadata: languageName: node linkType: hard -"@emnapi/wasi-threads@npm:1.0.3": - version: 1.0.3 - resolution: "@emnapi/wasi-threads@npm:1.0.3" - dependencies: - tslib: "npm:^2.4.0" - checksum: 10/dd92c1464ed7b1f842cb63e2ece9509ccbab1a75015e30d0d802ad7bc34069ba79466fe6ef13b6e30cbe16fddbdb31d3a2774461b2551fe6c4a86a3f88f434f6 - languageName: node - linkType: hard - "@emnapi/wasi-threads@npm:1.1.0": version: 1.1.0 resolution: "@emnapi/wasi-threads@npm:1.1.0" @@ -1771,13 +1621,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/aix-ppc64@npm:0.25.8": - version: 0.25.8 - resolution: "@esbuild/aix-ppc64@npm:0.25.8" - conditions: os=aix & cpu=ppc64 - languageName: node - linkType: hard - "@esbuild/android-arm64@npm:0.25.11": version: 0.25.11 resolution: "@esbuild/android-arm64@npm:0.25.11" @@ -1785,13 +1628,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/android-arm64@npm:0.25.8": - version: 0.25.8 - resolution: "@esbuild/android-arm64@npm:0.25.8" - conditions: os=android & cpu=arm64 - languageName: node - linkType: hard - "@esbuild/android-arm@npm:0.25.11": version: 0.25.11 resolution: "@esbuild/android-arm@npm:0.25.11" @@ -1799,13 +1635,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/android-arm@npm:0.25.8": - version: 0.25.8 - resolution: "@esbuild/android-arm@npm:0.25.8" - conditions: os=android & cpu=arm - languageName: node - linkType: hard - "@esbuild/android-x64@npm:0.25.11": version: 0.25.11 resolution: "@esbuild/android-x64@npm:0.25.11" @@ -1813,13 +1642,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/android-x64@npm:0.25.8": - version: 0.25.8 - resolution: "@esbuild/android-x64@npm:0.25.8" - conditions: os=android & cpu=x64 - languageName: node - linkType: hard - "@esbuild/darwin-arm64@npm:0.25.11": version: 0.25.11 resolution: "@esbuild/darwin-arm64@npm:0.25.11" @@ -1827,13 +1649,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/darwin-arm64@npm:0.25.8": - version: 0.25.8 - resolution: "@esbuild/darwin-arm64@npm:0.25.8" - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - "@esbuild/darwin-x64@npm:0.25.11": version: 0.25.11 resolution: "@esbuild/darwin-x64@npm:0.25.11" @@ -1841,13 +1656,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/darwin-x64@npm:0.25.8": - version: 0.25.8 - resolution: "@esbuild/darwin-x64@npm:0.25.8" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - "@esbuild/freebsd-arm64@npm:0.25.11": version: 0.25.11 resolution: "@esbuild/freebsd-arm64@npm:0.25.11" @@ -1855,13 +1663,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/freebsd-arm64@npm:0.25.8": - version: 0.25.8 - resolution: "@esbuild/freebsd-arm64@npm:0.25.8" - conditions: os=freebsd & cpu=arm64 - languageName: node - linkType: hard - "@esbuild/freebsd-x64@npm:0.25.11": version: 0.25.11 resolution: "@esbuild/freebsd-x64@npm:0.25.11" @@ -1869,13 +1670,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/freebsd-x64@npm:0.25.8": - version: 0.25.8 - resolution: "@esbuild/freebsd-x64@npm:0.25.8" - conditions: os=freebsd & cpu=x64 - languageName: node - linkType: hard - "@esbuild/linux-arm64@npm:0.25.11": version: 0.25.11 resolution: "@esbuild/linux-arm64@npm:0.25.11" @@ -1883,13 +1677,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-arm64@npm:0.25.8": - version: 0.25.8 - resolution: "@esbuild/linux-arm64@npm:0.25.8" - conditions: os=linux & cpu=arm64 - languageName: node - linkType: hard - "@esbuild/linux-arm@npm:0.25.11": version: 0.25.11 resolution: "@esbuild/linux-arm@npm:0.25.11" @@ -1897,13 +1684,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-arm@npm:0.25.8": - version: 0.25.8 - resolution: "@esbuild/linux-arm@npm:0.25.8" - conditions: os=linux & cpu=arm - languageName: node - linkType: hard - "@esbuild/linux-ia32@npm:0.25.11": version: 0.25.11 resolution: "@esbuild/linux-ia32@npm:0.25.11" @@ -1911,13 +1691,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-ia32@npm:0.25.8": - version: 0.25.8 - resolution: "@esbuild/linux-ia32@npm:0.25.8" - conditions: os=linux & cpu=ia32 - languageName: node - linkType: hard - "@esbuild/linux-loong64@npm:0.25.11": version: 0.25.11 resolution: "@esbuild/linux-loong64@npm:0.25.11" @@ -1925,13 +1698,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-loong64@npm:0.25.8": - version: 0.25.8 - resolution: "@esbuild/linux-loong64@npm:0.25.8" - conditions: os=linux & cpu=loong64 - languageName: node - linkType: hard - "@esbuild/linux-mips64el@npm:0.25.11": version: 0.25.11 resolution: "@esbuild/linux-mips64el@npm:0.25.11" @@ -1939,13 +1705,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-mips64el@npm:0.25.8": - version: 0.25.8 - resolution: "@esbuild/linux-mips64el@npm:0.25.8" - conditions: os=linux & cpu=mips64el - languageName: node - linkType: hard - "@esbuild/linux-ppc64@npm:0.25.11": version: 0.25.11 resolution: "@esbuild/linux-ppc64@npm:0.25.11" @@ -1953,13 +1712,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-ppc64@npm:0.25.8": - version: 0.25.8 - resolution: "@esbuild/linux-ppc64@npm:0.25.8" - conditions: os=linux & cpu=ppc64 - languageName: node - linkType: hard - "@esbuild/linux-riscv64@npm:0.25.11": version: 0.25.11 resolution: "@esbuild/linux-riscv64@npm:0.25.11" @@ -1967,13 +1719,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-riscv64@npm:0.25.8": - version: 0.25.8 - resolution: "@esbuild/linux-riscv64@npm:0.25.8" - conditions: os=linux & cpu=riscv64 - languageName: node - linkType: hard - "@esbuild/linux-s390x@npm:0.25.11": version: 0.25.11 resolution: "@esbuild/linux-s390x@npm:0.25.11" @@ -1981,13 +1726,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-s390x@npm:0.25.8": - version: 0.25.8 - resolution: "@esbuild/linux-s390x@npm:0.25.8" - conditions: os=linux & cpu=s390x - languageName: node - linkType: hard - "@esbuild/linux-x64@npm:0.25.11": version: 0.25.11 resolution: "@esbuild/linux-x64@npm:0.25.11" @@ -1995,13 +1733,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-x64@npm:0.25.8": - version: 0.25.8 - resolution: "@esbuild/linux-x64@npm:0.25.8" - conditions: os=linux & cpu=x64 - languageName: node - linkType: hard - "@esbuild/netbsd-arm64@npm:0.25.11": version: 0.25.11 resolution: "@esbuild/netbsd-arm64@npm:0.25.11" @@ -2009,13 +1740,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/netbsd-arm64@npm:0.25.8": - version: 0.25.8 - resolution: "@esbuild/netbsd-arm64@npm:0.25.8" - conditions: os=netbsd & cpu=arm64 - languageName: node - linkType: hard - "@esbuild/netbsd-x64@npm:0.25.11": version: 0.25.11 resolution: "@esbuild/netbsd-x64@npm:0.25.11" @@ -2023,13 +1747,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/netbsd-x64@npm:0.25.8": - version: 0.25.8 - resolution: "@esbuild/netbsd-x64@npm:0.25.8" - conditions: os=netbsd & cpu=x64 - languageName: node - linkType: hard - "@esbuild/openbsd-arm64@npm:0.25.11": version: 0.25.11 resolution: "@esbuild/openbsd-arm64@npm:0.25.11" @@ -2037,13 +1754,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/openbsd-arm64@npm:0.25.8": - version: 0.25.8 - resolution: "@esbuild/openbsd-arm64@npm:0.25.8" - conditions: os=openbsd & cpu=arm64 - languageName: node - linkType: hard - "@esbuild/openbsd-x64@npm:0.25.11": version: 0.25.11 resolution: "@esbuild/openbsd-x64@npm:0.25.11" @@ -2051,13 +1761,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/openbsd-x64@npm:0.25.8": - version: 0.25.8 - resolution: "@esbuild/openbsd-x64@npm:0.25.8" - conditions: os=openbsd & cpu=x64 - languageName: node - linkType: hard - "@esbuild/openharmony-arm64@npm:0.25.11": version: 0.25.11 resolution: "@esbuild/openharmony-arm64@npm:0.25.11" @@ -2065,13 +1768,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/openharmony-arm64@npm:0.25.8": - version: 0.25.8 - resolution: "@esbuild/openharmony-arm64@npm:0.25.8" - conditions: os=openharmony & cpu=arm64 - languageName: node - linkType: hard - "@esbuild/sunos-x64@npm:0.25.11": version: 0.25.11 resolution: "@esbuild/sunos-x64@npm:0.25.11" @@ -2079,13 +1775,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/sunos-x64@npm:0.25.8": - version: 0.25.8 - resolution: "@esbuild/sunos-x64@npm:0.25.8" - conditions: os=sunos & cpu=x64 - languageName: node - linkType: hard - "@esbuild/win32-arm64@npm:0.25.11": version: 0.25.11 resolution: "@esbuild/win32-arm64@npm:0.25.11" @@ -2093,13 +1782,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/win32-arm64@npm:0.25.8": - version: 0.25.8 - resolution: "@esbuild/win32-arm64@npm:0.25.8" - conditions: os=win32 & cpu=arm64 - languageName: node - linkType: hard - "@esbuild/win32-ia32@npm:0.25.11": version: 0.25.11 resolution: "@esbuild/win32-ia32@npm:0.25.11" @@ -2107,13 +1789,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/win32-ia32@npm:0.25.8": - version: 0.25.8 - resolution: "@esbuild/win32-ia32@npm:0.25.8" - conditions: os=win32 & cpu=ia32 - languageName: node - linkType: hard - "@esbuild/win32-x64@npm:0.25.11": version: 0.25.11 resolution: "@esbuild/win32-x64@npm:0.25.11" @@ -2121,25 +1796,7 @@ __metadata: languageName: node linkType: hard -"@esbuild/win32-x64@npm:0.25.8": - version: 0.25.8 - resolution: "@esbuild/win32-x64@npm:0.25.8" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - -"@eslint-community/eslint-utils@npm:^4.7.0": - version: 4.7.0 - resolution: "@eslint-community/eslint-utils@npm:4.7.0" - dependencies: - eslint-visitor-keys: "npm:^3.4.3" - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - checksum: 10/43ed5d391526d9f5bbe452aef336389a473026fca92057cf97c576db11401ce9bcf8ef0bf72625bbaf6207ed8ba6bf0dcf4d7e809c24f08faa68a28533c491a7 - languageName: node - linkType: hard - -"@eslint-community/eslint-utils@npm:^4.8.0": +"@eslint-community/eslint-utils@npm:^4.7.0, @eslint-community/eslint-utils@npm:^4.8.0": version: 4.9.0 resolution: "@eslint-community/eslint-utils@npm:4.9.0" dependencies: @@ -2925,31 +2582,14 @@ __metadata: languageName: node linkType: hard -"@jridgewell/sourcemap-codec@npm:^1.4.14, @jridgewell/sourcemap-codec@npm:^1.5.0": - version: 1.5.4 - resolution: "@jridgewell/sourcemap-codec@npm:1.5.4" - checksum: 10/f677787f52224c6c971a7a41b7a074243240a6917fa75eceb9f7a442866f374fb0522b505e0496ee10a650c5936727e76d11bf36a6d0ae9e6c3b726c9e284cc7 - languageName: node - linkType: hard - -"@jridgewell/sourcemap-codec@npm:^1.5.5": +"@jridgewell/sourcemap-codec@npm:^1.4.14, @jridgewell/sourcemap-codec@npm:^1.5.0, @jridgewell/sourcemap-codec@npm:^1.5.5": version: 1.5.5 resolution: "@jridgewell/sourcemap-codec@npm:1.5.5" checksum: 10/5d9d207b462c11e322d71911e55e21a4e2772f71ffe8d6f1221b8eb5ae6774458c1d242f897fb0814e8714ca9a6b498abfa74dfe4f434493342902b1a48b33a5 languageName: node linkType: hard -"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25, @jridgewell/trace-mapping@npm:^0.3.28": - version: 0.3.29 - resolution: "@jridgewell/trace-mapping@npm:0.3.29" - dependencies: - "@jridgewell/resolve-uri": "npm:^3.1.0" - "@jridgewell/sourcemap-codec": "npm:^1.4.14" - checksum: 10/64e1ce0dc3a9e56b0118eaf1b2f50746fd59a36de37516cc6855b5370d5f367aa8229e1237536d738262e252c70ee229619cb04e3f3b822146ee3eb1b7ab297f - languageName: node - linkType: hard - -"@jridgewell/trace-mapping@npm:^0.3.23": +"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.23, @jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25, @jridgewell/trace-mapping@npm:^0.3.28": version: 0.3.31 resolution: "@jridgewell/trace-mapping@npm:0.3.31" dependencies: @@ -4855,16 +4495,7 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:*, @types/node@npm:>=10.0.0": - version: 24.0.11 - resolution: "@types/node@npm:24.0.11" - dependencies: - undici-types: "npm:~7.8.0" - checksum: 10/cdef579ab2933fabd7d19ba8a05e0ff1f95e95dc2f68b7e4660a1bcff67799a3f537e436d27392138e7a46f8f9bc6411f3566e0ecded50e66d9e3dab854694f4 - languageName: node - linkType: hard - -"@types/node@npm:^24.9.0": +"@types/node@npm:*, @types/node@npm:>=10.0.0, @types/node@npm:^24.9.0": version: 24.9.0 resolution: "@types/node@npm:24.9.0" dependencies: @@ -5101,32 +4732,6 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/project-service@npm:8.36.0": - version: 8.36.0 - resolution: "@typescript-eslint/project-service@npm:8.36.0" - dependencies: - "@typescript-eslint/tsconfig-utils": "npm:^8.36.0" - "@typescript-eslint/types": "npm:^8.36.0" - debug: "npm:^4.3.4" - peerDependencies: - typescript: ">=4.8.4 <5.9.0" - checksum: 10/0b55938d749712de9a4bee5a9f9c07be48d687f439d1110113a76a775ec06f946a4bee025e7290bd6ce7cc377b337add780c8a297845474b4f92e34306929082 - languageName: node - linkType: hard - -"@typescript-eslint/project-service@npm:8.45.0": - version: 8.45.0 - resolution: "@typescript-eslint/project-service@npm:8.45.0" - dependencies: - "@typescript-eslint/tsconfig-utils": "npm:^8.45.0" - "@typescript-eslint/types": "npm:^8.45.0" - debug: "npm:^4.3.4" - peerDependencies: - typescript: ">=4.8.4 <6.0.0" - checksum: 10/919c8260dae79eaec79de84a5ae66fbb09c2ab7aca8c3b7785cb011582a2864c8091e64c84013b05bce812e522fbc4a5ae1c68f86404e078fc84da0fe80247ce - languageName: node - linkType: hard - "@typescript-eslint/project-service@npm:8.46.2": version: 8.46.2 resolution: "@typescript-eslint/project-service@npm:8.46.2" @@ -5140,26 +4745,6 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:8.36.0": - version: 8.36.0 - resolution: "@typescript-eslint/scope-manager@npm:8.36.0" - dependencies: - "@typescript-eslint/types": "npm:8.36.0" - "@typescript-eslint/visitor-keys": "npm:8.36.0" - checksum: 10/80d3956f110ad5c225f4f70bec8be83f1823c516525d9be943e522e96df5b3430b85bab658907981e83f344baf6db6854afbd5132b438f31db51ac860c428a8a - languageName: node - linkType: hard - -"@typescript-eslint/scope-manager@npm:8.45.0": - version: 8.45.0 - resolution: "@typescript-eslint/scope-manager@npm:8.45.0" - dependencies: - "@typescript-eslint/types": "npm:8.45.0" - "@typescript-eslint/visitor-keys": "npm:8.45.0" - checksum: 10/e45d63a0109eca00f6b431d87e73eacfa03b1795905f123e9144bcacb5abb83888167d1849317c6f90ba1f3553196b2eab13e5e7cdd1050d7a84eaadb65ba801 - languageName: node - linkType: hard - "@typescript-eslint/scope-manager@npm:8.46.2": version: 8.46.2 resolution: "@typescript-eslint/scope-manager@npm:8.46.2" @@ -5170,24 +4755,6 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/tsconfig-utils@npm:8.36.0, @typescript-eslint/tsconfig-utils@npm:^8.36.0": - version: 8.36.0 - resolution: "@typescript-eslint/tsconfig-utils@npm:8.36.0" - peerDependencies: - typescript: ">=4.8.4 <5.9.0" - checksum: 10/c0561811b395e1ab4fb6a50746fbb369b46d31a8324d6d1742a41f6e1a3d4d543b2c0cacb56a435206ef725bd017d2d1ee35730219efd28b1e311a1620e08027 - languageName: node - linkType: hard - -"@typescript-eslint/tsconfig-utils@npm:8.45.0, @typescript-eslint/tsconfig-utils@npm:^8.45.0": - version: 8.45.0 - resolution: "@typescript-eslint/tsconfig-utils@npm:8.45.0" - peerDependencies: - typescript: ">=4.8.4 <6.0.0" - checksum: 10/91696bbc34758749d3647236986bf418bacdc0de0e27c2d39cd7c2408c404c35ed18c47c2a55aea0bb9525cc7eb656586359c4e651144603f3438ce93fe80081 - languageName: node - linkType: hard - "@typescript-eslint/tsconfig-utils@npm:8.46.2, @typescript-eslint/tsconfig-utils@npm:^8.46.2": version: 8.46.2 resolution: "@typescript-eslint/tsconfig-utils@npm:8.46.2" @@ -5213,20 +4780,6 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/types@npm:8.36.0, @typescript-eslint/types@npm:^8.36.0": - version: 8.36.0 - resolution: "@typescript-eslint/types@npm:8.36.0" - checksum: 10/14ac09633d6e9947d88b8d714826bb12f4aa71874351e5c92d43fc9b5b48358cd6f58473c12e7bd583bcb3e05993bef89783e67f60746df19553d6e7ee1588af - languageName: node - linkType: hard - -"@typescript-eslint/types@npm:8.45.0, @typescript-eslint/types@npm:^8.45.0": - version: 8.45.0 - resolution: "@typescript-eslint/types@npm:8.45.0" - checksum: 10/889ded2b9bf376c876611b2a37f89051fdc8ec501314a4b97832caefa4305bffc4b752548941ce2e7f9659a81336d096d439d4c2ed236c99fefdf60b715593dd - languageName: node - linkType: hard - "@typescript-eslint/types@npm:8.46.2, @typescript-eslint/types@npm:^8.46.2": version: 8.46.2 resolution: "@typescript-eslint/types@npm:8.46.2" @@ -5234,46 +4787,6 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:8.36.0": - version: 8.36.0 - resolution: "@typescript-eslint/typescript-estree@npm:8.36.0" - dependencies: - "@typescript-eslint/project-service": "npm:8.36.0" - "@typescript-eslint/tsconfig-utils": "npm:8.36.0" - "@typescript-eslint/types": "npm:8.36.0" - "@typescript-eslint/visitor-keys": "npm:8.36.0" - debug: "npm:^4.3.4" - fast-glob: "npm:^3.3.2" - is-glob: "npm:^4.0.3" - minimatch: "npm:^9.0.4" - semver: "npm:^7.6.0" - ts-api-utils: "npm:^2.1.0" - peerDependencies: - typescript: ">=4.8.4 <5.9.0" - checksum: 10/5f4f7ee4ab00e83640629673e0fbb512f3a21b9437c3f5ea1627efe459283ca5831a6496629d5d64e6d285dd146a65ff741f5cee2c4f6052e1d7934a119de728 - languageName: node - linkType: hard - -"@typescript-eslint/typescript-estree@npm:8.45.0": - version: 8.45.0 - resolution: "@typescript-eslint/typescript-estree@npm:8.45.0" - dependencies: - "@typescript-eslint/project-service": "npm:8.45.0" - "@typescript-eslint/tsconfig-utils": "npm:8.45.0" - "@typescript-eslint/types": "npm:8.45.0" - "@typescript-eslint/visitor-keys": "npm:8.45.0" - debug: "npm:^4.3.4" - fast-glob: "npm:^3.3.2" - is-glob: "npm:^4.0.3" - minimatch: "npm:^9.0.4" - semver: "npm:^7.6.0" - ts-api-utils: "npm:^2.1.0" - peerDependencies: - typescript: ">=4.8.4 <6.0.0" - checksum: 10/2fb4e63ad6128afbada8eabaabfe7d5a8f1a1f387bb13d7d3209103493ba974b518bf47b17e9a853beba10ec81efd5582ebf628c2eb77a924cf67d4d85466e5e - languageName: node - linkType: hard - "@typescript-eslint/typescript-estree@npm:8.46.2": version: 8.46.2 resolution: "@typescript-eslint/typescript-estree@npm:8.46.2" @@ -5294,7 +4807,7 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/utils@npm:8.46.2, @typescript-eslint/utils@npm:^8.46.2": +"@typescript-eslint/utils@npm:8.46.2, @typescript-eslint/utils@npm:^8.0.0, @typescript-eslint/utils@npm:^8.46.2, @typescript-eslint/utils@npm:^8.8.1": version: 8.46.2 resolution: "@typescript-eslint/utils@npm:8.46.2" dependencies: @@ -5309,56 +4822,6 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/utils@npm:^8.0.0": - version: 8.45.0 - resolution: "@typescript-eslint/utils@npm:8.45.0" - dependencies: - "@eslint-community/eslint-utils": "npm:^4.7.0" - "@typescript-eslint/scope-manager": "npm:8.45.0" - "@typescript-eslint/types": "npm:8.45.0" - "@typescript-eslint/typescript-estree": "npm:8.45.0" - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: ">=4.8.4 <6.0.0" - checksum: 10/9e675a0da4434bd434901f9ba3e1e91d4d7ad542d7fcf8c23534a67f2f9039a569da20929e67a6562e3a263be226ad424cd0c1ac80f7828f4285f7f34e361926 - languageName: node - linkType: hard - -"@typescript-eslint/utils@npm:^8.8.1": - version: 8.36.0 - resolution: "@typescript-eslint/utils@npm:8.36.0" - dependencies: - "@eslint-community/eslint-utils": "npm:^4.7.0" - "@typescript-eslint/scope-manager": "npm:8.36.0" - "@typescript-eslint/types": "npm:8.36.0" - "@typescript-eslint/typescript-estree": "npm:8.36.0" - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: ">=4.8.4 <5.9.0" - checksum: 10/4683a3fda91b55139181277e583edba5006e1a7264df2648abd1adeeeb0565b31d5b15d55f73cde738475a2d2162e234301c01e70c4dece6a26b2abf65da610e - languageName: node - linkType: hard - -"@typescript-eslint/visitor-keys@npm:8.36.0": - version: 8.36.0 - resolution: "@typescript-eslint/visitor-keys@npm:8.36.0" - dependencies: - "@typescript-eslint/types": "npm:8.36.0" - eslint-visitor-keys: "npm:^4.2.1" - checksum: 10/cf0002b60c4940ada2f66da3432109a1ca5589e42d11a766576606bc8fae9dc21d95451a38a320d9e0574310e8953b0e5cf623cc3934bd2bfde1b06ebf391036 - languageName: node - linkType: hard - -"@typescript-eslint/visitor-keys@npm:8.45.0": - version: 8.45.0 - resolution: "@typescript-eslint/visitor-keys@npm:8.45.0" - dependencies: - "@typescript-eslint/types": "npm:8.45.0" - eslint-visitor-keys: "npm:^4.2.1" - checksum: 10/8ae7e19c69c1f67fa8f952c18a09ad42a8cba492545d6e1dca6750e760893773f69ec6b1a96d0997e833c82aecc5ff7fb9546c5abd6c4427d91206670cf8ff37 - languageName: node - linkType: hard - "@typescript-eslint/visitor-keys@npm:8.46.2": version: 8.46.2 resolution: "@typescript-eslint/visitor-keys@npm:8.46.2" @@ -7559,21 +7022,7 @@ __metadata: languageName: node linkType: hard -"browserslist@npm:^4.0.0, browserslist@npm:^4.24.0, browserslist@npm:^4.24.4, browserslist@npm:^4.24.5, browserslist@npm:^4.25.1": - version: 4.25.1 - resolution: "browserslist@npm:4.25.1" - dependencies: - caniuse-lite: "npm:^1.0.30001726" - electron-to-chromium: "npm:^1.5.173" - node-releases: "npm:^2.0.19" - update-browserslist-db: "npm:^1.1.3" - bin: - browserslist: cli.js - checksum: 10/bfb5511b425886279bbe2ea44d10e340c8aea85866c9d45083c13491d049b6362e254018c0afbf56d41ceeb64f994957ea8ae98dbba74ef1e54ef901c8732987 - languageName: node - linkType: hard - -"browserslist@npm:^4.26.3": +"browserslist@npm:^4.0.0, browserslist@npm:^4.24.0, browserslist@npm:^4.24.4, browserslist@npm:^4.24.5, browserslist@npm:^4.25.1, browserslist@npm:^4.26.3": version: 4.26.3 resolution: "browserslist@npm:4.26.3" dependencies: @@ -7813,14 +7262,7 @@ __metadata: languageName: node linkType: hard -"caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30001702, caniuse-lite@npm:^1.0.30001726": - version: 1.0.30001752 - resolution: "caniuse-lite@npm:1.0.30001752" - checksum: 10/2efe0ad22fdb1b8a810238b6dc589aa1ecfb3d2f404ec7079040c94d83963402afd76c0fc514a54719d6f613c847d237ed0f8f48260d7bcda0e9014b874ad08a - languageName: node - linkType: hard - -"caniuse-lite@npm:^1.0.30001746": +"caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30001702, caniuse-lite@npm:^1.0.30001746": version: 1.0.30001751 resolution: "caniuse-lite@npm:1.0.30001751" checksum: 10/608f7e1248b7023020382c7dbb0ef389693b3fc98193c3ccea2d44126306d6ac905a5061cf9e62bf640535a86e7a98e563b34c02f909296cfe228f41627a4dc7 @@ -8017,14 +7459,7 @@ __metadata: languageName: node linkType: hard -"ci-info@npm:^4.0.0": - version: 4.3.0 - resolution: "ci-info@npm:4.3.0" - checksum: 10/01e359032a34782fa2503530dd350c3ffaecede7d9ea0b120efa2ddda4c8dc80d8c2566caf1ea2287c739fad2bf277c65f70063a21f31f66203b889039c70eea - languageName: node - linkType: hard - -"ci-info@npm:^4.2.0": +"ci-info@npm:^4.0.0, ci-info@npm:^4.2.0": version: 4.3.1 resolution: "ci-info@npm:4.3.1" checksum: 10/9dc952bef67e665ccde2e7a552d42d5d095529d21829ece060a00925ede2dfa136160c70ef2471ea6ed6c9b133218b47c007f56955c0f1734a2e57f240aa7445 @@ -9684,13 +9119,6 @@ __metadata: languageName: node linkType: hard -"electron-to-chromium@npm:^1.5.173": - version: 1.5.180 - resolution: "electron-to-chromium@npm:1.5.180" - checksum: 10/8d7f68650427f6bcb107ee1dcbe18f68b5c582601653095bec653fa898bd8427be4b1836581ce74405dca7cb36ebfc265a85c186e750b4de6e6f3ac4cfeef71b - languageName: node - linkType: hard - "electron-to-chromium@npm:^1.5.227": version: 1.5.237 resolution: "electron-to-chromium@npm:1.5.237" @@ -9834,16 +9262,6 @@ __metadata: languageName: node linkType: hard -"enhanced-resolve@npm:^5.17.1": - version: 5.18.2 - resolution: "enhanced-resolve@npm:5.18.2" - dependencies: - graceful-fs: "npm:^4.2.4" - tapable: "npm:^2.2.0" - checksum: 10/d1b517c908b69d1afbf87b476bbe7dd8d1daf11070127b9ec4f8553f0c6020d30f79103c938776645d569e954e4e04c326f408d2ea3820ade71e72798fb7d36f - languageName: node - linkType: hard - "enhanced-resolve@npm:^5.17.3": version: 5.18.3 resolution: "enhanced-resolve@npm:5.18.3" @@ -10207,96 +9625,7 @@ __metadata: languageName: node linkType: hard -"esbuild@npm:^0.18.0 || ^0.19.0 || ^0.20.0 || ^0.21.0 || ^0.22.0 || ^0.23.0 || ^0.24.0 || ^0.25.0, esbuild@npm:~0.25.0": - version: 0.25.8 - resolution: "esbuild@npm:0.25.8" - dependencies: - "@esbuild/aix-ppc64": "npm:0.25.8" - "@esbuild/android-arm": "npm:0.25.8" - "@esbuild/android-arm64": "npm:0.25.8" - "@esbuild/android-x64": "npm:0.25.8" - "@esbuild/darwin-arm64": "npm:0.25.8" - "@esbuild/darwin-x64": "npm:0.25.8" - "@esbuild/freebsd-arm64": "npm:0.25.8" - "@esbuild/freebsd-x64": "npm:0.25.8" - "@esbuild/linux-arm": "npm:0.25.8" - "@esbuild/linux-arm64": "npm:0.25.8" - "@esbuild/linux-ia32": "npm:0.25.8" - "@esbuild/linux-loong64": "npm:0.25.8" - "@esbuild/linux-mips64el": "npm:0.25.8" - "@esbuild/linux-ppc64": "npm:0.25.8" - "@esbuild/linux-riscv64": "npm:0.25.8" - "@esbuild/linux-s390x": "npm:0.25.8" - "@esbuild/linux-x64": "npm:0.25.8" - "@esbuild/netbsd-arm64": "npm:0.25.8" - "@esbuild/netbsd-x64": "npm:0.25.8" - "@esbuild/openbsd-arm64": "npm:0.25.8" - "@esbuild/openbsd-x64": "npm:0.25.8" - "@esbuild/openharmony-arm64": "npm:0.25.8" - "@esbuild/sunos-x64": "npm:0.25.8" - "@esbuild/win32-arm64": "npm:0.25.8" - "@esbuild/win32-ia32": "npm:0.25.8" - "@esbuild/win32-x64": "npm:0.25.8" - dependenciesMeta: - "@esbuild/aix-ppc64": - optional: true - "@esbuild/android-arm": - optional: true - "@esbuild/android-arm64": - optional: true - "@esbuild/android-x64": - optional: true - "@esbuild/darwin-arm64": - optional: true - "@esbuild/darwin-x64": - optional: true - "@esbuild/freebsd-arm64": - optional: true - "@esbuild/freebsd-x64": - optional: true - "@esbuild/linux-arm": - optional: true - "@esbuild/linux-arm64": - optional: true - "@esbuild/linux-ia32": - optional: true - "@esbuild/linux-loong64": - optional: true - "@esbuild/linux-mips64el": - optional: true - "@esbuild/linux-ppc64": - optional: true - "@esbuild/linux-riscv64": - optional: true - "@esbuild/linux-s390x": - optional: true - "@esbuild/linux-x64": - optional: true - "@esbuild/netbsd-arm64": - optional: true - "@esbuild/netbsd-x64": - optional: true - "@esbuild/openbsd-arm64": - optional: true - "@esbuild/openbsd-x64": - optional: true - "@esbuild/openharmony-arm64": - optional: true - "@esbuild/sunos-x64": - optional: true - "@esbuild/win32-arm64": - optional: true - "@esbuild/win32-ia32": - optional: true - "@esbuild/win32-x64": - optional: true - bin: - esbuild: bin/esbuild - checksum: 10/9897411732768e652d90fa5dfadae965e8f420d24e5f23fa0604331a1441769e2c7ee4e41ca53e926f1fb51a53af52e01fc9070fdc1a4edf3e9ec9208ee41273 - languageName: node - linkType: hard - -"esbuild@npm:^0.25.11": +"esbuild@npm:^0.18.0 || ^0.19.0 || ^0.20.0 || ^0.21.0 || ^0.22.0 || ^0.23.0 || ^0.24.0 || ^0.25.0, esbuild@npm:^0.25.11, esbuild@npm:~0.25.0": version: 0.25.11 resolution: "esbuild@npm:0.25.11" dependencies: @@ -14614,14 +13943,7 @@ __metadata: languageName: node linkType: hard -"loupe@npm:^3.1.0": - version: 3.1.4 - resolution: "loupe@npm:3.1.4" - checksum: 10/06ab1893731f167f2ce71f464a8a68372dc4cb807ecae20f9b844660c93813a298ca76bcd747ba6568b057af725ea63f0034ba3140c8f1d1fbb482d797e593ef - languageName: node - linkType: hard - -"loupe@npm:^3.1.4": +"loupe@npm:^3.1.0, loupe@npm:^3.1.4": version: 3.2.1 resolution: "loupe@npm:3.2.1" checksum: 10/a4d78ec758aaa04e0e35d5cd1c15e970beb9cdbfd3d0f34f98b9bcda489f896a7190b3b6cc40b7a6dcb8e97e82e96eafaae10096aaa469804acdba6f7c2bde5f @@ -14669,7 +13991,7 @@ __metadata: languageName: node linkType: hard -"magic-string@npm:^0.30.17": +"magic-string@npm:^0.30.17, magic-string@npm:^0.30.5": version: 0.30.19 resolution: "magic-string@npm:0.30.19" dependencies: @@ -14678,15 +14000,6 @@ __metadata: languageName: node linkType: hard -"magic-string@npm:^0.30.5": - version: 0.30.17 - resolution: "magic-string@npm:0.30.17" - dependencies: - "@jridgewell/sourcemap-codec": "npm:^1.5.0" - checksum: 10/2f71af2b0afd78c2e9012a29b066d2c8ba45a9cd0c8070f7fd72de982fb1c403b4e3afdb1dae00691d56885ede66b772ef6bedf765e02e3a7066208fe2fec4aa - languageName: node - linkType: hard - "make-dir@npm:4.0.0, make-dir@npm:^4.0.0": version: 4.0.0 resolution: "make-dir@npm:4.0.0" @@ -15491,13 +14804,6 @@ __metadata: languageName: node linkType: hard -"node-releases@npm:^2.0.19": - version: 2.0.19 - resolution: "node-releases@npm:2.0.19" - checksum: 10/c2b33b4f0c40445aee56141f13ca692fa6805db88510e5bbb3baadb2da13e1293b738e638e15e4a8eb668bb9e97debb08e7a35409b477b5cc18f171d35a83045 - languageName: node - linkType: hard - "node-releases@npm:^2.0.21": version: 2.0.25 resolution: "node-releases@npm:2.0.25" @@ -19228,19 +18534,7 @@ __metadata: languageName: node linkType: hard -"schema-utils@npm:^4.0.0, schema-utils@npm:^4.2.0, schema-utils@npm:^4.3.0, schema-utils@npm:^4.3.2": - version: 4.3.2 - resolution: "schema-utils@npm:4.3.2" - dependencies: - "@types/json-schema": "npm:^7.0.9" - ajv: "npm:^8.9.0" - ajv-formats: "npm:^2.1.1" - ajv-keywords: "npm:^5.1.0" - checksum: 10/02c32c34aae762d48468f98465a96a167fede637772871c7c7d8923671ddb9f20b2cc6f6e8448ae6bef5363e3597493c655212c8b06a4ee73aa099d9452fbd8b - languageName: node - linkType: hard - -"schema-utils@npm:^4.3.3": +"schema-utils@npm:^4.0.0, schema-utils@npm:^4.2.0, schema-utils@npm:^4.3.0, schema-utils@npm:^4.3.3": version: 4.3.3 resolution: "schema-utils@npm:4.3.3" dependencies: @@ -19325,7 +18619,7 @@ __metadata: languageName: node linkType: hard -"semver@npm:7.7.2, semver@npm:^7.0.0, semver@npm:^7.1.1, semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.5.3, semver@npm:^7.5.4, semver@npm:^7.6.0, semver@npm:^7.6.2": +"semver@npm:7.7.2": version: 7.7.2 resolution: "semver@npm:7.7.2" bin: @@ -19343,7 +18637,7 @@ __metadata: languageName: node linkType: hard -"semver@npm:^7.7.2": +"semver@npm:^7.0.0, semver@npm:^7.1.1, semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.5.3, semver@npm:^7.5.4, semver@npm:^7.6.0, semver@npm:^7.6.2, semver@npm:^7.7.2": version: 7.7.3 resolution: "semver@npm:7.7.3" bin: @@ -20656,14 +19950,7 @@ __metadata: languageName: node linkType: hard -"tapable@npm:^2.0.0, tapable@npm:^2.1.1, tapable@npm:^2.2.0, tapable@npm:^2.2.1": - version: 2.2.2 - resolution: "tapable@npm:2.2.2" - checksum: 10/065a0dc44aba1b32020faa1c27c719e8f76e5345347515d8494bf158524f36e9f22ad9eaa5b5494f9d5d67bf0640afdd5698505948c46d720b6b7e69d19349a6 - languageName: node - linkType: hard - -"tapable@npm:^2.3.0": +"tapable@npm:^2.0.0, tapable@npm:^2.2.0, tapable@npm:^2.2.1, tapable@npm:^2.3.0": version: 2.3.0 resolution: "tapable@npm:2.3.0" checksum: 10/496a841039960533bb6e44816a01fffc2a1eb428bb2051ecab9e87adf07f19e1f937566cbbbb09dceff31163c0ffd81baafcad84db900b601f0155dd0b37e9f2 @@ -21368,17 +20655,7 @@ __metadata: languageName: node linkType: hard -"typescript@npm:>=3 < 6": - version: 5.8.3 - resolution: "typescript@npm:5.8.3" - bin: - tsc: bin/tsc - tsserver: bin/tsserver - checksum: 10/65c40944c51b513b0172c6710ee62e951b70af6f75d5a5da745cb7fab132c09ae27ffdf7838996e3ed603bb015dadd099006658046941bd0ba30340cc563ae92 - languageName: node - linkType: hard - -"typescript@npm:^5.9.3": +"typescript@npm:>=3 < 6, typescript@npm:^5.9.3": version: 5.9.3 resolution: "typescript@npm:5.9.3" bin: @@ -21388,17 +20665,7 @@ __metadata: languageName: node linkType: hard -"typescript@patch:typescript@npm%3A>=3 < 6#optional!builtin": - version: 5.8.3 - resolution: "typescript@patch:typescript@npm%3A5.8.3#optional!builtin::version=5.8.3&hash=5786d5" - bin: - tsc: bin/tsc - tsserver: bin/tsserver - checksum: 10/b9b1e73dabac5dc730c041325dbd9c99467c1b0d239f1b74ec3b90d831384af3e2ba973946232df670519147eb51a2c20f6f96163cea2b359f03de1e2091cc4f - languageName: node - linkType: hard - -"typescript@patch:typescript@npm%3A^5.9.3#optional!builtin": +"typescript@patch:typescript@npm%3A>=3 < 6#optional!builtin, typescript@patch:typescript@npm%3A^5.9.3#optional!builtin": version: 5.9.3 resolution: "typescript@patch:typescript@npm%3A5.9.3#optional!builtin::version=5.9.3&hash=5786d5" bin: @@ -21495,13 +20762,6 @@ __metadata: languageName: node linkType: hard -"undici-types@npm:~7.8.0": - version: 7.8.0 - resolution: "undici-types@npm:7.8.0" - checksum: 10/fcff3fbab234f067fbd69e374ee2c198ba74c364ceaf6d93db7ca267e784457b5518cd01d0d2329b075f412574205ea3172a9a675facb49b4c9efb7141cd80b7 - languageName: node - linkType: hard - "undici@npm:^7.10.0": version: 7.11.0 resolution: "undici@npm:7.11.0" @@ -21967,7 +21227,7 @@ __metadata: languageName: node linkType: hard -"watchpack@npm:^2.4.1, watchpack@npm:^2.4.4": +"watchpack@npm:^2.4.4": version: 2.4.4 resolution: "watchpack@npm:2.4.4" dependencies: @@ -22188,7 +21448,7 @@ __metadata: languageName: node linkType: hard -"webpack-sources@npm:^3.2.3, webpack-sources@npm:^3.3.3": +"webpack-sources@npm:^3.3.3": version: 3.3.3 resolution: "webpack-sources@npm:3.3.3" checksum: 10/ec5d72607e8068467370abccbfff855c596c098baedbe9d198a557ccf198e8546a322836a6f74241492576adba06100286592993a62b63196832cdb53c8bae91 @@ -22202,44 +21462,7 @@ __metadata: languageName: node linkType: hard -"webpack@npm:5": - version: 5.99.9 - resolution: "webpack@npm:5.99.9" - dependencies: - "@types/eslint-scope": "npm:^3.7.7" - "@types/estree": "npm:^1.0.6" - "@types/json-schema": "npm:^7.0.15" - "@webassemblyjs/ast": "npm:^1.14.1" - "@webassemblyjs/wasm-edit": "npm:^1.14.1" - "@webassemblyjs/wasm-parser": "npm:^1.14.1" - acorn: "npm:^8.14.0" - browserslist: "npm:^4.24.0" - chrome-trace-event: "npm:^1.0.2" - enhanced-resolve: "npm:^5.17.1" - es-module-lexer: "npm:^1.2.1" - eslint-scope: "npm:5.1.1" - events: "npm:^3.2.0" - glob-to-regexp: "npm:^0.4.1" - graceful-fs: "npm:^4.2.11" - json-parse-even-better-errors: "npm:^2.3.1" - loader-runner: "npm:^4.2.0" - mime-types: "npm:^2.1.27" - neo-async: "npm:^2.6.2" - schema-utils: "npm:^4.3.2" - tapable: "npm:^2.1.1" - terser-webpack-plugin: "npm:^5.3.11" - watchpack: "npm:^2.4.1" - webpack-sources: "npm:^3.2.3" - peerDependenciesMeta: - webpack-cli: - optional: true - bin: - webpack: bin/webpack.js - checksum: 10/cf4a217239bcaa892f93702639ac837a16510edb7a1326955fb042d499d297cbdb16f20a81f3be6ec041b22ab47c599c757e505fdee1dd89b7f7a1ce4337fbf3 - languageName: node - linkType: hard - -"webpack@npm:5.102.1": +"webpack@npm:5, webpack@npm:5.102.1": version: 5.102.1 resolution: "webpack@npm:5.102.1" dependencies: From 3bc8f7c48114a48608b2e430085268744f4f0d53 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 3 Nov 2025 14:55:51 +0000 Subject: [PATCH 126/199] Bump @babel/preset-react from 7.25.9 to 7.28.5 Bumps [@babel/preset-react](https://github.com/babel/babel/tree/HEAD/packages/babel-preset-react) from 7.25.9 to 7.28.5. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.28.5/packages/babel-preset-react) --- updated-dependencies: - dependency-name: "@babel/preset-react" dependency-version: 7.28.5 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .../ClientSide/SiteGroups.Web/package.json | 2 +- .../ClientSide/Sites.Web/package.json | 2 +- .../Sites.Web/src/_exportables/package.json | 2 +- yarn.lock | 26 +++++++++++++++---- 4 files changed, 24 insertions(+), 8 deletions(-) diff --git a/Dnn.AdminExperience/ClientSide/SiteGroups.Web/package.json b/Dnn.AdminExperience/ClientSide/SiteGroups.Web/package.json index 56c3be95b2d..689c18409fd 100644 --- a/Dnn.AdminExperience/ClientSide/SiteGroups.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/SiteGroups.Web/package.json @@ -14,7 +14,7 @@ "@babel/plugin-proposal-object-rest-spread": "7.20.7", "@babel/plugin-transform-object-assign": "7.27.1", "@babel/preset-env": "7.28.3", - "@babel/preset-react": "7.27.1", + "@babel/preset-react": "7.28.5", "@dnnsoftware/dnn-react-common": "10.1.0", "babel-loader": "10.0.0", "babel-plugin-transform-react-remove-prop-types": "0.4.24", diff --git a/Dnn.AdminExperience/ClientSide/Sites.Web/package.json b/Dnn.AdminExperience/ClientSide/Sites.Web/package.json index 1e04a57b890..98c96eab17a 100644 --- a/Dnn.AdminExperience/ClientSide/Sites.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Sites.Web/package.json @@ -14,7 +14,7 @@ "@babel/plugin-proposal-object-rest-spread": "7.20.7", "@babel/plugin-transform-object-assign": "7.27.1", "@babel/preset-env": "7.28.3", - "@babel/preset-react": "7.27.1", + "@babel/preset-react": "7.28.5", "@dnnsoftware/dnn-react-common": "10.1.0", "babel-loader": "10.0.0", "babel-plugin-transform-react-remove-prop-types": "0.4.24", diff --git a/Dnn.AdminExperience/ClientSide/Sites.Web/src/_exportables/package.json b/Dnn.AdminExperience/ClientSide/Sites.Web/src/_exportables/package.json index 26ca7c09418..f9a6af6dec8 100644 --- a/Dnn.AdminExperience/ClientSide/Sites.Web/src/_exportables/package.json +++ b/Dnn.AdminExperience/ClientSide/Sites.Web/src/_exportables/package.json @@ -14,7 +14,7 @@ "@babel/plugin-proposal-object-rest-spread": "7.20.7", "@babel/plugin-transform-object-assign": "7.27.1", "@babel/preset-env": "7.28.3", - "@babel/preset-react": "7.27.1", + "@babel/preset-react": "7.28.5", "@dnnsoftware/dnn-react-common": "10.1.0", "babel-loader": "10.0.0", "babel-plugin-transform-react-remove-prop-types": "0.4.24", diff --git a/yarn.lock b/yarn.lock index 8052f8546e4..0264833004b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1085,7 +1085,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-react-display-name@npm:^7.27.1": +"@babel/plugin-transform-react-display-name@npm:^7.27.1, @babel/plugin-transform-react-display-name@npm:^7.28.0": version: 7.28.0 resolution: "@babel/plugin-transform-react-display-name@npm:7.28.0" dependencies: @@ -1364,7 +1364,23 @@ __metadata: languageName: node linkType: hard -"@babel/preset-react@npm:7.27.1, @babel/preset-react@npm:^7.27.1": +"@babel/preset-react@npm:7.28.5": + version: 7.28.5 + resolution: "@babel/preset-react@npm:7.28.5" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/helper-validator-option": "npm:^7.27.1" + "@babel/plugin-transform-react-display-name": "npm:^7.28.0" + "@babel/plugin-transform-react-jsx": "npm:^7.27.1" + "@babel/plugin-transform-react-jsx-development": "npm:^7.27.1" + "@babel/plugin-transform-react-pure-annotations": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10/c00d43b27790caddee7c4971b11b4bf479a761175433e2f168b3d7e1ac6ee36d4d929a76acc7f302e9bff3a5b26d02d37f0ad7ae6359e076e5baa862b00843b2 + languageName: node + linkType: hard + +"@babel/preset-react@npm:^7.27.1": version: 7.27.1 resolution: "@babel/preset-react@npm:7.27.1" dependencies: @@ -8724,7 +8740,7 @@ __metadata: "@babel/plugin-proposal-object-rest-spread": "npm:7.20.7" "@babel/plugin-transform-object-assign": "npm:7.27.1" "@babel/preset-env": "npm:7.28.3" - "@babel/preset-react": "npm:7.27.1" + "@babel/preset-react": "npm:7.28.5" "@dnnsoftware/dnn-react-common": "npm:10.1.0" babel-loader: "npm:10.0.0" babel-plugin-transform-react-remove-prop-types: "npm:0.4.24" @@ -8760,7 +8776,7 @@ __metadata: "@babel/plugin-proposal-object-rest-spread": "npm:7.20.7" "@babel/plugin-transform-object-assign": "npm:7.27.1" "@babel/preset-env": "npm:7.28.3" - "@babel/preset-react": "npm:7.27.1" + "@babel/preset-react": "npm:7.28.5" "@dnnsoftware/dnn-react-common": "npm:10.1.0" babel-loader: "npm:10.0.0" babel-plugin-transform-react-remove-prop-types: "npm:0.4.24" @@ -19144,7 +19160,7 @@ __metadata: "@babel/plugin-proposal-object-rest-spread": "npm:7.20.7" "@babel/plugin-transform-object-assign": "npm:7.27.1" "@babel/preset-env": "npm:7.28.3" - "@babel/preset-react": "npm:7.27.1" + "@babel/preset-react": "npm:7.28.5" "@dnnsoftware/dnn-react-common": "npm:10.1.0" babel-loader: "npm:10.0.0" babel-plugin-transform-react-remove-prop-types: "npm:0.4.24" From 06fc803eed345cd239450a5217dcc47dd78a625f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 3 Nov 2025 15:00:32 +0000 Subject: [PATCH 127/199] Bump tmp in the npm_and_yarn group across 1 directory Bumps the npm_and_yarn group with 1 update in the / directory: [tmp](https://github.com/raszi/node-tmp). Updates `tmp` from 0.2.3 to 0.2.5 - [Changelog](https://github.com/raszi/node-tmp/blob/master/CHANGELOG.md) - [Commits](https://github.com/raszi/node-tmp/compare/v0.2.3...v0.2.5) --- updated-dependencies: - dependency-name: tmp dependency-version: 0.2.5 dependency-type: indirect dependency-group: npm_and_yarn ... Signed-off-by: dependabot[bot] --- yarn.lock | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/yarn.lock b/yarn.lock index 8052f8546e4..aa541d48ede 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6010,13 +6010,13 @@ __metadata: linkType: hard "axios@npm:^1.12.0": - version: 1.12.2 - resolution: "axios@npm:1.12.2" + version: 1.13.1 + resolution: "axios@npm:1.13.1" dependencies: follow-redirects: "npm:^1.15.6" form-data: "npm:^4.0.4" proxy-from-env: "npm:^1.1.0" - checksum: 10/886a79770594eaad76493fecf90344b567bd956240609b5dcd09bd0afe8d3e6f1ad6d3257a93a483b6192b409d4b673d9515a34619e3e3ed1b2c0ec2a83b20ba + checksum: 10/8046c15f3ffb5d5d45ce33074f69a9226d4c4312b205307d8a8f0d38bd549fdec7612b307a092b82d7af51d8f3a211ae27589f56a65643655acd01c6ee9bfdac languageName: node linkType: hard @@ -20292,9 +20292,9 @@ __metadata: linkType: hard "tmp@npm:~0.2.1": - version: 0.2.3 - resolution: "tmp@npm:0.2.3" - checksum: 10/7b13696787f159c9754793a83aa79a24f1522d47b87462ddb57c18ee93ff26c74cbb2b8d9138f571d2e0e765c728fb2739863a672b280528512c6d83d511c6fa + version: 0.2.5 + resolution: "tmp@npm:0.2.5" + checksum: 10/dd4b78b32385eab4899d3ae296007b34482b035b6d73e1201c4a9aede40860e90997a1452c65a2d21aee73d53e93cd167d741c3db4015d90e63b6d568a93d7ec languageName: node linkType: hard From c137a1ae62924e0c9179a83e829af46c4620927d Mon Sep 17 00:00:00 2001 From: Peter Donker Date: Mon, 3 Nov 2025 20:58:05 +0100 Subject: [PATCH 128/199] Fix potential memory leak of fileSystemWatcher --- .../Library/Services/Installer/Util.cs | 112 +++++++++++------- 1 file changed, 71 insertions(+), 41 deletions(-) diff --git a/DNN Platform/Library/Services/Installer/Util.cs b/DNN Platform/Library/Services/Installer/Util.cs index 6e5843f19df..d655c7ca359 100644 --- a/DNN Platform/Library/Services/Installer/Util.cs +++ b/DNN Platform/Library/Services/Installer/Util.cs @@ -716,69 +716,99 @@ public static void WriteStream(Stream sourceStream, string destFileName) /// true if action occur and false otherwise. public static bool TryToCreateAndExecute(string path, Action action, int milliSecondMax = Timeout.Infinite) { - var result = false; - var dateTimeStart = DateTime.Now; - Tuple tuple = null; + var started = DateTime.UtcNow; + var fullPath = Path.GetFullPath(path); + var directory = Path.GetDirectoryName(fullPath)!; - while (true) + AutoResetEvent gate = null; + FileSystemWatcher watcher = null; + FileSystemEventHandler changedHandler = null; + RenamedEventHandler renamedHandler = null; + + try { - try + while (true) { - // Open for create, requesting read/write access, allow others to read/write as well - using (var file = File.Open(path, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite)) + try { + // Open for create with shared read/write; dispose via using + using var file = File.Open(fullPath, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite); action(file); - result = true; - break; + return true; } - } - catch (IOException) - { - // Init only once and only if needed. Prevent against many instantiation in case of multhreaded - // file access concurrency (if file is frequently accessed by someone else). Better memory usage. - if (tuple == null) + catch (IOException) { - var autoResetEvent = new AutoResetEvent(true); - var fileSystemWatcher = new FileSystemWatcher(Path.GetDirectoryName(path)) + // Lazily create the wait handle + watcher once + if (gate is null) { - EnableRaisingEvents = true, - }; + gate = new AutoResetEvent(false); + + watcher = new FileSystemWatcher(directory) + { + Filter = Path.GetFileName(fullPath), + NotifyFilter = NotifyFilters.FileName + | NotifyFilters.LastWrite + | NotifyFilters.CreationTime + | NotifyFilters.Size, + EnableRaisingEvents = true, + }; - fileSystemWatcher.Changed += - (o, e) => + changedHandler = (o, e) => + { + // Extra safety: only signal for the exact file + if (string.Equals(Path.GetFullPath(e.FullPath), fullPath, StringComparison.OrdinalIgnoreCase)) + { + gate.Set(); + } + }; + renamedHandler = (o, e) => { - if (Path.GetFullPath(e.FullPath) == Path.GetFullPath(path)) + // Extra safety: only signal for the exact file + if (string.Equals(Path.GetFullPath(e.FullPath), fullPath, StringComparison.OrdinalIgnoreCase)) { - autoResetEvent.Set(); + gate.Set(); } }; - tuple = new Tuple(autoResetEvent, fileSystemWatcher); - } + watcher.Changed += changedHandler; + watcher.Created += changedHandler; + watcher.Renamed += renamedHandler; + watcher.Deleted += changedHandler; + } - int milliSecond = Timeout.Infinite; - if (milliSecondMax != Timeout.Infinite) - { - milliSecond = (int)(DateTime.Now - dateTimeStart).TotalMilliseconds; - if (milliSecond >= milliSecondMax) + // Compute remaining time correctly + int waitMs = Timeout.Infinite; + if (milliSecondMax != Timeout.Infinite) { - result = false; - break; + var elapsed = (int)(DateTime.UtcNow - started).TotalMilliseconds; + var remaining = milliSecondMax - elapsed; + if (remaining <= 0) + { + return false; + } + + waitMs = remaining; } - } - tuple.Item1.WaitOne(milliSecond); + // Wait for a change (or until remaining timeout) + gate!.WaitOne(waitMs); + } } } - - if (tuple != null && tuple.Item1 != null) + finally { - // Dispose of resources now (don't wait the GC). - tuple.Item1.Dispose(); - tuple.Item2.Dispose(); - } + // Clean shutdown: unsubscribe then dispose in reverse order + if (watcher != null && changedHandler != null) + { + watcher.Changed -= changedHandler; + watcher.Created -= changedHandler; + watcher.Renamed -= renamedHandler; + watcher.Deleted -= changedHandler; + } - return result; + watcher?.Dispose(); + gate?.Dispose(); + } } public static WebResponse GetExternalRequest(string url, byte[] data, string username, string password, string domain, string proxyAddress, int proxyPort, bool doPOST, string userAgent, string referer, out string filename) From 34cabdd5b022b585ad1456390530ccdafc3d9a18 Mon Sep 17 00:00:00 2001 From: Peter Donker Date: Tue, 4 Nov 2025 22:09:03 +0100 Subject: [PATCH 129/199] Remove assemblies that are taken care of in another part of the code anyway --- DNN Platform/Website/App_Data/Upgrade/upgrade.json | 2 -- 1 file changed, 2 deletions(-) diff --git a/DNN Platform/Website/App_Data/Upgrade/upgrade.json b/DNN Platform/Website/App_Data/Upgrade/upgrade.json index f169af90c76..e4fd42f39e4 100644 --- a/DNN Platform/Website/App_Data/Upgrade/upgrade.json +++ b/DNN Platform/Website/App_Data/Upgrade/upgrade.json @@ -7,8 +7,6 @@ "/App_Data/Database.mdf", "/App_Data/Database_log.LDF", "/bin/Providers/DotNetNuke.Providers.AspNetClientCapabilityProvider.dll", - "/bin/Newtonsoft.Json.dll", - "/bin/System.Runtime.CompilerServices.Unsafe.dll", "/Config/DotNetNuke.config", "/Install/InstallWizard.aspx" ] From 66a6d8cdd5484fb52b8d1a7e68577cecf4d73b7b Mon Sep 17 00:00:00 2001 From: Peter Donker Date: Tue, 4 Nov 2025 22:37:35 +0100 Subject: [PATCH 130/199] Fix npm packages --- .../ClientSide/Servers.Web/package.json | 2 + yarn.lock | 100 ++++++++++++++++++ 2 files changed, 102 insertions(+) diff --git a/Dnn.AdminExperience/ClientSide/Servers.Web/package.json b/Dnn.AdminExperience/ClientSide/Servers.Web/package.json index 00a9d43f27d..ee264eba3bb 100644 --- a/Dnn.AdminExperience/ClientSide/Servers.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Servers.Web/package.json @@ -42,6 +42,8 @@ "react-hot-loader": "4.13.1", "style-loader": "^4.0.0", "typescript": "^5.9.3", + "url-loader": "4.1.1", + "webpack": "5.102.1", "webpack-bundle-size-analyzer": "3.1.0", "webpack-cli": "6.0.1", "webpack-dev-server": "5.2.2" diff --git a/yarn.lock b/yarn.lock index f7c25f12623..7d125d907b6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -105,6 +105,19 @@ __metadata: languageName: node linkType: hard +"@babel/generator@npm:^7.28.5": + version: 7.28.5 + resolution: "@babel/generator@npm:7.28.5" + dependencies: + "@babel/parser": "npm:^7.28.5" + "@babel/types": "npm:^7.28.5" + "@jridgewell/gen-mapping": "npm:^0.3.12" + "@jridgewell/trace-mapping": "npm:^0.3.28" + jsesc: "npm:^3.0.2" + checksum: 10/ae618f0a17a6d76c3983e1fd5d9c2f5fdc07703a119efdb813a7d9b8ad4be0a07d4c6f0d718440d2de01a68e321f64e2d63c77fc5d43ae47ae143746ef28ac1f + languageName: node + linkType: hard + "@babel/helper-annotate-as-pure@npm:^7.27.1, @babel/helper-annotate-as-pure@npm:^7.27.3": version: 7.27.3 resolution: "@babel/helper-annotate-as-pure@npm:7.27.3" @@ -144,6 +157,23 @@ __metadata: languageName: node linkType: hard +"@babel/helper-create-class-features-plugin@npm:^7.28.5": + version: 7.28.5 + resolution: "@babel/helper-create-class-features-plugin@npm:7.28.5" + dependencies: + "@babel/helper-annotate-as-pure": "npm:^7.27.3" + "@babel/helper-member-expression-to-functions": "npm:^7.28.5" + "@babel/helper-optimise-call-expression": "npm:^7.27.1" + "@babel/helper-replace-supers": "npm:^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.27.1" + "@babel/traverse": "npm:^7.28.5" + semver: "npm:^6.3.1" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10/0bbf3dfe91875f642fe7ef38f60647f0df8eb9994d4350b19a4d1a9bdc32629e49e56e9a80afb12eeb6f6bcc6666392b37f32231b7c054fc91a0d5251cd67d5b + languageName: node + linkType: hard + "@babel/helper-create-regexp-features-plugin@npm:^7.18.6, @babel/helper-create-regexp-features-plugin@npm:^7.27.1": version: 7.27.1 resolution: "@babel/helper-create-regexp-features-plugin@npm:7.27.1" @@ -189,6 +219,16 @@ __metadata: languageName: node linkType: hard +"@babel/helper-member-expression-to-functions@npm:^7.28.5": + version: 7.28.5 + resolution: "@babel/helper-member-expression-to-functions@npm:7.28.5" + dependencies: + "@babel/traverse": "npm:^7.28.5" + "@babel/types": "npm:^7.28.5" + checksum: 10/05e0857cf7913f03d88ca62952d3888693c21a4f4d7cfc141c630983f71fc0a64393e05cecceb7701dfe98298f7cc38fcb735d892e3c8c6f56f112c85ee1b154 + languageName: node + linkType: hard + "@babel/helper-module-imports@npm:^7.27.1": version: 7.27.1 resolution: "@babel/helper-module-imports@npm:7.27.1" @@ -278,6 +318,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-validator-identifier@npm:^7.28.5": + version: 7.28.5 + resolution: "@babel/helper-validator-identifier@npm:7.28.5" + checksum: 10/8e5d9b0133702cfacc7f368bf792f0f8ac0483794877c6dca5fcb73810ee138e27527701826fb58a40a004f3a5ec0a2f3c3dd5e326d262530b119918f3132ba7 + languageName: node + linkType: hard + "@babel/helper-validator-option@npm:^7.27.1": version: 7.27.1 resolution: "@babel/helper-validator-option@npm:7.27.1" @@ -317,6 +364,17 @@ __metadata: languageName: node linkType: hard +"@babel/parser@npm:^7.28.5": + version: 7.28.5 + resolution: "@babel/parser@npm:7.28.5" + dependencies: + "@babel/types": "npm:^7.28.5" + bin: + parser: ./bin/babel-parser.js + checksum: 10/8d9bfb437af6c97a7f6351840b9ac06b4529ba79d6d3def24d6c2996ab38ff7f1f9d301e868ca84a93a3050fadb3d09dbc5105b24634cd281671ac11eebe8df7 + languageName: node + linkType: hard + "@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:7.27.1" @@ -1224,6 +1282,21 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-typescript@npm:^7.27.1": + version: 7.28.5 + resolution: "@babel/plugin-transform-typescript@npm:7.28.5" + dependencies: + "@babel/helper-annotate-as-pure": "npm:^7.27.3" + "@babel/helper-create-class-features-plugin": "npm:^7.28.5" + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.27.1" + "@babel/plugin-syntax-typescript": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10/e4706379df70c2de9d3d3f573ff74a160e05221620a22dd0a64899ab45fddad9e4530fbba33014c75906f13aa78d8044fed80dba85068e11d84ed1f033dea445 + languageName: node + linkType: hard + "@babel/plugin-transform-unicode-escapes@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-unicode-escapes@npm:7.27.1" @@ -1444,6 +1517,21 @@ __metadata: languageName: node linkType: hard +"@babel/traverse@npm:^7.28.5": + version: 7.28.5 + resolution: "@babel/traverse@npm:7.28.5" + dependencies: + "@babel/code-frame": "npm:^7.27.1" + "@babel/generator": "npm:^7.28.5" + "@babel/helper-globals": "npm:^7.28.0" + "@babel/parser": "npm:^7.28.5" + "@babel/template": "npm:^7.27.2" + "@babel/types": "npm:^7.28.5" + debug: "npm:^4.3.1" + checksum: 10/1fce426f5ea494913c40f33298ce219708e703f71cac7ac045ebde64b5a7b17b9275dfa4e05fb92c3f123136913dff62c8113172f4a5de66dab566123dbe7437 + languageName: node + linkType: hard + "@babel/types@npm:^7.0.0, @babel/types@npm:^7.18.9, @babel/types@npm:^7.20.7, @babel/types@npm:^7.27.1, @babel/types@npm:^7.27.3, @babel/types@npm:^7.28.2, @babel/types@npm:^7.28.4, @babel/types@npm:^7.4.4, @babel/types@npm:^7.7.0": version: 7.28.4 resolution: "@babel/types@npm:7.28.4" @@ -1454,6 +1542,16 @@ __metadata: languageName: node linkType: hard +"@babel/types@npm:^7.28.5": + version: 7.28.5 + resolution: "@babel/types@npm:7.28.5" + dependencies: + "@babel/helper-string-parser": "npm:^7.27.1" + "@babel/helper-validator-identifier": "npm:^7.28.5" + checksum: 10/4256bb9fb2298c4f9b320bde56e625b7091ea8d2433d98dcf524d4086150da0b6555aabd7d0725162670614a9ac5bf036d1134ca13dedc9707f988670f1362d7 + languageName: node + linkType: hard + "@bcoe/v8-coverage@npm:^0.2.3": version: 0.2.3 resolution: "@bcoe/v8-coverage@npm:0.2.3" @@ -18836,6 +18934,7 @@ __metadata: "@babel/plugin-proposal-object-rest-spread": "npm:^7.20.7" "@babel/preset-env": "npm:^7.28.3" "@babel/preset-react": "npm:^7.27.1" + "@babel/preset-typescript": "npm:^7.27.1" "@dnnsoftware/dnn-react-common": "npm:10.1.0" "@types/react": "npm:^19.2.2" "@types/react-dom": "npm:^19.2.2" @@ -18863,6 +18962,7 @@ __metadata: react-dom: "npm:^16.14.0" react-hot-loader: "npm:4.13.1" style-loader: "npm:^4.0.0" + typescript: "npm:^5.9.3" url-loader: "npm:4.1.1" webpack: "npm:5.102.1" webpack-bundle-size-analyzer: "npm:3.1.0" From e51c7f91479d341354ad5fc9f7be3d4a4aa43108 Mon Sep 17 00:00:00 2001 From: Peter Donker Date: Tue, 4 Nov 2025 22:40:54 +0100 Subject: [PATCH 131/199] Update DNN Platform/DotNetNuke.Abstractions/Application/IHostSettings.cs Co-authored-by: Brian Dukes --- .../DotNetNuke.Abstractions/Application/IHostSettings.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/DNN Platform/DotNetNuke.Abstractions/Application/IHostSettings.cs b/DNN Platform/DotNetNuke.Abstractions/Application/IHostSettings.cs index e03337de865..023087bca4c 100644 --- a/DNN Platform/DotNetNuke.Abstractions/Application/IHostSettings.cs +++ b/DNN Platform/DotNetNuke.Abstractions/Application/IHostSettings.cs @@ -41,15 +41,15 @@ public interface IHostSettings public bool AllowControlPanelToDetermineVisibility { get; } /// Gets a value indicating whether Composite Files are enabled at the host level. - [DnnDeprecated(10, 2, 0, "Bundling and minification have been deprecated in DNN 10.2. These references will be removed in DNN 12.")] + [DnnDeprecated(10, 2, 0, "Bundling is no longer supported, there is no replacement within DNN for this functionality.")] public bool CrmEnableCompositeFiles { get; } /// Gets a value indicating whether CSS Minification is enabled at the host level. - [DnnDeprecated(10, 2, 0, "Bundling and minification have been deprecated in DNN 10.2. These references will be removed in DNN 12.")] + [DnnDeprecated(10, 2, 0, "Minification is no longer supported, there is no replacement within DNN for this functionality.")] public bool CrmMinifyCss { get; } /// Gets a value indicating whether JS Minification is enabled at the host level. - [DnnDeprecated(10, 2, 0, "Bundling and minification have been deprecated in DNN 10.2. These references will be removed in DNN 12.")] + [DnnDeprecated(10, 2, 0, "Minification is no longer supported, there is no replacement within DNN for this functionality.")] public bool CrmMinifyJs { get; } /// Gets the Client Resource Management version number. From 5f0f87473b9b69d193b4e96d3e581183e6b07f06 Mon Sep 17 00:00:00 2001 From: Peter Donker Date: Tue, 4 Nov 2025 22:41:32 +0100 Subject: [PATCH 132/199] Update DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourceController.cs Co-authored-by: Brian Dukes --- .../ClientResourceController.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourceController.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourceController.cs index 6c925a17f3d..721a275a129 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourceController.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourceController.cs @@ -31,7 +31,7 @@ public ClientResourceController(IHostSettings hostSettings) private List Stylesheets { get; set; } = new List(); - private Dictionary PathNameAliases { get; set; } = new Dictionary(); + private Dictionary PathNameAliases { get; set; } = new Dictionary(StringComparer.OrdinalIgnoreCase); private List FontsToExclude { get; set; } = new List(); From da333b7e1fbac97b221f67e2cf943469e7f0254c Mon Sep 17 00:00:00 2001 From: Peter Donker Date: Tue, 4 Nov 2025 22:42:14 +0100 Subject: [PATCH 133/199] Update DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourceController.cs Co-authored-by: Brian Dukes --- .../ClientResourceController.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourceController.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourceController.cs index 721a275a129..9cbfdc055f9 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourceController.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourceController.cs @@ -33,7 +33,7 @@ public ClientResourceController(IHostSettings hostSettings) private Dictionary PathNameAliases { get; set; } = new Dictionary(StringComparer.OrdinalIgnoreCase); - private List FontsToExclude { get; set; } = new List(); + private HashSet FontsToExclude { get; set; } = new HashSet(StringComparer.OrdinalIgnoreCase); private List ScriptsToExclude { get; set; } = new List(); From ea17f1847546f01326c75366f6f2d538f5fd8fb5 Mon Sep 17 00:00:00 2001 From: Peter Donker Date: Tue, 4 Nov 2025 22:42:46 +0100 Subject: [PATCH 134/199] Update DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourceController.cs Co-authored-by: Brian Dukes --- .../ClientResourceController.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourceController.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourceController.cs index 9cbfdc055f9..75e588af1a1 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourceController.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourceController.cs @@ -35,9 +35,9 @@ public ClientResourceController(IHostSettings hostSettings) private HashSet FontsToExclude { get; set; } = new HashSet(StringComparer.OrdinalIgnoreCase); - private List ScriptsToExclude { get; set; } = new List(); + private HashSet ScriptsToExclude { get; set; } = new HashSet(StringComparer.OrdinalIgnoreCase); - private List StylesheetsToExclude { get; set; } = new List(); + private HashSet StylesheetsToExclude { get; set; } = new HashSet(StringComparer.OrdinalIgnoreCase); /// public void AddFont(IFontResource font) From d453b9621bee8ce8310d5454fb9aa6f2f7cea74c Mon Sep 17 00:00:00 2001 From: Peter Donker Date: Tue, 4 Nov 2025 22:43:04 +0100 Subject: [PATCH 135/199] Update DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourceController.cs Co-authored-by: Brian Dukes --- .../ClientResourceController.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourceController.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourceController.cs index 75e588af1a1..d1f74de5095 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourceController.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourceController.cs @@ -90,7 +90,7 @@ public void RemoveFontByName(string fontName) /// public void RemoveFontByPath(string fontPath, string pathNameAlias) { - var fullPath = this.ResolvePath(fontPath, pathNameAlias).ToLowerInvariant(); + var fullPath = this.ResolvePath(fontPath, pathNameAlias); this.FontsToExclude.Add(fullPath.ToLowerInvariant()); } From bdc9f78d3cc5f2078238807eeab8c3d4d772154f Mon Sep 17 00:00:00 2001 From: Peter Donker Date: Tue, 4 Nov 2025 22:43:17 +0100 Subject: [PATCH 136/199] Update DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourceController.cs Co-authored-by: Brian Dukes --- .../ClientResourceController.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourceController.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourceController.cs index d1f74de5095..134c1be6d69 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourceController.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourceController.cs @@ -160,7 +160,7 @@ private List AddResource(List resources, T resource) if (!string.IsNullOrEmpty(resource.Name)) { // if a resource with the same name and force version is already present we ignore this one - if (resources.Exists(l => l.Name.ToLowerInvariant() == resource.Name.ToLowerInvariant() && l.ForceVersion)) + if (resources.Exists(r => string.Equals(r.Name., resource.Name, StringComparison.OrdinalIgnoreCase) && r.ForceVersion)) { return resources; } From 80a57ef7d5a8cca4e54c18f49eccb484e1f81866 Mon Sep 17 00:00:00 2001 From: Peter Donker Date: Tue, 4 Nov 2025 22:43:32 +0100 Subject: [PATCH 137/199] Update DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourceController.cs Co-authored-by: Brian Dukes --- .../ClientResourceController.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourceController.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourceController.cs index 134c1be6d69..6b107326db8 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourceController.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourceController.cs @@ -168,16 +168,16 @@ private List AddResource(List resources, T resource) // If we are forcing the version, we need to remove any existing link with the same name if (resource.ForceVersion) { - resources.RemoveAll(l => l.Name.ToLowerInvariant() == resource.Name.ToLowerInvariant()); + resources.RemoveAll(r => string.Equals(r.Name, resource.Name, StringComparison.OrdinalIgnoreCase)); } // If we have a version, we need to remove any existing link with the same name and a lower version if (!string.IsNullOrEmpty(resource.Version)) { - resources.RemoveAll(l => l.Name.ToLowerInvariant() == resource.Name.ToLowerInvariant() && string.Compare(l.Version, resource.Version, System.StringComparison.InvariantCultureIgnoreCase) < 0); + resources.RemoveAll(r => string.Equals(r.Name, resource.Name, StringComparison.OrdinalIgnoreCase) && string.Compare(r.Version, resource.Version, StringComparison.InvariantCultureIgnoreCase) < 0); // If we have an existing link with the same name and a higher version, we do not add this link - if (resources.Exists(l => l.Name.ToLowerInvariant() == resource.Name.ToLowerInvariant() && string.Compare(l.Version, resource.Version, System.StringComparison.InvariantCultureIgnoreCase) >= 0)) + if (resources.Exists(r => string.Equals(r.Name, resource.Name, StringComparison.OrdinalIgnoreCase) && string.Compare(r.Version, resource.Version, StringComparison.InvariantCultureIgnoreCase) >= 0)) { return resources; } From d41b0b6ec9c9fb338c4075198aacd589e22fd809 Mon Sep 17 00:00:00 2001 From: Peter Donker Date: Tue, 4 Nov 2025 22:44:16 +0100 Subject: [PATCH 138/199] Update DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourceController.cs Co-authored-by: Brian Dukes --- .../ClientResourceController.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourceController.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourceController.cs index 6b107326db8..d8606a23e4d 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourceController.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourceController.cs @@ -195,7 +195,7 @@ private string ResolvePath(string filePath, string pathNameAlias) return filePath; } - if (filePath.ToLowerInvariant().StartsWith("http")) + if (filePath.StartsWith("http", StringComparison.OrdinalIgnoreCase)) { // Path is already fully qualified return filePath; From 249d126be96fea951d23b0d8dd5b183172578076 Mon Sep 17 00:00:00 2001 From: Peter Donker Date: Tue, 4 Nov 2025 22:44:32 +0100 Subject: [PATCH 139/199] Update DNN Platform/DotNetNuke.Web.Client/Providers/DnnCompositeFileProcessingProvider.cs Co-authored-by: Brian Dukes --- .../Providers/DnnCompositeFileProcessingProvider.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DNN Platform/DotNetNuke.Web.Client/Providers/DnnCompositeFileProcessingProvider.cs b/DNN Platform/DotNetNuke.Web.Client/Providers/DnnCompositeFileProcessingProvider.cs index a1a45a085ee..7e419df30d4 100644 --- a/DNN Platform/DotNetNuke.Web.Client/Providers/DnnCompositeFileProcessingProvider.cs +++ b/DNN Platform/DotNetNuke.Web.Client/Providers/DnnCompositeFileProcessingProvider.cs @@ -13,7 +13,7 @@ namespace DotNetNuke.Web.Client.Providers using DotNetNuke.Internal.SourceGenerators; /// A provider for combining, minifying, compressing and saving composite scripts/css files. - [DnnDeprecated(10, 2, 0, "Bundling and minification have been deprecated in DNN 10.2. These references will be removed in DNN 12.")] + [DnnDeprecated(10, 2, 0, "Bundling and minification is no longer supported, there is no replacement within DNN for this functionality.")] public class DnnCompositeFileProcessingProvider : CompositeFileProcessingProvider { private readonly ClientResourceSettings clientResourceSettings = new ClientResourceSettings(); From 05aa59e90829e20e57b887798af753d9f3f4f05e Mon Sep 17 00:00:00 2001 From: Peter Donker Date: Tue, 4 Nov 2025 22:44:49 +0100 Subject: [PATCH 140/199] Update DNN Platform/DotNetNuke.Web.Client/ClientResourceManager.cs Co-authored-by: Brian Dukes --- DNN Platform/DotNetNuke.Web.Client/ClientResourceManager.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DNN Platform/DotNetNuke.Web.Client/ClientResourceManager.cs b/DNN Platform/DotNetNuke.Web.Client/ClientResourceManager.cs index 30c75e78f73..b09f4a4f5ea 100644 --- a/DNN Platform/DotNetNuke.Web.Client/ClientResourceManager.cs +++ b/DNN Platform/DotNetNuke.Web.Client/ClientResourceManager.cs @@ -23,7 +23,7 @@ namespace DotNetNuke.Web.Client.ClientResourceManagement using Microsoft.Extensions.DependencyInjection; /// Provides the ability to request that client resources (JavaScript and CSS) be loaded on the client browser. - [Obsolete("Deprecated in DotNetNuke 10.2.0. Please use IClientResourceController instead. Scheduled removal in v12.0.0.")] + [DnnDeprecated, 10, 2, 0, "Please use IClientResourceController instead.")] public partial class ClientResourceManager { /// The default css provider. From 90df83abb31e722096be723665e5cfeb1a1f42e4 Mon Sep 17 00:00:00 2001 From: Peter Donker Date: Tue, 4 Nov 2025 22:46:22 +0100 Subject: [PATCH 141/199] Update DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ResourceBase.cs Co-authored-by: Brian Dukes --- .../Models/ResourceBase.cs | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ResourceBase.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ResourceBase.cs index b061a641983..41f6ebaecb2 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ResourceBase.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ResourceBase.cs @@ -41,10 +41,7 @@ public abstract class ResourceBase : IResource /// public string Name { - get - { - return string.IsNullOrEmpty(this.name) ? this.FilePath : this.name; - } + get => string.IsNullOrEmpty(this.name) ? this.FilePath : this.name; set => this.name = value; } From 2c75f99808eb3dd7e8bf5148a3c9afe7cc8ac509 Mon Sep 17 00:00:00 2001 From: Peter Donker Date: Tue, 4 Nov 2025 22:46:43 +0100 Subject: [PATCH 142/199] Update DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ScriptResource.cs Co-authored-by: Brian Dukes --- .../Models/ScriptResource.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ScriptResource.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ScriptResource.cs index 907966ef015..76ba73a1416 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ScriptResource.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ScriptResource.cs @@ -45,7 +45,7 @@ public override void Register() public override string Render(int crmVersion, bool useCdn, string applicationPath) { var htmlString = new StringBuilder(" Date: Tue, 4 Nov 2025 22:47:00 +0100 Subject: [PATCH 143/199] Update DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/FontResource.cs Co-authored-by: Brian Dukes --- .../Models/FontResource.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/FontResource.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/FontResource.cs index e00bf3e7525..d404a70771a 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/FontResource.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/FontResource.cs @@ -35,7 +35,7 @@ public override void Register() public override string Render(int crmVersion, bool useCdn, string applicationPath) { var htmlString = new StringBuilder(" Date: Tue, 4 Nov 2025 22:47:23 +0100 Subject: [PATCH 144/199] Update DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/StylesheetResource.cs Co-authored-by: Brian Dukes --- .../Models/StylesheetResource.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/StylesheetResource.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/StylesheetResource.cs index b5f1fb4eb2d..eadf941dcaa 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/StylesheetResource.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/StylesheetResource.cs @@ -39,7 +39,7 @@ public override void Register() public override string Render(int crmVersion, bool useCdn, string applicationPath) { var htmlString = new StringBuilder(" Date: Tue, 4 Nov 2025 23:38:01 +0100 Subject: [PATCH 145/199] Update DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ResourceBase.cs Co-authored-by: Brian Dukes --- .../Models/ResourceBase.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ResourceBase.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ResourceBase.cs index 41f6ebaecb2..0edf7308c1d 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ResourceBase.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ResourceBase.cs @@ -92,7 +92,7 @@ internal string GetVersionedPath(int crmVersion, bool useCdn, string application { return this.CdnUrl; } - else if (path.ToLowerInvariant().StartsWith("http")) + else if (path.StartsWith("http", StringComparison.OrdinalIgnoreCase)) { return path; } From 05851c7edda354053f2f21a70e8161850093fccd Mon Sep 17 00:00:00 2001 From: Peter Donker Date: Tue, 4 Nov 2025 23:49:47 +0100 Subject: [PATCH 146/199] Update DNN Platform/Library/Framework/JavaScriptLibraries/JavaScript.cs Co-authored-by: Brian Dukes --- .../Framework/JavaScriptLibraries/JavaScript.cs | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/DNN Platform/Library/Framework/JavaScriptLibraries/JavaScript.cs b/DNN Platform/Library/Framework/JavaScriptLibraries/JavaScript.cs index 54baf59e994..1bdc562981b 100644 --- a/DNN Platform/Library/Framework/JavaScriptLibraries/JavaScript.cs +++ b/DNN Platform/Library/Framework/JavaScriptLibraries/JavaScript.cs @@ -688,19 +688,8 @@ private static int GetFileOrder(JavaScriptLibrary jsl) private static IClientResourceController GetClientResourcesController(HttpContextBase context) { - var serviceProvider = GetCurrentServiceProvider(context); + var serviceProvider = Globals.GetCurrentServiceProvider(); return serviceProvider.GetRequiredService(); } - - private static IServiceProvider GetCurrentServiceProvider(HttpContextBase context) - { - return GetScope(context.Items).ServiceProvider; - - // Copy of DotNetNuke.Common.Extensions.HttpContextDependencyInjectionExtensions.GetScope - static IServiceScope GetScope(IDictionary httpContextItems) - { - return httpContextItems[typeof(IServiceScope)] as IServiceScope; - } - } } } From d1643d0473c0212d067c8ee36f0d49449ca8a604 Mon Sep 17 00:00:00 2001 From: Peter Donker Date: Wed, 5 Nov 2025 00:25:47 +0100 Subject: [PATCH 147/199] Various fixes and changes based on feedback on Github --- .../ClientResources/ILinkResource.cs | 8 +++++ .../ClientResourceController.cs | 3 +- .../GenericResourceExtensions.cs | 2 +- .../LinkResourceExtensions.cs | 19 +++++++++++ .../Models/FontResource.cs | 1 + .../Models/LinkResource.cs | 18 ++++++++++ .../Models/ResourceBase.cs | 1 + .../Models/ScriptResource.cs | 4 ++- .../Models/StylesheetResource.cs | 2 ++ .../DotNetNuke.Web.Client/Cdf/CssMediaType.cs | 5 +++ .../ClientResourceManager.cs | 2 +- .../Controls/ClientResourceInclude.cs | 32 +---------------- .../Controls/DnnCssInclude.cs | 23 +++++++++++-- .../Controls/DnnJsInclude.cs | 17 +++++++++- .../DnnCompositeFileProcessingProvider.cs | 2 +- .../Library/DotNetNuke.Library.csproj | 1 - .../ClientDependency/DependencyController.cs | 34 ------------------- .../Services/ClientDependency/Extensions.cs | 12 +++---- DNN Platform/Skins/Aperture/package.json | 2 +- .../Website/admin/Skins/DnnCssInclude.ascx.cs | 6 +++- 20 files changed, 112 insertions(+), 82 deletions(-) delete mode 100644 DNN Platform/Library/Services/ClientDependency/DependencyController.cs diff --git a/DNN Platform/DotNetNuke.Abstractions/ClientResources/ILinkResource.cs b/DNN Platform/DotNetNuke.Abstractions/ClientResources/ILinkResource.cs index 611e9e579c0..76f886e92ca 100644 --- a/DNN Platform/DotNetNuke.Abstractions/ClientResources/ILinkResource.cs +++ b/DNN Platform/DotNetNuke.Abstractions/ClientResources/ILinkResource.cs @@ -11,4 +11,12 @@ public interface ILinkResource : IResource /// Gets or sets a value indicating whether the client resource should be preloaded. /// bool Preload { get; set; } + + /// + /// Gets or sets a value indicating the media that the linked resource applies to. + /// Its value must be a media type / media query. This attribute is mainly useful + /// when linking to external stylesheets — it allows the user agent to pick the + /// best adapted one for the device it runs on. + /// + string Media { get; set; } } diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourceController.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourceController.cs index d8606a23e4d..b164fef8b77 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourceController.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourceController.cs @@ -4,6 +4,7 @@ namespace DotNetNuke.Web.Client.ResourceManager { + using System; using System.Collections.Generic; using System.Linq; @@ -160,7 +161,7 @@ private List AddResource(List resources, T resource) if (!string.IsNullOrEmpty(resource.Name)) { // if a resource with the same name and force version is already present we ignore this one - if (resources.Exists(r => string.Equals(r.Name., resource.Name, StringComparison.OrdinalIgnoreCase) && r.ForceVersion)) + if (resources.Exists(r => string.Equals(r.Name, resource.Name, StringComparison.OrdinalIgnoreCase) && r.ForceVersion)) { return resources; } diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/GenericResourceExtensions.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/GenericResourceExtensions.cs index 3fb221b808d..b27b1e6b76f 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/GenericResourceExtensions.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/GenericResourceExtensions.cs @@ -203,7 +203,7 @@ public static T AddAttribute(this T input, string attributeName, string attri throw new ArgumentNullException(nameof(input)); } - if (!string.IsNullOrEmpty(attributeName) && !string.IsNullOrEmpty(attributeValue)) + if (!string.IsNullOrEmpty(attributeName)) { if (input.Attributes.ContainsKey(attributeName)) { diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/LinkResourceExtensions.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/LinkResourceExtensions.cs index e1173a66116..eec0bbf6e3a 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/LinkResourceExtensions.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/LinkResourceExtensions.cs @@ -30,5 +30,24 @@ public static T SetPreload(this T input) input.Preload = true; return input; } + + /// + /// Sets the media attribute for the link resource. + /// + /// The type of resource, which must implement . + /// The resource to set the media attribute for. + /// The value of the media attribute. + /// The resource with media attribute. + public static T SetMedia(this T input, string media) + where T : ILinkResource + { + if (input == null) + { + throw new ArgumentNullException(nameof(input)); + } + + input.Media = media; + return input; + } } } diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/FontResource.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/FontResource.cs index d404a70771a..1cf9a9703d9 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/FontResource.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/FontResource.cs @@ -4,6 +4,7 @@ namespace DotNetNuke.Web.Client.ResourceManager.Models { + using System.Net; using System.Text; using DotNetNuke.Abstractions.ClientResources; diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/LinkResource.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/LinkResource.cs index 20d7bdc380b..9c571f51468 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/LinkResource.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/LinkResource.cs @@ -4,6 +4,9 @@ namespace DotNetNuke.Web.Client.ResourceManager.Models { + using System.Net; + using System.Text; + using DotNetNuke.Abstractions.ClientResources; /// @@ -13,5 +16,20 @@ public abstract class LinkResource : ResourceBase, ILinkResource { /// public bool Preload { get; set; } = false; + + /// + public string Media { get; set; } + + /// + /// Renders the media attribute if set. + /// + /// The HTML string builder to append to. + protected void RenderMedia(StringBuilder htmlString) + { + if (!string.IsNullOrEmpty(this.Media)) + { + htmlString.Append($" media=\"{WebUtility.HtmlEncode(this.Media)}\""); + } + } } } diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ResourceBase.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ResourceBase.cs index 0edf7308c1d..0473d6c4c4f 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ResourceBase.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ResourceBase.cs @@ -4,6 +4,7 @@ namespace DotNetNuke.Web.Client.ResourceManager.Models { + using System; using System.Collections.Generic; using System.Net; using System.Text; diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ScriptResource.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ScriptResource.cs index 76ba73a1416..6508de957ae 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ScriptResource.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ScriptResource.cs @@ -4,6 +4,7 @@ namespace DotNetNuke.Web.Client.ResourceManager.Models { + using System.Net; using System.Text; using DotNetNuke.Abstractions.ClientResources; @@ -24,6 +25,7 @@ public ScriptResource(IClientResourceController clientResourceController) this.clientResourceController = clientResourceController; this.Provider = ClientResourceProviders.DefaultJsProvider; this.Priority = (int)FileOrder.Js.DefaultPriority; + this.Type = "text/javascript"; } /// @@ -68,7 +70,7 @@ public override string Render(int crmVersion, bool useCdn, string applicationPat this.RenderIntegrity(htmlString); this.RenderReferrerPolicy(htmlString); this.RenderAttributes(htmlString); - htmlString.Append(" type=\"text/javascript\">"); + htmlString.Append(">"); return htmlString.ToString(); } } diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/StylesheetResource.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/StylesheetResource.cs index eadf941dcaa..d7efe9178a2 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/StylesheetResource.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/StylesheetResource.cs @@ -4,6 +4,7 @@ namespace DotNetNuke.Web.Client.ResourceManager.Models { + using System.Net; using System.Text; using DotNetNuke.Abstractions.ClientResources; @@ -54,6 +55,7 @@ public override string Render(int crmVersion, bool useCdn, string applicationPat htmlString.Append(" disabled"); } + this.RenderMedia(htmlString); this.RenderType(htmlString); this.RenderBlocking(htmlString); this.RenderCrossOriginAttribute(htmlString); diff --git a/DNN Platform/DotNetNuke.Web.Client/Cdf/CssMediaType.cs b/DNN Platform/DotNetNuke.Web.Client/Cdf/CssMediaType.cs index 74e59e37043..828609b8bb8 100644 --- a/DNN Platform/DotNetNuke.Web.Client/Cdf/CssMediaType.cs +++ b/DNN Platform/DotNetNuke.Web.Client/Cdf/CssMediaType.cs @@ -9,6 +9,11 @@ namespace DotNetNuke.Web.Client.Cdf /// public enum CssMediaType { + /// + /// Do not specify a media type. + /// + None, + /// /// Applies to all media types. /// diff --git a/DNN Platform/DotNetNuke.Web.Client/ClientResourceManager.cs b/DNN Platform/DotNetNuke.Web.Client/ClientResourceManager.cs index b09f4a4f5ea..3124546c479 100644 --- a/DNN Platform/DotNetNuke.Web.Client/ClientResourceManager.cs +++ b/DNN Platform/DotNetNuke.Web.Client/ClientResourceManager.cs @@ -23,7 +23,7 @@ namespace DotNetNuke.Web.Client.ClientResourceManagement using Microsoft.Extensions.DependencyInjection; /// Provides the ability to request that client resources (JavaScript and CSS) be loaded on the client browser. - [DnnDeprecated, 10, 2, 0, "Please use IClientResourceController instead.")] + [DnnDeprecated(10, 2, 0, "Please use IClientResourceController instead.")] public partial class ClientResourceManager { /// The default css provider. diff --git a/DNN Platform/DotNetNuke.Web.Client/Controls/ClientResourceInclude.cs b/DNN Platform/DotNetNuke.Web.Client/Controls/ClientResourceInclude.cs index 00c5cf79b67..585de0f902d 100644 --- a/DNN Platform/DotNetNuke.Web.Client/Controls/ClientResourceInclude.cs +++ b/DNN Platform/DotNetNuke.Web.Client/Controls/ClientResourceInclude.cs @@ -4,25 +4,18 @@ namespace DotNetNuke.Web.Client.ClientResourceManagement { - using System; using System.Web.UI; - using DotNetNuke.Abstractions.ClientResources; using DotNetNuke.Web.Client.Cdf; - using DotNetNuke.Web.Client.ResourceManager; /// Represents an included client resource. public abstract class ClientResourceInclude : Control { - private readonly IClientResourceController clientResourceController; - /// /// Initializes a new instance of the class. /// - /// The client resources controller. - protected ClientResourceInclude(IClientResourceController clientResourceController) + protected ClientResourceInclude() { - this.clientResourceController = clientResourceController; } /// @@ -75,28 +68,5 @@ protected ClientResourceInclude(IClientResourceController clientResourceControll /// Gets or sets a value indicating whether to add the HTML tag for this resource to the page output. /// public bool AddTag { get; set; } - - protected override void OnInit(EventArgs e) - { - switch (this.DependencyType) - { - case ClientDependencyType.Css: - this.clientResourceController.CreateStylesheet() - .FromSrc(this.FilePath, this.PathNameAlias) - .SetNameAndVersion(this.Name, this.Version, this.ForceVersion) - .SetProvider(this.ForceProvider) - .SetPriority(this.Priority) - .Register(); - break; - case ClientDependencyType.Javascript: - this.clientResourceController.CreateScript() - .FromSrc(this.FilePath, this.PathNameAlias) - .SetNameAndVersion(this.Name, this.Version, this.ForceVersion) - .SetProvider(this.ForceProvider) - .SetPriority(this.Priority) - .Register(); - break; - } - } } } diff --git a/DNN Platform/DotNetNuke.Web.Client/Controls/DnnCssInclude.cs b/DNN Platform/DotNetNuke.Web.Client/Controls/DnnCssInclude.cs index b641edbbf00..0e71acbc5b0 100644 --- a/DNN Platform/DotNetNuke.Web.Client/Controls/DnnCssInclude.cs +++ b/DNN Platform/DotNetNuke.Web.Client/Controls/DnnCssInclude.cs @@ -3,26 +3,45 @@ // See the LICENSE file in the project root for more information namespace DotNetNuke.Web.Client.ClientResourceManagement -{ +{ + using System; using System.Web.UI; using DotNetNuke.Abstractions.ClientResources; using DotNetNuke.Web.Client.Cdf; + using DotNetNuke.Web.Client.ResourceManager; /// Registers a CSS resource. public class DnnCssInclude : ClientResourceInclude { + private readonly IClientResourceController clientResourceController; + /// /// Initializes a new instance of the class. /// /// The client resources controller. public DnnCssInclude(IClientResourceController clientResourceController) - : base(clientResourceController) + : base() { + this.clientResourceController = clientResourceController; this.ForceProvider = ClientResourceProviders.DefaultCssProvider; this.DependencyType = ClientDependencyType.Css; } + public string CssMedia { get; set; } + + /// + protected override void OnInit(EventArgs e) + { + this.clientResourceController.CreateStylesheet() + .FromSrc(this.FilePath, this.PathNameAlias) + .SetNameAndVersion(this.Name, this.Version, this.ForceVersion) + .SetProvider(this.ForceProvider) + .SetPriority(this.Priority) + .SetMedia(this.CssMedia) + .Register(); + } + /// protected override void OnLoad(System.EventArgs e) { diff --git a/DNN Platform/DotNetNuke.Web.Client/Controls/DnnJsInclude.cs b/DNN Platform/DotNetNuke.Web.Client/Controls/DnnJsInclude.cs index ae82adf7165..dd45c91dcab 100644 --- a/DNN Platform/DotNetNuke.Web.Client/Controls/DnnJsInclude.cs +++ b/DNN Platform/DotNetNuke.Web.Client/Controls/DnnJsInclude.cs @@ -4,26 +4,41 @@ namespace DotNetNuke.Web.Client.ClientResourceManagement { + using System; using System.Web.UI; using DotNetNuke.Abstractions.ClientResources; using DotNetNuke.Web.Client.Cdf; + using DotNetNuke.Web.Client.ResourceManager; /// Registers a JavaScript resource. public class DnnJsInclude : ClientResourceInclude { + private readonly IClientResourceController clientResourceController; + /// /// Initializes a new instance of the class. /// Sets up default settings for the control. /// /// The client resources controller. public DnnJsInclude(IClientResourceController clientResourceController) - : base(clientResourceController) + : base() { + this.clientResourceController = clientResourceController; this.ForceProvider = ClientResourceProviders.DefaultJsProvider; this.DependencyType = ClientDependencyType.Javascript; } + protected override void OnInit(EventArgs e) + { + this.clientResourceController.CreateScript() + .FromSrc(this.FilePath, this.PathNameAlias) + .SetNameAndVersion(this.Name, this.Version, this.ForceVersion) + .SetProvider(this.ForceProvider) + .SetPriority(this.Priority) + .Register(); + } + /// protected override void OnLoad(System.EventArgs e) { diff --git a/DNN Platform/DotNetNuke.Web.Client/Providers/DnnCompositeFileProcessingProvider.cs b/DNN Platform/DotNetNuke.Web.Client/Providers/DnnCompositeFileProcessingProvider.cs index 7e419df30d4..69288ae576b 100644 --- a/DNN Platform/DotNetNuke.Web.Client/Providers/DnnCompositeFileProcessingProvider.cs +++ b/DNN Platform/DotNetNuke.Web.Client/Providers/DnnCompositeFileProcessingProvider.cs @@ -14,7 +14,7 @@ namespace DotNetNuke.Web.Client.Providers /// A provider for combining, minifying, compressing and saving composite scripts/css files. [DnnDeprecated(10, 2, 0, "Bundling and minification is no longer supported, there is no replacement within DNN for this functionality.")] - public class DnnCompositeFileProcessingProvider : CompositeFileProcessingProvider + public partial class DnnCompositeFileProcessingProvider : CompositeFileProcessingProvider { private readonly ClientResourceSettings clientResourceSettings = new ClientResourceSettings(); diff --git a/DNN Platform/Library/DotNetNuke.Library.csproj b/DNN Platform/Library/DotNetNuke.Library.csproj index 98f4474201c..e0bf8e5d9f8 100644 --- a/DNN Platform/Library/DotNetNuke.Library.csproj +++ b/DNN Platform/Library/DotNetNuke.Library.csproj @@ -752,7 +752,6 @@ - diff --git a/DNN Platform/Library/Services/ClientDependency/DependencyController.cs b/DNN Platform/Library/Services/ClientDependency/DependencyController.cs deleted file mode 100644 index b9f41c37794..00000000000 --- a/DNN Platform/Library/Services/ClientDependency/DependencyController.cs +++ /dev/null @@ -1,34 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. -// See the LICENSE file in the project root for more information - -namespace DotNetNuke.Services.ClientDependency -{ - using System; - using System.Collections; - using System.Web; - using System.Web.UI; - - using DotNetNuke.Abstractions.ClientResources; - using Microsoft.Extensions.DependencyInjection; - - internal class DependencyController - { - internal static IClientResourceController GetClientResourcesController(Page page) - { - var serviceProvider = GetCurrentServiceProvider(page.Request.RequestContext.HttpContext); - return serviceProvider.GetRequiredService(); - } - - internal static IServiceProvider GetCurrentServiceProvider(HttpContextBase context) - { - return GetScope(context.Items).ServiceProvider; - - // Copy of DotNetNuke.Common.Extensions.HttpContextDependencyInjectionExtensions.GetScope - static IServiceScope GetScope(IDictionary httpContextItems) - { - return httpContextItems[typeof(IServiceScope)] as IServiceScope; - } - } - } -} diff --git a/DNN Platform/Library/Services/ClientDependency/Extensions.cs b/DNN Platform/Library/Services/ClientDependency/Extensions.cs index a6d32883ef1..41b75cd871a 100644 --- a/DNN Platform/Library/Services/ClientDependency/Extensions.cs +++ b/DNN Platform/Library/Services/ClientDependency/Extensions.cs @@ -4,7 +4,7 @@ namespace DotNetNuke.Services.ClientDependency { - using System.Web; + using System.Web.Hosting; using DotNetNuke.Abstractions.ClientResources; using DotNetNuke.Web.Client.ResourceManager; @@ -31,7 +31,7 @@ public static void RegisterFont(this IClientResourceController controller, strin if (checkIfExists) { - var physicalPath = HttpContext.Current.Server.MapPath(fontPath); + var physicalPath = HostingEnvironment.MapPath(fontPath); if (!System.IO.File.Exists(physicalPath)) { return; @@ -61,7 +61,7 @@ public static void RegisterScript(this IClientResourceController controller, str if (checkIfExists) { - var physicalPath = HttpContext.Current.Server.MapPath(scriptPath); + var physicalPath = HostingEnvironment.MapPath(scriptPath); if (!System.IO.File.Exists(physicalPath)) { return; @@ -92,7 +92,7 @@ public static void RegisterScript(this IClientResourceController controller, str if (checkIfExists) { - var physicalPath = HttpContext.Current.Server.MapPath(scriptPath); + var physicalPath = HostingEnvironment.MapPath(scriptPath); if (!System.IO.File.Exists(physicalPath)) { return; @@ -125,7 +125,7 @@ public static void RegisterStylesheet(this IClientResourceController controller, if (checkIfExists) { - var physicalPath = HttpContext.Current.Server.MapPath(stylesheetPath); + var physicalPath = HostingEnvironment.MapPath(stylesheetPath); if (!System.IO.File.Exists(physicalPath)) { return; @@ -156,7 +156,7 @@ public static void RegisterStylesheet(this IClientResourceController controller, if (checkIfExists) { - var physicalPath = HttpContext.Current.Server.MapPath(stylesheetPath); + var physicalPath = HostingEnvironment.MapPath(stylesheetPath); if (!System.IO.File.Exists(physicalPath)) { return; diff --git a/DNN Platform/Skins/Aperture/package.json b/DNN Platform/Skins/Aperture/package.json index 2b4f7d94486..95257b2b179 100644 --- a/DNN Platform/Skins/Aperture/package.json +++ b/DNN Platform/Skins/Aperture/package.json @@ -1,6 +1,6 @@ { "name": "aperture", - "version": "10.1.1", + "version": "10.1.2", "description": "Default theme for DNN 10.", "main": "src/scripts/main.ts", "author": "DNN Community", diff --git a/DNN Platform/Website/admin/Skins/DnnCssInclude.ascx.cs b/DNN Platform/Website/admin/Skins/DnnCssInclude.ascx.cs index 9550205a589..80482ee689e 100644 --- a/DNN Platform/Website/admin/Skins/DnnCssInclude.ascx.cs +++ b/DNN Platform/Website/admin/Skins/DnnCssInclude.ascx.cs @@ -10,7 +10,7 @@ namespace DotNetNuke.UI.Skins.Controls /// A control which causes CSS to be included on the page. public partial class DnnCssInclude : SkinObjectBase { - public CssMediaType CssMedia { get; set; } + public CssMediaType CssMedia { get; set; } = CssMediaType.None; public string FilePath { get; set; } @@ -42,6 +42,10 @@ protected override void OnLoad(EventArgs e) this.ctlInclude.PathNameAlias = this.PathNameAlias; this.ctlInclude.Priority = this.Priority; this.ctlInclude.Version = this.Version; + if (this.CssMedia != CssMediaType.None) + { + this.ctlInclude.CssMedia = this.CssMedia.ToString().ToLowerInvariant(); + } } } } From 9a38bb2b7504286d8768c819a4138b0a947dc034 Mon Sep 17 00:00:00 2001 From: Brian Dukes Date: Wed, 5 Nov 2025 10:49:57 -0600 Subject: [PATCH 148/199] Fix build error from obsolete constructor --- DNN Platform/Library/Framework/CDefault.cs | 4 - DNN Platform/Website/Default.aspx.cs | 115 ++++++++++----------- 2 files changed, 54 insertions(+), 65 deletions(-) diff --git a/DNN Platform/Library/Framework/CDefault.cs b/DNN Platform/Library/Framework/CDefault.cs index 34083630820..b76a7c76fa2 100644 --- a/DNN Platform/Library/Framework/CDefault.cs +++ b/DNN Platform/Library/Framework/CDefault.cs @@ -17,10 +17,6 @@ namespace DotNetNuke.Framework using DotNetNuke.Framework.JavaScriptLibraries; using DotNetNuke.UI.Utilities; - using Microsoft.Extensions.DependencyInjection; - - using Globals = DotNetNuke.Common.Globals; - public class CDefault : PageBase { [SuppressMessage("StyleCop.CSharp.MaintainabilityRules", "SA1401:FieldsMustBePrivate", Justification = "Breaking change")] diff --git a/DNN Platform/Website/Default.aspx.cs b/DNN Platform/Website/Default.aspx.cs index 3b90d1e2395..b57e2f2b3a2 100644 --- a/DNN Platform/Website/Default.aspx.cs +++ b/DNN Platform/Website/Default.aspx.cs @@ -60,7 +60,6 @@ public partial class DefaultPage : CDefault, IClientAPICallbackEventHandler private readonly IModuleControlPipeline moduleControlPipeline; private readonly IHostSettings hostSettings; private readonly IApplicationStatusInfo appStatus; - private readonly IHostSettingsService hostSettingsService; private readonly IEventLogger eventLogger; private readonly IPortalSettingsController portalSettingsController; private readonly IClientResourceController clientResourceController; @@ -79,31 +78,29 @@ public DefaultPage() /// The application status. /// The module control pipeline. /// The host settings. - /// The host settings service. /// The event logger. /// The portal controller. /// The portal settings controller. /// The client resources controller. /// The page service. public DefaultPage( - INavigationManager navigationManager, - IApplicationInfo appInfo, - IApplicationStatusInfo appStatus, - IModuleControlPipeline moduleControlPipeline, - IHostSettings hostSettings, - IHostSettingsService hostSettingsService, - IEventLogger eventLogger, - IPortalController portalController, - IPortalSettingsController portalSettingsController, - IClientResourceController clientResourceController, - IPageService pageService) + INavigationManager navigationManager, + IApplicationInfo appInfo, + IApplicationStatusInfo appStatus, + IModuleControlPipeline moduleControlPipeline, + IHostSettings hostSettings, + IEventLogger eventLogger, + IPortalController portalController, + IPortalSettingsController portalSettingsController, + IClientResourceController clientResourceController, + IPageService pageService) + : base(portalController, appStatus, hostSettings) { this.NavigationManager = navigationManager ?? Globals.GetCurrentServiceProvider().GetRequiredService(); this.appInfo = appInfo ?? Globals.GetCurrentServiceProvider().GetRequiredService(); this.appStatus = appStatus ?? Globals.GetCurrentServiceProvider().GetRequiredService(); this.moduleControlPipeline = moduleControlPipeline ?? Globals.GetCurrentServiceProvider().GetRequiredService(); this.hostSettings = hostSettings ?? Globals.GetCurrentServiceProvider().GetRequiredService(); - this.hostSettingsService = hostSettingsService ?? Globals.GetCurrentServiceProvider().GetRequiredService(); this.eventLogger = eventLogger ?? Globals.GetCurrentServiceProvider().GetRequiredService(); this.portalSettingsController = portalSettingsController ?? Globals.GetCurrentServiceProvider().GetRequiredService(); this.clientResourceController = clientResourceController ?? Globals.GetCurrentServiceProvider().GetRequiredService(); @@ -113,9 +110,7 @@ public DefaultPage( public string CurrentSkinPath => ((PortalSettings)HttpContext.Current.Items["PortalSettings"]).ActiveTab.SkinPath; /// Gets or sets property to allow the programmatic assigning of ScrollTop position. - /// - /// Property to allow the programmatic assigning of ScrollTop position. - /// + /// Property to allow the programmatic assigning of ScrollTop position. public int PageScrollTop { get @@ -139,42 +134,42 @@ public int PageScrollTop /// Gets a service that provides navigation features. protected INavigationManager NavigationManager { get; } - /// - /// Gets a string representation of the list HTML attributes. - /// + /// Gets a string representation of the list HTML attributes. protected string HtmlAttributeList { get { - if ((this.HtmlAttributes != null) && (this.HtmlAttributes.Count > 0)) + if (this.HtmlAttributes is not { Count: > 0 }) { - var attr = new StringBuilder(); - foreach (string attributeName in this.HtmlAttributes.Keys) + return string.Empty; + } + + var attr = new StringBuilder(); + foreach (string attributeName in this.HtmlAttributes.Keys) + { + if (string.IsNullOrEmpty(attributeName) || this.HtmlAttributes[attributeName] == null) { - if ((!string.IsNullOrEmpty(attributeName)) && (this.HtmlAttributes[attributeName] != null)) + continue; + } + + var attributeValue = this.HtmlAttributes[attributeName]; + if (attributeValue.IndexOf(',') > 0) + { + var attributeValues = attributeValue.Split(','); + for (var attributeCounter = 0; + attributeCounter <= attributeValues.Length - 1; + attributeCounter++) { - string attributeValue = this.HtmlAttributes[attributeName]; - if (attributeValue.IndexOf(",") > 0) - { - var attributeValues = attributeValue.Split(','); - for (var attributeCounter = 0; - attributeCounter <= attributeValues.Length - 1; - attributeCounter++) - { - attr.Append(string.Concat(" ", attributeName, "=\"", attributeValues[attributeCounter], "\"")); - } - } - else - { - attr.Append(string.Concat(" ", attributeName, "=\"", attributeValue, "\"")); - } + attr.Append(string.Concat(" ", attributeName, "=\"", attributeValues[attributeCounter], "\"")); } } - - return attr.ToString(); + else + { + attr.Append(string.Concat(" ", attributeName, "=\"", attributeValue, "\"")); + } } - return string.Empty; + return attr.ToString(); } } @@ -186,31 +181,29 @@ protected string HtmlAttributeList public string RaiseClientAPICallbackEvent(string eventArgument) { var dict = this.ParsePageCallBackArgs(eventArgument); - if (dict.ContainsKey("type")) + if (!dict.ContainsKey("type")) { - if (DNNClientAPI.IsPersonalizationKeyRegistered(dict["namingcontainer"] + ClientAPI.CUSTOM_COLUMN_DELIMITER + dict["key"]) == false) - { - throw new Exception(string.Format("This personalization key has not been enabled ({0}:{1}). Make sure you enable it with DNNClientAPI.EnableClientPersonalization", dict["namingcontainer"], dict["key"])); - } + return string.Empty; + } - switch ((DNNClientAPI.PageCallBackType)Enum.Parse(typeof(DNNClientAPI.PageCallBackType), dict["type"])) - { - case DNNClientAPI.PageCallBackType.GetPersonalization: - return Personalization.GetProfile(dict["namingcontainer"], dict["key"]).ToString(); - case DNNClientAPI.PageCallBackType.SetPersonalization: - Personalization.SetProfile(dict["namingcontainer"], dict["key"], dict["value"]); - return dict["value"]; - default: - throw new Exception("Unknown Callback Type"); - } + if (!DNNClientAPI.IsPersonalizationKeyRegistered(dict["namingcontainer"] + ClientAPI.CUSTOM_COLUMN_DELIMITER + dict["key"])) + { + throw new Exception($"This personalization key has not been enabled ({dict["namingcontainer"]}:{dict["key"]}). Make sure you enable it with DNNClientAPI.EnableClientPersonalization"); } - return string.Empty; + switch ((DNNClientAPI.PageCallBackType)Enum.Parse(typeof(DNNClientAPI.PageCallBackType), dict["type"])) + { + case DNNClientAPI.PageCallBackType.GetPersonalization: + return Personalization.GetProfile(dict["namingcontainer"], dict["key"]).ToString(); + case DNNClientAPI.PageCallBackType.SetPersonalization: + Personalization.SetProfile(dict["namingcontainer"], dict["key"], dict["value"]); + return dict["value"]; + default: + throw new Exception("Unknown Callback Type"); + } } - /// - /// Checks if the current version is not a production version. - /// + /// Checks if the current version is not a production version. /// A value indicating whether the current version is not a production version. protected bool NonProductionVersion() { From c5e0bf0b0123ec50c3029bbbee822257f6868638 Mon Sep 17 00:00:00 2001 From: Brian Dukes Date: Wed, 5 Nov 2025 11:04:41 -0600 Subject: [PATCH 149/199] Remove IResource.Key Using case-insensitive comparisons makes it unnecessary --- .../DotNetNuke.Abstractions/ClientResources/IResource.cs | 5 ----- .../ClientResourceController.cs | 3 +-- .../Models/ResourceBase.cs | 3 --- 3 files changed, 1 insertion(+), 10 deletions(-) diff --git a/DNN Platform/DotNetNuke.Abstractions/ClientResources/IResource.cs b/DNN Platform/DotNetNuke.Abstractions/ClientResources/IResource.cs index 7020d36003a..8072aeccf78 100644 --- a/DNN Platform/DotNetNuke.Abstractions/ClientResources/IResource.cs +++ b/DNN Platform/DotNetNuke.Abstractions/ClientResources/IResource.cs @@ -25,11 +25,6 @@ public interface IResource /// string ResolvedPath { get; set; } - /// - /// Gets or sets the lowered src path to facilitate lookup. - /// - string Key { get; set; } - /// /// Gets or sets the CDN url to be used if host settings specify CDN should be used. /// Note, if you only wish to use an external path, then use the FilePath property. diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourceController.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourceController.cs index b164fef8b77..38d7fd2d37c 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourceController.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourceController.cs @@ -156,8 +156,7 @@ private List AddResource(List resources, T resource) where T : IResource { resource.ResolvedPath = this.ResolvePath(resource.FilePath, resource.PathNameAlias); - resource.Key = resource.ResolvedPath.ToLowerInvariant(); - resources.RemoveAll(l => l.Key == resource.Key); // remove any existing link with the same key (i.e. exactly the same resolved path) + resources.RemoveAll(l => string.Equals(l.ResolvedPath, resource.ResolvedPath, StringComparison.OrdinalIgnoreCase)); // remove any existing link with the same key (i.e. exactly the same resolved path) if (!string.IsNullOrEmpty(resource.Name)) { // if a resource with the same name and force version is already present we ignore this one diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ResourceBase.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ResourceBase.cs index 0473d6c4c4f..3f399305b68 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ResourceBase.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ResourceBase.cs @@ -27,9 +27,6 @@ public abstract class ResourceBase : IResource /// public string ResolvedPath { get; set; } - /// - public string Key { get; set; } - /// public string CdnUrl { get; set; } From 048a2ee34ba26957245eeef0a8a38fecb0f7aecc Mon Sep 17 00:00:00 2001 From: Brian Dukes Date: Wed, 5 Nov 2025 11:05:27 -0600 Subject: [PATCH 150/199] More case insensitivity --- .../ClientResourceController.cs | 32 +++++++++---------- .../Models/ResourceBase.cs | 4 +-- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourceController.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourceController.cs index 38d7fd2d37c..476047bf71e 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourceController.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourceController.cs @@ -79,71 +79,71 @@ public IStylesheetResource CreateStylesheet() /// public void RegisterPathNameAlias(string pathNameAlias, string resolvedPath) { - this.PathNameAliases[pathNameAlias.ToLowerInvariant()] = resolvedPath; + this.PathNameAliases[pathNameAlias] = resolvedPath; } /// public void RemoveFontByName(string fontName) { - this.FontsToExclude.Add(fontName.ToLowerInvariant()); + this.FontsToExclude.Add(fontName); } /// public void RemoveFontByPath(string fontPath, string pathNameAlias) { var fullPath = this.ResolvePath(fontPath, pathNameAlias); - this.FontsToExclude.Add(fullPath.ToLowerInvariant()); + this.FontsToExclude.Add(fullPath); } /// public void RemoveScriptByName(string scriptName) { - this.ScriptsToExclude.Add(scriptName.ToLowerInvariant()); + this.ScriptsToExclude.Add(scriptName); } /// public void RemoveScriptByPath(string scriptPath, string pathNameAlias) { - var fullPath = this.ResolvePath(scriptPath, pathNameAlias).ToLowerInvariant(); - this.ScriptsToExclude.Add(fullPath.ToLowerInvariant()); + var fullPath = this.ResolvePath(scriptPath, pathNameAlias); + this.ScriptsToExclude.Add(fullPath); } /// public void RemoveStylesheetByName(string stylesheetName) { - this.StylesheetsToExclude.Add(stylesheetName.ToLowerInvariant()); + this.StylesheetsToExclude.Add(stylesheetName); } /// public void RemoveStylesheetByPath(string stylesheetPath, string pathNameAlias) { - var fullPath = this.ResolvePath(stylesheetPath, pathNameAlias).ToLowerInvariant(); - this.StylesheetsToExclude.Add(fullPath.ToLowerInvariant()); + var fullPath = this.ResolvePath(stylesheetPath, pathNameAlias); + this.StylesheetsToExclude.Add(fullPath); } /// public string RenderDependencies(ResourceType resourceType, string provider, string applicationPath) { var sortedList = new List(); - if (resourceType == ResourceType.Font || resourceType == ResourceType.All) + if (resourceType is ResourceType.Font or ResourceType.All) { - foreach (var link in this.Fonts.Where(s => (s.Provider == provider || (s.Provider == string.Empty && provider == ClientResourceProviders.DefaultCssProvider)) && !this.FontsToExclude.Contains(s.Name.ToLowerInvariant())).OrderBy(l => l.Priority)) + foreach (var link in this.Fonts.Where(s => (s.Provider == provider || (s.Provider == string.Empty && provider == ClientResourceProviders.DefaultCssProvider)) && !this.FontsToExclude.Contains(s.Name)).OrderBy(l => l.Priority)) { sortedList.Add(link.Render(this.hostSettings.CrmVersion, this.hostSettings.CdnEnabled, applicationPath)); } } - if (resourceType == ResourceType.Stylesheet || resourceType == ResourceType.All) + if (resourceType is ResourceType.Stylesheet or ResourceType.All) { - foreach (var link in this.Stylesheets.Where(s => (s.Provider == provider || (s.Provider == string.Empty && provider == ClientResourceProviders.DefaultCssProvider)) && !this.StylesheetsToExclude.Contains(s.Name.ToLowerInvariant())).OrderBy(l => l.Priority)) + foreach (var link in this.Stylesheets.Where(s => (s.Provider == provider || (s.Provider == string.Empty && provider == ClientResourceProviders.DefaultCssProvider)) && !this.StylesheetsToExclude.Contains(s.Name)).OrderBy(l => l.Priority)) { sortedList.Add(link.Render(this.hostSettings.CrmVersion, this.hostSettings.CdnEnabled, applicationPath)); } } - if (resourceType == ResourceType.Script || resourceType == ResourceType.All) + if (resourceType is ResourceType.Script or ResourceType.All) { - foreach (var script in this.Scripts.Where(s => (s.Provider == provider || (s.Provider == string.Empty && provider == ClientResourceProviders.DefaultJsProvider)) && !this.ScriptsToExclude.Contains(s.Name.ToLowerInvariant())).OrderBy(s => s.Priority)) + foreach (var script in this.Scripts.Where(s => (s.Provider == provider || (s.Provider == string.Empty && provider == ClientResourceProviders.DefaultJsProvider)) && !this.ScriptsToExclude.Contains(s.Name)).OrderBy(s => s.Priority)) { sortedList.Add(script.Render(this.hostSettings.CrmVersion, this.hostSettings.CdnEnabled, applicationPath)); } @@ -205,7 +205,7 @@ private string ResolvePath(string filePath, string pathNameAlias) filePath = filePath.Replace("\\", "/"); if (!string.IsNullOrEmpty(pathNameAlias)) { - if (this.PathNameAliases.TryGetValue(pathNameAlias.ToLowerInvariant(), out var alias)) + if (this.PathNameAliases.TryGetValue(pathNameAlias, out var alias)) { return $"{alias}/{filePath.TrimStart('/')}"; } diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ResourceBase.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ResourceBase.cs index 3f399305b68..ca439e7f0aa 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ResourceBase.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ResourceBase.cs @@ -94,7 +94,7 @@ internal string GetVersionedPath(int crmVersion, bool useCdn, string application { return path; } - else if (path.StartsWith("~")) + else if (path.StartsWith("~", StringComparison.Ordinal)) { if (string.IsNullOrEmpty(applicationPath)) { @@ -105,7 +105,7 @@ internal string GetVersionedPath(int crmVersion, bool useCdn, string application return $"{path.Replace("~", applicationPath)}?cdv={crmVersion}"; } } - else if (path.StartsWith("/")) + else if (path.StartsWith("/", StringComparison.Ordinal)) { return $"{path}?cdv={crmVersion}"; } From b0bc023e770edce558c447c18c78ece6d7a136fd Mon Sep 17 00:00:00 2001 From: Brian Dukes Date: Wed, 5 Nov 2025 11:05:41 -0600 Subject: [PATCH 151/199] Doc and code cleanup --- .../ClientResources/IResource.cs | 66 +++-------- .../Models/FontResource.cs | 81 ++++++------- .../Models/ResourceBase.cs | 36 ++---- .../Models/ScriptResource.cs | 109 +++++++++--------- .../Models/StylesheetResource.cs | 99 ++++++++-------- .../JavaScriptLibraries/JavaScript.cs | 7 +- 6 files changed, 167 insertions(+), 231 deletions(-) diff --git a/DNN Platform/DotNetNuke.Abstractions/ClientResources/IResource.cs b/DNN Platform/DotNetNuke.Abstractions/ClientResources/IResource.cs index 8072aeccf78..c5575004d4b 100644 --- a/DNN Platform/DotNetNuke.Abstractions/ClientResources/IResource.cs +++ b/DNN Platform/DotNetNuke.Abstractions/ClientResources/IResource.cs @@ -5,24 +5,16 @@ namespace DotNetNuke.Abstractions.ClientResources; using System.Collections.Generic; -/// -/// Represents a client resource that can be registered with the application. -/// +/// Represents a client resource that can be registered with the application. public interface IResource { - /// - /// Gets or sets the file path of the client resource. - /// + /// Gets or sets the file path of the client resource. string FilePath { get; set; } - /// - /// Gets or sets the path name alias for the client resource. - /// + /// Gets or sets the path name alias for the client resource. string PathNameAlias { get; set; } - /// - /// Gets or sets the resolved full path. - /// + /// Gets or sets the resolved full path. string ResolvedPath { get; set; } /// @@ -31,49 +23,31 @@ public interface IResource /// string CdnUrl { get; set; } - /// - /// Gets or sets the priority of the client resource. - /// + /// Gets or sets the priority of the client resource. int Priority { get; set; } - /// - /// Gets or sets the provider of the client resource. - /// + /// Gets or sets the provider of the client resource. string Provider { get; set; } - /// - /// Gets or sets the name of the client resource. - /// + /// Gets or sets the name of the client resource. string Name { get; set; } - /// - /// Gets or sets the version of the client resource. - /// + /// Gets or sets the version of the client resource. string Version { get; set; } - /// - /// Gets or sets a value indicating whether to force the version of the client resource. - /// + /// Gets or sets a value indicating whether to force the version of the client resource. bool ForceVersion { get; set; } - /// - /// Gets or sets the cross-origin policy for the client resource. - /// + /// Gets or sets the cross-origin policy for the client resource. CrossOrigin CrossOrigin { get; set; } - /// - /// Gets or sets the fetch priority for the client resource. - /// + /// Gets or sets the fetch priority for the client resource. FetchPriority FetchPriority { get; set; } - /// - /// Gets or sets the referrer policy for the client resource. - /// + /// Gets or sets the referrer policy for the client resource. ReferrerPolicy ReferrerPolicy { get; set; } - /// - /// Gets or sets a value indicating whether the client resource is blocking. - /// + /// Gets or sets a value indicating whether the client resource is blocking. bool Blocking { get; set; } /// @@ -93,22 +67,16 @@ public interface IResource /// string Type { get; set; } - /// - /// Gets or sets additional attributes for the client resource. - /// + /// Gets or sets additional attributes for the client resource. Dictionary Attributes { get; set; } - /// - /// Registers the client resource. - /// + /// Registers the client resource. void Register(); - /// - /// Renders the client resource as a string. - /// + /// Renders the client resource as a string. /// The current CRM version. /// Whether to use the CDN url if available. /// The application path to use for resolving relative paths. - /// Returns a HTML string. + /// Returns an HTML string. string Render(int crmVersion, bool useCdn, string applicationPath); } diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/FontResource.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/FontResource.cs index 1cf9a9703d9..03809ab55b8 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/FontResource.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/FontResource.cs @@ -2,58 +2,53 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information -namespace DotNetNuke.Web.Client.ResourceManager.Models +namespace DotNetNuke.Web.Client.ResourceManager.Models; + +using System.Net; +using System.Text; + +using DotNetNuke.Abstractions.ClientResources; + +/// Represents a font resource that can be registered and rendered for client use. +public class FontResource : LinkResource, IFontResource { - using System.Net; - using System.Text; + private readonly IClientResourceController clientResourceController; - using DotNetNuke.Abstractions.ClientResources; + /// Initializes a new instance of the class. + /// The client resources controller used to manage font resources. + public FontResource(IClientResourceController clientResourceController) + { + this.clientResourceController = clientResourceController; + this.Provider = ClientResourceProviders.DnnPageHeaderProvider; + } - /// - /// Represents a font resource that can be registered and rendered for client use. - /// - public class FontResource : LinkResource, IFontResource + /// + public override void Register() { - private readonly IClientResourceController clientResourceController; + this.clientResourceController.AddFont(this); + } - /// - /// Initializes a new instance of the class. - /// - /// The client resources controller used to manage font resources. - public FontResource(IClientResourceController clientResourceController) + /// + public override string Render(int crmVersion, bool useCdn, string applicationPath) + { + var htmlString = new StringBuilder(" - public override void Register() + else { - this.clientResourceController.AddFont(this); + htmlString.Append($" rel=\"font\""); } - /// - public override string Render(int crmVersion, bool useCdn, string applicationPath) - { - var htmlString = new StringBuilder(""); - return htmlString.ToString(); - } + this.RenderType(htmlString); + this.RenderCrossOriginAttribute(htmlString); + this.RenderFetchPriority(htmlString); + this.RenderIntegrity(htmlString); + this.RenderReferrerPolicy(htmlString); + this.RenderAttributes(htmlString); + htmlString.Append(" />"); + return htmlString.ToString(); } } diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ResourceBase.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ResourceBase.cs index ca439e7f0aa..d73c8f9b2b2 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ResourceBase.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ResourceBase.cs @@ -11,9 +11,7 @@ namespace DotNetNuke.Web.Client.ResourceManager.Models using DotNetNuke.Abstractions.ClientResources; - /// - /// Base class for all resource types. - /// + /// Base class for all resource types. public abstract class ResourceBase : IResource { private string name; @@ -76,9 +74,7 @@ public string Name /// public abstract string Render(int crmVersion, bool useCdn, string applicationPath); - /// - /// Gets the versioned path. - /// + /// Gets the versioned path. /// The CRM version. /// Whether to use the CDN url if available. /// The application path to use for resolving relative paths. @@ -113,9 +109,7 @@ internal string GetVersionedPath(int crmVersion, bool useCdn, string application return $"{applicationPath}/{path}?cdv={crmVersion}"; } - /// - /// Renders the blocking attribute. - /// + /// Renders the blocking attribute. /// The HTML string builder to append to. protected void RenderBlocking(StringBuilder htmlString) { @@ -125,9 +119,7 @@ protected void RenderBlocking(StringBuilder htmlString) } } - /// - /// Renders the cross origin attribute. - /// + /// Renders the crossorigin attribute. /// The HTML string builder to append to. protected void RenderCrossOriginAttribute(StringBuilder htmlString) { @@ -144,9 +136,7 @@ protected void RenderCrossOriginAttribute(StringBuilder htmlString) } } - /// - /// Renders the fetch priority attribute. - /// + /// Renders the fetchpriority attribute. /// The HTML string builder to append to. protected void RenderFetchPriority(StringBuilder htmlString) { @@ -163,9 +153,7 @@ protected void RenderFetchPriority(StringBuilder htmlString) } } - /// - /// Renders the integrity attribute. - /// + /// Renders the integrity attribute. /// The HTML string builder to append to. protected void RenderIntegrity(StringBuilder htmlString) { @@ -175,9 +163,7 @@ protected void RenderIntegrity(StringBuilder htmlString) } } - /// - /// Renders the referrer policy attribute. - /// + /// Renders the referrerpolicy attribute. /// The HTML string builder to append to. protected void RenderReferrerPolicy(StringBuilder htmlString) { @@ -213,9 +199,7 @@ protected void RenderReferrerPolicy(StringBuilder htmlString) } } - /// - /// Renders the mimetype attribute. - /// + /// Renders the type attribute. /// The HTML string builder to append to. protected void RenderType(StringBuilder htmlString) { @@ -225,9 +209,7 @@ protected void RenderType(StringBuilder htmlString) } } - /// - /// Renders the attributes. - /// + /// Renders the attributes. /// The HTML string builder to append to. protected void RenderAttributes(StringBuilder htmlString) { diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ScriptResource.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ScriptResource.cs index 6508de957ae..8a258ca9b43 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ScriptResource.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/ScriptResource.cs @@ -2,76 +2,71 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information -namespace DotNetNuke.Web.Client.ResourceManager.Models -{ - using System.Net; - using System.Text; +namespace DotNetNuke.Web.Client.ResourceManager.Models; + +using System.Net; +using System.Text; - using DotNetNuke.Abstractions.ClientResources; +using DotNetNuke.Abstractions.ClientResources; + +/// Represents a script resource that can be registered and rendered in the client resources system. +public class ScriptResource : ResourceBase, IScriptResource +{ + private readonly IClientResourceController clientResourceController; - /// - /// Represents a script resource that can be registered and rendered in the client resources system. - /// - public class ScriptResource : ResourceBase, IScriptResource + /// Initializes a new instance of the class. + /// The client resources controller. + public ScriptResource(IClientResourceController clientResourceController) { - private readonly IClientResourceController clientResourceController; + this.clientResourceController = clientResourceController; + this.Provider = ClientResourceProviders.DefaultJsProvider; + this.Priority = (int)FileOrder.Js.DefaultPriority; + this.Type = "text/javascript"; + } - /// - /// Initializes a new instance of the class. - /// - /// The client resources controller. - public ScriptResource(IClientResourceController clientResourceController) - { - this.clientResourceController = clientResourceController; - this.Provider = ClientResourceProviders.DefaultJsProvider; - this.Priority = (int)FileOrder.Js.DefaultPriority; - this.Type = "text/javascript"; - } + /// + public bool Async { get; set; } = false; - /// - public bool Async { get; set; } = false; + /// + public bool Defer { get; set; } = false; - /// - public bool Defer { get; set; } = false; + /// + public bool NoModule { get; set; } = false; - /// - public bool NoModule { get; set; } = false; + /// + public override void Register() + { + this.clientResourceController.AddScript(this); + } - /// - public override void Register() + /// + public override string Render(int crmVersion, bool useCdn, string applicationPath) + { + var htmlString = new StringBuilder(" - public override string Render(int crmVersion, bool useCdn, string applicationPath) + if (this.Defer) { - var htmlString = new StringBuilder(""); - return htmlString.ToString(); + if (this.NoModule) + { + htmlString.Append(" nomodule"); } + + this.RenderType(htmlString); + this.RenderBlocking(htmlString); + this.RenderCrossOriginAttribute(htmlString); + this.RenderFetchPriority(htmlString); + this.RenderIntegrity(htmlString); + this.RenderReferrerPolicy(htmlString); + this.RenderAttributes(htmlString); + htmlString.Append(">"); + return htmlString.ToString(); } } diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/StylesheetResource.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/StylesheetResource.cs index d7efe9178a2..b0cb7c3d968 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/StylesheetResource.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/Models/StylesheetResource.cs @@ -2,69 +2,64 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information -namespace DotNetNuke.Web.Client.ResourceManager.Models +namespace DotNetNuke.Web.Client.ResourceManager.Models; + +using System.Net; +using System.Text; + +using DotNetNuke.Abstractions.ClientResources; + +/// Represents a stylesheet resource that can be registered and rendered in the client resources controller. +public class StylesheetResource : LinkResource, IStylesheetResource { - using System.Net; - using System.Text; + private readonly IClientResourceController clientResourceController; - using DotNetNuke.Abstractions.ClientResources; + /// Initializes a new instance of the class. + /// The client resources controller used to register the stylesheet. + public StylesheetResource(IClientResourceController clientResourceController) + { + this.clientResourceController = clientResourceController; + this.Provider = ClientResourceProviders.DefaultCssProvider; + this.Priority = (int)FileOrder.Css.DefaultPriority; + } + + /// + public bool Disabled { get; set; } = false; - /// - /// Represents a stylesheet resource that can be registered and rendered in the client resources controller. - /// - public class StylesheetResource : LinkResource, IStylesheetResource + /// + public override void Register() { - private readonly IClientResourceController clientResourceController; + this.clientResourceController.AddStylesheet(this); + } - /// - /// Initializes a new instance of the class. - /// - /// The client resources controller used to register the stylesheet. - public StylesheetResource(IClientResourceController clientResourceController) + /// + public override string Render(int crmVersion, bool useCdn, string applicationPath) + { + var htmlString = new StringBuilder(" - public bool Disabled { get; set; } = false; - - /// - public override void Register() + else { - this.clientResourceController.AddStylesheet(this); + htmlString.Append($" rel=\"stylesheet\""); } - /// - public override string Render(int crmVersion, bool useCdn, string applicationPath) + if (this.Disabled) { - var htmlString = new StringBuilder(""); - return htmlString.ToString(); + htmlString.Append(" disabled"); } + + this.RenderMedia(htmlString); + this.RenderType(htmlString); + this.RenderBlocking(htmlString); + this.RenderCrossOriginAttribute(htmlString); + this.RenderFetchPriority(htmlString); + this.RenderIntegrity(htmlString); + this.RenderReferrerPolicy(htmlString); + this.RenderAttributes(htmlString); + htmlString.Append(" />"); + return htmlString.ToString(); } } diff --git a/DNN Platform/Library/Framework/JavaScriptLibraries/JavaScript.cs b/DNN Platform/Library/Framework/JavaScriptLibraries/JavaScript.cs index f4983bc675c..d75394cdc70 100644 --- a/DNN Platform/Library/Framework/JavaScriptLibraries/JavaScript.cs +++ b/DNN Platform/Library/Framework/JavaScriptLibraries/JavaScript.cs @@ -440,7 +440,7 @@ private static void RequestSpecificVersionLibraryRegistration(IEventLogger event private static void AddItemRequest(JavaScriptLibrary library, bool forceVersion) { HttpContextSource.Current.Items[ScriptPrefix + library.JavaScriptLibraryID] = true; - var controller = GetClientResourcesController(HttpContextSource.Current); + var controller = GetClientResourcesController(); controller.CreateScript() .FromSrc(GetScriptPath(null, null, library.LibraryName)) .SetNameAndVersion(library.LibraryName, library.Version.ToString(), forceVersion) @@ -553,7 +553,8 @@ private static string GetScriptPath(IHostSettings hostSettings, IHostSettingsSer } } - return "~/Resources/libraries/" + js.LibraryName + "/" + Globals.FormatVersion(js.Version, "00", 3, "_") + "/" + js.FileName; + var formatVersion = Globals.FormatVersion(js.Version, "00", 3, "_"); + return $"~/Resources/libraries/{js.LibraryName}/{formatVersion}/{js.FileName}"; } private static string GetScriptLocation(JavaScriptLibrary js) @@ -689,7 +690,7 @@ private static int GetFileOrder(JavaScriptLibrary jsl) } } - private static IClientResourceController GetClientResourcesController(HttpContextBase context) + private static IClientResourceController GetClientResourcesController() { var serviceProvider = Globals.GetCurrentServiceProvider(); return serviceProvider.GetRequiredService(); From ec6e899427cc7fa6b4886f73857d612235fb445e Mon Sep 17 00:00:00 2001 From: Brian Dukes Date: Wed, 5 Nov 2025 11:54:14 -0600 Subject: [PATCH 152/199] Update docs --- .../ClientResources/IResource.cs | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/DNN Platform/DotNetNuke.Abstractions/ClientResources/IResource.cs b/DNN Platform/DotNetNuke.Abstractions/ClientResources/IResource.cs index c5575004d4b..044d8fb2513 100644 --- a/DNN Platform/DotNetNuke.Abstractions/ClientResources/IResource.cs +++ b/DNN Platform/DotNetNuke.Abstractions/ClientResources/IResource.cs @@ -19,14 +19,14 @@ public interface IResource /// /// Gets or sets the CDN url to be used if host settings specify CDN should be used. - /// Note, if you only wish to use an external path, then use the FilePath property. + /// Note, if you only wish to use an external path, then use the property. /// string CdnUrl { get; set; } /// Gets or sets the priority of the client resource. int Priority { get; set; } - /// Gets or sets the provider of the client resource. + /// Gets or sets the provider of the client resource, see . string Provider { get; set; } /// Gets or sets the name of the client resource. @@ -58,12 +58,14 @@ public interface IResource string Integrity { get; set; } /// - /// Gets or sets a value indicating the type of script or link element. - /// In the case of a link, this should be a mime type. - /// In the case of a script, the value of this attribute indicates the type of data represented by the script, and will be one of the following: - /// - Empty string or "text/javascript" (default): classic script. - /// - "module": module script. - /// - "importmap": import map. + /// Gets or sets a value indicating the type of script or link element. + /// In the case of a link, this should be a MIME type. + /// In the case of a script, the value of this attribute indicates the type of data represented by the script, and will be one of the following: + /// + /// Empty string or "text/javascript" (default): classic script. + /// "module": module script. + /// "importmap": import map. + /// /// string Type { get; set; } From 0313d6b83260f4b68c02a28194a210a2ec909c88 Mon Sep 17 00:00:00 2001 From: Brian Dukes Date: Wed, 5 Nov 2025 12:28:56 -0600 Subject: [PATCH 153/199] Compare versions correctly --- .../ClientResourceController.cs | 15 +++++- .../GenericResourceExtensions.cs | 53 +++++-------------- .../Controls/ClientResourceInclude.cs | 40 ++++---------- 3 files changed, 35 insertions(+), 73 deletions(-) diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourceController.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourceController.cs index 476047bf71e..8d37ce9f14a 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourceController.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourceController.cs @@ -174,10 +174,10 @@ private List AddResource(List resources, T resource) // If we have a version, we need to remove any existing link with the same name and a lower version if (!string.IsNullOrEmpty(resource.Version)) { - resources.RemoveAll(r => string.Equals(r.Name, resource.Name, StringComparison.OrdinalIgnoreCase) && string.Compare(r.Version, resource.Version, StringComparison.InvariantCultureIgnoreCase) < 0); + resources.RemoveAll(r => string.Equals(r.Name, resource.Name, StringComparison.OrdinalIgnoreCase) && VersionIsLessThan(r.Version, resource.Version)); // If we have an existing link with the same name and a higher version, we do not add this link - if (resources.Exists(r => string.Equals(r.Name, resource.Name, StringComparison.OrdinalIgnoreCase) && string.Compare(r.Version, resource.Version, StringComparison.InvariantCultureIgnoreCase) >= 0)) + if (resources.Exists(r => string.Equals(r.Name, resource.Name, StringComparison.OrdinalIgnoreCase) && !VersionIsLessThan(r.Version, resource.Version))) { return resources; } @@ -186,6 +186,17 @@ private List AddResource(List resources, T resource) resources.Add(resource); return resources; + + static bool VersionIsLessThan(string version, string otherVersion) + { + if (Version.TryParse(version, out var parsedVersion) && + Version.TryParse(otherVersion, out var otherParsedVersion)) + { + return parsedVersion < otherParsedVersion; + } + + return string.Compare(version, otherVersion, StringComparison.OrdinalIgnoreCase) < 0; + } } private string ResolvePath(string filePath, string pathNameAlias) diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/GenericResourceExtensions.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/GenericResourceExtensions.cs index b27b1e6b76f..4261d78542c 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/GenericResourceExtensions.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/GenericResourceExtensions.cs @@ -8,14 +8,10 @@ namespace DotNetNuke.Web.Client.ResourceManager using DotNetNuke.Abstractions.ClientResources; - /// - /// Provides extension methods for to set various resource properties in a fluent manner. - /// + /// Provides extension methods for to set various resource properties in a fluent manner. public static class GenericResourceExtensions { - /// - /// Sets the priority of the resource. - /// + /// Sets the priority of the resource. /// The resource to set the priority for. /// The priority value to set. /// The resource with the priority set. @@ -32,9 +28,7 @@ public static T SetPriority(this T input, int priority) return input; } - /// - /// Sets the name, version, and force version flag of the resource. - /// + /// Sets the name, version, and force version flag of the resource. /// The resource to set the name and version for. /// The name to set. /// The version to set. @@ -55,9 +49,7 @@ public static T SetNameAndVersion(this T input, string name, string version, return input; } - /// - /// Sets the CDN URL of the resource. - /// + /// Sets the CDN URL of the resource. /// The resource to set the CDN URL for. /// The CDN URL to set. /// The resource with the CDN URL set. @@ -74,9 +66,7 @@ public static T SetCdnUrl(this T input, string cdnUrl) return input; } - /// - /// Sets the provider of the resource. - /// + /// Sets the provider of the resource. /// The resource to set the provider for. /// The provider to set. /// The resource with the provider set. @@ -93,9 +83,7 @@ public static T SetProvider(this T input, string provider) return input; } - /// - /// Marks the resource as blocking. - /// + /// Marks the resource as blocking. /// The resource to mark as blocking. /// The resource marked as blocking. /// The type of resource, which must implement . @@ -111,9 +99,7 @@ public static T SetBlocking(this T input) return input; } - /// - /// Sets the integrity hash of the resource. - /// + /// Sets the integrity hash of the resource. /// The resource to set the integrity hash for. /// The integrity hash to set. /// The resource with the integrity hash set. @@ -130,9 +116,7 @@ public static T SetIntegrity(this T input, string hash) return input; } - /// - /// Sets the Cross-Origin attribute of the resource. - /// + /// Sets the Cross-Origin attribute of the resource. /// The resource to set the Cross-Origin attribute for. /// The Cross-Origin value to set. /// The resource with the Cross-Origin attribute set. @@ -149,9 +133,7 @@ public static T SetCrossOrigin(this T input, CrossOrigin crossOrigin) return input; } - /// - /// Sets the fetch priority of the resource. - /// + /// Sets the fetch priority of the resource. /// The resource to set the fetch priority for. /// The fetch priority to set. /// The resource with the fetch priority set. @@ -168,9 +150,7 @@ public static T SetFetchPriority(this T input, FetchPriority fetchPriority) return input; } - /// - /// Sets the referrer policy of the resource. - /// + /// Sets the referrer policy of the resource. /// The resource to set the referrer policy for. /// The referrer policy to set. /// The resource with the referrer policy set. @@ -187,9 +167,7 @@ public static T SetReferrerPolicy(this T input, ReferrerPolicy referrerPolicy return input; } - /// - /// Adds or updates an attribute of the resource. - /// + /// Adds or updates an attribute of the resource. /// The resource to add or update the attribute for. /// The name of the attribute to add or update. /// The value of the attribute to add or update. @@ -205,14 +183,7 @@ public static T AddAttribute(this T input, string attributeName, string attri if (!string.IsNullOrEmpty(attributeName)) { - if (input.Attributes.ContainsKey(attributeName)) - { - input.Attributes[attributeName] = attributeValue; - } - else - { - input.Attributes.Add(attributeName, attributeValue); - } + input.Attributes[attributeName] = attributeValue; } return input; diff --git a/DNN Platform/DotNetNuke.Web.Client/Controls/ClientResourceInclude.cs b/DNN Platform/DotNetNuke.Web.Client/Controls/ClientResourceInclude.cs index 585de0f902d..33dd38bef64 100644 --- a/DNN Platform/DotNetNuke.Web.Client/Controls/ClientResourceInclude.cs +++ b/DNN Platform/DotNetNuke.Web.Client/Controls/ClientResourceInclude.cs @@ -11,51 +11,33 @@ namespace DotNetNuke.Web.Client.ClientResourceManagement /// Represents an included client resource. public abstract class ClientResourceInclude : Control { - /// - /// Initializes a new instance of the class. - /// + /// Initializes a new instance of the class. protected ClientResourceInclude() { } - /// - /// Gets the type of client dependency for this resource (e.g., Javascript or Css). - /// + /// Gets the type of client dependency for this resource (e.g., or ). public ClientDependencyType DependencyType { get; internal set; } - /// - /// Gets or sets the file path for the client resource to be included. - /// + /// Gets or sets the file path for the client resource to be included. public string FilePath { get; set; } - /// - /// Gets or sets the path name alias for the client resource. - /// + /// Gets or sets the path name alias for the client resource. public string PathNameAlias { get; set; } - /// - /// Gets or sets the priority for the client resource. Resources with lower priority values are included before those with higher values. - /// + /// Gets or sets the priority for the client resource. Resources with lower priority values are included before those with higher values. public int Priority { get; set; } - /// - /// Gets or sets the group for the client resource. Resources in the same group are processed together. - /// + /// Gets or sets the group for the client resource. Resources in the same group are processed together. public int Group { get; set; } - /// - /// Gets or sets the name of the script (e.g. jQuery, Bootstrap, Angular, etc.). - /// + /// Gets or sets the name of the script (e.g. jQuery, Bootstrap, Angular, etc.). public string Name { get; set; } - /// - /// Gets or sets the version of this resource if it is a named resource. Note this field is only used when is specified. - /// + /// Gets or sets the version of this resource if it is a named resource. Note this field is only used when is specified. public string Version { get; set; } - /// - /// Gets or sets a value indicating whether to force this version to be used. Meant for skin designers that wish to override choices made by module developers or the framework. - /// + /// Gets or sets a value indicating whether to force this version to be used. Meant for skin designers that wish to override choices made by module developers or the framework. public bool ForceVersion { get; set; } /// @@ -64,9 +46,7 @@ protected ClientResourceInclude() /// public string ForceProvider { get; set; } - /// - /// Gets or sets a value indicating whether to add the HTML tag for this resource to the page output. - /// + /// Gets or sets a value indicating whether to add the HTML tag for this resource to the page output. public bool AddTag { get; set; } } } From aa9a70127a1b2f9706a3fa2eb0ac7b7e9b13ec81 Mon Sep 17 00:00:00 2001 From: Peter Donker Date: Wed, 12 Nov 2025 10:37:13 +0100 Subject: [PATCH 154/199] Added parameterless constructor for Container --- DNN Platform/Library/UI/Containers/Container.cs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/DNN Platform/Library/UI/Containers/Container.cs b/DNN Platform/Library/UI/Containers/Container.cs index 9ee9ee8b5ca..dc96cba7313 100644 --- a/DNN Platform/Library/UI/Containers/Container.cs +++ b/DNN Platform/Library/UI/Containers/Container.cs @@ -37,6 +37,13 @@ public class Container : UserControl private ModuleInfo moduleConfiguration; private ModuleHost moduleHost; + /// Initializes a new instance of the class. + [Obsolete("Use Container(IClientResourceController) instead. Scheduled removal in v12.0.0.")] + public Container() + : this(null) + { + } + /// Initializes a new instance of the class. /// The client resources controller. public Container(IClientResourceController clientResourceController) From 753e8322cee216bbf84b321f0ac7604160dabb87 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 12 Nov 2025 16:03:12 +0000 Subject: [PATCH 155/199] Bump min-document in the npm_and_yarn group across 1 directory Bumps the npm_and_yarn group with 1 update in the / directory: [min-document](https://github.com/Raynos/min-document). Updates `min-document` from 2.19.0 to 2.19.2 - [Commits](https://github.com/Raynos/min-document/compare/v2.19.0...v2.19.2) --- updated-dependencies: - dependency-name: min-document dependency-version: 2.19.2 dependency-type: indirect dependency-group: npm_and_yarn ... Signed-off-by: dependabot[bot] --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 7d125d907b6..79de3dc9be5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -14416,11 +14416,11 @@ __metadata: linkType: hard "min-document@npm:^2.19.0": - version: 2.19.0 - resolution: "min-document@npm:2.19.0" + version: 2.19.2 + resolution: "min-document@npm:2.19.2" dependencies: dom-walk: "npm:^0.1.0" - checksum: 10/4e45a0686c81cc04509989235dc6107e2678a59bb48ce017d3c546d7d9a18d782e341103e66c78081dd04544704e2196e529905c41c2550bca069b69f95f07c8 + checksum: 10/9c98ea950451ac3292762fdc7a076ef2d365d795280a2a9357a5d1a17d80c44ecab2354ad507432411c1605515731259b41ce97b87f0b7126e1dfe610b2674ae languageName: node linkType: hard From 6abc69a664b73c68b75b86071b4e8c62748f707d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 15 Nov 2025 02:34:59 +0000 Subject: [PATCH 156/199] Update caniuse database --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 79de3dc9be5..eca9a4973cc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7410,9 +7410,9 @@ __metadata: linkType: hard "caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30001702, caniuse-lite@npm:^1.0.30001746": - version: 1.0.30001751 - resolution: "caniuse-lite@npm:1.0.30001751" - checksum: 10/608f7e1248b7023020382c7dbb0ef389693b3fc98193c3ccea2d44126306d6ac905a5061cf9e62bf640535a86e7a98e563b34c02f909296cfe228f41627a4dc7 + version: 1.0.30001754 + resolution: "caniuse-lite@npm:1.0.30001754" + checksum: 10/6061032b8e799913f6db01ad190bc6885369c0be7853fbe542a36f0d114f193fac6e812d73657526b4d5a6b7add8c56bb629913237f9097b6e6438dcac703965 languageName: node linkType: hard From 84eb0f0f99ffc15166e476a4ee5f907a9be78db8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Nov 2025 14:07:22 +0000 Subject: [PATCH 157/199] Bump js-yaml in the npm_and_yarn group across 1 directory Bumps the npm_and_yarn group with 1 update in the / directory: [js-yaml](https://github.com/nodeca/js-yaml). Updates `js-yaml` from 3.14.1 to 3.14.2 - [Changelog](https://github.com/nodeca/js-yaml/blob/master/CHANGELOG.md) - [Commits](https://github.com/nodeca/js-yaml/compare/3.14.1...3.14.2) --- updated-dependencies: - dependency-name: js-yaml dependency-version: 3.14.2 dependency-type: indirect dependency-group: npm_and_yarn ... Signed-off-by: dependabot[bot] --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index eca9a4973cc..ed1bbcf6423 100644 --- a/yarn.lock +++ b/yarn.lock @@ -13290,14 +13290,14 @@ __metadata: linkType: hard "js-yaml@npm:^3.10.0, js-yaml@npm:^3.13.1": - version: 3.14.1 - resolution: "js-yaml@npm:3.14.1" + version: 3.14.2 + resolution: "js-yaml@npm:3.14.2" dependencies: argparse: "npm:^1.0.7" esprima: "npm:^4.0.0" bin: js-yaml: bin/js-yaml.js - checksum: 10/9e22d80b4d0105b9899135365f746d47466ed53ef4223c529b3c0f7a39907743fdbd3c4379f94f1106f02755b5e90b2faaf84801a891135544e1ea475d1a1379 + checksum: 10/172e0b6007b0bf0fc8d2469c94424f7dd765c64a047d2b790831fecef2204a4054eabf4d911eb73ab8c9a3256ab8ba1ee8d655b789bf24bf059c772acc2075a1 languageName: node linkType: hard From 935e9d756872409a6f4496528edb7f1f814be645 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 18 Nov 2025 17:49:41 +0000 Subject: [PATCH 158/199] Bump glob in the npm_and_yarn group across 1 directory Bumps the npm_and_yarn group with 1 update in the / directory: [glob](https://github.com/isaacs/node-glob). Updates `glob` from 11.0.3 to 11.1.0 - [Changelog](https://github.com/isaacs/node-glob/blob/main/changelog.md) - [Commits](https://github.com/isaacs/node-glob/compare/v11.0.3...v11.1.0) --- updated-dependencies: - dependency-name: glob dependency-version: 11.1.0 dependency-type: direct:development dependency-group: npm_and_yarn ... Signed-off-by: dependabot[bot] --- yarn.lock | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/yarn.lock b/yarn.lock index ed1bbcf6423..ac250bd94d0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11293,18 +11293,18 @@ __metadata: linkType: hard "glob@npm:^11.0.3": - version: 11.0.3 - resolution: "glob@npm:11.0.3" + version: 11.1.0 + resolution: "glob@npm:11.1.0" dependencies: foreground-child: "npm:^3.3.1" jackspeak: "npm:^4.1.1" - minimatch: "npm:^10.0.3" + minimatch: "npm:^10.1.1" minipass: "npm:^7.1.2" package-json-from-dist: "npm:^1.0.0" path-scurry: "npm:^2.0.0" bin: glob: dist/esm/bin.mjs - checksum: 10/2ae536c1360c0266b523b2bfa6aadc10144a8b7e08869b088e37ac3c27cd30774f82e4bfb291cde796776e878f9e13200c7ff44010eb7054e00f46f649397893 + checksum: 10/da4501819633daff8822c007bb3f93d5c4d2cbc7b15a8e886660f4497dd251a1fb4f53a85fba1e760b31704eff7164aeb2c7a82db10f9f2c362d12c02fe52cf3 languageName: node linkType: hard @@ -14465,6 +14465,15 @@ __metadata: languageName: node linkType: hard +"minimatch@npm:^10.1.1": + version: 10.1.1 + resolution: "minimatch@npm:10.1.1" + dependencies: + "@isaacs/brace-expansion": "npm:^5.0.0" + checksum: 10/110f38921ea527022e90f7a5f43721838ac740d0a0c26881c03b57c261354fb9a0430e40b2c56dfcea2ef3c773768f27210d1106f1f2be19cde3eea93f26f45e + languageName: node + linkType: hard + "minimatch@npm:^3.0.2, minimatch@npm:^3.0.4, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": version: 3.1.2 resolution: "minimatch@npm:3.1.2" From 03eb508fb68b51ae7300f50c8c8eb888aca4a405 Mon Sep 17 00:00:00 2001 From: Timo Breumelhof Date: Thu, 20 Nov 2025 14:37:21 +0100 Subject: [PATCH 159/199] Fix typo i default.css #6805 --- .../src/styles/default-css/10.0.0/base/_images.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DNN Platform/Dnn.ClientSide/src/styles/default-css/10.0.0/base/_images.scss b/DNN Platform/Dnn.ClientSide/src/styles/default-css/10.0.0/base/_images.scss index b887ad12ab5..ef417284a05 100644 --- a/DNN Platform/Dnn.ClientSide/src/styles/default-css/10.0.0/base/_images.scss +++ b/DNN Platform/Dnn.ClientSide/src/styles/default-css/10.0.0/base/_images.scss @@ -1,7 +1,7 @@ img { border: 0; vertical-align: middle; - &.dnn-sclae-img{ + &.dnn-scale-img{ max-width: 100%; height: auto; } From cf2fddef43115fe19b7054a5b6b53c94d419bc10 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 20 Nov 2025 22:01:36 +0000 Subject: [PATCH 160/199] Bump actions/checkout from 5 to 6 Bumps [actions/checkout](https://github.com/actions/checkout) from 5 to 6. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/v5...v6) --- updated-dependencies: - dependency-name: actions/checkout dependency-version: '6' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/browserslist-update-db.yml | 2 +- .github/workflows/image-actions.yml | 2 +- .github/workflows/open-merged-pr-to-future.yml | 2 +- .github/workflows/updateVersions.yml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/browserslist-update-db.yml b/.github/workflows/browserslist-update-db.yml index b424f7eec6f..b85b45490fa 100644 --- a/.github/workflows/browserslist-update-db.yml +++ b/.github/workflows/browserslist-update-db.yml @@ -13,7 +13,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout repository - uses: actions/checkout@v5 + uses: actions/checkout@v6 with: fetch-depth: 0 - name: Configure git diff --git a/.github/workflows/image-actions.yml b/.github/workflows/image-actions.yml index 98dac094395..73ec423ff32 100644 --- a/.github/workflows/image-actions.yml +++ b/.github/workflows/image-actions.yml @@ -23,7 +23,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout Repo - uses: actions/checkout@v5 + uses: actions/checkout@v6 - name: Compress Images id: compress_images diff --git a/.github/workflows/open-merged-pr-to-future.yml b/.github/workflows/open-merged-pr-to-future.yml index 4e35b2d69cf..951d26cae69 100644 --- a/.github/workflows/open-merged-pr-to-future.yml +++ b/.github/workflows/open-merged-pr-to-future.yml @@ -11,7 +11,7 @@ jobs: runs-on: ubuntu-latest if: ${{ github.event.pull_request.merged }} steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 - uses: peterjgrainger/action-create-branch@v3.0.0 env: diff --git a/.github/workflows/updateVersions.yml b/.github/workflows/updateVersions.yml index 826b090d6ce..6273fa040e5 100644 --- a/.github/workflows/updateVersions.yml +++ b/.github/workflows/updateVersions.yml @@ -7,7 +7,7 @@ jobs: runs-on: ubuntu-latest if: ${{ github.event.ref_type == 'branch' && startsWith(github.event.ref, 'release/') }} steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 - name: Get the release branch version uses: valadas/get-release-branch-version@v1.1.0 From 006a6bf784afb1e32a7a9e3dcfdb7abf23a04614 Mon Sep 17 00:00:00 2001 From: Peter Donker Date: Fri, 21 Nov 2025 14:26:26 +0100 Subject: [PATCH 161/199] Remove FromSrc in the new CDF solution in favor of CreateX method. --- .../IClientResourceController.cs | 42 +++++++++- .../ClientResourceController.cs | 76 +++++++++++++++-- .../FontResourceExtensions.cs | 83 ------------------- .../ScriptResourceExtensions.cs | 40 --------- .../StylesheetResourceExtensions.cs | 40 --------- .../ClientResourceManager.cs | 6 +- .../Controls/DnnCssInclude.cs | 3 +- .../Controls/DnnHtmlInclude.cs | 6 +- .../Controls/DnnJsInclude.cs | 3 +- .../DotNetNuke.WebUtility/ClientAPI.vb | 14 ++-- .../JavaScriptLibraries/JavaScript.cs | 6 +- .../Services/ClientDependency/Extensions.cs | 12 ++- DNN Platform/Website/Default.aspx.cs | 3 +- .../Website/admin/Skins/Search.ascx.cs | 2 +- 14 files changed, 131 insertions(+), 205 deletions(-) delete mode 100644 DNN Platform/DotNetNuke.Web.Client.ResourceManager/FontResourceExtensions.cs diff --git a/DNN Platform/DotNetNuke.Abstractions/ClientResources/IClientResourceController.cs b/DNN Platform/DotNetNuke.Abstractions/ClientResources/IClientResourceController.cs index 4efb8a073d2..be4e689c141 100644 --- a/DNN Platform/DotNetNuke.Abstractions/ClientResources/IClientResourceController.cs +++ b/DNN Platform/DotNetNuke.Abstractions/ClientResources/IClientResourceController.cs @@ -27,20 +27,56 @@ public interface IClientResourceController /// /// Create a new font resource. /// + /// The source URL to set. /// An instance representing the created font resource. - IFontResource CreateFont(); + IFontResource CreateFont(string sourcePath); + + /// + /// Create a new font resource. + /// + /// The source URL to set. + /// The path alias to set. + /// An instance representing the created font resource. + IFontResource CreateFont(string sourcePath, string pathNameAlias); + + /// + /// Create a new font resource. + /// + /// The source URL to set. + /// The path alias to set. + /// The MIME type of the resource. + /// An instance representing the created font resource. + IFontResource CreateFont(string sourcePath, string pathNameAlias, string mimeType); /// /// Create a new script resource. /// + /// The source URL to set. /// An instance representing the created script resource. - IScriptResource CreateScript(); + IScriptResource CreateScript(string sourcePath); + + /// + /// Create a new script resource. + /// + /// The source URL to set. + /// The path alias to set. + /// An instance representing the created script resource. + IScriptResource CreateScript(string sourcePath, string pathNameAlias); + + /// + /// Creates a new stylesheet resource. + /// + /// The source URL to set. + /// An instance representing the created stylesheet resource. + IStylesheetResource CreateStylesheet(string sourcePath); /// /// Creates a new stylesheet resource. /// + /// The source URL to set. + /// The path alias to set. /// An instance representing the created stylesheet resource. - IStylesheetResource CreateStylesheet(); + IStylesheetResource CreateStylesheet(string sourcePath, string pathNameAlias); /// /// Registers a path name alias for resolving resource paths. diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourceController.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourceController.cs index 8d37ce9f14a..a193839dc09 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourceController.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ClientResourceController.cs @@ -59,21 +59,85 @@ public void AddStylesheet(IStylesheetResource stylesheet) } /// - public IFontResource CreateFont() + public IFontResource CreateFont(string sourcePath) { - return new Models.FontResource(this); + var font = new Models.FontResource(this); + font.FilePath = sourcePath; + + switch (font.FilePath?.Substring(font.FilePath.LastIndexOf('.')).ToLowerInvariant()) + { + case ".eot": + font.Type = "application/vnd.ms-fontobject"; + break; + case ".woff": + font.Type = "font/woff"; + break; + case ".woff2": + font.Type = "font/woff2"; + break; + case ".ttf": + font.Type = "font/ttf"; + break; + case ".svg": + font.Type = "image/svg+xml"; + break; + case ".otf": + font.Type = "font/otf"; + break; + default: + font.Type = "application/octet-stream"; + break; + } + + return font; + } + + /// + public IFontResource CreateFont(string sourcePath, string pathNameAlias) + { + var font = this.CreateFont(sourcePath); + font.PathNameAlias = pathNameAlias; + return font; + } + + /// + public IFontResource CreateFont(string sourcePath, string pathNameAlias, string mimeType) + { + var font = this.CreateFont(sourcePath, pathNameAlias); + font.Type = mimeType; + return font; + } + + /// + public IScriptResource CreateScript(string sourcePath) + { + var script = new Models.ScriptResource(this); + script.FilePath = sourcePath; + return script; + } + + /// + public IScriptResource CreateScript(string sourcePath, string pathNameAlias) + { + var script = this.CreateScript(sourcePath); + script.PathNameAlias = pathNameAlias; + return script; } /// - public IScriptResource CreateScript() + public IStylesheetResource CreateStylesheet(string sourcePath) { - return new Models.ScriptResource(this); + var stylesheet = new Models.StylesheetResource(this); + stylesheet.FilePath = sourcePath; + return stylesheet; } /// - public IStylesheetResource CreateStylesheet() + public IStylesheetResource CreateStylesheet(string sourcePath, string pathNameAlias) { - return new Models.StylesheetResource(this); + var stylesheet = this.CreateStylesheet(sourcePath); + stylesheet.PathNameAlias = pathNameAlias; + return stylesheet; } /// diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/FontResourceExtensions.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/FontResourceExtensions.cs deleted file mode 100644 index 7c641067202..00000000000 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/FontResourceExtensions.cs +++ /dev/null @@ -1,83 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. -// See the LICENSE file in the project root for more information - -namespace DotNetNuke.Web.Client.ResourceManager -{ - using System; - - using DotNetNuke.Abstractions.ClientResources; - - /// - /// Provides extension methods for to set various resource properties in a fluent manner. - /// - public static class FontResourceExtensions - { - /// - /// Sets the source URL of the resource. - /// - /// The resource to set the source URL for. - /// The source URL to set. - /// The resource with the source URL set. - /// The type of resource, which must implement . - public static T FromSrc(this T input, string sourcePath) - where T : IFontResource - { - if (input == null) - { - throw new ArgumentNullException(nameof(input)); - } - - input.FilePath = sourcePath; - switch (input.FilePath?.Substring(input.FilePath.LastIndexOf('.')).ToLowerInvariant()) - { - case ".eot": - input.Type = "application/vnd.ms-fontobject"; - break; - case ".woff": - input.Type = "font/woff"; - break; - case ".woff2": - input.Type = "font/woff2"; - break; - case ".ttf": - input.Type = "font/ttf"; - break; - case ".svg": - input.Type = "image/svg+xml"; - break; - case ".otf": - input.Type = "font/otf"; - break; - default: - input.Type = "application/octet-stream"; - break; - } - - return input; - } - - /// - /// Sets the source URL of the resource. - /// - /// The resource to set the source URL for. - /// The source URL to set. - /// The path alias to set. - /// The MIME type of the resource. - /// The resource with the source URL set. - /// The type of resource, which must implement . - public static T FromSrc(this T input, string sourcePath, string pathNameAlias, string mimeType) - where T : IFontResource - { - if (input == null) - { - throw new ArgumentNullException(nameof(input)); - } - - input.FilePath = sourcePath; - input.PathNameAlias = pathNameAlias; - input.Type = mimeType; - return input; - } - } -} diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ScriptResourceExtensions.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ScriptResourceExtensions.cs index 08216c347af..b14e3694dd3 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ScriptResourceExtensions.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/ScriptResourceExtensions.cs @@ -13,46 +13,6 @@ namespace DotNetNuke.Web.Client.ResourceManager /// public static class ScriptResourceExtensions { - /// - /// Sets the source URL of the resource. - /// - /// The resource to set the source URL for. - /// The source URL to set. - /// The resource with the source URL set. - /// The type of resource, which must implement . - public static T FromSrc(this T input, string sourcePath) - where T : IScriptResource - { - if (input == null) - { - throw new ArgumentNullException(nameof(input)); - } - - input.FilePath = sourcePath; - return input; - } - - /// - /// Sets the source URL and path alias of the resource. - /// - /// The resource to set the source URL and path alias for. - /// The source URL to set. - /// The path alias to set. - /// The resource with the source URL and path alias set. - /// The type of resource, which must implement . - public static T FromSrc(this T input, string sourcePath, string pathNameAlias) - where T : IScriptResource - { - if (input == null) - { - throw new ArgumentNullException(nameof(input)); - } - - input.FilePath = sourcePath; - input.PathNameAlias = pathNameAlias; - return input; - } - /// /// Sets the priority of the resource. /// diff --git a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/StylesheetResourceExtensions.cs b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/StylesheetResourceExtensions.cs index d997bfceab8..30c546cde25 100644 --- a/DNN Platform/DotNetNuke.Web.Client.ResourceManager/StylesheetResourceExtensions.cs +++ b/DNN Platform/DotNetNuke.Web.Client.ResourceManager/StylesheetResourceExtensions.cs @@ -13,46 +13,6 @@ namespace DotNetNuke.Web.Client.ResourceManager /// public static class StylesheetResourceExtensions { - /// - /// Sets the source URL of the resource. - /// - /// The resource to set the source URL for. - /// The source URL to set. - /// The resource with the source URL set. - /// The type of resource, which must implement . - public static T FromSrc(this T input, string sourcePath) - where T : IStylesheetResource - { - if (input == null) - { - throw new ArgumentNullException(nameof(input)); - } - - input.FilePath = sourcePath; - return input; - } - - /// - /// Sets the source URL and path alias of the resource. - /// - /// The resource to set the source URL and path alias for. - /// The source URL to set. - /// The path alias to set. - /// The resource with the source URL and path alias set. - /// The type of resource, which must implement . - public static T FromSrc(this T input, string sourcePath, string pathNameAlias) - where T : IStylesheetResource - { - if (input == null) - { - throw new ArgumentNullException(nameof(input)); - } - - input.FilePath = sourcePath; - input.PathNameAlias = pathNameAlias; - return input; - } - /// /// Sets the priority of the resource. /// diff --git a/DNN Platform/DotNetNuke.Web.Client/ClientResourceManager.cs b/DNN Platform/DotNetNuke.Web.Client/ClientResourceManager.cs index 3124546c479..cda741b2b30 100644 --- a/DNN Platform/DotNetNuke.Web.Client/ClientResourceManager.cs +++ b/DNN Platform/DotNetNuke.Web.Client/ClientResourceManager.cs @@ -360,8 +360,7 @@ public static void RegisterScript( IDictionary htmlAttributes) { var controller = GetClientResourcesController(page); - var script = controller.CreateScript() - .FromSrc(filePath) + var script = controller.CreateScript(filePath) .SetPriority(priority) .SetProvider(provider) .SetNameAndVersion(name, version, false); @@ -499,8 +498,7 @@ public static void RegisterStyleSheet(Page page, string filePath, int priority, } var controller = GetClientResourcesController(page); - var stylesheet = controller.CreateStylesheet() - .FromSrc(filePath) + var stylesheet = controller.CreateStylesheet(filePath) .SetPriority(priority) .SetProvider(provider) .SetNameAndVersion(name, version, false); diff --git a/DNN Platform/DotNetNuke.Web.Client/Controls/DnnCssInclude.cs b/DNN Platform/DotNetNuke.Web.Client/Controls/DnnCssInclude.cs index 0e71acbc5b0..7db67e08452 100644 --- a/DNN Platform/DotNetNuke.Web.Client/Controls/DnnCssInclude.cs +++ b/DNN Platform/DotNetNuke.Web.Client/Controls/DnnCssInclude.cs @@ -33,8 +33,7 @@ public DnnCssInclude(IClientResourceController clientResourceController) /// protected override void OnInit(EventArgs e) { - this.clientResourceController.CreateStylesheet() - .FromSrc(this.FilePath, this.PathNameAlias) + this.clientResourceController.CreateStylesheet(this.FilePath, this.PathNameAlias) .SetNameAndVersion(this.Name, this.Version, this.ForceVersion) .SetProvider(this.ForceProvider) .SetPriority(this.Priority) diff --git a/DNN Platform/DotNetNuke.Web.Client/Controls/DnnHtmlInclude.cs b/DNN Platform/DotNetNuke.Web.Client/Controls/DnnHtmlInclude.cs index 168b22f69f0..1d34c4c10e6 100644 --- a/DNN Platform/DotNetNuke.Web.Client/Controls/DnnHtmlInclude.cs +++ b/DNN Platform/DotNetNuke.Web.Client/Controls/DnnHtmlInclude.cs @@ -67,8 +67,7 @@ private void RegisterIncludes(IEnumerable files, ClientDependencyType switch (dependencyType) { case ClientDependencyType.Css: - var styleSheet = this.clientResourceController.CreateStylesheet() - .FromSrc(file.FilePath) + var styleSheet = this.clientResourceController.CreateStylesheet(file.FilePath) .SetProvider(file.ForceProvider) .SetPriority(file.Priority); foreach (var a in file.HtmlAttributes) @@ -79,8 +78,7 @@ private void RegisterIncludes(IEnumerable files, ClientDependencyType styleSheet.Register(); break; case ClientDependencyType.Javascript: - var script = this.clientResourceController.CreateScript() - .FromSrc(file.FilePath) + var script = this.clientResourceController.CreateScript(file.FilePath) .SetProvider(file.ForceProvider) .SetPriority(file.Priority); foreach (var a in file.HtmlAttributes) diff --git a/DNN Platform/DotNetNuke.Web.Client/Controls/DnnJsInclude.cs b/DNN Platform/DotNetNuke.Web.Client/Controls/DnnJsInclude.cs index dd45c91dcab..fe227bacf93 100644 --- a/DNN Platform/DotNetNuke.Web.Client/Controls/DnnJsInclude.cs +++ b/DNN Platform/DotNetNuke.Web.Client/Controls/DnnJsInclude.cs @@ -31,8 +31,7 @@ public DnnJsInclude(IClientResourceController clientResourceController) protected override void OnInit(EventArgs e) { - this.clientResourceController.CreateScript() - .FromSrc(this.FilePath, this.PathNameAlias) + this.clientResourceController.CreateScript(this.FilePath, this.PathNameAlias) .SetNameAndVersion(this.Name, this.Version, this.ForceVersion) .SetProvider(this.ForceProvider) .SetPriority(this.Priority) diff --git a/DNN Platform/DotNetNuke.WebUtility/ClientAPI.vb b/DNN Platform/DotNetNuke.WebUtility/ClientAPI.vb index 46ec0afcf18..c0bffefa3df 100644 --- a/DNN Platform/DotNetNuke.WebUtility/ClientAPI.vb +++ b/DNN Platform/DotNetNuke.WebUtility/ClientAPI.vb @@ -682,25 +682,25 @@ Namespace DotNetNuke.UI.Utilities RegisterClientReference(objPage, ClientNamespaceReferences.dnn) Case ClientNamespaceReferences.dnn_dom_positioning RegisterClientReference(objPage, ClientNamespaceReferences.dnn) - controller.CreateScript().FromSrc(ScriptPath & "dnn.dom.positioning.js").SetPriority(Abstractions.ClientResources.FileOrder.Js.DnnDomPositioning).Register() + controller.CreateScript(ScriptPath & "dnn.dom.positioning.js").SetPriority(Abstractions.ClientResources.FileOrder.Js.DnnDomPositioning).Register() Case ClientNamespaceReferences.dnn_xml RegisterClientReference(objPage, ClientNamespaceReferences.dnn) - controller.CreateScript().FromSrc(ScriptPath & "dnn.xml.js").SetPriority(Abstractions.ClientResources.FileOrder.Js.DnnXml).Register() + controller.CreateScript(ScriptPath & "dnn.xml.js").SetPriority(Abstractions.ClientResources.FileOrder.Js.DnnXml).Register() If BrowserSupportsFunctionality(ClientFunctionality.XMLJS) Then - controller.CreateScript().FromSrc(ScriptPath & "dnn.xml.jsparser.js").SetPriority(Abstractions.ClientResources.FileOrder.Js.DnnXmlJsParser).Register() + controller.CreateScript(ScriptPath & "dnn.xml.jsparser.js").SetPriority(Abstractions.ClientResources.FileOrder.Js.DnnXmlJsParser).Register() End If Case ClientNamespaceReferences.dnn_xmlhttp RegisterClientReference(objPage, ClientNamespaceReferences.dnn) - controller.CreateScript().FromSrc(ScriptPath & "dnn.xmlhttp.js").SetPriority(Abstractions.ClientResources.FileOrder.Js.DnnXmlHttp).Register() + controller.CreateScript(ScriptPath & "dnn.xmlhttp.js").SetPriority(Abstractions.ClientResources.FileOrder.Js.DnnXmlHttp).Register() If BrowserSupportsFunctionality(ClientFunctionality.XMLHTTPJS) Then - controller.CreateScript().FromSrc(ScriptPath & "dnn.xmlhttp.jsxmlhttprequest.js").SetPriority(Abstractions.ClientResources.FileOrder.Js.DnnXmlHttpJsXmlHttpRequest).Register() + controller.CreateScript(ScriptPath & "dnn.xmlhttp.jsxmlhttprequest.js").SetPriority(Abstractions.ClientResources.FileOrder.Js.DnnXmlHttpJsXmlHttpRequest).Register() End If Case ClientNamespaceReferences.dnn_motion RegisterClientReference(objPage, ClientNamespaceReferences.dnn_dom_positioning) - controller.CreateScript().FromSrc(ScriptPath & "dnn.motion.js").Register() + controller.CreateScript(ScriptPath & "dnn.motion.js").Register() End Select End Sub @@ -863,7 +863,7 @@ Namespace DotNetNuke.UI.Utilities RegisterClientReference(objPage, ClientNamespaceReferences.dnn_dom) Dim controller As IClientResourceController = GetClientResourcesController(objPage) - controller.CreateScript().FromSrc(ScriptPath & "dnn.util.tablereorder.js").Register() + controller.CreateScript(ScriptPath & "dnn.util.tablereorder.js").Register() AddAttribute(objButton, "onclick", "if (dnn.util.tableReorderMove(this," & CInt(blnUp) & ",'" & strKey & "')) return false;") Dim objParent As Control = objButton.Parent diff --git a/DNN Platform/Library/Framework/JavaScriptLibraries/JavaScript.cs b/DNN Platform/Library/Framework/JavaScriptLibraries/JavaScript.cs index d75394cdc70..77ece246675 100644 --- a/DNN Platform/Library/Framework/JavaScriptLibraries/JavaScript.cs +++ b/DNN Platform/Library/Framework/JavaScriptLibraries/JavaScript.cs @@ -441,8 +441,7 @@ private static void AddItemRequest(JavaScriptLibrary library, bool forceVersion) { HttpContextSource.Current.Items[ScriptPrefix + library.JavaScriptLibraryID] = true; var controller = GetClientResourcesController(); - controller.CreateScript() - .FromSrc(GetScriptPath(null, null, library.LibraryName)) + controller.CreateScript(GetScriptPath(null, null, library.LibraryName)) .SetNameAndVersion(library.LibraryName, library.Version.ToString(), forceVersion) .SetProvider(GetScriptLocation(library)) .SetPriority(GetFileOrder(library)) @@ -452,8 +451,7 @@ private static void AddItemRequest(JavaScriptLibrary library, bool forceVersion) { if (HttpContextSource.Current.Items[ScriptPrefix + dependency.JavaScriptLibraryID] == null) { - controller.CreateScript() - .FromSrc(GetScriptPath(null, null, dependency.LibraryName)) + controller.CreateScript(GetScriptPath(null, null, dependency.LibraryName)) .SetNameAndVersion(dependency.LibraryName, dependency.Version.ToString(), false) .SetProvider(GetScriptLocation(dependency)) .SetPriority(GetFileOrder(dependency)) diff --git a/DNN Platform/Library/Services/ClientDependency/Extensions.cs b/DNN Platform/Library/Services/ClientDependency/Extensions.cs index 41b75cd871a..8bd7fb370d4 100644 --- a/DNN Platform/Library/Services/ClientDependency/Extensions.cs +++ b/DNN Platform/Library/Services/ClientDependency/Extensions.cs @@ -38,7 +38,7 @@ public static void RegisterFont(this IClientResourceController controller, strin } } - controller.CreateFont().FromSrc(fontPath).Register(); + controller.CreateFont(fontPath).Register(); } /// @@ -68,7 +68,7 @@ public static void RegisterScript(this IClientResourceController controller, str } } - controller.CreateScript().FromSrc(scriptPath).Register(); + controller.CreateScript(scriptPath).Register(); } /// @@ -99,8 +99,7 @@ public static void RegisterScript(this IClientResourceController controller, str } } - controller.CreateScript() - .FromSrc(scriptPath) + controller.CreateScript(scriptPath) .SetPriority(priority) .Register(); } @@ -132,7 +131,7 @@ public static void RegisterStylesheet(this IClientResourceController controller, } } - controller.CreateStylesheet().FromSrc(stylesheetPath).Register(); + controller.CreateStylesheet(stylesheetPath).Register(); } /// @@ -163,8 +162,7 @@ public static void RegisterStylesheet(this IClientResourceController controller, } } - controller.CreateStylesheet() - .FromSrc(stylesheetPath) + controller.CreateStylesheet(stylesheetPath) .SetPriority(priority) .Register(); } diff --git a/DNN Platform/Website/Default.aspx.cs b/DNN Platform/Website/Default.aspx.cs index b57e2f2b3a2..cbaa9f4c37a 100644 --- a/DNN Platform/Website/Default.aspx.cs +++ b/DNN Platform/Website/Default.aspx.cs @@ -295,8 +295,7 @@ protected override void OnInit(EventArgs e) } // add CSS links - this.clientResourceController.CreateStylesheet() - .FromSrc("~/Resources/Shared/stylesheets/dnndefault/10.0.0/default.css") + this.clientResourceController.CreateStylesheet("~/Resources/Shared/stylesheets/dnndefault/10.0.0/default.css") .SetNameAndVersion("dnndefault", "10.0.0", false) .SetPriority(FileOrder.Css.DefaultCss) .Register(); diff --git a/DNN Platform/Website/admin/Skins/Search.ascx.cs b/DNN Platform/Website/admin/Skins/Search.ascx.cs index e4598a9963d..bbc47b6a65b 100644 --- a/DNN Platform/Website/admin/Skins/Search.ascx.cs +++ b/DNN Platform/Website/admin/Skins/Search.ascx.cs @@ -466,7 +466,7 @@ protected override void OnPreRender(EventArgs e) } JavaScript.RegisterClientReference(this.Page, ClientAPI.ClientNamespaceReferences.dnn); - this.clientResourceController.CreateScript().FromSrc("~/Resources/Search/Search.js").SetPriority(FileOrder.Js.DefaultPriority).SetProvider(ClientResourceProviders.DnnFormBottomProvider).Register(); + this.clientResourceController.CreateScript("~/Resources/Search/Search.js").SetPriority(FileOrder.Js.DefaultPriority).SetProvider(ClientResourceProviders.DnnFormBottomProvider).Register(); this.txtSearchNew.Attributes.Add("autocomplete", "off"); this.txtSearchNew.Attributes.Add("placeholder", this.PlaceHolderText); From c86ff07ab58576089e1b6a82b9f21bb56ef6fef5 Mon Sep 17 00:00:00 2001 From: Brian Dukes Date: Thu, 20 Nov 2025 13:19:19 -0600 Subject: [PATCH 162/199] Use SVGR for Dnn.React.Common icons --- .../LogSettings/LogSettingRow/index.jsx | 3 +- .../src/components/LogSettings/index.jsx | 2 +- .../src/components/BackTo/BackTo.jsx | 2 +- .../Dnn.React.Common/dist.webpack.config.js | 2 +- .../ClientSide/Dnn.React.Common/package.json | 1 + .../Dnn.React.Common/src/BackToLink/index.jsx | 2 +- .../contentloadwrapper.stories.js | 6 +- .../src/ContentLoadWrapper/index.jsx | 2 +- .../Dnn.React.Common/src/DatePicker/index.jsx | 11 +- .../Dnn.React.Common/src/Dropdown/index.jsx | 3 +- .../src/EditableField/index.jsx | 2 +- .../src/FileUpload/Browse/FilePicker.jsx | 10 +- .../src/FileUpload/Browse/FolderPicker.jsx | 4 +- .../src/FileUpload/Browse/Folders.jsx | 4 +- .../src/FileUpload/UploadBar.jsx | 12 +- .../Dnn.React.Common/src/FileUpload/index.jsx | 10 +- .../src/FolderPicker/FolderSelector.jsx | 7 +- .../src/FolderPicker/Folders.jsx | 7 +- .../Dnn.React.Common/src/IconButton/index.jsx | 8 +- .../Dnn.React.Common/src/Modal/index.jsx | 6 +- .../Dnn.React.Common/src/PagePicker/index.jsx | 10 +- .../Dnn.React.Common/src/Pager/index.jsx | 4 +- .../Dnn.React.Common/src/SvgIcons/index.jsx | 165 +++--- .../src/SvgIcons/svgicons.stories.js | 164 +++--- .../icons/arrow-icon/_arrow_icon.jsx | 8 +- .../common/ExtensionDetailRow/index.jsx | 4 +- .../Module/AssignedSelector/index.jsx | 8 +- .../Controls/ControlRow.jsx | 4 +- .../ModuleDefinitionRow/Controls/index.jsx | 2 +- .../ModuleDefinitionRow/index.jsx | 4 +- .../Module/ModuleDefinitions/index.jsx | 2 +- .../FileUpload/AlreadyInstalled.jsx | 2 +- .../Modules/ModuleRow/ModuleRow.jsx | 6 +- .../src/components/Modules/Modules.jsx | 2 +- .../components/PageLocalization/Module.jsx | 6 +- .../PageLocalization/PageLanguage.jsx | 14 +- .../components/SearchPage/SearchAdvanced.jsx | 2 +- .../components/SearchPage/SearchPageInput.jsx | 8 +- .../SearchPage/SearchResultCard.jsx | 6 +- .../src/components/Seo/PageUrls/Table.jsx | 4 +- .../src/components/Seo/PageUrls/UrlRow.jsx | 4 +- .../src/_PersonaBarDraftPencilIcon.jsx | 2 +- .../src/_PersonaBarExpandCollapseIcon.jsx | 2 +- .../src/_PersonaBarPageIcon.jsx | 10 +- .../src/_PersonaBarSelectionArrow.jsx | 4 +- .../src/_PersonaBarTreeInContextMenu.jsx | 3 +- .../roles/UsersInRole/UserRow/index.jsx | 4 +- .../src/components/auditCheck/index.jsx | 2 +- .../src/components/ipFilters/index.jsx | 2 +- .../providerRow/index.jsx | 2 +- .../sitemapSettings/providerRow/index.jsx | 4 +- .../Tabs/Servers/ServerRow/index.jsx | 6 +- .../src/components/common/WarningBlock.jsx | 2 +- .../src/components/AssignedSelector.jsx | 12 +- .../components/Dashboard/JobDetails/index.jsx | 8 +- .../src/components/Dashboard/JobRow/index.jsx | 4 +- .../components/ImportModal/PackagesList.jsx | 2 +- .../components/editLanguagePanel/folder.jsx | 4 +- .../resourceEditor/index.jsx | 6 +- .../editLanguagePanel/resourceTree.jsx | 2 +- .../ignoreWords/ignoreWordsRow/index.jsx | 4 +- .../src/components/ignoreWords/index.jsx | 2 +- .../languageVerifierRow/index.jsx | 2 +- .../languageSettings/languages/index.jsx | 2 +- .../languages/languageRow/index.jsx | 18 +- .../src/components/messageBox/index.jsx | 4 +- .../profileProperties/index.jsx | 2 +- .../listEntries/index.jsx | 2 +- .../listEntries/listEntryRow/index.jsx | 8 +- .../profilePropertyRow/index.jsx | 8 +- .../siteAliasSettings/siteAliases/index.jsx | 2 +- .../siteAliases/siteAliasRow/index.jsx | 6 +- .../src/components/synonymsGroups/index.jsx | 2 +- .../synonymsGroups/synonymsGroupRow/index.jsx | 4 +- .../src/Components/ListView/index.jsx | 3 +- .../src/components/scheduler/index.jsx | 2 +- .../scheduler/schedulerRow/index.jsx | 3 +- .../components/UserTable/DetailRow/index.jsx | 16 +- .../UserTable/UsersRoles/RoleRow/index.jsx | 2 +- .../components/UserTable/UsersRoles/index.jsx | 2 +- .../VocabularyList/RightPane/Term/index.jsx | 6 +- .../VocabularyList/RightPane/index.jsx | 2 +- yarn.lock | 480 +++++++++++++++++- 83 files changed, 823 insertions(+), 373 deletions(-) diff --git a/Dnn.AdminExperience/ClientSide/AdminLogs.Web/src/components/LogSettings/LogSettingRow/index.jsx b/Dnn.AdminExperience/ClientSide/AdminLogs.Web/src/components/LogSettings/LogSettingRow/index.jsx index 05bfea54325..59b89239ca0 100644 --- a/Dnn.AdminExperience/ClientSide/AdminLogs.Web/src/components/LogSettings/LogSettingRow/index.jsx +++ b/Dnn.AdminExperience/ClientSide/AdminLogs.Web/src/components/LogSettings/LogSettingRow/index.jsx @@ -68,7 +68,8 @@ class LogSettingRow extends Component { {props.fileName}  {!props.readOnly && -
+
+
} diff --git a/Dnn.AdminExperience/ClientSide/AdminLogs.Web/src/components/LogSettings/index.jsx b/Dnn.AdminExperience/ClientSide/AdminLogs.Web/src/components/LogSettings/index.jsx index ed109451fb3..54b9c7b9bdb 100644 --- a/Dnn.AdminExperience/ClientSide/AdminLogs.Web/src/components/LogSettings/index.jsx +++ b/Dnn.AdminExperience/ClientSide/AdminLogs.Web/src/components/LogSettings/index.jsx @@ -122,7 +122,7 @@ class LogSettingsPanel extends Component { {canEdit &&
-
+
{Localization.get("AddContent.Action") }
diff --git a/Dnn.AdminExperience/ClientSide/Bundle.Web/src/components/BackTo/BackTo.jsx b/Dnn.AdminExperience/ClientSide/Bundle.Web/src/components/BackTo/BackTo.jsx index 3287ff607eb..7d0a9a1fdcf 100644 --- a/Dnn.AdminExperience/ClientSide/Bundle.Web/src/components/BackTo/BackTo.jsx +++ b/Dnn.AdminExperience/ClientSide/Bundle.Web/src/components/BackTo/BackTo.jsx @@ -9,7 +9,7 @@ const BackToMain = ({onClick, label}) => {
-
+
{label}
); diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/dist.webpack.config.js b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/dist.webpack.config.js index 8cd892f471c..7bb76745927 100644 --- a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/dist.webpack.config.js +++ b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/dist.webpack.config.js @@ -41,7 +41,7 @@ module.exports = { { test: /\.(ttf|woff)$/, use: ["url-loader?limit=8192"] }, { test: /\.css$/, use: ["style-loader!css-loader"] }, { test: /\.(gif|png)$/, use: ["url-loader?mimetype=image/png"] }, - { test: /\.(svg)$/, use: ["raw-loader"] }, + { test: /\.(svg)$/, issuer: /\.[jt]sx?$/, use: ["@svgr/webpack"], }, { test: /\.woff(2)?(\?v=[0-9].[0-9].[0-9])?$/, use: ["url-loader?mimetype=application/font-woff"] }, { test: /\.(ttf|eot)(\?v=[0-9].[0-9].[0-9])?$/, use: ["file-loader?name=[name].[ext]"] } ] diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/package.json b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/package.json index 128770aa55b..5587ee7d929 100644 --- a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/package.json +++ b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/package.json @@ -57,6 +57,7 @@ "@storybook/addon-onboarding": "9.1.13", "@storybook/addon-webpack5-compiler-swc": "4.0.1", "@storybook/react-webpack5": "9.1.13", + "@svgr/webpack": "^8.1.0", "babel-eslint": "^10.1.0", "babel-loader": "^10.0.0", "babel-plugin-transform-react-remove-prop-types": "0.4.24", diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/BackToLink/index.jsx b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/BackToLink/index.jsx index 8b22c12041d..170456c1c3d 100644 --- a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/BackToLink/index.jsx +++ b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/BackToLink/index.jsx @@ -7,7 +7,7 @@ import "./style.less"; const BackToLink = ({text, children, className, onClick, style, arrowStyle}) => { return ( -
+
{text} {children}
diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/ContentLoadWrapper/contentloadwrapper.stories.js b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/ContentLoadWrapper/contentloadwrapper.stories.js index f39e4857e96..e8932e2ca09 100644 --- a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/ContentLoadWrapper/contentloadwrapper.stories.js +++ b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/ContentLoadWrapper/contentloadwrapper.stories.js @@ -18,7 +18,7 @@ class MyContentLoadWrapper extends Component { return ( } + svgSkeleton={
} >
@@ -41,7 +41,7 @@ export default { export const WithLoading = () => ( } + svgSkeleton={
} >
Loading...
@@ -60,7 +60,7 @@ export const WithLoading = () => ( export const WithContent = () => ( } + svgSkeleton={
} >
diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/ContentLoadWrapper/index.jsx b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/ContentLoadWrapper/index.jsx index 0061ff2b6d1..61fa8accfaa 100644 --- a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/ContentLoadWrapper/index.jsx +++ b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/ContentLoadWrapper/index.jsx @@ -93,7 +93,7 @@ export default class ContentLoadWrapper extends Component { {this.props.loadError &&
-
+
ErrorStateIcon

{this.props.failedToLoadText}

[{this.props.tryAgainText}]
diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/DatePicker/index.jsx b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/DatePicker/index.jsx index 62a018f9903..60cf0b6069d 100644 --- a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/DatePicker/index.jsx +++ b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/DatePicker/index.jsx @@ -6,6 +6,9 @@ import TimePicker from "./TimePicker"; import TimezonePicker from "./TimezonePicker"; import timeZones from "./timeZones"; import DateInput from "./DateInput"; +import CalendarIcon from "./img/calendar.svg"; +import CalendarEndIcon from "./img/calendar_end.svg"; +import CalendarStartIcon from "./img/calendar_start.svg"; import "./style.less"; const DefaultControllerClassName = "calendar-controller"; @@ -352,10 +355,9 @@ class DatePicker extends Component { const showIcon = this.props.showIcon !== false; const showInput = this.props.showInput !== false; - const mode = this.props.mode ? "_" + this.props.mode : ""; - let icon = require(`./img/calendar${mode}.svg`).default; + let Icon = this.props.mode === "start" ? CalendarStartIcon : this.props.mode === "end" ? CalendarEndIcon : CalendarIcon; if (this.props.icon) { - icon = this.props.icon; + Icon = this.props.icon; } const style = this.props.isDateRange && this.props.hasTimePicker ? {width: 380} : {}; @@ -380,9 +382,8 @@ class DatePicker extends Component {
}
} {showIcon &&
+ onClick={this.toggleCalendar.bind(this) }>
}
this.calendarContainer = element}>
diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Dropdown/index.jsx b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Dropdown/index.jsx index 7d5f9f934d8..d8bf64f67b0 100644 --- a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Dropdown/index.jsx +++ b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Dropdown/index.jsx @@ -309,8 +309,7 @@ class Dropdown extends Component { }} aria-label="Search" /> - {props.withIcon &&
} + {props.withIcon &&
}
diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/EditableField/index.jsx b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/EditableField/index.jsx index 0a36f6de8be..d28e0449fff 100644 --- a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/EditableField/index.jsx +++ b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/EditableField/index.jsx @@ -137,7 +137,7 @@ class EditableField extends Component { getEditButton() { - return
; + return
; } getUrl(text) { diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/FileUpload/Browse/FilePicker.jsx b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/FileUpload/Browse/FilePicker.jsx index 28437cde1b9..e3059d1d269 100644 --- a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/FileUpload/Browse/FilePicker.jsx +++ b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/FileUpload/Browse/FilePicker.jsx @@ -1,7 +1,7 @@ import React, { Component } from "react"; import PropTypes from "prop-types"; -const searchIcon = require("!raw-loader!./img/search.svg").default; -const fileIcon = require("!raw-loader!./img/pages.svg").default; +import SearchIcon from "./img/search.svg"; +import FileIcon from "./img/pages.svg"; import { Scrollbars } from "react-custom-scrollbars"; export default class FilePicker extends Component { @@ -73,7 +73,7 @@ export default class FilePicker extends Component { if (isMatchSearch) { return
  • -
    +
    {child.data.value}
  • ; } @@ -91,7 +91,7 @@ export default class FilePicker extends Component { }); return
    • -
      +
      {this.props.notSpecifiedText}
    • {files} @@ -114,7 +114,7 @@ export default class FilePicker extends Component {
      {this.state.searchFileText &&
      ×
      } -
      +
      {this.state.searchFolderText &&
      ×
      } -
      +
      {child.data.hasChildren &&
      }
      -
      +
      {child.data.value}
      {child.data.hasChildren && this.getFolders(child) } diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/FileUpload/UploadBar.jsx b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/FileUpload/UploadBar.jsx index a653484a570..929c616990c 100644 --- a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/FileUpload/UploadBar.jsx +++ b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/FileUpload/UploadBar.jsx @@ -1,9 +1,9 @@ import React, { Component } from "react"; import PropTypes from "prop-types"; -const upload = require("!raw-loader!./img/upload.svg").default; -const checkmark = require("!raw-loader!./img/checkmark.svg").default; -const errorIcon = require("!raw-loader!./img/x.svg").default; +import Upload from "./img/upload.svg"; +import Checkmark from "./img/checkmark.svg"; +import ErrorIcon from "./img/x.svg"; export default class UploadBar extends Component { constructor() { @@ -44,14 +44,14 @@ export default class UploadBar extends Component { let percent = this.props.errorText ? 0 : this.state.percent; let text = this.props.uploadComplete ? this.props.uploadCompleteText : this.props.uploadingText; text = this.props.errorText ? this.props.errorText : text; - let svg = this.props.uploadComplete ? checkmark : upload; - svg = this.props.errorText ? errorIcon : svg; + let Svg = this.props.uploadComplete ? Checkmark : Upload; + Svg = this.props.errorText ? ErrorIcon : Svg; const className = "file-upload-container dnn-upload-bar" + (!this.props.errorText && this.props.uploadComplete ? " complete" : "") + (this.props.errorText ? " upload-error" : ""); return
      {this.props.fileName || this.props.uploadDefaultText}
      -
      +

      {text}

      {percent + "%"}
      diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/FileUpload/index.jsx b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/FileUpload/index.jsx index 23e4335256b..d56a963473d 100644 --- a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/FileUpload/index.jsx +++ b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/FileUpload/index.jsx @@ -2,12 +2,14 @@ import React, { Component } from "react"; import PropTypes from "prop-types"; import Browse from "./Browse"; import UploadBar from "./UploadBar"; +import BrowseIcon from "./img/browse.svg"; +import UploadIcon from "./img/upload.svg"; import "./style.less"; const Buttons = [ - { name: "browse" }, - { name: "upload" } + { name: "browse", icon: BrowseIcon, }, + { name: "upload", icon: UploadIcon }, ]; export default class FileUpload extends Component { @@ -319,7 +321,7 @@ export default class FileUpload extends Component { } buttons = buttons.map((button) => { - const svg = require(`!raw-loader!./img/${button.name}.svg`).default; + const ButtonIcon = button.icon; const isUpload = button.name === "upload"; const accept = props.fileFormats.join(","); @@ -329,7 +331,7 @@ export default class FileUpload extends Component { onMouseLeave={this.onMouseLeave.bind(this) } onClick={this.onButtonClick.bind(this, button.name) } key={button.name}> -
      +
      {isUpload && accept && } {isUpload && !accept && }
      ; diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/FolderPicker/FolderSelector.jsx b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/FolderPicker/FolderSelector.jsx index 0fc256fc4d5..08d89a98d2b 100644 --- a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/FolderPicker/FolderSelector.jsx +++ b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/FolderPicker/FolderSelector.jsx @@ -2,10 +2,9 @@ import React, { Component } from "react"; import PropTypes from "prop-types"; import Folders from "./Folders"; import { Scrollbars } from "react-custom-scrollbars"; +import SearchIconImage from "./img/search.svg"; import "./style.less"; -const searchIconImage = require("!raw-loader!./img/search.svg").default; - export default class FolderSelector extends Component { constructor() { @@ -64,9 +63,7 @@ export default class FolderSelector extends Component { } getSearchIcon() { - - return (
      ); - + return
      ; } render() { diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/FolderPicker/Folders.jsx b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/FolderPicker/Folders.jsx index 0c114c17022..7d50faff47f 100644 --- a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/FolderPicker/Folders.jsx +++ b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/FolderPicker/Folders.jsx @@ -1,9 +1,8 @@ import React, { Component } from "react"; import PropTypes from "prop-types"; +import FolderIcon from "./img/folder.svg"; import "./style.less"; -const folderIcon = require("!raw-loader!./img/folder.svg").default; - export default class Folders extends Component { constructor() { @@ -54,9 +53,7 @@ export default class Folders extends Component { } getFolderIcon() { - - return (
      ); - + return (
      ); } getFolders(folder) { diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/IconButton/index.jsx b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/IconButton/index.jsx index be235af5ac7..81a2cdc35cb 100644 --- a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/IconButton/index.jsx +++ b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/IconButton/index.jsx @@ -1,6 +1,7 @@ import React, { Component } from "react"; import PropTypes from "prop-types"; -import { AddIcon, +import { + AddIcon, EditIcon, CardViewIcon, ListViewIcon, @@ -114,11 +115,12 @@ export default class IconButton extends Component { render() { const {props} = this; + const Icon = this.getIcon(); if (typeof props.onClick === "function") { - return ; + return ; } else { - return ; + return ; } } } diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Modal/index.jsx b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Modal/index.jsx index 3dffcd6ddaa..4b6f22fd8af 100644 --- a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Modal/index.jsx +++ b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Modal/index.jsx @@ -64,10 +64,8 @@ class Modal extends Component {

      {props.header}

      {props.headerChildren} -
      +
      +
      } diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/PagePicker/index.jsx b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/PagePicker/index.jsx index 48ca2a1bd21..fceefac4d9e 100644 --- a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/PagePicker/index.jsx +++ b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/PagePicker/index.jsx @@ -300,13 +300,13 @@ class PagePicker extends Component { const parentNotSelectable = isCurrentOrDescendant ? isCurrentOrDescendant : this.props.currentTabId === parseInt(page.TabId); return
    • - {(!page.IsOpen && page.HasChildren) &&
      } - {(page.IsOpen && page.HasChildren) &&
      } + {(!page.IsOpen && page.HasChildren) &&
      } + {(page.IsOpen && page.HasChildren) &&
      }
      { props.ShowIcon && -
      +
      } - {props.IsMultiSelect &&
      } + {props.IsMultiSelect &&
      }
      {page.Name}
      {page.ChildTabs !== null && page.ChildTabs.length > 0 && @@ -583,7 +583,7 @@ class PagePicker extends Component {
    • } {props.IsInDropDown && props.withIcon && -
      +
      } {props.IsInDropDown &&
      diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Pager/index.jsx b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Pager/index.jsx index 1665f903279..be876af3994 100644 --- a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Pager/index.jsx +++ b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Pager/index.jsx @@ -231,11 +231,11 @@ class Pager extends Component { renderIcon(OnClick, Type, Disabled) { if (!Disabled) { return
    • - +
    • ; } else { return
    • - +
    • ; } } diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/SvgIcons/index.jsx b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/SvgIcons/index.jsx index c6dc3668ece..b0092b2c7ca 100644 --- a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/SvgIcons/index.jsx +++ b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/SvgIcons/index.jsx @@ -1,86 +1,85 @@ - -const ActivityIcon = require("./svg/activity.svg").default; -const AddIcon = require("./svg/add.svg").default; -const AddCircleIcon = require("./svg/add_circle.svg").default; -const EditIcon = require("./svg/edit.svg").default; -const CardViewIcon = require("./svg/card_view.svg").default; -const ListViewIcon = require("./svg/list_view.svg").default; -const PreviewIcon = require("./svg/preview.svg").default; -const SettingsIcon = require("./svg/gear.svg").default; -const PageIcon = require("./svg/page.svg").default; -const TrafficIcon = require("./svg/traffic.svg").default; -const TemplateIcon = require("./svg/site_template.svg").default; -const TrashIcon = require("./svg/trash.svg").default; -const UserIcon = require("./svg/user.svg").default; -const UsersIcon = require("./svg/users.svg").default; -const ArrowDownIcon = require("./svg/arrow_down.svg").default; -const ArrowRightIcon = require("./svg/arrow_right.svg").default; -const ArrowUpIcon = require("./svg/arrow_up.svg").default; -const ArrowLeftIcon = require("./svg/arrow_left.svg").default; -const DoubleArrowRightIcon = require("./svg/double_arrow_right.svg").default; -const DoubleArrowLeftIcon = require("./svg/double_arrow_left.svg").default; -const ArrowEndLeftIcon = require("./svg/arrow-end_left.svg").default; -const ArrowEndRightIcon = require("./svg/arrow-end_right.svg").default; -const CheckboxCheckedIcon = require("./svg/small_checkbox_checked.svg").default; -const CheckboxPartialCheckedIcon = require("./svg/small_checkbox_partial_checked.svg").default; -const CheckboxUncheckedIcon = require("./svg/small_checkbox_unchecked.svg").default; -const CalendarIcon = require("./svg/calendar.svg").default; -const CalendarEndIcon = require("./svg/calendar_end.svg").default; -const CalendarStartIcon = require("./svg/calendar_start.svg").default; -const CheckboxIcon = require("./svg/checkbox.svg").default; -const CheckMarkIcon = require("./svg/checkmark.svg").default; -const ClockStopIcon = require("./svg/clock_stop.svg").default; -const CrossOutIcon = require("./svg/cross_out.svg").default; -const CycleIcon = require("./svg/cycle.svg").default; -const DragRowIcon = require("./svg/drag_row.svg").default; -const ErrorStateIcon = require("./svg/error_state.svg").default; -const EyeIcon = require("./svg/eye.svg").default; -const FolderIcon = require("./svg/folder.svg").default; -const GlobalIcon = require("./svg/global.svg").default; -const HistoryIcon = require("./svg/history.svg").default; -const LanguagesIcon = require("./svg/languages.svg").default; -const LanguagesPageIcon = require("./svg/languages_page.svg").default; -const LinkIcon = require("./svg/link.svg").default; -const LockClosedIcon = require("./svg/lock_closed.svg").default; -const MoreMenuIcon = require("./svg/more.svg").default; -const SiteGroupNoData = require("./svg/site_group_nodata.svg").default; -const PagesIcon = require("./svg/pages.svg").default; -const SearchFileSystemIcon = require("./svg/search_filesystem.svg").default; -const SearchIcon = require("./svg/search.svg").default; -const ShieldIcon = require("./svg/shield.svg").default; -const Signature = require("./svg/signature-solid.svg").default; -const SiteGroupIcon = require("./svg/site_group.svg").default; -const Steps1Icon = require("./svg/steps1.svg").default; -const Steps2Icon = require("./svg/steps2.svg").default; -const Steps3Icon = require("./svg/steps3.svg").default; -const ToolTipIcon = require("./svg/tool_tip.svg").default; -const UploadIcon = require("./svg/upload.svg").default; -const UploadCircleIcon = require("./svg/upload_circle.svg").default; -const UserSlash = require("./svg/user-slash-solid.svg").default; -const XIcon = require("./svg/x.svg").default; -const XThinIcon = require("./svg/x_thin.svg").default; -const ModuleIcon = require("./svg/module.svg").default; -const ArrowMoveUpIcon = require("./svg/arrow_moveup.svg").default; -const ArrowMoveDownIcon = require("./svg/arrow_movedown.svg").default; -const TableEmptyState = require("./svg/table_empty.svg").default; -const ArrowBack = require("./svg/arrow_back.svg").default; -const ArrowForward = require("./svg/arrow_forward.svg").default; -const DownloadIcon = require("./svg/download.svg").default; -const ImageIcon = require("./svg/image.svg").default; -const HourglassIcon = require("./svg/hourglass.svg").default; -const CollapseTree = require("./svg/collapse_tree.svg").default; -const ExpandTree = require("./svg/expand_tree.svg").default; -const TreeLinkIcon = require("./svg/tree_link.svg").default; -const TreeDraftIcon = require("./svg/draft.svg").default; -const TreeMoreIcon = require("./svg/tree_more.svg").default; -const TreePaperClip = require("./svg/paperclip.svg").default; -const TreeAddPage = require("./svg/tree_add_page.svg").default; -const TreeEye = require("./svg/tree_eye.svg").default; -const TreeEdit = require("./svg/tree_edit.svg").default; -const TreeCopy = require("./svg/tree_copy.svg").default; -const TreeAnalytics = require("./svg/tree_analytics.svg").default; -const PagesSearchIcon = require("./svg/pages_search.svg").default; -const PagesVerticalMore = require("./svg/pages_more_vertical.svg").default; +import ActivityIcon from "./svg/activity.svg"; +import AddIcon from "./svg/add.svg"; +import AddCircleIcon from "./svg/add_circle.svg"; +import EditIcon from "./svg/edit.svg"; +import CardViewIcon from "./svg/card_view.svg"; +import ListViewIcon from "./svg/list_view.svg"; +import PreviewIcon from "./svg/preview.svg"; +import SettingsIcon from "./svg/gear.svg"; +import PageIcon from "./svg/page.svg"; +import TrafficIcon from "./svg/traffic.svg"; +import TemplateIcon from "./svg/site_template.svg"; +import TrashIcon from "./svg/trash.svg"; +import UserIcon from "./svg/user.svg"; +import UsersIcon from "./svg/users.svg"; +import ArrowDownIcon from "./svg/arrow_down.svg"; +import ArrowRightIcon from "./svg/arrow_right.svg"; +import ArrowUpIcon from "./svg/arrow_up.svg"; +import ArrowLeftIcon from "./svg/arrow_left.svg"; +import DoubleArrowRightIcon from "./svg/double_arrow_right.svg"; +import DoubleArrowLeftIcon from "./svg/double_arrow_left.svg"; +import ArrowEndLeftIcon from "./svg/arrow-end_left.svg"; +import ArrowEndRightIcon from "./svg/arrow-end_right.svg"; +import CheckboxCheckedIcon from "./svg/small_checkbox_checked.svg"; +import CheckboxPartialCheckedIcon from "./svg/small_checkbox_partial_checked.svg"; +import CheckboxUncheckedIcon from "./svg/small_checkbox_unchecked.svg"; +import CalendarIcon from "./svg/calendar.svg"; +import CalendarEndIcon from "./svg/calendar_end.svg"; +import CalendarStartIcon from "./svg/calendar_start.svg"; +import CheckboxIcon from "./svg/checkbox.svg"; +import CheckMarkIcon from "./svg/checkmark.svg"; +import ClockStopIcon from "./svg/clock_stop.svg"; +import CrossOutIcon from "./svg/cross_out.svg"; +import CycleIcon from "./svg/cycle.svg"; +import DragRowIcon from "./svg/drag_row.svg"; +import ErrorStateIcon from "./svg/error_state.svg"; +import EyeIcon from "./svg/eye.svg"; +import FolderIcon from "./svg/folder.svg"; +import GlobalIcon from "./svg/global.svg"; +import HistoryIcon from "./svg/history.svg"; +import LanguagesIcon from "./svg/languages.svg"; +import LanguagesPageIcon from "./svg/languages_page.svg"; +import LinkIcon from "./svg/link.svg"; +import LockClosedIcon from "./svg/lock_closed.svg"; +import MoreMenuIcon from "./svg/more.svg"; +import SiteGroupNoData from "./svg/site_group_nodata.svg"; +import PagesIcon from "./svg/pages.svg"; +import SearchFileSystemIcon from "./svg/search_filesystem.svg"; +import SearchIcon from "./svg/search.svg"; +import ShieldIcon from "./svg/shield.svg"; +import Signature from "./svg/signature-solid.svg"; +import SiteGroupIcon from "./svg/site_group.svg"; +import Steps1Icon from "./svg/steps1.svg"; +import Steps2Icon from "./svg/steps2.svg"; +import Steps3Icon from "./svg/steps3.svg"; +import ToolTipIcon from "./svg/tool_tip.svg"; +import UploadIcon from "./svg/upload.svg"; +import UploadCircleIcon from "./svg/upload_circle.svg"; +import UserSlash from "./svg/user-slash-solid.svg"; +import XIcon from "./svg/x.svg"; +import XThinIcon from "./svg/x_thin.svg"; +import ModuleIcon from "./svg/module.svg"; +import ArrowMoveUpIcon from "./svg/arrow_moveup.svg"; +import ArrowMoveDownIcon from "./svg/arrow_movedown.svg"; +import TableEmptyState from "./svg/table_empty.svg"; +import ArrowBack from "./svg/arrow_back.svg"; +import ArrowForward from "./svg/arrow_forward.svg"; +import DownloadIcon from "./svg/download.svg"; +import ImageIcon from "./svg/image.svg"; +import HourglassIcon from "./svg/hourglass.svg"; +import CollapseTree from "./svg/collapse_tree.svg"; +import ExpandTree from "./svg/expand_tree.svg"; +import TreeLinkIcon from "./svg/tree_link.svg"; +import TreeDraftIcon from "./svg/draft.svg"; +import TreeMoreIcon from "./svg/tree_more.svg"; +import TreePaperClip from "./svg/paperclip.svg"; +import TreeAddPage from "./svg/tree_add_page.svg"; +import TreeEye from "./svg/tree_eye.svg"; +import TreeEdit from "./svg/tree_edit.svg"; +import TreeCopy from "./svg/tree_copy.svg"; +import TreeAnalytics from "./svg/tree_analytics.svg"; +import PagesSearchIcon from "./svg/pages_search.svg"; +import PagesVerticalMore from "./svg/pages_more_vertical.svg"; export { ActivityIcon, AddIcon, diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/SvgIcons/svgicons.stories.js b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/SvgIcons/svgicons.stories.js index c75dd3ca5c5..432f4812214 100644 --- a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/SvgIcons/svgicons.stories.js +++ b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/SvgIcons/svgicons.stories.js @@ -7,87 +7,87 @@ export default { export const WithContent = () => (
      -
      ActivityIcon
      -
      AddIcon
      -
      AddCircleIcon
      -
      EditIcon
      -
      CardViewIcon
      -
      ListViewIcon
      -
      PreviewIcon
      -
      SettingsIcon
      -
      PageIcon
      -
      TrafficIcon
      -
      TemplateIcon
      -
      TrashIcon
      -
      UserIcon
      -
      UsersIcon
      -
      ArrowDownIcon
      -
      ArrowRightIcon
      -
      ArrowUpIcon
      -
      ArrowLeftIcon
      -
      DoubleArrowRightIcon
      -
      DoubleArrowLeftIcon
      -
      ArrowEndLeftIcon
      -
      ArrowEndRightIcon
      -
      CheckboxCheckedIcon
      -
      CheckboxPartialCheckedIcon
      -
      CheckboxUncheckedIcon
      -
      CalendarIcon
      -
      CalendarEndIcon
      -
      CalendarStartIcon
      -
      CheckboxIcon
      -
      CheckMarkIcon
      -
      ClockStopIcon
      -
      CrossOutIcon
      -
      CycleIcon
      -
      DragRowIcon
      -
      ErrorStateIcon
      -
      EyeIcon
      -
      FolderIcon
      -
      GlobalIcon
      -
      HistoryIcon
      -
      LanguagesIcon
      -
      LanguagesPageIcon
      -
      LinkIcon
      -
      LockClosedIcon
      -
      MoreMenuIcon
      -
      SiteGroupNoData
      -
      PagesIcon
      -
      SearchFileSystemIcon
      -
      SearchIcon
      -
      ShieldIcon
      -
      Signature
      -
      SiteGroupIcon
      -
      Steps1Icon
      -
      Steps2Icon
      -
      Steps3Icon
      -
      ToolTipIcon
      -
      UploadIcon
      -
      UploadCircleIcon
      -
      XIcon
      -
      XThinIcon
      -
      ModuleIcon
      -
      ArrowMoveUpIcon
      -
      ArrowMoveDownIcon
      -
      TableEmptyState
      -
      ArrowBack
      -
      ArrowForward
      -
      DownloadIcon
      -
      ImageIcon
      -
      HourglassIcon
      -
      CollapseTree
      -
      ExpandTree
      -
      TreeLinkIcon
      -
      TreeDraftIcon
      -
      TreeMoreIcon
      -
      TreePaperClip
      -
      TreeAddPage
      -
      TreeEye
      -
      TreeEdit
      -
      TreeCopy
      -
      TreeAnalytics
      -
      UserSlash
      -
      PagesSearchIcon
      -
      PagesVerticalMore
      +
      ActivityIcon
      +
      AddIcon
      +
      AddCircleIcon
      +
      EditIcon
      +
      CardViewIcon
      +
      ListViewIcon
      +
      PreviewIcon
      +
      SettingsIcon
      +
      PageIcon
      +
      TrafficIcon
      +
      TemplateIcon
      +
      TrashIcon
      +
      UserIcon
      +
      UsersIcon
      +
      ArrowDownIcon
      +
      ArrowRightIcon
      +
      ArrowUpIcon
      +
      ArrowLeftIcon
      +
      DoubleArrowRightIcon
      +
      DoubleArrowLeftIcon
      +
      ArrowEndLeftIcon
      +
      ArrowEndRightIcon
      +
      CheckboxCheckedIcon
      +
      CheckboxPartialCheckedIcon
      +
      CheckboxUncheckedIcon
      +
      CalendarIcon
      +
      CalendarEndIcon
      +
      CalendarStartIcon
      +
      CheckboxIcon
      +
      CheckMarkIcon
      +
      ClockStopIcon
      +
      CrossOutIcon
      +
      CycleIcon
      +
      DragRowIcon
      +
      ErrorStateIcon
      +
      EyeIcon
      +
      FolderIcon
      +
      GlobalIcon
      +
      HistoryIcon
      +
      LanguagesIcon
      +
      LanguagesPageIcon
      +
      LinkIcon
      +
      LockClosedIcon
      +
      MoreMenuIcon
      +
      SiteGroupNoData
      +
      PagesIcon
      +
      SearchFileSystemIcon
      +
      SearchIcon
      +
      ShieldIcon
      +
      Signature
      +
      SiteGroupIcon
      +
      Steps1Icon
      +
      Steps2Icon
      +
      Steps3Icon
      +
      ToolTipIcon
      +
      UploadIcon
      +
      UploadCircleIcon
      +
      XIcon
      +
      XThinIcon
      +
      ModuleIcon
      +
      ArrowMoveUpIcon
      +
      ArrowMoveDownIcon
      +
      TableEmptyState
      +
      ArrowBack
      +
      ArrowForward
      +
      DownloadIcon
      +
      ImageIcon
      +
      HourglassIcon
      +
      CollapseTree
      +
      ExpandTree
      +
      TreeLinkIcon
      +
      TreeDraftIcon
      +
      TreeMoreIcon
      +
      TreePaperClip
      +
      TreeAddPage
      +
      TreeEye
      +
      TreeEdit
      +
      TreeCopy
      +
      TreeAnalytics
      +
      UserSlash
      +
      PagesSearchIcon
      +
      PagesVerticalMore
      ); diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/TreeControlInteractor/icons/arrow-icon/_arrow_icon.jsx b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/TreeControlInteractor/icons/arrow-icon/_arrow_icon.jsx index 2da9f897a02..d6da1552a6f 100644 --- a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/TreeControlInteractor/icons/arrow-icon/_arrow_icon.jsx +++ b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/TreeControlInteractor/icons/arrow-icon/_arrow_icon.jsx @@ -1,7 +1,6 @@ import React, { Component } from "react"; import PropTypes from "prop-types"; - -const arrow_svg = require("!raw-loader!./arrow_bullet.svg").default; +import ArrowSvg from "./arrow_bullet.svg"; import { global } from "../../global"; const styles = global.styles; @@ -60,12 +59,11 @@ export class ArrowIcon extends Component { const height = {height:"20px"}; return (
      + onClick={this.onMouseDown.bind(this)}>
      ); } diff --git a/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/Body/InstalledExtensions/common/ExtensionDetailRow/index.jsx b/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/Body/InstalledExtensions/common/ExtensionDetailRow/index.jsx index cdcee9c645f..0f258817dbf 100644 --- a/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/Body/InstalledExtensions/common/ExtensionDetailRow/index.jsx +++ b/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/Body/InstalledExtensions/common/ExtensionDetailRow/index.jsx @@ -60,8 +60,8 @@ class ExtensionDetailRow extends Component { - {(props._package.canDelete && props.isHost) &&
      } -
      + {(props._package.canDelete && props.isHost) &&
      } +
      {state.inUseModalOpen && diff --git a/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/EditExtension/CustomSettings/Module/AssignedSelector/index.jsx b/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/EditExtension/CustomSettings/Module/AssignedSelector/index.jsx index b1d5fced017..be56c2ddd41 100644 --- a/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/EditExtension/CustomSettings/Module/AssignedSelector/index.jsx +++ b/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/EditExtension/CustomSettings/Module/AssignedSelector/index.jsx @@ -34,10 +34,10 @@ class AssignedSelector extends Component { -
      -
      -
      -
      +
      +
      +
      +
      {Localization.get("EditModule_Assigned.Label")}
      diff --git a/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/EditExtension/CustomSettings/Module/ModuleDefinitions/ModuleDefinitionRow/Controls/ControlRow.jsx b/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/EditExtension/CustomSettings/Module/ModuleDefinitions/ModuleDefinitionRow/Controls/ControlRow.jsx index b746ecfd2fd..a6e4ce0b319 100644 --- a/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/EditExtension/CustomSettings/Module/ModuleDefinitions/ModuleDefinitionRow/Controls/ControlRow.jsx +++ b/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/EditExtension/CustomSettings/Module/ModuleDefinitions/ModuleDefinitionRow/Controls/ControlRow.jsx @@ -24,8 +24,8 @@ class ControlRow extends Component { {props.moduleControl.source}
      -
      -
      +
      +
      diff --git a/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/EditExtension/CustomSettings/Module/ModuleDefinitions/ModuleDefinitionRow/Controls/index.jsx b/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/EditExtension/CustomSettings/Module/ModuleDefinitions/ModuleDefinitionRow/Controls/index.jsx index d86c72fe0e7..3c440d5ac3b 100644 --- a/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/EditExtension/CustomSettings/Module/ModuleDefinitions/ModuleDefinitionRow/Controls/index.jsx +++ b/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/EditExtension/CustomSettings/Module/ModuleDefinitions/ModuleDefinitionRow/Controls/index.jsx @@ -210,7 +210,7 @@ class Controls extends Component {

      {Localization.get("ModuleDefinitions_ModuleControls.Header")}

      - {Localization.get("EditModule_Add.Button")} + {Localization.get("EditModule_Add.Button")}

      diff --git a/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/EditExtension/CustomSettings/Module/ModuleDefinitions/ModuleDefinitionRow/index.jsx b/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/EditExtension/CustomSettings/Module/ModuleDefinitions/ModuleDefinitionRow/index.jsx index 99d0f2afb25..4c27d770ef2 100644 --- a/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/EditExtension/CustomSettings/Module/ModuleDefinitions/ModuleDefinitionRow/index.jsx +++ b/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/EditExtension/CustomSettings/Module/ModuleDefinitions/ModuleDefinitionRow/index.jsx @@ -23,8 +23,8 @@ class ModuleDefinitionRow extends Component { {props.moduleDefinition.name} -
      -
      +
      +
      diff --git a/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/EditExtension/CustomSettings/Module/ModuleDefinitions/index.jsx b/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/EditExtension/CustomSettings/Module/ModuleDefinitions/index.jsx index e01d96d1a3e..7f283a751f4 100644 --- a/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/EditExtension/CustomSettings/Module/ModuleDefinitions/index.jsx +++ b/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/EditExtension/CustomSettings/Module/ModuleDefinitions/index.jsx @@ -199,7 +199,7 @@ class ModuleDefinitions extends Component {

      {Localization.get("EditModule_ModuleDefinitions.Header")}

      - {Localization.get("EditModule_Add.Button")} + {Localization.get("EditModule_Add.Button")}

      diff --git a/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/InstallExtensionModal/FileUpload/AlreadyInstalled.jsx b/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/InstallExtensionModal/FileUpload/AlreadyInstalled.jsx index 0dedf7b73eb..c9c530db454 100644 --- a/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/InstallExtensionModal/FileUpload/AlreadyInstalled.jsx +++ b/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/InstallExtensionModal/FileUpload/AlreadyInstalled.jsx @@ -13,7 +13,7 @@ export default class AlreadyInstalled extends Component { return
      {this.props.fileName || "undefined"}
      -
      +

      [{props.repairInstallText}] diff --git a/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/Modules/ModuleRow/ModuleRow.jsx b/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/Modules/ModuleRow/ModuleRow.jsx index c69c8c8e069..c3e4f12def8 100644 --- a/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/Modules/ModuleRow/ModuleRow.jsx +++ b/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/Modules/ModuleRow/ModuleRow.jsx @@ -36,16 +36,16 @@ class ModuleRow extends Component { {!showCopySettings && -

      +
      + >
      {module.allTabs === false && module.editContentUrl &&
      } + >
      } } {showCopySettings && diff --git a/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/Modules/Modules.jsx b/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/Modules/Modules.jsx index 2e5c07eff6b..a7c24d11cd1 100644 --- a/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/Modules/Modules.jsx +++ b/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/Modules/Modules.jsx @@ -69,7 +69,7 @@ class Modules extends Component {
      -
      +
      {Localization.get("ModulesOnThisPage")}
      diff --git a/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/PageLocalization/Module.jsx b/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/PageLocalization/Module.jsx index 4974f5c4c34..f316643212d 100644 --- a/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/PageLocalization/Module.jsx +++ b/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/PageLocalization/Module.jsx @@ -41,8 +41,8 @@ class Module extends Component { /> {module.IsDeleted &&
      - - + +
      } {!module.IsDeleted && !isDefault &&
      +> {module.TranslatedVisible &&
      {cultureCode} {!this.props.isDefault && !isSpecialPage && + aria-label="Delete"> } {!isCurrentPage && + aria-label="Settings"> } + aria-label="View">
      @@ -129,14 +126,13 @@ class PageLanguage extends Component {
      - + {Localization.get("ModulesOnThisPage") } {!this.props.isDefault &&
      + onClick={this.linkAllModules.bind(this) }>
      -
      +
      {Localization.get("AdvancedFilters")} diff --git a/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/SearchPage/SearchPageInput.jsx b/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/SearchPage/SearchPageInput.jsx index f3b18cd444a..76f2ff24c3f 100644 --- a/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/SearchPage/SearchPageInput.jsx +++ b/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/SearchPage/SearchPageInput.jsx @@ -33,7 +33,7 @@ class SearchPageInput extends Component {
      {this.props.inSearch ?
      this.props.clearSearch()}> -
      {Localization.get("BackToPages").toUpperCase()} +
      {Localization.get("BackToPages").toUpperCase()}
      : null } @@ -50,16 +50,14 @@ class SearchPageInput extends Component {
      this.setState({ searchTerm: "", filtersUpdated: true }, () => this.props.onSearch(""))} - /> + >
      :
      }
      this.props.onSearch(this.state.searchTerm)} - > + >
      diff --git a/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/SearchPage/SearchResultCard.jsx b/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/SearchPage/SearchResultCard.jsx index ad321c65e87..17ad49c6736 100644 --- a/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/SearchPage/SearchResultCard.jsx +++ b/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/SearchPage/SearchResultCard.jsx @@ -95,13 +95,13 @@ class SearchResultCard extends Component { render() { let visibleMenus = []; - this.props.item.canViewPage && visibleMenus.push(
    • this.props.onViewPage(this.props.item)}>
    • ); - this.props.item.canAddContentToPage && visibleMenus.push(
    • this.props.onViewEditPage(this.props.item)}>
    • ); + this.props.item.canViewPage && visibleMenus.push(
    • this.props.onViewPage(this.props.item)}>
    • ); + this.props.item.canAddContentToPage && visibleMenus.push(
    • this.props.onViewEditPage(this.props.item)}>
    • ); if (this.props.pageInContextComponents && securityService.isSuperUser()) { let additionalMenus = cloneDeep(this.props.pageInContextComponents || []); additionalMenus && additionalMenus.map((additionalMenu, index) => { visibleMenus.push(
    • (additionalMenu.OnClickAction && typeof additionalMenu.OnClickAction === "function") - && this.props.CallCustomAction(additionalMenu.OnClickAction)}>
    • ); + && this.props.CallCustomAction(additionalMenu.OnClickAction)}>
      ); }); } diff --git a/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/Seo/PageUrls/Table.jsx b/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/Seo/PageUrls/Table.jsx index 35ed9bd8f0e..34a332ab168 100644 --- a/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/Seo/PageUrls/Table.jsx +++ b/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/Seo/PageUrls/Table.jsx @@ -51,10 +51,10 @@ class Table extends Component { return (
      -
      +
      {Localization.get("UrlsForThisPage")}
      -
      +
      {Localization.get("AddUrl")}
      diff --git a/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/Seo/PageUrls/UrlRow.jsx b/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/Seo/PageUrls/UrlRow.jsx index 25aa76f69af..a7f19a4b302 100644 --- a/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/Seo/PageUrls/UrlRow.jsx +++ b/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/Seo/PageUrls/UrlRow.jsx @@ -54,11 +54,11 @@ class UrlRow extends Component { {(!url.autoGenerated || url.statusCode.Key !== 200) && url.id !== -1 &&
      + onClick={this.onDelete.bind(this, url)}>
      } {!url.autoGenerated &&
      + onClick={this.onOpenEditForm.bind(this, url)}>
      } {opened && diff --git a/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/dnn-persona-bar-page-treeview/src/_PersonaBarDraftPencilIcon.jsx b/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/dnn-persona-bar-page-treeview/src/_PersonaBarDraftPencilIcon.jsx index 932d8e8d4aa..74755dff3da 100644 --- a/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/dnn-persona-bar-page-treeview/src/_PersonaBarDraftPencilIcon.jsx +++ b/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/dnn-persona-bar-page-treeview/src/_PersonaBarDraftPencilIcon.jsx @@ -10,7 +10,7 @@ export default class PersonaBarPageIcon extends Component { switch (true) { case hasUnpublishedChanges === true: - return (
      ); + return (
      ); case hasUnpublishedChanges === false: return (
      ); default: diff --git a/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/dnn-persona-bar-page-treeview/src/_PersonaBarExpandCollapseIcon.jsx b/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/dnn-persona-bar-page-treeview/src/_PersonaBarExpandCollapseIcon.jsx index 77631600e3c..858d4d91801 100644 --- a/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/dnn-persona-bar-page-treeview/src/_PersonaBarExpandCollapseIcon.jsx +++ b/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/dnn-persona-bar-page-treeview/src/_PersonaBarExpandCollapseIcon.jsx @@ -10,7 +10,7 @@ export default class PersonaBarExpandCollapseIcon extends Component { return (
      - {isOpen ?
      :
      } + {isOpen ?
      :
      }
      ); } diff --git a/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/dnn-persona-bar-page-treeview/src/_PersonaBarPageIcon.jsx b/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/dnn-persona-bar-page-treeview/src/_PersonaBarPageIcon.jsx index 467420a65b9..553c11c951e 100644 --- a/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/dnn-persona-bar-page-treeview/src/_PersonaBarPageIcon.jsx +++ b/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/dnn-persona-bar-page-treeview/src/_PersonaBarPageIcon.jsx @@ -10,20 +10,20 @@ export default class PersonaBarPageIcon extends Component { switch (number) { case "normal": - return (
      ); + return (
      ); case "file": - return (
      ); + return (
      ); case "tab": case "url": - return (
      ); + return (
      ); case "existing": - return (
      ); + return (
      ); default: - return (
      ); + return (
      ); } } diff --git a/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/dnn-persona-bar-page-treeview/src/_PersonaBarSelectionArrow.jsx b/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/dnn-persona-bar-page-treeview/src/_PersonaBarSelectionArrow.jsx index 5140d7b555a..9f05daf7b94 100644 --- a/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/dnn-persona-bar-page-treeview/src/_PersonaBarSelectionArrow.jsx +++ b/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/dnn-persona-bar-page-treeview/src/_PersonaBarSelectionArrow.jsx @@ -51,7 +51,7 @@ export default class PersonaBarSelectionArrow extends Component { return
      -
      +
      {this.state.showMenu && } @@ -64,7 +64,7 @@ export default class PersonaBarSelectionArrow extends Component { return (
      - {item.selected ?
      :
      } + {item.selected ?
      :
      } {item.selected ? this.renderMoreActions() :
      }
      ); diff --git a/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/dnn-persona-bar-page-treeview/src/_PersonaBarTreeInContextMenu.jsx b/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/dnn-persona-bar-page-treeview/src/_PersonaBarTreeInContextMenu.jsx index 71a81cf10e6..ce22d6b5494 100644 --- a/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/dnn-persona-bar-page-treeview/src/_PersonaBarTreeInContextMenu.jsx +++ b/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/dnn-persona-bar-page-treeview/src/_PersonaBarTreeInContextMenu.jsx @@ -129,8 +129,9 @@ export class PersonaBarTreeInContextMenu extends Component { return ( { visibleMenus.map(menu => { + let MenuIcon = menu.icon; return -
      +
      {menu.title}
      ; }) diff --git a/Dnn.AdminExperience/ClientSide/Roles.Web/src/components/roles/UsersInRole/UserRow/index.jsx b/Dnn.AdminExperience/ClientSide/Roles.Web/src/components/roles/UsersInRole/UserRow/index.jsx index d61d45add51..f09be49d474 100644 --- a/Dnn.AdminExperience/ClientSide/Roles.Web/src/components/roles/UsersInRole/UserRow/index.jsx +++ b/Dnn.AdminExperience/ClientSide/Roles.Web/src/components/roles/UsersInRole/UserRow/index.jsx @@ -5,9 +5,7 @@ import "./style.less"; import { GridCell, DatePicker, IconButton } from "@dnnsoftware/dnn-react-common"; import util from "../../../../utils"; import resx from "../../../../resources"; -import { - roleUsers as RoleUsersActions -} from "../../../../actions"; +import { roleUsers as RoleUsersActions } from "../../../../actions"; import xIcon from "../../../../img/common/x.svg?raw"; class UserRow extends Component { diff --git a/Dnn.AdminExperience/ClientSide/Security.Web/src/components/auditCheck/index.jsx b/Dnn.AdminExperience/ClientSide/Security.Web/src/components/auditCheck/index.jsx index e27df8599a7..c8765b8787e 100644 --- a/Dnn.AdminExperience/ClientSide/Security.Web/src/components/auditCheck/index.jsx +++ b/Dnn.AdminExperience/ClientSide/Security.Web/src/components/auditCheck/index.jsx @@ -147,7 +147,7 @@ class AuditCheckPanelBody extends Component { let contentShouldShow = (props.auditCheckResults && props.auditCheckResults.length > 0) ? true : false; return ( }> + svgSkeleton={
      }>
      {resx.get("AuditExplanation")} diff --git a/Dnn.AdminExperience/ClientSide/Security.Web/src/components/ipFilters/index.jsx b/Dnn.AdminExperience/ClientSide/Security.Web/src/components/ipFilters/index.jsx index 2be04c04125..8b734ca719f 100644 --- a/Dnn.AdminExperience/ClientSide/Security.Web/src/components/ipFilters/index.jsx +++ b/Dnn.AdminExperience/ClientSide/Security.Web/src/components/ipFilters/index.jsx @@ -128,7 +128,7 @@ class IpFiltersPanelBody extends Component { }
      -
      +
      {resx.get("cmdAdd") }
      diff --git a/Dnn.AdminExperience/ClientSide/Seo.Web/src/components/extensionUrlProviders/providerRow/index.jsx b/Dnn.AdminExperience/ClientSide/Seo.Web/src/components/extensionUrlProviders/providerRow/index.jsx index 38e876fdb98..e39e3eac4c5 100644 --- a/Dnn.AdminExperience/ClientSide/Seo.Web/src/components/extensionUrlProviders/providerRow/index.jsx +++ b/Dnn.AdminExperience/ClientSide/Seo.Web/src/components/extensionUrlProviders/providerRow/index.jsx @@ -44,7 +44,7 @@ class ProviderRow extends Component {
      -
      +
      diff --git a/Dnn.AdminExperience/ClientSide/Seo.Web/src/components/sitemapSettings/providerRow/index.jsx b/Dnn.AdminExperience/ClientSide/Seo.Web/src/components/sitemapSettings/providerRow/index.jsx index ec7c9c8dbd7..13d2e798e1f 100644 --- a/Dnn.AdminExperience/ClientSide/Seo.Web/src/components/sitemapSettings/providerRow/index.jsx +++ b/Dnn.AdminExperience/ClientSide/Seo.Web/src/components/sitemapSettings/providerRow/index.jsx @@ -30,7 +30,7 @@ class ProviderRow extends Component { if (props.enabled) { return (
      -
      +
      ); } @@ -60,7 +60,7 @@ class ProviderRow extends Component { {props.overridePriority ? props.priority : resx.get("None")}
      -
      +
      diff --git a/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Servers/ServerRow/index.jsx b/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Servers/ServerRow/index.jsx index 34084a28094..85a0e479437 100644 --- a/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Servers/ServerRow/index.jsx +++ b/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Servers/ServerRow/index.jsx @@ -73,10 +73,8 @@ export default class ServerRow extends Component {
      - + diff --git a/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/common/WarningBlock.jsx b/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/common/WarningBlock.jsx index 1f1a57a8b03..47ac0ad1dd3 100644 --- a/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/common/WarningBlock.jsx +++ b/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/common/WarningBlock.jsx @@ -10,7 +10,7 @@ export default class WarningBlock extends Component { const {props} = this; return -
      +
      ; diff --git a/Dnn.AdminExperience/ClientSide/SiteGroups.Web/src/components/AssignedSelector.jsx b/Dnn.AdminExperience/ClientSide/SiteGroups.Web/src/components/AssignedSelector.jsx index 0adf4515c48..5f7f03783bb 100644 --- a/Dnn.AdminExperience/ClientSide/SiteGroups.Web/src/components/AssignedSelector.jsx +++ b/Dnn.AdminExperience/ClientSide/SiteGroups.Web/src/components/AssignedSelector.jsx @@ -54,26 +54,22 @@ class AssignedSelector extends React.Component { href="" className={"move-item single-right" + (leftSelected ? " enabled" : "")} onClick={() => this.props.moveItemsRight()} - dangerouslySetInnerHTML={{ __html: SvgIcons.ArrowRightIcon }} - >
      + >
      this.props.moveItemsLeft()} - dangerouslySetInnerHTML={{ __html: SvgIcons.ArrowLeftIcon }} - >
      + >
      0 ? " enabled" : "")} onClick={() => this.props.moveAll("right")} - dangerouslySetInnerHTML={{ __html: SvgIcons.DoubleArrowRightIcon }} - >
      + >
      0 ? " enabled" : "")} onClick={() => this.props.moveAll("left")} - dangerouslySetInnerHTML={{ __html: SvgIcons.DoubleArrowLeftIcon }} - >
      + >
      {Resx.get("EditModule_Assigned.Label")}
      diff --git a/Dnn.AdminExperience/ClientSide/SiteImportExport.Web/src/components/Dashboard/JobDetails/index.jsx b/Dnn.AdminExperience/ClientSide/SiteImportExport.Web/src/components/Dashboard/JobDetails/index.jsx index 4bd68a71006..ac89ce1d71e 100644 --- a/Dnn.AdminExperience/ClientSide/SiteImportExport.Web/src/components/Dashboard/JobDetails/index.jsx +++ b/Dnn.AdminExperience/ClientSide/SiteImportExport.Web/src/components/Dashboard/JobDetails/index.jsx @@ -44,7 +44,7 @@ class JobDetails extends Component { } else { return
      -
      +
      {detail.ProcessedItemsString + " / " + detail.TotalItemsString + " (" + (detail.ProcessedItems / detail.TotalItems * 100).toFixed(1) + "%)"}
      @@ -72,7 +72,7 @@ class JobDetails extends Component { />
      -
      +
      {users.ProcessedItemsString + " / " + users.TotalItemsString + " (" + (users.ProcessedItems / users.TotalItems * 100).toFixed(1) + "%)"}
      @@ -99,7 +99,7 @@ class JobDetails extends Component { />
      -
      +
      {usersData.ProcessedItemsString + " / " + usersData.TotalItemsString + " (" + (usersData.ProcessedItems / usersData.TotalItems * 100).toFixed(1) + "%)"}
      @@ -129,7 +129,7 @@ class JobDetails extends Component { />
      -
      +
      {users.ProcessedItemsString + " / " + users.TotalItemsString + " (" + (users.ProcessedItems / users.TotalItems * 100).toFixed(1) + "%)"}
      diff --git a/Dnn.AdminExperience/ClientSide/SiteImportExport.Web/src/components/Dashboard/JobRow/index.jsx b/Dnn.AdminExperience/ClientSide/SiteImportExport.Web/src/components/Dashboard/JobRow/index.jsx index 565cd55897e..1e4b32e94d3 100644 --- a/Dnn.AdminExperience/ClientSide/SiteImportExport.Web/src/components/Dashboard/JobRow/index.jsx +++ b/Dnn.AdminExperience/ClientSide/SiteImportExport.Web/src/components/Dashboard/JobRow/index.jsx @@ -73,14 +73,14 @@ class JobRow extends Component { {props.jobStatus === 1 && ! props.jobCancelled && -
      +
      }
      -
      +
      diff --git a/Dnn.AdminExperience/ClientSide/SiteImportExport.Web/src/components/ImportModal/PackagesList.jsx b/Dnn.AdminExperience/ClientSide/SiteImportExport.Web/src/components/ImportModal/PackagesList.jsx index 5c1b661fbcc..75b60e111de 100644 --- a/Dnn.AdminExperience/ClientSide/SiteImportExport.Web/src/components/ImportModal/PackagesList.jsx +++ b/Dnn.AdminExperience/ClientSide/SiteImportExport.Web/src/components/ImportModal/PackagesList.jsx @@ -40,7 +40,7 @@ class PackagesList extends Component { packageDescription={pkg.Description} isSelected={props.selectedPackage && props.selectedPackage.PackageId === pkg.PackageId} /> {props.selectedPackage && props.selectedPackage.PackageId === pkg.PackageId && -
      +
      } { diff --git a/Dnn.AdminExperience/ClientSide/SiteSettings.Web/src/components/editLanguagePanel/folder.jsx b/Dnn.AdminExperience/ClientSide/SiteSettings.Web/src/components/editLanguagePanel/folder.jsx index 50415fc570b..93917f2f37d 100644 --- a/Dnn.AdminExperience/ClientSide/SiteSettings.Web/src/components/editLanguagePanel/folder.jsx +++ b/Dnn.AdminExperience/ClientSide/SiteSettings.Web/src/components/editLanguagePanel/folder.jsx @@ -27,8 +27,8 @@ class Folder extends Component { const isOpenIcon = this.state.isOpen ? SvgIcons.ArrowDownIcon : SvgIcons.ArrowRightIcon; return (
    • - {isFolder &&
      } -
      + {isFolder &&
      } +
      {props.folder.Name}
        {props.children}
      diff --git a/Dnn.AdminExperience/ClientSide/SiteSettings.Web/src/components/editLanguagePanel/resourceEditor/index.jsx b/Dnn.AdminExperience/ClientSide/SiteSettings.Web/src/components/editLanguagePanel/resourceEditor/index.jsx index 0c37893f2b2..e2692eeab47 100644 --- a/Dnn.AdminExperience/ClientSide/SiteSettings.Web/src/components/editLanguagePanel/resourceEditor/index.jsx +++ b/Dnn.AdminExperience/ClientSide/SiteSettings.Web/src/components/editLanguagePanel/resourceEditor/index.jsx @@ -102,10 +102,8 @@ class ResourceEditor extends Component { return (
      {renderMulti ? this.renderMulti() : this.renderSingle()} {props.enabled && -
      +
      +
      } {props.enabled && diff --git a/Dnn.AdminExperience/ClientSide/SiteSettings.Web/src/components/editLanguagePanel/resourceTree.jsx b/Dnn.AdminExperience/ClientSide/SiteSettings.Web/src/components/editLanguagePanel/resourceTree.jsx index 1f1b63baf5a..bdc1d27cde2 100644 --- a/Dnn.AdminExperience/ClientSide/SiteSettings.Web/src/components/editLanguagePanel/resourceTree.jsx +++ b/Dnn.AdminExperience/ClientSide/SiteSettings.Web/src/components/editLanguagePanel/resourceTree.jsx @@ -79,7 +79,7 @@ class ResourceTree extends Component {
      diff --git a/Dnn.AdminExperience/ClientSide/SiteSettings.Web/src/components/ignoreWords/index.jsx b/Dnn.AdminExperience/ClientSide/SiteSettings.Web/src/components/ignoreWords/index.jsx index 459c39077a8..0ba3a30d096 100644 --- a/Dnn.AdminExperience/ClientSide/SiteSettings.Web/src/components/ignoreWords/index.jsx +++ b/Dnn.AdminExperience/ClientSide/SiteSettings.Web/src/components/ignoreWords/index.jsx @@ -206,7 +206,7 @@ class IgnoreWordsPanel extends Component {
      {resx.get("IgnoreWords")}
      {!props.ignoreWords.StopWords &&
      -
      +
      {resx.get("cmdAddWord")}
      } diff --git a/Dnn.AdminExperience/ClientSide/SiteSettings.Web/src/components/languageSettings/languageVerifier/languageVerifierGrid/languageVerifierRow/index.jsx b/Dnn.AdminExperience/ClientSide/SiteSettings.Web/src/components/languageSettings/languageVerifier/languageVerifierGrid/languageVerifierRow/index.jsx index d23ff4084f7..a0109687166 100644 --- a/Dnn.AdminExperience/ClientSide/SiteSettings.Web/src/components/languageSettings/languageVerifier/languageVerifierGrid/languageVerifierRow/index.jsx +++ b/Dnn.AdminExperience/ClientSide/SiteSettings.Web/src/components/languageSettings/languageVerifier/languageVerifierGrid/languageVerifierRow/index.jsx @@ -32,7 +32,7 @@ class LanguageVerifierRow extends Component {
      {props.text}
      -
      +
      {opened && props.children} diff --git a/Dnn.AdminExperience/ClientSide/SiteSettings.Web/src/components/languageSettings/languages/index.jsx b/Dnn.AdminExperience/ClientSide/SiteSettings.Web/src/components/languageSettings/languages/index.jsx index a6191618279..60e275b368c 100644 --- a/Dnn.AdminExperience/ClientSide/SiteSettings.Web/src/components/languageSettings/languages/index.jsx +++ b/Dnn.AdminExperience/ClientSide/SiteSettings.Web/src/components/languageSettings/languages/index.jsx @@ -231,7 +231,7 @@ class LanguagesPanel extends Component {
      {resx.get("Languages")}
      {isHost &&
      -
      +
      {resx.get("cmdCreateLanguage")}
      } diff --git a/Dnn.AdminExperience/ClientSide/SiteSettings.Web/src/components/languageSettings/languages/languageRow/index.jsx b/Dnn.AdminExperience/ClientSide/SiteSettings.Web/src/components/languageSettings/languages/languageRow/index.jsx index 9bcec0a7d24..344c154af21 100644 --- a/Dnn.AdminExperience/ClientSide/SiteSettings.Web/src/components/languageSettings/languages/languageRow/index.jsx +++ b/Dnn.AdminExperience/ClientSide/SiteSettings.Web/src/components/languageSettings/languages/languageRow/index.jsx @@ -43,7 +43,7 @@ class LanguageRow extends Component { getActiveDisplay(prop) { if (this.props.id !== "add") { if (prop && this.props.isLocalized) { - return
      ; + return
      ; } else return   ; } @@ -53,7 +53,7 @@ class LanguageRow extends Component { getEnabledDisplay(prop) { if (this.props.id !== "add") { if (prop) { - return
      ; + return
      ; } else return   ; } @@ -171,12 +171,12 @@ class LanguageRow extends Component { {this.getEnabledDisplay(props.enabled)}
      - {!props.isDefault &&
      } -
      + {!props.isDefault &&
      } +
      {!props.isDefault && -
      +
      } -
      +
    • @@ -198,11 +198,11 @@ class LanguageRow extends Component { {this.getEnabledDisplay(props.enabled)}
      -
      +
      {!props.isDefault && -
      +
      } -
      +
      diff --git a/Dnn.AdminExperience/ClientSide/SiteSettings.Web/src/components/messageBox/index.jsx b/Dnn.AdminExperience/ClientSide/SiteSettings.Web/src/components/messageBox/index.jsx index 0b0f131ee48..978e2f6a04f 100644 --- a/Dnn.AdminExperience/ClientSide/SiteSettings.Web/src/components/messageBox/index.jsx +++ b/Dnn.AdminExperience/ClientSide/SiteSettings.Web/src/components/messageBox/index.jsx @@ -45,10 +45,10 @@ class MessageBox extends Component { style={modalStyles}>
      -
      +
      -
      +
      {props.message}
      {props.link && diff --git a/Dnn.AdminExperience/ClientSide/SiteSettings.Web/src/components/profileSettings/profileProperties/index.jsx b/Dnn.AdminExperience/ClientSide/SiteSettings.Web/src/components/profileSettings/profileProperties/index.jsx index 189b71f0b44..7279eb2c79c 100644 --- a/Dnn.AdminExperience/ClientSide/SiteSettings.Web/src/components/profileSettings/profileProperties/index.jsx +++ b/Dnn.AdminExperience/ClientSide/SiteSettings.Web/src/components/profileSettings/profileProperties/index.jsx @@ -248,7 +248,7 @@ class ProfilePropertiesPanel extends Component {
      {resx.get("UserProfileFields") }
      -
      +
      {resx.get("cmdAddField") }
      diff --git a/Dnn.AdminExperience/ClientSide/SiteSettings.Web/src/components/profileSettings/profileProperties/profilePropertyEditor/listEntries/index.jsx b/Dnn.AdminExperience/ClientSide/SiteSettings.Web/src/components/profileSettings/profileProperties/profilePropertyEditor/listEntries/index.jsx index 54038541386..a5a5df52df8 100644 --- a/Dnn.AdminExperience/ClientSide/SiteSettings.Web/src/components/profileSettings/profileProperties/profilePropertyEditor/listEntries/index.jsx +++ b/Dnn.AdminExperience/ClientSide/SiteSettings.Web/src/components/profileSettings/profileProperties/profilePropertyEditor/listEntries/index.jsx @@ -144,7 +144,7 @@ class ListEntriesPanel extends Component {
      -
      +
      {resx.get("cmdAddEntry")}
      diff --git a/Dnn.AdminExperience/ClientSide/SiteSettings.Web/src/components/profileSettings/profileProperties/profilePropertyEditor/listEntries/listEntryRow/index.jsx b/Dnn.AdminExperience/ClientSide/SiteSettings.Web/src/components/profileSettings/profileProperties/profilePropertyEditor/listEntries/listEntryRow/index.jsx index 7044fe1f27f..ec94e4951ec 100644 --- a/Dnn.AdminExperience/ClientSide/SiteSettings.Web/src/components/profileSettings/profileProperties/profilePropertyEditor/listEntries/listEntryRow/index.jsx +++ b/Dnn.AdminExperience/ClientSide/SiteSettings.Web/src/components/profileSettings/profileProperties/profilePropertyEditor/listEntries/listEntryRow/index.jsx @@ -36,17 +36,17 @@ class ListEntryRow extends Component {
      {props.enableSortOrder && -
      +
      +
      }
      +
      +
      diff --git a/Dnn.AdminExperience/ClientSide/SiteSettings.Web/src/components/profileSettings/profileProperties/profilePropertyRow/index.jsx b/Dnn.AdminExperience/ClientSide/SiteSettings.Web/src/components/profileSettings/profileProperties/profilePropertyRow/index.jsx index e5ce1fad4cc..beddc9125ce 100644 --- a/Dnn.AdminExperience/ClientSide/SiteSettings.Web/src/components/profileSettings/profileProperties/profilePropertyRow/index.jsx +++ b/Dnn.AdminExperience/ClientSide/SiteSettings.Web/src/components/profileSettings/profileProperties/profilePropertyRow/index.jsx @@ -24,7 +24,7 @@ class ProfilePropertyRow extends Component { getBooleanDisplay(prop) { if (this.props.id !== "add") { if (prop) { - return
      ; + return
      ; } else return   ; } @@ -61,11 +61,11 @@ class ProfilePropertyRow extends Component {
      {this.getBooleanDisplay(props.visible)}
      -
      +
      {!this.isSystemProperty(props.name) && -
      +
      } -
      +
      diff --git a/Dnn.AdminExperience/ClientSide/SiteSettings.Web/src/components/siteAliasSettings/siteAliases/index.jsx b/Dnn.AdminExperience/ClientSide/SiteSettings.Web/src/components/siteAliasSettings/siteAliases/index.jsx index 3a28e8003e4..d7103b04486 100644 --- a/Dnn.AdminExperience/ClientSide/SiteSettings.Web/src/components/siteAliasSettings/siteAliases/index.jsx +++ b/Dnn.AdminExperience/ClientSide/SiteSettings.Web/src/components/siteAliasSettings/siteAliases/index.jsx @@ -167,7 +167,7 @@ class SiteAliasesPanel extends Component {
      {resx.get("SiteAliases")}
      -
      +
      {resx.get("cmdAddAlias")}
      diff --git a/Dnn.AdminExperience/ClientSide/SiteSettings.Web/src/components/siteAliasSettings/siteAliases/siteAliasRow/index.jsx b/Dnn.AdminExperience/ClientSide/SiteSettings.Web/src/components/siteAliasSettings/siteAliases/siteAliasRow/index.jsx index 854e69638e9..ac62bed375f 100644 --- a/Dnn.AdminExperience/ClientSide/SiteSettings.Web/src/components/siteAliasSettings/siteAliases/siteAliasRow/index.jsx +++ b/Dnn.AdminExperience/ClientSide/SiteSettings.Web/src/components/siteAliasSettings/siteAliases/siteAliasRow/index.jsx @@ -24,7 +24,7 @@ class SiteAliasRow extends Component { getBooleanDisplay(prop) { if (this.props.id !== "add") { if (prop) { - return
      ; + return
      ; } else return   ; } @@ -53,10 +53,10 @@ class SiteAliasRow extends Component { {this.getBooleanDisplay(props.isPrimary)}
      {props.deletable && -
      +
      } {props.editable && -
      +
      }
      diff --git a/Dnn.AdminExperience/ClientSide/SiteSettings.Web/src/components/synonymsGroups/index.jsx b/Dnn.AdminExperience/ClientSide/SiteSettings.Web/src/components/synonymsGroups/index.jsx index 59457e1ffe8..39873afbf4a 100644 --- a/Dnn.AdminExperience/ClientSide/SiteSettings.Web/src/components/synonymsGroups/index.jsx +++ b/Dnn.AdminExperience/ClientSide/SiteSettings.Web/src/components/synonymsGroups/index.jsx @@ -226,7 +226,7 @@ class SynonymsGroupsPanel extends Component {
      {resx.get("Synonyms")}
      -
      +
      {resx.get("cmdAddGroup")}
      {this.props.cultures && this.props.cultures.length > 1 && diff --git a/Dnn.AdminExperience/ClientSide/SiteSettings.Web/src/components/synonymsGroups/synonymsGroupRow/index.jsx b/Dnn.AdminExperience/ClientSide/SiteSettings.Web/src/components/synonymsGroups/synonymsGroupRow/index.jsx index 89bf2fba59d..d33cbbc6219 100644 --- a/Dnn.AdminExperience/ClientSide/SiteSettings.Web/src/components/synonymsGroups/synonymsGroupRow/index.jsx +++ b/Dnn.AdminExperience/ClientSide/SiteSettings.Web/src/components/synonymsGroups/synonymsGroupRow/index.jsx @@ -31,8 +31,8 @@ class SynonymsGroupRow extends Component {
      {props.tags}
      -
      -
      +
      +
      diff --git a/Dnn.AdminExperience/ClientSide/Sites.Web/src/_exportables/src/Components/ListView/index.jsx b/Dnn.AdminExperience/ClientSide/Sites.Web/src/_exportables/src/Components/ListView/index.jsx index a908e8af649..1ef26e8d3d8 100644 --- a/Dnn.AdminExperience/ClientSide/Sites.Web/src/_exportables/src/Components/ListView/index.jsx +++ b/Dnn.AdminExperience/ClientSide/Sites.Web/src/_exportables/src/Components/ListView/index.jsx @@ -134,7 +134,8 @@ class ListView extends Component { let i = 0; return portalButtons.map((_button) => { - let element =
      ; + let ButtonIcon = _button.icon; + let element =
      ; i++; return element; }); diff --git a/Dnn.AdminExperience/ClientSide/TaskScheduler.Web/src/components/scheduler/index.jsx b/Dnn.AdminExperience/ClientSide/TaskScheduler.Web/src/components/scheduler/index.jsx index a72e6522c55..5d106f3e645 100644 --- a/Dnn.AdminExperience/ClientSide/TaskScheduler.Web/src/components/scheduler/index.jsx +++ b/Dnn.AdminExperience/ClientSide/TaskScheduler.Web/src/components/scheduler/index.jsx @@ -190,7 +190,7 @@ class SchedulerPanel extends Component {
      -
      +
      {resx.get("cmdAddTask")}
      diff --git a/Dnn.AdminExperience/ClientSide/TaskScheduler.Web/src/components/scheduler/schedulerRow/index.jsx b/Dnn.AdminExperience/ClientSide/TaskScheduler.Web/src/components/scheduler/schedulerRow/index.jsx index 26e828cc2a5..ed4db3e6973 100644 --- a/Dnn.AdminExperience/ClientSide/TaskScheduler.Web/src/components/scheduler/schedulerRow/index.jsx +++ b/Dnn.AdminExperience/ClientSide/TaskScheduler.Web/src/components/scheduler/schedulerRow/index.jsx @@ -96,7 +96,8 @@ class SchedulerRow extends Component {
      }
      -
      +
      +
      diff --git a/Dnn.AdminExperience/ClientSide/Users.Web/src/_exportables/src/components/UserTable/DetailRow/index.jsx b/Dnn.AdminExperience/ClientSide/Users.Web/src/_exportables/src/components/UserTable/DetailRow/index.jsx index b362ec4de7b..917062e37fc 100644 --- a/Dnn.AdminExperience/ClientSide/Users.Web/src/_exportables/src/components/UserTable/DetailRow/index.jsx +++ b/Dnn.AdminExperience/ClientSide/Users.Web/src/_exportables/src/components/UserTable/DetailRow/index.jsx @@ -85,13 +85,15 @@ class DetailsRow extends Component { let i = 0; let userActions = sort(actionIcons, "index", "desc").map((actionIcon) => { - let element =
      ; + let Icon = actionIcon.icon; + let element =
      ; i++; return element; }); return ([
      -
      +
      { this.state.showMenu && } @@ -104,19 +106,19 @@ class DetailsRow extends Component { let userColumns = []; if (this.props.appSettings.applicationSettings.settings.dataConsentActive) { let statusClass = "black"; - let statusIcon = SvgIcons.Signature; + let StatusIcon = SvgIcons.Signature; let hoverText = Localization.get("HasAgreedToTerms.title"); if (user.requestsRemoval) { statusClass = "red"; - statusIcon = SvgIcons.UserSlash; + StatusIcon = SvgIcons.UserSlash; hoverText = Localization.get("RequestsRemoval.title"); } else if (user.isDeleted) { statusClass = "grey"; - statusIcon = SvgIcons.UserSlash; + StatusIcon = SvgIcons.UserSlash; hoverText = Localization.get("Deleted"); } else if (!user.authorized) { statusClass = "grey"; - statusIcon = SvgIcons.CrossOutIcon; + StatusIcon = SvgIcons.CrossOutIcon; hoverText = Localization.get("UnAuthorized"); } else if (!user.hasAgreedToTerms) { statusClass = "grey"; @@ -126,7 +128,7 @@ class DetailsRow extends Component { { index: 3, content: x.index===3).size}> - + }]; } diff --git a/Dnn.AdminExperience/ClientSide/Users.Web/src/_exportables/src/components/UserTable/UsersRoles/RoleRow/index.jsx b/Dnn.AdminExperience/ClientSide/Users.Web/src/_exportables/src/components/UserTable/UsersRoles/RoleRow/index.jsx index b26f9451838..a7e9b6955dc 100644 --- a/Dnn.AdminExperience/ClientSide/Users.Web/src/_exportables/src/components/UserTable/UsersRoles/RoleRow/index.jsx +++ b/Dnn.AdminExperience/ClientSide/Users.Web/src/_exportables/src/components/UserTable/UsersRoles/RoleRow/index.jsx @@ -91,7 +91,7 @@ class RoleRow extends Component { onIconClick={this.onExpiresTimeClick.bind(this, props.roleDetails, props.index) } /> : null; let deleteAction = props.roleDetails.allowDelete ? - + : null; return
      {startTimeAction} diff --git a/Dnn.AdminExperience/ClientSide/Users.Web/src/_exportables/src/components/UserTable/UsersRoles/index.jsx b/Dnn.AdminExperience/ClientSide/Users.Web/src/_exportables/src/components/UserTable/UsersRoles/index.jsx index 6259787ce5a..6c756669c73 100644 --- a/Dnn.AdminExperience/ClientSide/Users.Web/src/_exportables/src/components/UserTable/UsersRoles/index.jsx +++ b/Dnn.AdminExperience/ClientSide/Users.Web/src/_exportables/src/components/UserTable/UsersRoles/index.jsx @@ -188,7 +188,7 @@ class UserRoles extends Component { valueField="roleId" textField="roleName"/>
      -
      +
      {Localization.get("Add") }
      diff --git a/Dnn.AdminExperience/ClientSide/Vocabularies.Web/src/components/VocabularyList/RightPane/Term/index.jsx b/Dnn.AdminExperience/ClientSide/Vocabularies.Web/src/components/VocabularyList/RightPane/Term/index.jsx index d0e9e7b6ce3..bf6d15b511b 100644 --- a/Dnn.AdminExperience/ClientSide/Vocabularies.Web/src/components/VocabularyList/RightPane/Term/index.jsx +++ b/Dnn.AdminExperience/ClientSide/Vocabularies.Web/src/components/VocabularyList/RightPane/Term/index.jsx @@ -55,14 +55,14 @@ class Term extends Component {
    • {props.children.length > 0 && !state.isOpened && -
      +
      } {props.children.length > 0 && state.isOpened && -
      +
      }
      - {props.isEditable && util.canEdit() &&
      } + {props.isEditable && util.canEdit() &&
      }
      {props.children} diff --git a/Dnn.AdminExperience/ClientSide/Vocabularies.Web/src/components/VocabularyList/RightPane/index.jsx b/Dnn.AdminExperience/ClientSide/Vocabularies.Web/src/components/VocabularyList/RightPane/index.jsx index 513539838e5..8899d0d9211 100644 --- a/Dnn.AdminExperience/ClientSide/Vocabularies.Web/src/components/VocabularyList/RightPane/index.jsx +++ b/Dnn.AdminExperience/ClientSide/Vocabularies.Web/src/components/VocabularyList/RightPane/index.jsx @@ -333,8 +333,8 @@ class RightPane extends Component { {LocalizedResources.get("Terms") + " (" + props.totalTermCount + ")"} {this.canEdit() &&
      + {LocalizedResources.get("AddTerm")}
      } diff --git a/yarn.lock b/yarn.lock index ac250bd94d0..a5d5671141b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -43,6 +43,13 @@ __metadata: languageName: node linkType: hard +"@babel/compat-data@npm:^7.28.5": + version: 7.28.5 + resolution: "@babel/compat-data@npm:7.28.5" + checksum: 10/5a5ff00b187049e847f04bd02e21fbd8094544e5016195c2b45e56fa2e311eeb925b158f52a85624c9e6bacc1ce0323e26c303513723d918a8034e347e22610d + languageName: node + linkType: hard + "@babel/core@npm:7.28.4, @babel/core@npm:^7.18.9, @babel/core@npm:^7.23.9, @babel/core@npm:^7.27.4, @babel/core@npm:^7.28.4": version: 7.28.4 resolution: "@babel/core@npm:7.28.4" @@ -66,6 +73,29 @@ __metadata: languageName: node linkType: hard +"@babel/core@npm:^7.21.3": + version: 7.28.5 + resolution: "@babel/core@npm:7.28.5" + dependencies: + "@babel/code-frame": "npm:^7.27.1" + "@babel/generator": "npm:^7.28.5" + "@babel/helper-compilation-targets": "npm:^7.27.2" + "@babel/helper-module-transforms": "npm:^7.28.3" + "@babel/helpers": "npm:^7.28.4" + "@babel/parser": "npm:^7.28.5" + "@babel/template": "npm:^7.27.2" + "@babel/traverse": "npm:^7.28.5" + "@babel/types": "npm:^7.28.5" + "@jridgewell/remapping": "npm:^2.3.5" + convert-source-map: "npm:^2.0.0" + debug: "npm:^4.1.0" + gensync: "npm:^1.0.0-beta.2" + json5: "npm:^2.2.3" + semver: "npm:^6.3.1" + checksum: 10/2f1e224125179f423f4300d605a0c5a3ef315003281a63b1744405b2605ee2a2ffc5b1a8349aa4f262c72eca31c7e1802377ee04ad2b852a2c88f8ace6cac324 + languageName: node + linkType: hard + "@babel/eslint-parser@npm:^7.28.4": version: 7.28.4 resolution: "@babel/eslint-parser@npm:7.28.4" @@ -387,6 +417,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:^7.28.5": + version: 7.28.5 + resolution: "@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:7.28.5" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/traverse": "npm:^7.28.5" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10/750de98b34e6d09b545ded6e635b43cbab02fe319622964175259b98f41b16052e5931c4fbd45bad8cd0a37ebdd381233edecec9ee395b8ec51f47f47d1dbcd4 + languageName: node + linkType: hard + "@babel/plugin-bugfix-safari-class-field-initializer-scope@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-bugfix-safari-class-field-initializer-scope@npm:7.27.1" @@ -727,6 +769,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-block-scoping@npm:^7.28.5": + version: 7.28.5 + resolution: "@babel/plugin-transform-block-scoping@npm:7.28.5" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10/4b695360ede8472262111efb9d5c35b515767e1ead9e272c3e9799235e3f5feeb21d99a66bb23acbba9424465d13e7695a22a22a680c4aa558702ef8aad461d6 + languageName: node + linkType: hard + "@babel/plugin-transform-class-properties@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-class-properties@npm:7.27.1" @@ -751,7 +804,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-classes@npm:^7.28.3": +"@babel/plugin-transform-classes@npm:^7.28.3, @babel/plugin-transform-classes@npm:^7.28.4": version: 7.28.4 resolution: "@babel/plugin-transform-classes@npm:7.28.4" dependencies: @@ -791,6 +844,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-destructuring@npm:^7.28.5": + version: 7.28.5 + resolution: "@babel/plugin-transform-destructuring@npm:7.28.5" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/traverse": "npm:^7.28.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10/9cc67d3377bc5d8063599f2eb4588f5f9a8ab3abc9b64a40c24501fb3c1f91f4d5cf281ea9f208fd6b2ef8d9d8b018dacf1bed9493334577c966cd32370a7036 + languageName: node + linkType: hard + "@babel/plugin-transform-dotall-regex@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-dotall-regex@npm:7.27.1" @@ -860,6 +925,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-exponentiation-operator@npm:^7.28.5": + version: 7.28.5 + resolution: "@babel/plugin-transform-exponentiation-operator@npm:7.28.5" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10/da9bb5acd35c9fba92b802641f9462b82334158a149c78a739a04576a1e62be41057a201a41c022dda263bb73ac1a26521bbc997c7fc067f54d487af297995f4 + languageName: node + linkType: hard + "@babel/plugin-transform-export-namespace-from@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-export-namespace-from@npm:7.27.1" @@ -929,6 +1005,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-logical-assignment-operators@npm:^7.28.5": + version: 7.28.5 + resolution: "@babel/plugin-transform-logical-assignment-operators@npm:7.28.5" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10/c76778f4b186cc4f0b7e3658d91c690678bdb2b9d032f189213016d6177f2564709b79b386523b022b7d52e52331fd91f280f7c7bf85d835e0758b4b0d371447 + languageName: node + linkType: hard + "@babel/plugin-transform-member-expression-literals@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-member-expression-literals@npm:7.27.1" @@ -978,6 +1065,20 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-modules-systemjs@npm:^7.28.5": + version: 7.28.5 + resolution: "@babel/plugin-transform-modules-systemjs@npm:7.28.5" + dependencies: + "@babel/helper-module-transforms": "npm:^7.28.3" + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/helper-validator-identifier": "npm:^7.28.5" + "@babel/traverse": "npm:^7.28.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10/1b91b4848845eaf6e21663d97a2a6c896553b127deaf3c2e9a2a4f041249277d13ebf71fd42d0ecbc4385e9f76093eff592fe0da0dcf1401b3f38c1615d8c539 + languageName: node + linkType: hard + "@babel/plugin-transform-modules-umd@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-modules-umd@npm:7.27.1" @@ -1061,6 +1162,21 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-object-rest-spread@npm:^7.28.4": + version: 7.28.4 + resolution: "@babel/plugin-transform-object-rest-spread@npm:7.28.4" + dependencies: + "@babel/helper-compilation-targets": "npm:^7.27.2" + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/plugin-transform-destructuring": "npm:^7.28.0" + "@babel/plugin-transform-parameters": "npm:^7.27.7" + "@babel/traverse": "npm:^7.28.4" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10/aebe464e368cefa5c3ba40316c47b61eb25f891d436b2241021efef5bd0b473c4aa5ba4b9fa0f4b4d5ce4f6bc6b727628d1ca79d54e7b8deebb5369f7dff2984 + languageName: node + linkType: hard + "@babel/plugin-transform-object-super@npm:^7.27.1": version: 7.27.1 resolution: "@babel/plugin-transform-object-super@npm:7.27.1" @@ -1096,6 +1212,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-optional-chaining@npm:^7.28.5": + version: 7.28.5 + resolution: "@babel/plugin-transform-optional-chaining@npm:7.28.5" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10/0bc900bff66d5acc13b057107eaeb6084b4cb0b124654d35b103f71f292d33dba5beac444ab4f92528583585b6e0cf34d64ce9cbb473b15d22375a4a6ed3cbac + languageName: node + linkType: hard + "@babel/plugin-transform-parameters@npm:^7.20.7, @babel/plugin-transform-parameters@npm:^7.27.7": version: 7.27.7 resolution: "@babel/plugin-transform-parameters@npm:7.27.7" @@ -1143,6 +1271,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-react-constant-elements@npm:^7.21.3": + version: 7.27.1 + resolution: "@babel/plugin-transform-react-constant-elements@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10/906ea336502a42ca942f492f386111db4041c28c08f9dcc63eb816b75a1a96121505c1522c5e721dd192bf42a244799b78a8991e4abbf3fa17748dac1b6f142e + languageName: node + linkType: hard + "@babel/plugin-transform-react-display-name@npm:^7.27.1, @babel/plugin-transform-react-display-name@npm:^7.28.0": version: 7.28.0 resolution: "@babel/plugin-transform-react-display-name@npm:7.28.0" @@ -1192,7 +1331,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-regenerator@npm:^7.28.3": +"@babel/plugin-transform-regenerator@npm:^7.28.3, @babel/plugin-transform-regenerator@npm:^7.28.4": version: 7.28.4 resolution: "@babel/plugin-transform-regenerator@npm:7.28.4" dependencies: @@ -1282,7 +1421,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-typescript@npm:^7.27.1": +"@babel/plugin-transform-typescript@npm:^7.27.1, @babel/plugin-transform-typescript@npm:^7.28.5": version: 7.28.5 resolution: "@babel/plugin-transform-typescript@npm:7.28.5" dependencies: @@ -1424,6 +1563,86 @@ __metadata: languageName: node linkType: hard +"@babel/preset-env@npm:^7.20.2": + version: 7.28.5 + resolution: "@babel/preset-env@npm:7.28.5" + dependencies: + "@babel/compat-data": "npm:^7.28.5" + "@babel/helper-compilation-targets": "npm:^7.27.2" + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/helper-validator-option": "npm:^7.27.1" + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "npm:^7.28.5" + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "npm:^7.27.1" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "npm:^7.27.1" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "npm:^7.27.1" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "npm:^7.28.3" + "@babel/plugin-proposal-private-property-in-object": "npm:7.21.0-placeholder-for-preset-env.2" + "@babel/plugin-syntax-import-assertions": "npm:^7.27.1" + "@babel/plugin-syntax-import-attributes": "npm:^7.27.1" + "@babel/plugin-syntax-unicode-sets-regex": "npm:^7.18.6" + "@babel/plugin-transform-arrow-functions": "npm:^7.27.1" + "@babel/plugin-transform-async-generator-functions": "npm:^7.28.0" + "@babel/plugin-transform-async-to-generator": "npm:^7.27.1" + "@babel/plugin-transform-block-scoped-functions": "npm:^7.27.1" + "@babel/plugin-transform-block-scoping": "npm:^7.28.5" + "@babel/plugin-transform-class-properties": "npm:^7.27.1" + "@babel/plugin-transform-class-static-block": "npm:^7.28.3" + "@babel/plugin-transform-classes": "npm:^7.28.4" + "@babel/plugin-transform-computed-properties": "npm:^7.27.1" + "@babel/plugin-transform-destructuring": "npm:^7.28.5" + "@babel/plugin-transform-dotall-regex": "npm:^7.27.1" + "@babel/plugin-transform-duplicate-keys": "npm:^7.27.1" + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "npm:^7.27.1" + "@babel/plugin-transform-dynamic-import": "npm:^7.27.1" + "@babel/plugin-transform-explicit-resource-management": "npm:^7.28.0" + "@babel/plugin-transform-exponentiation-operator": "npm:^7.28.5" + "@babel/plugin-transform-export-namespace-from": "npm:^7.27.1" + "@babel/plugin-transform-for-of": "npm:^7.27.1" + "@babel/plugin-transform-function-name": "npm:^7.27.1" + "@babel/plugin-transform-json-strings": "npm:^7.27.1" + "@babel/plugin-transform-literals": "npm:^7.27.1" + "@babel/plugin-transform-logical-assignment-operators": "npm:^7.28.5" + "@babel/plugin-transform-member-expression-literals": "npm:^7.27.1" + "@babel/plugin-transform-modules-amd": "npm:^7.27.1" + "@babel/plugin-transform-modules-commonjs": "npm:^7.27.1" + "@babel/plugin-transform-modules-systemjs": "npm:^7.28.5" + "@babel/plugin-transform-modules-umd": "npm:^7.27.1" + "@babel/plugin-transform-named-capturing-groups-regex": "npm:^7.27.1" + "@babel/plugin-transform-new-target": "npm:^7.27.1" + "@babel/plugin-transform-nullish-coalescing-operator": "npm:^7.27.1" + "@babel/plugin-transform-numeric-separator": "npm:^7.27.1" + "@babel/plugin-transform-object-rest-spread": "npm:^7.28.4" + "@babel/plugin-transform-object-super": "npm:^7.27.1" + "@babel/plugin-transform-optional-catch-binding": "npm:^7.27.1" + "@babel/plugin-transform-optional-chaining": "npm:^7.28.5" + "@babel/plugin-transform-parameters": "npm:^7.27.7" + "@babel/plugin-transform-private-methods": "npm:^7.27.1" + "@babel/plugin-transform-private-property-in-object": "npm:^7.27.1" + "@babel/plugin-transform-property-literals": "npm:^7.27.1" + "@babel/plugin-transform-regenerator": "npm:^7.28.4" + "@babel/plugin-transform-regexp-modifiers": "npm:^7.27.1" + "@babel/plugin-transform-reserved-words": "npm:^7.27.1" + "@babel/plugin-transform-shorthand-properties": "npm:^7.27.1" + "@babel/plugin-transform-spread": "npm:^7.27.1" + "@babel/plugin-transform-sticky-regex": "npm:^7.27.1" + "@babel/plugin-transform-template-literals": "npm:^7.27.1" + "@babel/plugin-transform-typeof-symbol": "npm:^7.27.1" + "@babel/plugin-transform-unicode-escapes": "npm:^7.27.1" + "@babel/plugin-transform-unicode-property-regex": "npm:^7.27.1" + "@babel/plugin-transform-unicode-regex": "npm:^7.27.1" + "@babel/plugin-transform-unicode-sets-regex": "npm:^7.27.1" + "@babel/preset-modules": "npm:0.1.6-no-external-plugins" + babel-plugin-polyfill-corejs2: "npm:^0.4.14" + babel-plugin-polyfill-corejs3: "npm:^0.13.0" + babel-plugin-polyfill-regenerator: "npm:^0.6.5" + core-js-compat: "npm:^3.43.0" + semver: "npm:^6.3.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10/e9a5136a7e34553cc70dd6594716144678a2e9ecc971caf6885c380c38fcbed8b387f3af418c9aa4b2d2765964bb4e8a2e14b709c2f165eec6ed13bda32587ea + languageName: node + linkType: hard + "@babel/preset-modules@npm:0.1.6-no-external-plugins": version: 0.1.6-no-external-plugins resolution: "@babel/preset-modules@npm:0.1.6-no-external-plugins" @@ -1437,7 +1656,7 @@ __metadata: languageName: node linkType: hard -"@babel/preset-react@npm:7.28.5": +"@babel/preset-react@npm:7.28.5, @babel/preset-react@npm:^7.18.6": version: 7.28.5 resolution: "@babel/preset-react@npm:7.28.5" dependencies: @@ -1469,6 +1688,21 @@ __metadata: languageName: node linkType: hard +"@babel/preset-typescript@npm:^7.21.0": + version: 7.28.5 + resolution: "@babel/preset-typescript@npm:7.28.5" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/helper-validator-option": "npm:^7.27.1" + "@babel/plugin-syntax-jsx": "npm:^7.27.1" + "@babel/plugin-transform-modules-commonjs": "npm:^7.27.1" + "@babel/plugin-transform-typescript": "npm:^7.28.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10/72c03e01c34906041b1813542761a283c52da1751e7ddf63191bc5fb2a0354eca30a00537c5a92951688bec3975bdc0e50ef4516b5e94cfd6d4cf947f2125bdc + languageName: node + linkType: hard + "@babel/preset-typescript@npm:^7.27.1": version: 7.27.1 resolution: "@babel/preset-typescript@npm:7.27.1" @@ -1542,7 +1776,7 @@ __metadata: languageName: node linkType: hard -"@babel/types@npm:^7.28.5": +"@babel/types@npm:^7.21.3, @babel/types@npm:^7.28.5": version: 7.28.5 resolution: "@babel/types@npm:7.28.5" dependencies: @@ -1653,6 +1887,7 @@ __metadata: "@storybook/addon-onboarding": "npm:9.1.13" "@storybook/addon-webpack5-compiler-swc": "npm:4.0.1" "@storybook/react-webpack5": "npm:9.1.13" + "@svgr/webpack": "npm:^8.1.0" babel-eslint: "npm:^10.1.0" babel-loader: "npm:^10.0.0" babel-plugin-transform-react-remove-prop-types: "npm:0.4.24" @@ -4060,6 +4295,162 @@ __metadata: languageName: node linkType: hard +"@svgr/babel-plugin-add-jsx-attribute@npm:8.0.0": + version: 8.0.0 + resolution: "@svgr/babel-plugin-add-jsx-attribute@npm:8.0.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10/3fc8e35d16f5abe0af5efe5851f27581225ac405d6a1ca44cda0df064cddfcc29a428c48c2e4bef6cebf627c9ac2f652a096030edb02cf5a120ce28d3c234710 + languageName: node + linkType: hard + +"@svgr/babel-plugin-remove-jsx-attribute@npm:8.0.0": + version: 8.0.0 + resolution: "@svgr/babel-plugin-remove-jsx-attribute@npm:8.0.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10/ff992893c6c4ac802713ba3a97c13be34e62e6d981c813af40daabcd676df68a72a61bd1e692bb1eda3587f1b1d700ea462222ae2153bb0f46886632d4f88d08 + languageName: node + linkType: hard + +"@svgr/babel-plugin-remove-jsx-empty-expression@npm:8.0.0": + version: 8.0.0 + resolution: "@svgr/babel-plugin-remove-jsx-empty-expression@npm:8.0.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10/0fb691b63a21bac00da3aa2dccec50d0d5a5b347ff408d60803b84410d8af168f2656e4ba1ee1f24dab0ae4e4af77901f2928752bb0434c1f6788133ec599ec8 + languageName: node + linkType: hard + +"@svgr/babel-plugin-replace-jsx-attribute-value@npm:8.0.0": + version: 8.0.0 + resolution: "@svgr/babel-plugin-replace-jsx-attribute-value@npm:8.0.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10/1edda65ef4f4dd8f021143c8ec276a08f6baa6f733b8e8ee2e7775597bf6b97afb47fdeefd579d6ae6c959fe2e634f55cd61d99377631212228c8cfb351b8921 + languageName: node + linkType: hard + +"@svgr/babel-plugin-svg-dynamic-title@npm:8.0.0": + version: 8.0.0 + resolution: "@svgr/babel-plugin-svg-dynamic-title@npm:8.0.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10/876cec891488992e6a9aebb8155e2bea4ec461b4718c51de36e988e00e271c6d9d01ef6be17b9effd44b2b3d7db0b41c161a5904a46ae6f38b26b387ad7f3709 + languageName: node + linkType: hard + +"@svgr/babel-plugin-svg-em-dimensions@npm:8.0.0": + version: 8.0.0 + resolution: "@svgr/babel-plugin-svg-em-dimensions@npm:8.0.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10/be0e2d391164428327d9ec469a52cea7d93189c6b0e2c290999e048f597d777852f701c64dca44cd45b31ed14a7f859520326e2e4ad7c3a4545d0aa235bc7e9a + languageName: node + linkType: hard + +"@svgr/babel-plugin-transform-react-native-svg@npm:8.1.0": + version: 8.1.0 + resolution: "@svgr/babel-plugin-transform-react-native-svg@npm:8.1.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10/85b434a57572f53bd2b9f0606f253e1fcf57b4a8c554ec3f2d43ed17f50d8cae200cb3aaf1ec9d626e1456e8b135dce530ae047eb0bed6d4bf98a752d6640459 + languageName: node + linkType: hard + +"@svgr/babel-plugin-transform-svg-component@npm:8.0.0": + version: 8.0.0 + resolution: "@svgr/babel-plugin-transform-svg-component@npm:8.0.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10/86ca139c0be0e7df05f103c5f10874387ada1434ca0286584ba9cd367c259d74bf9c86700b856449f46cf674bd6f0cf18f8f034f6d3f0e2ce5e5435c25dbff4b + languageName: node + linkType: hard + +"@svgr/babel-preset@npm:8.1.0": + version: 8.1.0 + resolution: "@svgr/babel-preset@npm:8.1.0" + dependencies: + "@svgr/babel-plugin-add-jsx-attribute": "npm:8.0.0" + "@svgr/babel-plugin-remove-jsx-attribute": "npm:8.0.0" + "@svgr/babel-plugin-remove-jsx-empty-expression": "npm:8.0.0" + "@svgr/babel-plugin-replace-jsx-attribute-value": "npm:8.0.0" + "@svgr/babel-plugin-svg-dynamic-title": "npm:8.0.0" + "@svgr/babel-plugin-svg-em-dimensions": "npm:8.0.0" + "@svgr/babel-plugin-transform-react-native-svg": "npm:8.1.0" + "@svgr/babel-plugin-transform-svg-component": "npm:8.0.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10/3a67930f080b8891e1e8e2595716b879c944d253112bae763dce59807ba23454d162216c8d66a0a0e3d4f38a649ecd6c387e545d1e1261dd69a68e9a3392ee08 + languageName: node + linkType: hard + +"@svgr/core@npm:8.1.0": + version: 8.1.0 + resolution: "@svgr/core@npm:8.1.0" + dependencies: + "@babel/core": "npm:^7.21.3" + "@svgr/babel-preset": "npm:8.1.0" + camelcase: "npm:^6.2.0" + cosmiconfig: "npm:^8.1.3" + snake-case: "npm:^3.0.4" + checksum: 10/bc98cd5fc349ab9dcf0c13c2279164726d45878cdac8999090765379c6e897a1b24aca641c12a3c33f578d06f7a09252fb090962a4695c753fb02b627a56bfe6 + languageName: node + linkType: hard + +"@svgr/hast-util-to-babel-ast@npm:8.0.0": + version: 8.0.0 + resolution: "@svgr/hast-util-to-babel-ast@npm:8.0.0" + dependencies: + "@babel/types": "npm:^7.21.3" + entities: "npm:^4.4.0" + checksum: 10/243aa9c92d66aa3f1fc82851fe1fa376808a08fcc02719fed38ebfb4e25cf3e3c1282c185300c29953d047c36acb9e3ac588d46b0af55a3b7a5186a6badec8a9 + languageName: node + linkType: hard + +"@svgr/plugin-jsx@npm:8.1.0": + version: 8.1.0 + resolution: "@svgr/plugin-jsx@npm:8.1.0" + dependencies: + "@babel/core": "npm:^7.21.3" + "@svgr/babel-preset": "npm:8.1.0" + "@svgr/hast-util-to-babel-ast": "npm:8.0.0" + svg-parser: "npm:^2.0.4" + peerDependencies: + "@svgr/core": "*" + checksum: 10/0418a9780753d3544912ee2dad5d2cf8d12e1ba74df8053651b3886aeda54d5f0f7d2dece0af5e0d838332c4f139a57f0dabaa3ca1afa4d1a765efce6a7656f2 + languageName: node + linkType: hard + +"@svgr/plugin-svgo@npm:8.1.0": + version: 8.1.0 + resolution: "@svgr/plugin-svgo@npm:8.1.0" + dependencies: + cosmiconfig: "npm:^8.1.3" + deepmerge: "npm:^4.3.1" + svgo: "npm:^3.0.2" + peerDependencies: + "@svgr/core": "*" + checksum: 10/59d9d214cebaacca9ca71a561f463d8b7e5a68ca9443e4792a42d903acd52259b1790c0680bc6afecc3f00a255a6cbd7ea278a9f625bac443620ea58a590c2d0 + languageName: node + linkType: hard + +"@svgr/webpack@npm:^8.1.0": + version: 8.1.0 + resolution: "@svgr/webpack@npm:8.1.0" + dependencies: + "@babel/core": "npm:^7.21.3" + "@babel/plugin-transform-react-constant-elements": "npm:^7.21.3" + "@babel/preset-env": "npm:^7.20.2" + "@babel/preset-react": "npm:^7.18.6" + "@babel/preset-typescript": "npm:^7.21.0" + "@svgr/core": "npm:8.1.0" + "@svgr/plugin-jsx": "npm:8.1.0" + "@svgr/plugin-svgo": "npm:8.1.0" + checksum: 10/c6eec5b0cf2fb2ecd3a7a362d272eda35330b17c76802a3481f499b5d07ff8f87b31d2571043bff399b051a1767b1e2e499dbf186104d1c06d76f9f1535fac01 + languageName: node + linkType: hard + "@swc/core-darwin-arm64@npm:1.13.20": version: 1.13.20 resolution: "@swc/core-darwin-arm64@npm:1.13.20" @@ -4216,6 +4607,13 @@ __metadata: languageName: node linkType: hard +"@trysound/sax@npm:0.2.0": + version: 0.2.0 + resolution: "@trysound/sax@npm:0.2.0" + checksum: 10/7379713eca480ac0d9b6c7b063e06b00a7eac57092354556c81027066eb65b61ea141a69d0cc2e15d32e05b2834d4c9c2184793a5e36bbf5daf05ee5676af18c + languageName: node + linkType: hard + "@tufjs/canonical-json@npm:2.0.0": version: 2.0.0 resolution: "@tufjs/canonical-json@npm:2.0.0" @@ -7390,7 +7788,7 @@ __metadata: languageName: node linkType: hard -"camelcase@npm:^6.3.0": +"camelcase@npm:^6.2.0, camelcase@npm:^6.3.0": version: 6.3.0 resolution: "camelcase@npm:6.3.0" checksum: 10/8c96818a9076434998511251dcb2761a94817ea17dbdc37f47ac080bd088fc62c7369429a19e2178b993497132c8cbcf5cc1f44ba963e76782ba469c0474938d @@ -8242,6 +8640,23 @@ __metadata: languageName: node linkType: hard +"cosmiconfig@npm:^8.1.3": + version: 8.3.6 + resolution: "cosmiconfig@npm:8.3.6" + dependencies: + import-fresh: "npm:^3.3.0" + js-yaml: "npm:^4.1.0" + parse-json: "npm:^5.2.0" + path-type: "npm:^4.0.0" + peerDependencies: + typescript: ">=4.9.5" + peerDependenciesMeta: + typescript: + optional: true + checksum: 10/91d082baca0f33b1c085bf010f9ded4af43cbedacba8821da0fb5667184d0a848addc52c31fadd080007f904a555319c238cf5f4c03e6d58ece2e4876b2e73d6 + languageName: node + linkType: hard + "create-react-class@npm:^15.7.0": version: 15.7.0 resolution: "create-react-class@npm:15.7.0" @@ -8346,6 +8761,16 @@ __metadata: languageName: node linkType: hard +"css-tree@npm:^2.3.1": + version: 2.3.1 + resolution: "css-tree@npm:2.3.1" + dependencies: + mdn-data: "npm:2.0.30" + source-map-js: "npm:^1.0.1" + checksum: 10/e5e39b82eb4767c664fa5c2cd9968c8c7e6b7fd2c0079b52680a28466d851e2826d5e64699c449d933c0e8ca0554beca43c41a9fcb09fb6a46139d462dbdf0df + languageName: node + linkType: hard + "css-tree@npm:^3.0.1": version: 3.1.0 resolution: "css-tree@npm:3.1.0" @@ -9435,7 +9860,7 @@ __metadata: languageName: node linkType: hard -"entities@npm:^4.2.0": +"entities@npm:^4.2.0, entities@npm:^4.4.0": version: 4.5.0 resolution: "entities@npm:4.5.0" checksum: 10/ede2a35c9bce1aeccd055a1b445d41c75a14a2bb1cd22e242f20cf04d236cdcd7f9c859eb83f76885327bfae0c25bf03303665ee1ce3d47c5927b98b0e3e3d48 @@ -14277,6 +14702,13 @@ __metadata: languageName: node linkType: hard +"mdn-data@npm:2.0.30": + version: 2.0.30 + resolution: "mdn-data@npm:2.0.30" + checksum: 10/e4944322bf3e0461a2daa2aee7e14e208960a036289531e4ef009e53d32bd41528350c070c4a33be867980443fe4c0523518d99318423cffa7c825fe7b1154e2 + languageName: node + linkType: hard + "mdn-data@npm:2.12.2": version: 2.12.2 resolution: "mdn-data@npm:2.12.2" @@ -19362,6 +19794,16 @@ __metadata: languageName: node linkType: hard +"snake-case@npm:^3.0.4": + version: 3.0.4 + resolution: "snake-case@npm:3.0.4" + dependencies: + dot-case: "npm:^3.0.4" + tslib: "npm:^2.0.3" + checksum: 10/0a7a79900bbb36f8aaa922cf111702a3647ac6165736d5dc96d3ef367efc50465cac70c53cd172c382b022dac72ec91710608e5393de71f76d7142e6fd80e8a3 + languageName: node + linkType: hard + "socket.io-adapter@npm:~2.5.2": version: 2.5.5 resolution: "socket.io-adapter@npm:2.5.5" @@ -20024,6 +20466,13 @@ __metadata: languageName: node linkType: hard +"svg-parser@npm:^2.0.4": + version: 2.0.4 + resolution: "svg-parser@npm:2.0.4" + checksum: 10/ec196da6ea21481868ab26911970e35488361c39ead1c6cdd977ba16c885c21a91ddcbfd113bfb01f79a822e2a751ef85b2f7f95e2cb9245558ebce12c34af1f + languageName: node + linkType: hard + "svg-url-loader@npm:^8.0.0": version: 8.0.0 resolution: "svg-url-loader@npm:8.0.0" @@ -20035,6 +20484,23 @@ __metadata: languageName: node linkType: hard +"svgo@npm:^3.0.2": + version: 3.3.2 + resolution: "svgo@npm:3.3.2" + dependencies: + "@trysound/sax": "npm:0.2.0" + commander: "npm:^7.2.0" + css-select: "npm:^5.1.0" + css-tree: "npm:^2.3.1" + css-what: "npm:^6.1.0" + csso: "npm:^5.0.5" + picocolors: "npm:^1.0.0" + bin: + svgo: ./bin/svgo + checksum: 10/82fdea9b938884d808506104228e4d3af0050d643d5b46ff7abc903ff47a91bbf6561373394868aaf07a28f006c4057b8fbf14bbd666298abdd7cc590d4f7700 + languageName: node + linkType: hard + "svgo@npm:^4.0.0": version: 4.0.0 resolution: "svgo@npm:4.0.0" From 757eaac7880030082c3a699021355d362439a115 Mon Sep 17 00:00:00 2001 From: Brian Dukes Date: Thu, 20 Nov 2025 14:21:24 -0600 Subject: [PATCH 163/199] Use SVGR for remaining icons --- .../src/Tooltip/CustomIcon.jsx | 8 ++-- .../ClientSide/Extensions.Web/package.json | 1 + .../Body/AvailableExtensions/index.jsx | 4 +- .../Body/InstalledExtensions/index.jsx | 3 +- .../FileUpload/UploadBar.jsx | 15 +++--- .../FileUpload/index.jsx | 7 +-- .../Extensions.Web/webpack.config.js | 7 ++- .../ClientSide/Licensing.Web/package.json | 1 + .../src/components/platform/index.jsx | 20 ++++---- .../Licensing.Web/webpack.config.js | 4 +- .../ClientSide/Pages.Web/package.json | 1 + .../DropdownDayPicker/DropdownDayPicker.jsx | 11 ++--- .../SearchPage/SearchAdvancedDetails.jsx | 2 +- .../ClientSide/Pages.Web/webpack.config.js | 5 ++ .../ClientSide/Roles.Web/package.json | 1 + .../src/components/roles/RoleRow/index.jsx | 4 +- .../roles/UsersInRole/UserRow/index.jsx | 4 +- .../ClientSide/Roles.Web/webpack.config.js | 11 ++--- .../ClientSide/Security.Web/package.json | 1 + .../src/components/ipFilters/index.jsx | 4 +- .../ipFilters/ipFilterRow/index.jsx | 16 +++---- .../components/securityBulletins/index.jsx | 4 +- .../ClientSide/Security.Web/webpack.config.js | 4 +- .../ClientSide/Servers.Web/package.json | 1 + .../Tabs/Upgrades/Upload/UploadBar.tsx | 13 ++---- .../components/Tabs/Upgrades/Upload/index.tsx | 5 +- .../ClientSide/Servers.Web/webpack.config.js | 7 ++- .../SiteImportExport.Web/package.json | 1 + .../src/components/ImportModal/index.jsx | 4 +- .../SiteImportExport.Web/webpack.config.js | 10 +--- .../ClientSide/SiteSettings.Web/package.json | 1 + .../resourceEditor/fullEditor.jsx | 46 +++++++++++++++---- .../SiteSettings.Web/webpack.config.js | 6 +-- .../ClientSide/TaskScheduler.Web/package.json | 1 + .../src/components/history/index.jsx | 4 +- .../history/taskHistoryItemRow/index.jsx | 4 +- .../scheduler/schedulerRow/index.jsx | 9 ++-- .../taskQueue/LeftPane/LeftPane.jsx | 8 ++-- .../src/components/taskQueue/index.jsx | 4 +- .../src/components/topPane/index.jsx | 4 +- .../TaskScheduler.Web/webpack.config.js | 9 ++-- .../ClientSide/Themes.Web/package.json | 1 + .../src/components/Body/ThemeList/index.jsx | 4 +- .../ClientSide/Themes.Web/webpack.config.js | 8 ++-- .../ClientSide/Vocabularies.Web/package.json | 1 + .../VocabularyList/TermHeader/index.jsx | 9 ++-- .../Vocabularies.Web/webpack.config.js | 6 +-- yarn.lock | 11 +++++ 48 files changed, 180 insertions(+), 135 deletions(-) diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Tooltip/CustomIcon.jsx b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Tooltip/CustomIcon.jsx index 14c90c75d9f..639f9d56960 100644 --- a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Tooltip/CustomIcon.jsx +++ b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Tooltip/CustomIcon.jsx @@ -1,10 +1,10 @@ import React from "react"; import PropTypes from "prop-types"; - -const CustomIcon = props => ( -
      -); + const CustomIcon = props => { + let Icon = props.icon; + return
      ; +}; CustomIcon.propTypes = { icon: PropTypes.string }; diff --git a/Dnn.AdminExperience/ClientSide/Extensions.Web/package.json b/Dnn.AdminExperience/ClientSide/Extensions.Web/package.json index 0536b69cd24..6181c10ebfd 100644 --- a/Dnn.AdminExperience/ClientSide/Extensions.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Extensions.Web/package.json @@ -14,6 +14,7 @@ "@babel/preset-env": "^7.28.3", "@babel/preset-react": "^7.27.1", "@dnnsoftware/dnn-react-common": "10.1.0", + "@svgr/webpack": "^8.1.0", "babel-loader": "10.0.0", "babel-plugin-transform-object-assign": "6.22.0", "babel-plugin-transform-object-rest-spread": "6.26.0", diff --git a/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/Body/AvailableExtensions/index.jsx b/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/Body/AvailableExtensions/index.jsx index e467fbab49f..f4ac169a5e4 100644 --- a/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/Body/AvailableExtensions/index.jsx +++ b/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/Body/AvailableExtensions/index.jsx @@ -5,6 +5,7 @@ import { ExtensionActions, VisiblePanelActions, InstallationActions } from "acti import Localization from "localization"; import { GridCell, DropdownWithError } from "@dnnsoftware/dnn-react-common"; import ExtensionList from "./ExtensionList"; +import FetchingIcon from "../../../img/fetching.svg"; import "./style.less"; class AvailableExtensions extends Component { @@ -99,11 +100,10 @@ class AvailableExtensions extends Component { } renderLoading() { - /* eslint-disable no-undef */ return

      {Localization.get("Loading")}

      {Localization.get("Loading.Tooltip")}

      -
      +
      ; /* eslint-enable no-undef */ } diff --git a/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/Body/InstalledExtensions/index.jsx b/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/Body/InstalledExtensions/index.jsx index 65815e049c6..a53ec4daa56 100644 --- a/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/Body/InstalledExtensions/index.jsx +++ b/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/Body/InstalledExtensions/index.jsx @@ -5,6 +5,7 @@ import { ExtensionActions, PaginationActions, VisiblePanelActions } from "action import Localization from "localization"; import ExtensionList from "./ExtensionList"; import { GridCell, DropdownWithError } from "@dnnsoftware/dnn-react-common"; +import FetchingIcon from "../../../img/fetching.svg"; import "./style.less"; class InstalledExtensions extends Component { @@ -74,7 +75,7 @@ class InstalledExtensions extends Component { return

      {Localization.get("Loading")}

      {Localization.get("Loading.Tooltip")}

      -
      +
      ; /* eslint-enable no-undef */ } diff --git a/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/InstallExtensionModal/FileUpload/UploadBar.jsx b/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/InstallExtensionModal/FileUpload/UploadBar.jsx index 5f4f372c7be..93d43ce68f8 100644 --- a/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/InstallExtensionModal/FileUpload/UploadBar.jsx +++ b/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/InstallExtensionModal/FileUpload/UploadBar.jsx @@ -1,11 +1,8 @@ import React, { Component } from "react"; import PropTypes from "prop-types"; - -/* eslint-disable no-undef */ -const upload = require("!raw-loader!./img/upload.svg").default; -const checkmark = require("!raw-loader!./img/checkmark.svg").default; -const errorIcon = require("!raw-loader!./img/x.svg").default; -/* eslint-enable no-undef */ +import Upload from "./img/upload.svg"; +import Checkmark from "./img/checkmark.svg"; +import ErrorIcon from "./img/x.svg"; export default class UploadBar extends Component { constructor() { @@ -58,14 +55,14 @@ export default class UploadBar extends Component { let percent = props.errorText ? 0 : this.state.percent; let text = props.uploadComplete ? props.uploadCompleteText : props.uploadingText; text = props.errorText ? props.errorText : text; - let svg = props.uploadComplete ? checkmark : upload; - svg = props.errorText ? errorIcon : svg; + let UploadIcon = props.uploadComplete ? Checkmark : Upload; + UploadIcon = props.errorText ? ErrorIcon : UploadIcon; const className = "file-upload-container dnn-upload-bar" + (props.uploadComplete ? " complete" : "") + (props.errorText ? " upload-error" : ""); return
      {this.props.fileName || "myImage.jpg"}
      -
      +

      {text}

      {props.errorInPackage &&

      diff --git a/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/InstallExtensionModal/FileUpload/index.jsx b/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/InstallExtensionModal/FileUpload/index.jsx index eb636b341b6..5a4ac2a108f 100644 --- a/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/InstallExtensionModal/FileUpload/index.jsx +++ b/Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/InstallExtensionModal/FileUpload/index.jsx @@ -5,6 +5,7 @@ import AlreadyInstalled from "./AlreadyInstalled"; import Localization from "localization"; import LogDisplay from "./LogDisplay"; import { RadioButtons } from "@dnnsoftware/dnn-react-common"; +import UploadIcon from "./img/upload.svg"; import "./style.less"; export default class FileUpload extends Component { @@ -150,10 +151,6 @@ export default class FileUpload extends Component { this.onDragLeave(); } render() { - /* eslint-disable quotes */ - // eslint-disable-next-line no-undef - const svg = require(`!raw-loader!./img/upload.svg`).default; - const buttonsStyle = { width: 67 }; let className = "overlay" + (this.state.draggedOver ? " hover" : ""); @@ -172,7 +169,7 @@ export default class FileUpload extends Component { className="button upload" onMouseEnter={this.onMouseEnter.bind(this, Localization.get("InstallExtension_UploadAFile"))} onMouseLeave={this.onMouseLeave.bind(this)}> -

      +
      diff --git a/Dnn.AdminExperience/ClientSide/Extensions.Web/webpack.config.js b/Dnn.AdminExperience/ClientSide/Extensions.Web/webpack.config.js index c99c39f03a2..719c49e2e60 100644 --- a/Dnn.AdminExperience/ClientSide/Extensions.Web/webpack.config.js +++ b/Dnn.AdminExperience/ClientSide/Extensions.Web/webpack.config.js @@ -110,9 +110,14 @@ module.exports = (env, argv) => { use: { loader: "url-loader?mimetype=application/font-woff", }, + }, + { + test: /\.svg$/i, + issuer: /\.[jt]sx?$/, + use: ["@svgr/webpack"], }, { - test: /\.(ttf|eot|svg)(\?v=[0-9].[0-9].[0-9])?$/, + test: /\.(ttf|eot)(\?v=[0-9].[0-9].[0-9])?$/, use: { loader: "file-loader?name=[name].[ext]", }, diff --git a/Dnn.AdminExperience/ClientSide/Licensing.Web/package.json b/Dnn.AdminExperience/ClientSide/Licensing.Web/package.json index 25a03b4a329..7d8070bec32 100644 --- a/Dnn.AdminExperience/ClientSide/Licensing.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Licensing.Web/package.json @@ -14,6 +14,7 @@ "@babel/preset-env": "^7.28.3", "@babel/preset-react": "^7.27.1", "@dnnsoftware/dnn-react-common": "10.1.0", + "@svgr/webpack": "^8.1.0", "array.prototype.find": "2.2.3", "array.prototype.findindex": "2.2.4", "babel-loader": "10.0.0", diff --git a/Dnn.AdminExperience/ClientSide/Licensing.Web/src/components/platform/index.jsx b/Dnn.AdminExperience/ClientSide/Licensing.Web/src/components/platform/index.jsx index 100d9adfb4a..cc54176b6de 100644 --- a/Dnn.AdminExperience/ClientSide/Licensing.Web/src/components/platform/index.jsx +++ b/Dnn.AdminExperience/ClientSide/Licensing.Web/src/components/platform/index.jsx @@ -1,16 +1,14 @@ import React, { Component } from "react"; import PropTypes from "prop-types"; import { connect } from "react-redux"; -import { - licensing as LicensingActions -} from "../../actions"; +import { licensing as LicensingActions } from "../../actions"; import resx from "../../resources"; import styles from "./style.module.less"; -import dnnTechnologyEditorialIcon from "./../svg/dnn_technology_editorial.svg?raw"; -import githubIcon from "./../svg/github.svg?raw"; -import dnnIcon from "./../svg/dnn_logo_primary.svg?raw"; -import docsIcon from "./../svg/dnn_docs_logo.svg?raw"; +import DnnTechnologyEditorialIcon from "./../svg/dnn_technology_editorial.svg"; +import GithubIcon from "./../svg/github.svg"; +import DnnIcon from "./../svg/dnn_logo_primary.svg"; +import DocsIcon from "./../svg/dnn_docs_logo.svg"; class Platform extends Component { constructor() { @@ -39,21 +37,21 @@ class Platform extends Component {
      -
      +
      {resx.get("Docs.Header") }
      {resx.get("Docs") }
      -
      +
      {resx.get("Community.Header") }
      {resx.get("Community") }
      -
      +
      {resx.get("GitHub.Header")}
      {resx.get("GitHub")}
      @@ -74,7 +72,7 @@ class Platform extends Component {
      {this.renderVersion()}
      -
      +
      {resx.get("Intro.Header") }
      {resx.get("Intro") }
      diff --git a/Dnn.AdminExperience/ClientSide/Licensing.Web/webpack.config.js b/Dnn.AdminExperience/ClientSide/Licensing.Web/webpack.config.js index 7a8bc60dc91..0d4939ac82b 100644 --- a/Dnn.AdminExperience/ClientSide/Licensing.Web/webpack.config.js +++ b/Dnn.AdminExperience/ClientSide/Licensing.Web/webpack.config.js @@ -81,8 +81,8 @@ module.exports = (env, argv) => { }, { test: /\.svg$/i, - resourceQuery: /raw/, // *.svg?raw - use: "raw-loader", + issuer: /\.[jt]sx?$/, + use: ["@svgr/webpack"], }, ], }, diff --git a/Dnn.AdminExperience/ClientSide/Pages.Web/package.json b/Dnn.AdminExperience/ClientSide/Pages.Web/package.json index 12f8ecc078b..056b8b02418 100644 --- a/Dnn.AdminExperience/ClientSide/Pages.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Pages.Web/package.json @@ -24,6 +24,7 @@ "@babel/preset-env": "^7.28.3", "@babel/preset-react": "^7.27.1", "@dnnsoftware/dnn-react-common": "10.1.0", + "@svgr/webpack": "^8.1.0", "@types/knockout": "^3.4.77", "@types/redux": "3.6.31", "babel-eslint": "^10.1.0", diff --git a/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/DropdownDayPicker/DropdownDayPicker.jsx b/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/DropdownDayPicker/DropdownDayPicker.jsx index e991a034424..9220c604b29 100644 --- a/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/DropdownDayPicker/DropdownDayPicker.jsx +++ b/Dnn.AdminExperience/ClientSide/Pages.Web/src/components/DropdownDayPicker/DropdownDayPicker.jsx @@ -32,8 +32,8 @@ class DropdownDayPicker extends Component { render() { - const {dropdownIsActive, onDayClick, applyChanges, clearChanges, startDate, endDate, CalendarIcon, toggleDropdownCalendar} = this.props; - + const {dropdownIsActive, onDayClick, applyChanges, clearChanges, startDate, endDate, toggleDropdownCalendar} = this.props; + const CalendarIcon = this.props.calendarIcon; return (
      this.node = node}> @@ -41,10 +41,9 @@ class DropdownDayPicker extends Component {

      {this.props.label}

      -
      toggleDropdownCalendar() }/> + onClick={()=>toggleDropdownCalendar() }>
      diff --git a/Dnn.AdminExperience/ClientSide/Pages.Web/webpack.config.js b/Dnn.AdminExperience/ClientSide/Pages.Web/webpack.config.js index 90f2274464f..bf5945dfe75 100644 --- a/Dnn.AdminExperience/ClientSide/Pages.Web/webpack.config.js +++ b/Dnn.AdminExperience/ClientSide/Pages.Web/webpack.config.js @@ -85,6 +85,11 @@ module.exports = (env, argv) => { resourceQuery: /raw/, use: "raw-loader", }, + { + test: /\.svg$/i, + issuer: /\.[jt]sx?$/, + use: ["@svgr/webpack"], + }, ], }, resolve: { diff --git a/Dnn.AdminExperience/ClientSide/Roles.Web/package.json b/Dnn.AdminExperience/ClientSide/Roles.Web/package.json index 99c5a4156f2..489c525535a 100644 --- a/Dnn.AdminExperience/ClientSide/Roles.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Roles.Web/package.json @@ -14,6 +14,7 @@ "@babel/preset-env": "^7.28.3", "@babel/preset-react": "^7.27.1", "@dnnsoftware/dnn-react-common": "10.1.0", + "@svgr/webpack": "^8.1.0", "array.prototype.find": "^2.2.3", "array.prototype.findindex": "^2.2.4", "babel-loader": "^10.0.0", diff --git a/Dnn.AdminExperience/ClientSide/Roles.Web/src/components/roles/RoleRow/index.jsx b/Dnn.AdminExperience/ClientSide/Roles.Web/src/components/roles/RoleRow/index.jsx index 7913e1adb37..452e4cb4747 100644 --- a/Dnn.AdminExperience/ClientSide/Roles.Web/src/components/roles/RoleRow/index.jsx +++ b/Dnn.AdminExperience/ClientSide/Roles.Web/src/components/roles/RoleRow/index.jsx @@ -4,7 +4,7 @@ import "./style.less"; import { Collapsible, GridCell, IconButton } from "@dnnsoftware/dnn-react-common"; import resx from "resources"; import util from "utils"; -import checkIcon from "../../../img/common/checkmark.svg?raw"; +import CheckIcon from "../../../img/common/checkmark.svg"; let canEdit = false; @@ -81,7 +81,7 @@ class RoleRow extends Component { {props.userCount} - {props.auto ? :
       
      }
      + {props.auto ? :
       
      } {canEdit && {props.id !== "add" && props.roleIsApproved && diff --git a/Dnn.AdminExperience/ClientSide/Roles.Web/src/components/roles/UsersInRole/UserRow/index.jsx b/Dnn.AdminExperience/ClientSide/Roles.Web/src/components/roles/UsersInRole/UserRow/index.jsx index f09be49d474..c09c994de6c 100644 --- a/Dnn.AdminExperience/ClientSide/Roles.Web/src/components/roles/UsersInRole/UserRow/index.jsx +++ b/Dnn.AdminExperience/ClientSide/Roles.Web/src/components/roles/UsersInRole/UserRow/index.jsx @@ -6,7 +6,7 @@ import { GridCell, DatePicker, IconButton } from "@dnnsoftware/dnn-react-common import util from "../../../../utils"; import resx from "../../../../resources"; import { roleUsers as RoleUsersActions } from "../../../../actions"; -import xIcon from "../../../../img/common/x.svg?raw"; +import XIcon from "../../../../img/common/x.svg"; class UserRow extends Component { @@ -108,7 +108,7 @@ class UserRow extends Component { showIcon={true} showInput={false} onIconClick={this.onExpiresTimeClick.bind(this, props.userDetails, props.index) } /> : null; - let deleteAction = props.userDetails.allowDelete ? : null; + let deleteAction = props.userDetails.allowDelete ? : null; return
      {deleteAction} {expiresTimeAction} diff --git a/Dnn.AdminExperience/ClientSide/Roles.Web/webpack.config.js b/Dnn.AdminExperience/ClientSide/Roles.Web/webpack.config.js index 0beb0f67a55..0642ec1c330 100644 --- a/Dnn.AdminExperience/ClientSide/Roles.Web/webpack.config.js +++ b/Dnn.AdminExperience/ClientSide/Roles.Web/webpack.config.js @@ -61,14 +61,13 @@ module.exports = (env, argv) => { use: ["url-loader?mimetype=application/font-woff"], }, { - test: /\.svg$/i, - resourceQuery: /raw/, // *.svg?raw - use: "raw-loader", + test: /\.(ttf|eot|)(\?v=[0-9].[0-9].[0-9])?$/, + use: ["file-loader?name=[name].[ext]"], }, { - test: /\.(ttf|eot|svg)(\?v=[0-9].[0-9].[0-9])?$/, - resourceQuery: { not: /raw/ }, // Exclude *.svg?raw from file-loader - use: ["file-loader?name=[name].[ext]"], + test: /\.svg$/i, + issuer: /\.[jt]sx?$/, + use: ["@svgr/webpack"], }, ], }, diff --git a/Dnn.AdminExperience/ClientSide/Security.Web/package.json b/Dnn.AdminExperience/ClientSide/Security.Web/package.json index 696f54eefe7..32eb25f3c84 100644 --- a/Dnn.AdminExperience/ClientSide/Security.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Security.Web/package.json @@ -16,6 +16,7 @@ "@babel/preset-env": "^7.28.3", "@babel/preset-react": "^7.27.1", "@dnnsoftware/dnn-react-common": "10.1.0", + "@svgr/webpack": "^8.1.0", "babel-loader": "10.0.0", "babel-plugin-transform-react-remove-prop-types": "0.4.24", "create-react-class": "^15.7.0", diff --git a/Dnn.AdminExperience/ClientSide/Security.Web/src/components/ipFilters/index.jsx b/Dnn.AdminExperience/ClientSide/Security.Web/src/components/ipFilters/index.jsx index 8b734ca719f..f284b9a375b 100644 --- a/Dnn.AdminExperience/ClientSide/Security.Web/src/components/ipFilters/index.jsx +++ b/Dnn.AdminExperience/ClientSide/Security.Web/src/components/ipFilters/index.jsx @@ -7,8 +7,8 @@ import IpFilterEditor from "./ipfilterEditor"; import util from "../../utils"; import resx from "../../resources"; import { SvgIcons } from "@dnnsoftware/dnn-react-common"; +import WarningIcon from "./../svg/error.svg"; import styles from "./style.module.less"; -import warningIcon from "./../svg/error.svg?raw"; let tableFields = []; @@ -122,7 +122,7 @@ class IpFiltersPanelBody extends Component {
      {!this.props.enableIPChecking &&
      -
      +
      {resx.get("IPFiltersDisabled") }
      } diff --git a/Dnn.AdminExperience/ClientSide/Security.Web/src/components/ipFilters/ipFilterRow/index.jsx b/Dnn.AdminExperience/ClientSide/Security.Web/src/components/ipFilters/ipFilterRow/index.jsx index 906093cb73d..7991614c2aa 100644 --- a/Dnn.AdminExperience/ClientSide/Security.Web/src/components/ipFilters/ipFilterRow/index.jsx +++ b/Dnn.AdminExperience/ClientSide/Security.Web/src/components/ipFilters/ipFilterRow/index.jsx @@ -3,10 +3,10 @@ import PropTypes from "prop-types"; import { Collapsible } from "@dnnsoftware/dnn-react-common"; import "./style.less"; import resx from "../../../resources"; -import allowIcon from "./../../svg/checkbox.svg?raw"; -import denyIcon from "./../../svg/cross_out.svg?raw"; -import editIcon from "./../../svg/edit.svg?raw"; -import deleteIcon from "./../../svg/trash.svg?raw"; +import AllowIcon from "./../../svg/checkbox.svg"; +import DenyIcon from "./../../svg/cross_out.svg"; +import EditIcon from "./../../svg/edit.svg"; +import DeleteIcon from "./../../svg/trash.svg"; class IpFilterRow extends Component { constructor() { @@ -35,7 +35,7 @@ class IpFilterRow extends Component { if (props.ruleType === 1) { return (
      -
      +
      {resx.get("AllowIP") }
      ); @@ -43,7 +43,7 @@ class IpFilterRow extends Component { else { return (
      -
      +
      {resx.get("DenyIP") }
      ); @@ -75,8 +75,8 @@ class IpFilterRow extends Component {
      {props.id !== "add" && !props.readOnly &&
      -
      -
      +
      +
      }
      diff --git a/Dnn.AdminExperience/ClientSide/Security.Web/src/components/securityBulletins/index.jsx b/Dnn.AdminExperience/ClientSide/Security.Web/src/components/securityBulletins/index.jsx index 276f7e74569..66bddfeffa8 100644 --- a/Dnn.AdminExperience/ClientSide/Security.Web/src/components/securityBulletins/index.jsx +++ b/Dnn.AdminExperience/ClientSide/Security.Web/src/components/securityBulletins/index.jsx @@ -5,7 +5,7 @@ import { security as SecurityActions } from "../../actions"; import BulletinItemRow from "./bulletinItemRow"; import resx from "../../resources"; import styles from "./style.module.less"; -import warningIcon from "./../svg/error.svg?raw"; +import WarningIcon from "./../svg/error.svg"; class SecurityBulletinsPanelBody extends Component { constructor() { @@ -82,7 +82,7 @@ class SecurityBulletinsPanelBody extends Component { return (
      -
      +
      {state.error}
      diff --git a/Dnn.AdminExperience/ClientSide/Security.Web/webpack.config.js b/Dnn.AdminExperience/ClientSide/Security.Web/webpack.config.js index 586180ba4f1..f5de961c912 100644 --- a/Dnn.AdminExperience/ClientSide/Security.Web/webpack.config.js +++ b/Dnn.AdminExperience/ClientSide/Security.Web/webpack.config.js @@ -79,8 +79,8 @@ module.exports = (env, argv) => { }, { test: /\.svg$/i, - resourceQuery: /raw/, // *.svg?raw - use: "raw-loader", + issuer: /\.[jt]sx?$/, + use: ["@svgr/webpack"], }, ], }, diff --git a/Dnn.AdminExperience/ClientSide/Servers.Web/package.json b/Dnn.AdminExperience/ClientSide/Servers.Web/package.json index ee264eba3bb..be55b13e810 100644 --- a/Dnn.AdminExperience/ClientSide/Servers.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Servers.Web/package.json @@ -16,6 +16,7 @@ "@babel/preset-react": "^7.27.1", "@babel/preset-typescript": "^7.27.1", "@dnnsoftware/dnn-react-common": "10.1.0", + "@svgr/webpack": "^8.1.0", "@types/react": "^19.2.2", "@types/react-dom": "^19.2.2", "@types/redux": "^3.6.31", diff --git a/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/Upload/UploadBar.tsx b/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/Upload/UploadBar.tsx index a489fac4c03..af6eb8fb4e5 100644 --- a/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/Upload/UploadBar.tsx +++ b/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/Upload/UploadBar.tsx @@ -1,10 +1,7 @@ import React from "react"; - -/* eslint-disable no-undef */ -const upload = require("!raw-loader!./img/upload.svg").default; -const checkmark = require("!raw-loader!./img/checkmark.svg").default; -const errorIcon = require("!raw-loader!./img/x.svg").default; -/* eslint-enable no-undef */ +import Upload from "./img/upload.svg"; +import Checkmark from "./img/checkmark.svg"; +import ErrorIcon from "./img/x.svg"; interface UploadBarProps { errorText?: string; @@ -29,7 +26,7 @@ const UploadBar: React.FC = ({ }) => { const displayPercent = errorText ? 0 : percent; const text = errorText ? errorText : (percent === 100 ? uploadCompleteText : uploadingText); - const svg = errorText ? errorIcon : (percent === 100 ? checkmark : upload); + const UploadIcon = errorText ? ErrorIcon : (percent === 100 ? Checkmark : Upload); const className = "file-upload-container dnn-upload-bar" + (percent === 100 ? " complete" : "") + (errorText ? " upload-error" : ""); @@ -38,7 +35,7 @@ const UploadBar: React.FC = ({
      {fileName || "myImage.jpg"}
      -
      +

      {text}

      {errorInPackage && (

      diff --git a/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/Upload/index.tsx b/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/Upload/index.tsx index c54d8090c9b..36ed6e39e63 100644 --- a/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/Upload/index.tsx +++ b/Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Tabs/Upgrades/Upload/index.tsx @@ -4,6 +4,7 @@ import Localization from "localization"; import "./style.less"; import { ChunkToUpload } from "models/ChunkToUpload"; import upgradeService from "services/upgradeService"; +import UploadIcon from "./img/upload.svg"; interface ErrorData { responseJSON: { @@ -166,8 +167,6 @@ const FileUpload: React.FC = (props) => { [uploadFile, onDragLeave] ); - const svg = require(`!raw-loader!./img/upload.svg`).default; - const buttonsStyle = { width: 67 }; const className = "overlay" + (draggedOver ? " hover" : ""); @@ -190,7 +189,7 @@ const FileUpload: React.FC = (props) => { } onMouseLeave={onMouseLeave} > -

      +
      diff --git a/Dnn.AdminExperience/ClientSide/Servers.Web/webpack.config.js b/Dnn.AdminExperience/ClientSide/Servers.Web/webpack.config.js index 58a32df8b46..cf53e85030a 100644 --- a/Dnn.AdminExperience/ClientSide/Servers.Web/webpack.config.js +++ b/Dnn.AdminExperience/ClientSide/Servers.Web/webpack.config.js @@ -81,7 +81,12 @@ module.exports = (env, argv) => { { test: /\.(d.ts)$/, use: ["null-loader"], - } + }, + { + test: /\.svg$/i, + issuer: /\.[jt]sx?$/, + use: ["@svgr/webpack"], + }, ], }, externals: webpackExternals, diff --git a/Dnn.AdminExperience/ClientSide/SiteImportExport.Web/package.json b/Dnn.AdminExperience/ClientSide/SiteImportExport.Web/package.json index e03366fd930..b5d56796981 100644 --- a/Dnn.AdminExperience/ClientSide/SiteImportExport.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/SiteImportExport.Web/package.json @@ -16,6 +16,7 @@ "@babel/preset-env": "^7.28.3", "@babel/preset-react": "^7.27.1", "@dnnsoftware/dnn-react-common": "10.1.0", + "@svgr/webpack": "^8.1.0", "babel-eslint": "^10.1.0", "babel-loader": "10.0.0", "babel-plugin-transform-class-properties": "^6.24.1", diff --git a/Dnn.AdminExperience/ClientSide/SiteImportExport.Web/src/components/ImportModal/index.jsx b/Dnn.AdminExperience/ClientSide/SiteImportExport.Web/src/components/ImportModal/index.jsx index f5338ca65d5..be5883d53a5 100644 --- a/Dnn.AdminExperience/ClientSide/SiteImportExport.Web/src/components/ImportModal/index.jsx +++ b/Dnn.AdminExperience/ClientSide/SiteImportExport.Web/src/components/ImportModal/index.jsx @@ -13,7 +13,7 @@ import FiltersBar from "./FiltersBar"; import ProgressBar from "./ProgressBar"; import styles from "./style.module.less"; import util from "utils"; -import noDataImg from "./img/nodata.svg?raw"; +import NoDataIcon from "./img/nodata.svg"; import { Button, GridCell, Pager } from "@dnnsoftware/dnn-react-common"; @@ -215,7 +215,7 @@ class ImportModal extends Component { {props.selectedPackage && !props.packageVerified &&
      {Localization.get("VerifyPackage")}
      -
      +
      }
      ; diff --git a/Dnn.AdminExperience/ClientSide/SiteImportExport.Web/webpack.config.js b/Dnn.AdminExperience/ClientSide/SiteImportExport.Web/webpack.config.js index 6273cd15a6f..9c077c21b57 100644 --- a/Dnn.AdminExperience/ClientSide/SiteImportExport.Web/webpack.config.js +++ b/Dnn.AdminExperience/ClientSide/SiteImportExport.Web/webpack.config.js @@ -87,16 +87,10 @@ module.exports = (env, argv) => { loader: "url-loader?limit=8192", }, }, - { - test: /\.svg$/, - use: { - loader: "svg-url-loader", - }, - }, { test: /\.svg$/i, - resourceQuery: /raw/, // *.svg?raw - use: "raw-loader", + issuer: /\.[jt]sx?$/, + use: ["@svgr/webpack"], }, ], }, diff --git a/Dnn.AdminExperience/ClientSide/SiteSettings.Web/package.json b/Dnn.AdminExperience/ClientSide/SiteSettings.Web/package.json index 0569e0380e3..d907eac025a 100644 --- a/Dnn.AdminExperience/ClientSide/SiteSettings.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/SiteSettings.Web/package.json @@ -18,6 +18,7 @@ "@babel/preset-env": "^7.28.3", "@babel/preset-react": "^7.27.1", "@dnnsoftware/dnn-react-common": "10.1.0", + "@svgr/webpack": "^8.1.0", "array.prototype.find": "2.2.3", "array.prototype.findindex": "2.2.4", "babel-loader": "^10.0.0", diff --git a/Dnn.AdminExperience/ClientSide/SiteSettings.Web/src/components/editLanguagePanel/resourceEditor/fullEditor.jsx b/Dnn.AdminExperience/ClientSide/SiteSettings.Web/src/components/editLanguagePanel/resourceEditor/fullEditor.jsx index f77de26f492..c7c4d95fe87 100644 --- a/Dnn.AdminExperience/ClientSide/SiteSettings.Web/src/components/editLanguagePanel/resourceEditor/fullEditor.jsx +++ b/Dnn.AdminExperience/ClientSide/SiteSettings.Web/src/components/editLanguagePanel/resourceEditor/fullEditor.jsx @@ -2,6 +2,18 @@ import React, { Component } from "react"; import PropTypes from "prop-types"; import { Button, TextOverflowWrapper } from "@dnnsoftware/dnn-react-common"; import resx from "resources"; +import Undo from "./icons/undo.svg"; +import Redo from "./icons/redo.svg"; +import Bold from "./icons/bold.svg"; +import Italic from "./icons/italic.svg"; +import Underline from "./icons/underline.svg"; +import StrikeThrough from "./icons/strikeThrough.svg"; +import JustifyLeft from "./icons/justifyLeft.svg"; +import JustifyCenter from "./icons/justifyCenter.svg"; +import JustifyRight from "./icons/justifyRight.svg"; +import JustifyFull from "./icons/justifyFull.svg"; +import InsertUnorderedList from "./icons/insertUnorderedList.svg"; +import InsertOrderedList from "./icons/insertOrderedList.svg"; import "./fullEditor.less"; class FullEditor extends Component { @@ -11,10 +23,26 @@ class FullEditor extends Component { }; this.editorToolbar = [ - ["undo", "redo"], - ["bold", "italic", "underline", "strikeThrough"], - ["justifyLeft", "justifyCenter", "justifyRight", "justifyFull"], - ["insertUnorderedList", "insertOrderedList"] + [ + { name: "undo", icon: Undo, }, + { name: "redo", icon: Redo, } + ], + [ + { name: "bold", icon: Bold, }, + { name: "italic", icon: Italic, }, + { name: "underline", icon: Underline, }, + { name: "strikeThrough", icon: StrikeThrough, } + ], + [ + { name: "justifyLeft", icon: JustifyLeft, }, + { name: "justifyCenter", icon: JustifyCenter, }, + { name: "justifyRight", icon: JustifyRight, }, + { name: "justifyFull", icon: JustifyFull, } + ], + [ + { name: "insertUnorderedList", icon: InsertUnorderedList, }, + { name: "insertOrderedList", icon: InsertOrderedList, } + ] ]; } @@ -53,15 +81,15 @@ class FullEditor extends Component { return
      { group.map((button, i) => { + const ButtonIcon = button.icon; return ( + ); }) diff --git a/Dnn.AdminExperience/ClientSide/SiteSettings.Web/webpack.config.js b/Dnn.AdminExperience/ClientSide/SiteSettings.Web/webpack.config.js index c1a27ccba02..fc3d1ec49ef 100644 --- a/Dnn.AdminExperience/ClientSide/SiteSettings.Web/webpack.config.js +++ b/Dnn.AdminExperience/ClientSide/SiteSettings.Web/webpack.config.js @@ -88,9 +88,9 @@ module.exports = (env, argv) => { }, }, { - test: /\.(svg)$/, - exclude: /node_modules/, - use: ["raw-loader"], + test: /\.svg$/i, + issuer: /\.[jt]sx?$/, + use: [{ loader: "@svgr/webpack", options: { svgo: false } }], }, ], }, diff --git a/Dnn.AdminExperience/ClientSide/TaskScheduler.Web/package.json b/Dnn.AdminExperience/ClientSide/TaskScheduler.Web/package.json index 0e35dbb1077..c90cb46a9dc 100644 --- a/Dnn.AdminExperience/ClientSide/TaskScheduler.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/TaskScheduler.Web/package.json @@ -15,6 +15,7 @@ "@babel/preset-env": "^7.28.3", "@babel/preset-react": "^7.27.1", "@dnnsoftware/dnn-react-common": "10.1.0", + "@svgr/webpack": "^8.1.0", "array.prototype.find": "2.2.3", "array.prototype.findindex": "2.2.4", "babel-loader": "10.0.0", diff --git a/Dnn.AdminExperience/ClientSide/TaskScheduler.Web/src/components/history/index.jsx b/Dnn.AdminExperience/ClientSide/TaskScheduler.Web/src/components/history/index.jsx index 374dcc409d6..2b7b864f488 100644 --- a/Dnn.AdminExperience/ClientSide/TaskScheduler.Web/src/components/history/index.jsx +++ b/Dnn.AdminExperience/ClientSide/TaskScheduler.Web/src/components/history/index.jsx @@ -8,7 +8,7 @@ import TaskHistoryItemRow from "./taskHistoryItemRow"; import "./style.less"; import { Pager } from "@dnnsoftware/dnn-react-common"; import resx from "../../resources"; -import historyIcon from "./../svg/history.svg?raw"; +import HistoryIcon from "./../svg/history.svg"; let pageSizeOptions = []; let tableFields = []; @@ -121,7 +121,7 @@ class HistoryPanelBody extends Component { const {props} = this; return (
      -
      +
      {props.title}
      {this.renderedHistoryListHeader()} diff --git a/Dnn.AdminExperience/ClientSide/TaskScheduler.Web/src/components/history/taskHistoryItemRow/index.jsx b/Dnn.AdminExperience/ClientSide/TaskScheduler.Web/src/components/history/taskHistoryItemRow/index.jsx index e17daf0c147..16c7df7117b 100644 --- a/Dnn.AdminExperience/ClientSide/TaskScheduler.Web/src/components/history/taskHistoryItemRow/index.jsx +++ b/Dnn.AdminExperience/ClientSide/TaskScheduler.Web/src/components/history/taskHistoryItemRow/index.jsx @@ -2,7 +2,7 @@ import React, { Component } from "react"; import PropTypes from "prop-types"; import { connect } from "react-redux"; import styles from "./style.module.less"; -import checkmarkIcon from "./svg/checkmark.svg?raw"; +import CheckmarkIcon from "./svg/checkmark.svg"; class TaskHistoryItemRow extends Component { @@ -49,7 +49,7 @@ class TaskHistoryItemRow extends Component { getSucceededDisplay() { if (this.props.succeeded) { - return
      ; + return
      ; } else return   ; } diff --git a/Dnn.AdminExperience/ClientSide/TaskScheduler.Web/src/components/scheduler/schedulerRow/index.jsx b/Dnn.AdminExperience/ClientSide/TaskScheduler.Web/src/components/scheduler/schedulerRow/index.jsx index ed4db3e6973..10a7f7d4bc6 100644 --- a/Dnn.AdminExperience/ClientSide/TaskScheduler.Web/src/components/scheduler/schedulerRow/index.jsx +++ b/Dnn.AdminExperience/ClientSide/TaskScheduler.Web/src/components/scheduler/schedulerRow/index.jsx @@ -8,8 +8,8 @@ import { task as TaskActions } from "../../../actions"; import util from "../../../utils"; -import checkmarkIcon from "./../../svg/checkmark.svg?raw"; -import historyIcon from "./../../svg/history.svg?raw"; +import CheckmarkIcon from "./../../svg/checkmark.svg"; +import HistoryIcon from "./../../svg/history.svg"; class SchedulerRow extends Component { constructor() { @@ -63,7 +63,7 @@ class SchedulerRow extends Component { getEnabledDisplay() { if (this.props.id !== "add") { if (this.props.enabled) { - return
      ; + return
      ; } else return   ; } @@ -91,7 +91,8 @@ class SchedulerRow extends Component { {this.getEnabledDisplay()}
      {props.id !== "add" &&
      -
      +
      +
      } diff --git a/Dnn.AdminExperience/ClientSide/TaskScheduler.Web/src/components/taskQueue/LeftPane/LeftPane.jsx b/Dnn.AdminExperience/ClientSide/TaskScheduler.Web/src/components/taskQueue/LeftPane/LeftPane.jsx index 8dbbd717fae..519ee78c0e2 100644 --- a/Dnn.AdminExperience/ClientSide/TaskScheduler.Web/src/components/taskQueue/LeftPane/LeftPane.jsx +++ b/Dnn.AdminExperience/ClientSide/TaskScheduler.Web/src/components/taskQueue/LeftPane/LeftPane.jsx @@ -2,8 +2,8 @@ import React, {Component } from "react"; import PropTypes from "prop-types"; import styles from "./style.module.less"; import resx from "../../../resources"; -import clockStopIcon from "./../taskStatusItemRow/svg/clock_stop.svg?raw"; -import cycleIcon from "./../taskStatusItemRow/svg/cycle.svg?raw"; +import ClockStopIcon from "./../taskStatusItemRow/svg/clock_stop.svg"; +import CycleIcon from "./../taskStatusItemRow/svg/cycle.svg"; class LeftPane extends Component { constructor() { @@ -18,8 +18,8 @@ class LeftPane extends Component { const {props} = this; return (
      - - + +
      {props.friendlyName}
    /// The contact to update - public void UpdateContact(Contact contact) + public void UpdateContact(Contact contact, int userId) { Requires.NotNull(contact); Requires.PropertyNotNegative(contact, "ContactId"); + contact.LastModifiedByUserId = userId; + contact.LastModifiedOnDate = DateTime.UtcNow; using (var context = DataContext.Instance()) { diff --git a/DNN Platform/Modules/Samples/Dnn.ContactList.Api/IContactRepository.cs b/DNN Platform/Modules/Samples/Dnn.ContactList.Api/IContactRepository.cs index 1dd95f14ec0..0743e4c6a85 100644 --- a/DNN Platform/Modules/Samples/Dnn.ContactList.Api/IContactRepository.cs +++ b/DNN Platform/Modules/Samples/Dnn.ContactList.Api/IContactRepository.cs @@ -16,8 +16,9 @@ public interface IContactRepository /// AddContact adds a contact to the repository ///
    /// The contact to add + /// The Id of the user making the addition /// The Id of the contact - int AddContact(Contact contact); + int AddContact(Contact contact, int userId); /// /// DeleteContact deletes a contact from the repository @@ -57,7 +58,8 @@ public interface IContactRepository /// UpdateContact updates a contact in the repository /// /// The contact to update - void UpdateContact(Contact contact); + /// The Id of the user making the update + void UpdateContact(Contact contact, int userId); } } diff --git a/DNN Platform/Modules/Samples/Dnn.ContactList.Api/Providers/DataProviders/SqlDataProvider/01.00.00.SqlDataProvider b/DNN Platform/Modules/Samples/Dnn.ContactList.Api/Providers/DataProviders/SqlDataProvider/01.00.00.SqlDataProvider index 4c7a307b352..84d066a6c70 100644 --- a/DNN Platform/Modules/Samples/Dnn.ContactList.Api/Providers/DataProviders/SqlDataProvider/01.00.00.SqlDataProvider +++ b/DNN Platform/Modules/Samples/Dnn.ContactList.Api/Providers/DataProviders/SqlDataProvider/01.00.00.SqlDataProvider @@ -10,9 +10,9 @@ /** Create Table **/ -if not exists (select * from dbo.sysobjects where id = object_id(N'{databaseOwner}[{objectQualifier}Contacts]') and OBJECTPROPERTY(id, N'IsTable') = 1) +if not exists (select * from dbo.sysobjects where id = object_id(N'{databaseOwner}[{objectQualifier}Dnn_Contacts]') and OBJECTPROPERTY(id, N'IsTable') = 1) BEGIN - CREATE TABLE {databaseOwner}[{objectQualifier}Contacts] + CREATE TABLE {databaseOwner}[{objectQualifier}Dnn_Contacts] ( [ContactId] [int] IDENTITY(1,1) NOT NULL, [PortalId] [int] NOT NULL, @@ -20,9 +20,34 @@ if not exists (select * from dbo.sysobjects where id = object_id(N'{databaseOwne [LastName] [nvarchar](100) NOT NULL, [Email] [nvarchar](100) NOT NULL, [Phone] [nvarchar](50) NOT NULL, - [Twitter] [nvarchar](50) NOT NULL, + [Social] [nvarchar](50) NULL, + [CreatedByUserId] [int] NOT NULL, + [CreatedOnDate] [datetime] NOT NULL, + [LastModifiedByUserId] [int] NOT NULL, + [LastModifiedOnDate] [datetime] NOT NULL, ) - ALTER TABLE {databaseOwner}[{objectQualifier}Contacts] ADD CONSTRAINT [PK_{objectQualifier}Contacts] PRIMARY KEY CLUSTERED ([ContactId]) + ALTER TABLE {databaseOwner}[{objectQualifier}Dnn_Contacts] ADD CONSTRAINT [PK_{objectQualifier}Dnn_Contacts] PRIMARY KEY CLUSTERED ([ContactId]) END -GO \ No newline at end of file +GO + +/** Fill table with current DNN users **/ + +BEGIN + INSERT INTO {databaseOwner}[{objectQualifier}Dnn_Contacts] + ([PortalId],[FirstName],[LastName],[Email],[Phone],[Social],[CreatedByUserId],[CreatedOnDate],[LastModifiedByUserId],[LastModifiedOnDate]) + SELECT + u.PortalId, + LEFT(u.FirstName,100) AS FirstName, + LEFT(u.LastName,100) AS LastName, + LEFT(u.Email,100) AS Email, + '+' + CAST(ABS(CHECKSUM(NewId())) % 100 AS VARCHAR) + ' ' + + CAST(100 + ABS(CHECKSUM(NewId())) % 900 AS VARCHAR) + ' ' + + CAST(100 + ABS(CHECKSUM(NewId())) % 900 AS VARCHAR) + ' ' + + CAST(100 + ABS(CHECKSUM(NewId())) % 900 AS VARCHAR), + '@' + LEFT(LOWER(u.FirstName), 1) + LOWER(u.LastName) + '.dnn.social', + -1, GETDATE(), -1, GETDATE() + FROM {databaseOwner}[{objectQualifier}vw_Users] u + WHERE u.IsSuperUser=0 AND u.IsDeleted = 0 +END + diff --git a/DNN Platform/Modules/Samples/Dnn.ContactList.Api/Providers/DataProviders/SqlDataProvider/01.00.01.SqlDataProvider b/DNN Platform/Modules/Samples/Dnn.ContactList.Api/Providers/DataProviders/SqlDataProvider/01.00.01.SqlDataProvider deleted file mode 100644 index 42f98215b9e..00000000000 --- a/DNN Platform/Modules/Samples/Dnn.ContactList.Api/Providers/DataProviders/SqlDataProvider/01.00.01.SqlDataProvider +++ /dev/null @@ -1,23 +0,0 @@ -/************************************************************/ -/***** SqlDataProvider *****/ -/***** *****/ -/***** *****/ -/***** Note: To manually execute this script you must *****/ -/***** perform a search and replace operation *****/ -/***** for {databaseOwner} and {objectQualifier} *****/ -/***** *****/ -/************************************************************/ - -/** Add dummy values **/ - -if exists (select * from dbo.sysobjects where id = object_id(N'{databaseOwner}[{objectQualifier}Contacts]') and OBJECTPROPERTY(id, N'IsTable') = 1) - BEGIN - DECLARE @COUNT INT= 20; - - WHILE (@COUNT>0) - BEGIN - INSERT INTO {databaseOwner}[{objectQualifier}Contacts] ([PortalId],[FirstName],[LastName],[Email],[Phone],[Twitter]) VALUES(0,'DNN ','USER ' + CONVERT(VARCHAR,@COUNT),'DNN_USER_'+ CONVERT(VARCHAR,@COUNT) + '@DNN.COM','123456789','@DNNUSER' + CONVERT(VARCHAR,@COUNT)) - SET @COUNT = @COUNT - 1; - END - END -GO diff --git a/DNN Platform/Modules/Samples/Dnn.ContactList.Api/Providers/DataProviders/SqlDataProvider/Uninstall.SqlDataProvider b/DNN Platform/Modules/Samples/Dnn.ContactList.Api/Providers/DataProviders/SqlDataProvider/Uninstall.SqlDataProvider index d012a8c2e90..06d36b857ee 100644 --- a/DNN Platform/Modules/Samples/Dnn.ContactList.Api/Providers/DataProviders/SqlDataProvider/Uninstall.SqlDataProvider +++ b/DNN Platform/Modules/Samples/Dnn.ContactList.Api/Providers/DataProviders/SqlDataProvider/Uninstall.SqlDataProvider @@ -1,5 +1,5 @@ -if exists (select * from dbo.sysobjects where id = object_id(N'{databaseOwner}[{objectQualifier}Contacts]') and OBJECTPROPERTY(id, N'IsTable') = 1) +if exists (select * from dbo.sysobjects where id = object_id(N'{databaseOwner}[{objectQualifier}Dnn_Contacts]') and OBJECTPROPERTY(id, N'IsTable') = 1) BEGIN - DROP TABLE {databaseOwner}[{objectQualifier}Contacts] + DROP TABLE {databaseOwner}[{objectQualifier}Dnn_Contacts] END GO diff --git a/DNN Platform/Modules/Samples/Dnn.ContactList.Mvc/App_LocalResources/Contact.resx b/DNN Platform/Modules/Samples/Dnn.ContactList.Mvc/App_LocalResources/Contact.resx index 9207348f285..ffb84c8eac6 100644 --- a/DNN Platform/Modules/Samples/Dnn.ContactList.Mvc/App_LocalResources/Contact.resx +++ b/DNN Platform/Modules/Samples/Dnn.ContactList.Mvc/App_LocalResources/Contact.resx @@ -1,17 +1,17 @@  - @@ -153,10 +153,10 @@ Save - - Twitter + + Social - - Twitter handle is required + + Social handle is required \ No newline at end of file diff --git a/DNN Platform/Modules/Samples/Dnn.ContactList.Mvc/Controllers/ContactController.cs b/DNN Platform/Modules/Samples/Dnn.ContactList.Mvc/Controllers/ContactController.cs index 527a874c41f..7c0998e7cf4 100644 --- a/DNN Platform/Modules/Samples/Dnn.ContactList.Mvc/Controllers/ContactController.cs +++ b/DNN Platform/Modules/Samples/Dnn.ContactList.Mvc/Controllers/ContactController.cs @@ -80,11 +80,11 @@ public ActionResult Edit(Contact contact) if (contact.ContactId == -1) { - _repository.AddContact(contact); + _repository.AddContact(contact, User.UserID); } else { - _repository.UpdateContact(contact); + _repository.UpdateContact(contact, User.UserID); } return RedirectToDefaultRoute(); diff --git a/DNN Platform/Modules/Samples/Dnn.ContactList.Mvc/Views/Contact/Edit.cshtml b/DNN Platform/Modules/Samples/Dnn.ContactList.Mvc/Views/Contact/Edit.cshtml index 091a90f210b..918a1de74b0 100644 --- a/DNN Platform/Modules/Samples/Dnn.ContactList.Mvc/Views/Contact/Edit.cshtml +++ b/DNN Platform/Modules/Samples/Dnn.ContactList.Mvc/Views/Contact/Edit.cshtml @@ -27,9 +27,9 @@ @Html.ValidationMessageFor(m => m.Phone, @Dnn.LocalizeString("PhoneRequired"))
    - - @Html.TextBoxFor(m => m.Twitter) - @Html.ValidationMessageFor(m => m.Twitter, @Dnn.LocalizeString("TwitterRequired")) + + @Html.TextBoxFor(m => m.Social) + @Html.ValidationMessageFor(m => m.Social, @Dnn.LocalizeString("SocialRequired"))
    diff --git a/DNN Platform/Modules/Samples/Dnn.ContactList.Mvc/Views/Contact/_ContactPartial.cshtml b/DNN Platform/Modules/Samples/Dnn.ContactList.Mvc/Views/Contact/_ContactPartial.cshtml index bdbc24a8d68..f59c61c1486 100644 --- a/DNN Platform/Modules/Samples/Dnn.ContactList.Mvc/Views/Contact/_ContactPartial.cshtml +++ b/DNN Platform/Modules/Samples/Dnn.ContactList.Mvc/Views/Contact/_ContactPartial.cshtml @@ -41,11 +41,11 @@ @Model.Phone
    - @if (!string.IsNullOrEmpty(Model.Twitter)) + @if (!string.IsNullOrEmpty(Model.Social)) { }
    diff --git a/DNN Platform/Modules/Samples/Dnn.ContactList.Spa/App_LocalResources/ContactList.resx b/DNN Platform/Modules/Samples/Dnn.ContactList.Spa/App_LocalResources/ContactList.resx index 91774719be5..1a7197a02da 100644 --- a/DNN Platform/Modules/Samples/Dnn.ContactList.Spa/App_LocalResources/ContactList.resx +++ b/DNN Platform/Modules/Samples/Dnn.ContactList.Spa/App_LocalResources/ContactList.resx @@ -1,17 +1,17 @@  - @@ -150,7 +150,7 @@ Save - - Twitter + + Social \ No newline at end of file diff --git a/DNN Platform/Modules/Samples/Dnn.ContactList.Spa/ClientScripts/contacts.js b/DNN Platform/Modules/Samples/Dnn.ContactList.Spa/ClientScripts/contacts.js index b129a51adf3..b6f2550b64e 100644 --- a/DNN Platform/Modules/Samples/Dnn.ContactList.Spa/ClientScripts/contacts.js +++ b/DNN Platform/Modules/Samples/Dnn.ContactList.Spa/ClientScripts/contacts.js @@ -162,7 +162,7 @@ contactList.contactViewModel = function(parentViewModel, config) { self.lastName = ko.observable('').extend({ required: { overrideMessage: "Please enter a last name" } }); self.email = ko.observable('').extend({ required: { overrideMessage: "Please enter a valid email address", regEx: config.settings.emailRegex } }); self.phone = ko.observable('').extend({ required: { overrideMessage: "Please enter a valid phone number in the format: 123-456-7890", regEx: /^(\+\d{1,2}\s)?\(?\d{3}\)?[\s.-]\d{3}[\s.-]\d{4}$/ } }); - self.twitter = ko.observable(''); + self.social = ko.observable(''); self.cancel = function () { clearErrors([self.firstName, self.lastName, self.email, self.phone]); @@ -178,7 +178,7 @@ contactList.contactViewModel = function(parentViewModel, config) { lastName: data.lastName(), email: data.email(), phone: data.phone(), - twitter: data.twitter() + social: data.social() }; util.contactService().post("DeleteContact", params, @@ -209,7 +209,7 @@ contactList.contactViewModel = function(parentViewModel, config) { self.lastName(""); self.email(""); self.phone(""); - self.twitter(""); + self.social(""); }; self.load = function(data) { @@ -218,7 +218,7 @@ contactList.contactViewModel = function(parentViewModel, config) { self.lastName(data.lastName); self.email(data.email); self.phone(data.phone); - self.twitter(data.twitter); + self.social(data.social); }; self.saveContact = function (data, e) { @@ -235,7 +235,7 @@ contactList.contactViewModel = function(parentViewModel, config) { lastName: data.lastName(), email: data.email(), phone: data.phone(), - twitter: data.twitter() + social: data.social() }; util.contactService().post("SaveContact", params, diff --git a/DNN Platform/Modules/Samples/Dnn.ContactList.Spa/Components/ContactService.cs b/DNN Platform/Modules/Samples/Dnn.ContactList.Spa/Components/ContactService.cs index 7088405c41b..02b4bf73662 100644 --- a/DNN Platform/Modules/Samples/Dnn.ContactList.Spa/Components/ContactService.cs +++ b/DNN Platform/Modules/Samples/Dnn.ContactList.Spa/Components/ContactService.cs @@ -29,9 +29,9 @@ protected override Func GetFactory() return () => new ContactService(); } - public int AddContact(Contact contact) + public int AddContact(Contact contact, int userId) { - return _repository.AddContact(contact); + return _repository.AddContact(contact, userId); } public void DeleteContact(Contact contact) @@ -54,9 +54,9 @@ public IPagedList GetContacts(string searchTerm, int portalId, int page return _repository.GetContacts(searchTerm, portalId, pageIndex, pageSize); } - public void UpdateContact(Contact contact) + public void UpdateContact(Contact contact, int userId) { - _repository.UpdateContact(contact); + _repository.UpdateContact(contact, userId); } } } diff --git a/DNN Platform/Modules/Samples/Dnn.ContactList.Spa/Components/IContactService.cs b/DNN Platform/Modules/Samples/Dnn.ContactList.Spa/Components/IContactService.cs index fcb20cf24c5..a109acb376b 100644 --- a/DNN Platform/Modules/Samples/Dnn.ContactList.Spa/Components/IContactService.cs +++ b/DNN Platform/Modules/Samples/Dnn.ContactList.Spa/Components/IContactService.cs @@ -17,8 +17,9 @@ public interface IContactService /// AddContact adds a contact to the repository /// /// The contact to add + /// The Id of the user making the addition /// The Id of the contact - int AddContact(Contact contact); + int AddContact(Contact contact, int userId); /// /// DeleteContact deletes a contact from the repository @@ -58,6 +59,7 @@ public interface IContactService /// UpdateContact updates a contact in the repository /// /// The contact to update - void UpdateContact(Contact contact); + /// The Id of the user making the update + void UpdateContact(Contact contact, int userId); } } diff --git a/DNN Platform/Modules/Samples/Dnn.ContactList.Spa/ContactList.html b/DNN Platform/Modules/Samples/Dnn.ContactList.Spa/ContactList.html index 7cc045fc1f9..995da750b42 100644 --- a/DNN Platform/Modules/Samples/Dnn.ContactList.Spa/ContactList.html +++ b/DNN Platform/Modules/Samples/Dnn.ContactList.Spa/ContactList.html @@ -69,9 +69,9 @@
    @@ -126,8 +126,8 @@
    - - + +
    [Resx:{key:"Cancel"}] diff --git a/DNN Platform/Modules/Samples/Dnn.ContactList.Spa/Services/ContactController.cs b/DNN Platform/Modules/Samples/Dnn.ContactList.Spa/Services/ContactController.cs index 4e3bf9d8ff1..c2dc1c8f4f1 100644 --- a/DNN Platform/Modules/Samples/Dnn.ContactList.Spa/Services/ContactController.cs +++ b/DNN Platform/Modules/Samples/Dnn.ContactList.Spa/Services/ContactController.cs @@ -124,10 +124,10 @@ public HttpResponseMessage SaveContact(ContactViewModel viewModel) LastName = viewModel.LastName, Email = viewModel.Email, Phone = viewModel.Phone, - Twitter = viewModel.Twitter, + Social = viewModel.Social, PortalId = PortalSettings.PortalId }; - _contactService.AddContact(contact); + _contactService.AddContact(contact, UserInfo.UserID); } else { @@ -140,9 +140,9 @@ public HttpResponseMessage SaveContact(ContactViewModel viewModel) contact.LastName = viewModel.LastName; contact.Email = viewModel.Email; contact.Phone = viewModel.Phone; - contact.Twitter = viewModel.Twitter; + contact.Social = viewModel.Social; } - _contactService.UpdateContact(contact); + _contactService.UpdateContact(contact, UserInfo.UserID); } var response = new { diff --git a/DNN Platform/Modules/Samples/Dnn.ContactList.Spa/Services/ViewModels/ContactViewModel.cs b/DNN Platform/Modules/Samples/Dnn.ContactList.Spa/Services/ViewModels/ContactViewModel.cs index 83023b9a8d6..100a0c42ba0 100644 --- a/DNN Platform/Modules/Samples/Dnn.ContactList.Spa/Services/ViewModels/ContactViewModel.cs +++ b/DNN Platform/Modules/Samples/Dnn.ContactList.Spa/Services/ViewModels/ContactViewModel.cs @@ -31,7 +31,7 @@ public ContactViewModel(Contact contact) FirstName = contact.FirstName; LastName = contact.LastName; Phone = contact.Phone; - Twitter = contact.Twitter; + Social = contact.Social; } /// @@ -65,9 +65,9 @@ public ContactViewModel(Contact contact) public string Phone { get; set; } /// - /// The Twitter of the contact + /// The Social of the contact /// - [JsonProperty("twitter")] - public string Twitter { get; set; } + [JsonProperty("social")] + public string Social { get; set; } } } From ba1613aac413fff0cfce3385f419d2de4fd2fafb Mon Sep 17 00:00:00 2001 From: Peter Donker Date: Sun, 30 Nov 2025 12:50:38 +0100 Subject: [PATCH 181/199] Make the edit screens look a bit more finished --- .../Views/Contact/Edit.cshtml | 99 ++++++--- .../Samples/Dnn.ContactList.Mvc/module.css | 191 ++++++++++++++++-- .../Dnn.ContactList.Spa/ContactList.html | 111 ++++++---- .../Samples/Dnn.ContactList.Spa/module.css | 169 +++++++++++++++- 4 files changed, 483 insertions(+), 87 deletions(-) diff --git a/DNN Platform/Modules/Samples/Dnn.ContactList.Mvc/Views/Contact/Edit.cshtml b/DNN Platform/Modules/Samples/Dnn.ContactList.Mvc/Views/Contact/Edit.cshtml index 918a1de74b0..689f864b34f 100644 --- a/DNN Platform/Modules/Samples/Dnn.ContactList.Mvc/Views/Contact/Edit.cshtml +++ b/DNN Platform/Modules/Samples/Dnn.ContactList.Mvc/Views/Contact/Edit.cshtml @@ -3,35 +3,78 @@ @using DotNetNuke.Services.Localization @using DotNetNuke.Web.Mvc.Helpers -
    - @*@Html.ValidationSummary(true)*@ -
    - - @Html.TextBoxFor(m => m.FirstName) - @Html.ValidationMessageFor(m => m.FirstName, @Dnn.LocalizeString("FirstNameRequired")) +
    +
    + +
    +

    @(Model.ContactId > 0 ? Dnn.LocalizeString("Edit") : Dnn.LocalizeString("AddContact"))

    +

    @Dnn.LocalizeString("EditDescription")

    +
    -
    - - @Html.TextBoxFor(m => m.LastName) - @Html.ValidationMessageFor(m => m.LastName, @Dnn.LocalizeString("LastNameRequired")) -
    -
    - - @Html.TextBoxFor(m => m.Email) - @Html.ValidationMessageFor(m => m.Email, @Dnn.LocalizeString("EmailRequired")) -
    -
    - - @Html.TextBoxFor(m => m.Phone) - @Html.ValidationMessageFor(m => m.Phone, @Dnn.LocalizeString("PhoneRequired")) -
    -
    - - @Html.TextBoxFor(m => m.Social) - @Html.ValidationMessageFor(m => m.Social, @Dnn.LocalizeString("SocialRequired")) -
    -
    - +
    +
    +
    + + @Html.TextBoxFor(m => m.FirstName, new { @class = "form-input", placeholder = "Enter first name" }) + @Html.ValidationMessageFor(m => m.FirstName, @Dnn.LocalizeString("FirstNameRequired")) +
    + +
    + + @Html.TextBoxFor(m => m.LastName, new { @class = "form-input", placeholder = "Enter last name" }) + @Html.ValidationMessageFor(m => m.LastName, @Dnn.LocalizeString("LastNameRequired")) +
    +
    + +
    + + @Html.TextBoxFor(m => m.Email, new { @class = "form-input", placeholder = "email@example.com", type = "email" }) + @Html.ValidationMessageFor(m => m.Email, @Dnn.LocalizeString("EmailRequired")) +
    + +
    + + @Html.TextBoxFor(m => m.Phone, new { @class = "form-input", placeholder = "+1 555-123-4567", type = "tel" }) + @Html.ValidationMessageFor(m => m.Phone, @Dnn.LocalizeString("PhoneRequired")) +
    + +
    + + @Html.TextBoxFor(m => m.Social, new { @class = "form-input", placeholder = "@username or profile URL" }) + @Html.ValidationMessageFor(m => m.Social, @Dnn.LocalizeString("SocialRequired")) +
    + +
    + + + + Cancel + +
    diff --git a/DNN Platform/Modules/Samples/Dnn.ContactList.Mvc/module.css b/DNN Platform/Modules/Samples/Dnn.ContactList.Mvc/module.css index ddaac23dac3..de7e697eaf3 100644 --- a/DNN Platform/Modules/Samples/Dnn.ContactList.Mvc/module.css +++ b/DNN Platform/Modules/Samples/Dnn.ContactList.Mvc/module.css @@ -209,26 +209,191 @@ font-weight: 600; } +/* Edit Contact Form Styles */ +.contactEdit-container { + font-family: 'Open Sans', 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; + max-width: 800px; + margin: 30px auto; + background: #ffffff; + border-radius: 8px; + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08), 0 2px 4px rgba(0, 0, 0, 0.06); + overflow: hidden; +} + +.contactEdit-header { + background-color: var(--dnn-color-tertiary-light,#3c7a9a); + padding: 30px; + display: flex; + align-items: center; + gap: 20px; +} + +.contactEdit-logo { + width: 60px; + height: 60px; + flex-shrink: 0; +} + +.contactEdit-logo svg { + width: 100%; + height: 100%; +} + +.contactEdit-title { + color: #ffffff; + flex-grow: 1; +} + +.contactEdit-title h2 { + margin: 0 0 8px 0; + font-size: 28px; + font-weight: 700; + letter-spacing: 0.5px; +} + +.contactEdit-title p { + margin: 0; + font-size: 14px; + opacity: 0.9; +} + +.contactEdit-form { + padding: 40px; +} + +.form-row { + display: grid; + grid-template-columns: repeat(2, 1fr); + gap: 20px; + margin-bottom: 20px; +} + +@media (max-width: 768px) { + .form-row { + grid-template-columns: 1fr; + } + + .contactEdit-form { + padding: 30px 20px; + } +} + +.form-group { + margin-bottom: 24px; +} + +.form-group label { + display: block; + font-size: 14px; + font-weight: 600; + color: #333333; + margin-bottom: 8px; +} + +.form-group label .fa { + color: var(--dnn-color-tertiary-light,#3c7a9a); + margin-right: 6px; + width: 16px; + text-align: center; +} + +.form-group label .required { + color: #e80c4d; + font-weight: bold; +} + +.form-input { + width: 100%; + padding: 12px 16px; + font-size: 15px; + font-family: 'Open Sans', 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; + border: 2px solid #e0e0e0; + border-radius: 6px; + transition: border-color 0.2s ease, box-shadow 0.2s ease; + box-sizing: border-box; +} + +.form-input:focus { + outline: none; + border-color: var(--dnn-color-tertiary-light,#3c7a9a); + box-shadow: 0 0 0 3px rgba(60, 122, 154, 0.1); +} + +.form-input::placeholder { + color: #999999; +} + +.form-actions { + display: flex; + gap: 12px; + margin-top: 32px; + padding-top: 24px; + border-top: 1px solid #e0e0e0; +} + +.btn-primary, +.btn-secondary { + padding: 12px 24px; + font-size: 15px; + font-weight: 600; + border-radius: 6px; + border: none; + cursor: pointer; + transition: all 0.2s ease; + display: inline-flex; + align-items: center; + gap: 8px; + text-decoration: none; +} + +.btn-primary { + background-color: var(--dnn-color-tertiary-light,#3c7a9a); + color: #ffffff; +} + +.btn-primary:hover { + background-color: var(--dnn-color-tertiary-light,#2d5f78); + transform: translateY(-1px); + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.15); +} + +.btn-secondary { + background-color: #f5f5f5; + color: #666666; +} + +.btn-secondary:hover { + background-color: #e0e0e0; + color: #333333; +} + +.btn-primary .fa, +.btn-secondary .fa { + font-size: 14px; +} + +/* Legacy support */ +.buttons { + margin-top: 10px; + text-align: center; + padding-top: 20px; + clear: both; +} + .editContact div label { - width: 200px; - display: inline-block; - margin-top: 15px; - margin-bottom: 15px; - text-align: right; - margin-right: 20px; - font-weight: bold; + width: 200px; + display: inline-block; + margin-top: 15px; + margin-bottom: 15px; + text-align: right; + margin-right: 20px; + font-weight: bold; } .editContact div input { width: 200px; margin-top: 20px; } -.buttons { - margin-top: 10px; - text-align: center; - padding-top: 20px; - clear: both; -} /* info and errors */ .message-info { diff --git a/DNN Platform/Modules/Samples/Dnn.ContactList.Spa/ContactList.html b/DNN Platform/Modules/Samples/Dnn.ContactList.Spa/ContactList.html index 995da750b42..2b5c62f0909 100644 --- a/DNN Platform/Modules/Samples/Dnn.ContactList.Spa/ContactList.html +++ b/DNN Platform/Modules/Samples/Dnn.ContactList.Spa/ContactList.html @@ -93,45 +93,82 @@
    -
    - - - - +
    +

    + + +

    -
    - - - - -
    -
    - - - - -
    -
    - - - - -
    -
    - - +
    +
    +
    + + + + +
    +
    + + + + +
    +
    +
    + + + + +
    +
    + + + + +
    +
    + + +
    -
    diff --git a/DNN Platform/Modules/Samples/Dnn.ContactList.Spa/module.css b/DNN Platform/Modules/Samples/Dnn.ContactList.Spa/module.css index 8258272753d..25f20d80a1b 100644 --- a/DNN Platform/Modules/Samples/Dnn.ContactList.Spa/module.css +++ b/DNN Platform/Modules/Samples/Dnn.ContactList.Spa/module.css @@ -209,27 +209,178 @@ font-weight: 600; } +/* Edit Contact Form */ .editContact { - border: solid 1px #aaa; - border-radius: 10px; + background: #ffffff; + border-radius: 8px; + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08), 0 2px 4px rgba(0, 0, 0, 0.06); + overflow: hidden; + margin-top: 30px; + animation: fadeIn 0.3s ease; +} + +@keyframes fadeIn { + from { + opacity: 0; + transform: translateY(-10px); + } + to { + opacity: 1; + transform: translateY(0); + } +} + +.editContact-header { + background-color: var(--dnn-color-tertiary-light,#3c7a9a); + padding: 20px 30px; +} + +.editContact-title { + color: #ffffff; + font-size: 20px; + font-weight: 700; + margin: 0; + display: flex; + align-items: center; + gap: 12px; +} + +.editContact-title .fa { + font-size: 22px; +} + +.editContact-body { padding: 30px; } +.form-row { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 20px; + margin-bottom: 0; +} + +@media (max-width: 768px) { + .form-row { + grid-template-columns: 1fr; + } +} + +.form-group { + margin-bottom: 20px; +} + +.form-label { + display: flex; + align-items: center; + gap: 8px; + font-size: 14px; + font-weight: 600; + color: #333333; + margin-bottom: 8px; +} + +.form-label .fa { + font-size: 14px; + color: var(--dnn-color-tertiary-light,#3c7a9a); + width: 16px; +} + +.form-control { + width: 100%; + padding: 12px 16px; + font-size: 14px; + font-family: 'Open Sans', sans-serif; + border: 1px solid #ddd; + border-radius: 6px; + transition: all 0.2s ease; + box-sizing: border-box; +} + +.form-control:focus { + outline: none; + border-color: var(--dnn-color-tertiary-light,#3c7a9a); + box-shadow: 0 0 0 3px rgba(60, 122, 154, 0.1); +} + +.form-control::placeholder { + color: #999; + opacity: 0.7; +} + input.has-error { - border-color: #a94442; - -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075); - box-shadow: inset 0 1px 1px rgba(0,0,0,.075); + border-color: #d9534f; + background-color: #fff5f5; +} + +.form-control.has-error:focus { + border-color: #d9534f; + box-shadow: 0 0 0 3px rgba(217, 83, 79, 0.1); } span.form-error { - color: #a94442; + display: block; + color: #d9534f; + font-size: 13px; + margin-top: 6px; + font-weight: 500; } +.editContact-footer { + padding: 20px 30px; + background-color: #f8f9fa; + border-top: 1px solid #e9ecef; + display: flex; + justify-content: flex-end; + gap: 12px; +} + +.btn-cancel, +.btn-save { + display: inline-flex; + align-items: center; + gap: 8px; + padding: 12px 24px; + font-size: 14px; + font-weight: 600; + border-radius: 6px; + text-decoration: none; + transition: all 0.2s ease; + cursor: pointer; + border: none; +} + +.btn-cancel { + background-color: #6c757d; + color: #ffffff; +} + +.btn-cancel:hover { + background-color: #5a6268; + transform: translateY(-1px); + box-shadow: 0 2px 8px rgba(108, 117, 125, 0.3); +} + +.btn-save { + background-color: var(--dnn-color-tertiary-light,#3c7a9a); + color: #ffffff; +} + +.btn-save:hover { + background-color: #2f6580; + transform: translateY(-1px); + box-shadow: 0 2px 8px rgba(60, 122, 154, 0.3); +} + +.btn-cancel .fa, +.btn-save .fa { + font-size: 14px; +} .buttons { - margin-top: 10px; - text-align: center; - padding-top: 20px; + margin-top: 10px; + text-align: center; + padding-top: 20px; } #ControlBar, #ControlBar *, .actionMenu * { -webkit-box-sizing: content-box; -moz-box-sizing: content-box; box-sizing: content-box; } From 0e6175460520287ff05df5bbfb0aaabbd2562ff3 Mon Sep 17 00:00:00 2001 From: Peter Donker Date: Sun, 30 Nov 2025 13:11:45 +0100 Subject: [PATCH 182/199] Small fixes --- .../Controllers/ContactController.cs | 8 ++++++- .../ClientScripts/contacts.js | 21 +++++++++++++------ .../Dnn.ContactList.Spa/ContactList.html | 5 ++++- 3 files changed, 26 insertions(+), 8 deletions(-) diff --git a/DNN Platform/Modules/Samples/Dnn.ContactList.Mvc/Controllers/ContactController.cs b/DNN Platform/Modules/Samples/Dnn.ContactList.Mvc/Controllers/ContactController.cs index 7c0998e7cf4..f7c95b76d30 100644 --- a/DNN Platform/Modules/Samples/Dnn.ContactList.Mvc/Controllers/ContactController.cs +++ b/DNN Platform/Modules/Samples/Dnn.ContactList.Mvc/Controllers/ContactController.cs @@ -84,7 +84,13 @@ public ActionResult Edit(Contact contact) } else { - _repository.UpdateContact(contact, User.UserID); + var existing = _repository.GetContact(contact.ContactId, PortalSettings.PortalId); + existing.FirstName = contact.FirstName; + existing.LastName = contact.LastName; + existing.Email = contact.Email; + existing.Phone = contact.Phone; + existing.Social = contact.Social; + _repository.UpdateContact(existing, User.UserID); } return RedirectToDefaultRoute(); diff --git a/DNN Platform/Modules/Samples/Dnn.ContactList.Spa/ClientScripts/contacts.js b/DNN Platform/Modules/Samples/Dnn.ContactList.Spa/ClientScripts/contacts.js index b6f2550b64e..5cc1774aed0 100644 --- a/DNN Platform/Modules/Samples/Dnn.ContactList.Spa/ClientScripts/contacts.js +++ b/DNN Platform/Modules/Samples/Dnn.ContactList.Spa/ClientScripts/contacts.js @@ -11,8 +11,16 @@ ko.extenders.required = function (target, options) { var regEx = new RegExp(options.regEx); //define a function to do validation var errorMessage = options.overrideMessage || "This field is required"; + var allowEmpty = options.allowEmpty || false; function validate(newValue) { - var validated = regEx.test(newValue) && newValue !== ""; + var validated; + if (allowEmpty) { + // For optional fields: allow empty OR match regex + validated = newValue === "" || regEx.test(newValue); + } else { + // For required fields: must match regex AND not be empty + validated = regEx.test(newValue) && newValue !== ""; + } target.hasError(!validated); target.validationClass(validated ? "form-control" : "form-control has-error"); target.validationMessage(validated ? "" : errorMessage); @@ -62,7 +70,7 @@ contactList.contactsViewModel = function(config) { self.addContact = function(){ toggleView(); self.selectedContact.init(); - clearErrors([self.selectedContact.firstName, self.selectedContact.lastName, self.selectedContact.phone, self.selectedContact.email]); + clearErrors([self.selectedContact.firstName, self.selectedContact.lastName, self.selectedContact.phone, self.selectedContact.email, self.selectedContact.social]); }; self.closeEdit = function() { @@ -161,11 +169,11 @@ contactList.contactViewModel = function(parentViewModel, config) { self.firstName = ko.observable('').extend({ required: { overrideMessage: "Please enter a first name" } }); self.lastName = ko.observable('').extend({ required: { overrideMessage: "Please enter a last name" } }); self.email = ko.observable('').extend({ required: { overrideMessage: "Please enter a valid email address", regEx: config.settings.emailRegex } }); - self.phone = ko.observable('').extend({ required: { overrideMessage: "Please enter a valid phone number in the format: 123-456-7890", regEx: /^(\+\d{1,2}\s)?\(?\d{3}\)?[\s.-]\d{3}[\s.-]\d{4}$/ } }); - self.social = ko.observable(''); + self.phone = ko.observable('').extend({ required: { overrideMessage: "Please enter a valid phone number (international formats accepted: +1 234 567 8900, 123-456-7890, etc.)", regEx: /^(\+?\d{1,3}[\s.-]?)?[\d\s().-]{6,}$/ } }); + self.social = ko.observable('').extend({ required: { overrideMessage: "Social handle must start with @ symbol", regEx: /^@/, allowEmpty: true } }); self.cancel = function () { - clearErrors([self.firstName, self.lastName, self.email, self.phone]); + clearErrors([self.firstName, self.lastName, self.email, self.phone, self.social]); parentViewModel.closeEdit(); }; @@ -226,7 +234,8 @@ contactList.contactViewModel = function(parentViewModel, config) { self.lastName.valueHasMutated(); self.phone.valueHasMutated(); self.email.valueHasMutated(); - if ((self.firstName.hasError() || self.lastName.hasError() || self.email.hasError() || self.phone.hasError())) { + self.social.valueHasMutated(); + if ((self.firstName.hasError() || self.lastName.hasError() || self.email.hasError() || self.phone.hasError() || self.social.hasError())) { return; } var params = { diff --git a/DNN Platform/Modules/Samples/Dnn.ContactList.Spa/ContactList.html b/DNN Platform/Modules/Samples/Dnn.ContactList.Spa/ContactList.html index 2b5c62f0909..fec87fa11e7 100644 --- a/DNN Platform/Modules/Samples/Dnn.ContactList.Spa/ContactList.html +++ b/DNN Platform/Modules/Samples/Dnn.ContactList.Spa/ContactList.html @@ -156,8 +156,11 @@

    [Resx:{key:"Social"}] + +

    - +
    +
    + setSearchTerm(e.target.value)} + className="search-input" + /> + +
    + +
    {security.CanEdit && (
    From 8a925b8bfb7e6830a1c0d905215d9daeb0926f44 Mon Sep 17 00:00:00 2001 From: Peter Donker Date: Tue, 2 Dec 2025 22:25:07 +0100 Subject: [PATCH 188/199] Add documentation --- DNN Platform/Modules/Samples/README.md | 56 ++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 DNN Platform/Modules/Samples/README.md diff --git a/DNN Platform/Modules/Samples/README.md b/DNN Platform/Modules/Samples/README.md new file mode 100644 index 00000000000..01ba1ee9253 --- /dev/null +++ b/DNN Platform/Modules/Samples/README.md @@ -0,0 +1,56 @@ +# DNN Sample Modules + +In this directory you'll find several sample modules. The purpose of these modules is to: + +1. Showcase how you can build modules for DNN +2. Validate any changes we make to the framework and the impact it would have on module developers + +These modules are **NOT MEANT TO BE USED IN PRODUCTION**. There will be no "upgrade path" from one version to the next! + +## Components + +### Dnn.ContactList.Api + +This is a library project that takes care of persisting data to SQL database. It is used in the other ContactList projects. +Note that when you build these projects in release mode a zip file is created for each project that includes this dll. + +### Dnn.ContactList.Mvc + +This is a DNN MVC module. The main templating launguage is Razor (cshtml). + +### Dnn.ContactList.Spa + +This is a DNN SPA module. The main templating language is DNN's token replace (plain text into HTML). This project shows +the many ways in which you can use this to create a module. + +### Dnn.ContactList.SpaReact + +This is a DNN SPA module with a React front-end. This module shows less features of SPA module development than the Spa module above. +Instead it shows how you could use this module pattern to jump to React as quickly as possible. + +## Building + +These components are built to installable zip files under /Artifacts/SampleModules in release mode. +In debug mode they build to either the /Website folder or the folder you've set up using DNN_Platform.local.build. + +Example of DNN_Platform.local.build: +``` xml + + + D:\path\to\my\dnn\www + True + + +``` + +Example of settings.local.json: +``` json +{ + ... + "CopySampleProjects": true, + ... +} +``` + +The ```CopySampleProjects``` key will determine if these projects will be built to the destination or ignored. +If you set both to true the sample projects will be included to the build to your dev folder under /Install/module. From 4a4bcbcdf3cedbf702816f8168c4d51bf688f7f6 Mon Sep 17 00:00:00 2001 From: "Andre D. L. Zanchetta" Date: Mon, 6 Oct 2025 19:26:56 -0400 Subject: [PATCH 189/199] Add module header and footer settings --- Build/Build.csproj | 2 +- Build/ContextExtensions.cs | 7 +- Build/Tasks/OtherPackages.cs | 1 + Build/Tasks/PackageHtmlSanitizer.cs | 14 ++ Build/Tasks/unversionedManifests.txt | 6 +- .../HtmlSanitizer/HtmlSanitizer.dnn | 55 ++++++++ .../Components/HtmlSanitizer/License.txt | 21 +++ .../Library/Common/Utilities/HtmlUtils.cs | 80 +++++++++++- .../Library/DotNetNuke.Library.csproj | 15 +++ .../Entities/Portals/PortalSettings.cs | 6 + .../Portals/PortalSettingsController.cs | 2 + .../Entities/Tabs/TabModulesController.cs | 6 + DNN Platform/Library/Library.build | 1 + DNN Platform/Library/app.config | 44 +++++++ DNN Platform/Library/packages.config | 5 + .../DNN.Integration.Test.Framework.csproj | 74 ++++++----- .../DNN.Integration.Test.Framework/app.config | 40 ++++++ .../packages.config | 21 +-- .../DotNetNuke.Tests.AspNetCCP/App.config | 52 ++++++++ .../DotNetNuke.Tests.AspNetCCP.csproj | 82 ++++++------ .../packages.config | 21 +-- .../DotNetNuke.Tests.Authentication.csproj | 74 ++++++----- .../app.config | 44 +++++++ .../packages.config | 21 +-- .../DotNetNuke.Tests.Content.csproj | 74 ++++++----- .../Tests/DotNetNuke.Tests.Content/app.config | 60 +++++++++ .../DotNetNuke.Tests.Content/packages.config | 21 +-- .../Tests/DotNetNuke.Tests.Core/App.config | 98 ++++++++++++++ .../DotNetNuke.Tests.Core.csproj | 75 ++++++----- .../DotNetNuke.Tests.Core/packages.config | 21 +-- .../Tests/DotNetNuke.Tests.Data/App.config | 106 +++++++++++++++ .../DotNetNuke.Tests.Data.csproj | 75 ++++++----- .../DotNetNuke.Tests.Data/packages.config | 21 +-- .../DotNetNuke.Tests.Integration/App.config | 122 ++++++++++++++++++ .../DotNetNuke.Tests.Integration.csproj | 74 ++++++----- .../packages.config | 21 +-- .../Tests/DotNetNuke.Tests.Mail/App.config | 14 +- .../DotNetNuke.Tests.Mail.csproj | 73 ++++++----- .../DotNetNuke.Tests.Mail/packages.config | 21 +-- .../DotNetNuke.Tests.Modules.DDRMenu.csproj | 72 ++++++----- .../app.config | 40 ++++++ .../packages.config | 19 +-- .../Tests/DotNetNuke.Tests.Modules/App.config | 102 +++++++++++++++ .../DotNetNuke.Tests.Modules.csproj | 75 ++++++----- .../DotNetNuke.Tests.Modules/packages.config | 21 +-- .../DotNetNuke.Tests.SourceGenerators.csproj | 18 +-- .../DotNetNuke.Tests.UI.csproj | 74 ++++++----- .../Tests/DotNetNuke.Tests.UI/app.config | 52 ++++++++ .../Tests/DotNetNuke.Tests.UI/packages.config | 21 +-- .../Tests/DotNetNuke.Tests.Urls/App.config | 102 +++++++++++++++ .../DotNetNuke.Tests.Urls.csproj | 74 ++++++----- .../DotNetNuke.Tests.Urls/packages.config | 21 +-- .../DotNetNuke.Tests.Utilities.csproj | 77 +++++------ .../DotNetNuke.Tests.Utilities/app.config | 52 ++++++++ .../packages.config | 21 +-- .../DotNetNuke.Tests.Web.Mvc.csproj | 74 ++++++----- .../Tests/DotNetNuke.Tests.Web.Mvc/app.config | 52 ++++++++ .../DotNetNuke.Tests.Web.Mvc/packages.config | 21 +-- .../Tests/DotNetNuke.Tests.Web/App.config | 48 +++++++ .../DotNetNuke.Tests.Web.csproj | 74 ++++++----- .../DotNetNuke.Tests.Web/packages.config | 21 +-- .../Components/Portals/portal.template.xsd | 2 + .../Menus/ModuleActions/ModuleActions.js | 39 ++---- .../ModuleSettings.ascx.resx | 6 + .../admin/Modules/Modulesettings.ascx.cs | 18 ++- .../ClientSide/AdminLogs.Web/package.json | 6 + .../src/components/AdminLog/index.jsx | 7 +- .../AdminLogs.Web/src/components/Html.tsx | 6 + .../AdminLogs.Web/webpack.config.js | 11 +- .../Dnn.React.Common/dist.webpack.config.js | 13 +- .../ClientSide/Dnn.React.Common/package.json | 4 + .../ClientSide/Dnn.React.Common/src/Html.tsx | 6 + .../Dnn.React.Common/src/PagePicker/index.jsx | 5 +- .../Dnn.React.Common/src/Tooltip/index.jsx | 5 +- .../ClientSide/Extensions.Web/package.json | 6 + .../common/ExtensionDetailRow/index.jsx | 3 +- .../common/ExtensionDetailRow/index.jsx | 3 +- .../common/InUseModal/index.jsx | 3 +- .../EditExtension/License/index.jsx | 5 +- .../EditExtension/ReleaseNotes/index.jsx | 3 +- .../Extensions.Web/src/components/Html.tsx | 6 + .../FileUpload/AlreadyInstalled.jsx | 3 +- .../FileUpload/LogDisplay.jsx | 3 +- .../Extensions.Web/webpack.config.js | 6 +- .../ClientSide/Pages.Web/package.json | 4 + .../Pages.Web/src/components/Html.tsx | 6 + .../PageHierarchy/PageHierarchy.jsx | 5 +- .../ClientSide/Pages.Web/webpack.config.js | 11 +- .../ClientSide/Prompt.Web/package.json | 2 + .../Prompt.Web/src/components/Html.jsx | 6 - .../Prompt.Web/src/components/Html.tsx | 6 + .../ClientSide/Prompt.Web/webpack.config.js | 6 +- .../ClientSide/Security.Web/package.json | 6 + .../Security.Web/src/components/Html.tsx | 6 + .../src/components/auditCheck/index.jsx | 6 +- .../ClientSide/Security.Web/webpack.config.js | 6 +- .../ClientSide/Servers.Web/package.json | 4 +- .../Servers.Web/src/components/Html.tsx | 6 + .../src/components/common/WarningBlock.jsx | 4 +- .../SiteImportExport.Web/package.json | 6 + .../src/components/Html.tsx | 6 + .../components/ImportModal/PackagesList.jsx | 4 +- .../SiteImportExport.Web/webpack.config.js | 6 +- .../ClientSide/SiteSettings.Web/package.json | 6 + .../SiteSettings.Web/src/components/Html.tsx | 6 + .../resourceEditor/fullEditor.jsx | 5 +- .../src/components/moreSettings/index.jsx | 32 +++++ .../SiteSettings.Web/webpack.config.js | 6 +- .../ClientSide/TaskScheduler.Web/package.json | 6 + .../TaskScheduler.Web/src/components/Html.tsx | 6 + .../history/taskHistoryItemRow/index.jsx | 5 +- .../TaskScheduler.Web/webpack.config.js | 6 +- .../ClientSide/Vocabularies.Web/package.json | 6 + .../Vocabularies.Web/src/components/Html.tsx | 6 + .../VocabularyList/RightPane/Term/index.jsx | 3 +- .../Vocabularies.Web/webpack.config.js | 6 +- .../UpdateOtherSettingsRequest.cs | 26 ++-- .../Services/SiteSettingsController.cs | 4 + .../App_LocalResources/SiteSettings.resx | 12 ++ .../editBar/scripts/contrib/purify.min.js | 3 + .../Dnn.EditBar.UI/editBar/scripts/util.js | 12 +- .../personaBar/scripts/contrib/purify.min.js | 3 + .../admin/personaBar/scripts/util.js | 12 +- .../Dnn.PersonaBar.ConfigConsole.Tests.csproj | 74 ++++++----- .../app.config | 52 ++++++++ .../packages.config | 21 +-- .../Dnn.PersonaBar.Pages.Tests.csproj | 74 ++++++----- .../Dnn.PersonaBar.Pages.Tests/app.config | 52 ++++++++ .../packages.config | 21 +-- .../Dnn.PersonaBar.Security.Tests.csproj | 74 ++++++----- .../Dnn.PersonaBar.Security.Tests/app.config | 52 ++++++++ .../packages.config | 21 +-- .../Dnn.PersonaBar.Users.Tests.csproj | 74 ++++++----- .../Dnn.PersonaBar.Users.Tests/app.config | 52 ++++++++ .../packages.config | 21 +-- ...otNetNuke.Internal.SourceGenerators.csproj | 2 +- yarn.lock | 114 +++++++++++++--- 137 files changed, 2852 insertions(+), 999 deletions(-) create mode 100644 Build/Tasks/PackageHtmlSanitizer.cs create mode 100644 DNN Platform/Components/HtmlSanitizer/HtmlSanitizer.dnn create mode 100644 DNN Platform/Components/HtmlSanitizer/License.txt create mode 100644 DNN Platform/Tests/DotNetNuke.Tests.Core/App.config create mode 100644 DNN Platform/Tests/DotNetNuke.Tests.Data/App.config create mode 100644 DNN Platform/Tests/DotNetNuke.Tests.Integration/App.config create mode 100644 DNN Platform/Tests/DotNetNuke.Tests.Modules/App.config create mode 100644 DNN Platform/Tests/DotNetNuke.Tests.Urls/App.config create mode 100644 Dnn.AdminExperience/ClientSide/AdminLogs.Web/src/components/Html.tsx create mode 100644 Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/Html.tsx create mode 100644 Dnn.AdminExperience/ClientSide/Extensions.Web/src/components/Html.tsx create mode 100644 Dnn.AdminExperience/ClientSide/Pages.Web/src/components/Html.tsx delete mode 100644 Dnn.AdminExperience/ClientSide/Prompt.Web/src/components/Html.jsx create mode 100644 Dnn.AdminExperience/ClientSide/Prompt.Web/src/components/Html.tsx create mode 100644 Dnn.AdminExperience/ClientSide/Security.Web/src/components/Html.tsx create mode 100644 Dnn.AdminExperience/ClientSide/Servers.Web/src/components/Html.tsx create mode 100644 Dnn.AdminExperience/ClientSide/SiteImportExport.Web/src/components/Html.tsx create mode 100644 Dnn.AdminExperience/ClientSide/SiteSettings.Web/src/components/Html.tsx create mode 100644 Dnn.AdminExperience/ClientSide/TaskScheduler.Web/src/components/Html.tsx create mode 100644 Dnn.AdminExperience/ClientSide/Vocabularies.Web/src/components/Html.tsx create mode 100644 Dnn.AdminExperience/EditBar/Dnn.EditBar.UI/editBar/scripts/contrib/purify.min.js create mode 100644 Dnn.AdminExperience/Library/Dnn.PersonaBar.UI/admin/personaBar/scripts/contrib/purify.min.js diff --git a/Build/Build.csproj b/Build/Build.csproj index 5ff5ad436ff..ff53ed08ab5 100644 --- a/Build/Build.csproj +++ b/Build/Build.csproj @@ -15,7 +15,7 @@ - + diff --git a/Build/ContextExtensions.cs b/Build/ContextExtensions.cs index 46a95c6d7ff..185c6683f59 100644 --- a/Build/ContextExtensions.cs +++ b/Build/ContextExtensions.cs @@ -4,8 +4,9 @@ namespace DotNetNuke.Build; +using System; using System.Diagnostics; - + using Cake.Common.IO; using Cake.Core.IO; @@ -18,6 +19,8 @@ public static class ContextExtensions /// The file version. public static string GetAssemblyFileVersion(this Context context, FilePath assemblyPath) { - return FileVersionInfo.GetVersionInfo(context.MakeAbsolute(assemblyPath).FullPath).FileVersion; + var versionInfo = FileVersionInfo.GetVersionInfo(context.MakeAbsolute(assemblyPath).FullPath); + var fileVersion = versionInfo.FileVersion; + return Version.TryParse(fileVersion, out _) ? fileVersion : $"{versionInfo.FileMajorPart}.{versionInfo.FileMinorPart}.{versionInfo.FileBuildPart}"; } } diff --git a/Build/Tasks/OtherPackages.cs b/Build/Tasks/OtherPackages.cs index ac1b9997f63..7b685731433 100644 --- a/Build/Tasks/OtherPackages.cs +++ b/Build/Tasks/OtherPackages.cs @@ -18,6 +18,7 @@ namespace DotNetNuke.Build.Tasks /// A cake task to include other 3rd party packages. [IsDependentOn(typeof(PackageNewtonsoft))] [IsDependentOn(typeof(PackageMailKit))] + [IsDependentOn(typeof(PackageHtmlSanitizer))] [IsDependentOn(typeof(PackageAspNetWebApi))] [IsDependentOn(typeof(PackageAspNetWebPages))] [IsDependentOn(typeof(PackageAspNetMvc))] diff --git a/Build/Tasks/PackageHtmlSanitizer.cs b/Build/Tasks/PackageHtmlSanitizer.cs new file mode 100644 index 00000000000..fa6ff57759b --- /dev/null +++ b/Build/Tasks/PackageHtmlSanitizer.cs @@ -0,0 +1,14 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information +namespace DotNetNuke.Build.Tasks; + +/// A cake task to generate the MailKit package. +public sealed class PackageHtmlSanitizer : PackageComponentTask +{ + /// Initializes a new instance of the class. + public PackageHtmlSanitizer() + : base("HtmlSanitizer") + { + } +} diff --git a/Build/Tasks/unversionedManifests.txt b/Build/Tasks/unversionedManifests.txt index 48ff39fc92b..4540db7a9a1 100644 --- a/Build/Tasks/unversionedManifests.txt +++ b/Build/Tasks/unversionedManifests.txt @@ -1,8 +1,4 @@ -DNN Platform/Components/MailKit/*.dnn -DNN Platform/Components/Microsoft.*/**/*.dnn -DNN Platform/Components/Newtonsoft/*.dnn -DNN Platform/Components/WebFormsMvp/*.dnn -DNN Platform/Components/SharpZipLib/*.dnn +DNN Platform/Components/**/*.dnn DNN Platform/JavaScript Libraries/HoverIntent/*.dnn DNN Platform/JavaScript Libraries/jQuery*/*.dnn DNN Platform/JavaScript Libraries/Knockout*/*.dnn diff --git a/DNN Platform/Components/HtmlSanitizer/HtmlSanitizer.dnn b/DNN Platform/Components/HtmlSanitizer/HtmlSanitizer.dnn new file mode 100644 index 00000000000..caac4cd9d42 --- /dev/null +++ b/DNN Platform/Components/HtmlSanitizer/HtmlSanitizer.dnn @@ -0,0 +1,55 @@ + + + + HtmlSanitizer Components + Provides AngleSharp and HtmlSanitizer assemblies for the platform. + + + .NET Foundation and Contributors + DNN Community + https://dnncommunity.org + info@dnncommunity.org + + + + This package includes AngleSharp, AngleSharp.Css and HtmlSanitizer assemblies. + + + + + + bin + AngleSharp.dll + + + + bin + AngleSharp.Css.dll + + + + bin + HtmlSanitizer.dll + + + + bin + System.Collections.Immutable.dll + + + + bin + System.Text.Encoding.CodePages.dll + + + + bin + System.Runtime.CompilerServices.Unsafe.dll + + + + + + + + \ No newline at end of file diff --git a/DNN Platform/Components/HtmlSanitizer/License.txt b/DNN Platform/Components/HtmlSanitizer/License.txt new file mode 100644 index 00000000000..73c0a599158 --- /dev/null +++ b/DNN Platform/Components/HtmlSanitizer/License.txt @@ -0,0 +1,21 @@ +MIT License + +Copyright (C) 2012-2020 .NET Foundation and Contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. \ No newline at end of file diff --git a/DNN Platform/Library/Common/Utilities/HtmlUtils.cs b/DNN Platform/Library/Common/Utilities/HtmlUtils.cs index a5f57bcacfc..6d133caf9ab 100644 --- a/DNN Platform/Library/Common/Utilities/HtmlUtils.cs +++ b/DNN Platform/Library/Common/Utilities/HtmlUtils.cs @@ -13,7 +13,9 @@ namespace DotNetNuke.Common.Utilities using DotNetNuke.Internal.SourceGenerators; using DotNetNuke.Services.Upgrade; - /// HtmlUtils is a Utility class that provides Html Utility methods. + using Ganss.Xss; + + /// HtmlUtils is a Utility class that provides HTML Utility methods. public partial class HtmlUtils { // Create Regular Expression objects @@ -579,5 +581,81 @@ public static IHtmlString JavaScriptStringEncode(string value) /// public static IHtmlString JavaScriptStringEncode(string value, bool addDoubleQuotes) => new HtmlString(HttpUtility.JavaScriptStringEncode(value, addDoubleQuotes)); + + /// Sanitize the given HTML, removing element which could include JavaScript. + /// The HTML to sanitize. + /// The sanitized HTML. + public static string CleanOutOfJavascript(string htmlInput) + { + var sanitizer = new HtmlSanitizer(); + + // We need to disallow all attributes that might contain JS + sanitizer.AllowedAttributes.Remove("onclick"); + sanitizer.AllowedAttributes.Remove("onmouseover"); + sanitizer.AllowedAttributes.Remove("onmouseout"); + sanitizer.AllowedAttributes.Remove("onkeypress"); + sanitizer.AllowedAttributes.Remove("onkeydown"); + sanitizer.AllowedAttributes.Remove("onkeyup"); + + // We need to disallow tags like '
    ' + sanitizer.AllowedSchemes.Remove("javascript"); + + // Tags like '