From df4cd63962e5b66bd07637339a6a74c470cf0efc Mon Sep 17 00:00:00 2001 From: Bjarke Berg Date: Thu, 19 Oct 2023 03:30:35 +0200 Subject: [PATCH 01/38] https://github.com/umbraco/Umbraco-CMS/issues/15195 Fixed issue with media not cached correct (#15196) --- .../Services/UserServiceExtensions.cs | 7 ++++++- .../Persistence/NuCacheContentRepository.cs | 16 ++++++++-------- .../Controllers/ContentController.cs | 8 ++++---- 3 files changed, 18 insertions(+), 13 deletions(-) diff --git a/src/Umbraco.Core/Services/UserServiceExtensions.cs b/src/Umbraco.Core/Services/UserServiceExtensions.cs index f17a266616..7399f37fe8 100644 --- a/src/Umbraco.Core/Services/UserServiceExtensions.cs +++ b/src/Umbraco.Core/Services/UserServiceExtensions.cs @@ -8,6 +8,11 @@ namespace Umbraco.Extensions; public static class UserServiceExtensions { public static EntityPermission? GetPermissions(this IUserService userService, IUser? user, string path) + { + return userService.GetAllPermissions(user, path).FirstOrDefault(); + } + + public static EntityPermissionCollection GetAllPermissions(this IUserService userService, IUser? user, string path) { var ids = path.Split(Constants.CharArrays.Comma, StringSplitOptions.RemoveEmptyEntries) .Select(x => @@ -23,7 +28,7 @@ public static class UserServiceExtensions " could not be parsed into an array of integers or the path was empty"); } - return userService.GetPermissions(user, ids[^1]).FirstOrDefault(); + return userService.GetPermissions(user, ids[^1]); } /// diff --git a/src/Umbraco.PublishedCache.NuCache/Persistence/NuCacheContentRepository.cs b/src/Umbraco.PublishedCache.NuCache/Persistence/NuCacheContentRepository.cs index af8c46821f..f54158dac1 100644 --- a/src/Umbraco.PublishedCache.NuCache/Persistence/NuCacheContentRepository.cs +++ b/src/Umbraco.PublishedCache.NuCache/Persistence/NuCacheContentRepository.cs @@ -224,7 +224,7 @@ AND cmsContentNu.nodeId IS NULL IContentCacheDataSerializer serializer = _contentCacheDataSerializerFactory.Create(ContentCacheDataSerializerEntityType.Document); - IEnumerable dtos = GetContentNodeDtos(sql); + IEnumerable dtos = GetContentNodeDtos(sql, Constants.ObjectTypes.Document); foreach (ContentSourceDto row in dtos) { @@ -242,7 +242,7 @@ AND cmsContentNu.nodeId IS NULL IContentCacheDataSerializer serializer = _contentCacheDataSerializerFactory.Create(ContentCacheDataSerializerEntityType.Document); - IEnumerable dtos = GetContentNodeDtos(sql); + IEnumerable dtos = GetContentNodeDtos(sql, Constants.ObjectTypes.Document); foreach (ContentSourceDto row in dtos) { @@ -265,7 +265,7 @@ AND cmsContentNu.nodeId IS NULL IContentCacheDataSerializer serializer = _contentCacheDataSerializerFactory.Create(ContentCacheDataSerializerEntityType.Document); - IEnumerable dtos = GetContentNodeDtos(sql); + IEnumerable dtos = GetContentNodeDtos(sql, Constants.ObjectTypes.Document); foreach (ContentSourceDto row in dtos) { @@ -301,7 +301,7 @@ AND cmsContentNu.nodeId IS NULL IContentCacheDataSerializer serializer = _contentCacheDataSerializerFactory.Create(ContentCacheDataSerializerEntityType.Media); - IEnumerable dtos = GetContentNodeDtos(sql); + IEnumerable dtos = GetContentNodeDtos(sql, Constants.ObjectTypes.Media); foreach (ContentSourceDto row in dtos) { @@ -319,7 +319,7 @@ AND cmsContentNu.nodeId IS NULL IContentCacheDataSerializer serializer = _contentCacheDataSerializerFactory.Create(ContentCacheDataSerializerEntityType.Media); - IEnumerable dtos = GetContentNodeDtos(sql); + IEnumerable dtos = GetContentNodeDtos(sql, Constants.ObjectTypes.Media); foreach (ContentSourceDto row in dtos) { @@ -342,7 +342,7 @@ AND cmsContentNu.nodeId IS NULL IContentCacheDataSerializer serializer = _contentCacheDataSerializerFactory.Create(ContentCacheDataSerializerEntityType.Media); - IEnumerable dtos = GetContentNodeDtos(sql); + IEnumerable dtos = GetContentNodeDtos(sql, Constants.ObjectTypes.Media); foreach (ContentSourceDto row in dtos) { @@ -990,7 +990,7 @@ WHERE cmsContentNu.nodeId IN ( return s; } - private IEnumerable GetContentNodeDtos(Sql sql) + private IEnumerable GetContentNodeDtos(Sql sql, Guid nodeObjectType) { // We need to page here. We don't want to iterate over every single row in one connection cuz this can cause an SQL Timeout. // We also want to read with a db reader and not load everything into memory, QueryPaged lets us do that. @@ -1000,7 +1000,7 @@ WHERE cmsContentNu.nodeId IN ( { // Use a more efficient COUNT query Sql? sqlCountQuery = SqlContentSourcesCount() - .Append(SqlObjectTypeNotTrashed(SqlContext, Constants.ObjectTypes.Document)); + .Append(SqlObjectTypeNotTrashed(SqlContext, nodeObjectType)); Sql? sqlCount = SqlContext.Sql("SELECT COUNT(*) FROM (").Append(sqlCountQuery).Append(") npoco_tbl"); diff --git a/src/Umbraco.Web.BackOffice/Controllers/ContentController.cs b/src/Umbraco.Web.BackOffice/Controllers/ContentController.cs index 9ec67319d9..f41a5e4c3a 100644 --- a/src/Umbraco.Web.BackOffice/Controllers/ContentController.cs +++ b/src/Umbraco.Web.BackOffice/Controllers/ContentController.cs @@ -2337,11 +2337,11 @@ public class ContentController : ContentControllerBase return NotFound("There is no content node with id {model.NodeId}."); } - EntityPermission? permission = - _userService.GetPermissions(_backofficeSecurityAccessor.BackOfficeSecurity?.CurrentUser, node.Path); + // Validate permissions on node + var permissions = _userService.GetAllPermissions(_backofficeSecurityAccessor.BackOfficeSecurity?.CurrentUser, node.Path); - - if (permission?.AssignedPermissions.Contains(ActionAssignDomain.ActionLetter.ToString(), StringComparer.Ordinal) == false) + if (permissions.Any(x => + x.AssignedPermissions.Contains(ActionAssignDomain.ActionLetter.ToString(), StringComparer.Ordinal) && x.EntityId == node.Id) == false) { HttpContext.SetReasonPhrase("Permission Denied."); return BadRequest("You do not have permission to assign domains on that node."); From be39b9c19a08050f67d46a3f96dc5084ae695849 Mon Sep 17 00:00:00 2001 From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com> Date: Tue, 14 Nov 2023 13:08:29 +0100 Subject: [PATCH 02/38] V10: Update @umbraco-ui/uui, jQuery, ace-editor, nouislider, spectrum-colorpicker2 (#15197) * V13: Add support for Node.js 20 (#15022) * update versionSpec to nodejs 20 and avoid specifying minor and patch versions to improve Azure Pipelines stability * update engines and package lock files * update helpful displayNames for npm builds * add retry to counter nodejs.org timeouts add retryCountOnTaskFailure as suggested on https://developercommunity.visualstudio.com/t/NodeTool0-task-to-install-nodejs-fails/10455454 * update lockfile * bump nvm support to latest node.js 20.9 LTS * build(deps): bump @umbraco-ui/uui from 1.3.0 to 1.5.0 * build(deps): bump public dependencies to latest * build(deps-dev): bump build dependencies to latest * build(deps-dev): bump test tools to latest * build: add script to lint and run --fix * revert login merge from v13 --- build/azure-pipelines.yml | 11 +- src/Umbraco.Web.UI.Client/.nvmrc | 1 + src/Umbraco.Web.UI.Client/package-lock.json | 3754 +++++++++-------- src/Umbraco.Web.UI.Client/package.json | 37 +- .../grid/config/grid.default.config.js | 4 +- 5 files changed, 1916 insertions(+), 1891 deletions(-) create mode 100644 src/Umbraco.Web.UI.Client/.nvmrc diff --git a/build/azure-pipelines.yml b/build/azure-pipelines.yml index ec4874570f..ebfc4a5e19 100644 --- a/build/azure-pipelines.yml +++ b/build/azure-pipelines.yml @@ -43,7 +43,7 @@ parameters: default: ' ' variables: - nodeVersion: 14.18.1 + nodeVersion: 20 dotnetVersion: 6.x dotnetIncludePreviewVersions: false solution: umbraco.sln @@ -69,6 +69,7 @@ stages: steps: - task: NodeTool@0 displayName: Use Node.js $(nodeVersion) + retryCountOnTaskFailure: 3 inputs: versionSpec: $(nodeVersion) - task: Cache@2 @@ -81,9 +82,9 @@ stages: path: $(npm_config_cache) - script: npm ci --no-fund --no-audit --prefer-offline workingDirectory: src/Umbraco.Web.UI.Client - displayName: Run npm ci + displayName: Run npm ci (Backoffice) - task: gulp@0 - displayName: Run gulp build + displayName: Run gulp build (Backoffice) inputs: gulpFile: src/Umbraco.Web.UI.Client/gulpfile.js targets: coreBuild @@ -208,7 +209,8 @@ stages: vmImage: 'ubuntu-latest' steps: - task: NodeTool@0 - displayName: Use Node.js 10.15.0 + displayName: Use Node.js 10.15.x + retryCountOnTaskFailure: 3 inputs: versionSpec: 10.15.0 # Won't work with higher versions - script: | @@ -442,6 +444,7 @@ stages: path: $(Build.SourcesDirectory)/tests/Umbraco.Tests.AcceptanceTest/misc/nupkg - task: NodeTool@0 displayName: Use Node.js $(nodeVersion) + retryCountOnTaskFailure: 3 inputs: versionSpec: $(nodeVersion) - task: Cache@2 diff --git a/src/Umbraco.Web.UI.Client/.nvmrc b/src/Umbraco.Web.UI.Client/.nvmrc new file mode 100644 index 0000000000..48ef2c10ba --- /dev/null +++ b/src/Umbraco.Web.UI.Client/.nvmrc @@ -0,0 +1 @@ +20.9 diff --git a/src/Umbraco.Web.UI.Client/package-lock.json b/src/Umbraco.Web.UI.Client/package-lock.json index b2176d277a..e249f70e27 100644 --- a/src/Umbraco.Web.UI.Client/package-lock.json +++ b/src/Umbraco.Web.UI.Client/package-lock.json @@ -7,9 +7,9 @@ "name": "ui", "dependencies": { "@microsoft/signalr": "6.0.9", - "@umbraco-ui/uui": "1.3.0", - "@umbraco-ui/uui-css": "1.3.0", - "ace-builds": "1.22.1", + "@umbraco-ui/uui": "1.5.0", + "@umbraco-ui/uui-css": "1.5.0", + "ace-builds": "1.31.1", "angular": "1.8.3", "angular-animate": "1.8.3", "angular-aria": "1.8.3", @@ -31,14 +31,14 @@ "diff": "5.1.0", "flatpickr": "4.6.13", "font-awesome": "4.7.0", - "jquery": "3.7.0", + "jquery": "3.7.1", "jquery-ui-dist": "1.13.2", "jquery-ui-touch-punch": "0.2.3", "lazyload-js": "1.0.0", "moment": "2.29.4", "ng-file-upload": "12.2.13", - "nouislider": "15.6.1", - "spectrum-colorpicker2": "2.0.9", + "nouislider": "15.7.1", + "spectrum-colorpicker2": "2.0.10", "tinymce": "4.9.11", "typeahead.js": "0.11.1", "underscore": "1.13.6", @@ -47,8 +47,8 @@ "devDependencies": { "@babel/core": "7.19.1", "@babel/preset-env": "7.19.1", - "autoprefixer": "10.4.14", - "cssnano": "5.1.13", + "autoprefixer": "10.4.16", + "cssnano": "6.0.1", "gulp": "4.0.2", "gulp-angular-embed-templates": "2.3.0", "gulp-babel": "8.0.0", @@ -67,22 +67,22 @@ "gulp-watch": "5.0.1", "gulp-wrap": "0.15.0", "gulp-wrap-js": "0.4.1", - "jasmine-core": "4.4.0", - "jsdom": "20.0.0", - "karma": "6.4.0", + "jasmine-core": "5.1.1", + "jsdom": "22.1.0", + "karma": "6.4.2", "karma-jasmine": "5.1.0", - "karma-jsdom-launcher": "13.0.0", + "karma-jsdom-launcher": "15.0.0", "karma-junit-reporter": "2.0.1", - "karma-spec-reporter": "0.0.34", - "less": "4.1.3", + "karma-spec-reporter": "0.0.36", + "less": "4.2.0", "lodash": "4.17.21", "merge-stream": "2.0.0", - "postcss": "8.4.16", + "postcss": "8.4.31", "run-sequence": "2.2.1" }, "engines": { - "node": ">=14.0.0 <17", - "npm": ">=8.0.0 < 9" + "node": ">=20.9", + "npm": ">=10.1" } }, "node_modules/@ampproject/remapping": { @@ -1858,14 +1858,14 @@ } }, "node_modules/@lit-labs/ssr-dom-shim": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.1.1.tgz", - "integrity": "sha512-kXOeFbfCm4fFf2A3WwVEeQj55tMZa8c8/f9AKHMobQMkzNUfUj+antR3fRPaZJawsa1aZiP/Da3ndpZrwEe4rQ==" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.1.2.tgz", + "integrity": "sha512-jnOD+/+dSrfTWYfSXBXlo5l5f0q1UuJo3tkbMDCYA2lKUYq79jaxqtGEvnRoh049nt1vdo1+45RinipU6FGY2g==" }, "node_modules/@lit/reactive-element": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-1.6.2.tgz", - "integrity": "sha512-rDfl+QnCYjuIGf5xI2sVJWdYIi56CTCwWa+nidKYX6oIuBYwUbT/vX4qbUDlHiZKJ/3FRNQ/tWJui44p6/stSA==", + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-1.6.3.tgz", + "integrity": "sha512-QuTgnG52Poic7uM1AN5yJ09QMe0O28e10XzSvWDz02TJiiKee4stsiownEIadWm8nYzyDAyT+gKzUoZmiWQtsQ==", "dependencies": { "@lit-labs/ssr-dom-shim": "^1.0.0" } @@ -1998,785 +1998,838 @@ "optional": true }, "node_modules/@types/trusted-types": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.3.tgz", - "integrity": "sha512-NfQ4gyz38SL8sDNrSixxU2Os1a5xcdFxipAFxYEuLUlvU2uDwS4NUpsImcf1//SlWItCVMMLiylsxbmNMToV/g==" + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.6.tgz", + "integrity": "sha512-HYtNooPvUY9WAVRBr4u+4Qa9fYD1ze2IUlAD3HoA6oehn1taGwBx3Oa52U4mTslTS+GAExKpaFu39Y5xUEwfjg==" }, "node_modules/@umbraco-ui/uui": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui/-/uui-1.3.0.tgz", - "integrity": "sha512-Zx30c08U0muc2T1ZAPYvKTsa8eNd19b96tIzOhvwHzsjNy56kdYKExPDKkvQ49Blzv9/SxKt4eVghZRNrBdUBg==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui/-/uui-1.5.0.tgz", + "integrity": "sha512-V9pAdCsiaBy+Vq23sZd9JJCk+TX6xMsclJtTUWhwCq8/YUh6KNERbdoVfMYGUZ1yyJ/g+yddQsWlYOxHNp8msw==", "dependencies": { - "@umbraco-ui/uui-action-bar": "1.3.0", - "@umbraco-ui/uui-avatar": "1.3.0", - "@umbraco-ui/uui-avatar-group": "1.3.0", - "@umbraco-ui/uui-badge": "1.3.0", - "@umbraco-ui/uui-base": "1.3.0", - "@umbraco-ui/uui-boolean-input": "1.3.0", - "@umbraco-ui/uui-box": "1.3.0", - "@umbraco-ui/uui-breadcrumbs": "1.3.0", - "@umbraco-ui/uui-button": "1.3.0", - "@umbraco-ui/uui-button-group": "1.3.0", - "@umbraco-ui/uui-button-inline-create": "1.3.0", - "@umbraco-ui/uui-card": "1.3.0", - "@umbraco-ui/uui-card-content-node": "1.3.0", - "@umbraco-ui/uui-card-media": "1.3.0", - "@umbraco-ui/uui-card-user": "1.3.0", - "@umbraco-ui/uui-caret": "1.3.0", - "@umbraco-ui/uui-checkbox": "1.3.0", - "@umbraco-ui/uui-color-area": "1.3.0", - "@umbraco-ui/uui-color-picker": "1.3.0", - "@umbraco-ui/uui-color-slider": "1.3.0", - "@umbraco-ui/uui-color-swatch": "1.3.0", - "@umbraco-ui/uui-color-swatches": "1.3.0", - "@umbraco-ui/uui-combobox": "1.3.0", - "@umbraco-ui/uui-combobox-list": "1.3.0", - "@umbraco-ui/uui-css": "1.3.0", - "@umbraco-ui/uui-dialog": "1.3.0", - "@umbraco-ui/uui-dialog-layout": "1.3.0", - "@umbraco-ui/uui-file-dropzone": "1.3.0", - "@umbraco-ui/uui-file-preview": "1.3.0", - "@umbraco-ui/uui-form": "1.3.0", - "@umbraco-ui/uui-form-layout-item": "1.3.0", - "@umbraco-ui/uui-form-validation-message": "1.3.0", - "@umbraco-ui/uui-icon": "1.3.0", - "@umbraco-ui/uui-icon-registry": "1.3.0", - "@umbraco-ui/uui-icon-registry-essential": "1.3.0", - "@umbraco-ui/uui-input": "1.3.0", - "@umbraco-ui/uui-input-file": "1.3.0", - "@umbraco-ui/uui-input-lock": "1.3.0", - "@umbraco-ui/uui-input-password": "1.3.0", - "@umbraco-ui/uui-keyboard-shortcut": "1.3.0", - "@umbraco-ui/uui-label": "1.3.0", - "@umbraco-ui/uui-loader": "1.3.0", - "@umbraco-ui/uui-loader-bar": "1.3.0", - "@umbraco-ui/uui-loader-circle": "1.3.0", - "@umbraco-ui/uui-menu-item": "1.3.0", - "@umbraco-ui/uui-modal": "1.3.0", - "@umbraco-ui/uui-pagination": "1.3.0", - "@umbraco-ui/uui-popover": "1.3.0", - "@umbraco-ui/uui-progress-bar": "1.3.0", - "@umbraco-ui/uui-radio": "1.3.0", - "@umbraco-ui/uui-range-slider": "1.3.0", - "@umbraco-ui/uui-ref": "1.3.0", - "@umbraco-ui/uui-ref-list": "1.3.0", - "@umbraco-ui/uui-ref-node": "1.3.0", - "@umbraco-ui/uui-ref-node-data-type": "1.3.0", - "@umbraco-ui/uui-ref-node-document-type": "1.3.0", - "@umbraco-ui/uui-ref-node-form": "1.3.0", - "@umbraco-ui/uui-ref-node-member": "1.3.0", - "@umbraco-ui/uui-ref-node-package": "1.3.0", - "@umbraco-ui/uui-ref-node-user": "1.3.0", - "@umbraco-ui/uui-scroll-container": "1.3.0", - "@umbraco-ui/uui-select": "1.3.0", - "@umbraco-ui/uui-slider": "1.3.0", - "@umbraco-ui/uui-symbol-expand": "1.3.0", - "@umbraco-ui/uui-symbol-file": "1.3.0", - "@umbraco-ui/uui-symbol-file-dropzone": "1.3.0", - "@umbraco-ui/uui-symbol-file-thumbnail": "1.3.0", - "@umbraco-ui/uui-symbol-folder": "1.3.0", - "@umbraco-ui/uui-symbol-lock": "1.3.0", - "@umbraco-ui/uui-symbol-more": "1.3.0", - "@umbraco-ui/uui-symbol-sort": "1.3.0", - "@umbraco-ui/uui-table": "1.3.0", - "@umbraco-ui/uui-tabs": "1.3.0", - "@umbraco-ui/uui-tag": "1.3.0", - "@umbraco-ui/uui-textarea": "1.3.0", - "@umbraco-ui/uui-toast-notification": "1.3.0", - "@umbraco-ui/uui-toast-notification-container": "1.3.0", - "@umbraco-ui/uui-toast-notification-layout": "1.3.0", - "@umbraco-ui/uui-toggle": "1.3.0" + "@umbraco-ui/uui-action-bar": "1.5.0", + "@umbraco-ui/uui-avatar": "1.5.0", + "@umbraco-ui/uui-avatar-group": "1.5.0", + "@umbraco-ui/uui-badge": "1.5.0", + "@umbraco-ui/uui-base": "1.5.0", + "@umbraco-ui/uui-boolean-input": "1.5.0", + "@umbraco-ui/uui-box": "1.5.0", + "@umbraco-ui/uui-breadcrumbs": "1.5.0", + "@umbraco-ui/uui-button": "1.5.0", + "@umbraco-ui/uui-button-group": "1.5.0", + "@umbraco-ui/uui-button-inline-create": "1.5.0", + "@umbraco-ui/uui-card": "1.5.0", + "@umbraco-ui/uui-card-content-node": "1.5.0", + "@umbraco-ui/uui-card-media": "1.5.0", + "@umbraco-ui/uui-card-user": "1.5.0", + "@umbraco-ui/uui-caret": "1.5.0", + "@umbraco-ui/uui-checkbox": "1.5.0", + "@umbraco-ui/uui-color-area": "1.5.0", + "@umbraco-ui/uui-color-picker": "1.5.0", + "@umbraco-ui/uui-color-slider": "1.5.0", + "@umbraco-ui/uui-color-swatch": "1.5.0", + "@umbraco-ui/uui-color-swatches": "1.5.0", + "@umbraco-ui/uui-combobox": "1.5.0", + "@umbraco-ui/uui-combobox-list": "1.5.0", + "@umbraco-ui/uui-css": "1.5.0", + "@umbraco-ui/uui-dialog": "1.5.0", + "@umbraco-ui/uui-dialog-layout": "1.5.0", + "@umbraco-ui/uui-file-dropzone": "1.5.0", + "@umbraco-ui/uui-file-preview": "1.5.0", + "@umbraco-ui/uui-form": "1.5.0", + "@umbraco-ui/uui-form-layout-item": "1.5.0", + "@umbraco-ui/uui-form-validation-message": "1.5.0", + "@umbraco-ui/uui-icon": "1.5.0", + "@umbraco-ui/uui-icon-registry": "1.5.0", + "@umbraco-ui/uui-icon-registry-essential": "1.5.0", + "@umbraco-ui/uui-input": "1.5.0", + "@umbraco-ui/uui-input-file": "1.5.0", + "@umbraco-ui/uui-input-lock": "1.5.0", + "@umbraco-ui/uui-input-password": "1.5.0", + "@umbraco-ui/uui-keyboard-shortcut": "1.5.0", + "@umbraco-ui/uui-label": "1.5.0", + "@umbraco-ui/uui-loader": "1.5.0", + "@umbraco-ui/uui-loader-bar": "1.5.0", + "@umbraco-ui/uui-loader-circle": "1.5.0", + "@umbraco-ui/uui-menu-item": "1.5.0", + "@umbraco-ui/uui-modal": "1.5.0", + "@umbraco-ui/uui-pagination": "1.5.0", + "@umbraco-ui/uui-popover": "1.5.0", + "@umbraco-ui/uui-popover-container": "1.5.0", + "@umbraco-ui/uui-progress-bar": "1.5.0", + "@umbraco-ui/uui-radio": "1.5.0", + "@umbraco-ui/uui-range-slider": "1.5.0", + "@umbraco-ui/uui-ref": "1.5.0", + "@umbraco-ui/uui-ref-list": "1.5.0", + "@umbraco-ui/uui-ref-node": "1.5.0", + "@umbraco-ui/uui-ref-node-data-type": "1.5.0", + "@umbraco-ui/uui-ref-node-document-type": "1.5.0", + "@umbraco-ui/uui-ref-node-form": "1.5.0", + "@umbraco-ui/uui-ref-node-member": "1.5.0", + "@umbraco-ui/uui-ref-node-package": "1.5.0", + "@umbraco-ui/uui-ref-node-user": "1.5.0", + "@umbraco-ui/uui-scroll-container": "1.5.0", + "@umbraco-ui/uui-select": "1.5.0", + "@umbraco-ui/uui-slider": "1.5.0", + "@umbraco-ui/uui-symbol-expand": "1.5.0", + "@umbraco-ui/uui-symbol-file": "1.5.0", + "@umbraco-ui/uui-symbol-file-dropzone": "1.5.0", + "@umbraco-ui/uui-symbol-file-thumbnail": "1.5.0", + "@umbraco-ui/uui-symbol-folder": "1.5.0", + "@umbraco-ui/uui-symbol-lock": "1.5.0", + "@umbraco-ui/uui-symbol-more": "1.5.0", + "@umbraco-ui/uui-symbol-sort": "1.5.0", + "@umbraco-ui/uui-table": "1.5.0", + "@umbraco-ui/uui-tabs": "1.5.0", + "@umbraco-ui/uui-tag": "1.5.0", + "@umbraco-ui/uui-textarea": "1.5.0", + "@umbraco-ui/uui-toast-notification": "1.5.0", + "@umbraco-ui/uui-toast-notification-container": "1.5.0", + "@umbraco-ui/uui-toast-notification-layout": "1.5.0", + "@umbraco-ui/uui-toggle": "1.5.0", + "@umbraco-ui/uui-visually-hidden": "1.5.0" } }, "node_modules/@umbraco-ui/uui-action-bar": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-action-bar/-/uui-action-bar-1.3.0.tgz", - "integrity": "sha512-r7iJpaRPfXcaKFkd0V706DSscv8qE7wkz7cjM1ARQoTF6n9Ihgo3sBRNSQY8KK+qMrVZiRy7DAyEbFga1xXfPA==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-action-bar/-/uui-action-bar-1.5.0.tgz", + "integrity": "sha512-2B4ONNRTEtoKjnBo8mtvQo2Y9WW7LDSx6q85UuA+YEWfMOgZ0hr0lFepPg+qq/q90/8ZIoItoxRo16UFrPVaHQ==", "dependencies": { - "@umbraco-ui/uui-base": "1.3.0", - "@umbraco-ui/uui-button-group": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0", + "@umbraco-ui/uui-button-group": "1.5.0" } }, "node_modules/@umbraco-ui/uui-avatar": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-avatar/-/uui-avatar-1.3.0.tgz", - "integrity": "sha512-hj1rTzbWx2g+YQGBjwhoDcO0uVAON2K+Y17wgvH/Zf3iTmX2MGlns0iUtlyhOnyIH9cX2qA7TawuVXJY1m6GrQ==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-avatar/-/uui-avatar-1.5.0.tgz", + "integrity": "sha512-Iw4MQ2IMfJq590ydA6d2WXJ3gC7wO1vpA6tZj3T772B81LBZR31ftoMn3ho4cpavV5Nv4LvBnGhc2YajbsVn5A==", "dependencies": { - "@umbraco-ui/uui-base": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0" } }, "node_modules/@umbraco-ui/uui-avatar-group": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-avatar-group/-/uui-avatar-group-1.3.0.tgz", - "integrity": "sha512-RtMdnNdY5brjme+dV9y84vCgBcKgVDRkDPhLnGb555kkac8hAh53HlOEhc50RwQTV00D91PP68elU8X0DRB5BQ==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-avatar-group/-/uui-avatar-group-1.5.0.tgz", + "integrity": "sha512-hlmqOGLQIN8uJMoLgT+RPHFWIxi8Ridhp/MrKgEjuNF6sTu4bCQyN28XuC9JD+4vBcSjU4a893QGvckalQxZiA==", "dependencies": { - "@umbraco-ui/uui-avatar": "1.3.0", - "@umbraco-ui/uui-base": "1.3.0" + "@umbraco-ui/uui-avatar": "1.5.0", + "@umbraco-ui/uui-base": "1.5.0" } }, "node_modules/@umbraco-ui/uui-badge": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-badge/-/uui-badge-1.3.0.tgz", - "integrity": "sha512-AIAmoI1elKuAowm/Cw3lG3LYM6f31z6rUgu61NMGP9seLv8kVn9Ed4joqng9NFTWXHZgb7QWfplX5V/8cI8/GA==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-badge/-/uui-badge-1.5.0.tgz", + "integrity": "sha512-6azqqcqRzVHXYz/JfAody6kDZQG3hiBTiCS8EEYY9GcFNqh8BvFLX4yK9R6zz5BVrjgT3qkmPpE2iIpqV6J58A==", "dependencies": { - "@umbraco-ui/uui-base": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0" } }, "node_modules/@umbraco-ui/uui-base": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-base/-/uui-base-1.3.0.tgz", - "integrity": "sha512-2puL+mqSuYXVcy2bsmlyHtMS14OMlZL3nBQ0GzlwrQS/rncKabOiv6zsPBobv+UqQUnIiy+Ms4cfylbWODzVIw==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-base/-/uui-base-1.5.0.tgz", + "integrity": "sha512-HzKRvbf/aPA1y8l9ZLTvF5Up7W6jX8UwqVUr1B8lwckI6tgxOEFPqLya+U4papqZDh4wz/lysXSDESeVfUy8cw==", "dependencies": { "lit": "^2.3.1" } }, "node_modules/@umbraco-ui/uui-boolean-input": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-boolean-input/-/uui-boolean-input-1.3.0.tgz", - "integrity": "sha512-xQpr/Aq1kNGSWNvEaUbfUC1Gj4JZ+T5LrVdsjNBZZpZMyFbs2WHEZnBlpZkv3tSAgyZaIlWRat7ZMRWWL7BpDg==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-boolean-input/-/uui-boolean-input-1.5.0.tgz", + "integrity": "sha512-uhIPzi7n3Z4Li3n688Q8v3725apwasZvPntm7kMdtssXay6hUHOcor+hkpPavGXRVxZGg+9gIYRM6sQWp853cA==", "dependencies": { - "@umbraco-ui/uui-base": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0" } }, "node_modules/@umbraco-ui/uui-box": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-box/-/uui-box-1.3.0.tgz", - "integrity": "sha512-VYBFilLZLC2KB5tYMg/CjPm6+fxFtJ/8Wi7u1FdUXMLuzmoleeNkHUXWYQe7BBIICYs9t8f0ewQG0N0G56M7mg==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-box/-/uui-box-1.5.0.tgz", + "integrity": "sha512-uTHBvwzS9pRu0MVfN74+bux6lK0m1AmY/7xor9ez9/uzDyIK096D9jSLTQkfDyngIhqnV6kFLbG7PqcfQURFJQ==", "dependencies": { - "@umbraco-ui/uui-base": "1.3.0", - "@umbraco-ui/uui-css": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0", + "@umbraco-ui/uui-css": "1.4.0" + } + }, + "node_modules/@umbraco-ui/uui-box/node_modules/@umbraco-ui/uui-css": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-css/-/uui-css-1.4.0.tgz", + "integrity": "sha512-HBCFPuXJijeZbjnjdqmg3oqOGB3RmpQKT/s/Uy0TSJfaQGfz0e73o2eRghYHWF2rdqHw6brKFrZTZHBVvCE/xA==", + "dependencies": { + "lit": "^2.2.2" } }, "node_modules/@umbraco-ui/uui-breadcrumbs": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-breadcrumbs/-/uui-breadcrumbs-1.3.0.tgz", - "integrity": "sha512-gxQXJSasmop7ZSTFbygZ65lIn84rr9bolnUW5CyO/f0dciNYpSfZqUfK8y2QvQFrGvfgYf3BUVGbL8reucQLuQ==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-breadcrumbs/-/uui-breadcrumbs-1.5.0.tgz", + "integrity": "sha512-mXuzt5o4NZ1E/HVTLYq+TklX9VQSH5zce+Ef1t2EgUE3EFQH0fwcdCRBC9SpklueNj46ngGHmVhyfv8ekne1Wg==", "dependencies": { - "@umbraco-ui/uui-base": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0" } }, "node_modules/@umbraco-ui/uui-button": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-button/-/uui-button-1.3.0.tgz", - "integrity": "sha512-+SvGpevoYof0gFU5ed5oQSiH9JIq41ltZU6Hx3RAhG8Q74IplEhKCiRAMKaQYuketSz7ckqVQlZLVPiKQjKLvg==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-button/-/uui-button-1.5.0.tgz", + "integrity": "sha512-ujicvfqUAN0JtBcgj8OG1YcyDaArTBdP5LvNsyYB8s0dePgcws71XzJ1mbHbXhuA386ioNue04yGDL+gSFlJ/A==", "dependencies": { - "@umbraco-ui/uui-base": "1.3.0", - "@umbraco-ui/uui-icon-registry-essential": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0", + "@umbraco-ui/uui-icon-registry-essential": "1.5.0" } }, "node_modules/@umbraco-ui/uui-button-group": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-button-group/-/uui-button-group-1.3.0.tgz", - "integrity": "sha512-8yb5gkwY8nmhG260R+dmlv4l3BWIOWfuBtwdke6p1+2/305sLKMkDOSgMpw0Sm8M32BzIiEAGwMJgSirnPtahg==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-button-group/-/uui-button-group-1.5.0.tgz", + "integrity": "sha512-8yhFdfg7p1B8MM2fIxIlc0Mmhnx46scdGhqeRhvaQ2/dcdpVTI1j1hI2JyOM18TUhJeot4olLqwatlXxlFFT+A==", "dependencies": { - "@umbraco-ui/uui-base": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0" } }, "node_modules/@umbraco-ui/uui-button-inline-create": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-button-inline-create/-/uui-button-inline-create-1.3.0.tgz", - "integrity": "sha512-QspinKWiMSG6umA0zzSEU6WQn3vjy/yWsasZBGqNV+Fi2/UOCiEoUhLtb2GUIASpe634Le3txgkEagypP5zsXA==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-button-inline-create/-/uui-button-inline-create-1.5.0.tgz", + "integrity": "sha512-J60vRf7nzQyRYKj+qYhMQR6LrQH6PyTrxyqyfDOVGzcWKzsTuRahxuVOIOzrs489cznwRYwL11jtK32MlrSjGQ==", "dependencies": { - "@umbraco-ui/uui-base": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0" } }, "node_modules/@umbraco-ui/uui-card": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-card/-/uui-card-1.3.0.tgz", - "integrity": "sha512-SntgALMe99V0moXI/7PmrO4RV9rZaI5xSkymqsPwmwSKxz15hENY7eVW45ByRUMpd6xWv6cblhDWJhwu2CFyQA==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-card/-/uui-card-1.5.0.tgz", + "integrity": "sha512-RgpnQca3rpjMG/3DAmmrExI7gmNNHBNYwfjRqgCd/3QkBwRrtT/+jdppVsGRxxW5xAN90sJ/eLP7i3F5EfWlSA==", "dependencies": { - "@umbraco-ui/uui-base": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0" } }, "node_modules/@umbraco-ui/uui-card-content-node": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-card-content-node/-/uui-card-content-node-1.3.0.tgz", - "integrity": "sha512-NqP7B2gfxWeL8eHieV3IS3fMm6jyZuhZ7QeZbYYAkTOCPbE2MBJtkLX1Z5sypTmaL7fdzd3zqAM1dF+Gu108GA==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-card-content-node/-/uui-card-content-node-1.5.0.tgz", + "integrity": "sha512-aYGeTsppWT0KS9orrqkl9DF2v5l3gSGhBJZqIPiHVBOzczYIcgLWJbdAkaCgpwh1Zacbv3tnB/76965fd4EwPw==", "dependencies": { - "@umbraco-ui/uui-base": "1.3.0", - "@umbraco-ui/uui-card": "1.3.0", - "@umbraco-ui/uui-icon": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0", + "@umbraco-ui/uui-card": "1.5.0", + "@umbraco-ui/uui-icon": "1.5.0" } }, "node_modules/@umbraco-ui/uui-card-media": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-card-media/-/uui-card-media-1.3.0.tgz", - "integrity": "sha512-F1+l7rLjpe5hiqmHIAqQRWi/T7lIQL4l65+DzS9UEeEJR1YDI/EZ3pITC0Bi6oTsrKpViIh9bJxHeIyw0G2qcQ==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-card-media/-/uui-card-media-1.5.0.tgz", + "integrity": "sha512-0KktT0IExh06W7QP1FMNqU+tpUL1qDwWeeA19PbZPXwHg15hbSW15a+Hc4aiwqlHYHOPT2gxXoiVc7jqWlMcSQ==", "dependencies": { - "@umbraco-ui/uui-base": "1.3.0", - "@umbraco-ui/uui-card": "1.3.0", - "@umbraco-ui/uui-symbol-file": "1.3.0", - "@umbraco-ui/uui-symbol-folder": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0", + "@umbraco-ui/uui-card": "1.5.0", + "@umbraco-ui/uui-symbol-file": "1.5.0", + "@umbraco-ui/uui-symbol-folder": "1.5.0" } }, "node_modules/@umbraco-ui/uui-card-user": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-card-user/-/uui-card-user-1.3.0.tgz", - "integrity": "sha512-A9Lj3mqcv9p72RTwCffFBJUWLaLb/KwJYNecs0Z8XQhubO0dbgHqWhQxasvQb/xBHl49DSINbO80YWE6ViEm4Q==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-card-user/-/uui-card-user-1.5.0.tgz", + "integrity": "sha512-xJjfkRHkt2xim1o+IvEPQiTpIQR+Z9+69096ssuGb3EkxyyUsDmH3aZZH6/+LKdtKR+7mPZVJub9TTWB4VRnwQ==", "dependencies": { - "@umbraco-ui/uui-avatar": "1.3.0", - "@umbraco-ui/uui-base": "1.3.0", - "@umbraco-ui/uui-card": "1.3.0" + "@umbraco-ui/uui-avatar": "1.5.0", + "@umbraco-ui/uui-base": "1.5.0", + "@umbraco-ui/uui-card": "1.5.0" } }, "node_modules/@umbraco-ui/uui-caret": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-caret/-/uui-caret-1.3.0.tgz", - "integrity": "sha512-asEdTV7B83A6XwmOBznhQFp4ASAZw8GNcXXW6Z/ESNDnGY0rgVV0o8TaVK46k3egUQhWeChCayg7eymzXmaETQ==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-caret/-/uui-caret-1.5.0.tgz", + "integrity": "sha512-4Apw4TMALEydo5o31gsIyICuPVyKvG/oySNup+5psU3apS0JDQ1RXCgGVDFoFxt5xzM+iJ6/J8ZOOILMVNFM6Q==", "dependencies": { - "@umbraco-ui/uui-base": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0" } }, "node_modules/@umbraco-ui/uui-checkbox": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-checkbox/-/uui-checkbox-1.3.0.tgz", - "integrity": "sha512-s/2Am7d5E9YyvkHPlcfbd5zPUSDnJ1EgyDKlJKmTPGHYP1ebMcvwnz00a2EsGBAq8eZM+I6ffISZ5lPSPgNHMg==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-checkbox/-/uui-checkbox-1.5.0.tgz", + "integrity": "sha512-Kve+XAIkSFG9kowbZI1MpDEKihpMTtD9q36pcHiVENqxL1+Tydy60yjy3tHV8o6uamJ8qjR6ZlvLttRwLId9tQ==", "dependencies": { - "@umbraco-ui/uui-base": "1.3.0", - "@umbraco-ui/uui-boolean-input": "1.3.0", - "@umbraco-ui/uui-icon-registry-essential": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0", + "@umbraco-ui/uui-boolean-input": "1.5.0", + "@umbraco-ui/uui-icon-registry-essential": "1.5.0" } }, "node_modules/@umbraco-ui/uui-color-area": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-color-area/-/uui-color-area-1.3.0.tgz", - "integrity": "sha512-JcM0WzRk5l21kb9F236ZWtiHy4QD7M8TdTLS2qy+C29BBNYtURE4rMe2HOXv6ebj4mxOWpYEB2vAme6K06CM7w==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-color-area/-/uui-color-area-1.5.0.tgz", + "integrity": "sha512-FF6PrUCBo2nOg5iLbD+iB8aa3Vh+skIfqjFsPD80qLE0sKQ/53juZCnCbvvp7Z0YmIqwBlWP7xGEzJBGfS6OlA==", "dependencies": { - "@umbraco-ui/uui-base": "1.3.0", + "@umbraco-ui/uui-base": "1.5.0", "colord": "^2.9.3" } }, "node_modules/@umbraco-ui/uui-color-picker": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-color-picker/-/uui-color-picker-1.3.0.tgz", - "integrity": "sha512-RQ0UN29fYdy3zKBdoAJpNpfWGp0aXdG0OGVtZ7g3LKQy4UW6Fqih9do2V3AAd01ne1gq+ZiZrbu6d7aIgLuDow==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-color-picker/-/uui-color-picker-1.5.0.tgz", + "integrity": "sha512-y/IwXhtaQJWNjwnZtYTvv47+bsmUYJzFLtXqxGckcUmyJQvoZ6DDxslTSv1B9J3QTXU0zpakqpxPszlNNHUygw==", "dependencies": { - "@umbraco-ui/uui-base": "1.3.0", + "@umbraco-ui/uui-base": "1.5.0", "colord": "^2.9.3" } }, "node_modules/@umbraco-ui/uui-color-slider": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-color-slider/-/uui-color-slider-1.3.0.tgz", - "integrity": "sha512-8vUUJvx8nt75+C2fREpmXUUsQplLPt4k3VlpGZDg2RqkqriJL6KJyO9aUb7kHNPS6j6nvJD6ggsbSouB/oxFiw==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-color-slider/-/uui-color-slider-1.5.0.tgz", + "integrity": "sha512-nkUpUxfD7VlayBHirM56xKqi1h0Opg7Q2suzxEC4KLDVLO1+L0KzsDORn1tfeantSG0PahBMbuve1XOoOwCrAA==", "dependencies": { - "@umbraco-ui/uui-base": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0" } }, "node_modules/@umbraco-ui/uui-color-swatch": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-color-swatch/-/uui-color-swatch-1.3.0.tgz", - "integrity": "sha512-ycIs//+8sru/h0cvxhWusdObkyIsZ+Ohhj7FlsXhUILqFas2mYHoMXlaQWujB9NSVvjgi6aMBHQj1L1BsIa4VQ==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-color-swatch/-/uui-color-swatch-1.5.0.tgz", + "integrity": "sha512-UDqlGmJIMGyn7C23q33v8dkJoISmIAL0XZNTiPkEhwGjKRlxkbexmGd4L4vFt+nhJDRrN86JoZ64BRTHVN8V7A==", "dependencies": { - "@umbraco-ui/uui-base": "1.3.0", - "@umbraco-ui/uui-icon-registry-essential": "1.3.0", + "@umbraco-ui/uui-base": "1.5.0", + "@umbraco-ui/uui-icon-registry-essential": "1.5.0", "colord": "^2.9.3" } }, "node_modules/@umbraco-ui/uui-color-swatches": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-color-swatches/-/uui-color-swatches-1.3.0.tgz", - "integrity": "sha512-uT2P4CFJ550owMKPupLniQX2xtk9Iv0UiVjLH4fmKQv98swGWSJhcUZO6AlV5aU5q8+qBaFvbwxfOCubXYrRdg==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-color-swatches/-/uui-color-swatches-1.5.0.tgz", + "integrity": "sha512-SvTKINbckKvqkkS4XnQfpELkW2x47CUa4PsnXqioXNIWP5sBJb9Kydiu0N1+lV57fAkteqNp+YY8mFxn3a6iPA==", "dependencies": { - "@umbraco-ui/uui-base": "1.3.0", - "@umbraco-ui/uui-color-swatch": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0", + "@umbraco-ui/uui-color-swatch": "1.5.0" } }, "node_modules/@umbraco-ui/uui-combobox": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-combobox/-/uui-combobox-1.3.0.tgz", - "integrity": "sha512-qnG3gdx/CQ62VDX7AfxD1SA2QdwnXcryxWmIckw90Wp4kvFhdRzQa2cBieQU0Nyg5WAx7clBltVlSUkth/x9NA==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-combobox/-/uui-combobox-1.5.0.tgz", + "integrity": "sha512-SoK4+yR0dJViXZinZ7iqowl6tvWPTTPSOBVE7FfOqOAgFoccOE/nQqjeNjSM0co80OKXqHUsh+kX/HwLjdyNEA==", "dependencies": { - "@umbraco-ui/uui-base": "1.3.0", - "@umbraco-ui/uui-button": "1.3.0", - "@umbraco-ui/uui-combobox-list": "1.3.0", - "@umbraco-ui/uui-icon": "1.3.0", - "@umbraco-ui/uui-scroll-container": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0", + "@umbraco-ui/uui-button": "1.5.0", + "@umbraco-ui/uui-combobox-list": "1.5.0", + "@umbraco-ui/uui-icon": "1.5.0", + "@umbraco-ui/uui-scroll-container": "1.5.0" } }, "node_modules/@umbraco-ui/uui-combobox-list": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-combobox-list/-/uui-combobox-list-1.3.0.tgz", - "integrity": "sha512-+RWexG+9XqExbxPWuwEAccdMGj/MkKmC3v/W8EybxO9LhVxzY51sJp36NouzCyGW6IfLkBPDRbFpk5tbLx9w3Q==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-combobox-list/-/uui-combobox-list-1.5.0.tgz", + "integrity": "sha512-5cVlhnst3p6eEHFqn6O8LMswx3wdwpzlfAghleQJW+ZUIVo7ZPXznZz7+6yvnVWxnI7+xxFebHgC0KFxGMUVvg==", "dependencies": { - "@umbraco-ui/uui-base": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0" } }, "node_modules/@umbraco-ui/uui-css": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-css/-/uui-css-1.3.0.tgz", - "integrity": "sha512-btFsjkYo7q+1DHl5BXYdOZ3EKShSmOlcasfR5OEsoEb4houDthRfMCMMhwIppmLDjwarrHwP3vBlXi/feanC7g==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-css/-/uui-css-1.5.0.tgz", + "integrity": "sha512-jBSJg8KTWDG7DOVzz7A+UpMxMNHtddcLgt9k25vC4H+84xl+TN51RFTqF8C0JCZdWFK0eKWYlJsGqVrDfoVCcg==", "dependencies": { "lit": "^2.2.2" } }, "node_modules/@umbraco-ui/uui-dialog": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-dialog/-/uui-dialog-1.3.0.tgz", - "integrity": "sha512-tHniS27WRj3uxDAZYvixOnQ5PBGi2ZZsGRi4zygPeO+kfLMNNlnuC4qmN+ppoUqz1pj89UtOUEHpQxqd6VckUA==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-dialog/-/uui-dialog-1.5.0.tgz", + "integrity": "sha512-m6J5i+eiLdNApryIY1KW/4kyunAuTpkcWBjQmxyESmlDIqRGdW0lqaahQvcZSZHto03jleUdH5wYTLNgKIb/rw==", "dependencies": { - "@umbraco-ui/uui-base": "1.3.0", - "@umbraco-ui/uui-css": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0", + "@umbraco-ui/uui-css": "1.4.0" } }, "node_modules/@umbraco-ui/uui-dialog-layout": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-dialog-layout/-/uui-dialog-layout-1.3.0.tgz", - "integrity": "sha512-gWGVtg5GimIUcMFSsvsrb9rSo1Fg9d5IkeG8oJBp5DGMgh2Hwqwvz2MF6qHg0CCgVyMq/77EoZchwuSsje1zCA==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-dialog-layout/-/uui-dialog-layout-1.5.0.tgz", + "integrity": "sha512-vfZ3FMzYccGBVvSSXvCeoHYX+VU8QppXtFR2OGDZwU0b8BOKtfKTP/2VLPEWCG4vJYKPmqZESo3N9bZXWDkWSg==", "dependencies": { - "@umbraco-ui/uui-base": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0" + } + }, + "node_modules/@umbraco-ui/uui-dialog/node_modules/@umbraco-ui/uui-css": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-css/-/uui-css-1.4.0.tgz", + "integrity": "sha512-HBCFPuXJijeZbjnjdqmg3oqOGB3RmpQKT/s/Uy0TSJfaQGfz0e73o2eRghYHWF2rdqHw6brKFrZTZHBVvCE/xA==", + "dependencies": { + "lit": "^2.2.2" } }, "node_modules/@umbraco-ui/uui-file-dropzone": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-file-dropzone/-/uui-file-dropzone-1.3.0.tgz", - "integrity": "sha512-037GMO6+CVNo6Y5UDM/PUP8U2rvbjpyFbIu/gpICG1YENjC6T/yJV0UgD6cXpDXuEEz5x8E4wIw7kFpzjCrJUw==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-file-dropzone/-/uui-file-dropzone-1.5.0.tgz", + "integrity": "sha512-3rkTWidY4k2fyktRxfsMVTSvF+EIguv9p1Fga7v4DCNkplCp6OyJnwWby5F//+NvTHphaGchxZirOWMLgLyDog==", "dependencies": { - "@umbraco-ui/uui-base": "1.3.0", - "@umbraco-ui/uui-symbol-file-dropzone": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0", + "@umbraco-ui/uui-symbol-file-dropzone": "1.5.0" } }, "node_modules/@umbraco-ui/uui-file-preview": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-file-preview/-/uui-file-preview-1.3.0.tgz", - "integrity": "sha512-iV5HVY3PDcrILC/gANYJyCdoL2Jowb1yYbJZHBP1P7TTqUaGeYuYs3ipgHQ8YY0Yheo9MHknFSA/2kJaQsjOlw==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-file-preview/-/uui-file-preview-1.5.0.tgz", + "integrity": "sha512-Re+R8uZSD3t3jUgZvzG/DfQtihss7aw+rG41IAjmRO9wBZuUAsowfgCd2OJnuOYJXeaqOYYl+QQr7pmR2a/HNQ==", "dependencies": { - "@umbraco-ui/uui-base": "1.3.0", - "@umbraco-ui/uui-symbol-file": "1.3.0", - "@umbraco-ui/uui-symbol-file-thumbnail": "1.3.0", - "@umbraco-ui/uui-symbol-folder": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0", + "@umbraco-ui/uui-symbol-file": "1.5.0", + "@umbraco-ui/uui-symbol-file-thumbnail": "1.5.0", + "@umbraco-ui/uui-symbol-folder": "1.5.0" } }, "node_modules/@umbraco-ui/uui-form": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-form/-/uui-form-1.3.0.tgz", - "integrity": "sha512-7raFihkOQslDzcnZefEoJ0JdPoKS5GWvHRGWl3Ib+HjCorj+TBFrtR/lwZ09iapCizj38C5Xd3t7hBJuWYBTXw==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-form/-/uui-form-1.5.0.tgz", + "integrity": "sha512-rbXFZzAg93/fzvNkxHavUr62DnSeWuVghd9CK9lhe6A9ER9cfjOcGn/INTYK3HHPBalay9IOq+WV1xxC5H6zyg==", "dependencies": { - "@umbraco-ui/uui-base": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0" } }, "node_modules/@umbraco-ui/uui-form-layout-item": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-form-layout-item/-/uui-form-layout-item-1.3.0.tgz", - "integrity": "sha512-f7i1AXIwAYgiPkwsF5ugfaZkJko7X8COTUBGCrzFVV7eb0OmYC5BPKkoJ6zlbhX6lpgkuZvfHO+jqFoegXVqVQ==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-form-layout-item/-/uui-form-layout-item-1.5.0.tgz", + "integrity": "sha512-owla3DWo1deVUEG0JzC7pE70h6Ll6lmbR+B+utbMdEgM6shEMdokpPioeCaXb8v7On9Whz+zJGAGBAYl/oyjug==", "dependencies": { - "@umbraco-ui/uui-base": "1.3.0", - "@umbraco-ui/uui-form-validation-message": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0", + "@umbraco-ui/uui-form-validation-message": "1.5.0" } }, "node_modules/@umbraco-ui/uui-form-validation-message": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-form-validation-message/-/uui-form-validation-message-1.3.0.tgz", - "integrity": "sha512-kHqwt8cf/p9gidAG9HTnSvur1ODycqUs4V2RRj8K78UAMN4Wb+VosmPhobtPNq38GbgthqGHEv85giWfFZ1omA==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-form-validation-message/-/uui-form-validation-message-1.5.0.tgz", + "integrity": "sha512-wuWCzttkUlEctqdJi9qzSzT8h10WvoK3+5usYB9V8NpdPYzOmbXU5RDYpoTWS0nPO56C6rlRlt3TH1khIQtPJA==", "dependencies": { - "@umbraco-ui/uui-base": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0" } }, "node_modules/@umbraco-ui/uui-icon": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-icon/-/uui-icon-1.3.0.tgz", - "integrity": "sha512-esxCauAnddOh5ws/GyKYX2Z1fUGluP8jXHOlRuYTBFLXQtSMFhl0YNieOhT/6B/RieyWF6AUzuKAxfL3YxUHEg==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-icon/-/uui-icon-1.5.0.tgz", + "integrity": "sha512-8Sz6PaYTC8KDCKj5ed+xnlnuh9/NOs0tQGPOma1bnVxGJN8LNjl+cJSLp+iU1m3Qq50H0TG+0K/dS3WUExjbZw==", "dependencies": { - "@umbraco-ui/uui-base": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0" } }, "node_modules/@umbraco-ui/uui-icon-registry": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-icon-registry/-/uui-icon-registry-1.3.0.tgz", - "integrity": "sha512-8YtCKCeg1FFPBMtV6TJu2ZdUjE5uUOdYxIjDhue0VKuia7JH7Rr/HlWGkU6/EduyWzVa+osyFWyIg8R/jj1Alw==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-icon-registry/-/uui-icon-registry-1.5.0.tgz", + "integrity": "sha512-ei+HnaCKFjcCYjHYC0hqncY2vDfbgRkWhftOnrhqVZPJkE4omWDmVsLSGg/vm88ar1QleDmVj+CAa4J9T+uVeg==", "dependencies": { - "@umbraco-ui/uui-base": "1.3.0", - "@umbraco-ui/uui-icon": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0", + "@umbraco-ui/uui-icon": "1.5.0" } }, "node_modules/@umbraco-ui/uui-icon-registry-essential": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-icon-registry-essential/-/uui-icon-registry-essential-1.3.0.tgz", - "integrity": "sha512-S/SO70kLf2sGKRbHcR1CVuIZm5L4Lzhv/sOD/tZjOSbSllNFlge1Aqg1ykBUxrSwdngtDhhvUkWucdfXdaSBkg==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-icon-registry-essential/-/uui-icon-registry-essential-1.5.0.tgz", + "integrity": "sha512-nxNEQDI4SNBXnI2/Ov60vcdzKFyRCInwZDFNAKyt31F1yTNM0EM0ne5yV4AqM6YPOKVoWzqFcLz2rx64X+oLvQ==", "dependencies": { - "@umbraco-ui/uui-base": "1.3.0", - "@umbraco-ui/uui-icon-registry": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0", + "@umbraco-ui/uui-icon-registry": "1.5.0" } }, "node_modules/@umbraco-ui/uui-input": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-input/-/uui-input-1.3.0.tgz", - "integrity": "sha512-ebowNUrRePh0/tc9Wm5s5+VL8PL6a9Q6o8c4TsnjLCPE0RiVDFI0xsepZx0R+kzRJdOw+FRDCUFbpx++0QMEAQ==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-input/-/uui-input-1.5.0.tgz", + "integrity": "sha512-TlbSIRh2Z7xJxW0GEPENd369W1hHgr9Y8IIRE5RDllXzZc8yho4QXPJSDFQTiHMf41LIkOTfIkrQst5047FiXg==", "dependencies": { - "@umbraco-ui/uui-base": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0" } }, "node_modules/@umbraco-ui/uui-input-file": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-input-file/-/uui-input-file-1.3.0.tgz", - "integrity": "sha512-JzG9K8xN1RbYPdlbvVW93Z/zWKUFXIgolG7euu7vJXY2MvNxjlpq4UKTmL/O4d7cb+JKj7MefXLjkqpJccMFgg==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-input-file/-/uui-input-file-1.5.0.tgz", + "integrity": "sha512-8h/qGED5KE7sb/YE7dHapZxcWXGm0qCPJft8AGOu/ZK/WdOUV1WHynLjV4yGVZgY9PVZGc+GQTzvdgwxxpltQw==", "dependencies": { - "@umbraco-ui/uui-action-bar": "1.3.0", - "@umbraco-ui/uui-base": "1.3.0", - "@umbraco-ui/uui-button": "1.3.0", - "@umbraco-ui/uui-file-dropzone": "1.3.0", - "@umbraco-ui/uui-icon": "1.3.0", - "@umbraco-ui/uui-icon-registry-essential": "1.3.0" + "@umbraco-ui/uui-action-bar": "1.5.0", + "@umbraco-ui/uui-base": "1.5.0", + "@umbraco-ui/uui-button": "1.5.0", + "@umbraco-ui/uui-file-dropzone": "1.5.0", + "@umbraco-ui/uui-icon": "1.5.0", + "@umbraco-ui/uui-icon-registry-essential": "1.5.0" } }, "node_modules/@umbraco-ui/uui-input-lock": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-input-lock/-/uui-input-lock-1.3.0.tgz", - "integrity": "sha512-Sz7BYv6Q4bV7QuLIZKpNsHXWdYCxr+Xhgg74HIbwEvFwVHyUOBnd5CPgv8my/IEXkMNBhCblU47cfT7L0UEytA==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-input-lock/-/uui-input-lock-1.5.0.tgz", + "integrity": "sha512-KBhZLLD+5qyibbcp0AiJo7V4e/+GiKouGz/rCk6/3vxEKpe8CtWekcHhjrdlsHcOluQeBcb1Pdqng0wC9UTO5Q==", "dependencies": { - "@umbraco-ui/uui-base": "1.3.0", - "@umbraco-ui/uui-button": "1.3.0", - "@umbraco-ui/uui-icon": "1.3.0", - "@umbraco-ui/uui-input": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0", + "@umbraco-ui/uui-button": "1.5.0", + "@umbraco-ui/uui-icon": "1.5.0", + "@umbraco-ui/uui-input": "1.5.0" } }, "node_modules/@umbraco-ui/uui-input-password": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-input-password/-/uui-input-password-1.3.0.tgz", - "integrity": "sha512-9MXaJ5wnXacmSaAvbDldIDkWJ0YhnOqeG4UqxPKO6yn1B6L6IvrH5jVaXcu3U7eYsRzE/M3veKEnmH0MfgLNLQ==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-input-password/-/uui-input-password-1.5.0.tgz", + "integrity": "sha512-8wvQ/10jfufU0QWhK3gBVo5V/fzk4AuX8wPuieKZDY9Jnwkr7ugZ11DOJtaV3Az/4a0nrfF3TQ2gbBC7zHx2JA==", "dependencies": { - "@umbraco-ui/uui-base": "1.3.0", - "@umbraco-ui/uui-icon-registry-essential": "1.3.0", - "@umbraco-ui/uui-input": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0", + "@umbraco-ui/uui-icon-registry-essential": "1.5.0", + "@umbraco-ui/uui-input": "1.5.0" } }, "node_modules/@umbraco-ui/uui-keyboard-shortcut": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-keyboard-shortcut/-/uui-keyboard-shortcut-1.3.0.tgz", - "integrity": "sha512-cF7PoKSiX+UZqvWUYKg/0f7SJnBW3mYYMRLVr+9FgCLhN1bl8W4U68B6YTOyMEBUSLSBh4laSudt1FRztZGCDA==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-keyboard-shortcut/-/uui-keyboard-shortcut-1.5.0.tgz", + "integrity": "sha512-KVTMHl6X0T4cUA3bUgM06xzwCN3VD5W3tZloF0i6e3PTHhkyCE5tKD/2Hizm56OGb+ifaI/oN3L1m7vEPC8IHw==", "dependencies": { - "@umbraco-ui/uui-base": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0" } }, "node_modules/@umbraco-ui/uui-label": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-label/-/uui-label-1.3.0.tgz", - "integrity": "sha512-enjog0wvQQG+pgaJWQyYrP9HSGrIrFWFfb9nJzRMDGAAZKp+j6ph+NfYfAgI525CZySLs32VgZsN3DZUOeEdKQ==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-label/-/uui-label-1.5.0.tgz", + "integrity": "sha512-Sc6XuMEyivBEQDfMOA6JT7nW5H4/eD6dzUtUNabOwzCG5GUpvTMfRccpdjmzOvl9VCGNWtE9ikqCBZWexWA6YA==", "dependencies": { - "@umbraco-ui/uui-base": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0" } }, "node_modules/@umbraco-ui/uui-loader": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-loader/-/uui-loader-1.3.0.tgz", - "integrity": "sha512-l5l3fACQ3pI3F+iWUTLhQtDuySoM9UYo6Wp3jAYI8G4Bk2ACDrmW4ueL+SnxamgL4mdpr6stJx+9RtJUGjS+Dg==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-loader/-/uui-loader-1.5.0.tgz", + "integrity": "sha512-lhl1KqRbM5NTp08fvxgzOsbHFz04z8/WjaOar6lqNnL0R+CcFtVWQrv69Opht9Sj1NdHESmHEVnX0yodod2LhQ==", "dependencies": { - "@umbraco-ui/uui-base": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0" } }, "node_modules/@umbraco-ui/uui-loader-bar": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-loader-bar/-/uui-loader-bar-1.3.0.tgz", - "integrity": "sha512-+2TgZUKQB8+cP4suvqsVWjTLiKAp6CpDHJS9WanoMwNh6gdzY5cG3DeUB6toUb/ieX2meKSdqZNIDkwdLpamlw==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-loader-bar/-/uui-loader-bar-1.5.0.tgz", + "integrity": "sha512-qUcVXi4i+ClozPc0Vfw7g90CLAQVj04F71xtatxDY5nhSWDEMEI6b/pXtN/B9TklkqfgE1mf/gRziFrpbVjLhA==", "dependencies": { - "@umbraco-ui/uui-base": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0" } }, "node_modules/@umbraco-ui/uui-loader-circle": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-loader-circle/-/uui-loader-circle-1.3.0.tgz", - "integrity": "sha512-FReFiC7Dk3H3WpSyMNSEaSNPjD2tistAeAYkX6/b4sqg24iP96ryb9lg9jMelSNIqjSdHk9a4TMEmbCxAo8V/g==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-loader-circle/-/uui-loader-circle-1.5.0.tgz", + "integrity": "sha512-059/DJDYbgOmr/LPXbiDaTkBcInmzUUu/YDtQt/SkZPCO33uuB7TDc+++cMgFYskdXBpqesNvVfZOUd4P6zJyA==", "dependencies": { - "@umbraco-ui/uui-base": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0" } }, "node_modules/@umbraco-ui/uui-menu-item": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-menu-item/-/uui-menu-item-1.3.0.tgz", - "integrity": "sha512-jrvMnD/8peTbxzSvYXIeuLmODBYD3pFWn4cEm2VN/yFAA1w/0rQztBgZKOMMQZ0jnlP/jtREWkAfPV7MZ9bPWA==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-menu-item/-/uui-menu-item-1.5.0.tgz", + "integrity": "sha512-rmKuTz0Xgf0LyQRqs3tr2Z4O6oaNCd7UmI8kEbluk4yKpk5MU38BlFY9p39fpiEVUuzjcg9pBjrEyxrC/H9xjA==", "dependencies": { - "@umbraco-ui/uui-base": "1.3.0", - "@umbraco-ui/uui-loader-bar": "1.3.0", - "@umbraco-ui/uui-symbol-expand": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0", + "@umbraco-ui/uui-loader-bar": "1.5.0", + "@umbraco-ui/uui-symbol-expand": "1.5.0" } }, "node_modules/@umbraco-ui/uui-modal": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-modal/-/uui-modal-1.3.0.tgz", - "integrity": "sha512-FyqnJ2igRjNsnXI8odGirTENMqlwz/5+zO9R5Dsv1XG/sazirGo0o+JGnY4Za4MYNwSpZq5OfKjvXDVkd7jIZQ==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-modal/-/uui-modal-1.5.0.tgz", + "integrity": "sha512-q9g4rA8OYCPlOmZMES/O17NiAu18wtMxNHMuT6dADP2tuULE+TKT6A8vqC7aq8JkWOTAXRAFvTjTmcvm6L2pvg==", "dependencies": { - "@umbraco-ui/uui-base": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0" } }, "node_modules/@umbraco-ui/uui-pagination": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-pagination/-/uui-pagination-1.3.0.tgz", - "integrity": "sha512-zqlYVFjsFQX8lZwOAa7AbjtX1r8kbjj2czC7mth4ZomNI02DERXqBFM445h+9ALiM3pgrZS3qgnD1BlNzQMjtQ==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-pagination/-/uui-pagination-1.5.0.tgz", + "integrity": "sha512-I3gCWbyLRFvi5fAlezQZarvj7FuEZ7NVZbbKJxqEhbo1bwOxDMXlDNxIIrxSg3R8YAuDNP9Pbdw+rnQwupuOMQ==", "dependencies": { - "@umbraco-ui/uui-base": "1.3.0", - "@umbraco-ui/uui-button": "1.3.0", - "@umbraco-ui/uui-button-group": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0", + "@umbraco-ui/uui-button": "1.5.0", + "@umbraco-ui/uui-button-group": "1.5.0" } }, "node_modules/@umbraco-ui/uui-popover": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-popover/-/uui-popover-1.3.0.tgz", - "integrity": "sha512-mNuFMHGtRhtPMDDDVTOGw1yJJB7ZD6ws6jMAMkEWMMVNXT34mcZZTAd7V+9IdWaBdfZkBkT+5KbVr5nQsRfNzw==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-popover/-/uui-popover-1.5.0.tgz", + "integrity": "sha512-Ab8UL4UGxTUn6hYbTqPrMtyGpQr3Xw1E/PVKG3+j+UrNw1Ro5piKgh0TahwxLnrsXWOPXfy53oaXNYsMGenndA==", "dependencies": { - "@umbraco-ui/uui-base": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0" + } + }, + "node_modules/@umbraco-ui/uui-popover-container": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-popover-container/-/uui-popover-container-1.5.0.tgz", + "integrity": "sha512-issjf86TwvwLA6sJOs5pLRMFY+WBc4oeTZiJMz5mhZ5C5UoRmU65L6RP/0UnzZ4ZGY2Gpdh2YatNnZ7hVMg5ig==", + "dependencies": { + "@umbraco-ui/uui-base": "1.5.0" } }, "node_modules/@umbraco-ui/uui-progress-bar": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-progress-bar/-/uui-progress-bar-1.3.0.tgz", - "integrity": "sha512-ZvGZc/RiBqPi3zG6UiBth6eFw1hL8u8qz6OwG8Mvmooj7D5Oc9+sRjeZLQMW2bUl1lKb5j1qLeJ4lRyJvPH+1g==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-progress-bar/-/uui-progress-bar-1.5.0.tgz", + "integrity": "sha512-B/v7VsBBwo19Y+4NBRllt7Ls+WLQfx6vY57rfO8MQG7zxGznxpTSIYvd3wxdRuDsFQeVwwoYjF1/YBJ7iWUnEQ==", "dependencies": { - "@umbraco-ui/uui-base": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0" } }, "node_modules/@umbraco-ui/uui-radio": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-radio/-/uui-radio-1.3.0.tgz", - "integrity": "sha512-ip6nABwf8demHpt6WCYML1Ug1XSzYUlqk8Qq8ZthlogYunqasCSp6A2VD8RO8RYO5Qyr0hkUxI5oTTDNFuk5qg==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-radio/-/uui-radio-1.5.0.tgz", + "integrity": "sha512-3e52VZHcgHB/17eLTmiZwdm7ENgfX6AF4Dw+8H2x8jdRjyvt8lbykCq+6xewAZFsLAu7vTOEKtd2RhQFI2+hwg==", "dependencies": { - "@umbraco-ui/uui-base": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0" } }, "node_modules/@umbraco-ui/uui-range-slider": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-range-slider/-/uui-range-slider-1.3.0.tgz", - "integrity": "sha512-ZnIaby8phrkpwFVS5nhuh7gu045mRDPAihDgRQE7WhOcL1r1G+xYTvd32FVTh0QruTQOa7lUp9BjMNzd+DVUnA==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-range-slider/-/uui-range-slider-1.5.0.tgz", + "integrity": "sha512-oHmIoF+KrHDWiOKonIWq7n94C6CzStBXrleS6iwCgWY++ayaHKCPlCuQIYp3BmGjnMQn8Ou0r2x/RuBPuraLVQ==", "dependencies": { - "@umbraco-ui/uui-base": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0" } }, "node_modules/@umbraco-ui/uui-ref": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref/-/uui-ref-1.3.0.tgz", - "integrity": "sha512-mt27HH4NL+r9cL4wYO0NDobMyUczGOqNc88oumSblAs+3ex8HHz5SX8GYi05zdndbJATxHJmh9Q5op3bE4SKPw==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref/-/uui-ref-1.5.0.tgz", + "integrity": "sha512-wba/OP6b/mG5kp4bUgBBcBAAy3RWTbokVyjb52FR7nyqNMnIE/UBdgi0XeBx4j6lZeEbr5k5ZOGQ1knEHbPWyQ==", "dependencies": { - "@umbraco-ui/uui-base": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0" } }, "node_modules/@umbraco-ui/uui-ref-list": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref-list/-/uui-ref-list-1.3.0.tgz", - "integrity": "sha512-KProeP3ielc1aX1WYqM0etuilvVgfjFnj5d1AufRLeFcnojJZWqwl0QX7E5yPmCTBChsU/SQA4ab3lROCJH57Q==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref-list/-/uui-ref-list-1.5.0.tgz", + "integrity": "sha512-sxs3hC97zDuFaV8mvXLAbqqtWk0kqDdHY9ORt9CxacdT36nQS58Sw60/plCryqoyp7P2cUZVtlEeff53OKOTCQ==", "dependencies": { - "@umbraco-ui/uui-base": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0" } }, "node_modules/@umbraco-ui/uui-ref-node": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref-node/-/uui-ref-node-1.3.0.tgz", - "integrity": "sha512-NANRP3BKLOzxRFl0ZxD4XAkCRf7KaQVN/hytyQdlmhKaTjnXXllgd8Cy7795VwK6PAOBqzDwWh4KGC6MpoZpSQ==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref-node/-/uui-ref-node-1.5.0.tgz", + "integrity": "sha512-bjmMgrIW+/4bmUXwMwFFaPrg2MeTxXssb6EpbBItJ+s0QhTEcTNyAD/DK3RlSMRE5VPO11sRwgCr06aIhklx0Q==", "dependencies": { - "@umbraco-ui/uui-base": "1.3.0", - "@umbraco-ui/uui-icon": "1.3.0", - "@umbraco-ui/uui-ref": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0", + "@umbraco-ui/uui-icon": "1.5.0", + "@umbraco-ui/uui-ref": "1.5.0" } }, "node_modules/@umbraco-ui/uui-ref-node-data-type": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref-node-data-type/-/uui-ref-node-data-type-1.3.0.tgz", - "integrity": "sha512-v2GkM8FPorlHcBXWTTfiMsDPPvEfJYP/yG7v+7WPcQ8zV3inUIAiYKCBD7a/z9UIlndDMpCt29UeCSo58qA7fQ==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref-node-data-type/-/uui-ref-node-data-type-1.5.0.tgz", + "integrity": "sha512-k14MI3cRELOmAwmtFeBzgCFw4+uin0JSqf85ZaqNkXSAmg+4I0ayUI6PGz+Jw66yGHvw3YNeUMKPmLO8l6M79A==", "dependencies": { - "@umbraco-ui/uui-base": "1.3.0", - "@umbraco-ui/uui-ref-node": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0", + "@umbraco-ui/uui-ref-node": "1.5.0" } }, "node_modules/@umbraco-ui/uui-ref-node-document-type": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref-node-document-type/-/uui-ref-node-document-type-1.3.0.tgz", - "integrity": "sha512-U+uGFDFyLQGFLe9EcrF+6yshp5+6QhmGPbcS6kAjt52MKN3iRMV4H9mJTltvbHCjF/jUIfu/MRaQLDBWVXD4HA==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref-node-document-type/-/uui-ref-node-document-type-1.5.0.tgz", + "integrity": "sha512-ouytDUaSls7Hsd0WaDy4wgfKMLpxlxx16WWyHlzX5lMyhkR+S3olyNZcgDRtz9xIQV+dVE3iDsUeQcNAigCdaw==", "dependencies": { - "@umbraco-ui/uui-base": "1.3.0", - "@umbraco-ui/uui-ref-node": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0", + "@umbraco-ui/uui-ref-node": "1.5.0" } }, "node_modules/@umbraco-ui/uui-ref-node-form": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref-node-form/-/uui-ref-node-form-1.3.0.tgz", - "integrity": "sha512-3ECrFJKAzn+I67sPwAX8YYcJadGq5azeg1QLi76FscrXvCXCcAoO36dpObvjwW5I1FDZGs42XkoUNYl5Tg7xpw==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref-node-form/-/uui-ref-node-form-1.5.0.tgz", + "integrity": "sha512-D86A1+ScVGTer2kci6Y9X4ZAhCnm4kxUi7bCFH7dn7oi/Fq8fhs3PBuA7mr1FrZgrPvXVdW+Qa7ldxxU58NIWA==", "dependencies": { - "@umbraco-ui/uui-base": "1.3.0", - "@umbraco-ui/uui-ref-node": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0", + "@umbraco-ui/uui-ref-node": "1.5.0" } }, "node_modules/@umbraco-ui/uui-ref-node-member": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref-node-member/-/uui-ref-node-member-1.3.0.tgz", - "integrity": "sha512-gqriNy9K0fF7xaV9BgOX7ooNuD/1o9gyJGhaa4JNua2w60HSAoaHKewEndRrZvplYhnMSfk5tdxQhdH9u5XJVw==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref-node-member/-/uui-ref-node-member-1.5.0.tgz", + "integrity": "sha512-/UPmUNk6KP2unKnJKjr1qGkdPlFGTRj3K7H/mczCY7IbtzEccdEswWJCdUy/doIkAKbDdaqKe3/9HBoA3JtWPw==", "dependencies": { - "@umbraco-ui/uui-base": "1.3.0", - "@umbraco-ui/uui-ref-node": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0", + "@umbraco-ui/uui-ref-node": "1.5.0" } }, "node_modules/@umbraco-ui/uui-ref-node-package": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref-node-package/-/uui-ref-node-package-1.3.0.tgz", - "integrity": "sha512-yRTDubukJ9JqOm8g90NldxFlvzqGU+mEpQWRfZ0pNlggo+xLn7kj+1NNazVHl3J5M2D81xlaVnwTdAj8TGwA+w==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref-node-package/-/uui-ref-node-package-1.5.0.tgz", + "integrity": "sha512-XkET8XKb3XxmjlIDrmtwm9o0QsaG81bcpUBEBA/wUC0OcJNrjTKyv6ciAVDP7HaW6XpN8XwsRbqdcrYwM8lXDQ==", "dependencies": { - "@umbraco-ui/uui-base": "1.3.0", - "@umbraco-ui/uui-ref-node": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0", + "@umbraco-ui/uui-ref-node": "1.5.0" } }, "node_modules/@umbraco-ui/uui-ref-node-user": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref-node-user/-/uui-ref-node-user-1.3.0.tgz", - "integrity": "sha512-GhOZdOtDsqIvAjIFhy4jJ2RVt6yGvVBA50tM6BrszIsC28fNGYnDKVmmC3FHS/Va9omVqnF+jeKRpBFxOt06Rg==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref-node-user/-/uui-ref-node-user-1.5.0.tgz", + "integrity": "sha512-9TrIr1JWw3cIkWfQrdv9iLRIqm/dd10d6uZEWaGJ/MuxyCywqMg/LSApV/NLapB4HXhIG4pGCiXvUa8OVW99ew==", "dependencies": { - "@umbraco-ui/uui-base": "1.3.0", - "@umbraco-ui/uui-ref-node": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0", + "@umbraco-ui/uui-ref-node": "1.5.0" } }, "node_modules/@umbraco-ui/uui-scroll-container": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-scroll-container/-/uui-scroll-container-1.3.0.tgz", - "integrity": "sha512-HQ0U45D5opkrN4NTAJfP0vlkMfXTWXfR2Gj2NW4P7CPzV1JyQUB5opDhNmvmQwY7kd+tMjKY+gHGmTM1nKa7uQ==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-scroll-container/-/uui-scroll-container-1.5.0.tgz", + "integrity": "sha512-Xj5jnmCEDyRENmWtuPI1QYEMzrmi/9/LaajkPEIZEYVu2owI940F0viS5X+X/FvKehSxoSt9ainCwkLphgzNiw==", "dependencies": { - "@umbraco-ui/uui-base": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0" } }, "node_modules/@umbraco-ui/uui-select": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-select/-/uui-select-1.3.0.tgz", - "integrity": "sha512-hO2zBFS9ahSSqSoO1K2vup2124NKIV4vYuM4TpGl9kt2t0wzBVK153amuib7YhfTGpuQwEYRUzWc6TTbJnTkzw==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-select/-/uui-select-1.5.0.tgz", + "integrity": "sha512-lcMiIM6WxF5YraIXAqSpujx3OJzq6Snfik0BUypTWbUZdKVQTgLPh3A6We9PdD6K64AX2Zk4eH8yhQ+5GNImzQ==", "dependencies": { - "@umbraco-ui/uui-base": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0" } }, "node_modules/@umbraco-ui/uui-slider": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-slider/-/uui-slider-1.3.0.tgz", - "integrity": "sha512-+FoUxEzl3S+R1nox4k3OOGV2Z7uT0d/YCEqjrof+gTZl+1DNxgGIrv2wvujp5kGnYwVMdpyeOnsg82Hngk4zvw==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-slider/-/uui-slider-1.5.0.tgz", + "integrity": "sha512-Mp6xz7C7GbAuQ1Totd2WLzvS56ekx4l31mAvUvor0GqrUF/hHxwfrGZOAWoBqoTdKQAFKbZVSM782a+cwNv3hg==", "dependencies": { - "@umbraco-ui/uui-base": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0" } }, "node_modules/@umbraco-ui/uui-symbol-expand": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-symbol-expand/-/uui-symbol-expand-1.3.0.tgz", - "integrity": "sha512-4n/qV+0uys+zFw1tyzjeN8wNMiafdxw9iAqx/bW9oYy52x0SdzuhvqJSFyQMxopAqnfLuBQnCR9rqzW+F2UIVA==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-symbol-expand/-/uui-symbol-expand-1.5.0.tgz", + "integrity": "sha512-ZCuGAJT2qFs4wQ6Z+g/qV3obv/SbriMnaIOGy6XTTAuMlh2+aNAwm33Je0wYKCTwHNUmnl427wTMEkQcMziD4g==", "dependencies": { - "@umbraco-ui/uui-base": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0" } }, "node_modules/@umbraco-ui/uui-symbol-file": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-symbol-file/-/uui-symbol-file-1.3.0.tgz", - "integrity": "sha512-00W6Dq/Kko8bWRU7StxDWZ0NtY4T9qkAdU3MY1WXb4gqEKSXeHZjG+I2Mm1zfcnz69W4Jo5APKU96Oo2xup0XA==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-symbol-file/-/uui-symbol-file-1.5.0.tgz", + "integrity": "sha512-ClB/lT/ebyUBmPqExB2ZinMOo/bCMEgjGxjkXy2THX4lOLUqvjDNEKLq99MAREKSh/mmGq7iB3Z/hd9/EDu75Q==", "dependencies": { - "@umbraco-ui/uui-base": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0" } }, "node_modules/@umbraco-ui/uui-symbol-file-dropzone": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-symbol-file-dropzone/-/uui-symbol-file-dropzone-1.3.0.tgz", - "integrity": "sha512-g640sHcxzx4XEIkfToKvNyYqzfnwHXmbySm1HDrf7oJBoBvcTYk7zkDcOn6meWRzG08QfrlyOBmgINYv9f9Mtw==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-symbol-file-dropzone/-/uui-symbol-file-dropzone-1.5.0.tgz", + "integrity": "sha512-0YL88rFFI5SOzzORtm1VtMihN4if7r0CIRe5Q3Sv0WwHjrMfIM08DeONCgN2j+ZoKgnTvt9KpE1OGigshouRug==", "dependencies": { - "@umbraco-ui/uui-base": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0" } }, "node_modules/@umbraco-ui/uui-symbol-file-thumbnail": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-symbol-file-thumbnail/-/uui-symbol-file-thumbnail-1.3.0.tgz", - "integrity": "sha512-5R1gUqr6+oT1w7mSYOZHszGp0MUbDYSbi3aJOrntB+eu9qX6h4ON5bHFDcQTb4+ysJhuqBprJL3hmhkd9KiD4g==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-symbol-file-thumbnail/-/uui-symbol-file-thumbnail-1.5.0.tgz", + "integrity": "sha512-/qkf6AdAIsRmUfsBdtFkFk5wPWw6JvSVHvgk/UvZulHHb2F8TamPSJfb6voh86Vq8DzVIcy3ZbqatxH7LZBY1g==", "dependencies": { - "@umbraco-ui/uui-base": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0" } }, "node_modules/@umbraco-ui/uui-symbol-folder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-symbol-folder/-/uui-symbol-folder-1.3.0.tgz", - "integrity": "sha512-6ixquiF47WAxMx0hdmsr8NDwgrJaiqjxqhGl1P5rIGI+XVsuf0IY/tZKttd+ZqQC87ktzx9lX2kLip0DicU0lg==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-symbol-folder/-/uui-symbol-folder-1.5.0.tgz", + "integrity": "sha512-Sxt4n5IBT+XIqu2nJxP4RnhourwC+1X5bD40YgUBmqZJ9KV//tox4zo2elU19WCeRZFkklZGfn2smLY1FD0OGg==", "dependencies": { - "@umbraco-ui/uui-base": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0" } }, "node_modules/@umbraco-ui/uui-symbol-lock": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-symbol-lock/-/uui-symbol-lock-1.3.0.tgz", - "integrity": "sha512-JyoOT7HYH4j2NrubKKjqkBtJZMsFuNe4P1k9YXkDYoh8bb9uJ6Zvf/9j4bTC9DlqztI2aqGmGWzduA7XY2RGwA==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-symbol-lock/-/uui-symbol-lock-1.5.0.tgz", + "integrity": "sha512-EH7tEPCB+PTyjWbW+bdekk4M5hcjvYYpCKTnl3Pdpzh0mrxHPt9xa8908JB0tG8n0m0EcP+L7k8pthUmkgpK7A==", "dependencies": { - "@umbraco-ui/uui-base": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0" } }, "node_modules/@umbraco-ui/uui-symbol-more": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-symbol-more/-/uui-symbol-more-1.3.0.tgz", - "integrity": "sha512-LuNr72QaOCA18jm7yEMigC+nEDWnRc27AaRv3NiP1QdRXmzq5CaYFnxU0b/+9A00xZNFsysnDruHNzyWgEzdFw==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-symbol-more/-/uui-symbol-more-1.5.0.tgz", + "integrity": "sha512-EuhU4kle4swMFZnsguWPz77rOtrk0IQcXuEA60fjzFGJCwsg7yyu9Ns209IEUsYh5ktstj8pXKT8+ZDila5umg==", "dependencies": { - "@umbraco-ui/uui-base": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0" } }, "node_modules/@umbraco-ui/uui-symbol-sort": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-symbol-sort/-/uui-symbol-sort-1.3.0.tgz", - "integrity": "sha512-4iiyqjSr0ZO8VY4zqCJLQMXSlF8J18D0+jzMZFKMZk5QGw0dAGdF1Zy8vEoygXvIiiytbg4Sik+ehhgsF5o5vQ==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-symbol-sort/-/uui-symbol-sort-1.5.0.tgz", + "integrity": "sha512-/cifoZXuZbDmuZFPD0rr95Gpuy18DnboOYb/Ir6G3PANJ0fWOhzykHUrdx18ItLzhhwfE3dcZk4EWcGrEkfnfg==", "dependencies": { - "@umbraco-ui/uui-base": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0" } }, "node_modules/@umbraco-ui/uui-table": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-table/-/uui-table-1.3.0.tgz", - "integrity": "sha512-po0znA7Zv6xF78bm3A6/CW+aclVXcjFVahGxVnYE0F7RlshaKnw5TpQByRTw4U2M/HMi1RLKrutBOf/j/pm+EA==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-table/-/uui-table-1.5.0.tgz", + "integrity": "sha512-tjhpEzBYCQdgieoXcIgcOjROrScF0Ifutz/6gmpcdrXYbgZ+YkWX7dSLAeQj3fzGebaPbNYzGOmGZA9/opZ1rg==", "dependencies": { - "@umbraco-ui/uui-base": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0" } }, "node_modules/@umbraco-ui/uui-tabs": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-tabs/-/uui-tabs-1.3.0.tgz", - "integrity": "sha512-zNzm6ktAp3QykOT+4/9dzl4IZGSC2dH0yV9p8DRFFeEppv/J26S29WPLK9EHwa5/fZPLpKiGQ1sqQB/z1Oa7wQ==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-tabs/-/uui-tabs-1.5.0.tgz", + "integrity": "sha512-0D5NLufis9Tzc5Vr+fl8Z0wABHyz1Tep76Qnx0nXyYzAZvdNq2IxThHbGqA1cb+FjVJSKdfp6ONfiPc/SIVAzA==", "dependencies": { - "@umbraco-ui/uui-base": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0", + "@umbraco-ui/uui-button": "1.5.0", + "@umbraco-ui/uui-popover-container": "1.5.0", + "@umbraco-ui/uui-symbol-more": "1.5.0" } }, "node_modules/@umbraco-ui/uui-tag": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-tag/-/uui-tag-1.3.0.tgz", - "integrity": "sha512-R4yU8LoWDV8Qkvy0mwo1yjBcOrh0RvDfTa5CSJmTgGrUhWLPNR5ZpDiqu+5Ntr0nkHhT4LF76EkQhvGWleQglg==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-tag/-/uui-tag-1.5.0.tgz", + "integrity": "sha512-OZGitHjdn4coj1x7F7zfeIx5M9NhGd8+CqpD915V9Qm8YlTQxFLq1M8tqjIxaYAB5EcHXuyzRpSUCrt/WUvipA==", "dependencies": { - "@umbraco-ui/uui-base": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0" } }, "node_modules/@umbraco-ui/uui-textarea": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-textarea/-/uui-textarea-1.3.0.tgz", - "integrity": "sha512-eUjPkWu99Y7uygu2pZdXH+S86qWIN8RuBz5Aaz+OQPvMQKD0CE6zjx/Zv1qMf60TbPhdcRHGV+2chpvlCjDKEA==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-textarea/-/uui-textarea-1.5.0.tgz", + "integrity": "sha512-+zDqbYKYfaiG0IXEaQatUaWsD4umtkTtbCMnqVPMhxwneVoE9d69ejat2zLFUI/ERm3nKMyq/NRfxzXJgzlDng==", "dependencies": { - "@umbraco-ui/uui-base": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0" } }, "node_modules/@umbraco-ui/uui-toast-notification": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-toast-notification/-/uui-toast-notification-1.3.0.tgz", - "integrity": "sha512-47bKZti+gSwOjzoZR16GoQu0W//esDJiKkELZ8JIhxD5gqn8QsxrqJlQ525T4qSg9hBIUCTM3/HKsvPbyjZoow==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-toast-notification/-/uui-toast-notification-1.5.0.tgz", + "integrity": "sha512-cFjz4/uZudR3yuSqK5gqzAio55ZOOxQAOc8bC5keS0HXL84JcDwrEP4/Nz7X/uUNUqauYZG/iBUirAvqfv7Osw==", "dependencies": { - "@umbraco-ui/uui-base": "1.3.0", - "@umbraco-ui/uui-button": "1.3.0", - "@umbraco-ui/uui-css": "1.3.0", - "@umbraco-ui/uui-icon": "1.3.0", - "@umbraco-ui/uui-icon-registry-essential": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0", + "@umbraco-ui/uui-button": "1.5.0", + "@umbraco-ui/uui-css": "1.4.0", + "@umbraco-ui/uui-icon": "1.5.0", + "@umbraco-ui/uui-icon-registry-essential": "1.5.0" } }, "node_modules/@umbraco-ui/uui-toast-notification-container": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-toast-notification-container/-/uui-toast-notification-container-1.3.0.tgz", - "integrity": "sha512-Zao5QFrL9JjC9msqNsUjeLdWZAWqn6fDYQfhRsZPDEmvsZ4yQN+QnoJVyufFnzOgOfqUNHB6VHTqbS2MPg6ojQ==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-toast-notification-container/-/uui-toast-notification-container-1.5.0.tgz", + "integrity": "sha512-AB4kwgocUeDwkxiCYNH0AOMEtExDS6sEq9sk2i8AGDAEjprAB3m0HM9AlrA+T0V1GtSuv+Q1DEuCyxnVbuK0WQ==", "dependencies": { - "@umbraco-ui/uui-base": "1.3.0", - "@umbraco-ui/uui-toast-notification": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0", + "@umbraco-ui/uui-toast-notification": "1.5.0" } }, "node_modules/@umbraco-ui/uui-toast-notification-layout": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-toast-notification-layout/-/uui-toast-notification-layout-1.3.0.tgz", - "integrity": "sha512-Ho8Ad6VIxxN0QC9k980TjY2X+sItfiD6mCIOwle3bCAadFMnLOa/ESseA1l+zr4/liY0PPQoMBnQtKR9L0XK3A==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-toast-notification-layout/-/uui-toast-notification-layout-1.5.0.tgz", + "integrity": "sha512-rM7cGCdMolhsndfZT9zGAPI9P3bl1lNpjDhWI124Mgx+KS8t2Q2h9O+7FGqFnjCTJOQES1pdQ+enl2NxCuEkNg==", "dependencies": { - "@umbraco-ui/uui-base": "1.3.0", - "@umbraco-ui/uui-css": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0", + "@umbraco-ui/uui-css": "1.4.0" + } + }, + "node_modules/@umbraco-ui/uui-toast-notification-layout/node_modules/@umbraco-ui/uui-css": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-css/-/uui-css-1.4.0.tgz", + "integrity": "sha512-HBCFPuXJijeZbjnjdqmg3oqOGB3RmpQKT/s/Uy0TSJfaQGfz0e73o2eRghYHWF2rdqHw6brKFrZTZHBVvCE/xA==", + "dependencies": { + "lit": "^2.2.2" + } + }, + "node_modules/@umbraco-ui/uui-toast-notification/node_modules/@umbraco-ui/uui-css": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-css/-/uui-css-1.4.0.tgz", + "integrity": "sha512-HBCFPuXJijeZbjnjdqmg3oqOGB3RmpQKT/s/Uy0TSJfaQGfz0e73o2eRghYHWF2rdqHw6brKFrZTZHBVvCE/xA==", + "dependencies": { + "lit": "^2.2.2" } }, "node_modules/@umbraco-ui/uui-toggle": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-toggle/-/uui-toggle-1.3.0.tgz", - "integrity": "sha512-6NnAP6L8jSnE2CyPx1wgIMrZm0eCRNOAcYWKsF3iyhG4TLkZqbGq7pGEhxqHT0uNigHdv5Wseu+UC1L0GLM+pQ==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-toggle/-/uui-toggle-1.5.0.tgz", + "integrity": "sha512-vsJSpBSmlrLzspCa1dGQGYXfc6RwTGTzSlNQdnzzP7qefVRP4GlOaqYV0TJhHMcYdbai+iEkrLznzJQvM9JFLA==", "dependencies": { - "@umbraco-ui/uui-base": "1.3.0", - "@umbraco-ui/uui-boolean-input": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0", + "@umbraco-ui/uui-boolean-input": "1.5.0" + } + }, + "node_modules/@umbraco-ui/uui-visually-hidden": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-visually-hidden/-/uui-visually-hidden-1.5.0.tgz", + "integrity": "sha512-3Imqxp8+hvirakPogqzvRlU+uhshpGRdrEMU7phCS5VGzDEl8NL1BhxR31EQAw7DspwbD5non3ZwbTwLYydfCg==", + "dependencies": { + "@umbraco-ui/uui-base": "1.5.0" } }, "node_modules/abab": { @@ -2810,9 +2863,9 @@ } }, "node_modules/ace-builds": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/ace-builds/-/ace-builds-1.22.1.tgz", - "integrity": "sha512-o5RGTPBIiRxguWNors3pT6KuLqj0a2NvNLoqir7/2LLiFm34PJV3BMq4sl9kjPayo4+lmd99m6zAq+XPdhyHQA==" + "version": "1.31.1", + "resolved": "https://registry.npmjs.org/ace-builds/-/ace-builds-1.31.1.tgz", + "integrity": "sha512-3DnE5bZF6Ji+l4F5acoLk+rV7mxrUt1C4r61Xy9owp5rVM4lj5NL8GJfoX6Jnnbhx6kKV7Vdpb+Tco+0ORTvhg==" }, "node_modules/acorn": { "version": "7.4.1", @@ -2826,16 +2879,6 @@ "node": ">=0.4.0" } }, - "node_modules/acorn-globals": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", - "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", - "dev": true, - "dependencies": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" - } - }, "node_modules/acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", @@ -2845,15 +2888,6 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/agent-base": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", @@ -3438,9 +3472,9 @@ } }, "node_modules/autoprefixer": { - "version": "10.4.14", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", - "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==", + "version": "10.4.16", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.16.tgz", + "integrity": "sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==", "dev": true, "funding": [ { @@ -3450,12 +3484,16 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], "dependencies": { - "browserslist": "^4.21.5", - "caniuse-lite": "^1.0.30001464", - "fraction.js": "^4.2.0", + "browserslist": "^4.21.10", + "caniuse-lite": "^1.0.30001538", + "fraction.js": "^4.3.6", "normalize-range": "^0.1.2", "picocolors": "^1.0.0", "postcss-value-parser": "^4.2.0" @@ -4083,16 +4121,10 @@ "node": ">=0.10.0" } }, - "node_modules/browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", - "dev": true - }, "node_modules/browserslist": { - "version": "4.21.9", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", - "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz", + "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", "dev": true, "funding": [ { @@ -4109,10 +4141,10 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001503", - "electron-to-chromium": "^1.4.431", - "node-releases": "^2.0.12", - "update-browserslist-db": "^1.0.11" + "caniuse-lite": "^1.0.30001541", + "electron-to-chromium": "^1.4.535", + "node-releases": "^2.0.13", + "update-browserslist-db": "^1.0.13" }, "bin": { "browserslist": "cli.js" @@ -4385,9 +4417,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001504", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001504.tgz", - "integrity": "sha512-5uo7eoOp2mKbWyfMXnGO9rJWOGU8duvzEiYITW+wivukL7yHH4gX9yuRaobu6El4jPxo6jKZfG+N6fB621GD/Q==", + "version": "1.0.30001562", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001562.tgz", + "integrity": "sha512-kfte3Hym//51EdX4239i+Rmp20EsLIYGdPkERegTgU19hQWCRhsRFGKHTliUlsry53tv17K7n077Kqa0WJU4ng==", "dev": true, "funding": [ { @@ -5120,9 +5152,9 @@ } }, "node_modules/css-declaration-sorter": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.3.1.tgz", - "integrity": "sha512-fBffmak0bPAnyqc/HO8C3n2sHrp9wcqQz6ES9koRF2/mLOVAx9zIQ3Y7R29sYCteTPqMCwns4WYQoCX91Xl3+w==", + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz", + "integrity": "sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==", "dev": true, "engines": { "node": "^10 || ^12 || >=14" @@ -5221,17 +5253,16 @@ } }, "node_modules/cssnano": { - "version": "5.1.13", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.13.tgz", - "integrity": "sha512-S2SL2ekdEz6w6a2epXn4CmMKU4K3KpcyXLKfAYc9UQQqJRkD/2eLUG0vJ3Db/9OvO5GuAdgXw3pFbR6abqghDQ==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-6.0.1.tgz", + "integrity": "sha512-fVO1JdJ0LSdIGJq68eIxOqFpIJrZqXUsBt8fkrBcztCQqAjQD51OhZp7tc0ImcbwXD4k7ny84QTV90nZhmqbkg==", "dev": true, "dependencies": { - "cssnano-preset-default": "^5.2.12", - "lilconfig": "^2.0.3", - "yaml": "^1.10.2" + "cssnano-preset-default": "^6.0.1", + "lilconfig": "^2.1.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^14 || ^16 || >=18.0" }, "funding": { "type": "opencollective", @@ -5242,55 +5273,55 @@ } }, "node_modules/cssnano-preset-default": { - "version": "5.2.12", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.12.tgz", - "integrity": "sha512-OyCBTZi+PXgylz9HAA5kHyoYhfGcYdwFmyaJzWnzxuGRtnMw/kR6ilW9XzlzlRAtB6PLT/r+prYgkef7hngFew==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-6.0.1.tgz", + "integrity": "sha512-7VzyFZ5zEB1+l1nToKyrRkuaJIx0zi/1npjvZfbBwbtNTzhLtlvYraK/7/uqmX2Wb2aQtd983uuGw79jAjLSuQ==", "dev": true, "dependencies": { - "css-declaration-sorter": "^6.3.0", - "cssnano-utils": "^3.1.0", - "postcss-calc": "^8.2.3", - "postcss-colormin": "^5.3.0", - "postcss-convert-values": "^5.1.2", - "postcss-discard-comments": "^5.1.2", - "postcss-discard-duplicates": "^5.1.0", - "postcss-discard-empty": "^5.1.1", - "postcss-discard-overridden": "^5.1.0", - "postcss-merge-longhand": "^5.1.6", - "postcss-merge-rules": "^5.1.2", - "postcss-minify-font-values": "^5.1.0", - "postcss-minify-gradients": "^5.1.1", - "postcss-minify-params": "^5.1.3", - "postcss-minify-selectors": "^5.2.1", - "postcss-normalize-charset": "^5.1.0", - "postcss-normalize-display-values": "^5.1.0", - "postcss-normalize-positions": "^5.1.1", - "postcss-normalize-repeat-style": "^5.1.1", - "postcss-normalize-string": "^5.1.0", - "postcss-normalize-timing-functions": "^5.1.0", - "postcss-normalize-unicode": "^5.1.0", - "postcss-normalize-url": "^5.1.0", - "postcss-normalize-whitespace": "^5.1.1", - "postcss-ordered-values": "^5.1.3", - "postcss-reduce-initial": "^5.1.0", - "postcss-reduce-transforms": "^5.1.0", - "postcss-svgo": "^5.1.0", - "postcss-unique-selectors": "^5.1.1" + "css-declaration-sorter": "^6.3.1", + "cssnano-utils": "^4.0.0", + "postcss-calc": "^9.0.0", + "postcss-colormin": "^6.0.0", + "postcss-convert-values": "^6.0.0", + "postcss-discard-comments": "^6.0.0", + "postcss-discard-duplicates": "^6.0.0", + "postcss-discard-empty": "^6.0.0", + "postcss-discard-overridden": "^6.0.0", + "postcss-merge-longhand": "^6.0.0", + "postcss-merge-rules": "^6.0.1", + "postcss-minify-font-values": "^6.0.0", + "postcss-minify-gradients": "^6.0.0", + "postcss-minify-params": "^6.0.0", + "postcss-minify-selectors": "^6.0.0", + "postcss-normalize-charset": "^6.0.0", + "postcss-normalize-display-values": "^6.0.0", + "postcss-normalize-positions": "^6.0.0", + "postcss-normalize-repeat-style": "^6.0.0", + "postcss-normalize-string": "^6.0.0", + "postcss-normalize-timing-functions": "^6.0.0", + "postcss-normalize-unicode": "^6.0.0", + "postcss-normalize-url": "^6.0.0", + "postcss-normalize-whitespace": "^6.0.0", + "postcss-ordered-values": "^6.0.0", + "postcss-reduce-initial": "^6.0.0", + "postcss-reduce-transforms": "^6.0.0", + "postcss-svgo": "^6.0.0", + "postcss-unique-selectors": "^6.0.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "node_modules/cssnano-utils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", - "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-4.0.0.tgz", + "integrity": "sha512-Z39TLP+1E0KUcd7LGyF4qMfu8ZufI0rDzhdyAMsa/8UyNUU8wpS0fhdBxbQbv32r64ea00h4878gommRVg2BHw==", "dev": true, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { "postcss": "^8.2.15" @@ -5301,6 +5332,7 @@ "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", "dev": true, + "optional": true, "dependencies": { "css-tree": "^1.1.2" }, @@ -5313,6 +5345,7 @@ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", "dev": true, + "optional": true, "dependencies": { "mdn-data": "2.0.14", "source-map": "^0.6.1" @@ -5325,41 +5358,31 @@ "version": "2.0.14", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", - "dev": true + "dev": true, + "optional": true }, "node_modules/csso/node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, + "optional": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/cssom": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", - "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", - "dev": true - }, "node_modules/cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-3.0.0.tgz", + "integrity": "sha512-N4u2ABATi3Qplzf0hWbVCdjenim8F3ojEXpBDF5hBpjzW182MjNGLqfmQ0SkSPeQ+V86ZXgeH8aXj6kayd4jgg==", "dev": true, "dependencies": { - "cssom": "~0.3.6" + "rrweb-cssom": "^0.6.0" }, "engines": { - "node": ">=8" + "node": ">=14" } }, - "node_modules/cssstyle/node_modules/cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true - }, "node_modules/currently-unhandled": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", @@ -5390,17 +5413,17 @@ } }, "node_modules/data-urls": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", - "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-4.0.0.tgz", + "integrity": "sha512-/mMTei/JXPqvFqQtfyTowxmJVwr2PVAeCcDxyFf6LhoOu/09TX2OX3kb2wzi4DMXcfj4OItwDOnhl5oziPnT6g==", "dev": true, "dependencies": { "abab": "^2.0.6", "whatwg-mimetype": "^3.0.0", - "whatwg-url": "^11.0.0" + "whatwg-url": "^12.0.0" }, "engines": { - "node": ">=12" + "node": ">=14" } }, "node_modules/date-format": { @@ -5468,9 +5491,9 @@ } }, "node_modules/decimal.js": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", - "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==", + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", + "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==", "dev": true }, "node_modules/decode-uri-component": { @@ -6044,9 +6067,9 @@ "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.4.433", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.433.tgz", - "integrity": "sha512-MGO1k0w1RgrfdbLVwmXcDhHHuxCn2qRgR7dYsJvWFKDttvYPx6FNzCGG0c/fBBvzK2LDh3UV7Tt9awnHnvAAUQ==", + "version": "1.4.582", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.582.tgz", + "integrity": "sha512-89o0MGoocwYbzqUUjc+VNpeOFSOK9nIdC5wY4N+PVUarUK0MtjyTjks75AZS2bW4Kl8MdewdFsWaH0jLy+JNoA==", "dev": true }, "node_modules/emits": { @@ -7528,16 +7551,16 @@ } }, "node_modules/fraction.js": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", - "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", "dev": true, "engines": { "node": "*" }, "funding": { "type": "patreon", - "url": "https://www.patreon.com/infusion" + "url": "https://github.com/sponsors/rawify" } }, "node_modules/fragment-cache": { @@ -10323,15 +10346,15 @@ } }, "node_modules/jasmine-core": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-4.4.0.tgz", - "integrity": "sha512-+l482uImx5BVd6brJYlaHe2UwfKoZBqQfNp20ZmdNfsjGFTemGfqHLsXjKEW23w9R/m8WYeFc9JmIgjj6dUtAA==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-5.1.1.tgz", + "integrity": "sha512-UrzO3fL7nnxlQXlvTynNAenL+21oUQRlzqQFsA2U11ryb4+NLOCOePZ70PTojEaUKhiFugh7dG0Q+I58xlPdWg==", "dev": true }, "node_modules/jquery": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.0.tgz", - "integrity": "sha512-umpJ0/k8X0MvD1ds0P9SfowREz2LenHsQaxSohMZ5OMNEU2r0tf8pdeEFTHMFxWVxKNyU9rTtK3CWzUCTKJUeQ==" + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz", + "integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==" }, "node_modules/jquery-ui-dist": { "version": "1.13.2", @@ -10379,41 +10402,37 @@ } }, "node_modules/jsdom": { - "version": "20.0.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.0.tgz", - "integrity": "sha512-x4a6CKCgx00uCmP+QakBDFXwjAJ69IkkIWHmtmjd3wvXPcdOS44hfX2vqkOQrVrq8l9DhNNADZRXaCEWvgXtVA==", + "version": "22.1.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-22.1.0.tgz", + "integrity": "sha512-/9AVW7xNbsBv6GfWho4TTNjEo9fe6Zhf9O7s0Fhhr3u+awPwAJMKwAMXnkk5vBxflqLW9hTHX/0cs+P3gW+cQw==", "dev": true, "dependencies": { "abab": "^2.0.6", - "acorn": "^8.7.1", - "acorn-globals": "^6.0.0", - "cssom": "^0.5.0", - "cssstyle": "^2.3.0", - "data-urls": "^3.0.2", - "decimal.js": "^10.3.1", + "cssstyle": "^3.0.0", + "data-urls": "^4.0.0", + "decimal.js": "^10.4.3", "domexception": "^4.0.0", - "escodegen": "^2.0.0", "form-data": "^4.0.0", "html-encoding-sniffer": "^3.0.0", "http-proxy-agent": "^5.0.0", "https-proxy-agent": "^5.0.1", "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.0", - "parse5": "^7.0.0", + "nwsapi": "^2.2.4", + "parse5": "^7.1.2", + "rrweb-cssom": "^0.6.0", "saxes": "^6.0.0", "symbol-tree": "^3.2.4", - "tough-cookie": "^4.0.0", - "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^3.0.0", + "tough-cookie": "^4.1.2", + "w3c-xmlserializer": "^4.0.0", "webidl-conversions": "^7.0.0", "whatwg-encoding": "^2.0.0", "whatwg-mimetype": "^3.0.0", - "whatwg-url": "^11.0.0", - "ws": "^8.8.0", + "whatwg-url": "^12.0.1", + "ws": "^8.13.0", "xml-name-validator": "^4.0.0" }, "engines": { - "node": ">=14" + "node": ">=16" }, "peerDependencies": { "canvas": "^2.5.0" @@ -10424,83 +10443,17 @@ } } }, - "node_modules/jsdom/node_modules/acorn": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", - "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/jsdom/node_modules/escodegen": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", - "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", - "dev": true, - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=6.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/jsdom/node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/jsdom/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/jsdom/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/jsdom/node_modules/ws": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.8.1.tgz", - "integrity": "sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA==", + "version": "8.14.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.2.tgz", + "integrity": "sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==", "dev": true, "engines": { "node": ">=10.0.0" }, "peerDependencies": { "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" + "utf-8-validate": ">=5.0.2" }, "peerDependenciesMeta": { "bufferutil": { @@ -10582,9 +10535,9 @@ "dev": true }, "node_modules/karma": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/karma/-/karma-6.4.0.tgz", - "integrity": "sha512-s8m7z0IF5g/bS5ONT7wsOavhW4i4aFkzD4u4wgzAQWT4HGUeWI3i21cK2Yz6jndMAeHETp5XuNsRoyGJZXVd4w==", + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/karma/-/karma-6.4.2.tgz", + "integrity": "sha512-C6SU/53LB31BEgRg+omznBEMY4SjHU3ricV6zBcAe1EeILKkeScr+fZXtaI5WyDbkVowJxxAI6h73NcFPmXolQ==", "dev": true, "dependencies": { "@colors/colors": "1.5.0", @@ -10634,13 +10587,19 @@ "karma": "^6.0.0" } }, + "node_modules/karma-jasmine/node_modules/jasmine-core": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-4.6.0.tgz", + "integrity": "sha512-O236+gd0ZXS8YAjFx8xKaJ94/erqUliEkJTDedyE7iHvv4ZVqi+q+8acJxu05/WJDKm512EUNn809In37nWlAQ==", + "dev": true + }, "node_modules/karma-jsdom-launcher": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/karma-jsdom-launcher/-/karma-jsdom-launcher-13.0.0.tgz", - "integrity": "sha512-03+/myz8sSqg55jp3epB6enurY+Lakn/Dhacd0PMX3NrWOiNClK0sDKqaWFnPxNwYVAjSlMi9hNOSs21AMHlbw==", + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/karma-jsdom-launcher/-/karma-jsdom-launcher-15.0.0.tgz", + "integrity": "sha512-F5KkE7qNS93cLk6BZtGI1V+OAHoruGIhZm+zCViT9J4oqJ2tn9hScIk+KXQL6Zmq6exddhpFKNw+hVIQYUocpg==", "dev": true, "peerDependencies": { - "jsdom": ">=13 <=20", + "jsdom": ">=15 <=22", "karma": ">=2 <=6" } }, @@ -10661,9 +10620,9 @@ } }, "node_modules/karma-spec-reporter": { - "version": "0.0.34", - "resolved": "https://registry.npmjs.org/karma-spec-reporter/-/karma-spec-reporter-0.0.34.tgz", - "integrity": "sha512-l5H/Nh9q4g2Ysx2CDU2m+NIPyLQpCVbk9c4V02BTZHw3NM6RO1dq3eRpKXCSSdPt4RGfhHk8jDt3XYkGp+5PWg==", + "version": "0.0.36", + "resolved": "https://registry.npmjs.org/karma-spec-reporter/-/karma-spec-reporter-0.0.36.tgz", + "integrity": "sha512-11bvOl1x6ryKZph7kmbmMpbi8vsngEGxGOoeTlIcDaH3ab3j8aPJnZ+r+K/SS0sBSGy5VGkGYO2+hLct7hw/6w==", "dev": true, "dependencies": { "colors": "1.4.0" @@ -11056,9 +11015,9 @@ } }, "node_modules/less": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/less/-/less-4.1.3.tgz", - "integrity": "sha512-w16Xk/Ta9Hhyei0Gpz9m7VS8F28nieJaL/VyShID7cYvP6IL5oHeL6p4TXSDJqZE/lNv0oJ2pGVjJsRkfwm5FA==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/less/-/less-4.2.0.tgz", + "integrity": "sha512-P3b3HJDBtSzsXUl0im2L7gTO5Ubg8mEN6G8qoTS77iXxXX4Hvu4Qj540PZDvQ8V6DmX6iXo98k7Md0Cm1PrLaA==", "dev": true, "dependencies": { "copy-anything": "^2.0.1", @@ -11169,38 +11128,38 @@ } }, "node_modules/lilconfig": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz", - "integrity": "sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", "dev": true, "engines": { "node": ">=10" } }, "node_modules/lit": { - "version": "2.7.5", - "resolved": "https://registry.npmjs.org/lit/-/lit-2.7.5.tgz", - "integrity": "sha512-i/cH7Ye6nBDUASMnfwcictBnsTN91+aBjXoTHF2xARghXScKxpD4F4WYI+VLXg9lqbMinDfvoI7VnZXjyHgdfQ==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/lit/-/lit-2.8.0.tgz", + "integrity": "sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA==", "dependencies": { "@lit/reactive-element": "^1.6.0", "lit-element": "^3.3.0", - "lit-html": "^2.7.0" + "lit-html": "^2.8.0" } }, "node_modules/lit-element": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-3.3.2.tgz", - "integrity": "sha512-xXAeVWKGr4/njq0rGC9dethMnYCq5hpKYrgQZYTzawt9YQhMiXfD+T1RgrdY3NamOxwq2aXlb0vOI6e29CKgVQ==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-3.3.3.tgz", + "integrity": "sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA==", "dependencies": { "@lit-labs/ssr-dom-shim": "^1.1.0", "@lit/reactive-element": "^1.3.0", - "lit-html": "^2.7.0" + "lit-html": "^2.8.0" } }, "node_modules/lit-html": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-2.7.4.tgz", - "integrity": "sha512-/Jw+FBpeEN+z8X6PJva5n7+0MzCVAH2yypN99qHYYkq8bI+j7I39GH+68Z/MZD6rGKDK9RpzBw7CocfmHfq6+g==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-2.8.0.tgz", + "integrity": "sha512-o9t+MQM3P4y7M7yNzqAyjp7z+mQGa4NS4CxiyLqFPyFWyc4O+nodLrkrxSaCTrla6M5YOLaT3RpbbqjszB5g3Q==", "dependencies": { "@types/trusted-types": "^2.0.2" } @@ -11985,10 +11944,16 @@ "optional": true }, "node_modules/nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -12247,9 +12212,9 @@ "dev": true }, "node_modules/node-releases": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz", - "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==", + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", + "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", "dev": true }, "node_modules/node.extend": { @@ -12295,22 +12260,10 @@ "node": ">=0.10.0" } }, - "node_modules/normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/nouislider": { - "version": "15.6.1", - "resolved": "https://registry.npmjs.org/nouislider/-/nouislider-15.6.1.tgz", - "integrity": "sha512-1T5AfeEMGrGM87UJ+qAHvauPfCe/woOjYV/o29fp21+XgGuGpkM1Udo7mPHnidu4+cxlj35rDBWKiA6Mefemrg==" + "version": "15.7.1", + "resolved": "https://registry.npmjs.org/nouislider/-/nouislider-15.7.1.tgz", + "integrity": "sha512-5N7C1ru/i8y3dg9+Z6ilj6+m1EfabvOoaRa7ztpxBSKKRZso4vA52DGSbBJjw5XLtFr/LZ9SgGAXqyVtlVHO5w==" }, "node_modules/now-and-later": { "version": "2.0.1", @@ -12381,9 +12334,9 @@ } }, "node_modules/nwsapi": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", - "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", + "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==", "dev": true }, "node_modules/object-assign": { @@ -12939,9 +12892,9 @@ } }, "node_modules/parse5": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.1.tgz", - "integrity": "sha512-kwpuwzB+px5WUg9pyK0IcK/shltJN5/OVhQagxhCQNtT9Y9QRZqNY2e1cmbu/paRh5LMnz/oVTVLBpjFmMZhSg==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", "dev": true, "dependencies": { "entities": "^4.4.0" @@ -12951,9 +12904,9 @@ } }, "node_modules/parse5/node_modules/entities": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz", - "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", "dev": true, "engines": { "node": ">=0.12" @@ -13182,9 +13135,9 @@ } }, "node_modules/postcss": { - "version": "8.4.16", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.16.tgz", - "integrity": "sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ==", + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", "dev": true, "funding": [ { @@ -13194,10 +13147,14 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], "dependencies": { - "nanoid": "^3.3.4", + "nanoid": "^3.3.6", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" }, @@ -13206,95 +13163,98 @@ } }, "node_modules/postcss-calc": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", - "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-9.0.1.tgz", + "integrity": "sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ==", "dev": true, "dependencies": { - "postcss-selector-parser": "^6.0.9", + "postcss-selector-parser": "^6.0.11", "postcss-value-parser": "^4.2.0" }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, "peerDependencies": { "postcss": "^8.2.2" } }, "node_modules/postcss-colormin": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.0.tgz", - "integrity": "sha512-WdDO4gOFG2Z8n4P8TWBpshnL3JpmNmJwdnfP2gbk2qBA8PWwOYcmjmI/t3CmMeL72a7Hkd+x/Mg9O2/0rD54Pg==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-6.0.0.tgz", + "integrity": "sha512-EuO+bAUmutWoZYgHn2T1dG1pPqHU6L4TjzPlu4t1wZGXQ/fxV16xg2EJmYi0z+6r+MGV1yvpx1BHkUaRrPa2bw==", "dev": true, "dependencies": { - "browserslist": "^4.16.6", + "browserslist": "^4.21.4", "caniuse-api": "^3.0.0", "colord": "^2.9.1", "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "node_modules/postcss-convert-values": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.2.tgz", - "integrity": "sha512-c6Hzc4GAv95B7suy4udszX9Zy4ETyMCgFPUDtWjdFTKH1SE9eFY/jEpHSwTH1QPuwxHpWslhckUQWbNRM4ho5g==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-6.0.0.tgz", + "integrity": "sha512-U5D8QhVwqT++ecmy8rnTb+RL9n/B806UVaS3m60lqle4YDFcpbS3ae5bTQIh3wOGUSDHSEtMYLs/38dNG7EYFw==", "dev": true, "dependencies": { - "browserslist": "^4.20.3", + "browserslist": "^4.21.4", "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "node_modules/postcss-discard-comments": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", - "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-6.0.0.tgz", + "integrity": "sha512-p2skSGqzPMZkEQvJsgnkBhCn8gI7NzRH2683EEjrIkoMiwRELx68yoUJ3q3DGSGuQ8Ug9Gsn+OuDr46yfO+eFw==", "dev": true, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "node_modules/postcss-discard-duplicates": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", - "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-6.0.0.tgz", + "integrity": "sha512-bU1SXIizMLtDW4oSsi5C/xHKbhLlhek/0/yCnoMQany9k3nPBq+Ctsv/9oMmyqbR96HYHxZcHyK2HR5P/mqoGA==", "dev": true, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "node_modules/postcss-discard-empty": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", - "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-6.0.0.tgz", + "integrity": "sha512-b+h1S1VT6dNhpcg+LpyiUrdnEZfICF0my7HAKgJixJLW7BnNmpRH34+uw/etf5AhOlIhIAuXApSzzDzMI9K/gQ==", "dev": true, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "node_modules/postcss-discard-overridden": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", - "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-6.0.0.tgz", + "integrity": "sha512-4VELwssYXDFigPYAZ8vL4yX4mUepF/oCBeeIT4OXsJPYOtvJumyz9WflmJWTfDwCUcpDR+z0zvCWBXgTx35SVw==", "dev": true, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { "postcss": "^8.2.15" @@ -13330,288 +13290,287 @@ } }, "node_modules/postcss-merge-longhand": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.6.tgz", - "integrity": "sha512-6C/UGF/3T5OE2CEbOuX7iNO63dnvqhGZeUnKkDeifebY0XqkkvrctYSZurpNE902LDf2yKwwPFgotnfSoPhQiw==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-6.0.0.tgz", + "integrity": "sha512-4VSfd1lvGkLTLYcxFuISDtWUfFS4zXe0FpF149AyziftPFQIWxjvFSKhA4MIxMe4XM3yTDgQMbSNgzIVxChbIg==", "dev": true, "dependencies": { "postcss-value-parser": "^4.2.0", - "stylehacks": "^5.1.0" + "stylehacks": "^6.0.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "node_modules/postcss-merge-rules": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.2.tgz", - "integrity": "sha512-zKMUlnw+zYCWoPN6yhPjtcEdlJaMUZ0WyVcxTAmw3lkkN/NDMRkOkiuctQEoWAOvH7twaxUUdvBWl0d4+hifRQ==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-6.0.1.tgz", + "integrity": "sha512-a4tlmJIQo9SCjcfiCcCMg/ZCEe0XTkl/xK0XHBs955GWg9xDX3NwP9pwZ78QUOWB8/0XCjZeJn98Dae0zg6AAw==", "dev": true, "dependencies": { - "browserslist": "^4.16.6", + "browserslist": "^4.21.4", "caniuse-api": "^3.0.0", - "cssnano-utils": "^3.1.0", + "cssnano-utils": "^4.0.0", "postcss-selector-parser": "^6.0.5" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "node_modules/postcss-minify-font-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", - "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-6.0.0.tgz", + "integrity": "sha512-zNRAVtyh5E8ndZEYXA4WS8ZYsAp798HiIQ1V2UF/C/munLp2r1UGHwf1+6JFu7hdEhJFN+W1WJQKBrtjhFgEnA==", "dev": true, "dependencies": { "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "node_modules/postcss-minify-gradients": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", - "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-6.0.0.tgz", + "integrity": "sha512-wO0F6YfVAR+K1xVxF53ueZJza3L+R3E6cp0VwuXJQejnNUH0DjcAFe3JEBeTY1dLwGa0NlDWueCA1VlEfiKgAA==", "dev": true, "dependencies": { "colord": "^2.9.1", - "cssnano-utils": "^3.1.0", + "cssnano-utils": "^4.0.0", "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "node_modules/postcss-minify-params": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.3.tgz", - "integrity": "sha512-bkzpWcjykkqIujNL+EVEPOlLYi/eZ050oImVtHU7b4lFS82jPnsCb44gvC6pxaNt38Els3jWYDHTjHKf0koTgg==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-6.0.0.tgz", + "integrity": "sha512-Fz/wMQDveiS0n5JPcvsMeyNXOIMrwF88n7196puSuQSWSa+/Ofc1gDOSY2xi8+A4PqB5dlYCKk/WfqKqsI+ReQ==", "dev": true, "dependencies": { - "browserslist": "^4.16.6", - "cssnano-utils": "^3.1.0", + "browserslist": "^4.21.4", + "cssnano-utils": "^4.0.0", "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "node_modules/postcss-minify-selectors": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", - "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-6.0.0.tgz", + "integrity": "sha512-ec/q9JNCOC2CRDNnypipGfOhbYPuUkewGwLnbv6omue/PSASbHSU7s6uSQ0tcFRVv731oMIx8k0SP4ZX6be/0g==", "dev": true, "dependencies": { "postcss-selector-parser": "^6.0.5" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "node_modules/postcss-normalize-charset": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", - "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-6.0.0.tgz", + "integrity": "sha512-cqundwChbu8yO/gSWkuFDmKrCZ2vJzDAocheT2JTd0sFNA4HMGoKMfbk2B+J0OmO0t5GUkiAkSM5yF2rSLUjgQ==", "dev": true, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "node_modules/postcss-normalize-display-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", - "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-6.0.0.tgz", + "integrity": "sha512-Qyt5kMrvy7dJRO3OjF7zkotGfuYALETZE+4lk66sziWSPzlBEt7FrUshV6VLECkI4EN8Z863O6Nci4NXQGNzYw==", "dev": true, "dependencies": { "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "node_modules/postcss-normalize-positions": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", - "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-6.0.0.tgz", + "integrity": "sha512-mPCzhSV8+30FZyWhxi6UoVRYd3ZBJgTRly4hOkaSifo0H+pjDYcii/aVT4YE6QpOil15a5uiv6ftnY3rm0igPg==", "dev": true, "dependencies": { "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "node_modules/postcss-normalize-repeat-style": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", - "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-6.0.0.tgz", + "integrity": "sha512-50W5JWEBiOOAez2AKBh4kRFm2uhrT3O1Uwdxz7k24aKtbD83vqmcVG7zoIwo6xI2FZ/HDlbrCopXhLeTpQib1A==", "dev": true, "dependencies": { "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "node_modules/postcss-normalize-string": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", - "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-6.0.0.tgz", + "integrity": "sha512-KWkIB7TrPOiqb8ZZz6homet2KWKJwIlysF5ICPZrXAylGe2hzX/HSf4NTX2rRPJMAtlRsj/yfkrWGavFuB+c0w==", "dev": true, "dependencies": { "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "node_modules/postcss-normalize-timing-functions": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", - "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-6.0.0.tgz", + "integrity": "sha512-tpIXWciXBp5CiFs8sem90IWlw76FV4oi6QEWfQwyeREVwUy39VSeSqjAT7X0Qw650yAimYW5gkl2Gd871N5SQg==", "dev": true, "dependencies": { "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "node_modules/postcss-normalize-unicode": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.0.tgz", - "integrity": "sha512-J6M3MizAAZ2dOdSjy2caayJLQT8E8K9XjLce8AUQMwOrCvjCHv24aLC/Lps1R1ylOfol5VIDMaM/Lo9NGlk1SQ==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-6.0.0.tgz", + "integrity": "sha512-ui5crYkb5ubEUDugDc786L/Me+DXp2dLg3fVJbqyAl0VPkAeALyAijF2zOsnZyaS1HyfPuMH0DwyY18VMFVNkg==", "dev": true, "dependencies": { - "browserslist": "^4.16.6", + "browserslist": "^4.21.4", "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "node_modules/postcss-normalize-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", - "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-6.0.0.tgz", + "integrity": "sha512-98mvh2QzIPbb02YDIrYvAg4OUzGH7s1ZgHlD3fIdTHLgPLRpv1ZTKJDnSAKr4Rt21ZQFzwhGMXxpXlfrUBKFHw==", "dev": true, "dependencies": { - "normalize-url": "^6.0.1", "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "node_modules/postcss-normalize-whitespace": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", - "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-6.0.0.tgz", + "integrity": "sha512-7cfE1AyLiK0+ZBG6FmLziJzqQCpTQY+8XjMhMAz8WSBSCsCNNUKujgIgjCAmDT3cJ+3zjTXFkoD15ZPsckArVw==", "dev": true, "dependencies": { "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "node_modules/postcss-ordered-values": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", - "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-6.0.0.tgz", + "integrity": "sha512-K36XzUDpvfG/nWkjs6d1hRBydeIxGpKS2+n+ywlKPzx1nMYDYpoGbcjhj5AwVYJK1qV2/SDoDEnHzlPD6s3nMg==", "dev": true, "dependencies": { - "cssnano-utils": "^3.1.0", + "cssnano-utils": "^4.0.0", "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "node_modules/postcss-reduce-initial": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.0.tgz", - "integrity": "sha512-5OgTUviz0aeH6MtBjHfbr57tml13PuedK/Ecg8szzd4XRMbYxH4572JFG067z+FqBIf6Zp/d+0581glkvvWMFw==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-6.0.0.tgz", + "integrity": "sha512-s2UOnidpVuXu6JiiI5U+fV2jamAw5YNA9Fdi/GRK0zLDLCfXmSGqQtzpUPtfN66RtCbb9fFHoyZdQaxOB3WxVA==", "dev": true, "dependencies": { - "browserslist": "^4.16.6", + "browserslist": "^4.21.4", "caniuse-api": "^3.0.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "node_modules/postcss-reduce-transforms": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", - "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-6.0.0.tgz", + "integrity": "sha512-FQ9f6xM1homnuy1wLe9lP1wujzxnwt1EwiigtWwuyf8FsqqXUDUp2Ulxf9A5yjlUOTdCJO6lonYjg1mgqIIi2w==", "dev": true, "dependencies": { "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "node_modules/postcss-selector-parser": { - "version": "6.0.10", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", - "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", + "version": "6.0.13", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", + "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", "dev": true, "dependencies": { "cssesc": "^3.0.0", @@ -13622,16 +13581,16 @@ } }, "node_modules/postcss-svgo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", - "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-6.0.0.tgz", + "integrity": "sha512-r9zvj/wGAoAIodn84dR/kFqwhINp5YsJkLoujybWG59grR/IHx+uQ2Zo+IcOwM0jskfYX3R0mo+1Kip1VSNcvw==", "dev": true, "dependencies": { "postcss-value-parser": "^4.2.0", - "svgo": "^2.7.0" + "svgo": "^3.0.2" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^14 || ^16 || >= 18" }, "peerDependencies": { "postcss": "^8.2.15" @@ -13647,15 +13606,15 @@ } }, "node_modules/postcss-svgo/node_modules/css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", "dev": true, "dependencies": { "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", "nth-check": "^2.0.1" }, "funding": { @@ -13663,16 +13622,16 @@ } }, "node_modules/postcss-svgo/node_modules/css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", + "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", "dev": true, "dependencies": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" + "mdn-data": "2.0.30", + "source-map-js": "^1.0.1" }, "engines": { - "node": ">=8.0.0" + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" } }, "node_modules/postcss-svgo/node_modules/css-what": { @@ -13687,15 +13646,48 @@ "url": "https://github.com/sponsors/fb55" } }, - "node_modules/postcss-svgo/node_modules/dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "node_modules/postcss-svgo/node_modules/csso": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", + "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", "dev": true, "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" + "css-tree": "~2.2.0" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/postcss-svgo/node_modules/csso/node_modules/css-tree": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", + "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", + "dev": true, + "dependencies": { + "mdn-data": "2.0.28", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/postcss-svgo/node_modules/csso/node_modules/mdn-data": { + "version": "2.0.28", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", + "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", + "dev": true + }, + "node_modules/postcss-svgo/node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" }, "funding": { "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" @@ -13714,12 +13706,12 @@ ] }, "node_modules/postcss-svgo/node_modules/domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", "dev": true, "dependencies": { - "domelementtype": "^2.2.0" + "domelementtype": "^2.3.0" }, "engines": { "node": ">= 4" @@ -13729,32 +13721,35 @@ } }, "node_modules/postcss-svgo/node_modules/domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", "dev": true, "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" }, "funding": { "url": "https://github.com/fb55/domutils?sponsor=1" } }, "node_modules/postcss-svgo/node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", "dev": true, + "engines": { + "node": ">=0.12" + }, "funding": { "url": "https://github.com/fb55/entities?sponsor=1" } }, "node_modules/postcss-svgo/node_modules/mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "version": "2.0.30", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", + "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", "dev": true }, "node_modules/postcss-svgo/node_modules/nth-check": { @@ -13769,46 +13764,40 @@ "url": "https://github.com/fb55/nth-check?sponsor=1" } }, - "node_modules/postcss-svgo/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/postcss-svgo/node_modules/svgo": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", - "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.0.3.tgz", + "integrity": "sha512-X4UZvLhOglD5Xrp834HzGHf8RKUW0Ahigg/08yRO1no9t2NxffOkMiQ0WmaMIbaGlVTlSst2zWANsdhz5ybXgA==", "dev": true, "dependencies": { "@trysound/sax": "0.2.0", "commander": "^7.2.0", - "css-select": "^4.1.3", - "css-tree": "^1.1.3", - "csso": "^4.2.0", - "picocolors": "^1.0.0", - "stable": "^0.1.8" + "css-select": "^5.1.0", + "css-tree": "^2.2.1", + "csso": "5.0.5", + "picocolors": "^1.0.0" }, "bin": { "svgo": "bin/svgo" }, "engines": { - "node": ">=10.13.0" + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/svgo" } }, "node_modules/postcss-unique-selectors": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", - "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-6.0.0.tgz", + "integrity": "sha512-EPQzpZNxOxP7777t73RQpZE5e9TrnCrkvp7AH7a0l89JmZiPnS82y216JowHXwpBCQitfyxrof9TK3rYbi7/Yw==", "dev": true, "dependencies": { "postcss-selector-parser": "^6.0.5" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { "postcss": "^8.2.15" @@ -13943,9 +13932,9 @@ } }, "node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "engines": { "node": ">=6" } @@ -13997,6 +13986,11 @@ "node": ">=0.10.0" } }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" + }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -14431,8 +14425,7 @@ "node_modules/requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", - "dev": true + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" }, "node_modules/resolve": { "version": "1.20.0", @@ -14539,6 +14532,12 @@ "rimraf": "bin.js" } }, + "node_modules/rrweb-cssom": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz", + "integrity": "sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==", + "dev": true + }, "node_modules/run-async": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", @@ -15268,9 +15267,9 @@ "dev": true }, "node_modules/spectrum-colorpicker2": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/spectrum-colorpicker2/-/spectrum-colorpicker2-2.0.9.tgz", - "integrity": "sha512-tyNppC56VQHdoKtWdkEkqQfLg9D1hhBea/laO3ffJGrBs3uwFmCxpcBK3a2IOpxZnioykiT+bGlT3SsI7UySRw==" + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/spectrum-colorpicker2/-/spectrum-colorpicker2-2.0.10.tgz", + "integrity": "sha512-WXyR8qT2tZ71u1W2cdwOPd28jGpuxjwJBeLVTN8xVEWsgQDotlK6DuUwocOyL9qAxTh9570qxTfZYbY7m2wuvQ==" }, "node_modules/split-string": { "version": "3.1.0", @@ -15396,7 +15395,8 @@ "version": "0.1.8", "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", - "dev": true + "dev": true, + "optional": true }, "node_modules/stack-trace": { "version": "0.0.10", @@ -15745,16 +15745,16 @@ "optional": true }, "node_modules/stylehacks": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.0.tgz", - "integrity": "sha512-SzLmvHQTrIWfSgljkQCw2++C9+Ne91d/6Sp92I8c5uHTcy/PgeHamwITIbBW9wnFTY/3ZfSXR9HIL6Ikqmcu6Q==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-6.0.0.tgz", + "integrity": "sha512-+UT589qhHPwz6mTlCLSt/vMNTJx8dopeJlZAlBMJPWA3ORqu6wmQY7FBXf+qD+FsqoBJODyqNxOUP3jdntFRdw==", "dev": true, "dependencies": { - "browserslist": "^4.16.6", + "browserslist": "^4.21.4", "postcss-selector-parser": "^6.0.4" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { "postcss": "^8.2.15" @@ -16168,36 +16168,37 @@ } }, "node_modules/tough-cookie": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", - "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", + "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", "dependencies": { "psl": "^1.1.33", "punycode": "^2.1.1", - "universalify": "^0.1.2" + "universalify": "^0.2.0", + "url-parse": "^1.5.3" }, "engines": { "node": ">=6" } }, "node_modules/tough-cookie/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", "engines": { "node": ">= 4.0.0" } }, "node_modules/tr46": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", - "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-4.1.1.tgz", + "integrity": "sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==", "dev": true, "dependencies": { - "punycode": "^2.1.1" + "punycode": "^2.3.0" }, "engines": { - "node": ">=12" + "node": ">=14" } }, "node_modules/trim-newlines": { @@ -16550,9 +16551,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", "dev": true, "funding": [ { @@ -16595,6 +16596,15 @@ "deprecated": "Please see https://github.com/lydell/urix#deprecated", "dev": true }, + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, "node_modules/url-parse-lax": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", @@ -16880,25 +16890,16 @@ "node": ">=0.10.0" } }, - "node_modules/w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "dev": true, - "dependencies": { - "browser-process-hrtime": "^1.0.0" - } - }, "node_modules/w3c-xmlserializer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-3.0.0.tgz", - "integrity": "sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", + "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==", "dev": true, "dependencies": { "xml-name-validator": "^4.0.0" }, "engines": { - "node": ">=12" + "node": ">=14" } }, "node_modules/webidl-conversions": { @@ -16944,16 +16945,16 @@ } }, "node_modules/whatwg-url": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", - "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-12.0.1.tgz", + "integrity": "sha512-Ed/LrqB8EPlGxjS+TrsXcpUond1mhccS3pchLhzSgPCnTimUCKj3IZE75pAs5m6heB2U2TMerKFUXheyHY+VDQ==", "dev": true, "dependencies": { - "tr46": "^3.0.0", + "tr46": "^4.1.1", "webidl-conversions": "^7.0.0" }, "engines": { - "node": ">=12" + "node": ">=14" } }, "node_modules/which": { @@ -18498,14 +18499,14 @@ } }, "@lit-labs/ssr-dom-shim": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.1.1.tgz", - "integrity": "sha512-kXOeFbfCm4fFf2A3WwVEeQj55tMZa8c8/f9AKHMobQMkzNUfUj+antR3fRPaZJawsa1aZiP/Da3ndpZrwEe4rQ==" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.1.2.tgz", + "integrity": "sha512-jnOD+/+dSrfTWYfSXBXlo5l5f0q1UuJo3tkbMDCYA2lKUYq79jaxqtGEvnRoh049nt1vdo1+45RinipU6FGY2g==" }, "@lit/reactive-element": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-1.6.2.tgz", - "integrity": "sha512-rDfl+QnCYjuIGf5xI2sVJWdYIi56CTCwWa+nidKYX6oIuBYwUbT/vX4qbUDlHiZKJ/3FRNQ/tWJui44p6/stSA==", + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-1.6.3.tgz", + "integrity": "sha512-QuTgnG52Poic7uM1AN5yJ09QMe0O28e10XzSvWDz02TJiiKee4stsiownEIadWm8nYzyDAyT+gKzUoZmiWQtsQ==", "requires": { "@lit-labs/ssr-dom-shim": "^1.0.0" } @@ -18620,785 +18621,846 @@ "optional": true }, "@types/trusted-types": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.3.tgz", - "integrity": "sha512-NfQ4gyz38SL8sDNrSixxU2Os1a5xcdFxipAFxYEuLUlvU2uDwS4NUpsImcf1//SlWItCVMMLiylsxbmNMToV/g==" + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.6.tgz", + "integrity": "sha512-HYtNooPvUY9WAVRBr4u+4Qa9fYD1ze2IUlAD3HoA6oehn1taGwBx3Oa52U4mTslTS+GAExKpaFu39Y5xUEwfjg==" }, "@umbraco-ui/uui": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui/-/uui-1.3.0.tgz", - "integrity": "sha512-Zx30c08U0muc2T1ZAPYvKTsa8eNd19b96tIzOhvwHzsjNy56kdYKExPDKkvQ49Blzv9/SxKt4eVghZRNrBdUBg==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui/-/uui-1.5.0.tgz", + "integrity": "sha512-V9pAdCsiaBy+Vq23sZd9JJCk+TX6xMsclJtTUWhwCq8/YUh6KNERbdoVfMYGUZ1yyJ/g+yddQsWlYOxHNp8msw==", "requires": { - "@umbraco-ui/uui-action-bar": "1.3.0", - "@umbraco-ui/uui-avatar": "1.3.0", - "@umbraco-ui/uui-avatar-group": "1.3.0", - "@umbraco-ui/uui-badge": "1.3.0", - "@umbraco-ui/uui-base": "1.3.0", - "@umbraco-ui/uui-boolean-input": "1.3.0", - "@umbraco-ui/uui-box": "1.3.0", - "@umbraco-ui/uui-breadcrumbs": "1.3.0", - "@umbraco-ui/uui-button": "1.3.0", - "@umbraco-ui/uui-button-group": "1.3.0", - "@umbraco-ui/uui-button-inline-create": "1.3.0", - "@umbraco-ui/uui-card": "1.3.0", - "@umbraco-ui/uui-card-content-node": "1.3.0", - "@umbraco-ui/uui-card-media": "1.3.0", - "@umbraco-ui/uui-card-user": "1.3.0", - "@umbraco-ui/uui-caret": "1.3.0", - "@umbraco-ui/uui-checkbox": "1.3.0", - "@umbraco-ui/uui-color-area": "1.3.0", - "@umbraco-ui/uui-color-picker": "1.3.0", - "@umbraco-ui/uui-color-slider": "1.3.0", - "@umbraco-ui/uui-color-swatch": "1.3.0", - "@umbraco-ui/uui-color-swatches": "1.3.0", - "@umbraco-ui/uui-combobox": "1.3.0", - "@umbraco-ui/uui-combobox-list": "1.3.0", - "@umbraco-ui/uui-css": "1.3.0", - "@umbraco-ui/uui-dialog": "1.3.0", - "@umbraco-ui/uui-dialog-layout": "1.3.0", - "@umbraco-ui/uui-file-dropzone": "1.3.0", - "@umbraco-ui/uui-file-preview": "1.3.0", - "@umbraco-ui/uui-form": "1.3.0", - "@umbraco-ui/uui-form-layout-item": "1.3.0", - "@umbraco-ui/uui-form-validation-message": "1.3.0", - "@umbraco-ui/uui-icon": "1.3.0", - "@umbraco-ui/uui-icon-registry": "1.3.0", - "@umbraco-ui/uui-icon-registry-essential": "1.3.0", - "@umbraco-ui/uui-input": "1.3.0", - "@umbraco-ui/uui-input-file": "1.3.0", - "@umbraco-ui/uui-input-lock": "1.3.0", - "@umbraco-ui/uui-input-password": "1.3.0", - "@umbraco-ui/uui-keyboard-shortcut": "1.3.0", - "@umbraco-ui/uui-label": "1.3.0", - "@umbraco-ui/uui-loader": "1.3.0", - "@umbraco-ui/uui-loader-bar": "1.3.0", - "@umbraco-ui/uui-loader-circle": "1.3.0", - "@umbraco-ui/uui-menu-item": "1.3.0", - "@umbraco-ui/uui-modal": "1.3.0", - "@umbraco-ui/uui-pagination": "1.3.0", - "@umbraco-ui/uui-popover": "1.3.0", - "@umbraco-ui/uui-progress-bar": "1.3.0", - "@umbraco-ui/uui-radio": "1.3.0", - "@umbraco-ui/uui-range-slider": "1.3.0", - "@umbraco-ui/uui-ref": "1.3.0", - "@umbraco-ui/uui-ref-list": "1.3.0", - "@umbraco-ui/uui-ref-node": "1.3.0", - "@umbraco-ui/uui-ref-node-data-type": "1.3.0", - "@umbraco-ui/uui-ref-node-document-type": "1.3.0", - "@umbraco-ui/uui-ref-node-form": "1.3.0", - "@umbraco-ui/uui-ref-node-member": "1.3.0", - "@umbraco-ui/uui-ref-node-package": "1.3.0", - "@umbraco-ui/uui-ref-node-user": "1.3.0", - "@umbraco-ui/uui-scroll-container": "1.3.0", - "@umbraco-ui/uui-select": "1.3.0", - "@umbraco-ui/uui-slider": "1.3.0", - "@umbraco-ui/uui-symbol-expand": "1.3.0", - "@umbraco-ui/uui-symbol-file": "1.3.0", - "@umbraco-ui/uui-symbol-file-dropzone": "1.3.0", - "@umbraco-ui/uui-symbol-file-thumbnail": "1.3.0", - "@umbraco-ui/uui-symbol-folder": "1.3.0", - "@umbraco-ui/uui-symbol-lock": "1.3.0", - "@umbraco-ui/uui-symbol-more": "1.3.0", - "@umbraco-ui/uui-symbol-sort": "1.3.0", - "@umbraco-ui/uui-table": "1.3.0", - "@umbraco-ui/uui-tabs": "1.3.0", - "@umbraco-ui/uui-tag": "1.3.0", - "@umbraco-ui/uui-textarea": "1.3.0", - "@umbraco-ui/uui-toast-notification": "1.3.0", - "@umbraco-ui/uui-toast-notification-container": "1.3.0", - "@umbraco-ui/uui-toast-notification-layout": "1.3.0", - "@umbraco-ui/uui-toggle": "1.3.0" + "@umbraco-ui/uui-action-bar": "1.5.0", + "@umbraco-ui/uui-avatar": "1.5.0", + "@umbraco-ui/uui-avatar-group": "1.5.0", + "@umbraco-ui/uui-badge": "1.5.0", + "@umbraco-ui/uui-base": "1.5.0", + "@umbraco-ui/uui-boolean-input": "1.5.0", + "@umbraco-ui/uui-box": "1.5.0", + "@umbraco-ui/uui-breadcrumbs": "1.5.0", + "@umbraco-ui/uui-button": "1.5.0", + "@umbraco-ui/uui-button-group": "1.5.0", + "@umbraco-ui/uui-button-inline-create": "1.5.0", + "@umbraco-ui/uui-card": "1.5.0", + "@umbraco-ui/uui-card-content-node": "1.5.0", + "@umbraco-ui/uui-card-media": "1.5.0", + "@umbraco-ui/uui-card-user": "1.5.0", + "@umbraco-ui/uui-caret": "1.5.0", + "@umbraco-ui/uui-checkbox": "1.5.0", + "@umbraco-ui/uui-color-area": "1.5.0", + "@umbraco-ui/uui-color-picker": "1.5.0", + "@umbraco-ui/uui-color-slider": "1.5.0", + "@umbraco-ui/uui-color-swatch": "1.5.0", + "@umbraco-ui/uui-color-swatches": "1.5.0", + "@umbraco-ui/uui-combobox": "1.5.0", + "@umbraco-ui/uui-combobox-list": "1.5.0", + "@umbraco-ui/uui-css": "1.5.0", + "@umbraco-ui/uui-dialog": "1.5.0", + "@umbraco-ui/uui-dialog-layout": "1.5.0", + "@umbraco-ui/uui-file-dropzone": "1.5.0", + "@umbraco-ui/uui-file-preview": "1.5.0", + "@umbraco-ui/uui-form": "1.5.0", + "@umbraco-ui/uui-form-layout-item": "1.5.0", + "@umbraco-ui/uui-form-validation-message": "1.5.0", + "@umbraco-ui/uui-icon": "1.5.0", + "@umbraco-ui/uui-icon-registry": "1.5.0", + "@umbraco-ui/uui-icon-registry-essential": "1.5.0", + "@umbraco-ui/uui-input": "1.5.0", + "@umbraco-ui/uui-input-file": "1.5.0", + "@umbraco-ui/uui-input-lock": "1.5.0", + "@umbraco-ui/uui-input-password": "1.5.0", + "@umbraco-ui/uui-keyboard-shortcut": "1.5.0", + "@umbraco-ui/uui-label": "1.5.0", + "@umbraco-ui/uui-loader": "1.5.0", + "@umbraco-ui/uui-loader-bar": "1.5.0", + "@umbraco-ui/uui-loader-circle": "1.5.0", + "@umbraco-ui/uui-menu-item": "1.5.0", + "@umbraco-ui/uui-modal": "1.5.0", + "@umbraco-ui/uui-pagination": "1.5.0", + "@umbraco-ui/uui-popover": "1.5.0", + "@umbraco-ui/uui-popover-container": "1.5.0", + "@umbraco-ui/uui-progress-bar": "1.5.0", + "@umbraco-ui/uui-radio": "1.5.0", + "@umbraco-ui/uui-range-slider": "1.5.0", + "@umbraco-ui/uui-ref": "1.5.0", + "@umbraco-ui/uui-ref-list": "1.5.0", + "@umbraco-ui/uui-ref-node": "1.5.0", + "@umbraco-ui/uui-ref-node-data-type": "1.5.0", + "@umbraco-ui/uui-ref-node-document-type": "1.5.0", + "@umbraco-ui/uui-ref-node-form": "1.5.0", + "@umbraco-ui/uui-ref-node-member": "1.5.0", + "@umbraco-ui/uui-ref-node-package": "1.5.0", + "@umbraco-ui/uui-ref-node-user": "1.5.0", + "@umbraco-ui/uui-scroll-container": "1.5.0", + "@umbraco-ui/uui-select": "1.5.0", + "@umbraco-ui/uui-slider": "1.5.0", + "@umbraco-ui/uui-symbol-expand": "1.5.0", + "@umbraco-ui/uui-symbol-file": "1.5.0", + "@umbraco-ui/uui-symbol-file-dropzone": "1.5.0", + "@umbraco-ui/uui-symbol-file-thumbnail": "1.5.0", + "@umbraco-ui/uui-symbol-folder": "1.5.0", + "@umbraco-ui/uui-symbol-lock": "1.5.0", + "@umbraco-ui/uui-symbol-more": "1.5.0", + "@umbraco-ui/uui-symbol-sort": "1.5.0", + "@umbraco-ui/uui-table": "1.5.0", + "@umbraco-ui/uui-tabs": "1.5.0", + "@umbraco-ui/uui-tag": "1.5.0", + "@umbraco-ui/uui-textarea": "1.5.0", + "@umbraco-ui/uui-toast-notification": "1.5.0", + "@umbraco-ui/uui-toast-notification-container": "1.5.0", + "@umbraco-ui/uui-toast-notification-layout": "1.5.0", + "@umbraco-ui/uui-toggle": "1.5.0", + "@umbraco-ui/uui-visually-hidden": "1.5.0" } }, "@umbraco-ui/uui-action-bar": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-action-bar/-/uui-action-bar-1.3.0.tgz", - "integrity": "sha512-r7iJpaRPfXcaKFkd0V706DSscv8qE7wkz7cjM1ARQoTF6n9Ihgo3sBRNSQY8KK+qMrVZiRy7DAyEbFga1xXfPA==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-action-bar/-/uui-action-bar-1.5.0.tgz", + "integrity": "sha512-2B4ONNRTEtoKjnBo8mtvQo2Y9WW7LDSx6q85UuA+YEWfMOgZ0hr0lFepPg+qq/q90/8ZIoItoxRo16UFrPVaHQ==", "requires": { - "@umbraco-ui/uui-base": "1.3.0", - "@umbraco-ui/uui-button-group": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0", + "@umbraco-ui/uui-button-group": "1.5.0" } }, "@umbraco-ui/uui-avatar": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-avatar/-/uui-avatar-1.3.0.tgz", - "integrity": "sha512-hj1rTzbWx2g+YQGBjwhoDcO0uVAON2K+Y17wgvH/Zf3iTmX2MGlns0iUtlyhOnyIH9cX2qA7TawuVXJY1m6GrQ==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-avatar/-/uui-avatar-1.5.0.tgz", + "integrity": "sha512-Iw4MQ2IMfJq590ydA6d2WXJ3gC7wO1vpA6tZj3T772B81LBZR31ftoMn3ho4cpavV5Nv4LvBnGhc2YajbsVn5A==", "requires": { - "@umbraco-ui/uui-base": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0" } }, "@umbraco-ui/uui-avatar-group": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-avatar-group/-/uui-avatar-group-1.3.0.tgz", - "integrity": "sha512-RtMdnNdY5brjme+dV9y84vCgBcKgVDRkDPhLnGb555kkac8hAh53HlOEhc50RwQTV00D91PP68elU8X0DRB5BQ==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-avatar-group/-/uui-avatar-group-1.5.0.tgz", + "integrity": "sha512-hlmqOGLQIN8uJMoLgT+RPHFWIxi8Ridhp/MrKgEjuNF6sTu4bCQyN28XuC9JD+4vBcSjU4a893QGvckalQxZiA==", "requires": { - "@umbraco-ui/uui-avatar": "1.3.0", - "@umbraco-ui/uui-base": "1.3.0" + "@umbraco-ui/uui-avatar": "1.5.0", + "@umbraco-ui/uui-base": "1.5.0" } }, "@umbraco-ui/uui-badge": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-badge/-/uui-badge-1.3.0.tgz", - "integrity": "sha512-AIAmoI1elKuAowm/Cw3lG3LYM6f31z6rUgu61NMGP9seLv8kVn9Ed4joqng9NFTWXHZgb7QWfplX5V/8cI8/GA==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-badge/-/uui-badge-1.5.0.tgz", + "integrity": "sha512-6azqqcqRzVHXYz/JfAody6kDZQG3hiBTiCS8EEYY9GcFNqh8BvFLX4yK9R6zz5BVrjgT3qkmPpE2iIpqV6J58A==", "requires": { - "@umbraco-ui/uui-base": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0" } }, "@umbraco-ui/uui-base": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-base/-/uui-base-1.3.0.tgz", - "integrity": "sha512-2puL+mqSuYXVcy2bsmlyHtMS14OMlZL3nBQ0GzlwrQS/rncKabOiv6zsPBobv+UqQUnIiy+Ms4cfylbWODzVIw==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-base/-/uui-base-1.5.0.tgz", + "integrity": "sha512-HzKRvbf/aPA1y8l9ZLTvF5Up7W6jX8UwqVUr1B8lwckI6tgxOEFPqLya+U4papqZDh4wz/lysXSDESeVfUy8cw==", "requires": { "lit": "^2.3.1" } }, "@umbraco-ui/uui-boolean-input": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-boolean-input/-/uui-boolean-input-1.3.0.tgz", - "integrity": "sha512-xQpr/Aq1kNGSWNvEaUbfUC1Gj4JZ+T5LrVdsjNBZZpZMyFbs2WHEZnBlpZkv3tSAgyZaIlWRat7ZMRWWL7BpDg==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-boolean-input/-/uui-boolean-input-1.5.0.tgz", + "integrity": "sha512-uhIPzi7n3Z4Li3n688Q8v3725apwasZvPntm7kMdtssXay6hUHOcor+hkpPavGXRVxZGg+9gIYRM6sQWp853cA==", "requires": { - "@umbraco-ui/uui-base": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0" } }, "@umbraco-ui/uui-box": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-box/-/uui-box-1.3.0.tgz", - "integrity": "sha512-VYBFilLZLC2KB5tYMg/CjPm6+fxFtJ/8Wi7u1FdUXMLuzmoleeNkHUXWYQe7BBIICYs9t8f0ewQG0N0G56M7mg==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-box/-/uui-box-1.5.0.tgz", + "integrity": "sha512-uTHBvwzS9pRu0MVfN74+bux6lK0m1AmY/7xor9ez9/uzDyIK096D9jSLTQkfDyngIhqnV6kFLbG7PqcfQURFJQ==", "requires": { - "@umbraco-ui/uui-base": "1.3.0", - "@umbraco-ui/uui-css": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0", + "@umbraco-ui/uui-css": "1.4.0" + }, + "dependencies": { + "@umbraco-ui/uui-css": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-css/-/uui-css-1.4.0.tgz", + "integrity": "sha512-HBCFPuXJijeZbjnjdqmg3oqOGB3RmpQKT/s/Uy0TSJfaQGfz0e73o2eRghYHWF2rdqHw6brKFrZTZHBVvCE/xA==", + "requires": { + "lit": "^2.2.2" + } + } } }, "@umbraco-ui/uui-breadcrumbs": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-breadcrumbs/-/uui-breadcrumbs-1.3.0.tgz", - "integrity": "sha512-gxQXJSasmop7ZSTFbygZ65lIn84rr9bolnUW5CyO/f0dciNYpSfZqUfK8y2QvQFrGvfgYf3BUVGbL8reucQLuQ==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-breadcrumbs/-/uui-breadcrumbs-1.5.0.tgz", + "integrity": "sha512-mXuzt5o4NZ1E/HVTLYq+TklX9VQSH5zce+Ef1t2EgUE3EFQH0fwcdCRBC9SpklueNj46ngGHmVhyfv8ekne1Wg==", "requires": { - "@umbraco-ui/uui-base": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0" } }, "@umbraco-ui/uui-button": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-button/-/uui-button-1.3.0.tgz", - "integrity": "sha512-+SvGpevoYof0gFU5ed5oQSiH9JIq41ltZU6Hx3RAhG8Q74IplEhKCiRAMKaQYuketSz7ckqVQlZLVPiKQjKLvg==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-button/-/uui-button-1.5.0.tgz", + "integrity": "sha512-ujicvfqUAN0JtBcgj8OG1YcyDaArTBdP5LvNsyYB8s0dePgcws71XzJ1mbHbXhuA386ioNue04yGDL+gSFlJ/A==", "requires": { - "@umbraco-ui/uui-base": "1.3.0", - "@umbraco-ui/uui-icon-registry-essential": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0", + "@umbraco-ui/uui-icon-registry-essential": "1.5.0" } }, "@umbraco-ui/uui-button-group": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-button-group/-/uui-button-group-1.3.0.tgz", - "integrity": "sha512-8yb5gkwY8nmhG260R+dmlv4l3BWIOWfuBtwdke6p1+2/305sLKMkDOSgMpw0Sm8M32BzIiEAGwMJgSirnPtahg==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-button-group/-/uui-button-group-1.5.0.tgz", + "integrity": "sha512-8yhFdfg7p1B8MM2fIxIlc0Mmhnx46scdGhqeRhvaQ2/dcdpVTI1j1hI2JyOM18TUhJeot4olLqwatlXxlFFT+A==", "requires": { - "@umbraco-ui/uui-base": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0" } }, "@umbraco-ui/uui-button-inline-create": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-button-inline-create/-/uui-button-inline-create-1.3.0.tgz", - "integrity": "sha512-QspinKWiMSG6umA0zzSEU6WQn3vjy/yWsasZBGqNV+Fi2/UOCiEoUhLtb2GUIASpe634Le3txgkEagypP5zsXA==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-button-inline-create/-/uui-button-inline-create-1.5.0.tgz", + "integrity": "sha512-J60vRf7nzQyRYKj+qYhMQR6LrQH6PyTrxyqyfDOVGzcWKzsTuRahxuVOIOzrs489cznwRYwL11jtK32MlrSjGQ==", "requires": { - "@umbraco-ui/uui-base": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0" } }, "@umbraco-ui/uui-card": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-card/-/uui-card-1.3.0.tgz", - "integrity": "sha512-SntgALMe99V0moXI/7PmrO4RV9rZaI5xSkymqsPwmwSKxz15hENY7eVW45ByRUMpd6xWv6cblhDWJhwu2CFyQA==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-card/-/uui-card-1.5.0.tgz", + "integrity": "sha512-RgpnQca3rpjMG/3DAmmrExI7gmNNHBNYwfjRqgCd/3QkBwRrtT/+jdppVsGRxxW5xAN90sJ/eLP7i3F5EfWlSA==", "requires": { - "@umbraco-ui/uui-base": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0" } }, "@umbraco-ui/uui-card-content-node": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-card-content-node/-/uui-card-content-node-1.3.0.tgz", - "integrity": "sha512-NqP7B2gfxWeL8eHieV3IS3fMm6jyZuhZ7QeZbYYAkTOCPbE2MBJtkLX1Z5sypTmaL7fdzd3zqAM1dF+Gu108GA==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-card-content-node/-/uui-card-content-node-1.5.0.tgz", + "integrity": "sha512-aYGeTsppWT0KS9orrqkl9DF2v5l3gSGhBJZqIPiHVBOzczYIcgLWJbdAkaCgpwh1Zacbv3tnB/76965fd4EwPw==", "requires": { - "@umbraco-ui/uui-base": "1.3.0", - "@umbraco-ui/uui-card": "1.3.0", - "@umbraco-ui/uui-icon": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0", + "@umbraco-ui/uui-card": "1.5.0", + "@umbraco-ui/uui-icon": "1.5.0" } }, "@umbraco-ui/uui-card-media": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-card-media/-/uui-card-media-1.3.0.tgz", - "integrity": "sha512-F1+l7rLjpe5hiqmHIAqQRWi/T7lIQL4l65+DzS9UEeEJR1YDI/EZ3pITC0Bi6oTsrKpViIh9bJxHeIyw0G2qcQ==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-card-media/-/uui-card-media-1.5.0.tgz", + "integrity": "sha512-0KktT0IExh06W7QP1FMNqU+tpUL1qDwWeeA19PbZPXwHg15hbSW15a+Hc4aiwqlHYHOPT2gxXoiVc7jqWlMcSQ==", "requires": { - "@umbraco-ui/uui-base": "1.3.0", - "@umbraco-ui/uui-card": "1.3.0", - "@umbraco-ui/uui-symbol-file": "1.3.0", - "@umbraco-ui/uui-symbol-folder": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0", + "@umbraco-ui/uui-card": "1.5.0", + "@umbraco-ui/uui-symbol-file": "1.5.0", + "@umbraco-ui/uui-symbol-folder": "1.5.0" } }, "@umbraco-ui/uui-card-user": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-card-user/-/uui-card-user-1.3.0.tgz", - "integrity": "sha512-A9Lj3mqcv9p72RTwCffFBJUWLaLb/KwJYNecs0Z8XQhubO0dbgHqWhQxasvQb/xBHl49DSINbO80YWE6ViEm4Q==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-card-user/-/uui-card-user-1.5.0.tgz", + "integrity": "sha512-xJjfkRHkt2xim1o+IvEPQiTpIQR+Z9+69096ssuGb3EkxyyUsDmH3aZZH6/+LKdtKR+7mPZVJub9TTWB4VRnwQ==", "requires": { - "@umbraco-ui/uui-avatar": "1.3.0", - "@umbraco-ui/uui-base": "1.3.0", - "@umbraco-ui/uui-card": "1.3.0" + "@umbraco-ui/uui-avatar": "1.5.0", + "@umbraco-ui/uui-base": "1.5.0", + "@umbraco-ui/uui-card": "1.5.0" } }, "@umbraco-ui/uui-caret": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-caret/-/uui-caret-1.3.0.tgz", - "integrity": "sha512-asEdTV7B83A6XwmOBznhQFp4ASAZw8GNcXXW6Z/ESNDnGY0rgVV0o8TaVK46k3egUQhWeChCayg7eymzXmaETQ==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-caret/-/uui-caret-1.5.0.tgz", + "integrity": "sha512-4Apw4TMALEydo5o31gsIyICuPVyKvG/oySNup+5psU3apS0JDQ1RXCgGVDFoFxt5xzM+iJ6/J8ZOOILMVNFM6Q==", "requires": { - "@umbraco-ui/uui-base": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0" } }, "@umbraco-ui/uui-checkbox": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-checkbox/-/uui-checkbox-1.3.0.tgz", - "integrity": "sha512-s/2Am7d5E9YyvkHPlcfbd5zPUSDnJ1EgyDKlJKmTPGHYP1ebMcvwnz00a2EsGBAq8eZM+I6ffISZ5lPSPgNHMg==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-checkbox/-/uui-checkbox-1.5.0.tgz", + "integrity": "sha512-Kve+XAIkSFG9kowbZI1MpDEKihpMTtD9q36pcHiVENqxL1+Tydy60yjy3tHV8o6uamJ8qjR6ZlvLttRwLId9tQ==", "requires": { - "@umbraco-ui/uui-base": "1.3.0", - "@umbraco-ui/uui-boolean-input": "1.3.0", - "@umbraco-ui/uui-icon-registry-essential": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0", + "@umbraco-ui/uui-boolean-input": "1.5.0", + "@umbraco-ui/uui-icon-registry-essential": "1.5.0" } }, "@umbraco-ui/uui-color-area": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-color-area/-/uui-color-area-1.3.0.tgz", - "integrity": "sha512-JcM0WzRk5l21kb9F236ZWtiHy4QD7M8TdTLS2qy+C29BBNYtURE4rMe2HOXv6ebj4mxOWpYEB2vAme6K06CM7w==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-color-area/-/uui-color-area-1.5.0.tgz", + "integrity": "sha512-FF6PrUCBo2nOg5iLbD+iB8aa3Vh+skIfqjFsPD80qLE0sKQ/53juZCnCbvvp7Z0YmIqwBlWP7xGEzJBGfS6OlA==", "requires": { - "@umbraco-ui/uui-base": "1.3.0", + "@umbraco-ui/uui-base": "1.5.0", "colord": "^2.9.3" } }, "@umbraco-ui/uui-color-picker": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-color-picker/-/uui-color-picker-1.3.0.tgz", - "integrity": "sha512-RQ0UN29fYdy3zKBdoAJpNpfWGp0aXdG0OGVtZ7g3LKQy4UW6Fqih9do2V3AAd01ne1gq+ZiZrbu6d7aIgLuDow==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-color-picker/-/uui-color-picker-1.5.0.tgz", + "integrity": "sha512-y/IwXhtaQJWNjwnZtYTvv47+bsmUYJzFLtXqxGckcUmyJQvoZ6DDxslTSv1B9J3QTXU0zpakqpxPszlNNHUygw==", "requires": { - "@umbraco-ui/uui-base": "1.3.0", + "@umbraco-ui/uui-base": "1.5.0", "colord": "^2.9.3" } }, "@umbraco-ui/uui-color-slider": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-color-slider/-/uui-color-slider-1.3.0.tgz", - "integrity": "sha512-8vUUJvx8nt75+C2fREpmXUUsQplLPt4k3VlpGZDg2RqkqriJL6KJyO9aUb7kHNPS6j6nvJD6ggsbSouB/oxFiw==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-color-slider/-/uui-color-slider-1.5.0.tgz", + "integrity": "sha512-nkUpUxfD7VlayBHirM56xKqi1h0Opg7Q2suzxEC4KLDVLO1+L0KzsDORn1tfeantSG0PahBMbuve1XOoOwCrAA==", "requires": { - "@umbraco-ui/uui-base": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0" } }, "@umbraco-ui/uui-color-swatch": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-color-swatch/-/uui-color-swatch-1.3.0.tgz", - "integrity": "sha512-ycIs//+8sru/h0cvxhWusdObkyIsZ+Ohhj7FlsXhUILqFas2mYHoMXlaQWujB9NSVvjgi6aMBHQj1L1BsIa4VQ==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-color-swatch/-/uui-color-swatch-1.5.0.tgz", + "integrity": "sha512-UDqlGmJIMGyn7C23q33v8dkJoISmIAL0XZNTiPkEhwGjKRlxkbexmGd4L4vFt+nhJDRrN86JoZ64BRTHVN8V7A==", "requires": { - "@umbraco-ui/uui-base": "1.3.0", - "@umbraco-ui/uui-icon-registry-essential": "1.3.0", + "@umbraco-ui/uui-base": "1.5.0", + "@umbraco-ui/uui-icon-registry-essential": "1.5.0", "colord": "^2.9.3" } }, "@umbraco-ui/uui-color-swatches": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-color-swatches/-/uui-color-swatches-1.3.0.tgz", - "integrity": "sha512-uT2P4CFJ550owMKPupLniQX2xtk9Iv0UiVjLH4fmKQv98swGWSJhcUZO6AlV5aU5q8+qBaFvbwxfOCubXYrRdg==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-color-swatches/-/uui-color-swatches-1.5.0.tgz", + "integrity": "sha512-SvTKINbckKvqkkS4XnQfpELkW2x47CUa4PsnXqioXNIWP5sBJb9Kydiu0N1+lV57fAkteqNp+YY8mFxn3a6iPA==", "requires": { - "@umbraco-ui/uui-base": "1.3.0", - "@umbraco-ui/uui-color-swatch": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0", + "@umbraco-ui/uui-color-swatch": "1.5.0" } }, "@umbraco-ui/uui-combobox": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-combobox/-/uui-combobox-1.3.0.tgz", - "integrity": "sha512-qnG3gdx/CQ62VDX7AfxD1SA2QdwnXcryxWmIckw90Wp4kvFhdRzQa2cBieQU0Nyg5WAx7clBltVlSUkth/x9NA==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-combobox/-/uui-combobox-1.5.0.tgz", + "integrity": "sha512-SoK4+yR0dJViXZinZ7iqowl6tvWPTTPSOBVE7FfOqOAgFoccOE/nQqjeNjSM0co80OKXqHUsh+kX/HwLjdyNEA==", "requires": { - "@umbraco-ui/uui-base": "1.3.0", - "@umbraco-ui/uui-button": "1.3.0", - "@umbraco-ui/uui-combobox-list": "1.3.0", - "@umbraco-ui/uui-icon": "1.3.0", - "@umbraco-ui/uui-scroll-container": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0", + "@umbraco-ui/uui-button": "1.5.0", + "@umbraco-ui/uui-combobox-list": "1.5.0", + "@umbraco-ui/uui-icon": "1.5.0", + "@umbraco-ui/uui-scroll-container": "1.5.0" } }, "@umbraco-ui/uui-combobox-list": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-combobox-list/-/uui-combobox-list-1.3.0.tgz", - "integrity": "sha512-+RWexG+9XqExbxPWuwEAccdMGj/MkKmC3v/W8EybxO9LhVxzY51sJp36NouzCyGW6IfLkBPDRbFpk5tbLx9w3Q==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-combobox-list/-/uui-combobox-list-1.5.0.tgz", + "integrity": "sha512-5cVlhnst3p6eEHFqn6O8LMswx3wdwpzlfAghleQJW+ZUIVo7ZPXznZz7+6yvnVWxnI7+xxFebHgC0KFxGMUVvg==", "requires": { - "@umbraco-ui/uui-base": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0" } }, "@umbraco-ui/uui-css": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-css/-/uui-css-1.3.0.tgz", - "integrity": "sha512-btFsjkYo7q+1DHl5BXYdOZ3EKShSmOlcasfR5OEsoEb4houDthRfMCMMhwIppmLDjwarrHwP3vBlXi/feanC7g==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-css/-/uui-css-1.5.0.tgz", + "integrity": "sha512-jBSJg8KTWDG7DOVzz7A+UpMxMNHtddcLgt9k25vC4H+84xl+TN51RFTqF8C0JCZdWFK0eKWYlJsGqVrDfoVCcg==", "requires": { "lit": "^2.2.2" } }, "@umbraco-ui/uui-dialog": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-dialog/-/uui-dialog-1.3.0.tgz", - "integrity": "sha512-tHniS27WRj3uxDAZYvixOnQ5PBGi2ZZsGRi4zygPeO+kfLMNNlnuC4qmN+ppoUqz1pj89UtOUEHpQxqd6VckUA==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-dialog/-/uui-dialog-1.5.0.tgz", + "integrity": "sha512-m6J5i+eiLdNApryIY1KW/4kyunAuTpkcWBjQmxyESmlDIqRGdW0lqaahQvcZSZHto03jleUdH5wYTLNgKIb/rw==", "requires": { - "@umbraco-ui/uui-base": "1.3.0", - "@umbraco-ui/uui-css": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0", + "@umbraco-ui/uui-css": "1.4.0" + }, + "dependencies": { + "@umbraco-ui/uui-css": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-css/-/uui-css-1.4.0.tgz", + "integrity": "sha512-HBCFPuXJijeZbjnjdqmg3oqOGB3RmpQKT/s/Uy0TSJfaQGfz0e73o2eRghYHWF2rdqHw6brKFrZTZHBVvCE/xA==", + "requires": { + "lit": "^2.2.2" + } + } } }, "@umbraco-ui/uui-dialog-layout": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-dialog-layout/-/uui-dialog-layout-1.3.0.tgz", - "integrity": "sha512-gWGVtg5GimIUcMFSsvsrb9rSo1Fg9d5IkeG8oJBp5DGMgh2Hwqwvz2MF6qHg0CCgVyMq/77EoZchwuSsje1zCA==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-dialog-layout/-/uui-dialog-layout-1.5.0.tgz", + "integrity": "sha512-vfZ3FMzYccGBVvSSXvCeoHYX+VU8QppXtFR2OGDZwU0b8BOKtfKTP/2VLPEWCG4vJYKPmqZESo3N9bZXWDkWSg==", "requires": { - "@umbraco-ui/uui-base": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0" } }, "@umbraco-ui/uui-file-dropzone": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-file-dropzone/-/uui-file-dropzone-1.3.0.tgz", - "integrity": "sha512-037GMO6+CVNo6Y5UDM/PUP8U2rvbjpyFbIu/gpICG1YENjC6T/yJV0UgD6cXpDXuEEz5x8E4wIw7kFpzjCrJUw==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-file-dropzone/-/uui-file-dropzone-1.5.0.tgz", + "integrity": "sha512-3rkTWidY4k2fyktRxfsMVTSvF+EIguv9p1Fga7v4DCNkplCp6OyJnwWby5F//+NvTHphaGchxZirOWMLgLyDog==", "requires": { - "@umbraco-ui/uui-base": "1.3.0", - "@umbraco-ui/uui-symbol-file-dropzone": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0", + "@umbraco-ui/uui-symbol-file-dropzone": "1.5.0" } }, "@umbraco-ui/uui-file-preview": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-file-preview/-/uui-file-preview-1.3.0.tgz", - "integrity": "sha512-iV5HVY3PDcrILC/gANYJyCdoL2Jowb1yYbJZHBP1P7TTqUaGeYuYs3ipgHQ8YY0Yheo9MHknFSA/2kJaQsjOlw==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-file-preview/-/uui-file-preview-1.5.0.tgz", + "integrity": "sha512-Re+R8uZSD3t3jUgZvzG/DfQtihss7aw+rG41IAjmRO9wBZuUAsowfgCd2OJnuOYJXeaqOYYl+QQr7pmR2a/HNQ==", "requires": { - "@umbraco-ui/uui-base": "1.3.0", - "@umbraco-ui/uui-symbol-file": "1.3.0", - "@umbraco-ui/uui-symbol-file-thumbnail": "1.3.0", - "@umbraco-ui/uui-symbol-folder": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0", + "@umbraco-ui/uui-symbol-file": "1.5.0", + "@umbraco-ui/uui-symbol-file-thumbnail": "1.5.0", + "@umbraco-ui/uui-symbol-folder": "1.5.0" } }, "@umbraco-ui/uui-form": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-form/-/uui-form-1.3.0.tgz", - "integrity": "sha512-7raFihkOQslDzcnZefEoJ0JdPoKS5GWvHRGWl3Ib+HjCorj+TBFrtR/lwZ09iapCizj38C5Xd3t7hBJuWYBTXw==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-form/-/uui-form-1.5.0.tgz", + "integrity": "sha512-rbXFZzAg93/fzvNkxHavUr62DnSeWuVghd9CK9lhe6A9ER9cfjOcGn/INTYK3HHPBalay9IOq+WV1xxC5H6zyg==", "requires": { - "@umbraco-ui/uui-base": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0" } }, "@umbraco-ui/uui-form-layout-item": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-form-layout-item/-/uui-form-layout-item-1.3.0.tgz", - "integrity": "sha512-f7i1AXIwAYgiPkwsF5ugfaZkJko7X8COTUBGCrzFVV7eb0OmYC5BPKkoJ6zlbhX6lpgkuZvfHO+jqFoegXVqVQ==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-form-layout-item/-/uui-form-layout-item-1.5.0.tgz", + "integrity": "sha512-owla3DWo1deVUEG0JzC7pE70h6Ll6lmbR+B+utbMdEgM6shEMdokpPioeCaXb8v7On9Whz+zJGAGBAYl/oyjug==", "requires": { - "@umbraco-ui/uui-base": "1.3.0", - "@umbraco-ui/uui-form-validation-message": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0", + "@umbraco-ui/uui-form-validation-message": "1.5.0" } }, "@umbraco-ui/uui-form-validation-message": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-form-validation-message/-/uui-form-validation-message-1.3.0.tgz", - "integrity": "sha512-kHqwt8cf/p9gidAG9HTnSvur1ODycqUs4V2RRj8K78UAMN4Wb+VosmPhobtPNq38GbgthqGHEv85giWfFZ1omA==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-form-validation-message/-/uui-form-validation-message-1.5.0.tgz", + "integrity": "sha512-wuWCzttkUlEctqdJi9qzSzT8h10WvoK3+5usYB9V8NpdPYzOmbXU5RDYpoTWS0nPO56C6rlRlt3TH1khIQtPJA==", "requires": { - "@umbraco-ui/uui-base": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0" } }, "@umbraco-ui/uui-icon": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-icon/-/uui-icon-1.3.0.tgz", - "integrity": "sha512-esxCauAnddOh5ws/GyKYX2Z1fUGluP8jXHOlRuYTBFLXQtSMFhl0YNieOhT/6B/RieyWF6AUzuKAxfL3YxUHEg==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-icon/-/uui-icon-1.5.0.tgz", + "integrity": "sha512-8Sz6PaYTC8KDCKj5ed+xnlnuh9/NOs0tQGPOma1bnVxGJN8LNjl+cJSLp+iU1m3Qq50H0TG+0K/dS3WUExjbZw==", "requires": { - "@umbraco-ui/uui-base": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0" } }, "@umbraco-ui/uui-icon-registry": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-icon-registry/-/uui-icon-registry-1.3.0.tgz", - "integrity": "sha512-8YtCKCeg1FFPBMtV6TJu2ZdUjE5uUOdYxIjDhue0VKuia7JH7Rr/HlWGkU6/EduyWzVa+osyFWyIg8R/jj1Alw==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-icon-registry/-/uui-icon-registry-1.5.0.tgz", + "integrity": "sha512-ei+HnaCKFjcCYjHYC0hqncY2vDfbgRkWhftOnrhqVZPJkE4omWDmVsLSGg/vm88ar1QleDmVj+CAa4J9T+uVeg==", "requires": { - "@umbraco-ui/uui-base": "1.3.0", - "@umbraco-ui/uui-icon": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0", + "@umbraco-ui/uui-icon": "1.5.0" } }, "@umbraco-ui/uui-icon-registry-essential": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-icon-registry-essential/-/uui-icon-registry-essential-1.3.0.tgz", - "integrity": "sha512-S/SO70kLf2sGKRbHcR1CVuIZm5L4Lzhv/sOD/tZjOSbSllNFlge1Aqg1ykBUxrSwdngtDhhvUkWucdfXdaSBkg==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-icon-registry-essential/-/uui-icon-registry-essential-1.5.0.tgz", + "integrity": "sha512-nxNEQDI4SNBXnI2/Ov60vcdzKFyRCInwZDFNAKyt31F1yTNM0EM0ne5yV4AqM6YPOKVoWzqFcLz2rx64X+oLvQ==", "requires": { - "@umbraco-ui/uui-base": "1.3.0", - "@umbraco-ui/uui-icon-registry": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0", + "@umbraco-ui/uui-icon-registry": "1.5.0" } }, "@umbraco-ui/uui-input": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-input/-/uui-input-1.3.0.tgz", - "integrity": "sha512-ebowNUrRePh0/tc9Wm5s5+VL8PL6a9Q6o8c4TsnjLCPE0RiVDFI0xsepZx0R+kzRJdOw+FRDCUFbpx++0QMEAQ==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-input/-/uui-input-1.5.0.tgz", + "integrity": "sha512-TlbSIRh2Z7xJxW0GEPENd369W1hHgr9Y8IIRE5RDllXzZc8yho4QXPJSDFQTiHMf41LIkOTfIkrQst5047FiXg==", "requires": { - "@umbraco-ui/uui-base": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0" } }, "@umbraco-ui/uui-input-file": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-input-file/-/uui-input-file-1.3.0.tgz", - "integrity": "sha512-JzG9K8xN1RbYPdlbvVW93Z/zWKUFXIgolG7euu7vJXY2MvNxjlpq4UKTmL/O4d7cb+JKj7MefXLjkqpJccMFgg==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-input-file/-/uui-input-file-1.5.0.tgz", + "integrity": "sha512-8h/qGED5KE7sb/YE7dHapZxcWXGm0qCPJft8AGOu/ZK/WdOUV1WHynLjV4yGVZgY9PVZGc+GQTzvdgwxxpltQw==", "requires": { - "@umbraco-ui/uui-action-bar": "1.3.0", - "@umbraco-ui/uui-base": "1.3.0", - "@umbraco-ui/uui-button": "1.3.0", - "@umbraco-ui/uui-file-dropzone": "1.3.0", - "@umbraco-ui/uui-icon": "1.3.0", - "@umbraco-ui/uui-icon-registry-essential": "1.3.0" + "@umbraco-ui/uui-action-bar": "1.5.0", + "@umbraco-ui/uui-base": "1.5.0", + "@umbraco-ui/uui-button": "1.5.0", + "@umbraco-ui/uui-file-dropzone": "1.5.0", + "@umbraco-ui/uui-icon": "1.5.0", + "@umbraco-ui/uui-icon-registry-essential": "1.5.0" } }, "@umbraco-ui/uui-input-lock": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-input-lock/-/uui-input-lock-1.3.0.tgz", - "integrity": "sha512-Sz7BYv6Q4bV7QuLIZKpNsHXWdYCxr+Xhgg74HIbwEvFwVHyUOBnd5CPgv8my/IEXkMNBhCblU47cfT7L0UEytA==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-input-lock/-/uui-input-lock-1.5.0.tgz", + "integrity": "sha512-KBhZLLD+5qyibbcp0AiJo7V4e/+GiKouGz/rCk6/3vxEKpe8CtWekcHhjrdlsHcOluQeBcb1Pdqng0wC9UTO5Q==", "requires": { - "@umbraco-ui/uui-base": "1.3.0", - "@umbraco-ui/uui-button": "1.3.0", - "@umbraco-ui/uui-icon": "1.3.0", - "@umbraco-ui/uui-input": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0", + "@umbraco-ui/uui-button": "1.5.0", + "@umbraco-ui/uui-icon": "1.5.0", + "@umbraco-ui/uui-input": "1.5.0" } }, "@umbraco-ui/uui-input-password": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-input-password/-/uui-input-password-1.3.0.tgz", - "integrity": "sha512-9MXaJ5wnXacmSaAvbDldIDkWJ0YhnOqeG4UqxPKO6yn1B6L6IvrH5jVaXcu3U7eYsRzE/M3veKEnmH0MfgLNLQ==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-input-password/-/uui-input-password-1.5.0.tgz", + "integrity": "sha512-8wvQ/10jfufU0QWhK3gBVo5V/fzk4AuX8wPuieKZDY9Jnwkr7ugZ11DOJtaV3Az/4a0nrfF3TQ2gbBC7zHx2JA==", "requires": { - "@umbraco-ui/uui-base": "1.3.0", - "@umbraco-ui/uui-icon-registry-essential": "1.3.0", - "@umbraco-ui/uui-input": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0", + "@umbraco-ui/uui-icon-registry-essential": "1.5.0", + "@umbraco-ui/uui-input": "1.5.0" } }, "@umbraco-ui/uui-keyboard-shortcut": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-keyboard-shortcut/-/uui-keyboard-shortcut-1.3.0.tgz", - "integrity": "sha512-cF7PoKSiX+UZqvWUYKg/0f7SJnBW3mYYMRLVr+9FgCLhN1bl8W4U68B6YTOyMEBUSLSBh4laSudt1FRztZGCDA==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-keyboard-shortcut/-/uui-keyboard-shortcut-1.5.0.tgz", + "integrity": "sha512-KVTMHl6X0T4cUA3bUgM06xzwCN3VD5W3tZloF0i6e3PTHhkyCE5tKD/2Hizm56OGb+ifaI/oN3L1m7vEPC8IHw==", "requires": { - "@umbraco-ui/uui-base": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0" } }, "@umbraco-ui/uui-label": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-label/-/uui-label-1.3.0.tgz", - "integrity": "sha512-enjog0wvQQG+pgaJWQyYrP9HSGrIrFWFfb9nJzRMDGAAZKp+j6ph+NfYfAgI525CZySLs32VgZsN3DZUOeEdKQ==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-label/-/uui-label-1.5.0.tgz", + "integrity": "sha512-Sc6XuMEyivBEQDfMOA6JT7nW5H4/eD6dzUtUNabOwzCG5GUpvTMfRccpdjmzOvl9VCGNWtE9ikqCBZWexWA6YA==", "requires": { - "@umbraco-ui/uui-base": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0" } }, "@umbraco-ui/uui-loader": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-loader/-/uui-loader-1.3.0.tgz", - "integrity": "sha512-l5l3fACQ3pI3F+iWUTLhQtDuySoM9UYo6Wp3jAYI8G4Bk2ACDrmW4ueL+SnxamgL4mdpr6stJx+9RtJUGjS+Dg==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-loader/-/uui-loader-1.5.0.tgz", + "integrity": "sha512-lhl1KqRbM5NTp08fvxgzOsbHFz04z8/WjaOar6lqNnL0R+CcFtVWQrv69Opht9Sj1NdHESmHEVnX0yodod2LhQ==", "requires": { - "@umbraco-ui/uui-base": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0" } }, "@umbraco-ui/uui-loader-bar": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-loader-bar/-/uui-loader-bar-1.3.0.tgz", - "integrity": "sha512-+2TgZUKQB8+cP4suvqsVWjTLiKAp6CpDHJS9WanoMwNh6gdzY5cG3DeUB6toUb/ieX2meKSdqZNIDkwdLpamlw==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-loader-bar/-/uui-loader-bar-1.5.0.tgz", + "integrity": "sha512-qUcVXi4i+ClozPc0Vfw7g90CLAQVj04F71xtatxDY5nhSWDEMEI6b/pXtN/B9TklkqfgE1mf/gRziFrpbVjLhA==", "requires": { - "@umbraco-ui/uui-base": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0" } }, "@umbraco-ui/uui-loader-circle": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-loader-circle/-/uui-loader-circle-1.3.0.tgz", - "integrity": "sha512-FReFiC7Dk3H3WpSyMNSEaSNPjD2tistAeAYkX6/b4sqg24iP96ryb9lg9jMelSNIqjSdHk9a4TMEmbCxAo8V/g==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-loader-circle/-/uui-loader-circle-1.5.0.tgz", + "integrity": "sha512-059/DJDYbgOmr/LPXbiDaTkBcInmzUUu/YDtQt/SkZPCO33uuB7TDc+++cMgFYskdXBpqesNvVfZOUd4P6zJyA==", "requires": { - "@umbraco-ui/uui-base": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0" } }, "@umbraco-ui/uui-menu-item": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-menu-item/-/uui-menu-item-1.3.0.tgz", - "integrity": "sha512-jrvMnD/8peTbxzSvYXIeuLmODBYD3pFWn4cEm2VN/yFAA1w/0rQztBgZKOMMQZ0jnlP/jtREWkAfPV7MZ9bPWA==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-menu-item/-/uui-menu-item-1.5.0.tgz", + "integrity": "sha512-rmKuTz0Xgf0LyQRqs3tr2Z4O6oaNCd7UmI8kEbluk4yKpk5MU38BlFY9p39fpiEVUuzjcg9pBjrEyxrC/H9xjA==", "requires": { - "@umbraco-ui/uui-base": "1.3.0", - "@umbraco-ui/uui-loader-bar": "1.3.0", - "@umbraco-ui/uui-symbol-expand": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0", + "@umbraco-ui/uui-loader-bar": "1.5.0", + "@umbraco-ui/uui-symbol-expand": "1.5.0" } }, "@umbraco-ui/uui-modal": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-modal/-/uui-modal-1.3.0.tgz", - "integrity": "sha512-FyqnJ2igRjNsnXI8odGirTENMqlwz/5+zO9R5Dsv1XG/sazirGo0o+JGnY4Za4MYNwSpZq5OfKjvXDVkd7jIZQ==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-modal/-/uui-modal-1.5.0.tgz", + "integrity": "sha512-q9g4rA8OYCPlOmZMES/O17NiAu18wtMxNHMuT6dADP2tuULE+TKT6A8vqC7aq8JkWOTAXRAFvTjTmcvm6L2pvg==", "requires": { - "@umbraco-ui/uui-base": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0" } }, "@umbraco-ui/uui-pagination": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-pagination/-/uui-pagination-1.3.0.tgz", - "integrity": "sha512-zqlYVFjsFQX8lZwOAa7AbjtX1r8kbjj2czC7mth4ZomNI02DERXqBFM445h+9ALiM3pgrZS3qgnD1BlNzQMjtQ==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-pagination/-/uui-pagination-1.5.0.tgz", + "integrity": "sha512-I3gCWbyLRFvi5fAlezQZarvj7FuEZ7NVZbbKJxqEhbo1bwOxDMXlDNxIIrxSg3R8YAuDNP9Pbdw+rnQwupuOMQ==", "requires": { - "@umbraco-ui/uui-base": "1.3.0", - "@umbraco-ui/uui-button": "1.3.0", - "@umbraco-ui/uui-button-group": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0", + "@umbraco-ui/uui-button": "1.5.0", + "@umbraco-ui/uui-button-group": "1.5.0" } }, "@umbraco-ui/uui-popover": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-popover/-/uui-popover-1.3.0.tgz", - "integrity": "sha512-mNuFMHGtRhtPMDDDVTOGw1yJJB7ZD6ws6jMAMkEWMMVNXT34mcZZTAd7V+9IdWaBdfZkBkT+5KbVr5nQsRfNzw==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-popover/-/uui-popover-1.5.0.tgz", + "integrity": "sha512-Ab8UL4UGxTUn6hYbTqPrMtyGpQr3Xw1E/PVKG3+j+UrNw1Ro5piKgh0TahwxLnrsXWOPXfy53oaXNYsMGenndA==", "requires": { - "@umbraco-ui/uui-base": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0" + } + }, + "@umbraco-ui/uui-popover-container": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-popover-container/-/uui-popover-container-1.5.0.tgz", + "integrity": "sha512-issjf86TwvwLA6sJOs5pLRMFY+WBc4oeTZiJMz5mhZ5C5UoRmU65L6RP/0UnzZ4ZGY2Gpdh2YatNnZ7hVMg5ig==", + "requires": { + "@umbraco-ui/uui-base": "1.5.0" } }, "@umbraco-ui/uui-progress-bar": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-progress-bar/-/uui-progress-bar-1.3.0.tgz", - "integrity": "sha512-ZvGZc/RiBqPi3zG6UiBth6eFw1hL8u8qz6OwG8Mvmooj7D5Oc9+sRjeZLQMW2bUl1lKb5j1qLeJ4lRyJvPH+1g==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-progress-bar/-/uui-progress-bar-1.5.0.tgz", + "integrity": "sha512-B/v7VsBBwo19Y+4NBRllt7Ls+WLQfx6vY57rfO8MQG7zxGznxpTSIYvd3wxdRuDsFQeVwwoYjF1/YBJ7iWUnEQ==", "requires": { - "@umbraco-ui/uui-base": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0" } }, "@umbraco-ui/uui-radio": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-radio/-/uui-radio-1.3.0.tgz", - "integrity": "sha512-ip6nABwf8demHpt6WCYML1Ug1XSzYUlqk8Qq8ZthlogYunqasCSp6A2VD8RO8RYO5Qyr0hkUxI5oTTDNFuk5qg==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-radio/-/uui-radio-1.5.0.tgz", + "integrity": "sha512-3e52VZHcgHB/17eLTmiZwdm7ENgfX6AF4Dw+8H2x8jdRjyvt8lbykCq+6xewAZFsLAu7vTOEKtd2RhQFI2+hwg==", "requires": { - "@umbraco-ui/uui-base": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0" } }, "@umbraco-ui/uui-range-slider": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-range-slider/-/uui-range-slider-1.3.0.tgz", - "integrity": "sha512-ZnIaby8phrkpwFVS5nhuh7gu045mRDPAihDgRQE7WhOcL1r1G+xYTvd32FVTh0QruTQOa7lUp9BjMNzd+DVUnA==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-range-slider/-/uui-range-slider-1.5.0.tgz", + "integrity": "sha512-oHmIoF+KrHDWiOKonIWq7n94C6CzStBXrleS6iwCgWY++ayaHKCPlCuQIYp3BmGjnMQn8Ou0r2x/RuBPuraLVQ==", "requires": { - "@umbraco-ui/uui-base": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0" } }, "@umbraco-ui/uui-ref": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref/-/uui-ref-1.3.0.tgz", - "integrity": "sha512-mt27HH4NL+r9cL4wYO0NDobMyUczGOqNc88oumSblAs+3ex8HHz5SX8GYi05zdndbJATxHJmh9Q5op3bE4SKPw==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref/-/uui-ref-1.5.0.tgz", + "integrity": "sha512-wba/OP6b/mG5kp4bUgBBcBAAy3RWTbokVyjb52FR7nyqNMnIE/UBdgi0XeBx4j6lZeEbr5k5ZOGQ1knEHbPWyQ==", "requires": { - "@umbraco-ui/uui-base": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0" } }, "@umbraco-ui/uui-ref-list": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref-list/-/uui-ref-list-1.3.0.tgz", - "integrity": "sha512-KProeP3ielc1aX1WYqM0etuilvVgfjFnj5d1AufRLeFcnojJZWqwl0QX7E5yPmCTBChsU/SQA4ab3lROCJH57Q==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref-list/-/uui-ref-list-1.5.0.tgz", + "integrity": "sha512-sxs3hC97zDuFaV8mvXLAbqqtWk0kqDdHY9ORt9CxacdT36nQS58Sw60/plCryqoyp7P2cUZVtlEeff53OKOTCQ==", "requires": { - "@umbraco-ui/uui-base": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0" } }, "@umbraco-ui/uui-ref-node": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref-node/-/uui-ref-node-1.3.0.tgz", - "integrity": "sha512-NANRP3BKLOzxRFl0ZxD4XAkCRf7KaQVN/hytyQdlmhKaTjnXXllgd8Cy7795VwK6PAOBqzDwWh4KGC6MpoZpSQ==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref-node/-/uui-ref-node-1.5.0.tgz", + "integrity": "sha512-bjmMgrIW+/4bmUXwMwFFaPrg2MeTxXssb6EpbBItJ+s0QhTEcTNyAD/DK3RlSMRE5VPO11sRwgCr06aIhklx0Q==", "requires": { - "@umbraco-ui/uui-base": "1.3.0", - "@umbraco-ui/uui-icon": "1.3.0", - "@umbraco-ui/uui-ref": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0", + "@umbraco-ui/uui-icon": "1.5.0", + "@umbraco-ui/uui-ref": "1.5.0" } }, "@umbraco-ui/uui-ref-node-data-type": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref-node-data-type/-/uui-ref-node-data-type-1.3.0.tgz", - "integrity": "sha512-v2GkM8FPorlHcBXWTTfiMsDPPvEfJYP/yG7v+7WPcQ8zV3inUIAiYKCBD7a/z9UIlndDMpCt29UeCSo58qA7fQ==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref-node-data-type/-/uui-ref-node-data-type-1.5.0.tgz", + "integrity": "sha512-k14MI3cRELOmAwmtFeBzgCFw4+uin0JSqf85ZaqNkXSAmg+4I0ayUI6PGz+Jw66yGHvw3YNeUMKPmLO8l6M79A==", "requires": { - "@umbraco-ui/uui-base": "1.3.0", - "@umbraco-ui/uui-ref-node": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0", + "@umbraco-ui/uui-ref-node": "1.5.0" } }, "@umbraco-ui/uui-ref-node-document-type": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref-node-document-type/-/uui-ref-node-document-type-1.3.0.tgz", - "integrity": "sha512-U+uGFDFyLQGFLe9EcrF+6yshp5+6QhmGPbcS6kAjt52MKN3iRMV4H9mJTltvbHCjF/jUIfu/MRaQLDBWVXD4HA==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref-node-document-type/-/uui-ref-node-document-type-1.5.0.tgz", + "integrity": "sha512-ouytDUaSls7Hsd0WaDy4wgfKMLpxlxx16WWyHlzX5lMyhkR+S3olyNZcgDRtz9xIQV+dVE3iDsUeQcNAigCdaw==", "requires": { - "@umbraco-ui/uui-base": "1.3.0", - "@umbraco-ui/uui-ref-node": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0", + "@umbraco-ui/uui-ref-node": "1.5.0" } }, "@umbraco-ui/uui-ref-node-form": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref-node-form/-/uui-ref-node-form-1.3.0.tgz", - "integrity": "sha512-3ECrFJKAzn+I67sPwAX8YYcJadGq5azeg1QLi76FscrXvCXCcAoO36dpObvjwW5I1FDZGs42XkoUNYl5Tg7xpw==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref-node-form/-/uui-ref-node-form-1.5.0.tgz", + "integrity": "sha512-D86A1+ScVGTer2kci6Y9X4ZAhCnm4kxUi7bCFH7dn7oi/Fq8fhs3PBuA7mr1FrZgrPvXVdW+Qa7ldxxU58NIWA==", "requires": { - "@umbraco-ui/uui-base": "1.3.0", - "@umbraco-ui/uui-ref-node": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0", + "@umbraco-ui/uui-ref-node": "1.5.0" } }, "@umbraco-ui/uui-ref-node-member": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref-node-member/-/uui-ref-node-member-1.3.0.tgz", - "integrity": "sha512-gqriNy9K0fF7xaV9BgOX7ooNuD/1o9gyJGhaa4JNua2w60HSAoaHKewEndRrZvplYhnMSfk5tdxQhdH9u5XJVw==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref-node-member/-/uui-ref-node-member-1.5.0.tgz", + "integrity": "sha512-/UPmUNk6KP2unKnJKjr1qGkdPlFGTRj3K7H/mczCY7IbtzEccdEswWJCdUy/doIkAKbDdaqKe3/9HBoA3JtWPw==", "requires": { - "@umbraco-ui/uui-base": "1.3.0", - "@umbraco-ui/uui-ref-node": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0", + "@umbraco-ui/uui-ref-node": "1.5.0" } }, "@umbraco-ui/uui-ref-node-package": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref-node-package/-/uui-ref-node-package-1.3.0.tgz", - "integrity": "sha512-yRTDubukJ9JqOm8g90NldxFlvzqGU+mEpQWRfZ0pNlggo+xLn7kj+1NNazVHl3J5M2D81xlaVnwTdAj8TGwA+w==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref-node-package/-/uui-ref-node-package-1.5.0.tgz", + "integrity": "sha512-XkET8XKb3XxmjlIDrmtwm9o0QsaG81bcpUBEBA/wUC0OcJNrjTKyv6ciAVDP7HaW6XpN8XwsRbqdcrYwM8lXDQ==", "requires": { - "@umbraco-ui/uui-base": "1.3.0", - "@umbraco-ui/uui-ref-node": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0", + "@umbraco-ui/uui-ref-node": "1.5.0" } }, "@umbraco-ui/uui-ref-node-user": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref-node-user/-/uui-ref-node-user-1.3.0.tgz", - "integrity": "sha512-GhOZdOtDsqIvAjIFhy4jJ2RVt6yGvVBA50tM6BrszIsC28fNGYnDKVmmC3FHS/Va9omVqnF+jeKRpBFxOt06Rg==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref-node-user/-/uui-ref-node-user-1.5.0.tgz", + "integrity": "sha512-9TrIr1JWw3cIkWfQrdv9iLRIqm/dd10d6uZEWaGJ/MuxyCywqMg/LSApV/NLapB4HXhIG4pGCiXvUa8OVW99ew==", "requires": { - "@umbraco-ui/uui-base": "1.3.0", - "@umbraco-ui/uui-ref-node": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0", + "@umbraco-ui/uui-ref-node": "1.5.0" } }, "@umbraco-ui/uui-scroll-container": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-scroll-container/-/uui-scroll-container-1.3.0.tgz", - "integrity": "sha512-HQ0U45D5opkrN4NTAJfP0vlkMfXTWXfR2Gj2NW4P7CPzV1JyQUB5opDhNmvmQwY7kd+tMjKY+gHGmTM1nKa7uQ==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-scroll-container/-/uui-scroll-container-1.5.0.tgz", + "integrity": "sha512-Xj5jnmCEDyRENmWtuPI1QYEMzrmi/9/LaajkPEIZEYVu2owI940F0viS5X+X/FvKehSxoSt9ainCwkLphgzNiw==", "requires": { - "@umbraco-ui/uui-base": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0" } }, "@umbraco-ui/uui-select": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-select/-/uui-select-1.3.0.tgz", - "integrity": "sha512-hO2zBFS9ahSSqSoO1K2vup2124NKIV4vYuM4TpGl9kt2t0wzBVK153amuib7YhfTGpuQwEYRUzWc6TTbJnTkzw==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-select/-/uui-select-1.5.0.tgz", + "integrity": "sha512-lcMiIM6WxF5YraIXAqSpujx3OJzq6Snfik0BUypTWbUZdKVQTgLPh3A6We9PdD6K64AX2Zk4eH8yhQ+5GNImzQ==", "requires": { - "@umbraco-ui/uui-base": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0" } }, "@umbraco-ui/uui-slider": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-slider/-/uui-slider-1.3.0.tgz", - "integrity": "sha512-+FoUxEzl3S+R1nox4k3OOGV2Z7uT0d/YCEqjrof+gTZl+1DNxgGIrv2wvujp5kGnYwVMdpyeOnsg82Hngk4zvw==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-slider/-/uui-slider-1.5.0.tgz", + "integrity": "sha512-Mp6xz7C7GbAuQ1Totd2WLzvS56ekx4l31mAvUvor0GqrUF/hHxwfrGZOAWoBqoTdKQAFKbZVSM782a+cwNv3hg==", "requires": { - "@umbraco-ui/uui-base": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0" } }, "@umbraco-ui/uui-symbol-expand": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-symbol-expand/-/uui-symbol-expand-1.3.0.tgz", - "integrity": "sha512-4n/qV+0uys+zFw1tyzjeN8wNMiafdxw9iAqx/bW9oYy52x0SdzuhvqJSFyQMxopAqnfLuBQnCR9rqzW+F2UIVA==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-symbol-expand/-/uui-symbol-expand-1.5.0.tgz", + "integrity": "sha512-ZCuGAJT2qFs4wQ6Z+g/qV3obv/SbriMnaIOGy6XTTAuMlh2+aNAwm33Je0wYKCTwHNUmnl427wTMEkQcMziD4g==", "requires": { - "@umbraco-ui/uui-base": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0" } }, "@umbraco-ui/uui-symbol-file": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-symbol-file/-/uui-symbol-file-1.3.0.tgz", - "integrity": "sha512-00W6Dq/Kko8bWRU7StxDWZ0NtY4T9qkAdU3MY1WXb4gqEKSXeHZjG+I2Mm1zfcnz69W4Jo5APKU96Oo2xup0XA==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-symbol-file/-/uui-symbol-file-1.5.0.tgz", + "integrity": "sha512-ClB/lT/ebyUBmPqExB2ZinMOo/bCMEgjGxjkXy2THX4lOLUqvjDNEKLq99MAREKSh/mmGq7iB3Z/hd9/EDu75Q==", "requires": { - "@umbraco-ui/uui-base": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0" } }, "@umbraco-ui/uui-symbol-file-dropzone": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-symbol-file-dropzone/-/uui-symbol-file-dropzone-1.3.0.tgz", - "integrity": "sha512-g640sHcxzx4XEIkfToKvNyYqzfnwHXmbySm1HDrf7oJBoBvcTYk7zkDcOn6meWRzG08QfrlyOBmgINYv9f9Mtw==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-symbol-file-dropzone/-/uui-symbol-file-dropzone-1.5.0.tgz", + "integrity": "sha512-0YL88rFFI5SOzzORtm1VtMihN4if7r0CIRe5Q3Sv0WwHjrMfIM08DeONCgN2j+ZoKgnTvt9KpE1OGigshouRug==", "requires": { - "@umbraco-ui/uui-base": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0" } }, "@umbraco-ui/uui-symbol-file-thumbnail": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-symbol-file-thumbnail/-/uui-symbol-file-thumbnail-1.3.0.tgz", - "integrity": "sha512-5R1gUqr6+oT1w7mSYOZHszGp0MUbDYSbi3aJOrntB+eu9qX6h4ON5bHFDcQTb4+ysJhuqBprJL3hmhkd9KiD4g==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-symbol-file-thumbnail/-/uui-symbol-file-thumbnail-1.5.0.tgz", + "integrity": "sha512-/qkf6AdAIsRmUfsBdtFkFk5wPWw6JvSVHvgk/UvZulHHb2F8TamPSJfb6voh86Vq8DzVIcy3ZbqatxH7LZBY1g==", "requires": { - "@umbraco-ui/uui-base": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0" } }, "@umbraco-ui/uui-symbol-folder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-symbol-folder/-/uui-symbol-folder-1.3.0.tgz", - "integrity": "sha512-6ixquiF47WAxMx0hdmsr8NDwgrJaiqjxqhGl1P5rIGI+XVsuf0IY/tZKttd+ZqQC87ktzx9lX2kLip0DicU0lg==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-symbol-folder/-/uui-symbol-folder-1.5.0.tgz", + "integrity": "sha512-Sxt4n5IBT+XIqu2nJxP4RnhourwC+1X5bD40YgUBmqZJ9KV//tox4zo2elU19WCeRZFkklZGfn2smLY1FD0OGg==", "requires": { - "@umbraco-ui/uui-base": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0" } }, "@umbraco-ui/uui-symbol-lock": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-symbol-lock/-/uui-symbol-lock-1.3.0.tgz", - "integrity": "sha512-JyoOT7HYH4j2NrubKKjqkBtJZMsFuNe4P1k9YXkDYoh8bb9uJ6Zvf/9j4bTC9DlqztI2aqGmGWzduA7XY2RGwA==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-symbol-lock/-/uui-symbol-lock-1.5.0.tgz", + "integrity": "sha512-EH7tEPCB+PTyjWbW+bdekk4M5hcjvYYpCKTnl3Pdpzh0mrxHPt9xa8908JB0tG8n0m0EcP+L7k8pthUmkgpK7A==", "requires": { - "@umbraco-ui/uui-base": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0" } }, "@umbraco-ui/uui-symbol-more": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-symbol-more/-/uui-symbol-more-1.3.0.tgz", - "integrity": "sha512-LuNr72QaOCA18jm7yEMigC+nEDWnRc27AaRv3NiP1QdRXmzq5CaYFnxU0b/+9A00xZNFsysnDruHNzyWgEzdFw==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-symbol-more/-/uui-symbol-more-1.5.0.tgz", + "integrity": "sha512-EuhU4kle4swMFZnsguWPz77rOtrk0IQcXuEA60fjzFGJCwsg7yyu9Ns209IEUsYh5ktstj8pXKT8+ZDila5umg==", "requires": { - "@umbraco-ui/uui-base": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0" } }, "@umbraco-ui/uui-symbol-sort": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-symbol-sort/-/uui-symbol-sort-1.3.0.tgz", - "integrity": "sha512-4iiyqjSr0ZO8VY4zqCJLQMXSlF8J18D0+jzMZFKMZk5QGw0dAGdF1Zy8vEoygXvIiiytbg4Sik+ehhgsF5o5vQ==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-symbol-sort/-/uui-symbol-sort-1.5.0.tgz", + "integrity": "sha512-/cifoZXuZbDmuZFPD0rr95Gpuy18DnboOYb/Ir6G3PANJ0fWOhzykHUrdx18ItLzhhwfE3dcZk4EWcGrEkfnfg==", "requires": { - "@umbraco-ui/uui-base": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0" } }, "@umbraco-ui/uui-table": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-table/-/uui-table-1.3.0.tgz", - "integrity": "sha512-po0znA7Zv6xF78bm3A6/CW+aclVXcjFVahGxVnYE0F7RlshaKnw5TpQByRTw4U2M/HMi1RLKrutBOf/j/pm+EA==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-table/-/uui-table-1.5.0.tgz", + "integrity": "sha512-tjhpEzBYCQdgieoXcIgcOjROrScF0Ifutz/6gmpcdrXYbgZ+YkWX7dSLAeQj3fzGebaPbNYzGOmGZA9/opZ1rg==", "requires": { - "@umbraco-ui/uui-base": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0" } }, "@umbraco-ui/uui-tabs": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-tabs/-/uui-tabs-1.3.0.tgz", - "integrity": "sha512-zNzm6ktAp3QykOT+4/9dzl4IZGSC2dH0yV9p8DRFFeEppv/J26S29WPLK9EHwa5/fZPLpKiGQ1sqQB/z1Oa7wQ==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-tabs/-/uui-tabs-1.5.0.tgz", + "integrity": "sha512-0D5NLufis9Tzc5Vr+fl8Z0wABHyz1Tep76Qnx0nXyYzAZvdNq2IxThHbGqA1cb+FjVJSKdfp6ONfiPc/SIVAzA==", "requires": { - "@umbraco-ui/uui-base": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0", + "@umbraco-ui/uui-button": "1.5.0", + "@umbraco-ui/uui-popover-container": "1.5.0", + "@umbraco-ui/uui-symbol-more": "1.5.0" } }, "@umbraco-ui/uui-tag": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-tag/-/uui-tag-1.3.0.tgz", - "integrity": "sha512-R4yU8LoWDV8Qkvy0mwo1yjBcOrh0RvDfTa5CSJmTgGrUhWLPNR5ZpDiqu+5Ntr0nkHhT4LF76EkQhvGWleQglg==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-tag/-/uui-tag-1.5.0.tgz", + "integrity": "sha512-OZGitHjdn4coj1x7F7zfeIx5M9NhGd8+CqpD915V9Qm8YlTQxFLq1M8tqjIxaYAB5EcHXuyzRpSUCrt/WUvipA==", "requires": { - "@umbraco-ui/uui-base": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0" } }, "@umbraco-ui/uui-textarea": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-textarea/-/uui-textarea-1.3.0.tgz", - "integrity": "sha512-eUjPkWu99Y7uygu2pZdXH+S86qWIN8RuBz5Aaz+OQPvMQKD0CE6zjx/Zv1qMf60TbPhdcRHGV+2chpvlCjDKEA==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-textarea/-/uui-textarea-1.5.0.tgz", + "integrity": "sha512-+zDqbYKYfaiG0IXEaQatUaWsD4umtkTtbCMnqVPMhxwneVoE9d69ejat2zLFUI/ERm3nKMyq/NRfxzXJgzlDng==", "requires": { - "@umbraco-ui/uui-base": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0" } }, "@umbraco-ui/uui-toast-notification": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-toast-notification/-/uui-toast-notification-1.3.0.tgz", - "integrity": "sha512-47bKZti+gSwOjzoZR16GoQu0W//esDJiKkELZ8JIhxD5gqn8QsxrqJlQ525T4qSg9hBIUCTM3/HKsvPbyjZoow==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-toast-notification/-/uui-toast-notification-1.5.0.tgz", + "integrity": "sha512-cFjz4/uZudR3yuSqK5gqzAio55ZOOxQAOc8bC5keS0HXL84JcDwrEP4/Nz7X/uUNUqauYZG/iBUirAvqfv7Osw==", "requires": { - "@umbraco-ui/uui-base": "1.3.0", - "@umbraco-ui/uui-button": "1.3.0", - "@umbraco-ui/uui-css": "1.3.0", - "@umbraco-ui/uui-icon": "1.3.0", - "@umbraco-ui/uui-icon-registry-essential": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0", + "@umbraco-ui/uui-button": "1.5.0", + "@umbraco-ui/uui-css": "1.4.0", + "@umbraco-ui/uui-icon": "1.5.0", + "@umbraco-ui/uui-icon-registry-essential": "1.5.0" + }, + "dependencies": { + "@umbraco-ui/uui-css": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-css/-/uui-css-1.4.0.tgz", + "integrity": "sha512-HBCFPuXJijeZbjnjdqmg3oqOGB3RmpQKT/s/Uy0TSJfaQGfz0e73o2eRghYHWF2rdqHw6brKFrZTZHBVvCE/xA==", + "requires": { + "lit": "^2.2.2" + } + } } }, "@umbraco-ui/uui-toast-notification-container": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-toast-notification-container/-/uui-toast-notification-container-1.3.0.tgz", - "integrity": "sha512-Zao5QFrL9JjC9msqNsUjeLdWZAWqn6fDYQfhRsZPDEmvsZ4yQN+QnoJVyufFnzOgOfqUNHB6VHTqbS2MPg6ojQ==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-toast-notification-container/-/uui-toast-notification-container-1.5.0.tgz", + "integrity": "sha512-AB4kwgocUeDwkxiCYNH0AOMEtExDS6sEq9sk2i8AGDAEjprAB3m0HM9AlrA+T0V1GtSuv+Q1DEuCyxnVbuK0WQ==", "requires": { - "@umbraco-ui/uui-base": "1.3.0", - "@umbraco-ui/uui-toast-notification": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0", + "@umbraco-ui/uui-toast-notification": "1.5.0" } }, "@umbraco-ui/uui-toast-notification-layout": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-toast-notification-layout/-/uui-toast-notification-layout-1.3.0.tgz", - "integrity": "sha512-Ho8Ad6VIxxN0QC9k980TjY2X+sItfiD6mCIOwle3bCAadFMnLOa/ESseA1l+zr4/liY0PPQoMBnQtKR9L0XK3A==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-toast-notification-layout/-/uui-toast-notification-layout-1.5.0.tgz", + "integrity": "sha512-rM7cGCdMolhsndfZT9zGAPI9P3bl1lNpjDhWI124Mgx+KS8t2Q2h9O+7FGqFnjCTJOQES1pdQ+enl2NxCuEkNg==", "requires": { - "@umbraco-ui/uui-base": "1.3.0", - "@umbraco-ui/uui-css": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0", + "@umbraco-ui/uui-css": "1.4.0" + }, + "dependencies": { + "@umbraco-ui/uui-css": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-css/-/uui-css-1.4.0.tgz", + "integrity": "sha512-HBCFPuXJijeZbjnjdqmg3oqOGB3RmpQKT/s/Uy0TSJfaQGfz0e73o2eRghYHWF2rdqHw6brKFrZTZHBVvCE/xA==", + "requires": { + "lit": "^2.2.2" + } + } } }, "@umbraco-ui/uui-toggle": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-toggle/-/uui-toggle-1.3.0.tgz", - "integrity": "sha512-6NnAP6L8jSnE2CyPx1wgIMrZm0eCRNOAcYWKsF3iyhG4TLkZqbGq7pGEhxqHT0uNigHdv5Wseu+UC1L0GLM+pQ==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-toggle/-/uui-toggle-1.5.0.tgz", + "integrity": "sha512-vsJSpBSmlrLzspCa1dGQGYXfc6RwTGTzSlNQdnzzP7qefVRP4GlOaqYV0TJhHMcYdbai+iEkrLznzJQvM9JFLA==", "requires": { - "@umbraco-ui/uui-base": "1.3.0", - "@umbraco-ui/uui-boolean-input": "1.3.0" + "@umbraco-ui/uui-base": "1.5.0", + "@umbraco-ui/uui-boolean-input": "1.5.0" + } + }, + "@umbraco-ui/uui-visually-hidden": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-visually-hidden/-/uui-visually-hidden-1.5.0.tgz", + "integrity": "sha512-3Imqxp8+hvirakPogqzvRlU+uhshpGRdrEMU7phCS5VGzDEl8NL1BhxR31EQAw7DspwbD5non3ZwbTwLYydfCg==", + "requires": { + "@umbraco-ui/uui-base": "1.5.0" } }, "abab": { @@ -19426,9 +19488,9 @@ } }, "ace-builds": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/ace-builds/-/ace-builds-1.22.1.tgz", - "integrity": "sha512-o5RGTPBIiRxguWNors3pT6KuLqj0a2NvNLoqir7/2LLiFm34PJV3BMq4sl9kjPayo4+lmd99m6zAq+XPdhyHQA==" + "version": "1.31.1", + "resolved": "https://registry.npmjs.org/ace-builds/-/ace-builds-1.31.1.tgz", + "integrity": "sha512-3DnE5bZF6Ji+l4F5acoLk+rV7mxrUt1C4r61Xy9owp5rVM4lj5NL8GJfoX6Jnnbhx6kKV7Vdpb+Tco+0ORTvhg==" }, "acorn": { "version": "7.4.1", @@ -19436,16 +19498,6 @@ "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", "dev": true }, - "acorn-globals": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", - "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", - "dev": true, - "requires": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" - } - }, "acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", @@ -19453,12 +19505,6 @@ "dev": true, "requires": {} }, - "acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "dev": true - }, "agent-base": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", @@ -19913,14 +19959,14 @@ "dev": true }, "autoprefixer": { - "version": "10.4.14", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", - "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==", + "version": "10.4.16", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.16.tgz", + "integrity": "sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==", "dev": true, "requires": { - "browserslist": "^4.21.5", - "caniuse-lite": "^1.0.30001464", - "fraction.js": "^4.2.0", + "browserslist": "^4.21.10", + "caniuse-lite": "^1.0.30001538", + "fraction.js": "^4.3.6", "normalize-range": "^0.1.2", "picocolors": "^1.0.0", "postcss-value-parser": "^4.2.0" @@ -20438,22 +20484,16 @@ "to-regex": "^3.0.1" } }, - "browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", - "dev": true - }, "browserslist": { - "version": "4.21.9", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", - "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz", + "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001503", - "electron-to-chromium": "^1.4.431", - "node-releases": "^2.0.12", - "update-browserslist-db": "^1.0.11" + "caniuse-lite": "^1.0.30001541", + "electron-to-chromium": "^1.4.535", + "node-releases": "^2.0.13", + "update-browserslist-db": "^1.0.13" } }, "buffer": { @@ -20671,9 +20711,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001504", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001504.tgz", - "integrity": "sha512-5uo7eoOp2mKbWyfMXnGO9rJWOGU8duvzEiYITW+wivukL7yHH4gX9yuRaobu6El4jPxo6jKZfG+N6fB621GD/Q==", + "version": "1.0.30001562", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001562.tgz", + "integrity": "sha512-kfte3Hym//51EdX4239i+Rmp20EsLIYGdPkERegTgU19hQWCRhsRFGKHTliUlsry53tv17K7n077Kqa0WJU4ng==", "dev": true }, "caw": { @@ -21311,9 +21351,9 @@ } }, "css-declaration-sorter": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.3.1.tgz", - "integrity": "sha512-fBffmak0bPAnyqc/HO8C3n2sHrp9wcqQz6ES9koRF2/mLOVAx9zIQ3Y7R29sYCteTPqMCwns4WYQoCX91Xl3+w==", + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz", + "integrity": "sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==", "dev": true, "requires": {} }, @@ -21371,57 +21411,56 @@ "dev": true }, "cssnano": { - "version": "5.1.13", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.13.tgz", - "integrity": "sha512-S2SL2ekdEz6w6a2epXn4CmMKU4K3KpcyXLKfAYc9UQQqJRkD/2eLUG0vJ3Db/9OvO5GuAdgXw3pFbR6abqghDQ==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-6.0.1.tgz", + "integrity": "sha512-fVO1JdJ0LSdIGJq68eIxOqFpIJrZqXUsBt8fkrBcztCQqAjQD51OhZp7tc0ImcbwXD4k7ny84QTV90nZhmqbkg==", "dev": true, "requires": { - "cssnano-preset-default": "^5.2.12", - "lilconfig": "^2.0.3", - "yaml": "^1.10.2" + "cssnano-preset-default": "^6.0.1", + "lilconfig": "^2.1.0" } }, "cssnano-preset-default": { - "version": "5.2.12", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.12.tgz", - "integrity": "sha512-OyCBTZi+PXgylz9HAA5kHyoYhfGcYdwFmyaJzWnzxuGRtnMw/kR6ilW9XzlzlRAtB6PLT/r+prYgkef7hngFew==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-6.0.1.tgz", + "integrity": "sha512-7VzyFZ5zEB1+l1nToKyrRkuaJIx0zi/1npjvZfbBwbtNTzhLtlvYraK/7/uqmX2Wb2aQtd983uuGw79jAjLSuQ==", "dev": true, "requires": { - "css-declaration-sorter": "^6.3.0", - "cssnano-utils": "^3.1.0", - "postcss-calc": "^8.2.3", - "postcss-colormin": "^5.3.0", - "postcss-convert-values": "^5.1.2", - "postcss-discard-comments": "^5.1.2", - "postcss-discard-duplicates": "^5.1.0", - "postcss-discard-empty": "^5.1.1", - "postcss-discard-overridden": "^5.1.0", - "postcss-merge-longhand": "^5.1.6", - "postcss-merge-rules": "^5.1.2", - "postcss-minify-font-values": "^5.1.0", - "postcss-minify-gradients": "^5.1.1", - "postcss-minify-params": "^5.1.3", - "postcss-minify-selectors": "^5.2.1", - "postcss-normalize-charset": "^5.1.0", - "postcss-normalize-display-values": "^5.1.0", - "postcss-normalize-positions": "^5.1.1", - "postcss-normalize-repeat-style": "^5.1.1", - "postcss-normalize-string": "^5.1.0", - "postcss-normalize-timing-functions": "^5.1.0", - "postcss-normalize-unicode": "^5.1.0", - "postcss-normalize-url": "^5.1.0", - "postcss-normalize-whitespace": "^5.1.1", - "postcss-ordered-values": "^5.1.3", - "postcss-reduce-initial": "^5.1.0", - "postcss-reduce-transforms": "^5.1.0", - "postcss-svgo": "^5.1.0", - "postcss-unique-selectors": "^5.1.1" + "css-declaration-sorter": "^6.3.1", + "cssnano-utils": "^4.0.0", + "postcss-calc": "^9.0.0", + "postcss-colormin": "^6.0.0", + "postcss-convert-values": "^6.0.0", + "postcss-discard-comments": "^6.0.0", + "postcss-discard-duplicates": "^6.0.0", + "postcss-discard-empty": "^6.0.0", + "postcss-discard-overridden": "^6.0.0", + "postcss-merge-longhand": "^6.0.0", + "postcss-merge-rules": "^6.0.1", + "postcss-minify-font-values": "^6.0.0", + "postcss-minify-gradients": "^6.0.0", + "postcss-minify-params": "^6.0.0", + "postcss-minify-selectors": "^6.0.0", + "postcss-normalize-charset": "^6.0.0", + "postcss-normalize-display-values": "^6.0.0", + "postcss-normalize-positions": "^6.0.0", + "postcss-normalize-repeat-style": "^6.0.0", + "postcss-normalize-string": "^6.0.0", + "postcss-normalize-timing-functions": "^6.0.0", + "postcss-normalize-unicode": "^6.0.0", + "postcss-normalize-url": "^6.0.0", + "postcss-normalize-whitespace": "^6.0.0", + "postcss-ordered-values": "^6.0.0", + "postcss-reduce-initial": "^6.0.0", + "postcss-reduce-transforms": "^6.0.0", + "postcss-svgo": "^6.0.0", + "postcss-unique-selectors": "^6.0.0" } }, "cssnano-utils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", - "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-4.0.0.tgz", + "integrity": "sha512-Z39TLP+1E0KUcd7LGyF4qMfu8ZufI0rDzhdyAMsa/8UyNUU8wpS0fhdBxbQbv32r64ea00h4878gommRVg2BHw==", "dev": true, "requires": {} }, @@ -21430,6 +21469,7 @@ "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", "dev": true, + "optional": true, "requires": { "css-tree": "^1.1.2" }, @@ -21439,6 +21479,7 @@ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", "dev": true, + "optional": true, "requires": { "mdn-data": "2.0.14", "source-map": "^0.6.1" @@ -21448,37 +21489,25 @@ "version": "2.0.14", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", - "dev": true + "dev": true, + "optional": true }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true + "dev": true, + "optional": true } } }, - "cssom": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", - "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", - "dev": true - }, "cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-3.0.0.tgz", + "integrity": "sha512-N4u2ABATi3Qplzf0hWbVCdjenim8F3ojEXpBDF5hBpjzW182MjNGLqfmQ0SkSPeQ+V86ZXgeH8aXj6kayd4jgg==", "dev": true, "requires": { - "cssom": "~0.3.6" - }, - "dependencies": { - "cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true - } + "rrweb-cssom": "^0.6.0" } }, "currently-unhandled": { @@ -21508,14 +21537,14 @@ } }, "data-urls": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", - "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-4.0.0.tgz", + "integrity": "sha512-/mMTei/JXPqvFqQtfyTowxmJVwr2PVAeCcDxyFf6LhoOu/09TX2OX3kb2wzi4DMXcfj4OItwDOnhl5oziPnT6g==", "dev": true, "requires": { "abab": "^2.0.6", "whatwg-mimetype": "^3.0.0", - "whatwg-url": "^11.0.0" + "whatwg-url": "^12.0.0" } }, "date-format": { @@ -21568,9 +21597,9 @@ "dev": true }, "decimal.js": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", - "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==", + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", + "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==", "dev": true }, "decode-uri-component": { @@ -22053,9 +22082,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.4.433", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.433.tgz", - "integrity": "sha512-MGO1k0w1RgrfdbLVwmXcDhHHuxCn2qRgR7dYsJvWFKDttvYPx6FNzCGG0c/fBBvzK2LDh3UV7Tt9awnHnvAAUQ==", + "version": "1.4.582", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.582.tgz", + "integrity": "sha512-89o0MGoocwYbzqUUjc+VNpeOFSOK9nIdC5wY4N+PVUarUK0MtjyTjks75AZS2bW4Kl8MdewdFsWaH0jLy+JNoA==", "dev": true }, "emits": { @@ -23237,9 +23266,9 @@ } }, "fraction.js": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", - "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", "dev": true }, "fragment-cache": { @@ -25381,15 +25410,15 @@ } }, "jasmine-core": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-4.4.0.tgz", - "integrity": "sha512-+l482uImx5BVd6brJYlaHe2UwfKoZBqQfNp20ZmdNfsjGFTemGfqHLsXjKEW23w9R/m8WYeFc9JmIgjj6dUtAA==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-5.1.1.tgz", + "integrity": "sha512-UrzO3fL7nnxlQXlvTynNAenL+21oUQRlzqQFsA2U11ryb4+NLOCOePZ70PTojEaUKhiFugh7dG0Q+I58xlPdWg==", "dev": true }, "jquery": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.0.tgz", - "integrity": "sha512-umpJ0/k8X0MvD1ds0P9SfowREz2LenHsQaxSohMZ5OMNEU2r0tf8pdeEFTHMFxWVxKNyU9rTtK3CWzUCTKJUeQ==" + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz", + "integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==" }, "jquery-ui-dist": { "version": "1.13.2", @@ -25429,82 +25458,40 @@ } }, "jsdom": { - "version": "20.0.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.0.tgz", - "integrity": "sha512-x4a6CKCgx00uCmP+QakBDFXwjAJ69IkkIWHmtmjd3wvXPcdOS44hfX2vqkOQrVrq8l9DhNNADZRXaCEWvgXtVA==", + "version": "22.1.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-22.1.0.tgz", + "integrity": "sha512-/9AVW7xNbsBv6GfWho4TTNjEo9fe6Zhf9O7s0Fhhr3u+awPwAJMKwAMXnkk5vBxflqLW9hTHX/0cs+P3gW+cQw==", "dev": true, "requires": { "abab": "^2.0.6", - "acorn": "^8.7.1", - "acorn-globals": "^6.0.0", - "cssom": "^0.5.0", - "cssstyle": "^2.3.0", - "data-urls": "^3.0.2", - "decimal.js": "^10.3.1", + "cssstyle": "^3.0.0", + "data-urls": "^4.0.0", + "decimal.js": "^10.4.3", "domexception": "^4.0.0", - "escodegen": "^2.0.0", "form-data": "^4.0.0", "html-encoding-sniffer": "^3.0.0", "http-proxy-agent": "^5.0.0", "https-proxy-agent": "^5.0.1", "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.0", - "parse5": "^7.0.0", + "nwsapi": "^2.2.4", + "parse5": "^7.1.2", + "rrweb-cssom": "^0.6.0", "saxes": "^6.0.0", "symbol-tree": "^3.2.4", - "tough-cookie": "^4.0.0", - "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^3.0.0", + "tough-cookie": "^4.1.2", + "w3c-xmlserializer": "^4.0.0", "webidl-conversions": "^7.0.0", "whatwg-encoding": "^2.0.0", "whatwg-mimetype": "^3.0.0", - "whatwg-url": "^11.0.0", - "ws": "^8.8.0", + "whatwg-url": "^12.0.1", + "ws": "^8.13.0", "xml-name-validator": "^4.0.0" }, "dependencies": { - "acorn": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", - "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", - "dev": true - }, - "escodegen": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", - "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", - "dev": true, - "requires": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "optional": true - }, "ws": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.8.1.tgz", - "integrity": "sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA==", + "version": "8.14.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.2.tgz", + "integrity": "sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==", "dev": true, "requires": {} } @@ -25564,9 +25551,9 @@ "dev": true }, "karma": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/karma/-/karma-6.4.0.tgz", - "integrity": "sha512-s8m7z0IF5g/bS5ONT7wsOavhW4i4aFkzD4u4wgzAQWT4HGUeWI3i21cK2Yz6jndMAeHETp5XuNsRoyGJZXVd4w==", + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/karma/-/karma-6.4.2.tgz", + "integrity": "sha512-C6SU/53LB31BEgRg+omznBEMY4SjHU3ricV6zBcAe1EeILKkeScr+fZXtaI5WyDbkVowJxxAI6h73NcFPmXolQ==", "dev": true, "requires": { "@colors/colors": "1.5.0", @@ -25815,12 +25802,20 @@ "dev": true, "requires": { "jasmine-core": "^4.1.0" + }, + "dependencies": { + "jasmine-core": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-4.6.0.tgz", + "integrity": "sha512-O236+gd0ZXS8YAjFx8xKaJ94/erqUliEkJTDedyE7iHvv4ZVqi+q+8acJxu05/WJDKm512EUNn809In37nWlAQ==", + "dev": true + } } }, "karma-jsdom-launcher": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/karma-jsdom-launcher/-/karma-jsdom-launcher-13.0.0.tgz", - "integrity": "sha512-03+/myz8sSqg55jp3epB6enurY+Lakn/Dhacd0PMX3NrWOiNClK0sDKqaWFnPxNwYVAjSlMi9hNOSs21AMHlbw==", + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/karma-jsdom-launcher/-/karma-jsdom-launcher-15.0.0.tgz", + "integrity": "sha512-F5KkE7qNS93cLk6BZtGI1V+OAHoruGIhZm+zCViT9J4oqJ2tn9hScIk+KXQL6Zmq6exddhpFKNw+hVIQYUocpg==", "dev": true, "requires": {} }, @@ -25835,9 +25830,9 @@ } }, "karma-spec-reporter": { - "version": "0.0.34", - "resolved": "https://registry.npmjs.org/karma-spec-reporter/-/karma-spec-reporter-0.0.34.tgz", - "integrity": "sha512-l5H/Nh9q4g2Ysx2CDU2m+NIPyLQpCVbk9c4V02BTZHw3NM6RO1dq3eRpKXCSSdPt4RGfhHk8jDt3XYkGp+5PWg==", + "version": "0.0.36", + "resolved": "https://registry.npmjs.org/karma-spec-reporter/-/karma-spec-reporter-0.0.36.tgz", + "integrity": "sha512-11bvOl1x6ryKZph7kmbmMpbi8vsngEGxGOoeTlIcDaH3ab3j8aPJnZ+r+K/SS0sBSGy5VGkGYO2+hLct7hw/6w==", "dev": true, "requires": { "colors": "1.4.0" @@ -25911,9 +25906,9 @@ } }, "less": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/less/-/less-4.1.3.tgz", - "integrity": "sha512-w16Xk/Ta9Hhyei0Gpz9m7VS8F28nieJaL/VyShID7cYvP6IL5oHeL6p4TXSDJqZE/lNv0oJ2pGVjJsRkfwm5FA==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/less/-/less-4.2.0.tgz", + "integrity": "sha512-P3b3HJDBtSzsXUl0im2L7gTO5Ubg8mEN6G8qoTS77iXxXX4Hvu4Qj540PZDvQ8V6DmX6iXo98k7Md0Cm1PrLaA==", "dev": true, "requires": { "copy-anything": "^2.0.1", @@ -25999,35 +25994,35 @@ } }, "lilconfig": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz", - "integrity": "sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", "dev": true }, "lit": { - "version": "2.7.5", - "resolved": "https://registry.npmjs.org/lit/-/lit-2.7.5.tgz", - "integrity": "sha512-i/cH7Ye6nBDUASMnfwcictBnsTN91+aBjXoTHF2xARghXScKxpD4F4WYI+VLXg9lqbMinDfvoI7VnZXjyHgdfQ==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/lit/-/lit-2.8.0.tgz", + "integrity": "sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA==", "requires": { "@lit/reactive-element": "^1.6.0", "lit-element": "^3.3.0", - "lit-html": "^2.7.0" + "lit-html": "^2.8.0" } }, "lit-element": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-3.3.2.tgz", - "integrity": "sha512-xXAeVWKGr4/njq0rGC9dethMnYCq5hpKYrgQZYTzawt9YQhMiXfD+T1RgrdY3NamOxwq2aXlb0vOI6e29CKgVQ==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-3.3.3.tgz", + "integrity": "sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA==", "requires": { "@lit-labs/ssr-dom-shim": "^1.1.0", "@lit/reactive-element": "^1.3.0", - "lit-html": "^2.7.0" + "lit-html": "^2.8.0" } }, "lit-html": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-2.7.4.tgz", - "integrity": "sha512-/Jw+FBpeEN+z8X6PJva5n7+0MzCVAH2yypN99qHYYkq8bI+j7I39GH+68Z/MZD6rGKDK9RpzBw7CocfmHfq6+g==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-2.8.0.tgz", + "integrity": "sha512-o9t+MQM3P4y7M7yNzqAyjp7z+mQGa4NS4CxiyLqFPyFWyc4O+nodLrkrxSaCTrla6M5YOLaT3RpbbqjszB5g3Q==", "requires": { "@types/trusted-types": "^2.0.2" } @@ -26678,9 +26673,9 @@ "optional": true }, "nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", "dev": true }, "nanomatch": { @@ -26886,9 +26881,9 @@ } }, "node-releases": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz", - "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==", + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", + "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", "dev": true }, "node.extend": { @@ -26925,16 +26920,10 @@ "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", "dev": true }, - "normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "dev": true - }, "nouislider": { - "version": "15.6.1", - "resolved": "https://registry.npmjs.org/nouislider/-/nouislider-15.6.1.tgz", - "integrity": "sha512-1T5AfeEMGrGM87UJ+qAHvauPfCe/woOjYV/o29fp21+XgGuGpkM1Udo7mPHnidu4+cxlj35rDBWKiA6Mefemrg==" + "version": "15.7.1", + "resolved": "https://registry.npmjs.org/nouislider/-/nouislider-15.7.1.tgz", + "integrity": "sha512-5N7C1ru/i8y3dg9+Z6ilj6+m1EfabvOoaRa7ztpxBSKKRZso4vA52DGSbBJjw5XLtFr/LZ9SgGAXqyVtlVHO5w==" }, "now-and-later": { "version": "2.0.1", @@ -26992,9 +26981,9 @@ "dev": true }, "nwsapi": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", - "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", + "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==", "dev": true }, "object-assign": { @@ -27412,18 +27401,18 @@ "dev": true }, "parse5": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.1.tgz", - "integrity": "sha512-kwpuwzB+px5WUg9pyK0IcK/shltJN5/OVhQagxhCQNtT9Y9QRZqNY2e1cmbu/paRh5LMnz/oVTVLBpjFmMZhSg==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", "dev": true, "requires": { "entities": "^4.4.0" }, "dependencies": { "entities": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz", - "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", "dev": true } } @@ -27593,73 +27582,73 @@ "dev": true }, "postcss": { - "version": "8.4.16", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.16.tgz", - "integrity": "sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ==", + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", "dev": true, "requires": { - "nanoid": "^3.3.4", + "nanoid": "^3.3.6", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" } }, "postcss-calc": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", - "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-9.0.1.tgz", + "integrity": "sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ==", "dev": true, "requires": { - "postcss-selector-parser": "^6.0.9", + "postcss-selector-parser": "^6.0.11", "postcss-value-parser": "^4.2.0" } }, "postcss-colormin": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.0.tgz", - "integrity": "sha512-WdDO4gOFG2Z8n4P8TWBpshnL3JpmNmJwdnfP2gbk2qBA8PWwOYcmjmI/t3CmMeL72a7Hkd+x/Mg9O2/0rD54Pg==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-6.0.0.tgz", + "integrity": "sha512-EuO+bAUmutWoZYgHn2T1dG1pPqHU6L4TjzPlu4t1wZGXQ/fxV16xg2EJmYi0z+6r+MGV1yvpx1BHkUaRrPa2bw==", "dev": true, "requires": { - "browserslist": "^4.16.6", + "browserslist": "^4.21.4", "caniuse-api": "^3.0.0", "colord": "^2.9.1", "postcss-value-parser": "^4.2.0" } }, "postcss-convert-values": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.2.tgz", - "integrity": "sha512-c6Hzc4GAv95B7suy4udszX9Zy4ETyMCgFPUDtWjdFTKH1SE9eFY/jEpHSwTH1QPuwxHpWslhckUQWbNRM4ho5g==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-6.0.0.tgz", + "integrity": "sha512-U5D8QhVwqT++ecmy8rnTb+RL9n/B806UVaS3m60lqle4YDFcpbS3ae5bTQIh3wOGUSDHSEtMYLs/38dNG7EYFw==", "dev": true, "requires": { - "browserslist": "^4.20.3", + "browserslist": "^4.21.4", "postcss-value-parser": "^4.2.0" } }, "postcss-discard-comments": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", - "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-6.0.0.tgz", + "integrity": "sha512-p2skSGqzPMZkEQvJsgnkBhCn8gI7NzRH2683EEjrIkoMiwRELx68yoUJ3q3DGSGuQ8Ug9Gsn+OuDr46yfO+eFw==", "dev": true, "requires": {} }, "postcss-discard-duplicates": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", - "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-6.0.0.tgz", + "integrity": "sha512-bU1SXIizMLtDW4oSsi5C/xHKbhLlhek/0/yCnoMQany9k3nPBq+Ctsv/9oMmyqbR96HYHxZcHyK2HR5P/mqoGA==", "dev": true, "requires": {} }, "postcss-discard-empty": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", - "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-6.0.0.tgz", + "integrity": "sha512-b+h1S1VT6dNhpcg+LpyiUrdnEZfICF0my7HAKgJixJLW7BnNmpRH34+uw/etf5AhOlIhIAuXApSzzDzMI9K/gQ==", "dev": true, "requires": {} }, "postcss-discard-overridden": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", - "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-6.0.0.tgz", + "integrity": "sha512-4VELwssYXDFigPYAZ8vL4yX4mUepF/oCBeeIT4OXsJPYOtvJumyz9WflmJWTfDwCUcpDR+z0zvCWBXgTx35SVw==", "dev": true, "requires": {} }, @@ -27674,181 +27663,180 @@ } }, "postcss-merge-longhand": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.6.tgz", - "integrity": "sha512-6C/UGF/3T5OE2CEbOuX7iNO63dnvqhGZeUnKkDeifebY0XqkkvrctYSZurpNE902LDf2yKwwPFgotnfSoPhQiw==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-6.0.0.tgz", + "integrity": "sha512-4VSfd1lvGkLTLYcxFuISDtWUfFS4zXe0FpF149AyziftPFQIWxjvFSKhA4MIxMe4XM3yTDgQMbSNgzIVxChbIg==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0", - "stylehacks": "^5.1.0" + "stylehacks": "^6.0.0" } }, "postcss-merge-rules": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.2.tgz", - "integrity": "sha512-zKMUlnw+zYCWoPN6yhPjtcEdlJaMUZ0WyVcxTAmw3lkkN/NDMRkOkiuctQEoWAOvH7twaxUUdvBWl0d4+hifRQ==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-6.0.1.tgz", + "integrity": "sha512-a4tlmJIQo9SCjcfiCcCMg/ZCEe0XTkl/xK0XHBs955GWg9xDX3NwP9pwZ78QUOWB8/0XCjZeJn98Dae0zg6AAw==", "dev": true, "requires": { - "browserslist": "^4.16.6", + "browserslist": "^4.21.4", "caniuse-api": "^3.0.0", - "cssnano-utils": "^3.1.0", + "cssnano-utils": "^4.0.0", "postcss-selector-parser": "^6.0.5" } }, "postcss-minify-font-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", - "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-6.0.0.tgz", + "integrity": "sha512-zNRAVtyh5E8ndZEYXA4WS8ZYsAp798HiIQ1V2UF/C/munLp2r1UGHwf1+6JFu7hdEhJFN+W1WJQKBrtjhFgEnA==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0" } }, "postcss-minify-gradients": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", - "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-6.0.0.tgz", + "integrity": "sha512-wO0F6YfVAR+K1xVxF53ueZJza3L+R3E6cp0VwuXJQejnNUH0DjcAFe3JEBeTY1dLwGa0NlDWueCA1VlEfiKgAA==", "dev": true, "requires": { "colord": "^2.9.1", - "cssnano-utils": "^3.1.0", + "cssnano-utils": "^4.0.0", "postcss-value-parser": "^4.2.0" } }, "postcss-minify-params": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.3.tgz", - "integrity": "sha512-bkzpWcjykkqIujNL+EVEPOlLYi/eZ050oImVtHU7b4lFS82jPnsCb44gvC6pxaNt38Els3jWYDHTjHKf0koTgg==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-6.0.0.tgz", + "integrity": "sha512-Fz/wMQDveiS0n5JPcvsMeyNXOIMrwF88n7196puSuQSWSa+/Ofc1gDOSY2xi8+A4PqB5dlYCKk/WfqKqsI+ReQ==", "dev": true, "requires": { - "browserslist": "^4.16.6", - "cssnano-utils": "^3.1.0", + "browserslist": "^4.21.4", + "cssnano-utils": "^4.0.0", "postcss-value-parser": "^4.2.0" } }, "postcss-minify-selectors": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", - "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-6.0.0.tgz", + "integrity": "sha512-ec/q9JNCOC2CRDNnypipGfOhbYPuUkewGwLnbv6omue/PSASbHSU7s6uSQ0tcFRVv731oMIx8k0SP4ZX6be/0g==", "dev": true, "requires": { "postcss-selector-parser": "^6.0.5" } }, "postcss-normalize-charset": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", - "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-6.0.0.tgz", + "integrity": "sha512-cqundwChbu8yO/gSWkuFDmKrCZ2vJzDAocheT2JTd0sFNA4HMGoKMfbk2B+J0OmO0t5GUkiAkSM5yF2rSLUjgQ==", "dev": true, "requires": {} }, "postcss-normalize-display-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", - "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-6.0.0.tgz", + "integrity": "sha512-Qyt5kMrvy7dJRO3OjF7zkotGfuYALETZE+4lk66sziWSPzlBEt7FrUshV6VLECkI4EN8Z863O6Nci4NXQGNzYw==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0" } }, "postcss-normalize-positions": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", - "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-6.0.0.tgz", + "integrity": "sha512-mPCzhSV8+30FZyWhxi6UoVRYd3ZBJgTRly4hOkaSifo0H+pjDYcii/aVT4YE6QpOil15a5uiv6ftnY3rm0igPg==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0" } }, "postcss-normalize-repeat-style": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", - "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-6.0.0.tgz", + "integrity": "sha512-50W5JWEBiOOAez2AKBh4kRFm2uhrT3O1Uwdxz7k24aKtbD83vqmcVG7zoIwo6xI2FZ/HDlbrCopXhLeTpQib1A==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0" } }, "postcss-normalize-string": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", - "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-6.0.0.tgz", + "integrity": "sha512-KWkIB7TrPOiqb8ZZz6homet2KWKJwIlysF5ICPZrXAylGe2hzX/HSf4NTX2rRPJMAtlRsj/yfkrWGavFuB+c0w==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0" } }, "postcss-normalize-timing-functions": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", - "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-6.0.0.tgz", + "integrity": "sha512-tpIXWciXBp5CiFs8sem90IWlw76FV4oi6QEWfQwyeREVwUy39VSeSqjAT7X0Qw650yAimYW5gkl2Gd871N5SQg==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0" } }, "postcss-normalize-unicode": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.0.tgz", - "integrity": "sha512-J6M3MizAAZ2dOdSjy2caayJLQT8E8K9XjLce8AUQMwOrCvjCHv24aLC/Lps1R1ylOfol5VIDMaM/Lo9NGlk1SQ==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-6.0.0.tgz", + "integrity": "sha512-ui5crYkb5ubEUDugDc786L/Me+DXp2dLg3fVJbqyAl0VPkAeALyAijF2zOsnZyaS1HyfPuMH0DwyY18VMFVNkg==", "dev": true, "requires": { - "browserslist": "^4.16.6", + "browserslist": "^4.21.4", "postcss-value-parser": "^4.2.0" } }, "postcss-normalize-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", - "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-6.0.0.tgz", + "integrity": "sha512-98mvh2QzIPbb02YDIrYvAg4OUzGH7s1ZgHlD3fIdTHLgPLRpv1ZTKJDnSAKr4Rt21ZQFzwhGMXxpXlfrUBKFHw==", "dev": true, "requires": { - "normalize-url": "^6.0.1", "postcss-value-parser": "^4.2.0" } }, "postcss-normalize-whitespace": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", - "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-6.0.0.tgz", + "integrity": "sha512-7cfE1AyLiK0+ZBG6FmLziJzqQCpTQY+8XjMhMAz8WSBSCsCNNUKujgIgjCAmDT3cJ+3zjTXFkoD15ZPsckArVw==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0" } }, "postcss-ordered-values": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", - "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-6.0.0.tgz", + "integrity": "sha512-K36XzUDpvfG/nWkjs6d1hRBydeIxGpKS2+n+ywlKPzx1nMYDYpoGbcjhj5AwVYJK1qV2/SDoDEnHzlPD6s3nMg==", "dev": true, "requires": { - "cssnano-utils": "^3.1.0", + "cssnano-utils": "^4.0.0", "postcss-value-parser": "^4.2.0" } }, "postcss-reduce-initial": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.0.tgz", - "integrity": "sha512-5OgTUviz0aeH6MtBjHfbr57tml13PuedK/Ecg8szzd4XRMbYxH4572JFG067z+FqBIf6Zp/d+0581glkvvWMFw==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-6.0.0.tgz", + "integrity": "sha512-s2UOnidpVuXu6JiiI5U+fV2jamAw5YNA9Fdi/GRK0zLDLCfXmSGqQtzpUPtfN66RtCbb9fFHoyZdQaxOB3WxVA==", "dev": true, "requires": { - "browserslist": "^4.16.6", + "browserslist": "^4.21.4", "caniuse-api": "^3.0.0" } }, "postcss-reduce-transforms": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", - "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-6.0.0.tgz", + "integrity": "sha512-FQ9f6xM1homnuy1wLe9lP1wujzxnwt1EwiigtWwuyf8FsqqXUDUp2Ulxf9A5yjlUOTdCJO6lonYjg1mgqIIi2w==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0" } }, "postcss-selector-parser": { - "version": "6.0.10", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", - "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", + "version": "6.0.13", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", + "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", "dev": true, "requires": { "cssesc": "^3.0.0", @@ -27856,13 +27844,13 @@ } }, "postcss-svgo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", - "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-6.0.0.tgz", + "integrity": "sha512-r9zvj/wGAoAIodn84dR/kFqwhINp5YsJkLoujybWG59grR/IHx+uQ2Zo+IcOwM0jskfYX3R0mo+1Kip1VSNcvw==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0", - "svgo": "^2.7.0" + "svgo": "^3.0.2" }, "dependencies": { "commander": { @@ -27872,26 +27860,26 @@ "dev": true }, "css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", "dev": true, "requires": { "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", "nth-check": "^2.0.1" } }, "css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", + "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", "dev": true, "requires": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" + "mdn-data": "2.0.30", + "source-map-js": "^1.0.1" } }, "css-what": { @@ -27900,15 +27888,42 @@ "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", "dev": true }, - "dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "csso": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", + "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", "dev": true, "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" + "css-tree": "~2.2.0" + }, + "dependencies": { + "css-tree": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", + "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", + "dev": true, + "requires": { + "mdn-data": "2.0.28", + "source-map-js": "^1.0.1" + } + }, + "mdn-data": { + "version": "2.0.28", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", + "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", + "dev": true + } + } + }, + "dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "requires": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" } }, "domelementtype": { @@ -27918,35 +27933,35 @@ "dev": true }, "domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", "dev": true, "requires": { - "domelementtype": "^2.2.0" + "domelementtype": "^2.3.0" } }, "domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", "dev": true, "requires": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" } }, "entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", "dev": true }, "mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "version": "2.0.30", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", + "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", "dev": true }, "nth-check": { @@ -27958,33 +27973,26 @@ "boolbase": "^1.0.0" } }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, "svgo": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", - "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.0.3.tgz", + "integrity": "sha512-X4UZvLhOglD5Xrp834HzGHf8RKUW0Ahigg/08yRO1no9t2NxffOkMiQ0WmaMIbaGlVTlSst2zWANsdhz5ybXgA==", "dev": true, "requires": { "@trysound/sax": "0.2.0", "commander": "^7.2.0", - "css-select": "^4.1.3", - "css-tree": "^1.1.3", - "csso": "^4.2.0", - "picocolors": "^1.0.0", - "stable": "^0.1.8" + "css-select": "^5.1.0", + "css-tree": "^2.2.1", + "csso": "5.0.5", + "picocolors": "^1.0.0" } } } }, "postcss-unique-selectors": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", - "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-6.0.0.tgz", + "integrity": "sha512-EPQzpZNxOxP7777t73RQpZE5e9TrnCrkvp7AH7a0l89JmZiPnS82y216JowHXwpBCQitfyxrof9TK3rYbi7/Yw==", "dev": true, "requires": { "postcss-selector-parser": "^6.0.5" @@ -28100,9 +28108,9 @@ } }, "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==" }, "q": { "version": "1.5.1", @@ -28135,6 +28143,11 @@ "strict-uri-encode": "^1.0.0" } }, + "querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" + }, "queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -28473,8 +28486,7 @@ "requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", - "dev": true + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" }, "resolve": { "version": "1.20.0", @@ -28558,6 +28570,12 @@ "glob": "^7.1.3" } }, + "rrweb-cssom": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz", + "integrity": "sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==", + "dev": true + }, "run-async": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", @@ -29152,9 +29170,9 @@ "dev": true }, "spectrum-colorpicker2": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/spectrum-colorpicker2/-/spectrum-colorpicker2-2.0.9.tgz", - "integrity": "sha512-tyNppC56VQHdoKtWdkEkqQfLg9D1hhBea/laO3ffJGrBs3uwFmCxpcBK3a2IOpxZnioykiT+bGlT3SsI7UySRw==" + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/spectrum-colorpicker2/-/spectrum-colorpicker2-2.0.10.tgz", + "integrity": "sha512-WXyR8qT2tZ71u1W2cdwOPd28jGpuxjwJBeLVTN8xVEWsgQDotlK6DuUwocOyL9qAxTh9570qxTfZYbY7m2wuvQ==" }, "split-string": { "version": "3.1.0", @@ -29257,7 +29275,8 @@ "version": "0.1.8", "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", - "dev": true + "dev": true, + "optional": true }, "stack-trace": { "version": "0.0.10", @@ -29532,12 +29551,12 @@ "optional": true }, "stylehacks": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.0.tgz", - "integrity": "sha512-SzLmvHQTrIWfSgljkQCw2++C9+Ne91d/6Sp92I8c5uHTcy/PgeHamwITIbBW9wnFTY/3ZfSXR9HIL6Ikqmcu6Q==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-6.0.0.tgz", + "integrity": "sha512-+UT589qhHPwz6mTlCLSt/vMNTJx8dopeJlZAlBMJPWA3ORqu6wmQY7FBXf+qD+FsqoBJODyqNxOUP3jdntFRdw==", "dev": true, "requires": { - "browserslist": "^4.16.6", + "browserslist": "^4.21.4", "postcss-selector-parser": "^6.0.4" } }, @@ -29878,29 +29897,30 @@ "dev": true }, "tough-cookie": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", - "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", + "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", "requires": { "psl": "^1.1.33", "punycode": "^2.1.1", - "universalify": "^0.1.2" + "universalify": "^0.2.0", + "url-parse": "^1.5.3" }, "dependencies": { "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==" } } }, "tr46": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", - "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-4.1.1.tgz", + "integrity": "sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==", "dev": true, "requires": { - "punycode": "^2.1.1" + "punycode": "^2.3.0" } }, "trim-newlines": { @@ -30176,9 +30196,9 @@ "dev": true }, "update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", "dev": true, "requires": { "escalade": "^3.1.1", @@ -30200,6 +30220,15 @@ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", "dev": true }, + "url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "requires": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, "url-parse-lax": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", @@ -30431,19 +30460,10 @@ "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", "dev": true }, - "w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "dev": true, - "requires": { - "browser-process-hrtime": "^1.0.0" - } - }, "w3c-xmlserializer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-3.0.0.tgz", - "integrity": "sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", + "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==", "dev": true, "requires": { "xml-name-validator": "^4.0.0" @@ -30482,12 +30502,12 @@ "dev": true }, "whatwg-url": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", - "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-12.0.1.tgz", + "integrity": "sha512-Ed/LrqB8EPlGxjS+TrsXcpUond1mhccS3pchLhzSgPCnTimUCKj3IZE75pAs5m6heB2U2TMerKFUXheyHY+VDQ==", "dev": true, "requires": { - "tr46": "^3.0.0", + "tr46": "^4.1.1", "webidl-conversions": "^7.0.0" } }, diff --git a/src/Umbraco.Web.UI.Client/package.json b/src/Umbraco.Web.UI.Client/package.json index 5fce25ef74..ffc4ba92dc 100644 --- a/src/Umbraco.Web.UI.Client/package.json +++ b/src/Umbraco.Web.UI.Client/package.json @@ -10,17 +10,18 @@ "build:dev": "gulp buildDev", "dev": "gulp dev", "fastdev": "gulp fastdev", - "watch": "gulp watch" + "watch": "gulp watch", + "lint": "eslint src" }, "engines": { - "node": ">=14.0.0 <17", - "npm": ">=8.0.0 < 9" + "node": ">=20.9", + "npm": ">=10.1" }, "dependencies": { "@microsoft/signalr": "6.0.9", - "@umbraco-ui/uui": "1.3.0", - "@umbraco-ui/uui-css": "1.3.0", - "ace-builds": "1.22.1", + "@umbraco-ui/uui": "1.5.0", + "@umbraco-ui/uui-css": "1.5.0", + "ace-builds": "1.31.1", "angular": "1.8.3", "angular-animate": "1.8.3", "angular-aria": "1.8.3", @@ -42,14 +43,14 @@ "diff": "5.1.0", "flatpickr": "4.6.13", "font-awesome": "4.7.0", - "jquery": "3.7.0", + "jquery": "3.7.1", "jquery-ui-dist": "1.13.2", "jquery-ui-touch-punch": "0.2.3", "lazyload-js": "1.0.0", "moment": "2.29.4", "ng-file-upload": "12.2.13", - "nouislider": "15.6.1", - "spectrum-colorpicker2": "2.0.9", + "nouislider": "15.7.1", + "spectrum-colorpicker2": "2.0.10", "tinymce": "4.9.11", "typeahead.js": "0.11.1", "underscore": "1.13.6", @@ -58,8 +59,8 @@ "devDependencies": { "@babel/core": "7.19.1", "@babel/preset-env": "7.19.1", - "autoprefixer": "10.4.14", - "cssnano": "5.1.13", + "autoprefixer": "10.4.16", + "cssnano": "6.0.1", "gulp": "4.0.2", "gulp-angular-embed-templates": "2.3.0", "gulp-babel": "8.0.0", @@ -78,17 +79,17 @@ "gulp-watch": "5.0.1", "gulp-wrap": "0.15.0", "gulp-wrap-js": "0.4.1", - "jasmine-core": "4.4.0", - "jsdom": "20.0.0", - "karma": "6.4.0", + "jasmine-core": "5.1.1", + "jsdom": "22.1.0", + "karma": "6.4.2", "karma-jasmine": "5.1.0", - "karma-jsdom-launcher": "13.0.0", + "karma-jsdom-launcher": "15.0.0", "karma-junit-reporter": "2.0.1", - "karma-spec-reporter": "0.0.34", - "less": "4.1.3", + "karma-spec-reporter": "0.0.36", + "less": "4.2.0", "lodash": "4.17.21", "merge-stream": "2.0.0", - "postcss": "8.4.16", + "postcss": "8.4.31", "run-sequence": "2.2.1" } } diff --git a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/grid/config/grid.default.config.js b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/grid/config/grid.default.config.js index a2b1ca4097..0b751a532c 100644 --- a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/grid/config/grid.default.config.js +++ b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/grid/config/grid.default.config.js @@ -170,7 +170,7 @@ var uSkyGridConfig = [ }, { grid: 3, percentage: 25 - }, ] + } ] }, { models: [{ grid: 2, @@ -279,7 +279,7 @@ var uSkyGridConfig = [ }, { grid: 3, percentage: 25 - }, ] + } ] }, { models: [{ grid: 2, From 04e59e9a9d599ede46b124d6f900d98766d22300 Mon Sep 17 00:00:00 2001 From: Bjarke Berg Date: Tue, 10 Oct 2023 11:51:47 +0200 Subject: [PATCH 03/38] Fixed a couple of occurrences where scopes was auto-completed while modified db state (#14947) * Fixed a couple of occurrences where scopes was auto-complated while actually modified the state of the database. * Added temp ctor to fix boot issue (cherry picked from commit 41f8f03c2c4eb4d45a512c21af457923db900866) --- src/Umbraco.Core/Services/ContentService.cs | 14 +++-- ...peServiceBaseOfTRepositoryTItemTService.cs | 1 - .../Services/ContentVersionService.cs | 15 +++-- src/Umbraco.Core/Services/DataTypeService.cs | 2 +- .../DefaultContentVersionCleanupPolicy.cs | 4 +- src/Umbraco.Core/Services/MediaService.cs | 3 +- .../Services/TwoFactorLoginService.cs | 15 +++-- .../HostedServices/ScheduledPublishing.cs | 4 +- .../Logging/Viewer/LogViewerConfig.cs | 30 ++++++++-- .../Security/MemberUserStore.cs | 6 +- .../Controllers/UmbProfileController.cs | 3 +- .../Controllers/UmbRegisterController.cs | 4 +- tests/Umbraco.Tests.Common/TestHelperBase.cs | 60 +++++++++++++++++++ .../TestHelpers/TestHelper.cs | 4 ++ .../Logging/LogviewerTests.cs | 2 +- .../Security/MemberManagerTests.cs | 3 +- .../Security/MemberUserStoreTests.cs | 18 ++---- 17 files changed, 146 insertions(+), 42 deletions(-) diff --git a/src/Umbraco.Core/Services/ContentService.cs b/src/Umbraco.Core/Services/ContentService.cs index f324384a3d..8694eb9bf8 100644 --- a/src/Umbraco.Core/Services/ContentService.cs +++ b/src/Umbraco.Core/Services/ContentService.cs @@ -372,7 +372,7 @@ public class ContentService : RepositoryService, IContentService public IContent CreateAndSave(string name, int parentId, string contentTypeAlias, int userId = Constants.Security.SuperUserId) { // TODO: what about culture? - using (ICoreScope scope = ScopeProvider.CreateCoreScope(autoComplete: true)) + using (ICoreScope scope = ScopeProvider.CreateCoreScope()) { // locking the content tree secures content types too scope.WriteLock(Constants.Locks.ContentTree); @@ -395,6 +395,8 @@ public class ContentService : RepositoryService, IContentService Save(content, userId); + scope.Complete(); + return content; } } @@ -416,7 +418,7 @@ public class ContentService : RepositoryService, IContentService throw new ArgumentNullException(nameof(parent)); } - using (ICoreScope scope = ScopeProvider.CreateCoreScope(autoComplete: true)) + using (ICoreScope scope = ScopeProvider.CreateCoreScope()) { // locking the content tree secures content types too scope.WriteLock(Constants.Locks.ContentTree); @@ -431,6 +433,7 @@ public class ContentService : RepositoryService, IContentService Save(content, userId); + scope.Complete(); return content; } } @@ -508,10 +511,11 @@ public class ContentService : RepositoryService, IContentService /// public void PersistContentSchedule(IContent content, ContentScheduleCollection contentSchedule) { - using (ICoreScope scope = ScopeProvider.CreateCoreScope(autoComplete: true)) + using (ICoreScope scope = ScopeProvider.CreateCoreScope()) { scope.WriteLock(Constants.Locks.ContentTree); _documentRepository.PersistContentSchedule(content, contentSchedule); + scope.Complete(); } } @@ -2960,7 +2964,7 @@ public class ContentService : RepositoryService, IContentService public ContentDataIntegrityReport CheckDataIntegrity(ContentDataIntegrityReportOptions options) { - using (ICoreScope scope = ScopeProvider.CreateCoreScope(autoComplete: true)) + using (ICoreScope scope = ScopeProvider.CreateCoreScope()) { scope.WriteLock(Constants.Locks.ContentTree); @@ -2973,6 +2977,8 @@ public class ContentService : RepositoryService, IContentService scope.Notifications.Publish(new ContentTreeChangeNotification(root, TreeChangeTypes.RefreshAll, EventMessagesFactory.Get())); } + scope.Complete(); + return report; } } diff --git a/src/Umbraco.Core/Services/ContentTypeServiceBaseOfTRepositoryTItemTService.cs b/src/Umbraco.Core/Services/ContentTypeServiceBaseOfTRepositoryTItemTService.cs index 7cf63445a9..512fad0674 100644 --- a/src/Umbraco.Core/Services/ContentTypeServiceBaseOfTRepositoryTItemTService.cs +++ b/src/Umbraco.Core/Services/ContentTypeServiceBaseOfTRepositoryTItemTService.cs @@ -322,7 +322,6 @@ public abstract class ContentTypeServiceBase : ContentTypeSe } using (ICoreScope scope = ScopeProvider.CreateCoreScope(autoComplete: true)) - { scope.ReadLock(ReadLockIds); return Repository.GetMany(ids.ToArray()); diff --git a/src/Umbraco.Core/Services/ContentVersionService.cs b/src/Umbraco.Core/Services/ContentVersionService.cs index 24443a3957..d4dea0af91 100644 --- a/src/Umbraco.Core/Services/ContentVersionService.cs +++ b/src/Umbraco.Core/Services/ContentVersionService.cs @@ -68,7 +68,7 @@ internal class ContentVersionService : IContentVersionService /// public void SetPreventCleanup(int versionId, bool preventCleanup, int userId = -1) { - using (ICoreScope scope = _scopeProvider.CreateCoreScope(autoComplete: true)) + using (ICoreScope scope = _scopeProvider.CreateCoreScope()) { scope.WriteLock(Constants.Locks.ContentTree); _documentVersionRepository.SetPreventCleanup(versionId, preventCleanup); @@ -87,6 +87,7 @@ internal class ContentVersionService : IContentVersionService var message = $"set preventCleanup = '{preventCleanup}' for version '{versionId}'"; Audit(auditType, userId, version.ContentId, message, $"{version.VersionDate}"); + scope.Complete(); } } @@ -120,7 +121,7 @@ internal class ContentVersionService : IContentVersionService * * tl;dr lots of scopes to enable other connections to use the DB whilst we work. */ - using (ICoreScope scope = _scopeProvider.CreateCoreScope(autoComplete: true)) + using (ICoreScope scope = _scopeProvider.CreateCoreScope()) { IReadOnlyCollection? allHistoricVersions = _documentVersionRepository.GetDocumentVersionsEligibleForCleanup(); @@ -149,6 +150,8 @@ internal class ContentVersionService : IContentVersionService versionsToDelete.Add(version); } + + scope.Complete(); } if (!versionsToDelete.Any()) @@ -161,7 +164,7 @@ internal class ContentVersionService : IContentVersionService foreach (IEnumerable group in versionsToDelete.InGroupsOf(Constants.Sql.MaxParameterCount)) { - using (ICoreScope scope = _scopeProvider.CreateCoreScope(autoComplete: true)) + using (ICoreScope scope = _scopeProvider.CreateCoreScope()) { scope.WriteLock(Constants.Locks.ContentTree); var groupEnumerated = group.ToList(); @@ -174,12 +177,16 @@ internal class ContentVersionService : IContentVersionService scope.Notifications.Publish( new ContentDeletedVersionsNotification(version.ContentId, messages, version.VersionId)); } + + scope.Complete(); } } - using (_scopeProvider.CreateCoreScope(autoComplete: true)) + using (ICoreScope scope = _scopeProvider.CreateCoreScope()) { Audit(AuditType.Delete, Constants.Security.SuperUserId, -1, $"Removed {versionsToDelete.Count} ContentVersion(s) according to cleanup policy"); + + scope.Complete(); } return versionsToDelete; diff --git a/src/Umbraco.Core/Services/DataTypeService.cs b/src/Umbraco.Core/Services/DataTypeService.cs index 92ab381c79..885cfc21af 100644 --- a/src/Umbraco.Core/Services/DataTypeService.cs +++ b/src/Umbraco.Core/Services/DataTypeService.cs @@ -608,7 +608,7 @@ namespace Umbraco.Cms.Core.Services.Implement public IReadOnlyDictionary> GetReferences(int id) { - using ICoreScope scope = ScopeProvider.CreateCoreScope(autoComplete:true); + using ICoreScope scope = ScopeProvider.CreateCoreScope(autoComplete: true); return _dataTypeRepository.FindUsages(id); } diff --git a/src/Umbraco.Core/Services/DefaultContentVersionCleanupPolicy.cs b/src/Umbraco.Core/Services/DefaultContentVersionCleanupPolicy.cs index f51858fa5b..234dae683f 100644 --- a/src/Umbraco.Core/Services/DefaultContentVersionCleanupPolicy.cs +++ b/src/Umbraco.Core/Services/DefaultContentVersionCleanupPolicy.cs @@ -33,7 +33,7 @@ public class DefaultContentVersionCleanupPolicy : IContentVersionCleanupPolicy var theRest = new List(); - using (_scopeProvider.CreateCoreScope(autoComplete: true)) + using (ICoreScope scope = _scopeProvider.CreateCoreScope()) { var policyOverrides = _documentVersionRepository.GetCleanupPolicies()? .ToDictionary(x => x.ContentTypeId); @@ -77,6 +77,8 @@ public class DefaultContentVersionCleanupPolicy : IContentVersionCleanupPolicy yield return version; } } + + scope.Complete(); } } diff --git a/src/Umbraco.Core/Services/MediaService.cs b/src/Umbraco.Core/Services/MediaService.cs index fadc682d16..8738c6c67e 100644 --- a/src/Umbraco.Core/Services/MediaService.cs +++ b/src/Umbraco.Core/Services/MediaService.cs @@ -1197,7 +1197,7 @@ namespace Umbraco.Cms.Core.Services public ContentDataIntegrityReport CheckDataIntegrity(ContentDataIntegrityReportOptions options) { - using (ICoreScope scope = ScopeProvider.CreateCoreScope(autoComplete: true)) + using (ICoreScope scope = ScopeProvider.CreateCoreScope()) { scope.WriteLock(Constants.Locks.MediaTree); @@ -1210,6 +1210,7 @@ namespace Umbraco.Cms.Core.Services scope.Notifications.Publish(new MediaTreeChangeNotification(root, TreeChangeTypes.RefreshAll, EventMessagesFactory.Get())); } + scope.Complete(); return report; } } diff --git a/src/Umbraco.Core/Services/TwoFactorLoginService.cs b/src/Umbraco.Core/Services/TwoFactorLoginService.cs index de79284ac9..19ecf5a2df 100644 --- a/src/Umbraco.Core/Services/TwoFactorLoginService.cs +++ b/src/Umbraco.Core/Services/TwoFactorLoginService.cs @@ -59,8 +59,10 @@ public class TwoFactorLoginService : ITwoFactorLoginService2 /// public async Task DeleteUserLoginsAsync(Guid userOrMemberKey) { - using ICoreScope scope = _scopeProvider.CreateCoreScope(autoComplete: true); + using ICoreScope scope = _scopeProvider.CreateCoreScope(); await _twoFactorLoginRepository.DeleteUserLoginsAsync(userOrMemberKey); + + scope.Complete(); } /// @@ -155,8 +157,12 @@ public class TwoFactorLoginService : ITwoFactorLoginService2 /// public async Task DisableAsync(Guid userOrMemberKey, string providerName) { - using ICoreScope scope = _scopeProvider.CreateCoreScope(autoComplete: true); - return await _twoFactorLoginRepository.DeleteUserLoginsAsync(userOrMemberKey, providerName); + using ICoreScope scope = _scopeProvider.CreateCoreScope(); + var result = await _twoFactorLoginRepository.DeleteUserLoginsAsync(userOrMemberKey, providerName); + + scope.Complete(); + + return result; } /// @@ -173,9 +179,10 @@ public class TwoFactorLoginService : ITwoFactorLoginService2 /// public Task SaveAsync(TwoFactorLogin twoFactorLogin) { - using ICoreScope scope = _scopeProvider.CreateCoreScope(autoComplete: true); + using ICoreScope scope = _scopeProvider.CreateCoreScope(); _twoFactorLoginRepository.Save(twoFactorLogin); + scope.Complete(); return Task.CompletedTask; } diff --git a/src/Umbraco.Infrastructure/HostedServices/ScheduledPublishing.cs b/src/Umbraco.Infrastructure/HostedServices/ScheduledPublishing.cs index d593124ccb..d8a77414dc 100644 --- a/src/Umbraco.Infrastructure/HostedServices/ScheduledPublishing.cs +++ b/src/Umbraco.Infrastructure/HostedServices/ScheduledPublishing.cs @@ -94,7 +94,7 @@ public class ScheduledPublishing : RecurringHostedServiceBase // but then what should be its "scope"? could we attach it to scopes? // - and we should definitively *not* have to flush it here (should be auto) using UmbracoContextReference contextReference = _umbracoContextFactory.EnsureUmbracoContext(); - using ICoreScope scope = _scopeProvider.CreateCoreScope(autoComplete: true); + using ICoreScope scope = _scopeProvider.CreateCoreScope(); /* We used to assume that there will never be two instances running concurrently where (IsMainDom && ServerRole == SchedulingPublisher) * However this is possible during an azure deployment slot swap for the SchedulingPublisher instance when trying to achieve zero downtime deployments. @@ -113,6 +113,8 @@ public class ScheduledPublishing : RecurringHostedServiceBase grouped.Count(), grouped.Key); } + + scope.Complete(); } finally { diff --git a/src/Umbraco.Infrastructure/Logging/Viewer/LogViewerConfig.cs b/src/Umbraco.Infrastructure/Logging/Viewer/LogViewerConfig.cs index e8b9de36d7..082efbfb12 100644 --- a/src/Umbraco.Infrastructure/Logging/Viewer/LogViewerConfig.cs +++ b/src/Umbraco.Infrastructure/Logging/Viewer/LogViewerConfig.cs @@ -1,6 +1,8 @@ -using Umbraco.Cms.Core.Models; +using Microsoft.Extensions.DependencyInjection; +using Umbraco.Cms.Core.DependencyInjection; +using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Persistence.Repositories; -using Umbraco.Cms.Core.Scoping; +using Umbraco.Cms.Infrastructure.Scoping; using IScope = Umbraco.Cms.Infrastructure.Scoping.IScope; namespace Umbraco.Cms.Core.Logging.Viewer; @@ -10,6 +12,21 @@ public class LogViewerConfig : ILogViewerConfig private readonly ILogViewerQueryRepository _logViewerQueryRepository; private readonly IScopeProvider _scopeProvider; + [Obsolete("Use non-obsolete ctor. This will be removed in Umbraco 14.")] + public LogViewerConfig(ILogViewerQueryRepository logViewerQueryRepository, Umbraco.Cms.Core.Scoping.IScopeProvider scopeProvider) + : this(logViewerQueryRepository, StaticServiceProvider.Instance.GetRequiredService()) + { + + } + + //Temp ctor used by MSDI (Greedy) + [Obsolete("Use non-obsolete ctor. This will be removed in Umbraco 14.")] + public LogViewerConfig(ILogViewerQueryRepository logViewerQueryRepository, Umbraco.Cms.Core.Scoping.IScopeProvider coreScopeProvider, IScopeProvider scopeProvider) + : this(logViewerQueryRepository, scopeProvider) + { + + } + public LogViewerConfig(ILogViewerQueryRepository logViewerQueryRepository, IScopeProvider scopeProvider) { _logViewerQueryRepository = logViewerQueryRepository; @@ -26,15 +43,16 @@ public class LogViewerConfig : ILogViewerConfig public IReadOnlyList? AddSavedSearch(string? name, string? query) { - using IScope scope = _scopeProvider.CreateScope(autoComplete: true); + using IScope scope = _scopeProvider.CreateScope(); _logViewerQueryRepository.Save(new LogViewerQuery(name, query)); + scope.Complete(); return GetSavedSearches(); } public IReadOnlyList? DeleteSavedSearch(string? name, string? query) { - using IScope scope = _scopeProvider.CreateScope(autoComplete: true); + using IScope scope = _scopeProvider.CreateScope(); ILogViewerQuery? item = name is null ? null : _logViewerQueryRepository.GetByName(name); if (item is not null) { @@ -42,6 +60,8 @@ public class LogViewerConfig : ILogViewerConfig } // Return the updated object - so we can instantly reset the entire array from the API response - return GetSavedSearches(); + IReadOnlyList result = GetSavedSearches(); + scope.Complete(); + return result; } } diff --git a/src/Umbraco.Infrastructure/Security/MemberUserStore.cs b/src/Umbraco.Infrastructure/Security/MemberUserStore.cs index 70efeeb739..059017baaa 100644 --- a/src/Umbraco.Infrastructure/Security/MemberUserStore.cs +++ b/src/Umbraco.Infrastructure/Security/MemberUserStore.cs @@ -96,7 +96,7 @@ public class MemberUserStore : UmbracoUserStore UpdateMemberAsync(ProfileModel model, MemberIdentityUser currentMember) { - using ICoreScope scope = _scopeProvider.CreateCoreScope(autoComplete: true); + using ICoreScope scope = _scopeProvider.CreateCoreScope(); currentMember.Email = model.Email; currentMember.Name = model.Name; @@ -140,6 +140,7 @@ public class UmbProfileController : SurfaceController _memberService.Save(member); + scope.Complete(); return saveResult; } } diff --git a/src/Umbraco.Web.Website/Controllers/UmbRegisterController.cs b/src/Umbraco.Web.Website/Controllers/UmbRegisterController.cs index 493dd624d1..3fb2a966c4 100644 --- a/src/Umbraco.Web.Website/Controllers/UmbRegisterController.cs +++ b/src/Umbraco.Web.Website/Controllers/UmbRegisterController.cs @@ -118,7 +118,7 @@ public class UmbRegisterController : SurfaceController /// Result of registration operation. private async Task RegisterMemberAsync(RegisterModel model) { - using ICoreScope scope = _scopeProvider.CreateCoreScope(autoComplete: true); + using ICoreScope scope = _scopeProvider.CreateCoreScope(); // U4-10762 Server error with "Register Member" snippet (Cannot save member with empty name) // If name field is empty, add the email address instead. @@ -160,6 +160,8 @@ public class UmbRegisterController : SurfaceController } } + scope.Complete(); + return identityResult; } } diff --git a/tests/Umbraco.Tests.Common/TestHelperBase.cs b/tests/Umbraco.Tests.Common/TestHelperBase.cs index ba7d29cd69..21c3c65b7d 100644 --- a/tests/Umbraco.Tests.Common/TestHelperBase.cs +++ b/tests/Umbraco.Tests.Common/TestHelperBase.cs @@ -7,6 +7,7 @@ using System.Reflection; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging.Abstractions; +using Microsoft.Extensions.Options; using Moq; using Umbraco.Cms.Core; using Umbraco.Cms.Core.Cache; @@ -14,6 +15,8 @@ using Umbraco.Cms.Core.Composing; using Umbraco.Cms.Core.Configuration; using Umbraco.Cms.Core.Configuration.Models; using Umbraco.Cms.Core.Diagnostics; +using Umbraco.Cms.Core.DistributedLocking; +using Umbraco.Cms.Core.Events; using Umbraco.Cms.Core.Hosting; using Umbraco.Cms.Core.IO; using Umbraco.Cms.Core.Logging; @@ -24,6 +27,8 @@ using Umbraco.Cms.Core.Runtime; using Umbraco.Cms.Core.Serialization; using Umbraco.Cms.Core.Strings; using Umbraco.Cms.Infrastructure.Persistence; +using Umbraco.Cms.Infrastructure.Persistence.SqlSyntax; +using Umbraco.Cms.Infrastructure.Scoping; using Umbraco.Cms.Infrastructure.Serialization; using Umbraco.Cms.Tests.Common.TestHelpers; using Umbraco.Extensions; @@ -76,6 +81,61 @@ public abstract class TestHelperBase public IShortStringHelper ShortStringHelper { get; } = new DefaultShortStringHelper(new DefaultShortStringHelperConfig()); + public IScopeProvider ScopeProvider + { + get + { + var loggerFactory = NullLoggerFactory.Instance; + var fileSystems = new FileSystems( + loggerFactory, + Mock.Of(), + Mock.Of>(), + Mock.Of()); + var mediaFileManager = new MediaFileManager( + Mock.Of(), + Mock.Of(), + loggerFactory.CreateLogger(), + Mock.Of(), + Mock.Of(), + Options.Create(new ContentSettings())); + var databaseFactory = new Mock(); + var database = new Mock(); + var sqlContext = new Mock(); + + var lockingMechanism = new Mock(); + lockingMechanism.Setup(x => x.ReadLock(It.IsAny(), It.IsAny())) + .Returns(Mock.Of()); + lockingMechanism.Setup(x => x.WriteLock(It.IsAny(), It.IsAny())) + .Returns(Mock.Of()); + + var lockingMechanismFactory = new Mock(); + lockingMechanismFactory.Setup(x => x.DistributedLockingMechanism) + .Returns(lockingMechanism.Object); + + // Setup mock of database factory to return mock of database. + databaseFactory.Setup(x => x.CreateDatabase()).Returns(database.Object); + databaseFactory.Setup(x => x.SqlContext).Returns(sqlContext.Object); + + // Setup mock of database to return mock of sql SqlContext + database.Setup(x => x.SqlContext).Returns(sqlContext.Object); + + var syntaxProviderMock = new Mock(); + + // Setup mock of ISqlContext to return syntaxProviderMock + sqlContext.Setup(x => x.SqlSyntax).Returns(syntaxProviderMock.Object); + + return new ScopeProvider( + new AmbientScopeStack(), + new AmbientScopeContextStack(), + lockingMechanismFactory.Object, + databaseFactory.Object, + fileSystems, + new TestOptionsMonitor(new CoreDebugSettings()), + mediaFileManager, + loggerFactory, + Mock.Of()); + } + } public IJsonSerializer JsonSerializer { get; } = new JsonNetSerializer(); diff --git a/tests/Umbraco.Tests.UnitTests/TestHelpers/TestHelper.cs b/tests/Umbraco.Tests.UnitTests/TestHelpers/TestHelper.cs index cfc57ee9ff..b123a6695e 100644 --- a/tests/Umbraco.Tests.UnitTests/TestHelpers/TestHelper.cs +++ b/tests/Umbraco.Tests.UnitTests/TestHelpers/TestHelper.cs @@ -32,6 +32,7 @@ using Umbraco.Cms.Core.Net; using Umbraco.Cms.Core.PropertyEditors; using Umbraco.Cms.Core.Routing; using Umbraco.Cms.Core.Runtime; +using Umbraco.Cms.Core.Scoping; using Umbraco.Cms.Core.Serialization; using Umbraco.Cms.Core.Strings; using Umbraco.Cms.Infrastructure.Mail; @@ -43,6 +44,7 @@ using Umbraco.Cms.Tests.Common.Testing; using Umbraco.Extensions; using File = System.IO.File; using IHostingEnvironment = Umbraco.Cms.Core.Hosting.IHostingEnvironment; +using IScopeProvider = Umbraco.Cms.Infrastructure.Scoping.IScopeProvider; namespace Umbraco.Cms.Tests.UnitTests.TestHelpers; @@ -59,6 +61,8 @@ public static class TestHelper /// The assembly directory. public static string WorkingDirectory => s_testHelperInternal.WorkingDirectory; + public static IScopeProvider ScopeProvider => s_testHelperInternal.ScopeProvider; + public static ICoreScopeProvider CoreScopeProvider => s_testHelperInternal.ScopeProvider; public static IShortStringHelper ShortStringHelper => s_testHelperInternal.ShortStringHelper; public static IJsonSerializer JsonSerializer => s_testHelperInternal.JsonSerializer; diff --git a/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Logging/LogviewerTests.cs b/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Logging/LogviewerTests.cs index 5c028714b8..cf3d985b2a 100644 --- a/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Logging/LogviewerTests.cs +++ b/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Logging/LogviewerTests.cs @@ -49,7 +49,7 @@ public class LogviewerTests File.Copy(exampleLogfilePath, _newLogfilePath, true); var logger = Mock.Of>(); - var logViewerConfig = new LogViewerConfig(LogViewerQueryRepository, Mock.Of()); + var logViewerConfig = new LogViewerConfig(LogViewerQueryRepository, TestHelper.ScopeProvider); var logLevelLoader = Mock.Of(); _logViewer = new SerilogJsonLogViewer(logger, logViewerConfig, loggingConfiguration, logLevelLoader, Log.Logger); diff --git a/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Security/MemberManagerTests.cs b/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Security/MemberManagerTests.cs index f745c06ceb..10d4510902 100644 --- a/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Security/MemberManagerTests.cs +++ b/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Security/MemberManagerTests.cs @@ -17,6 +17,7 @@ using Umbraco.Cms.Infrastructure.Scoping; using Umbraco.Cms.Tests.Common; using Umbraco.Cms.Tests.Common.Builders; using Umbraco.Cms.Tests.Common.Builders.Extensions; +using Umbraco.Cms.Tests.UnitTests.TestHelpers; using Umbraco.Cms.Web.Common.Security; namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Infrastructure.Security; @@ -33,7 +34,7 @@ public class MemberManagerTests public MemberManager CreateSut() { - var scopeProvider = new Mock().Object; + var scopeProvider = TestHelper.ScopeProvider; _mockMemberService = new Mock(); var mapDefinitions = new List diff --git a/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Security/MemberUserStoreTests.cs b/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Security/MemberUserStoreTests.cs index 9e2a769e74..79a6041818 100644 --- a/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Security/MemberUserStoreTests.cs +++ b/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Security/MemberUserStoreTests.cs @@ -15,6 +15,7 @@ using Umbraco.Cms.Core.PublishedCache; using Umbraco.Cms.Core.Scoping; using Umbraco.Cms.Core.Security; using Umbraco.Cms.Core.Services; +using Umbraco.Cms.Tests.UnitTests.TestHelpers; using Umbraco.Cms.Tests.UnitTests.Umbraco.Core.ShortStringHelper; using IScopeProvider = Umbraco.Cms.Infrastructure.Scoping.IScopeProvider; @@ -28,23 +29,12 @@ public class MemberUserStoreTests public MemberUserStore CreateSut() { _mockMemberService = new Mock(); - var mockScope = new Mock(); - var mockScopeProvider = new Mock(); - mockScopeProvider - .Setup(x => x.CreateScope( - It.IsAny(), - It.IsAny(), - It.IsAny(), - It.IsAny(), - It.IsAny(), - It.IsAny(), - It.IsAny())) - .Returns(mockScope.Object); + var mockScopeProvider = TestHelper.ScopeProvider; return new MemberUserStore( _mockMemberService.Object, - new UmbracoMapper(new MapDefinitionCollection(() => new List()), mockScopeProvider.Object, NullLogger.Instance), - mockScopeProvider.Object, + new UmbracoMapper(new MapDefinitionCollection(() => new List()), mockScopeProvider, NullLogger.Instance), + mockScopeProvider, new IdentityErrorDescriber(), Mock.Of(), Mock.Of(), From ea33b73daa1e6384d10d11941acdd7cd7ecfb00b Mon Sep 17 00:00:00 2001 From: Bjarke Berg Date: Wed, 15 Nov 2023 09:03:08 +0100 Subject: [PATCH 04/38] Added scope.complete in edge cases. (#15207) (cherry picked from commit 28e8ac11f0c37f7f5b8fbd729c33642e2029928e) --- src/Umbraco.Core/Services/ContentVersionService.cs | 2 ++ src/Umbraco.Web.Website/Controllers/UmbProfileController.cs | 1 + 2 files changed, 3 insertions(+) diff --git a/src/Umbraco.Core/Services/ContentVersionService.cs b/src/Umbraco.Core/Services/ContentVersionService.cs index d4dea0af91..015b972aee 100644 --- a/src/Umbraco.Core/Services/ContentVersionService.cs +++ b/src/Umbraco.Core/Services/ContentVersionService.cs @@ -77,6 +77,7 @@ internal class ContentVersionService : IContentVersionService if (version is null) { + scope.Complete(); return; } @@ -128,6 +129,7 @@ internal class ContentVersionService : IContentVersionService if (allHistoricVersions is null) { + scope.Complete(); return Array.Empty(); } diff --git a/src/Umbraco.Web.Website/Controllers/UmbProfileController.cs b/src/Umbraco.Web.Website/Controllers/UmbProfileController.cs index 22d5f7e3e2..d493bb7e02 100644 --- a/src/Umbraco.Web.Website/Controllers/UmbProfileController.cs +++ b/src/Umbraco.Web.Website/Controllers/UmbProfileController.cs @@ -112,6 +112,7 @@ public class UmbProfileController : SurfaceController IdentityResult saveResult = await _memberManager.UpdateAsync(currentMember); if (!saveResult.Succeeded) { + scope.Complete(); return saveResult; } From d714741beeb896aa301a9bf09e50fb35eff625b4 Mon Sep 17 00:00:00 2001 From: Bjarke Berg Date: Wed, 15 Nov 2023 09:53:28 +0100 Subject: [PATCH 05/38] Fixed build --- src/Umbraco.Infrastructure/Logging/Viewer/LogViewerConfig.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Umbraco.Infrastructure/Logging/Viewer/LogViewerConfig.cs b/src/Umbraco.Infrastructure/Logging/Viewer/LogViewerConfig.cs index 082efbfb12..919f2cd3d0 100644 --- a/src/Umbraco.Infrastructure/Logging/Viewer/LogViewerConfig.cs +++ b/src/Umbraco.Infrastructure/Logging/Viewer/LogViewerConfig.cs @@ -3,6 +3,7 @@ using Umbraco.Cms.Core.DependencyInjection; using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Persistence.Repositories; using Umbraco.Cms.Infrastructure.Scoping; +using Umbraco.Cms.Web.Common.DependencyInjection; using IScope = Umbraco.Cms.Infrastructure.Scoping.IScope; namespace Umbraco.Cms.Core.Logging.Viewer; @@ -60,7 +61,7 @@ public class LogViewerConfig : ILogViewerConfig } // Return the updated object - so we can instantly reset the entire array from the API response - IReadOnlyList result = GetSavedSearches(); + IReadOnlyList result = GetSavedSearches()!; scope.Complete(); return result; } From 44c3c3741eec88a4e4ebeb804eb5f3a54a19bf83 Mon Sep 17 00:00:00 2001 From: Vitor Rodrigues Date: Sun, 8 Oct 2023 12:28:36 +0200 Subject: [PATCH 06/38] Fix potential NullReferenceException --- src/Umbraco.Web.Common/AspNetCore/AspNetCoreSessionManager.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Umbraco.Web.Common/AspNetCore/AspNetCoreSessionManager.cs b/src/Umbraco.Web.Common/AspNetCore/AspNetCoreSessionManager.cs index 1813c75932..ad5f480a72 100644 --- a/src/Umbraco.Web.Common/AspNetCore/AspNetCoreSessionManager.cs +++ b/src/Umbraco.Web.Common/AspNetCore/AspNetCoreSessionManager.cs @@ -27,7 +27,7 @@ internal class AspNetCoreSessionManager : ISessionIdResolver, ISessionManager /// /// If session isn't enabled this will throw an exception so we check /// - private bool IsSessionsAvailable => !(_httpContextAccessor.HttpContext?.Features.Get() is null); + private bool IsSessionsAvailable => !(_httpContextAccessor.HttpContext?.Features.Get()?.Session is null); public string? GetSessionValue(string key) { From 960d70ec5483d08d11116f086dbb46ad95827e6f Mon Sep 17 00:00:00 2001 From: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com> Date: Thu, 16 Nov 2023 13:49:05 +0100 Subject: [PATCH 07/38] V13: Webhook logging cleanup (#15198) * Add log cleanup settings * Start implementation of WebhookLoggingCleanup * Add WebhookLog database locks * Refactor repository to allow cleanup * Refactor WebhookLoggingCleanup to fix bugs * FIx up tests * WebhookLoggingCleanup PR review suggestions --------- Co-authored-by: Zeegaan Co-authored-by: Sven Geusens --- .../Configuration/Models/WebhookSettings.cs | 25 +++++++ .../Persistence/Constants-Locks.cs | 7 +- .../Repositories/IWebhookLogRepository.cs | 5 +- .../Jobs/WebhookLoggingCleanup.cs | 69 +++++++++++++++++++ .../Migrations/Install/DatabaseDataCreator.cs | 1 + .../Migrations/Upgrade/UmbracoPlan.cs | 1 + .../V_13_0_0/AddWebhookDatabaseLock.cs | 30 ++++++++ .../Implement/WebhookLogRepository.cs | 41 +++++++++-- .../UmbracoBuilderExtensions.cs | 1 + 9 files changed, 174 insertions(+), 6 deletions(-) create mode 100644 src/Umbraco.Infrastructure/BackgroundJobs/Jobs/WebhookLoggingCleanup.cs create mode 100644 src/Umbraco.Infrastructure/Migrations/Upgrade/V_13_0_0/AddWebhookDatabaseLock.cs diff --git a/src/Umbraco.Core/Configuration/Models/WebhookSettings.cs b/src/Umbraco.Core/Configuration/Models/WebhookSettings.cs index 2bfb5a2375..781fd942b5 100644 --- a/src/Umbraco.Core/Configuration/Models/WebhookSettings.cs +++ b/src/Umbraco.Core/Configuration/Models/WebhookSettings.cs @@ -8,6 +8,9 @@ public class WebhookSettings private const bool StaticEnabled = true; private const int StaticMaximumRetries = 5; internal const string StaticPeriod = "00:00:10"; + private const bool StaticEnableLoggingCleanup = true; + private const int StaticKeepLogsForDays = 30; + /// /// Gets or sets a value indicating whether webhooks are enabled. @@ -38,4 +41,26 @@ public class WebhookSettings /// [DefaultValue(StaticPeriod)] public TimeSpan Period { get; set; } = TimeSpan.Parse(StaticPeriod); + + /// + /// Gets or sets a value indicating whether cleanup of webhook logs are enabled. + /// + /// + /// + /// By default, cleanup is enabled. + /// + /// + [DefaultValue(StaticEnableLoggingCleanup)] + public bool EnableLoggingCleanup { get; set; } = StaticEnableLoggingCleanup; + + /// + /// Gets or sets a value indicating number of days to keep logs for. + /// + /// + /// + /// By default, logs are kept for 30 days. + /// + /// + [DefaultValue(StaticKeepLogsForDays)] + public int KeepLogsForDays { get; set; } = StaticKeepLogsForDays; } diff --git a/src/Umbraco.Core/Persistence/Constants-Locks.cs b/src/Umbraco.Core/Persistence/Constants-Locks.cs index 7672d73ec7..874c0ffe2f 100644 --- a/src/Umbraco.Core/Persistence/Constants-Locks.cs +++ b/src/Umbraco.Core/Persistence/Constants-Locks.cs @@ -72,8 +72,13 @@ public static partial class Constants public const int ScheduledPublishing = -341; /// - /// ScheduledPublishing job. + /// All Webhook requests. /// public const int WebhookRequest = -342; + + /// + /// All webhook logs. + /// + public const int WebhookLogs = -343; } } diff --git a/src/Umbraco.Core/Persistence/Repositories/IWebhookLogRepository.cs b/src/Umbraco.Core/Persistence/Repositories/IWebhookLogRepository.cs index a4652d5955..c719df2b50 100644 --- a/src/Umbraco.Core/Persistence/Repositories/IWebhookLogRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/IWebhookLogRepository.cs @@ -1,5 +1,4 @@ using Umbraco.Cms.Core.Models; -using Umbraco.Cms.Core.Webhooks; namespace Umbraco.Cms.Core.Persistence.Repositories; @@ -8,4 +7,8 @@ public interface IWebhookLogRepository Task CreateAsync(WebhookLog log); Task> GetPagedAsync(int skip, int take); + + Task> GetOlderThanDate(DateTime date); + + Task DeleteByIds(int[] ids); } diff --git a/src/Umbraco.Infrastructure/BackgroundJobs/Jobs/WebhookLoggingCleanup.cs b/src/Umbraco.Infrastructure/BackgroundJobs/Jobs/WebhookLoggingCleanup.cs new file mode 100644 index 0000000000..2e0bdc5edd --- /dev/null +++ b/src/Umbraco.Infrastructure/BackgroundJobs/Jobs/WebhookLoggingCleanup.cs @@ -0,0 +1,69 @@ +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Options; +using Umbraco.Cms.Core; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Models; +using Umbraco.Cms.Core.Persistence.Repositories; +using Umbraco.Cms.Core.Scoping; +using Umbraco.Extensions; + +namespace Umbraco.Cms.Infrastructure.BackgroundJobs.Jobs; + +/// +/// Daily background job that removes all webhook log data older than x days as defined by +/// +public class WebhookLoggingCleanup : IRecurringBackgroundJob +{ + private readonly ILogger _logger; + private readonly WebhookSettings _webhookSettings; + private readonly IWebhookLogRepository _webhookLogRepository; + private readonly ICoreScopeProvider _coreScopeProvider; + + public WebhookLoggingCleanup(ILogger logger, IOptionsMonitor webhookSettings, IWebhookLogRepository webhookLogRepository, ICoreScopeProvider coreScopeProvider) + { + _logger = logger; + _webhookSettings = webhookSettings.CurrentValue; + _webhookLogRepository = webhookLogRepository; + _coreScopeProvider = coreScopeProvider; + } + + /// + // No-op event as the period never changes on this job + public event EventHandler PeriodChanged + { + add { } remove { } + } + + /// + public TimeSpan Period => TimeSpan.FromDays(1); + + /// + public TimeSpan Delay { get; } = TimeSpan.FromSeconds(20); + + /// + public async Task RunJobAsync() + { + if (_webhookSettings.EnableLoggingCleanup is false) + { + _logger.LogInformation("WebhookLoggingCleanup task will not run as it has been globally disabled via configuration"); + return; + } + + IEnumerable webhookLogs; + using (ICoreScope scope = _coreScopeProvider.CreateCoreScope()) + { + scope.ReadLock(Constants.Locks.WebhookLogs); + webhookLogs = await _webhookLogRepository.GetOlderThanDate(DateTime.Now - TimeSpan.FromDays(_webhookSettings.KeepLogsForDays)); + scope.Complete(); + } + + foreach (IEnumerable group in webhookLogs.InGroupsOf(Constants.Sql.MaxParameterCount)) + { + using ICoreScope scope = _coreScopeProvider.CreateCoreScope(); + scope.WriteLock(Constants.Locks.WebhookLogs); + await _webhookLogRepository.DeleteByIds(group.Select(x => x.Id).ToArray()); + + scope.Complete(); + } + } +} diff --git a/src/Umbraco.Infrastructure/Migrations/Install/DatabaseDataCreator.cs b/src/Umbraco.Infrastructure/Migrations/Install/DatabaseDataCreator.cs index 2d17d42f83..932a467d85 100644 --- a/src/Umbraco.Infrastructure/Migrations/Install/DatabaseDataCreator.cs +++ b/src/Umbraco.Infrastructure/Migrations/Install/DatabaseDataCreator.cs @@ -1006,6 +1006,7 @@ internal class DatabaseDataCreator _database.Insert(Constants.DatabaseSchema.Tables.Lock, "id", false, new LockDto { Id = Constants.Locks.ScheduledPublishing, Name = "ScheduledPublishing" }); _database.Insert(Constants.DatabaseSchema.Tables.Lock, "id", false, new LockDto { Id = Constants.Locks.MainDom, Name = "MainDom" }); _database.Insert(Constants.DatabaseSchema.Tables.Lock, "id", false, new LockDto { Id = Constants.Locks.WebhookRequest, Name = "WebhookRequest" }); + _database.Insert(Constants.DatabaseSchema.Tables.Lock, "id", false, new LockDto { Id = Constants.Locks.WebhookLogs, Name = "WebhookLogs" }); } private void CreateContentTypeData() diff --git a/src/Umbraco.Infrastructure/Migrations/Upgrade/UmbracoPlan.cs b/src/Umbraco.Infrastructure/Migrations/Upgrade/UmbracoPlan.cs index e543c61279..24d82710d6 100644 --- a/src/Umbraco.Infrastructure/Migrations/Upgrade/UmbracoPlan.cs +++ b/src/Umbraco.Infrastructure/Migrations/Upgrade/UmbracoPlan.cs @@ -100,5 +100,6 @@ public class UmbracoPlan : MigrationPlan To("{D5139400-E507-4259-A542-C67358F7E329}"); To("{4E652F18-9A29-4656-A899-E3F39069C47E}"); To("{148714C8-FE0D-4553-B034-439D91468761}"); + To("{23BA95A4-FCCE-49B0-8AA1-45312B103A9B}"); } } diff --git a/src/Umbraco.Infrastructure/Migrations/Upgrade/V_13_0_0/AddWebhookDatabaseLock.cs b/src/Umbraco.Infrastructure/Migrations/Upgrade/V_13_0_0/AddWebhookDatabaseLock.cs new file mode 100644 index 0000000000..2254cc1d36 --- /dev/null +++ b/src/Umbraco.Infrastructure/Migrations/Upgrade/V_13_0_0/AddWebhookDatabaseLock.cs @@ -0,0 +1,30 @@ +using NPoco; +using Umbraco.Cms.Core; +using Umbraco.Cms.Infrastructure.Persistence; +using Umbraco.Cms.Infrastructure.Persistence.Dtos; +using Umbraco.Extensions; + +namespace Umbraco.Cms.Infrastructure.Migrations.Upgrade.V_13_0_0; + +public class AddWebhookDatabaseLock : MigrationBase +{ + public AddWebhookDatabaseLock(IMigrationContext context) + : base(context) + { + } + + protected override void Migrate() + { + Sql sql = Database.SqlContext.Sql() + .Select() + .From() + .Where(x => x.Id == Constants.Locks.WebhookLogs); + + LockDto? webhookRequestLock = Database.FirstOrDefault(sql); + + if (webhookRequestLock is null) + { + Database.Insert(Constants.DatabaseSchema.Tables.Lock, "id", false, new LockDto { Id = Constants.Locks.WebhookRequest, Name = "WebhookRequest" }); + } + } +} diff --git a/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/WebhookLogRepository.cs b/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/WebhookLogRepository.cs index 910f1178d4..af6c561d90 100644 --- a/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/WebhookLogRepository.cs +++ b/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/WebhookLogRepository.cs @@ -2,7 +2,6 @@ using Umbraco.Cms.Core; using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Persistence.Repositories; -using Umbraco.Cms.Core.Webhooks; using Umbraco.Cms.Infrastructure.Persistence.Dtos; using Umbraco.Cms.Infrastructure.Persistence.Factories; using Umbraco.Cms.Infrastructure.Scoping; @@ -14,26 +13,39 @@ public class WebhookLogRepository : IWebhookLogRepository { private readonly IScopeAccessor _scopeAccessor; + private IUmbracoDatabase Database + { + get + { + if (_scopeAccessor.AmbientScope is null) + { + throw new NotSupportedException("Need to be executed in a scope"); + } + + return _scopeAccessor.AmbientScope.Database; + } + } + public WebhookLogRepository(IScopeAccessor scopeAccessor) => _scopeAccessor = scopeAccessor; public async Task CreateAsync(WebhookLog log) { WebhookLogDto dto = WebhookLogFactory.CreateDto(log); - var result = await _scopeAccessor.AmbientScope?.Database.InsertAsync(dto)!; + var result = await Database.InsertAsync(dto)!; var id = Convert.ToInt32(result); log.Id = id; } public async Task> GetPagedAsync(int skip, int take) { - Sql? sql = _scopeAccessor.AmbientScope?.Database.SqlContext.Sql() + Sql sql = Database.SqlContext.Sql() .Select() .From() .OrderByDescending(x => x.Date); PaginationHelper.ConvertSkipTakeToPaging(skip, take, out var pageNumber, out var pageSize); - Page? page = await _scopeAccessor.AmbientScope?.Database.PageAsync(pageNumber + 1, pageSize, sql)!; + Page? page = await Database.PageAsync(pageNumber + 1, pageSize, sql)!; return new PagedModel { @@ -41,4 +53,25 @@ public class WebhookLogRepository : IWebhookLogRepository Items = page.Items.Select(WebhookLogFactory.DtoToEntity), }; } + + public async Task> GetOlderThanDate(DateTime date) + { + Sql sql = Database.SqlContext.Sql() + .Select() + .From() + .Where(log => log.Date < date); + + List? logs = await Database.FetchAsync(sql); + + return logs.Select(WebhookLogFactory.DtoToEntity); + } + + public async Task DeleteByIds(int[] ids) + { + Sql query = Database.SqlContext.Sql() + .Delete() + .WhereIn(x => x.Id, ids); + + await Database.ExecuteAsync(query); + } } diff --git a/src/Umbraco.Web.Common/DependencyInjection/UmbracoBuilderExtensions.cs b/src/Umbraco.Web.Common/DependencyInjection/UmbracoBuilderExtensions.cs index a08f712b37..40436fd798 100644 --- a/src/Umbraco.Web.Common/DependencyInjection/UmbracoBuilderExtensions.cs +++ b/src/Umbraco.Web.Common/DependencyInjection/UmbracoBuilderExtensions.cs @@ -216,6 +216,7 @@ public static partial class UmbracoBuilderExtensions builder.Services.AddRecurringBackgroundJob(); builder.Services.AddRecurringBackgroundJob(); builder.Services.AddRecurringBackgroundJob(); + builder.Services.AddRecurringBackgroundJob(); builder.Services.AddRecurringBackgroundJob(provider => new ReportSiteJob( provider.GetRequiredService>(), From f286b1168ce587952f7e858189e031fd0921db9e Mon Sep 17 00:00:00 2001 From: Kenn Jacobsen Date: Fri, 17 Nov 2023 10:26:59 +0100 Subject: [PATCH 08/38] Ensure content types are updated in ContentStore when a data type changes (#15239) --- src/Umbraco.PublishedCache.NuCache/ContentStore.cs | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/Umbraco.PublishedCache.NuCache/ContentStore.cs b/src/Umbraco.PublishedCache.NuCache/ContentStore.cs index fad8722b77..f38b9dd2fc 100644 --- a/src/Umbraco.PublishedCache.NuCache/ContentStore.cs +++ b/src/Umbraco.PublishedCache.NuCache/ContentStore.cs @@ -736,16 +736,22 @@ public class ContentStore { EnsureLocked(); - IPublishedContentType?[] contentTypes = _contentTypesById + IPublishedContentType[] contentTypes = _contentTypesById .Where(kvp => kvp.Value.Value != null && kvp.Value.Value.PropertyTypes.Any(p => dataTypeIds.Contains(p.DataType.Id))) .Select(kvp => kvp.Value.Value) .Select(x => getContentType(x!.Id)) - .Where(x => x != null) // poof, gone, very unlikely and probably an anomaly + .WhereNotNull() // poof, gone, very unlikely and probably an anomaly .ToArray(); - var contentTypeIdsA = contentTypes.Select(x => x!.Id).ToArray(); + // all content types that are affected by this data type update must be updated + foreach (IPublishedContentType contentType in contentTypes) + { + SetContentTypeLocked(contentType); + } + + var contentTypeIdsA = contentTypes.Select(x => x.Id).ToArray(); var contentTypeNodes = new Dictionary>(); foreach (var id in contentTypeIdsA) { @@ -761,7 +767,7 @@ public class ContentStore } } - foreach (IPublishedContentType contentType in contentTypes.WhereNotNull()) + foreach (IPublishedContentType contentType in contentTypes) { // again, weird situation if (contentTypeNodes.ContainsKey(contentType.Id) == false) From 4781fb1d8b53babd052efe14dc18dd8434b7b5c3 Mon Sep 17 00:00:00 2001 From: Kenn Jacobsen Date: Fri, 17 Nov 2023 10:26:59 +0100 Subject: [PATCH 09/38] Ensure content types are updated in ContentStore when a data type changes (#15239) --- src/Umbraco.PublishedCache.NuCache/ContentStore.cs | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/Umbraco.PublishedCache.NuCache/ContentStore.cs b/src/Umbraco.PublishedCache.NuCache/ContentStore.cs index fad8722b77..f38b9dd2fc 100644 --- a/src/Umbraco.PublishedCache.NuCache/ContentStore.cs +++ b/src/Umbraco.PublishedCache.NuCache/ContentStore.cs @@ -736,16 +736,22 @@ public class ContentStore { EnsureLocked(); - IPublishedContentType?[] contentTypes = _contentTypesById + IPublishedContentType[] contentTypes = _contentTypesById .Where(kvp => kvp.Value.Value != null && kvp.Value.Value.PropertyTypes.Any(p => dataTypeIds.Contains(p.DataType.Id))) .Select(kvp => kvp.Value.Value) .Select(x => getContentType(x!.Id)) - .Where(x => x != null) // poof, gone, very unlikely and probably an anomaly + .WhereNotNull() // poof, gone, very unlikely and probably an anomaly .ToArray(); - var contentTypeIdsA = contentTypes.Select(x => x!.Id).ToArray(); + // all content types that are affected by this data type update must be updated + foreach (IPublishedContentType contentType in contentTypes) + { + SetContentTypeLocked(contentType); + } + + var contentTypeIdsA = contentTypes.Select(x => x.Id).ToArray(); var contentTypeNodes = new Dictionary>(); foreach (var id in contentTypeIdsA) { @@ -761,7 +767,7 @@ public class ContentStore } } - foreach (IPublishedContentType contentType in contentTypes.WhereNotNull()) + foreach (IPublishedContentType contentType in contentTypes) { // again, weird situation if (contentTypeNodes.ContainsKey(contentType.Id) == false) From 92c23eceae88eb16dc048fb9e9dceda88e3be6d5 Mon Sep 17 00:00:00 2001 From: Kenn Jacobsen Date: Fri, 17 Nov 2023 10:26:59 +0100 Subject: [PATCH 10/38] Ensure content types are updated in ContentStore when a data type changes (#15239) --- src/Umbraco.PublishedCache.NuCache/ContentStore.cs | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/Umbraco.PublishedCache.NuCache/ContentStore.cs b/src/Umbraco.PublishedCache.NuCache/ContentStore.cs index fad8722b77..f38b9dd2fc 100644 --- a/src/Umbraco.PublishedCache.NuCache/ContentStore.cs +++ b/src/Umbraco.PublishedCache.NuCache/ContentStore.cs @@ -736,16 +736,22 @@ public class ContentStore { EnsureLocked(); - IPublishedContentType?[] contentTypes = _contentTypesById + IPublishedContentType[] contentTypes = _contentTypesById .Where(kvp => kvp.Value.Value != null && kvp.Value.Value.PropertyTypes.Any(p => dataTypeIds.Contains(p.DataType.Id))) .Select(kvp => kvp.Value.Value) .Select(x => getContentType(x!.Id)) - .Where(x => x != null) // poof, gone, very unlikely and probably an anomaly + .WhereNotNull() // poof, gone, very unlikely and probably an anomaly .ToArray(); - var contentTypeIdsA = contentTypes.Select(x => x!.Id).ToArray(); + // all content types that are affected by this data type update must be updated + foreach (IPublishedContentType contentType in contentTypes) + { + SetContentTypeLocked(contentType); + } + + var contentTypeIdsA = contentTypes.Select(x => x.Id).ToArray(); var contentTypeNodes = new Dictionary>(); foreach (var id in contentTypeIdsA) { @@ -761,7 +767,7 @@ public class ContentStore } } - foreach (IPublishedContentType contentType in contentTypes.WhereNotNull()) + foreach (IPublishedContentType contentType in contentTypes) { // again, weird situation if (contentTypeNodes.ContainsKey(contentType.Id) == false) From a60ea1f49de2d4811eee7b35e84fe7e4a6d4a084 Mon Sep 17 00:00:00 2001 From: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com> Date: Fri, 17 Nov 2023 14:14:41 +0100 Subject: [PATCH 11/38] V13: Fix AddWebhookDatabaseLock migration (#15250) * Change to proper constant * Update with comments --- .../Migrations/Upgrade/V_13_0_0/AddWebhookDatabaseLock.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Umbraco.Infrastructure/Migrations/Upgrade/V_13_0_0/AddWebhookDatabaseLock.cs b/src/Umbraco.Infrastructure/Migrations/Upgrade/V_13_0_0/AddWebhookDatabaseLock.cs index 2254cc1d36..f611e82767 100644 --- a/src/Umbraco.Infrastructure/Migrations/Upgrade/V_13_0_0/AddWebhookDatabaseLock.cs +++ b/src/Umbraco.Infrastructure/Migrations/Upgrade/V_13_0_0/AddWebhookDatabaseLock.cs @@ -20,11 +20,11 @@ public class AddWebhookDatabaseLock : MigrationBase .From() .Where(x => x.Id == Constants.Locks.WebhookLogs); - LockDto? webhookRequestLock = Database.FirstOrDefault(sql); + LockDto? webhookLogsLock = Database.FirstOrDefault(sql); - if (webhookRequestLock is null) + if (webhookLogsLock is null) { - Database.Insert(Constants.DatabaseSchema.Tables.Lock, "id", false, new LockDto { Id = Constants.Locks.WebhookRequest, Name = "WebhookRequest" }); + Database.Insert(Constants.DatabaseSchema.Tables.Lock, "id", false, new LockDto { Id = Constants.Locks.WebhookLogs, Name = "WebhookLogs" }); } } } From 0085f9862e75018b35f942945648b6c4be5f9526 Mon Sep 17 00:00:00 2001 From: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com> Date: Fri, 17 Nov 2023 14:35:43 +0100 Subject: [PATCH 12/38] V13: Fix proper serialization of webhook object (#15248) * deserialize object again before firing * Dont serialize and already serialized object * Update to use constant instead of hard coded string --- .../BackgroundJobs/Jobs/WebhookFiring.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Umbraco.Infrastructure/BackgroundJobs/Jobs/WebhookFiring.cs b/src/Umbraco.Infrastructure/BackgroundJobs/Jobs/WebhookFiring.cs index fe8cf1e204..951c121982 100644 --- a/src/Umbraco.Infrastructure/BackgroundJobs/Jobs/WebhookFiring.cs +++ b/src/Umbraco.Infrastructure/BackgroundJobs/Jobs/WebhookFiring.cs @@ -1,4 +1,5 @@ -using System.Text; +using System.Net.Mime; +using System.Text; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; using Umbraco.Cms.Core; @@ -87,12 +88,11 @@ public class WebhookFiring : IRecurringBackgroundJob })); } - private async Task SendRequestAsync(Webhook webhook, string eventName, object? payload, int retryCount, CancellationToken cancellationToken) + private async Task SendRequestAsync(Webhook webhook, string eventName, string? serializedObject, int retryCount, CancellationToken cancellationToken) { using var httpClient = new HttpClient(); - var serializedObject = _jsonSerializer.Serialize(payload); - var stringContent = new StringContent(serializedObject, Encoding.UTF8, "application/json"); + var stringContent = new StringContent(serializedObject ?? string.Empty, Encoding.UTF8, MediaTypeNames.Application.Json); stringContent.Headers.TryAddWithoutValidation("Umb-Webhook-Event", eventName); foreach (KeyValuePair header in webhook.Headers) From bb9a8fc3be231b6832e75f4e5105572dc1bb47b3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 15 Nov 2023 18:39:52 +0000 Subject: [PATCH 13/38] Bump tinymce from 6.7.1 to 6.7.3 in /src/Umbraco.Web.UI.Client Bumps [tinymce](https://github.com/tinymce/tinymce/tree/HEAD/modules/tinymce) from 6.7.1 to 6.7.3. - [Changelog](https://github.com/tinymce/tinymce/blob/develop/modules/tinymce/CHANGELOG.md) - [Commits](https://github.com/tinymce/tinymce/commits/6.7.3/modules/tinymce) --- updated-dependencies: - dependency-name: tinymce dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- src/Umbraco.Web.UI.Client/package-lock.json | 8 ++++---- src/Umbraco.Web.UI.Client/package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/package-lock.json b/src/Umbraco.Web.UI.Client/package-lock.json index cf9238f1a8..b38e5fabf8 100644 --- a/src/Umbraco.Web.UI.Client/package-lock.json +++ b/src/Umbraco.Web.UI.Client/package-lock.json @@ -39,7 +39,7 @@ "ng-file-upload": "12.2.13", "nouislider": "15.7.1", "spectrum-colorpicker2": "2.0.10", - "tinymce": "6.7.1", + "tinymce": "6.7.3", "typeahead.js": "0.11.1", "underscore": "1.13.6", "wicg-inert": "3.1.2" @@ -16571,9 +16571,9 @@ "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==" }, "node_modules/tinymce": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/tinymce/-/tinymce-6.7.1.tgz", - "integrity": "sha512-SIGJgWk2d/X59VbO+i81QfNx2EP1P5t+sza2/1So3OLGtmMBhEJMag7sN/Mo8sq4s0niwb65Z51yLju32jP11g==" + "version": "6.7.3", + "resolved": "https://registry.npmjs.org/tinymce/-/tinymce-6.7.3.tgz", + "integrity": "sha512-J7WmYIi/gt1RvZ6Ap2oQiUjzAoiS9pfV+d4GnKuZuPu8agmlAEAInNmMvMjfCNBzHv4JnZXY7qlHUAI0IuYQVA==" }, "node_modules/to-absolute-glob": { "version": "2.0.2", diff --git a/src/Umbraco.Web.UI.Client/package.json b/src/Umbraco.Web.UI.Client/package.json index 7b7f83c34b..e44af5e9ef 100644 --- a/src/Umbraco.Web.UI.Client/package.json +++ b/src/Umbraco.Web.UI.Client/package.json @@ -51,7 +51,7 @@ "ng-file-upload": "12.2.13", "nouislider": "15.7.1", "spectrum-colorpicker2": "2.0.10", - "tinymce": "6.7.1", + "tinymce": "6.7.3", "typeahead.js": "0.11.1", "underscore": "1.13.6", "wicg-inert": "3.1.2" From 7dcef227027fc406018f3b6c7ef98cd6a9065f55 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 15 Nov 2023 18:39:52 +0000 Subject: [PATCH 14/38] Bump tinymce from 6.7.1 to 6.7.3 in /src/Umbraco.Web.UI.Client Bumps [tinymce](https://github.com/tinymce/tinymce/tree/HEAD/modules/tinymce) from 6.7.1 to 6.7.3. - [Changelog](https://github.com/tinymce/tinymce/blob/develop/modules/tinymce/CHANGELOG.md) - [Commits](https://github.com/tinymce/tinymce/commits/6.7.3/modules/tinymce) --- updated-dependencies: - dependency-name: tinymce dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- src/Umbraco.Web.UI.Client/package-lock.json | 8 ++++---- src/Umbraco.Web.UI.Client/package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/package-lock.json b/src/Umbraco.Web.UI.Client/package-lock.json index 00b71a2d2b..85ce55bd79 100644 --- a/src/Umbraco.Web.UI.Client/package-lock.json +++ b/src/Umbraco.Web.UI.Client/package-lock.json @@ -39,7 +39,7 @@ "ng-file-upload": "12.2.13", "nouislider": "15.7.1", "spectrum-colorpicker2": "2.0.10", - "tinymce": "6.5.1", + "tinymce": "6.7.3", "typeahead.js": "0.11.1", "underscore": "1.13.6", "wicg-inert": "3.1.2" @@ -16326,9 +16326,9 @@ "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==" }, "node_modules/tinymce": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/tinymce/-/tinymce-6.5.1.tgz", - "integrity": "sha512-J67fxJiX3tjvVqer1dg1+cOxMeE2P55ESGhaakvqGPbAUU45HnCMLSioaOsxV1KfcXustw9WJo0rtn1SNQlVKQ==" + "version": "6.7.3", + "resolved": "https://registry.npmjs.org/tinymce/-/tinymce-6.7.3.tgz", + "integrity": "sha512-J7WmYIi/gt1RvZ6Ap2oQiUjzAoiS9pfV+d4GnKuZuPu8agmlAEAInNmMvMjfCNBzHv4JnZXY7qlHUAI0IuYQVA==" }, "node_modules/to-absolute-glob": { "version": "2.0.2", diff --git a/src/Umbraco.Web.UI.Client/package.json b/src/Umbraco.Web.UI.Client/package.json index b3391c2221..98d4c75a51 100644 --- a/src/Umbraco.Web.UI.Client/package.json +++ b/src/Umbraco.Web.UI.Client/package.json @@ -51,7 +51,7 @@ "ng-file-upload": "12.2.13", "nouislider": "15.7.1", "spectrum-colorpicker2": "2.0.10", - "tinymce": "6.5.1", + "tinymce": "6.7.3", "typeahead.js": "0.11.1", "underscore": "1.13.6", "wicg-inert": "3.1.2" From a4c7047a5059ea6a4975ef68a9b5599cee11affb Mon Sep 17 00:00:00 2001 From: Kenn Jacobsen Date: Mon, 20 Nov 2023 11:01:36 +0100 Subject: [PATCH 15/38] Add output caching to the Delivery API (#15216) --- .../Caching/DeliveryApiOutputCachePolicy.cs | 32 ++++++++++++++ .../Caching/OutputCachePipelineFilter.cs | 14 ++++++ .../Content/ContentApiControllerBase.cs | 3 ++ .../Media/MediaApiControllerBase.cs | 3 ++ .../UmbracoBuilderExtensions.cs | 37 +++++++++++++++- .../Models/DeliveryApiSettings.cs | 43 +++++++++++++++++++ src/Umbraco.Core/Constants-DeliveryApi.cs | 16 +++++++ 7 files changed, 147 insertions(+), 1 deletion(-) create mode 100644 src/Umbraco.Cms.Api.Delivery/Caching/DeliveryApiOutputCachePolicy.cs create mode 100644 src/Umbraco.Cms.Api.Delivery/Caching/OutputCachePipelineFilter.cs diff --git a/src/Umbraco.Cms.Api.Delivery/Caching/DeliveryApiOutputCachePolicy.cs b/src/Umbraco.Cms.Api.Delivery/Caching/DeliveryApiOutputCachePolicy.cs new file mode 100644 index 0000000000..da1580554c --- /dev/null +++ b/src/Umbraco.Cms.Api.Delivery/Caching/DeliveryApiOutputCachePolicy.cs @@ -0,0 +1,32 @@ +using Microsoft.AspNetCore.OutputCaching; +using Microsoft.Extensions.DependencyInjection; +using Umbraco.Cms.Core.DeliveryApi; + +namespace Umbraco.Cms.Api.Delivery.Caching; + +internal sealed class DeliveryApiOutputCachePolicy : IOutputCachePolicy +{ + private readonly TimeSpan _duration; + + public DeliveryApiOutputCachePolicy(TimeSpan duration) + => _duration = duration; + + ValueTask IOutputCachePolicy.CacheRequestAsync(OutputCacheContext context, CancellationToken cancellationToken) + { + IRequestPreviewService requestPreviewService = context + .HttpContext + .RequestServices + .GetRequiredService(); + + context.EnableOutputCaching = requestPreviewService.IsPreview() is false; + context.ResponseExpirationTimeSpan = _duration; + + return ValueTask.CompletedTask; + } + + ValueTask IOutputCachePolicy.ServeFromCacheAsync(OutputCacheContext context, CancellationToken cancellationToken) + => ValueTask.CompletedTask; + + ValueTask IOutputCachePolicy.ServeResponseAsync(OutputCacheContext context, CancellationToken cancellationToken) + => ValueTask.CompletedTask; +} diff --git a/src/Umbraco.Cms.Api.Delivery/Caching/OutputCachePipelineFilter.cs b/src/Umbraco.Cms.Api.Delivery/Caching/OutputCachePipelineFilter.cs new file mode 100644 index 0000000000..89ff10462c --- /dev/null +++ b/src/Umbraco.Cms.Api.Delivery/Caching/OutputCachePipelineFilter.cs @@ -0,0 +1,14 @@ +using Microsoft.AspNetCore.Builder; +using Umbraco.Cms.Web.Common.ApplicationBuilder; + +namespace Umbraco.Cms.Api.Delivery.Caching; + +internal sealed class OutputCachePipelineFilter : UmbracoPipelineFilter +{ + public OutputCachePipelineFilter(string name) + : base(name) + => PostPipeline = PostPipelineAction; + + private void PostPipelineAction(IApplicationBuilder applicationBuilder) + => applicationBuilder.UseOutputCache(); +} diff --git a/src/Umbraco.Cms.Api.Delivery/Controllers/Content/ContentApiControllerBase.cs b/src/Umbraco.Cms.Api.Delivery/Controllers/Content/ContentApiControllerBase.cs index 405da6e15f..4637055c11 100644 --- a/src/Umbraco.Cms.Api.Delivery/Controllers/Content/ContentApiControllerBase.cs +++ b/src/Umbraco.Cms.Api.Delivery/Controllers/Content/ContentApiControllerBase.cs @@ -1,8 +1,10 @@ using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.OutputCaching; using Umbraco.Cms.Api.Common.Builders; using Umbraco.Cms.Api.Delivery.Filters; using Umbraco.Cms.Api.Delivery.Routing; +using Umbraco.Cms.Core; using Umbraco.Cms.Core.DeliveryApi; using Umbraco.Cms.Core.Services.OperationStatus; @@ -13,6 +15,7 @@ namespace Umbraco.Cms.Api.Delivery.Controllers.Content; [ApiExplorerSettings(GroupName = "Content")] [LocalizeFromAcceptLanguageHeader] [ValidateStartItem] +[OutputCache(PolicyName = Constants.DeliveryApi.OutputCache.ContentCachePolicy)] public abstract class ContentApiControllerBase : DeliveryApiControllerBase { protected IApiPublishedContentCache ApiPublishedContentCache { get; } diff --git a/src/Umbraco.Cms.Api.Delivery/Controllers/Media/MediaApiControllerBase.cs b/src/Umbraco.Cms.Api.Delivery/Controllers/Media/MediaApiControllerBase.cs index 73a385fd2e..5a9bc4763e 100644 --- a/src/Umbraco.Cms.Api.Delivery/Controllers/Media/MediaApiControllerBase.cs +++ b/src/Umbraco.Cms.Api.Delivery/Controllers/Media/MediaApiControllerBase.cs @@ -1,7 +1,9 @@ using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.OutputCaching; using Umbraco.Cms.Api.Common.Builders; using Umbraco.Cms.Api.Delivery.Filters; using Umbraco.Cms.Api.Delivery.Routing; +using Umbraco.Cms.Core; using Umbraco.Cms.Core.Models.DeliveryApi; using Umbraco.Cms.Core.Models.PublishedContent; using Umbraco.Cms.Core.PublishedCache; @@ -14,6 +16,7 @@ namespace Umbraco.Cms.Api.Delivery.Controllers.Media; [DeliveryApiMediaAccess] [VersionedDeliveryApiRoute("media")] [ApiExplorerSettings(GroupName = "Media")] +[OutputCache(PolicyName = Constants.DeliveryApi.OutputCache.MediaCachePolicy)] public abstract class MediaApiControllerBase : DeliveryApiControllerBase { private readonly IApiMediaWithCropsResponseBuilder _apiMediaWithCropsResponseBuilder; diff --git a/src/Umbraco.Cms.Api.Delivery/DependencyInjection/UmbracoBuilderExtensions.cs b/src/Umbraco.Cms.Api.Delivery/DependencyInjection/UmbracoBuilderExtensions.cs index f17fc14773..9f56f591ce 100644 --- a/src/Umbraco.Cms.Api.Delivery/DependencyInjection/UmbracoBuilderExtensions.cs +++ b/src/Umbraco.Cms.Api.Delivery/DependencyInjection/UmbracoBuilderExtensions.cs @@ -3,9 +3,11 @@ using System.Text.Json.Serialization; using Asp.Versioning; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Routing; +using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Umbraco.Cms.Api.Common.DependencyInjection; using Umbraco.Cms.Api.Delivery.Accessors; +using Umbraco.Cms.Api.Delivery.Caching; using Umbraco.Cms.Api.Delivery.Configuration; using Umbraco.Cms.Api.Delivery.Handlers; using Umbraco.Cms.Api.Delivery.Json; @@ -14,10 +16,12 @@ using Umbraco.Cms.Api.Delivery.Routing; using Umbraco.Cms.Api.Delivery.Security; using Umbraco.Cms.Api.Delivery.Services; using Umbraco.Cms.Core; +using Umbraco.Cms.Core.Configuration.Models; using Umbraco.Cms.Core.DeliveryApi; using Umbraco.Cms.Core.DependencyInjection; using Umbraco.Cms.Core.Notifications; using Umbraco.Cms.Infrastructure.Security; +using Umbraco.Cms.Web.Common.ApplicationBuilder; namespace Umbraco.Extensions; @@ -79,7 +83,38 @@ public static class UmbracoBuilderExtensions // FIXME: remove this when Delivery API V1 is removed builder.Services.AddSingleton(); + + builder.AddOutputCache(); + return builder; + } + + private static IUmbracoBuilder AddOutputCache(this IUmbracoBuilder builder) + { + DeliveryApiSettings.OutputCacheSettings outputCacheSettings = + builder.Config.GetSection(Constants.Configuration.ConfigDeliveryApi).Get()?.OutputCache + ?? new DeliveryApiSettings.OutputCacheSettings(); + + if (outputCacheSettings.Enabled is false || outputCacheSettings is { ContentDuration.TotalSeconds: <= 0, MediaDuration.TotalSeconds: <= 0 }) + { + return builder; + } + + builder.Services.AddOutputCache(options => + { + options.AddBasePolicy(_ => { }); + + if (outputCacheSettings.ContentDuration.TotalSeconds > 0) + { + options.AddPolicy(Constants.DeliveryApi.OutputCache.ContentCachePolicy, new DeliveryApiOutputCachePolicy(outputCacheSettings.ContentDuration)); + } + + if (outputCacheSettings.MediaDuration.TotalSeconds > 0) + { + options.AddPolicy(Constants.DeliveryApi.OutputCache.MediaCachePolicy, new DeliveryApiOutputCachePolicy(outputCacheSettings.MediaDuration)); + } + }); + + builder.Services.Configure(options => options.AddFilter(new OutputCachePipelineFilter("UmbracoDeliveryApiOutputCache"))); return builder; } } - diff --git a/src/Umbraco.Core/Configuration/Models/DeliveryApiSettings.cs b/src/Umbraco.Core/Configuration/Models/DeliveryApiSettings.cs index c81102b8d2..1f75d47055 100644 --- a/src/Umbraco.Core/Configuration/Models/DeliveryApiSettings.cs +++ b/src/Umbraco.Core/Configuration/Models/DeliveryApiSettings.cs @@ -59,6 +59,11 @@ public class DeliveryApiSettings /// public MemberAuthorizationSettings? MemberAuthorization { get; set; } = null; + /// + /// Gets or sets the settings for the Delivery API output cache. + /// + public OutputCacheSettings OutputCache { get; set; } = new (); + /// /// Gets a value indicating if any member authorization type is enabled for the Delivery API. /// @@ -138,4 +143,42 @@ public class DeliveryApiSettings /// These are only required if logout is to be used. public Uri[] LogoutRedirectUrls { get; set; } = Array.Empty(); } + + /// + /// Typed configuration options for output caching of the Delivery API. + /// + public class OutputCacheSettings + { + private const string StaticDuration = "00:01:00"; // one minute + + /// + /// Gets or sets a value indicating whether the Delivery API output should be cached. + /// + /// true if the Delivery API output should be cached; otherwise, false. + /// + /// The default value is false. + /// + [DefaultValue(StaticEnabled)] + public bool Enabled { get; set; } = StaticEnabled; + + /// + /// Gets or sets a value indicating how long the Content Delivery API output should be cached. + /// + /// Cache lifetime. + /// + /// The default cache duration is one minute, if this configuration value is not provided. + /// + [DefaultValue(StaticDuration)] + public TimeSpan ContentDuration { get; set; } = TimeSpan.Parse(StaticDuration); + + /// + /// Gets or sets a value indicating how long the Media Delivery API output should be cached. + /// + /// Cache lifetime. + /// + /// The default cache duration is one minute, if this configuration value is not provided. + /// + [DefaultValue(StaticDuration)] + public TimeSpan MediaDuration { get; set; } = TimeSpan.Parse(StaticDuration); + } } diff --git a/src/Umbraco.Core/Constants-DeliveryApi.cs b/src/Umbraco.Core/Constants-DeliveryApi.cs index e2f23e414c..85677a23bc 100644 --- a/src/Umbraco.Core/Constants-DeliveryApi.cs +++ b/src/Umbraco.Core/Constants-DeliveryApi.cs @@ -17,5 +17,21 @@ public static partial class Constants /// public const string PreviewContentPathPrefix = "preview-"; } + + /// + /// Constants for Delivery API output cache. + /// + public static class OutputCache + { + /// + /// Output cache policy name for content + /// + public const string ContentCachePolicy = "DeliveryApiContent"; + + /// + /// Output cache policy name for media + /// + public const string MediaCachePolicy = "DeliveryApiMedia"; + } } } From 3ff6bd191ac298002488a11cf20e182eaec2f91f Mon Sep 17 00:00:00 2001 From: Bjarne Fyrstenborg Date: Tue, 21 Nov 2023 09:24:48 +0100 Subject: [PATCH 16/38] V13: Webhook logs formatting (#15246) * Use code snippet component for request and response * Change overlay size to medium * Format log date * Handle JS as JavaScript * Try format JSON * Update less syntax * Add word wrap * Formatting * Update variable * Remove unused editorService * Add missing details controller and fix formatting in catch block * Set data object * Update overlay size to match umb-editor overlay * Use editorService instead to show details on overlay * Add general box header (cherry picked from commit 13db9b308e89a612a08520e782f6b239de1f49d0) --- .../components/umbcodesnippet.directive.js | 10 +- .../src/less/components/overlays.less | 27 ++-- .../src/less/components/umb-code-snippet.less | 13 +- .../views/components/umb-code-snippet.html | 2 +- .../richtextrule/richtextrule.html | 2 +- .../src/views/webhooks/logs.controller.js | 21 ++- .../src/views/webhooks/logs.html | 2 +- .../webhooks/overlays/details.controller.js | 33 +++++ .../src/views/webhooks/overlays/details.html | 126 ++++++++++++------ .../webhooks/overlays/header.controller.js | 4 +- .../src/views/webhooks/webhooks.controller.js | 2 +- 11 files changed, 178 insertions(+), 64 deletions(-) create mode 100644 src/Umbraco.Web.UI.Client/src/views/webhooks/overlays/details.controller.js diff --git a/src/Umbraco.Web.UI.Client/src/common/directives/components/umbcodesnippet.directive.js b/src/Umbraco.Web.UI.Client/src/common/directives/components/umbcodesnippet.directive.js index f0dad31ee2..e0ac1a10a5 100644 --- a/src/Umbraco.Web.UI.Client/src/common/directives/components/umbcodesnippet.directive.js +++ b/src/Umbraco.Web.UI.Client/src/common/directives/components/umbcodesnippet.directive.js @@ -1,4 +1,4 @@ -/** +/** @ngdoc directive @name umbraco.directives.directive:umbCodeSnippet @restrict E @@ -47,7 +47,8 @@ controllerAs: 'vm', transclude: true, bindings: { - language: '<' + language: '<', + wrap: ' +
{{vm.language}} diff --git a/src/Umbraco.Web.UI.Client/src/views/stylesheets/infiniteeditors/richtextrule/richtextrule.html b/src/Umbraco.Web.UI.Client/src/views/stylesheets/infiniteeditors/richtextrule/richtextrule.html index 20c62cbd77..c190921dcb 100644 --- a/src/Umbraco.Web.UI.Client/src/views/stylesheets/infiniteeditors/richtextrule/richtextrule.html +++ b/src/Umbraco.Web.UI.Client/src/views/stylesheets/infiniteeditors/richtextrule/richtextrule.html @@ -64,7 +64,7 @@ action="vm.submit(model)"> - + diff --git a/src/Umbraco.Web.UI.Client/src/views/webhooks/logs.controller.js b/src/Umbraco.Web.UI.Client/src/views/webhooks/logs.controller.js index b278638e34..c6b45530d8 100644 --- a/src/Umbraco.Web.UI.Client/src/views/webhooks/logs.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/webhooks/logs.controller.js @@ -1,7 +1,7 @@ (function () { "use strict"; - function WebhookLogController($q, webhooksResource, overlayService) { + function WebhookLogController($q, webhooksResource, editorService, userService, dateHelper) { const vm = this; @@ -25,20 +25,33 @@ return webhooksResource.getLogs() .then(data => { vm.logs = data.items; + vm.logs.forEach(log => { + formatDatesToLocal(log); + }); }); } + function formatDatesToLocal(log) { + userService.getCurrentUser().then(currentUser => { + log.formattedLogDate = dateHelper.getLocalDate(log.date, currentUser.locale, "LLL"); + }); + } + function openLogOverlay(log) { - overlayService.open({ + + const dialog = { view: "views/webhooks/overlays/details.html", title: 'Details', position: 'right', + size: 'medium', log, currentUser: this.currentUser, close: () => { - overlayService.close(); + editorService.close(); } - }); + }; + + editorService.open(dialog); } function isChecked(log) { diff --git a/src/Umbraco.Web.UI.Client/src/views/webhooks/logs.html b/src/Umbraco.Web.UI.Client/src/views/webhooks/logs.html index f2db3096af..9eec01ce05 100644 --- a/src/Umbraco.Web.UI.Client/src/views/webhooks/logs.html +++ b/src/Umbraco.Web.UI.Client/src/views/webhooks/logs.html @@ -20,7 +20,7 @@ {{ log.webhookKey }} - {{ log.date }} + {{ log.formattedLogDate }} {{ log.url }} {{ log.eventAlias }} {{ log.retryCount }} diff --git a/src/Umbraco.Web.UI.Client/src/views/webhooks/overlays/details.controller.js b/src/Umbraco.Web.UI.Client/src/views/webhooks/overlays/details.controller.js new file mode 100644 index 0000000000..39d25c0205 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/views/webhooks/overlays/details.controller.js @@ -0,0 +1,33 @@ +(function () { + "use strict"; + function DetailsController($scope) { + const vm = this; + + vm.close = close; + vm.formatData = formatData; + + function formatData(data) { + + let obj = data; + + if (data.detectIsJson()) { + try { + obj = Utilities.fromJson(data) + } catch (err) { + obj = data; + } + } + + return obj; + } + + function close() { + if ($scope.model && $scope.model.close) { + $scope.model.close(); + } + } + + } + + angular.module("umbraco").controller("Umbraco.Editors.Webhooks.DetailsController", DetailsController); +})(); diff --git a/src/Umbraco.Web.UI.Client/src/views/webhooks/overlays/details.html b/src/Umbraco.Web.UI.Client/src/views/webhooks/overlays/details.html index d66c1463e7..d1ce18477e 100644 --- a/src/Umbraco.Web.UI.Client/src/views/webhooks/overlays/details.html +++ b/src/Umbraco.Web.UI.Client/src/views/webhooks/overlays/details.html @@ -1,43 +1,85 @@ -
-
-
-
- - -
-
{{model.webhookLogEntry.response.statusDescription}} ({{model.webhookLogEntry.response.statusCode}})
-
-
-
- Date -
{{model.log.date}}
-
-
- Url -
{{model.log.url}}
-
-
- Status code -
{{model.log.statusCode}}
-
-
- Event -
{{model.log.eventAlias}}
-
-
- Retry count -
{{model.log.retryCount}}
-
-
- Request -
{{model.log.requestHeaders}}
----
-{{model.log.requestBody}}
-
-
- Response -
{{model.log.responseHeaders}}
----
-{{model.log.responseBody}}
-
+
+ + + + + + + + + + + + + +
+
+ + +
+
{{model.webhookLogEntry.response.statusDescription}} ({{model.webhookLogEntry.response.statusCode}})
+
+
+ + +
{{model.log.formattedLogDate}}
+
+ + +
{{model.log.url}}
+
+ + +
{{model.log.statusCode}}
+
+ + +
{{model.log.eventAlias}}
+
+ + +
{{model.log.retryCount}}
+
+ +
+ +
+ + + + +
{{model.log.requestHeaders}}
+ {{vm.formatData(model.log.requestBody) | json}} +
+
+ + + + +
{{model.log.responseHeaders}}
+ {{vm.formatData(model.log.responseBody) | json}} +
+
+ +
+ + + + + + + + +
+
diff --git a/src/Umbraco.Web.UI.Client/src/views/webhooks/overlays/header.controller.js b/src/Umbraco.Web.UI.Client/src/views/webhooks/overlays/header.controller.js index 298cb95bd8..baa816146a 100644 --- a/src/Umbraco.Web.UI.Client/src/views/webhooks/overlays/header.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/webhooks/overlays/header.controller.js @@ -10,13 +10,13 @@ $scope.headerModel = { key: "", value: "" }; - function submit () { + function submit() { if ($scope.headerModel.key && $scope.headerModel.value) { $scope.model.submit($scope.headerModel); } } - function close () { + function close() { $scope.model.close(); } } diff --git a/src/Umbraco.Web.UI.Client/src/views/webhooks/webhooks.controller.js b/src/Umbraco.Web.UI.Client/src/views/webhooks/webhooks.controller.js index 10a0f51c08..ff4e214596 100644 --- a/src/Umbraco.Web.UI.Client/src/views/webhooks/webhooks.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/webhooks/webhooks.controller.js @@ -1,7 +1,7 @@ (function () { "use strict"; - function WebhookController($q, $timeout, $location, $routeParams, webhooksResource, navigationService, notificationsService, editorService, overlayService, contentTypeResource, mediaTypeResource, memberTypeResource) { + function WebhookController($q, $timeout, $location, $routeParams, webhooksResource, navigationService, notificationsService, overlayService, contentTypeResource, mediaTypeResource, memberTypeResource) { const vm = this; From 48bfbb00cda69c02a0d8bb76336992a0fefa5ce5 Mon Sep 17 00:00:00 2001 From: Ronald Barendse Date: Tue, 21 Nov 2023 10:28:26 +0100 Subject: [PATCH 17/38] Clear cached PublishedDataTypes when content types are updated (#15253) * Clear cached PublishedDataTypes when content types are updated * Optimize published data type cache initialization --- .../IPublishedContentTypeFactory.cs | 2 +- .../PublishedContentTypeFactory.cs | 38 +++++++++---------- .../PublishedSnapshotService.cs | 3 ++ 3 files changed, 23 insertions(+), 20 deletions(-) diff --git a/src/Umbraco.Core/Models/PublishedContent/IPublishedContentTypeFactory.cs b/src/Umbraco.Core/Models/PublishedContent/IPublishedContentTypeFactory.cs index 09e9a00389..009666aab5 100644 --- a/src/Umbraco.Core/Models/PublishedContent/IPublishedContentTypeFactory.cs +++ b/src/Umbraco.Core/Models/PublishedContent/IPublishedContentTypeFactory.cs @@ -60,5 +60,5 @@ public interface IPublishedContentTypeFactory /// This is so the factory can flush its caches. /// Invoked by the IPublishedSnapshotService. /// - void NotifyDataTypeChanges(int[] ids); + void NotifyDataTypeChanges(params int[] ids); } diff --git a/src/Umbraco.Core/Models/PublishedContent/PublishedContentTypeFactory.cs b/src/Umbraco.Core/Models/PublishedContent/PublishedContentTypeFactory.cs index f2b1b9bbca..6cda67e975 100644 --- a/src/Umbraco.Core/Models/PublishedContent/PublishedContentTypeFactory.cs +++ b/src/Umbraco.Core/Models/PublishedContent/PublishedContentTypeFactory.cs @@ -10,8 +10,8 @@ public class PublishedContentTypeFactory : IPublishedContentTypeFactory { private readonly IDataTypeService _dataTypeService; private readonly PropertyValueConverterCollection _propertyValueConverters; - private readonly object _publishedDataTypesLocker = new(); private readonly IPublishedModelFactory _publishedModelFactory; + private object _publishedDataTypesLocker = new(); private Dictionary? _publishedDataTypes; public PublishedContentTypeFactory( @@ -52,19 +52,12 @@ public class PublishedContentTypeFactory : IPublishedContentTypeFactory /// public PublishedDataType GetDataType(int id) { - Dictionary? publishedDataTypes; - lock (_publishedDataTypesLocker) - { - if (_publishedDataTypes == null) - { - IEnumerable dataTypes = _dataTypeService.GetAll(); - _publishedDataTypes = dataTypes.ToDictionary(x => x.Id, CreatePublishedDataType); - } + Dictionary publishedDataTypes = LazyInitializer.EnsureInitialized( + ref _publishedDataTypes, + ref _publishedDataTypesLocker, + () => _dataTypeService.GetAll().ToDictionary(x => x.Id, CreatePublishedDataType)); - publishedDataTypes = _publishedDataTypes; - } - - if (publishedDataTypes is null || !publishedDataTypes.TryGetValue(id, out PublishedDataType? dataType)) + if (!publishedDataTypes.TryGetValue(id, out PublishedDataType? dataType)) { throw new ArgumentException($"Could not find a datatype with identifier {id}.", nameof(id)); } @@ -73,24 +66,31 @@ public class PublishedContentTypeFactory : IPublishedContentTypeFactory } /// - public void NotifyDataTypeChanges(int[] ids) + public void NotifyDataTypeChanges(params int[] ids) { + if (_publishedDataTypes is null) + { + // Not initialized yet, so skip and avoid lock + return; + } + lock (_publishedDataTypesLocker) { - if (_publishedDataTypes == null) + if (ids.Length == 0) { - IEnumerable dataTypes = _dataTypeService.GetAll(); - _publishedDataTypes = dataTypes.ToDictionary(x => x.Id, CreatePublishedDataType); + // Clear cache (and let it lazy initialize again later) + _publishedDataTypes = null; } else { + // Remove items from cache (in case the data type is removed) foreach (var id in ids) { _publishedDataTypes.Remove(id); } - IEnumerable dataTypes = _dataTypeService.GetAll(ids); - foreach (IDataType dataType in dataTypes) + // Update cacheB + foreach (IDataType dataType in _dataTypeService.GetAll(ids)) { _publishedDataTypes[dataType.Id] = CreatePublishedDataType(dataType); } diff --git a/src/Umbraco.PublishedCache.NuCache/PublishedSnapshotService.cs b/src/Umbraco.PublishedCache.NuCache/PublishedSnapshotService.cs index a7f8c42823..6ab806c8df 100644 --- a/src/Umbraco.PublishedCache.NuCache/PublishedSnapshotService.cs +++ b/src/Umbraco.PublishedCache.NuCache/PublishedSnapshotService.cs @@ -189,6 +189,9 @@ internal class PublishedSnapshotService : IPublishedSnapshotService } } + // Ensure all published data types are updated + _publishedContentTypeFactory.NotifyDataTypeChanges(); + Notify(_contentStore, payloads, RefreshContentTypesLocked); Notify(_mediaStore, payloads, RefreshMediaTypesLocked); From 93c46b1d1016fa5922b38bbc33fa0109ad328e0e Mon Sep 17 00:00:00 2001 From: Ronald Barendse Date: Tue, 21 Nov 2023 09:56:05 +0100 Subject: [PATCH 18/38] Remove explicit SourceLink package reference (included in .NET 8 SDK) --- Directory.Build.props | 1 - 1 file changed, 1 deletion(-) diff --git a/Directory.Build.props b/Directory.Build.props index 0364d4e086..3d88654e45 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -37,7 +37,6 @@ - From a77b77d98ad2797d9f8fde864fd4d93a82007708 Mon Sep 17 00:00:00 2001 From: Ronald Barendse Date: Tue, 21 Nov 2023 09:58:29 +0100 Subject: [PATCH 19/38] Remove AngleSharp package reference --- .../Umbraco.Tests.UnitTests.csproj | 1 - .../Controllers/MemberControllerUnitTests.cs | 8 ++------ 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/tests/Umbraco.Tests.UnitTests/Umbraco.Tests.UnitTests.csproj b/tests/Umbraco.Tests.UnitTests/Umbraco.Tests.UnitTests.csproj index 30616ec926..8120ab343a 100644 --- a/tests/Umbraco.Tests.UnitTests/Umbraco.Tests.UnitTests.csproj +++ b/tests/Umbraco.Tests.UnitTests/Umbraco.Tests.UnitTests.csproj @@ -5,7 +5,6 @@ - diff --git a/tests/Umbraco.Tests.UnitTests/Umbraco.Web.BackOffice/Controllers/MemberControllerUnitTests.cs b/tests/Umbraco.Tests.UnitTests/Umbraco.Web.BackOffice/Controllers/MemberControllerUnitTests.cs index 79038453ad..6a9559f14c 100644 --- a/tests/Umbraco.Tests.UnitTests/Umbraco.Web.BackOffice/Controllers/MemberControllerUnitTests.cs +++ b/tests/Umbraco.Tests.UnitTests/Umbraco.Web.BackOffice/Controllers/MemberControllerUnitTests.cs @@ -1,8 +1,4 @@ -using System.Collections.Generic; using System.Data; -using System.Linq; -using System.Threading.Tasks; -using AngleSharp.Common; using AutoFixture.NUnit3; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Identity; @@ -782,8 +778,8 @@ public class MemberControllerUnitTests for (var index = 0; index < resultValue.Properties.Count(); index++) { Assert.AreNotSame( - memberDisplay.Properties.GetItemByIndex(index), - resultValue.Properties.GetItemByIndex(index)); + memberDisplay.Properties.ElementAt(index), + resultValue.Properties.ElementAt(index)); // Assert.AreEqual(memberDisplay.Properties.GetItemByIndex(index), resultValue.Properties.GetItemByIndex(index)); } From 49fc7f978677d358c1d22d7a00744987554b92a5 Mon Sep 17 00:00:00 2001 From: Ronald Barendse Date: Tue, 21 Nov 2023 10:00:45 +0100 Subject: [PATCH 20/38] Update to OpenIddict 4.10.0 --- src/Umbraco.Cms.Api.Common/Umbraco.Cms.Api.Common.csproj | 4 ++-- .../Umbraco.Cms.Persistence.EFCore.csproj | 4 ++-- src/Umbraco.Infrastructure/Umbraco.Infrastructure.csproj | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Umbraco.Cms.Api.Common/Umbraco.Cms.Api.Common.csproj b/src/Umbraco.Cms.Api.Common/Umbraco.Cms.Api.Common.csproj index 87c7df47b1..b6f8e44c5d 100644 --- a/src/Umbraco.Cms.Api.Common/Umbraco.Cms.Api.Common.csproj +++ b/src/Umbraco.Cms.Api.Common/Umbraco.Cms.Api.Common.csproj @@ -10,8 +10,8 @@ - - + + diff --git a/src/Umbraco.Cms.Persistence.EFCore/Umbraco.Cms.Persistence.EFCore.csproj b/src/Umbraco.Cms.Persistence.EFCore/Umbraco.Cms.Persistence.EFCore.csproj index d2c8c64405..538a4d9f25 100644 --- a/src/Umbraco.Cms.Persistence.EFCore/Umbraco.Cms.Persistence.EFCore.csproj +++ b/src/Umbraco.Cms.Persistence.EFCore/Umbraco.Cms.Persistence.EFCore.csproj @@ -7,8 +7,8 @@ - - + + diff --git a/src/Umbraco.Infrastructure/Umbraco.Infrastructure.csproj b/src/Umbraco.Infrastructure/Umbraco.Infrastructure.csproj index 76c04063a7..5226c24e79 100644 --- a/src/Umbraco.Infrastructure/Umbraco.Infrastructure.csproj +++ b/src/Umbraco.Infrastructure/Umbraco.Infrastructure.csproj @@ -26,7 +26,7 @@ - + From e22c43b4716983490964c705844025966d7d5b88 Mon Sep 17 00:00:00 2001 From: Ronald Barendse Date: Tue, 21 Nov 2023 10:36:29 +0100 Subject: [PATCH 21/38] Update to Serilog 8.0.0 --- src/Umbraco.Infrastructure/Umbraco.Infrastructure.csproj | 4 ++-- src/Umbraco.Web.BackOffice/Umbraco.Web.BackOffice.csproj | 2 +- src/Umbraco.Web.Common/Umbraco.Web.Common.csproj | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Umbraco.Infrastructure/Umbraco.Infrastructure.csproj b/src/Umbraco.Infrastructure/Umbraco.Infrastructure.csproj index 5226c24e79..67afb4baa3 100644 --- a/src/Umbraco.Infrastructure/Umbraco.Infrastructure.csproj +++ b/src/Umbraco.Infrastructure/Umbraco.Infrastructure.csproj @@ -31,10 +31,10 @@ - + - + diff --git a/src/Umbraco.Web.BackOffice/Umbraco.Web.BackOffice.csproj b/src/Umbraco.Web.BackOffice/Umbraco.Web.BackOffice.csproj index a64d0d2408..c8b09bcad5 100644 --- a/src/Umbraco.Web.BackOffice/Umbraco.Web.BackOffice.csproj +++ b/src/Umbraco.Web.BackOffice/Umbraco.Web.BackOffice.csproj @@ -12,7 +12,7 @@ - + diff --git a/src/Umbraco.Web.Common/Umbraco.Web.Common.csproj b/src/Umbraco.Web.Common/Umbraco.Web.Common.csproj index 5688c37c5b..e5cb683865 100644 --- a/src/Umbraco.Web.Common/Umbraco.Web.Common.csproj +++ b/src/Umbraco.Web.Common/Umbraco.Web.Common.csproj @@ -13,7 +13,7 @@ - + From 40dd163e3a1ae04570b50b1b117c0039eb8f3364 Mon Sep 17 00:00:00 2001 From: Ronald Barendse Date: Fri, 17 Nov 2023 12:01:18 +0100 Subject: [PATCH 22/38] Update to Microsoft.ICU.ICU4C.Runtime 72.1.0.3 --- templates/UmbracoProject/UmbracoProject.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/templates/UmbracoProject/UmbracoProject.csproj b/templates/UmbracoProject/UmbracoProject.csproj index 4e51364079..ee8dd5e56e 100644 --- a/templates/UmbracoProject/UmbracoProject.csproj +++ b/templates/UmbracoProject/UmbracoProject.csproj @@ -12,8 +12,8 @@ - - + + From 28550b88c845e1921ed99537497d5e53ac2727d2 Mon Sep 17 00:00:00 2001 From: Ronald Barendse Date: Tue, 21 Nov 2023 11:39:04 +0100 Subject: [PATCH 23/38] Remove implicitly set EmbedUntrackedSources property --- Directory.Build.props | 1 - global.json | 3 +-- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/Directory.Build.props b/Directory.Build.props index 3d88654e45..4c315660e6 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -22,7 +22,6 @@ true - true true snupkg diff --git a/global.json b/global.json index 4c4c3ae5ed..391ba3c2a3 100644 --- a/global.json +++ b/global.json @@ -1,7 +1,6 @@ { "sdk": { "version": "8.0.100", - "rollForward": "latestFeature", - "allowPrerelease": false + "rollForward": "latestFeature" } } From 4b602dc8e2b009269ee79bf0a06b15d31f5de83c Mon Sep 17 00:00:00 2001 From: Ronald Barendse Date: Tue, 21 Nov 2023 12:08:51 +0100 Subject: [PATCH 24/38] Fix incorrect merge resolution of package dependencies --- .../Umbraco.Cms.Persistence.EFCore.Sqlite.csproj | 3 +-- src/Umbraco.Core/Umbraco.Core.csproj | 7 ------- 2 files changed, 1 insertion(+), 9 deletions(-) diff --git a/src/Umbraco.Cms.Persistence.EFCore.Sqlite/Umbraco.Cms.Persistence.EFCore.Sqlite.csproj b/src/Umbraco.Cms.Persistence.EFCore.Sqlite/Umbraco.Cms.Persistence.EFCore.Sqlite.csproj index 84e88c3523..e17f16b8bb 100644 --- a/src/Umbraco.Cms.Persistence.EFCore.Sqlite/Umbraco.Cms.Persistence.EFCore.Sqlite.csproj +++ b/src/Umbraco.Cms.Persistence.EFCore.Sqlite/Umbraco.Cms.Persistence.EFCore.Sqlite.csproj @@ -1,4 +1,4 @@ - + Umbraco CMS - Persistence - Entity Framework Core - SQLite migrations Adds support for Entity Framework Core SQLite migrations to Umbraco CMS. @@ -6,7 +6,6 @@ - diff --git a/src/Umbraco.Core/Umbraco.Core.csproj b/src/Umbraco.Core/Umbraco.Core.csproj index 7a45a2ea14..7e56ff8f76 100644 --- a/src/Umbraco.Core/Umbraco.Core.csproj +++ b/src/Umbraco.Core/Umbraco.Core.csproj @@ -19,13 +19,6 @@ - - - - - - - <_Parameter1>Umbraco.Tests From 4b60394488ae4fd2acdcc859c208ba477157c24e Mon Sep 17 00:00:00 2001 From: Ronald Barendse Date: Tue, 21 Nov 2023 13:35:36 +0100 Subject: [PATCH 25/38] Update ImageSharp2 dependency and add upper version limit --- .../Umbraco.Cms.Imaging.ImageSharp2.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Umbraco.Cms.Imaging.ImageSharp2/Umbraco.Cms.Imaging.ImageSharp2.csproj b/src/Umbraco.Cms.Imaging.ImageSharp2/Umbraco.Cms.Imaging.ImageSharp2.csproj index 14c203bad6..84370a54c2 100644 --- a/src/Umbraco.Cms.Imaging.ImageSharp2/Umbraco.Cms.Imaging.ImageSharp2.csproj +++ b/src/Umbraco.Cms.Imaging.ImageSharp2/Umbraco.Cms.Imaging.ImageSharp2.csproj @@ -5,8 +5,8 @@ - - + + From 4c3b4752dbfa4d0041523d930ded3160a6cb33f9 Mon Sep 17 00:00:00 2001 From: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com> Date: Tue, 21 Nov 2023 13:55:52 +0100 Subject: [PATCH 26/38] V13: Change WebhookLog status for clarity (#15247) * Refactor to show icon and status code to make status more clear * Fix up migration * Add change log status migration * Fix up frontend to display cross when fail --------- Co-authored-by: Zeegaan --- .../Services/WebhookLogFactory.cs | 7 ++- .../Migrations/Upgrade/UmbracoPlan.cs | 1 + .../Upgrade/V_13_0_0/ChangeLogStatusCode.cs | 45 +++++++++++++++++++ .../src/views/webhooks/logs.controller.js | 2 +- .../src/views/webhooks/logs.html | 3 +- .../src/views/webhooks/overlays/details.html | 14 +++--- 6 files changed, 59 insertions(+), 13 deletions(-) create mode 100644 src/Umbraco.Infrastructure/Migrations/Upgrade/V_13_0_0/ChangeLogStatusCode.cs diff --git a/src/Umbraco.Core/Services/WebhookLogFactory.cs b/src/Umbraco.Core/Services/WebhookLogFactory.cs index 455bc45e27..e798b2b2aa 100644 --- a/src/Umbraco.Core/Services/WebhookLogFactory.cs +++ b/src/Umbraco.Core/Services/WebhookLogFactory.cs @@ -1,4 +1,5 @@ -using Umbraco.Cms.Core.Models; +using System.Net; +using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Webhooks; namespace Umbraco.Cms.Core.Services; @@ -20,7 +21,7 @@ public class WebhookLogFactory : IWebhookLogFactory { log.RequestBody = await responseModel.HttpResponseMessage!.RequestMessage!.Content!.ReadAsStringAsync(cancellationToken); log.ResponseBody = await responseModel.HttpResponseMessage.Content.ReadAsStringAsync(cancellationToken); - log.StatusCode = responseModel.HttpResponseMessage.StatusCode.ToString(); + log.StatusCode = MapStatusCodeToMessage(responseModel.HttpResponseMessage.StatusCode); log.RetryCount = responseModel.RetryCount; log.ResponseHeaders = responseModel.HttpResponseMessage.Headers.ToString(); log.RequestHeaders = responseModel.HttpResponseMessage.RequestMessage.Headers.ToString(); @@ -28,4 +29,6 @@ public class WebhookLogFactory : IWebhookLogFactory return log; } + + private string MapStatusCodeToMessage(HttpStatusCode statusCode) => $"{statusCode.ToString()} ({(int)statusCode})"; } diff --git a/src/Umbraco.Infrastructure/Migrations/Upgrade/UmbracoPlan.cs b/src/Umbraco.Infrastructure/Migrations/Upgrade/UmbracoPlan.cs index 24d82710d6..06ed5ba957 100644 --- a/src/Umbraco.Infrastructure/Migrations/Upgrade/UmbracoPlan.cs +++ b/src/Umbraco.Infrastructure/Migrations/Upgrade/UmbracoPlan.cs @@ -101,5 +101,6 @@ public class UmbracoPlan : MigrationPlan To("{4E652F18-9A29-4656-A899-E3F39069C47E}"); To("{148714C8-FE0D-4553-B034-439D91468761}"); To("{23BA95A4-FCCE-49B0-8AA1-45312B103A9B}"); + To("{7DDCE198-9CA4-430C-8BBC-A66D80CA209F}"); } } diff --git a/src/Umbraco.Infrastructure/Migrations/Upgrade/V_13_0_0/ChangeLogStatusCode.cs b/src/Umbraco.Infrastructure/Migrations/Upgrade/V_13_0_0/ChangeLogStatusCode.cs new file mode 100644 index 0000000000..2df244be8c --- /dev/null +++ b/src/Umbraco.Infrastructure/Migrations/Upgrade/V_13_0_0/ChangeLogStatusCode.cs @@ -0,0 +1,45 @@ +using System.Net; +using NPoco; +using Umbraco.Cms.Core; +using Umbraco.Cms.Infrastructure.Persistence; +using Umbraco.Cms.Infrastructure.Persistence.Dtos; +using Umbraco.Extensions; + +namespace Umbraco.Cms.Infrastructure.Migrations.Upgrade.V_13_0_0; + +public class ChangeLogStatusCode : MigrationBase +{ + public ChangeLogStatusCode(IMigrationContext context) : base(context) + { + } + + protected override void Migrate() + { + if (!TableExists(Constants.DatabaseSchema.Tables.WebhookLog)) + { + return; + } + + Sql fetchQuery = Database.SqlContext.Sql() + .Select() + .From(); + + // Use a custom SQL query to prevent selecting explicit columns (sortOrder doesn't exist yet) + List webhookLogDtos = Database.Fetch(fetchQuery); + + Sql deleteQuery = Database.SqlContext.Sql() + .Delete(); + + Database.Execute(deleteQuery); + + foreach (WebhookLogDto webhookLogDto in webhookLogDtos) + { + if (Enum.TryParse(webhookLogDto.StatusCode, out HttpStatusCode statusCode)) + { + webhookLogDto.StatusCode = $"{statusCode.ToString()} ({(int)statusCode})"; + } + } + + Database.InsertBatch(webhookLogDtos); + } +} diff --git a/src/Umbraco.Web.UI.Client/src/views/webhooks/logs.controller.js b/src/Umbraco.Web.UI.Client/src/views/webhooks/logs.controller.js index c6b45530d8..c4d032b806 100644 --- a/src/Umbraco.Web.UI.Client/src/views/webhooks/logs.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/webhooks/logs.controller.js @@ -55,7 +55,7 @@ } function isChecked(log) { - return log.statusCode === "OK"; + return log.statusCode === "OK (200)"; } init(); diff --git a/src/Umbraco.Web.UI.Client/src/views/webhooks/logs.html b/src/Umbraco.Web.UI.Client/src/views/webhooks/logs.html index 9eec01ce05..9b1a59a0db 100644 --- a/src/Umbraco.Web.UI.Client/src/views/webhooks/logs.html +++ b/src/Umbraco.Web.UI.Client/src/views/webhooks/logs.html @@ -16,8 +16,9 @@ + size="m"> + {{ log.webhookKey }} {{ log.formattedLogDate }} diff --git a/src/Umbraco.Web.UI.Client/src/views/webhooks/overlays/details.html b/src/Umbraco.Web.UI.Client/src/views/webhooks/overlays/details.html index d1ce18477e..4e60ed2d63 100644 --- a/src/Umbraco.Web.UI.Client/src/views/webhooks/overlays/details.html +++ b/src/Umbraco.Web.UI.Client/src/views/webhooks/overlays/details.html @@ -15,17 +15,17 @@ - +
- - + +
-
{{model.webhookLogEntry.response.statusDescription}} ({{model.webhookLogEntry.response.statusCode}})
+
{{model.log.statusCode}}
- +
{{model.log.formattedLogDate}}
@@ -34,10 +34,6 @@
{{model.log.url}}
- -
{{model.log.statusCode}}
-
-
{{model.log.eventAlias}}
From 8755703845a6b26930d0474c0d62c505791f0c1e Mon Sep 17 00:00:00 2001 From: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com> Date: Tue, 21 Nov 2023 14:38:47 +0100 Subject: [PATCH 27/38] V13: Implement webook as i entity (#15267) * Add webhook service to service context * Refactor webhooks to implement IEntity --------- Co-authored-by: Zeegaan --- src/Umbraco.Core/Models/IWebhook.cs | 16 ++++ src/Umbraco.Core/Models/Webhook.cs | 76 +++++++++++++++---- .../WebhookDeletedNotification .cs | 4 +- .../WebhookDeletingNotification.cs | 6 +- .../Notifications/WebhookSavedNotification.cs | 6 +- .../WebhookSavingNotification.cs | 6 +- .../Repositories/IWebhookRepository.cs | 22 +++--- .../Services/IWebhookFiringService.cs | 2 +- .../Services/IWebhookLogFactory.cs | 2 +- src/Umbraco.Core/Services/IWebhookService.cs | 16 ++-- src/Umbraco.Core/Services/ServiceContext.cs | 17 ++++- .../Services/WebhookLogFactory.cs | 2 +- src/Umbraco.Core/Services/WebhookService.cs | 28 +++---- src/Umbraco.Core/Webhooks/WebhookEventBase.cs | 6 +- .../Webhooks/WebhookEventContentBase.cs | 4 +- .../BackgroundJobs/Jobs/WebhookFiring.cs | 4 +- .../Persistence/Factories/WebhookFactory.cs | 8 +- .../Implement/WebhookRepository.cs | 26 ++++--- .../Implement/WebhookFiringService.cs | 2 +- .../Controllers/WebhookController.cs | 14 ++-- .../Mapping/WebhookMapDefinition.cs | 4 +- .../Services/IWebhookPresentationFactory.cs | 2 +- .../Services/WebhookPresentationFactory.cs | 2 +- 23 files changed, 174 insertions(+), 101 deletions(-) create mode 100644 src/Umbraco.Core/Models/IWebhook.cs diff --git a/src/Umbraco.Core/Models/IWebhook.cs b/src/Umbraco.Core/Models/IWebhook.cs new file mode 100644 index 0000000000..ab8c6ed05d --- /dev/null +++ b/src/Umbraco.Core/Models/IWebhook.cs @@ -0,0 +1,16 @@ +using Umbraco.Cms.Core.Models.Entities; + +namespace Umbraco.Cms.Core.Models; + +public interface IWebhook : IEntity +{ + string Url { get; set; } + + string[] Events { get; set; } + + Guid[] ContentTypeKeys {get; set; } + + bool Enabled { get; set; } + + IDictionary Headers { get; set; } +} diff --git a/src/Umbraco.Core/Models/Webhook.cs b/src/Umbraco.Core/Models/Webhook.cs index bc31745cf5..499cee0186 100644 --- a/src/Umbraco.Core/Models/Webhook.cs +++ b/src/Umbraco.Core/Models/Webhook.cs @@ -1,27 +1,71 @@ -namespace Umbraco.Cms.Core.Models; +using Umbraco.Cms.Core.Models.Entities; +using Umbraco.Extensions; -public class Webhook +namespace Umbraco.Cms.Core.Models; + +public class Webhook : EntityBase, IWebhook { + // Custom comparers for enumerable + private static readonly DelegateEqualityComparer> + ContentTypeKeysComparer = + new( + (enumerable, translations) => enumerable.UnsortedSequenceEqual(translations), + enumerable => enumerable.GetHashCode()); + + private static readonly DelegateEqualityComparer> + EventsComparer = + new( + (enumerable, translations) => enumerable.UnsortedSequenceEqual(translations), + enumerable => enumerable.GetHashCode()); + + private static readonly DelegateEqualityComparer> + HeadersComparer = + new( + (enumerable, translations) => enumerable.UnsortedSequenceEqual(translations), + enumerable => enumerable.GetHashCode()); + + private string _url; + private string[] _events; + private Guid[] _contentTypeKeys; + private bool _enabled; + private IDictionary _headers; + public Webhook(string url, bool? enabled = null, Guid[]? entityKeys = null, string[]? events = null, IDictionary? headers = null) { - Url = url; - Headers = headers ?? new Dictionary(); - Events = events ?? Array.Empty(); - ContentTypeKeys = entityKeys ?? Array.Empty(); - Enabled = enabled ?? false; + _url = url; + _headers = headers ?? new Dictionary(); + _events = events ?? Array.Empty(); + _contentTypeKeys = entityKeys ?? Array.Empty(); + _enabled = enabled ?? false; } - public int Id { get; set; } + public string Url + { + get => _url; + set => SetPropertyValueAndDetectChanges(value, ref _url!, nameof(Url)); + } - public Guid Key { get; set; } + public string[] Events + { + get => _events; + set => SetPropertyValueAndDetectChanges(value, ref _events!, nameof(Events), EventsComparer); + } - public string Url { get; set; } + public Guid[] ContentTypeKeys + { + get => _contentTypeKeys; + set => SetPropertyValueAndDetectChanges(value, ref _contentTypeKeys!, nameof(ContentTypeKeys), ContentTypeKeysComparer); + } - public string[] Events { get; set; } + public bool Enabled + { + get => _enabled; + set => SetPropertyValueAndDetectChanges(value, ref _enabled, nameof(Enabled)); + } - public Guid[] ContentTypeKeys {get; set; } - - public bool Enabled { get; set; } - - public IDictionary Headers { get; set; } + public IDictionary Headers + { + get => _headers; + set => SetPropertyValueAndDetectChanges(value, ref _headers!, nameof(Headers), HeadersComparer); + } } diff --git a/src/Umbraco.Core/Notifications/WebhookDeletedNotification .cs b/src/Umbraco.Core/Notifications/WebhookDeletedNotification .cs index 516d52012c..eb4394e59c 100644 --- a/src/Umbraco.Core/Notifications/WebhookDeletedNotification .cs +++ b/src/Umbraco.Core/Notifications/WebhookDeletedNotification .cs @@ -3,9 +3,9 @@ using Umbraco.Cms.Core.Models; namespace Umbraco.Cms.Core.Notifications; -public class WebhookDeletedNotification : DeletedNotification +public class WebhookDeletedNotification : DeletedNotification { - public WebhookDeletedNotification(Webhook target, EventMessages messages) + public WebhookDeletedNotification(IWebhook target, EventMessages messages) : base(target, messages) { } diff --git a/src/Umbraco.Core/Notifications/WebhookDeletingNotification.cs b/src/Umbraco.Core/Notifications/WebhookDeletingNotification.cs index f703113370..7e5c8e4579 100644 --- a/src/Umbraco.Core/Notifications/WebhookDeletingNotification.cs +++ b/src/Umbraco.Core/Notifications/WebhookDeletingNotification.cs @@ -3,14 +3,14 @@ using Umbraco.Cms.Core.Models; namespace Umbraco.Cms.Core.Notifications; -public class WebhookDeletingNotification : DeletingNotification +public class WebhookDeletingNotification : DeletingNotification { - public WebhookDeletingNotification(Webhook target, EventMessages messages) + public WebhookDeletingNotification(IWebhook target, EventMessages messages) : base(target, messages) { } - public WebhookDeletingNotification(IEnumerable target, EventMessages messages) + public WebhookDeletingNotification(IEnumerable target, EventMessages messages) : base(target, messages) { } diff --git a/src/Umbraco.Core/Notifications/WebhookSavedNotification.cs b/src/Umbraco.Core/Notifications/WebhookSavedNotification.cs index efd4fc3707..d94b87873e 100644 --- a/src/Umbraco.Core/Notifications/WebhookSavedNotification.cs +++ b/src/Umbraco.Core/Notifications/WebhookSavedNotification.cs @@ -3,14 +3,14 @@ using Umbraco.Cms.Core.Models; namespace Umbraco.Cms.Core.Notifications; -public class WebhookSavedNotification : SavedNotification +public class WebhookSavedNotification : SavedNotification { - public WebhookSavedNotification(Webhook target, EventMessages messages) + public WebhookSavedNotification(IWebhook target, EventMessages messages) : base(target, messages) { } - public WebhookSavedNotification(IEnumerable target, EventMessages messages) + public WebhookSavedNotification(IEnumerable target, EventMessages messages) : base(target, messages) { } diff --git a/src/Umbraco.Core/Notifications/WebhookSavingNotification.cs b/src/Umbraco.Core/Notifications/WebhookSavingNotification.cs index 69dee928c8..8d0a6ce7ff 100644 --- a/src/Umbraco.Core/Notifications/WebhookSavingNotification.cs +++ b/src/Umbraco.Core/Notifications/WebhookSavingNotification.cs @@ -3,14 +3,14 @@ using Umbraco.Cms.Core.Models; namespace Umbraco.Cms.Core.Notifications; -public class WebhookSavingNotification : SavingNotification +public class WebhookSavingNotification : SavingNotification { - public WebhookSavingNotification(Webhook target, EventMessages messages) + public WebhookSavingNotification(IWebhook target, EventMessages messages) : base(target, messages) { } - public WebhookSavingNotification(IEnumerable target, EventMessages messages) + public WebhookSavingNotification(IEnumerable target, EventMessages messages) : base(target, messages) { } diff --git a/src/Umbraco.Core/Persistence/Repositories/IWebhookRepository.cs b/src/Umbraco.Core/Persistence/Repositories/IWebhookRepository.cs index 3013ee59e0..5fe0530b73 100644 --- a/src/Umbraco.Core/Persistence/Repositories/IWebhookRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/IWebhookRepository.cs @@ -9,43 +9,43 @@ public interface IWebhookRepository /// /// Number of entries to skip. /// Number of entries to take. - /// A paged model of objects. - Task> GetAllAsync(int skip, int take); + /// A paged model of objects. + Task> GetAllAsync(int skip, int take); /// /// Gets all of the webhooks in the current database. /// /// The webhook you want to create. - /// The created webhook - Task CreateAsync(Webhook webhook); + /// The created webhook + Task CreateAsync(IWebhook webhook); /// /// Gets a webhook by key /// /// The key of the webhook which will be retrieved. - /// The webhook with the given key. - Task GetAsync(Guid key); + /// The webhook with the given key. + Task GetAsync(Guid key); /// /// Gets a webhook by key /// /// The alias of an event, which is referenced by a webhook. /// - /// A paged model of + /// A paged model of /// - Task> GetByAliasAsync(string alias); + Task> GetByAliasAsync(string alias); /// /// Gets a webhook by key /// /// The webhook to be deleted. /// A representing the asynchronous operation. - Task DeleteAsync(Webhook webhook); + Task DeleteAsync(IWebhook webhook); /// /// Updates a given webhook /// /// The webhook to be updated. - /// The updated webhook. - Task UpdateAsync(Webhook webhook); + /// The updated webhook. + Task UpdateAsync(IWebhook webhook); } diff --git a/src/Umbraco.Core/Services/IWebhookFiringService.cs b/src/Umbraco.Core/Services/IWebhookFiringService.cs index 53a631bff3..47d01da4ec 100644 --- a/src/Umbraco.Core/Services/IWebhookFiringService.cs +++ b/src/Umbraco.Core/Services/IWebhookFiringService.cs @@ -4,5 +4,5 @@ namespace Umbraco.Cms.Core.Services; public interface IWebhookFiringService { - Task FireAsync(Webhook webhook, string eventAlias, object? payload, CancellationToken cancellationToken); + Task FireAsync(IWebhook webhook, string eventAlias, object? payload, CancellationToken cancellationToken); } diff --git a/src/Umbraco.Core/Services/IWebhookLogFactory.cs b/src/Umbraco.Core/Services/IWebhookLogFactory.cs index 3f586f5da4..feaa12ef4a 100644 --- a/src/Umbraco.Core/Services/IWebhookLogFactory.cs +++ b/src/Umbraco.Core/Services/IWebhookLogFactory.cs @@ -5,5 +5,5 @@ namespace Umbraco.Cms.Core.Services; public interface IWebhookLogFactory { - Task CreateAsync(string eventAlias, WebhookResponseModel responseModel, Webhook webhook, CancellationToken cancellationToken); + Task CreateAsync(string eventAlias, WebhookResponseModel responseModel, IWebhook webhook, CancellationToken cancellationToken); } diff --git a/src/Umbraco.Core/Services/IWebhookService.cs b/src/Umbraco.Core/Services/IWebhookService.cs index 657f29df59..2fcd3eef94 100644 --- a/src/Umbraco.Core/Services/IWebhookService.cs +++ b/src/Umbraco.Core/Services/IWebhookService.cs @@ -8,34 +8,34 @@ public interface IWebhookService /// /// Creates a webhook. /// - /// to create. - Task> CreateAsync(Webhook webhook); + /// to create. + Task> CreateAsync(IWebhook webhook); /// /// Updates a webhook. /// - /// to update. - Task> UpdateAsync(Webhook webhook); + /// to update. + Task> UpdateAsync(IWebhook webhook); /// /// Deletes a webhook. /// /// The unique key of the webhook. - Task> DeleteAsync(Guid key); + Task> DeleteAsync(Guid key); /// /// Gets a webhook by its key. /// /// The unique key of the webhook. - Task GetAsync(Guid key); + Task GetAsync(Guid key); /// /// Gets all webhooks. /// - Task> GetAllAsync(int skip, int take); + Task> GetAllAsync(int skip, int take); /// /// Gets webhooks by event name. /// - Task> GetByAliasAsync(string alias); + Task> GetByAliasAsync(string alias); } diff --git a/src/Umbraco.Core/Services/ServiceContext.cs b/src/Umbraco.Core/Services/ServiceContext.cs index 9def2bd8fa..b28e0aaaee 100644 --- a/src/Umbraco.Core/Services/ServiceContext.cs +++ b/src/Umbraco.Core/Services/ServiceContext.cs @@ -32,6 +32,7 @@ public class ServiceContext private readonly Lazy? _serverRegistrationService; private readonly Lazy? _tagService; private readonly Lazy? _userService; + private readonly Lazy? _webhookService; /// /// Initializes a new instance of the class with lazy services. @@ -63,7 +64,8 @@ public class ServiceContext Lazy? redirectUrlService, Lazy? consentService, Lazy? keyValueService, - Lazy? contentTypeBaseServiceProvider) + Lazy? contentTypeBaseServiceProvider, + Lazy? webhookService) { _publicAccessService = publicAccessService; _domainService = domainService; @@ -92,6 +94,7 @@ public class ServiceContext _consentService = consentService; _keyValueService = keyValueService; _contentTypeBaseServiceProvider = contentTypeBaseServiceProvider; + _webhookService = webhookService; } /// @@ -229,6 +232,11 @@ public class ServiceContext /// public IContentTypeBaseServiceProvider? ContentTypeBaseServices => _contentTypeBaseServiceProvider?.Value; + /// + /// Gets the WebhookService. + /// + public IWebhookService? WebhookService => _webhookService?.Value; + /// /// Creates a partial service context with only some services (for tests). /// @@ -262,7 +270,8 @@ public class ServiceContext IRedirectUrlService? redirectUrlService = null, IConsentService? consentService = null, IKeyValueService? keyValueService = null, - IContentTypeBaseServiceProvider? contentTypeBaseServiceProvider = null) + IContentTypeBaseServiceProvider? contentTypeBaseServiceProvider = null, + IWebhookService? webhookService = null) { Lazy? Lazy(T? service) { @@ -296,6 +305,8 @@ public class ServiceContext Lazy(redirectUrlService), Lazy(consentService), Lazy(keyValueService), - Lazy(contentTypeBaseServiceProvider)); + Lazy(contentTypeBaseServiceProvider), + Lazy(webhookService) + ); } } diff --git a/src/Umbraco.Core/Services/WebhookLogFactory.cs b/src/Umbraco.Core/Services/WebhookLogFactory.cs index e798b2b2aa..ec88bb52c4 100644 --- a/src/Umbraco.Core/Services/WebhookLogFactory.cs +++ b/src/Umbraco.Core/Services/WebhookLogFactory.cs @@ -6,7 +6,7 @@ namespace Umbraco.Cms.Core.Services; public class WebhookLogFactory : IWebhookLogFactory { - public async Task CreateAsync(string eventAlias, WebhookResponseModel responseModel, Webhook webhook, CancellationToken cancellationToken) + public async Task CreateAsync(string eventAlias, WebhookResponseModel responseModel, IWebhook webhook, CancellationToken cancellationToken) { var log = new WebhookLog { diff --git a/src/Umbraco.Core/Services/WebhookService.cs b/src/Umbraco.Core/Services/WebhookService.cs index 1f707606b5..57351c59e4 100644 --- a/src/Umbraco.Core/Services/WebhookService.cs +++ b/src/Umbraco.Core/Services/WebhookService.cs @@ -21,7 +21,7 @@ public class WebhookService : IWebhookService } /// - public async Task> CreateAsync(Webhook webhook) + public async Task> CreateAsync(IWebhook webhook) { using ICoreScope scope = _provider.CreateCoreScope(); @@ -33,7 +33,7 @@ public class WebhookService : IWebhookService return Attempt.FailWithStatus(WebhookOperationStatus.CancelledByNotification, webhook); } - Webhook created = await _webhookRepository.CreateAsync(webhook); + IWebhook created = await _webhookRepository.CreateAsync(webhook); scope.Notifications.Publish(new WebhookSavedNotification(webhook, eventMessages).WithStateFrom(savingNotification)); @@ -43,11 +43,11 @@ public class WebhookService : IWebhookService } /// - public async Task> UpdateAsync(Webhook webhook) + public async Task> UpdateAsync(IWebhook webhook) { using ICoreScope scope = _provider.CreateCoreScope(); - Webhook? currentWebhook = await _webhookRepository.GetAsync(webhook.Key); + IWebhook? currentWebhook = await _webhookRepository.GetAsync(webhook.Key); if (currentWebhook is null) { @@ -79,10 +79,10 @@ public class WebhookService : IWebhookService } /// - public async Task> DeleteAsync(Guid key) + public async Task> DeleteAsync(Guid key) { using ICoreScope scope = _provider.CreateCoreScope(); - Webhook? webhook = await _webhookRepository.GetAsync(key); + IWebhook? webhook = await _webhookRepository.GetAsync(key); if (webhook is null) { return Attempt.FailWithStatus(WebhookOperationStatus.NotFound, webhook); @@ -93,7 +93,7 @@ public class WebhookService : IWebhookService if (await scope.Notifications.PublishCancelableAsync(deletingNotification)) { scope.Complete(); - return Attempt.FailWithStatus(WebhookOperationStatus.CancelledByNotification, webhook); + return Attempt.FailWithStatus(WebhookOperationStatus.CancelledByNotification, webhook); } await _webhookRepository.DeleteAsync(webhook); @@ -101,33 +101,33 @@ public class WebhookService : IWebhookService scope.Complete(); - return Attempt.SucceedWithStatus(WebhookOperationStatus.Success, webhook); + return Attempt.SucceedWithStatus(WebhookOperationStatus.Success, webhook); } /// - public async Task GetAsync(Guid key) + public async Task GetAsync(Guid key) { using ICoreScope scope = _provider.CreateCoreScope(); - Webhook? webhook = await _webhookRepository.GetAsync(key); + IWebhook? webhook = await _webhookRepository.GetAsync(key); scope.Complete(); return webhook; } /// - public async Task> GetAllAsync(int skip, int take) + public async Task> GetAllAsync(int skip, int take) { using ICoreScope scope = _provider.CreateCoreScope(); - PagedModel webhooks = await _webhookRepository.GetAllAsync(skip, take); + PagedModel webhooks = await _webhookRepository.GetAllAsync(skip, take); scope.Complete(); return webhooks; } /// - public async Task> GetByAliasAsync(string alias) + public async Task> GetByAliasAsync(string alias) { using ICoreScope scope = _provider.CreateCoreScope(); - PagedModel webhooks = await _webhookRepository.GetByAliasAsync(alias); + PagedModel webhooks = await _webhookRepository.GetByAliasAsync(alias); scope.Complete(); return webhooks.Items; diff --git a/src/Umbraco.Core/Webhooks/WebhookEventBase.cs b/src/Umbraco.Core/Webhooks/WebhookEventBase.cs index 529fe4191b..5d4ee69d3b 100644 --- a/src/Umbraco.Core/Webhooks/WebhookEventBase.cs +++ b/src/Umbraco.Core/Webhooks/WebhookEventBase.cs @@ -53,9 +53,9 @@ public abstract class WebhookEventBase : IWebhookEvent, INotifica /// /// Process the webhooks for the given notification. /// - public virtual async Task ProcessWebhooks(TNotification notification, IEnumerable webhooks, CancellationToken cancellationToken) + public virtual async Task ProcessWebhooks(TNotification notification, IEnumerable webhooks, CancellationToken cancellationToken) { - foreach (Webhook webhook in webhooks) + foreach (IWebhook webhook in webhooks) { if (webhook.Enabled is false) { @@ -91,7 +91,7 @@ public abstract class WebhookEventBase : IWebhookEvent, INotifica return; } - IEnumerable webhooks = await WebhookService.GetByAliasAsync(Alias); + IEnumerable webhooks = await WebhookService.GetByAliasAsync(Alias); await ProcessWebhooks(notification, webhooks, cancellationToken); } diff --git a/src/Umbraco.Core/Webhooks/WebhookEventContentBase.cs b/src/Umbraco.Core/Webhooks/WebhookEventContentBase.cs index 6b72bbaacb..e022f6c0a5 100644 --- a/src/Umbraco.Core/Webhooks/WebhookEventContentBase.cs +++ b/src/Umbraco.Core/Webhooks/WebhookEventContentBase.cs @@ -21,9 +21,9 @@ public abstract class WebhookEventContentBase : WebhookE { } - public override async Task ProcessWebhooks(TNotification notification, IEnumerable webhooks, CancellationToken cancellationToken) + public override async Task ProcessWebhooks(TNotification notification, IEnumerable webhooks, CancellationToken cancellationToken) { - foreach (Webhook webhook in webhooks) + foreach (IWebhook webhook in webhooks) { if (!webhook.Enabled) { diff --git a/src/Umbraco.Infrastructure/BackgroundJobs/Jobs/WebhookFiring.cs b/src/Umbraco.Infrastructure/BackgroundJobs/Jobs/WebhookFiring.cs index 951c121982..11eaa3bb8a 100644 --- a/src/Umbraco.Infrastructure/BackgroundJobs/Jobs/WebhookFiring.cs +++ b/src/Umbraco.Infrastructure/BackgroundJobs/Jobs/WebhookFiring.cs @@ -66,7 +66,7 @@ public class WebhookFiring : IRecurringBackgroundJob { return Task.Run(async () => { - Webhook? webhook = await _webHookService.GetAsync(request.WebhookKey); + IWebhook? webhook = await _webHookService.GetAsync(request.WebhookKey); if (webhook is null) { return; @@ -88,7 +88,7 @@ public class WebhookFiring : IRecurringBackgroundJob })); } - private async Task SendRequestAsync(Webhook webhook, string eventName, string? serializedObject, int retryCount, CancellationToken cancellationToken) + private async Task SendRequestAsync(IWebhook webhook, string eventName, string? serializedObject, int retryCount, CancellationToken cancellationToken) { using var httpClient = new HttpClient(); diff --git a/src/Umbraco.Infrastructure/Persistence/Factories/WebhookFactory.cs b/src/Umbraco.Infrastructure/Persistence/Factories/WebhookFactory.cs index 9e6328501f..ad081b5bda 100644 --- a/src/Umbraco.Infrastructure/Persistence/Factories/WebhookFactory.cs +++ b/src/Umbraco.Infrastructure/Persistence/Factories/WebhookFactory.cs @@ -21,7 +21,7 @@ internal static class WebhookFactory return entity; } - public static WebhookDto BuildDto(Webhook webhook) + public static WebhookDto BuildDto(IWebhook webhook) { var dto = new WebhookDto { @@ -34,21 +34,21 @@ internal static class WebhookFactory return dto; } - public static IEnumerable BuildEntityKey2WebhookDto(Webhook webhook) => + public static IEnumerable BuildEntityKey2WebhookDto(IWebhook webhook) => webhook.ContentTypeKeys.Select(x => new Webhook2ContentTypeKeysDto { ContentTypeKey = x, WebhookId = webhook.Id, }); - public static IEnumerable BuildEvent2WebhookDto(Webhook webhook) => + public static IEnumerable BuildEvent2WebhookDto(IWebhook webhook) => webhook.Events.Select(x => new Webhook2EventsDto { Event = x, WebhookId = webhook.Id, }); - public static IEnumerable BuildHeaders2WebhookDtos(Webhook webhook) => + public static IEnumerable BuildHeaders2WebhookDtos(IWebhook webhook) => webhook.Headers.Select(x => new Webhook2HeadersDto { Key = x.Key, diff --git a/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/WebhookRepository.cs b/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/WebhookRepository.cs index b8fe5e52fe..7358374f3b 100644 --- a/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/WebhookRepository.cs +++ b/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/WebhookRepository.cs @@ -14,7 +14,7 @@ public class WebhookRepository : IWebhookRepository public WebhookRepository(IScopeAccessor scopeAccessor) => _scopeAccessor = scopeAccessor; - public async Task> GetAllAsync(int skip, int take) + public async Task> GetAllAsync(int skip, int take) { Sql? sql = _scopeAccessor.AmbientScope?.Database.SqlContext.Sql() .Select() @@ -22,15 +22,16 @@ public class WebhookRepository : IWebhookRepository List? webhookDtos = await _scopeAccessor.AmbientScope?.Database.FetchAsync(sql)!; - return new PagedModel + return new PagedModel { Items = await DtosToEntities(webhookDtos.Skip(skip).Take(take)), Total = webhookDtos.Count, }; } - public async Task CreateAsync(Webhook webhook) + public async Task CreateAsync(IWebhook webhook) { + webhook.AddingEntity(); WebhookDto webhookDto = WebhookFactory.BuildDto(webhook); var result = await _scopeAccessor.AmbientScope?.Database.InsertAsync(webhookDto)!; @@ -45,7 +46,7 @@ public class WebhookRepository : IWebhookRepository return webhook; } - public async Task GetAsync(Guid key) + public async Task GetAsync(Guid key) { Sql? sql = _scopeAccessor.AmbientScope?.Database.SqlContext.Sql() .Select() @@ -57,7 +58,7 @@ public class WebhookRepository : IWebhookRepository return webhookDto is null ? null : await DtoToEntity(webhookDto); } - public async Task> GetByAliasAsync(string alias) + public async Task> GetByAliasAsync(string alias) { Sql? sql = _scopeAccessor.AmbientScope?.Database.SqlContext.Sql() .SelectAll() @@ -68,14 +69,14 @@ public class WebhookRepository : IWebhookRepository List? webhookDtos = await _scopeAccessor.AmbientScope?.Database.FetchAsync(sql)!; - return new PagedModel + return new PagedModel { Items = await DtosToEntities(webhookDtos), Total = webhookDtos.Count, }; } - public async Task DeleteAsync(Webhook webhook) + public async Task DeleteAsync(IWebhook webhook) { Sql sql = _scopeAccessor.AmbientScope!.Database.SqlContext.Sql() .Delete() @@ -84,8 +85,9 @@ public class WebhookRepository : IWebhookRepository await _scopeAccessor.AmbientScope?.Database.ExecuteAsync(sql)!; } - public async Task UpdateAsync(Webhook webhook) + public async Task UpdateAsync(IWebhook webhook) { + webhook.UpdatingEntity(); WebhookDto dto = WebhookFactory.BuildDto(webhook); await _scopeAccessor.AmbientScope?.Database.UpdateAsync(dto)!; @@ -101,7 +103,7 @@ public class WebhookRepository : IWebhookRepository _scopeAccessor.AmbientScope?.Database.Delete("WHERE webhookId = @webhookId", new { webhookId }); } - private void InsertManyToOneReferences(Webhook webhook) + private void InsertManyToOneReferences(IWebhook webhook) { IEnumerable buildEntityKey2WebhookDtos = WebhookFactory.BuildEntityKey2WebhookDto(webhook); IEnumerable buildEvent2WebhookDtos = WebhookFactory.BuildEvent2WebhookDto(webhook); @@ -112,9 +114,9 @@ public class WebhookRepository : IWebhookRepository _scopeAccessor.AmbientScope?.Database.InsertBulkAsync(header2WebhookDtos); } - private async Task> DtosToEntities(IEnumerable dtos) + private async Task> DtosToEntities(IEnumerable dtos) { - List result = new(); + List result = new(); foreach (WebhookDto webhook in dtos) { @@ -124,7 +126,7 @@ public class WebhookRepository : IWebhookRepository return result; } - private async Task DtoToEntity(WebhookDto dto) + private async Task DtoToEntity(WebhookDto dto) { List? webhookEntityKeyDtos = await _scopeAccessor.AmbientScope?.Database.FetchAsync("WHERE webhookId = @webhookId", new { webhookId = dto.Id })!; List? event2WebhookDtos = await _scopeAccessor.AmbientScope?.Database.FetchAsync("WHERE webhookId = @webhookId", new { webhookId = dto.Id })!; diff --git a/src/Umbraco.Infrastructure/Services/Implement/WebhookFiringService.cs b/src/Umbraco.Infrastructure/Services/Implement/WebhookFiringService.cs index b107d82999..cbaf6549f0 100644 --- a/src/Umbraco.Infrastructure/Services/Implement/WebhookFiringService.cs +++ b/src/Umbraco.Infrastructure/Services/Implement/WebhookFiringService.cs @@ -9,7 +9,7 @@ public class WebhookFiringService : IWebhookFiringService public WebhookFiringService(IWebhookRequestService webhookRequestService) => _webhookRequestService = webhookRequestService; - public async Task FireAsync(Webhook webhook, string eventAlias, object? payload, CancellationToken cancellationToken) => + public async Task FireAsync(IWebhook webhook, string eventAlias, object? payload, CancellationToken cancellationToken) => await _webhookRequestService.CreateAsync(webhook.Key, eventAlias, payload); } diff --git a/src/Umbraco.Web.BackOffice/Controllers/WebhookController.cs b/src/Umbraco.Web.BackOffice/Controllers/WebhookController.cs index 61f583d8eb..85a1b83872 100644 --- a/src/Umbraco.Web.BackOffice/Controllers/WebhookController.cs +++ b/src/Umbraco.Web.BackOffice/Controllers/WebhookController.cs @@ -37,7 +37,7 @@ public class WebhookController : UmbracoAuthorizedJsonController [HttpGet] public async Task GetAll(int skip = 0, int take = int.MaxValue) { - PagedModel webhooks = await _webhookService.GetAllAsync(skip, take); + PagedModel webhooks = await _webhookService.GetAllAsync(skip, take); IEnumerable webhookViewModels = webhooks.Items.Select(_webhookPresentationFactory.Create); @@ -47,24 +47,24 @@ public class WebhookController : UmbracoAuthorizedJsonController [HttpPut] public async Task Update(WebhookViewModel webhookViewModel) { - Webhook webhook = _umbracoMapper.Map(webhookViewModel)!; + IWebhook webhook = _umbracoMapper.Map(webhookViewModel)!; - Attempt result = await _webhookService.UpdateAsync(webhook); + Attempt result = await _webhookService.UpdateAsync(webhook); return result.Success ? Ok(_webhookPresentationFactory.Create(webhook)) : WebhookOperationStatusResult(result.Status); } [HttpPost] public async Task Create(WebhookViewModel webhookViewModel) { - Webhook webhook = _umbracoMapper.Map(webhookViewModel)!; - Attempt result = await _webhookService.CreateAsync(webhook); + IWebhook webhook = _umbracoMapper.Map(webhookViewModel)!; + Attempt result = await _webhookService.CreateAsync(webhook); return result.Success ? Ok(_webhookPresentationFactory.Create(webhook)) : WebhookOperationStatusResult(result.Status); } [HttpGet] public async Task GetByKey(Guid key) { - Webhook? webhook = await _webhookService.GetAsync(key); + IWebhook? webhook = await _webhookService.GetAsync(key); return webhook is null ? NotFound() : Ok(_webhookPresentationFactory.Create(webhook)); } @@ -72,7 +72,7 @@ public class WebhookController : UmbracoAuthorizedJsonController [HttpDelete] public async Task Delete(Guid key) { - Attempt result = await _webhookService.DeleteAsync(key); + Attempt result = await _webhookService.DeleteAsync(key); return result.Success ? Ok() : WebhookOperationStatusResult(result.Status); } diff --git a/src/Umbraco.Web.BackOffice/Mapping/WebhookMapDefinition.cs b/src/Umbraco.Web.BackOffice/Mapping/WebhookMapDefinition.cs index 8d9982d0c6..197a06278c 100644 --- a/src/Umbraco.Web.BackOffice/Mapping/WebhookMapDefinition.cs +++ b/src/Umbraco.Web.BackOffice/Mapping/WebhookMapDefinition.cs @@ -9,13 +9,13 @@ public class WebhookMapDefinition : IMapDefinition { public void DefineMaps(IUmbracoMapper mapper) { - mapper.Define((_, _) => new Webhook(string.Empty), Map); + mapper.Define((_, _) => new Webhook(string.Empty), Map); mapper.Define((_, _) => new WebhookEventViewModel(), Map); mapper.Define((_, _) => new WebhookLogViewModel(), Map); } // Umbraco.Code.MapAll -CreateDate -DeleteDate -Id -Key -UpdateDate - private void Map(WebhookViewModel source, Webhook target, MapperContext context) + private void Map(WebhookViewModel source, IWebhook target, MapperContext context) { target.ContentTypeKeys = source.ContentTypeKeys; target.Events = source.Events.Select(x => x.Alias).ToArray(); diff --git a/src/Umbraco.Web.BackOffice/Services/IWebhookPresentationFactory.cs b/src/Umbraco.Web.BackOffice/Services/IWebhookPresentationFactory.cs index 5d94607998..77c2104a8c 100644 --- a/src/Umbraco.Web.BackOffice/Services/IWebhookPresentationFactory.cs +++ b/src/Umbraco.Web.BackOffice/Services/IWebhookPresentationFactory.cs @@ -6,5 +6,5 @@ namespace Umbraco.Cms.Web.BackOffice.Services; [Obsolete("Will be moved to a new namespace in V14")] public interface IWebhookPresentationFactory { - WebhookViewModel Create(Webhook webhook); + WebhookViewModel Create(IWebhook webhook); } diff --git a/src/Umbraco.Web.BackOffice/Services/WebhookPresentationFactory.cs b/src/Umbraco.Web.BackOffice/Services/WebhookPresentationFactory.cs index ef4e052596..bf33716c08 100644 --- a/src/Umbraco.Web.BackOffice/Services/WebhookPresentationFactory.cs +++ b/src/Umbraco.Web.BackOffice/Services/WebhookPresentationFactory.cs @@ -11,7 +11,7 @@ internal class WebhookPresentationFactory : IWebhookPresentationFactory public WebhookPresentationFactory(WebhookEventCollection webhookEventCollection) => _webhookEventCollection = webhookEventCollection; - public WebhookViewModel Create(Webhook webhook) + public WebhookViewModel Create(IWebhook webhook) { var target = new WebhookViewModel { From bcd386ac70ac4d3901f759f46a732f9a89e593c5 Mon Sep 17 00:00:00 2001 From: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com> Date: Wed, 22 Nov 2023 13:54:11 +0100 Subject: [PATCH 28/38] V13: Fix missing contenttype in webhook (#15282) * Create missing node for content type * Change to Unknown instead of deleted * Cleared contentTypes and removed console.log --------- Co-authored-by: Zeegaan Co-authored-by: Andreas Zerbst --- .../src/views/webhooks/edit.controller.js | 31 ++++++++++++++++--- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/views/webhooks/edit.controller.js b/src/Umbraco.Web.UI.Client/src/views/webhooks/edit.controller.js index 93bbd842b0..3a545de2e7 100644 --- a/src/Umbraco.Web.UI.Client/src/views/webhooks/edit.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/webhooks/edit.controller.js @@ -52,7 +52,7 @@ promises.push(loadEvents()); if (!$routeParams.create) { - + promises.push(webhooksResource.getByKey($routeParams.id).then(webhook => { vm.webhook = webhook; @@ -60,7 +60,7 @@ const eventType = vm.webhook ? vm.webhook.events[0].eventType.toLowerCase() : null; const contentTypes = webhook.contentTypeKeys.map(x => ({ key: x })); - + getEntities(contentTypes, eventType); makeBreadcrumbs(); @@ -150,14 +150,37 @@ default: return; } - + vm.contentTypes = []; selection.forEach(entity => { resource.getById(entity.key) .then(data => { if (!vm.contentTypes.some(x => x.key === data.key)) { vm.contentTypes.push(data); } - }); + }).catch(err => { + let name; + switch (eventType.toCamelCase()) { + case "content": + name = "Unknown content type"; + break; + case "media": + name = "Unknown media type"; + break; + case "member": + name = "Unknown member type"; + break; + default: + name = "Unknown type"; + } + + let data = { + icon: "icon-alert", + name: name, + description: "An error occurred while loading the content type.", + key: entity.key + } + vm.contentTypes.push(data); + }); }); } From 5ad400184ad824b4a71352e8c4cdbf3f9b91b38c Mon Sep 17 00:00:00 2001 From: Ronald Barendse Date: Thu, 23 Nov 2023 08:02:57 +0100 Subject: [PATCH 29/38] Fix `IWebhook.GetUdi()` and `IEntity.GetUdi()` extension methods (#15288) * Fix IWebhook and IEntity GetUdi extension method * Refactor to use switch expressions * Add GetUdiForWebhook test * Added a webhook builder for unit tests. --------- Co-authored-by: Andy Butland --- .../Extensions/UdiGetterExtensions.cs | 443 +++++++----------- .../Builders/WebhookBuilder.cs | 80 ++++ .../Extensions/UdiGetterExtensionsTests.cs | 18 + .../Builders/WebhookBuilderTests.cs | 50 ++ 4 files changed, 315 insertions(+), 276 deletions(-) create mode 100644 tests/Umbraco.Tests.Common/Builders/WebhookBuilder.cs create mode 100644 tests/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/WebhookBuilderTests.cs diff --git a/src/Umbraco.Core/Extensions/UdiGetterExtensions.cs b/src/Umbraco.Core/Extensions/UdiGetterExtensions.cs index fda84c1013..9ddaeb22a5 100644 --- a/src/Umbraco.Core/Extensions/UdiGetterExtensions.cs +++ b/src/Umbraco.Core/Extensions/UdiGetterExtensions.cs @@ -8,146 +8,126 @@ using Umbraco.Cms.Core.Models.Entities; namespace Umbraco.Extensions; /// -/// Provides extension methods that return udis for Umbraco entities. +/// Provides extension methods that return udis for Umbraco entities. /// public static class UdiGetterExtensions { /// - /// Gets the entity identifier of the entity. + /// Gets the entity identifier of the entity. /// /// The entity. - /// The entity identifier of the entity. + /// + /// The entity identifier of the entity. + /// public static GuidUdi GetUdi(this ITemplate entity) { - if (entity == null) - { - throw new ArgumentNullException("entity"); - } + ArgumentNullException.ThrowIfNull(entity); return new GuidUdi(Constants.UdiEntityType.Template, entity.Key).EnsureClosed(); } /// - /// Gets the entity identifier of the entity. + /// Gets the entity identifier of the entity. /// /// The entity. - /// The entity identifier of the entity. + /// + /// The entity identifier of the entity. + /// public static GuidUdi GetUdi(this IContentType entity) { - if (entity == null) - { - throw new ArgumentNullException("entity"); - } + ArgumentNullException.ThrowIfNull(entity); return new GuidUdi(Constants.UdiEntityType.DocumentType, entity.Key).EnsureClosed(); } /// - /// Gets the entity identifier of the entity. + /// Gets the entity identifier of the entity. /// /// The entity. - /// The entity identifier of the entity. + /// + /// The entity identifier of the entity. + /// public static GuidUdi GetUdi(this IMediaType entity) { - if (entity == null) - { - throw new ArgumentNullException("entity"); - } + ArgumentNullException.ThrowIfNull(entity); return new GuidUdi(Constants.UdiEntityType.MediaType, entity.Key).EnsureClosed(); } /// - /// Gets the entity identifier of the entity. + /// Gets the entity identifier of the entity. /// /// The entity. - /// The entity identifier of the entity. + /// + /// The entity identifier of the entity. + /// public static GuidUdi GetUdi(this IMemberType entity) { - if (entity == null) - { - throw new ArgumentNullException("entity"); - } + ArgumentNullException.ThrowIfNull(entity); return new GuidUdi(Constants.UdiEntityType.MemberType, entity.Key).EnsureClosed(); } /// - /// Gets the entity identifier of the entity. + /// Gets the entity identifier of the entity. /// /// The entity. - /// The entity identifier of the entity. + /// + /// The entity identifier of the entity. + /// public static GuidUdi GetUdi(this IMemberGroup entity) { - if (entity == null) - { - throw new ArgumentNullException("entity"); - } + ArgumentNullException.ThrowIfNull(entity); return new GuidUdi(Constants.UdiEntityType.MemberGroup, entity.Key).EnsureClosed(); } /// - /// Gets the entity identifier of the entity. + /// Gets the entity identifier of the entity. /// /// The entity. - /// The entity identifier of the entity. + /// + /// The entity identifier of the entity. + /// public static GuidUdi GetUdi(this IContentTypeComposition entity) { - if (entity == null) - { - throw new ArgumentNullException("entity"); - } + ArgumentNullException.ThrowIfNull(entity); - string type; - if (entity is IContentType) + string entityType = entity switch { - type = Constants.UdiEntityType.DocumentType; - } - else if (entity is IMediaType) - { - type = Constants.UdiEntityType.MediaType; - } - else if (entity is IMemberType) - { - type = Constants.UdiEntityType.MemberType; - } - else - { - throw new NotSupportedException(string.Format( - "Composition type {0} is not supported.", - entity.GetType().FullName)); - } + IContentType => Constants.UdiEntityType.DocumentType, + IMediaType => Constants.UdiEntityType.MediaType, + IMemberType => Constants.UdiEntityType.MemberType, + _ => throw new NotSupportedException(string.Format("Composition type {0} is not supported.", entity.GetType().FullName)), + }; - return new GuidUdi(type, entity.Key).EnsureClosed(); + return new GuidUdi(entityType, entity.Key).EnsureClosed(); } /// - /// Gets the entity identifier of the entity. + /// Gets the entity identifier of the entity. /// /// The entity. - /// The entity identifier of the entity. + /// + /// The entity identifier of the entity. + /// public static GuidUdi GetUdi(this IDataType entity) { - if (entity == null) - { - throw new ArgumentNullException("entity"); - } + ArgumentNullException.ThrowIfNull(entity); return new GuidUdi(Constants.UdiEntityType.DataType, entity.Key).EnsureClosed(); } /// - /// Gets the entity identifier of the entity. + /// Gets the entity identifier of the entity. /// /// The entity. - /// The entity identifier of the entity. + /// + /// The entity identifier of the entity. + /// public static GuidUdi GetUdi(this EntityContainer entity) { - if (entity == null) - { - throw new ArgumentNullException("entity"); - } + ArgumentNullException.ThrowIfNull(entity); string entityType; if (entity.ContainedObjectType == Constants.ObjectTypes.DataType) @@ -164,339 +144,250 @@ public static class UdiGetterExtensions } else { - throw new NotSupportedException(string.Format( - "Contained object type {0} is not supported.", - entity.ContainedObjectType)); + throw new NotSupportedException(string.Format("Contained object type {0} is not supported.", entity.ContainedObjectType)); } return new GuidUdi(entityType, entity.Key).EnsureClosed(); } /// - /// Gets the entity identifier of the entity. + /// Gets the entity identifier of the entity. /// /// The entity. - /// The entity identifier of the entity. + /// + /// The entity identifier of the entity. + /// public static GuidUdi GetUdi(this IMedia entity) { - if (entity == null) - { - throw new ArgumentNullException("entity"); - } + ArgumentNullException.ThrowIfNull(entity); return new GuidUdi(Constants.UdiEntityType.Media, entity.Key).EnsureClosed(); } /// - /// Gets the entity identifier of the entity. + /// Gets the entity identifier of the entity. /// /// The entity. - /// The entity identifier of the entity. + /// + /// The entity identifier of the entity. + /// public static GuidUdi GetUdi(this IContent entity) { - if (entity == null) - { - throw new ArgumentNullException("entity"); - } + ArgumentNullException.ThrowIfNull(entity); - return new GuidUdi( - entity.Blueprint ? Constants.UdiEntityType.DocumentBlueprint : Constants.UdiEntityType.Document, - entity.Key) - .EnsureClosed(); + string entityType = entity.Blueprint ? Constants.UdiEntityType.DocumentBlueprint : Constants.UdiEntityType.Document; + + return new GuidUdi(entityType, entity.Key).EnsureClosed(); } /// - /// Gets the entity identifier of the entity. + /// Gets the entity identifier of the entity. /// /// The entity. - /// The entity identifier of the entity. + /// + /// The entity identifier of the entity. + /// public static GuidUdi GetUdi(this IMember entity) { - if (entity == null) - { - throw new ArgumentNullException("entity"); - } + ArgumentNullException.ThrowIfNull(entity); return new GuidUdi(Constants.UdiEntityType.Member, entity.Key).EnsureClosed(); } /// - /// Gets the entity identifier of the entity. + /// Gets the entity identifier of the entity. /// /// The entity. - /// The entity identifier of the entity. + /// + /// The entity identifier of the entity. + /// public static StringUdi GetUdi(this Stylesheet entity) { - if (entity == null) - { - throw new ArgumentNullException("entity"); - } + ArgumentNullException.ThrowIfNull(entity); return GetUdiFromPath(Constants.UdiEntityType.Stylesheet, entity.Path); } /// - /// Gets the entity identifier of the entity. + /// Gets the entity identifier of the entity. /// /// The entity. - /// The entity identifier of the entity. + /// + /// The entity identifier of the entity. + /// public static StringUdi GetUdi(this Script entity) { - if (entity == null) - { - throw new ArgumentNullException("entity"); - } + ArgumentNullException.ThrowIfNull(entity); return GetUdiFromPath(Constants.UdiEntityType.Script, entity.Path); } + /// + /// Gets the UDI from a path. + /// + /// The type of the entity. + /// The path. + /// + /// The entity identifier of the entity. + /// private static StringUdi GetUdiFromPath(string entityType, string path) { - var id = path - .TrimStart(Constants.CharArrays.ForwardSlash) - .Replace("\\", "/"); + string id = path.TrimStart(Constants.CharArrays.ForwardSlash).Replace("\\", "/"); + return new StringUdi(entityType, id).EnsureClosed(); } /// - /// Gets the entity identifier of the entity. + /// Gets the entity identifier of the entity. /// /// The entity. - /// The entity identifier of the entity. + /// + /// The entity identifier of the entity. + /// public static GuidUdi GetUdi(this IDictionaryItem entity) { - if (entity == null) - { - throw new ArgumentNullException("entity"); - } + ArgumentNullException.ThrowIfNull(entity); return new GuidUdi(Constants.UdiEntityType.DictionaryItem, entity.Key).EnsureClosed(); } /// - /// Gets the entity identifier of the entity. + /// Gets the entity identifier of the entity. /// /// The entity. - /// The entity identifier of the entity. + /// + /// The entity identifier of the entity. + /// public static GuidUdi GetUdi(this IMacro entity) { - if (entity == null) - { - throw new ArgumentNullException("entity"); - } + ArgumentNullException.ThrowIfNull(entity); return new GuidUdi(Constants.UdiEntityType.Macro, entity.Key).EnsureClosed(); } /// - /// Gets the entity identifier of the entity. + /// Gets the entity identifier of the entity. /// /// The entity. - /// The entity identifier of the entity. + /// + /// The entity identifier of the entity. + /// public static StringUdi GetUdi(this IPartialView entity) { - if (entity == null) - { - throw new ArgumentNullException("entity"); - } + ArgumentNullException.ThrowIfNull(entity); - // we should throw on Unknown but for the time being, assume it means PartialView - var entityType = entity.ViewType == PartialViewType.PartialViewMacro - ? Constants.UdiEntityType.PartialViewMacro - : Constants.UdiEntityType.PartialView; + // TODO: We should throw on Unknown, but for the time being, assume it means PartialView + string entityType = entity.ViewType switch + { + PartialViewType.PartialViewMacro => Constants.UdiEntityType.PartialViewMacro, + _ => Constants.UdiEntityType.PartialView, + }; return GetUdiFromPath(entityType, entity.Path); } /// - /// Gets the entity identifier of the entity. + /// Gets the entity identifier of the entity. /// /// The entity. - /// The entity identifier of the entity. + /// + /// The entity identifier of the entity. + /// public static GuidUdi GetUdi(this IContentBase entity) { - if (entity == null) - { - throw new ArgumentNullException("entity"); - } + ArgumentNullException.ThrowIfNull(entity); - string type; - if (entity is IContent) + string type = entity switch { - type = Constants.UdiEntityType.Document; - } - else if (entity is IMedia) - { - type = Constants.UdiEntityType.Media; - } - else if (entity is IMember) - { - type = Constants.UdiEntityType.Member; - } - else - { - throw new NotSupportedException(string.Format( - "ContentBase type {0} is not supported.", - entity.GetType().FullName)); - } + IContent => Constants.UdiEntityType.Document, + IMedia => Constants.UdiEntityType.Media, + IMember => Constants.UdiEntityType.Member, + _ => throw new NotSupportedException(string.Format("Content base type {0} is not supported.", entity.GetType().FullName)), + }; return new GuidUdi(type, entity.Key).EnsureClosed(); } /// - /// Gets the entity identifier of the entity. + /// Gets the entity identifier of the entity. /// /// The entity. - /// The entity identifier of the entity. + /// + /// The entity identifier of the entity. + /// public static GuidUdi GetUdi(this IRelationType entity) { - if (entity == null) - { - throw new ArgumentNullException("entity"); - } + ArgumentNullException.ThrowIfNull(entity); return new GuidUdi(Constants.UdiEntityType.RelationType, entity.Key).EnsureClosed(); } /// - /// Gets the entity identifier of the entity. + /// Gets the entity identifier of the entity. /// /// The entity. - /// The entity identifier of the entity. - public static GuidUdi GetUdi(this Webhook entity) + /// + /// The entity identifier of the entity. + /// + public static GuidUdi GetUdi(this IWebhook entity) { - if (entity == null) - { - throw new ArgumentNullException("entity"); - } + ArgumentNullException.ThrowIfNull(entity); return new GuidUdi(Constants.UdiEntityType.Webhook, entity.Key).EnsureClosed(); } /// - /// Gets the entity identifier of the entity. + /// Gets the entity identifier of the entity. /// /// The entity. - /// The entity identifier of the entity. + /// + /// The entity identifier of the entity. + /// public static StringUdi GetUdi(this ILanguage entity) { - if (entity == null) - { - throw new ArgumentNullException("entity"); - } + ArgumentNullException.ThrowIfNull(entity); return new StringUdi(Constants.UdiEntityType.Language, entity.IsoCode).EnsureClosed(); } /// - /// Gets the entity identifier of the entity. + /// Gets the entity identifier of the entity. /// /// The entity. - /// The entity identifier of the entity. + /// + /// The entity identifier of the entity. + /// public static Udi GetUdi(this IEntity entity) { - if (entity == null) - { - throw new ArgumentNullException("entity"); - } + ArgumentNullException.ThrowIfNull(entity); - // entity could eg be anything implementing IThing - // so we have to go through casts here - if (entity is ITemplate template) + return entity switch { - return template.GetUdi(); - } - - if (entity is IContentType contentType) - { - return contentType.GetUdi(); - } - - if (entity is IMediaType mediaType) - { - return mediaType.GetUdi(); - } - - if (entity is IMemberType memberType) - { - return memberType.GetUdi(); - } - - if (entity is IMemberGroup memberGroup) - { - return memberGroup.GetUdi(); - } - - if (entity is IContentTypeComposition contentTypeComposition) - { - return contentTypeComposition.GetUdi(); - } - - if (entity is IDataType dataTypeComposition) - { - return dataTypeComposition.GetUdi(); - } - - if (entity is EntityContainer container) - { - return container.GetUdi(); - } - - if (entity is IMedia media) - { - return media.GetUdi(); - } - - if (entity is IContent content) - { - return content.GetUdi(); - } - - if (entity is IMember member) - { - return member.GetUdi(); - } - - if (entity is Stylesheet stylesheet) - { - return stylesheet.GetUdi(); - } - - if (entity is Script script) - { - return script.GetUdi(); - } - - if (entity is IDictionaryItem dictionaryItem) - { - return dictionaryItem.GetUdi(); - } - - if (entity is IMacro macro) - { - return macro.GetUdi(); - } - - if (entity is IPartialView partialView) - { - return partialView.GetUdi(); - } - - if (entity is IContentBase contentBase) - { - return contentBase.GetUdi(); - } - - if (entity is IRelationType relationType) - { - return relationType.GetUdi(); - } - - if (entity is ILanguage language) - { - return language.GetUdi(); - } - - throw new NotSupportedException(string.Format("Entity type {0} is not supported.", entity.GetType().FullName)); + // Concrete types + EntityContainer container => container.GetUdi(), + Stylesheet stylesheet => stylesheet.GetUdi(), + Script script => script.GetUdi(), + // Content types + IContentType contentType => contentType.GetUdi(), + IMediaType mediaType => mediaType.GetUdi(), + IMemberType memberType => memberType.GetUdi(), + IContentTypeComposition contentTypeComposition => contentTypeComposition.GetUdi(), + // Content + IContent content => content.GetUdi(), + IMedia media => media.GetUdi(), + IMember member => member.GetUdi(), + IContentBase contentBase => contentBase.GetUdi(), + // Other + IDataType dataTypeComposition => dataTypeComposition.GetUdi(), + IDictionaryItem dictionaryItem => dictionaryItem.GetUdi(), + ILanguage language => language.GetUdi(), + IMacro macro => macro.GetUdi(), + IMemberGroup memberGroup => memberGroup.GetUdi(), + IPartialView partialView => partialView.GetUdi(), + IRelationType relationType => relationType.GetUdi(), + ITemplate template => template.GetUdi(), + IWebhook webhook => webhook.GetUdi(), + _ => throw new NotSupportedException(string.Format("Entity type {0} is not supported.", entity.GetType().FullName)), + }; } } diff --git a/tests/Umbraco.Tests.Common/Builders/WebhookBuilder.cs b/tests/Umbraco.Tests.Common/Builders/WebhookBuilder.cs new file mode 100644 index 0000000000..96c76fd74c --- /dev/null +++ b/tests/Umbraco.Tests.Common/Builders/WebhookBuilder.cs @@ -0,0 +1,80 @@ +// Copyright (c) Umbraco. +// See LICENSE for more details. + +using Umbraco.Cms.Core.Models; +using Umbraco.Cms.Tests.Common.Builders.Interfaces; + +namespace Umbraco.Cms.Tests.Common.Builders; + +public class WebhookBuilder + : BuilderBase, + IWithIdBuilder, + IWithKeyBuilder +{ + private int? _id; + private Guid? _key; + private string? _url; + private bool? _enabled; + private Guid[] _entityKeys; + private string[]? _events; + private Dictionary? _headers; + + int? IWithIdBuilder.Id + { + get => _id; + set => _id = value; + } + + Guid? IWithKeyBuilder.Key + { + get => _key; + set => _key = value; + } + + public WebhookBuilder WithUrl(string url) + { + _url = url; + return this; + } + + public WebhookBuilder WithEnabled(bool enabled) + { + _enabled = enabled; + return this; + } + + public WebhookBuilder WithEntityKeys(Guid[] entityKeys) + { + _entityKeys = entityKeys; + return this; + } + + public WebhookBuilder WithEvents(string[] events) + { + _events = events; + return this; + } + + public WebhookBuilder WithHeaders(Dictionary headers) + { + _headers = headers; + return this; + } + + public override Webhook Build() + { + var id = _id ?? 1; + var key = _key ?? Guid.NewGuid(); + var url = _url ?? "https://example.com"; + var enabled = _enabled ?? true; + var entityKeys = _entityKeys; + var events = _events; + var headers = _headers; + + return new Webhook(url, enabled, entityKeys, events, headers) + { + Id = id, + Key = key + }; + } +} diff --git a/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Extensions/UdiGetterExtensionsTests.cs b/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Extensions/UdiGetterExtensionsTests.cs index cdda6f02f5..1fc5501073 100644 --- a/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Extensions/UdiGetterExtensionsTests.cs +++ b/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Extensions/UdiGetterExtensionsTests.cs @@ -2,8 +2,11 @@ // See LICENSE for more details. using NUnit.Framework; +using Umbraco.Cms.Core; using Umbraco.Cms.Core.Models; +using Umbraco.Cms.Core.Models.Entities; using Umbraco.Cms.Tests.Common.Builders; +using Umbraco.Cms.Tests.Common.Builders.Extensions; using Umbraco.Extensions; namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.Extensions; @@ -49,4 +52,19 @@ public class UdiGetterExtensionsTests var result = partialView.GetUdi(); Assert.AreEqual(expected, result.ToString()); } + + [TestCase("6ad82c70-685c-4e04-9b36-d81bd779d16f", "umb://webhook/6ad82c70685c4e049b36d81bd779d16f")] + public void GetUdiForWebhook(string key, string expected) + { + var builder = new WebhookBuilder(); + var webhook = builder + .WithKey(Guid.Parse(key)) + .Build(); + + Udi result = webhook.GetUdi(); + Assert.AreEqual(expected, result.ToString()); + + result = ((IEntity)webhook).GetUdi(); + Assert.AreEqual(expected, result.ToString()); + } } diff --git a/tests/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/WebhookBuilderTests.cs b/tests/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/WebhookBuilderTests.cs new file mode 100644 index 0000000000..9c8131c9f7 --- /dev/null +++ b/tests/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/WebhookBuilderTests.cs @@ -0,0 +1,50 @@ +// Copyright (c) Umbraco. +// See LICENSE for more details. + +using NUnit.Framework; +using Umbraco.Cms.Tests.Common.Builders; +using Umbraco.Cms.Tests.Common.Builders.Extensions; + +namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Tests.Common.Builders; + +[TestFixture] +public class WebhookBuilderTests +{ + [Test] + public void Is_Built_Correctly() + { + // Arrange + const int id = 1; + var key = Guid.NewGuid(); + const string url = "https://www.test.com"; + const bool enabled = true; + Guid[] entityKeys = new Guid[] { Guid.NewGuid() }; + string[] events = new string[] { "ContentPublished" }; + var headers = new Dictionary() { { "Content-Type", "application/json" } }; + + var builder = new WebhookBuilder(); + + // Act + var webhook = builder + .WithId(id) + .WithKey(key) + .WithUrl(url) + .WithEnabled(enabled) + .WithEntityKeys(entityKeys) + .WithEvents(events) + .WithHeaders(headers) + .Build(); + + // Assert + Assert.AreEqual(id, webhook.Id); + Assert.AreEqual(key, webhook.Key); + Assert.AreEqual(url, webhook.Url); + Assert.AreEqual(enabled, webhook.Enabled); + Assert.AreEqual(entityKeys.Length, webhook.ContentTypeKeys.Length); + Assert.AreEqual(entityKeys[0], webhook.ContentTypeKeys[0]); + Assert.AreEqual(events.Length, webhook.Events.Length); + Assert.AreEqual(events[0], webhook.Events[0]); + Assert.AreEqual(events.Length, webhook.Events.Length); + Assert.AreEqual("application/json", webhook.Headers["Content-Type"]); + } +} From bfe8b715d8f8854819c6393e47c99e95208ddaa9 Mon Sep 17 00:00:00 2001 From: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com> Date: Mon, 27 Nov 2023 09:06:00 +0100 Subject: [PATCH 30/38] V13: Change request column to NVarcharMax (#15252) * Change request column to NVarcharMax * Rename migration --------- Co-authored-by: Zeegaan --- .../Migrations/Upgrade/UmbracoPlan.cs | 1 + ...WebhookRequestObjectColumnToNvarcharMax.cs | 88 +++++++++++++++++++ .../Persistence/Dtos/WebhookRequestDto.cs | 1 + 3 files changed, 90 insertions(+) create mode 100644 src/Umbraco.Infrastructure/Migrations/Upgrade/V_13_0_0/ChangeWebhookRequestObjectColumnToNvarcharMax.cs diff --git a/src/Umbraco.Infrastructure/Migrations/Upgrade/UmbracoPlan.cs b/src/Umbraco.Infrastructure/Migrations/Upgrade/UmbracoPlan.cs index 06ed5ba957..3cacfd3eac 100644 --- a/src/Umbraco.Infrastructure/Migrations/Upgrade/UmbracoPlan.cs +++ b/src/Umbraco.Infrastructure/Migrations/Upgrade/UmbracoPlan.cs @@ -102,5 +102,6 @@ public class UmbracoPlan : MigrationPlan To("{148714C8-FE0D-4553-B034-439D91468761}"); To("{23BA95A4-FCCE-49B0-8AA1-45312B103A9B}"); To("{7DDCE198-9CA4-430C-8BBC-A66D80CA209F}"); + To("{F74CDA0C-7AAA-48C8-94C6-C6EC3C06F599}"); } } diff --git a/src/Umbraco.Infrastructure/Migrations/Upgrade/V_13_0_0/ChangeWebhookRequestObjectColumnToNvarcharMax.cs b/src/Umbraco.Infrastructure/Migrations/Upgrade/V_13_0_0/ChangeWebhookRequestObjectColumnToNvarcharMax.cs new file mode 100644 index 0000000000..8b0e07a63c --- /dev/null +++ b/src/Umbraco.Infrastructure/Migrations/Upgrade/V_13_0_0/ChangeWebhookRequestObjectColumnToNvarcharMax.cs @@ -0,0 +1,88 @@ +using System.Linq.Expressions; +using System.Text; +using NPoco; +using Umbraco.Cms.Core; +using Umbraco.Cms.Infrastructure.Migrations.Expressions.Create.Column; +using Umbraco.Cms.Infrastructure.Persistence; +using Umbraco.Cms.Infrastructure.Persistence.Dtos; + +namespace Umbraco.Cms.Infrastructure.Migrations.Upgrade.V_13_0_0; + +public class ChangeWebhookRequestObjectColumnToNvarcharMax : MigrationBase +{ + public ChangeWebhookRequestObjectColumnToNvarcharMax(IMigrationContext context) : base(context) + { + } + + protected override void Migrate() + { + // We don't need to run this migration for SQLite, since ntext is not a thing there, text is just text. + if (DatabaseType == DatabaseType.SQLite) + { + return; + } + + MigrateNtextColumn("requestObject", Constants.DatabaseSchema.Tables.WebhookRequest, x => x.RequestObject); + } + + private void MigrateNtextColumn(string columnName, string tableName, Expression> fieldSelector, bool nullable = true) + { + var columnType = ColumnType(tableName, columnName); + if (columnType is null || columnType.Equals("ntext", StringComparison.InvariantCultureIgnoreCase) is false) + { + return; + } + + var oldColumnName = $"Old{columnName}"; + + // Rename the column so we can create the new one and copy over the data. + Rename + .Column(columnName) + .OnTable(tableName) + .To(oldColumnName) + .Do(); + + // Create new column with the correct type + // This is pretty ugly, but we have to do ti this way because the CacheInstruction.Instruction column doesn't support nullable. + // So we have to populate with some temporary placeholder value before we copy over the actual data. + ICreateColumnOptionBuilder builder = Create + .Column(columnName) + .OnTable(tableName) + .AsCustom("nvarchar(max)"); + + if (nullable is false) + { + builder + .NotNullable() + .WithDefaultValue("Placeholder"); + } + else + { + builder.Nullable(); + } + + builder.Do(); + + // Copy over data NPOCO doesn't support this for some reason, so we'll have to do it like so + // While we're add it we'll also set all the old values to be NULL since it's recommended here: + // https://learn.microsoft.com/en-us/sql/t-sql/data-types/ntext-text-and-image-transact-sql?view=sql-server-ver16#remarks + StringBuilder queryBuilder = new StringBuilder() + .AppendLine($"UPDATE {tableName}") + .AppendLine("SET") + .Append($"\t{SqlSyntax.GetFieldNameForUpdate(fieldSelector)} = {SqlSyntax.GetQuotedTableName(tableName)}.{SqlSyntax.GetQuotedColumnName(oldColumnName)}"); + + if (nullable) + { + queryBuilder.AppendLine($"\n,\t{SqlSyntax.GetQuotedColumnName(oldColumnName)} = NULL"); + } + + Sql copyDataQuery = Database.SqlContext.Sql(queryBuilder.ToString()); + Database.Execute(copyDataQuery); + + // Delete old column + Delete + .Column(oldColumnName) + .FromTable(tableName) + .Do(); + } +} diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/WebhookRequestDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/WebhookRequestDto.cs index e1f55ad042..80739770a0 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/WebhookRequestDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/WebhookRequestDto.cs @@ -20,6 +20,7 @@ public class WebhookRequestDto public string Alias { get; set; } = string.Empty; [Column(Name = "requestObject")] + [SpecialDbType(SpecialDbTypes.NVARCHARMAX)] [NullSetting(NullSetting = NullSettings.Null)] public string? RequestObject { get; set; } From 7443dd2bdc07994e20e93624ad8b7138b1efd9e6 Mon Sep 17 00:00:00 2001 From: Zeegaan Date: Mon, 27 Nov 2023 10:36:56 +0100 Subject: [PATCH 31/38] bump version --- version.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.json b/version.json index 9a77786a0f..33e6ec9c6f 100644 --- a/version.json +++ b/version.json @@ -1,6 +1,6 @@ { "$schema": "https://raw.githubusercontent.com/dotnet/Nerdbank.GitVersioning/main/src/NerdBank.GitVersioning/version.schema.json", - "version": "13.0.0-rc3", + "version": "13.0.0-rc4", "assemblyVersion": { "precision": "build" }, From bf8af4588e59055326ab2a8237d8133464e84135 Mon Sep 17 00:00:00 2001 From: Bjarke Berg Date: Mon, 27 Nov 2023 15:18:00 +0100 Subject: [PATCH 32/38] Centralised NuGet packages (#15293) * Moved to centralized nuget packages * Handle JsonSchema * Change PackageReference to PackageVersion * Opt out of central package management for mangement api (at least for versions less than 14) and the UI project * ManagePackageVersionsCentrally = false * Change folder acceptance tests are build, to avoid reading the test Directory.Packages.props * Change folder acceptance tests are build, to avoid reading the test Directory.Packages.props * change working directory * workingDirectory * Force the template to use local nuget packages * Force the template to use local nuget packages * clean up * added wait on * added wait on --- src/Directory.Packages.props | 70 ++++++ src/JsonSchema/JsonSchema.csproj | 1 + .../Umbraco.Cms.ManagementApi.csproj | 5 +- .../Umbraco.Cms.Persistence.Sqlite.csproj | 2 +- src/Umbraco.Cms/Umbraco.Cms.csproj | 1 + src/Umbraco.Core/Umbraco.Core.csproj | 30 +-- .../Umbraco.Examine.Lucene.csproj | 2 +- .../Umbraco.Infrastructure.csproj | 60 ++--- .../Umbraco.PublishedCache.NuCache.csproj | 8 +- .../Umbraco.Web.BackOffice.csproj | 4 +- .../Umbraco.Web.Common.csproj | 16 +- src/Umbraco.Web.UI/Umbraco.Web.UI.csproj | 1 + templates/Umbraco.Templates.csproj | 1 + .../UmbracoPackage/UmbracoPackage.csproj | 1 + .../UmbracoProject/UmbracoProject.csproj | 3 +- tests/Directory.Packages.props | 27 +++ .../Umbraco.TestData/Umbraco.TestData.csproj | 2 +- .../package-lock.json | 222 +++++++++++++++++- .../Umbraco.Tests.AcceptanceTest/package.json | 3 +- .../Umbraco.Tests.Benchmarks.csproj | 11 +- .../Umbraco.Tests.Common.csproj | 10 +- .../Umbraco.Tests.Integration.csproj | 10 +- .../Umbraco.Tests.UnitTests.csproj | 12 +- umbraco.sln | 2 + 24 files changed, 416 insertions(+), 88 deletions(-) create mode 100644 src/Directory.Packages.props create mode 100644 tests/Directory.Packages.props diff --git a/src/Directory.Packages.props b/src/Directory.Packages.props new file mode 100644 index 0000000000..a906a587ef --- /dev/null +++ b/src/Directory.Packages.props @@ -0,0 +1,70 @@ + + + + true + NU1507 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/JsonSchema/JsonSchema.csproj b/src/JsonSchema/JsonSchema.csproj index 5c2ba04f58..662c35ecb5 100644 --- a/src/JsonSchema/JsonSchema.csproj +++ b/src/JsonSchema/JsonSchema.csproj @@ -3,6 +3,7 @@ Exe false false + false diff --git a/src/Umbraco.Cms.ManagementApi/Umbraco.Cms.ManagementApi.csproj b/src/Umbraco.Cms.ManagementApi/Umbraco.Cms.ManagementApi.csproj index d49d146a6b..345336bbac 100644 --- a/src/Umbraco.Cms.ManagementApi/Umbraco.Cms.ManagementApi.csproj +++ b/src/Umbraco.Cms.ManagementApi/Umbraco.Cms.ManagementApi.csproj @@ -4,6 +4,7 @@ Contains the presentation layer for the Umbraco CMS Management API. false false + false @@ -12,7 +13,7 @@ - + @@ -20,7 +21,7 @@ - + diff --git a/src/Umbraco.Cms.Persistence.Sqlite/Umbraco.Cms.Persistence.Sqlite.csproj b/src/Umbraco.Cms.Persistence.Sqlite/Umbraco.Cms.Persistence.Sqlite.csproj index 10bb499c7d..f9755aad61 100644 --- a/src/Umbraco.Cms.Persistence.Sqlite/Umbraco.Cms.Persistence.Sqlite.csproj +++ b/src/Umbraco.Cms.Persistence.Sqlite/Umbraco.Cms.Persistence.Sqlite.csproj @@ -5,7 +5,7 @@ - + diff --git a/src/Umbraco.Cms/Umbraco.Cms.csproj b/src/Umbraco.Cms/Umbraco.Cms.csproj index 14804cae57..5c9c3ae6e6 100644 --- a/src/Umbraco.Cms/Umbraco.Cms.csproj +++ b/src/Umbraco.Cms/Umbraco.Cms.csproj @@ -4,6 +4,7 @@ Installs Umbraco CMS with all default dependencies in your ASP.NET Core project. false false + false diff --git a/src/Umbraco.Core/Umbraco.Core.csproj b/src/Umbraco.Core/Umbraco.Core.csproj index ef23b4fc00..5856781852 100644 --- a/src/Umbraco.Core/Umbraco.Core.csproj +++ b/src/Umbraco.Core/Umbraco.Core.csproj @@ -7,22 +7,22 @@ - - - - - - - - - - - - + + + + + + + + + + + + - - - + + + diff --git a/src/Umbraco.Examine.Lucene/Umbraco.Examine.Lucene.csproj b/src/Umbraco.Examine.Lucene/Umbraco.Examine.Lucene.csproj index 61b7446724..5ad950c7ee 100644 --- a/src/Umbraco.Examine.Lucene/Umbraco.Examine.Lucene.csproj +++ b/src/Umbraco.Examine.Lucene/Umbraco.Examine.Lucene.csproj @@ -7,7 +7,7 @@ - + diff --git a/src/Umbraco.Infrastructure/Umbraco.Infrastructure.csproj b/src/Umbraco.Infrastructure/Umbraco.Infrastructure.csproj index 9f46b4f4fb..d97cedddcc 100644 --- a/src/Umbraco.Infrastructure/Umbraco.Infrastructure.csproj +++ b/src/Umbraco.Infrastructure/Umbraco.Infrastructure.csproj @@ -11,36 +11,36 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Umbraco.PublishedCache.NuCache/Umbraco.PublishedCache.NuCache.csproj b/src/Umbraco.PublishedCache.NuCache/Umbraco.PublishedCache.NuCache.csproj index 725715b4dc..77c0aeaa70 100644 --- a/src/Umbraco.PublishedCache.NuCache/Umbraco.PublishedCache.NuCache.csproj +++ b/src/Umbraco.PublishedCache.NuCache/Umbraco.PublishedCache.NuCache.csproj @@ -7,10 +7,10 @@ - - - - + + + + diff --git a/src/Umbraco.Web.BackOffice/Umbraco.Web.BackOffice.csproj b/src/Umbraco.Web.BackOffice/Umbraco.Web.BackOffice.csproj index 32598379b4..8fac580b76 100644 --- a/src/Umbraco.Web.BackOffice/Umbraco.Web.BackOffice.csproj +++ b/src/Umbraco.Web.BackOffice/Umbraco.Web.BackOffice.csproj @@ -12,8 +12,8 @@ - - + + diff --git a/src/Umbraco.Web.Common/Umbraco.Web.Common.csproj b/src/Umbraco.Web.Common/Umbraco.Web.Common.csproj index 5ffee1aa11..9680655788 100644 --- a/src/Umbraco.Web.Common/Umbraco.Web.Common.csproj +++ b/src/Umbraco.Web.Common/Umbraco.Web.Common.csproj @@ -11,14 +11,14 @@ - - - - - - - - + + + + + + + + diff --git a/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj b/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj index b7be2ba90f..8a380dbc5d 100644 --- a/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj +++ b/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj @@ -2,6 +2,7 @@ Umbraco.Cms.Web.UI false + false diff --git a/templates/Umbraco.Templates.csproj b/templates/Umbraco.Templates.csproj index 10bbd666d1..6a0d70646f 100644 --- a/templates/Umbraco.Templates.csproj +++ b/templates/Umbraco.Templates.csproj @@ -8,6 +8,7 @@ true true . + false diff --git a/templates/UmbracoPackage/UmbracoPackage.csproj b/templates/UmbracoPackage/UmbracoPackage.csproj index 8ddba31890..baaefa77c4 100644 --- a/templates/UmbracoPackage/UmbracoPackage.csproj +++ b/templates/UmbracoPackage/UmbracoPackage.csproj @@ -8,6 +8,7 @@ ... umbraco plugin package UmbracoPackage + false diff --git a/templates/UmbracoProject/UmbracoProject.csproj b/templates/UmbracoProject/UmbracoProject.csproj index 7ae1dee47d..b0433f77ae 100644 --- a/templates/UmbracoProject/UmbracoProject.csproj +++ b/templates/UmbracoProject/UmbracoProject.csproj @@ -4,6 +4,7 @@ enable enable Umbraco.Cms.Web.UI + false @@ -26,7 +27,7 @@ false false - + diff --git a/tests/Directory.Packages.props b/tests/Directory.Packages.props new file mode 100644 index 0000000000..bbb3435b35 --- /dev/null +++ b/tests/Directory.Packages.props @@ -0,0 +1,27 @@ + + + + true + NU1507 + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/Umbraco.TestData/Umbraco.TestData.csproj b/tests/Umbraco.TestData/Umbraco.TestData.csproj index 64772d371e..38c0f77e77 100644 --- a/tests/Umbraco.TestData/Umbraco.TestData.csproj +++ b/tests/Umbraco.TestData/Umbraco.TestData.csproj @@ -6,7 +6,7 @@ - + diff --git a/tests/Umbraco.Tests.AcceptanceTest/package-lock.json b/tests/Umbraco.Tests.AcceptanceTest/package-lock.json index cb06c7964d..245171119f 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/package-lock.json +++ b/tests/Umbraco.Tests.AcceptanceTest/package-lock.json @@ -22,7 +22,8 @@ "ncp": "^2.0.0", "prompt": "^1.2.0", "tslib": "^2.4.0", - "typescript": "^4.8.3" + "typescript": "^4.8.3", + "wait-on": "^6.0.1" } }, "node_modules/@colors/colors": { @@ -34,6 +35,21 @@ "node": ">=0.1.90" } }, + "node_modules/@hapi/hoek": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", + "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", + "dev": true + }, + "node_modules/@hapi/topo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", + "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", + "dev": true, + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -84,6 +100,27 @@ "node": ">=16" } }, + "node_modules/@sideway/address": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", + "integrity": "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==", + "dev": true, + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@sideway/formula": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", + "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==", + "dev": true + }, + "node_modules/@sideway/pinpoint": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", + "dev": true + }, "node_modules/@umbraco/json-models-builders": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/@umbraco/json-models-builders/-/json-models-builders-1.0.6.tgz", @@ -139,6 +176,15 @@ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, + "node_modules/axios": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.25.0.tgz", + "integrity": "sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==", + "dev": true, + "dependencies": { + "follow-redirects": "^1.14.7" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -317,6 +363,26 @@ "node": ">=8" } }, + "node_modules/follow-redirects": { + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz", + "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, "node_modules/form-data": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", @@ -496,6 +562,25 @@ "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", "dev": true }, + "node_modules/joi": { + "version": "17.11.0", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.11.0.tgz", + "integrity": "sha512-NgB+lZLNoqISVy1rZocE9PZI36bL/77ie924Ri43yEvi9GUUMPeyVIr8KdFTMUlby1p0PBYMk9spIxEUQYqrJQ==", + "dev": true, + "dependencies": { + "@hapi/hoek": "^9.0.0", + "@hapi/topo": "^5.0.0", + "@sideway/address": "^4.1.3", + "@sideway/formula": "^3.0.1", + "@sideway/pinpoint": "^2.0.0" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", @@ -549,6 +634,15 @@ "node": "*" } }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/mute-stream": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", @@ -772,6 +866,15 @@ "queue-microtask": "^1.2.2" } }, + "node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "dev": true, + "dependencies": { + "tslib": "^2.1.0" + } + }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -826,6 +929,25 @@ "node": ">=4.2.0" } }, + "node_modules/wait-on": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-6.0.1.tgz", + "integrity": "sha512-zht+KASY3usTY5u2LgaNqn/Cd8MukxLGjdcZxT2ns5QzDmTFc4XoWBgC+C/na+sMRZTuVygQoMYwdcVjHnYIVw==", + "dev": true, + "dependencies": { + "axios": "^0.25.0", + "joi": "^17.6.0", + "lodash": "^4.17.21", + "minimist": "^1.2.5", + "rxjs": "^7.5.4" + }, + "bin": { + "wait-on": "bin/wait-on" + }, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", @@ -879,6 +1001,21 @@ "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", "dev": true }, + "@hapi/hoek": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", + "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", + "dev": true + }, + "@hapi/topo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", + "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", + "dev": true, + "requires": { + "@hapi/hoek": "^9.0.0" + } + }, "@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -914,6 +1051,27 @@ "playwright": "1.38.0" } }, + "@sideway/address": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", + "integrity": "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==", + "dev": true, + "requires": { + "@hapi/hoek": "^9.0.0" + } + }, + "@sideway/formula": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", + "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==", + "dev": true + }, + "@sideway/pinpoint": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", + "dev": true + }, "@umbraco/json-models-builders": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/@umbraco/json-models-builders/-/json-models-builders-1.0.6.tgz", @@ -963,6 +1121,15 @@ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, + "axios": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.25.0.tgz", + "integrity": "sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==", + "dev": true, + "requires": { + "follow-redirects": "^1.14.7" + } + }, "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -1102,6 +1269,12 @@ "to-regex-range": "^5.0.1" } }, + "follow-redirects": { + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz", + "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==", + "dev": true + }, "form-data": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", @@ -1235,6 +1408,25 @@ "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", "dev": true }, + "joi": { + "version": "17.11.0", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.11.0.tgz", + "integrity": "sha512-NgB+lZLNoqISVy1rZocE9PZI36bL/77ie924Ri43yEvi9GUUMPeyVIr8KdFTMUlby1p0PBYMk9spIxEUQYqrJQ==", + "dev": true, + "requires": { + "@hapi/hoek": "^9.0.0", + "@hapi/topo": "^5.0.0", + "@sideway/address": "^4.1.3", + "@sideway/formula": "^3.0.1", + "@sideway/pinpoint": "^2.0.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, "merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", @@ -1273,6 +1465,12 @@ "brace-expansion": "^1.1.7" } }, + "minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true + }, "mute-stream": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", @@ -1403,6 +1601,15 @@ "queue-microtask": "^1.2.2" } }, + "rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "dev": true, + "requires": { + "tslib": "^2.1.0" + } + }, "slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -1441,6 +1648,19 @@ "integrity": "sha512-goMHfm00nWPa8UvR/CPSvykqf6dVV8x/dp0c5mFTMTIu0u0FlGWRioyy7Nn0PGAdHxpJZnuO/ut+PpQ8UiHAig==", "dev": true }, + "wait-on": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-6.0.1.tgz", + "integrity": "sha512-zht+KASY3usTY5u2LgaNqn/Cd8MukxLGjdcZxT2ns5QzDmTFc4XoWBgC+C/na+sMRZTuVygQoMYwdcVjHnYIVw==", + "dev": true, + "requires": { + "axios": "^0.25.0", + "joi": "^17.6.0", + "lodash": "^4.17.21", + "minimist": "^1.2.5", + "rxjs": "^7.5.4" + } + }, "webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", diff --git a/tests/Umbraco.Tests.AcceptanceTest/package.json b/tests/Umbraco.Tests.AcceptanceTest/package.json index 5cabb6b091..2e86d70d5e 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/package.json +++ b/tests/Umbraco.Tests.AcceptanceTest/package.json @@ -15,7 +15,8 @@ "tslib": "^2.4.0", "del": "^6.0.0", "ncp": "^2.0.0", - "prompt": "^1.2.0" + "prompt": "^1.2.0", + "wait-on": "^6.0.1" }, "dependencies": { "@umbraco/json-models-builders": "^1.0.6", diff --git a/tests/Umbraco.Tests.Benchmarks/Umbraco.Tests.Benchmarks.csproj b/tests/Umbraco.Tests.Benchmarks/Umbraco.Tests.Benchmarks.csproj index cf1e6c383d..90044cf7af 100644 --- a/tests/Umbraco.Tests.Benchmarks/Umbraco.Tests.Benchmarks.csproj +++ b/tests/Umbraco.Tests.Benchmarks/Umbraco.Tests.Benchmarks.csproj @@ -4,14 +4,15 @@ false false false + false - - - - - + + + + + diff --git a/tests/Umbraco.Tests.Common/Umbraco.Tests.Common.csproj b/tests/Umbraco.Tests.Common/Umbraco.Tests.Common.csproj index 24c7fcdab2..3d109cd219 100644 --- a/tests/Umbraco.Tests.Common/Umbraco.Tests.Common.csproj +++ b/tests/Umbraco.Tests.Common/Umbraco.Tests.Common.csproj @@ -7,11 +7,11 @@ - - - - - + + + + + diff --git a/tests/Umbraco.Tests.Integration/Umbraco.Tests.Integration.csproj b/tests/Umbraco.Tests.Integration/Umbraco.Tests.Integration.csproj index 373d273786..9cda401ca9 100644 --- a/tests/Umbraco.Tests.Integration/Umbraco.Tests.Integration.csproj +++ b/tests/Umbraco.Tests.Integration/Umbraco.Tests.Integration.csproj @@ -10,11 +10,11 @@ - - - - - + + + + + diff --git a/tests/Umbraco.Tests.UnitTests/Umbraco.Tests.UnitTests.csproj b/tests/Umbraco.Tests.UnitTests/Umbraco.Tests.UnitTests.csproj index 9f28c725ae..e7061ed464 100644 --- a/tests/Umbraco.Tests.UnitTests/Umbraco.Tests.UnitTests.csproj +++ b/tests/Umbraco.Tests.UnitTests/Umbraco.Tests.UnitTests.csproj @@ -8,13 +8,13 @@ - - - - - + + + + + - + diff --git a/umbraco.sln b/umbraco.sln index fde6121b7d..dd1d229fb6 100644 --- a/umbraco.sln +++ b/umbraco.sln @@ -9,6 +9,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{B5BD12C1 tests\.editorconfig = tests\.editorconfig tests\codeanalysis.ruleset = tests\codeanalysis.ruleset tests\Directory.Build.props = tests\Directory.Build.props + tests\Directory.Packages.props = tests\Directory.Packages.props EndProjectSection EndProject Project("{E24C65DC-7377-472B-9ABA-BC803B73C61A}") = "Umbraco.Web.UI.Client", "http://localhost:3961", "{3819A550-DCEC-4153-91B4-8BA9F7F0B9B4}" @@ -120,6 +121,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution LICENSE.md = LICENSE.md umbraco.sln.DotSettings = umbraco.sln.DotSettings version.json = version.json + src\Directory.Packages.props = src\Directory.Packages.props EndProjectSection EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "build", "build", "{20CE9C97-9314-4A19-BCF1-D12CF49B7205}" From bf1a5b9b28f279de29c223fbd0231924181b6ba1 Mon Sep 17 00:00:00 2001 From: Bjarke Berg Date: Mon, 27 Nov 2023 18:09:30 +0100 Subject: [PATCH 33/38] Bump version --- version.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.json b/version.json index 3c0aeb9872..d733b40e8f 100644 --- a/version.json +++ b/version.json @@ -1,6 +1,6 @@ { "$schema": "https://raw.githubusercontent.com/dotnet/Nerdbank.GitVersioning/master/src/NerdBank.GitVersioning/version.schema.json", - "version": "10.8.0-rc", + "version": "10.8.0", "assemblyVersion": { "precision": "build" }, From 008d797a6614a508850cf8f33e04d27833d18fa3 Mon Sep 17 00:00:00 2001 From: Bjarke Berg Date: Mon, 27 Nov 2023 19:54:03 +0100 Subject: [PATCH 34/38] Added false --- src/Umbraco.Cms.Targets/Umbraco.Cms.Targets.csproj | 1 + .../Umbraco.New.Cms.Infrastructure.csproj | 1 + 2 files changed, 2 insertions(+) diff --git a/src/Umbraco.Cms.Targets/Umbraco.Cms.Targets.csproj b/src/Umbraco.Cms.Targets/Umbraco.Cms.Targets.csproj index 18f9beea96..d1314aba9a 100644 --- a/src/Umbraco.Cms.Targets/Umbraco.Cms.Targets.csproj +++ b/src/Umbraco.Cms.Targets/Umbraco.Cms.Targets.csproj @@ -6,6 +6,7 @@ false false + false diff --git a/src/Umbraco.New.Cms.Infrastructure/Umbraco.New.Cms.Infrastructure.csproj b/src/Umbraco.New.Cms.Infrastructure/Umbraco.New.Cms.Infrastructure.csproj index 82159079a4..f3a259f3a3 100644 --- a/src/Umbraco.New.Cms.Infrastructure/Umbraco.New.Cms.Infrastructure.csproj +++ b/src/Umbraco.New.Cms.Infrastructure/Umbraco.New.Cms.Infrastructure.csproj @@ -4,6 +4,7 @@ Contains the infrastructure assembly needed to run Umbraco CMS. false false + false From 8d76e32941ef32dce33202e47c55f5bfdd631655 Mon Sep 17 00:00:00 2001 From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com> Date: Tue, 28 Nov 2023 08:37:59 +0100 Subject: [PATCH 35/38] V13: Add more css custom properties to style the login screen (#15301) * add more css custom properties to control the login screen * add override for text color * add variables to control the font-size of the headline --- .../components/layouts/auth-layout.element.ts | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/src/Umbraco.Web.UI.Login/src/components/layouts/auth-layout.element.ts b/src/Umbraco.Web.UI.Login/src/components/layouts/auth-layout.element.ts index 44ebab1b3c..eba666d083 100644 --- a/src/Umbraco.Web.UI.Login/src/components/layouts/auth-layout.element.ts +++ b/src/Umbraco.Web.UI.Login/src/components/layouts/auth-layout.element.ts @@ -8,13 +8,21 @@ import { when } from 'lit/directives/when.js'; * @element umb-auth-layout * @slot - The content of the layout * @cssprop --umb-login-background - The background of the layout (default: #f4f4f4) + * @cssprop --umb-login-primary-color - The color of the headline (default: #283a97) + * @cssprop --umb-login-text-color - The color of the text (default: #000) + * @cssprop --umb-login-header-font-size - The font-size of the headline (default: 3rem) + * @cssprop --umb-login-header-font-size-large - The font-size of the headline on large screens (default: 4rem) + * @cssprop --umb-login-header-secondary-font-size - The font-size of the secondary headline (default: 2.4rem) * @cssprop --umb-login-image - The background of the image wrapper (default: the value of the backgroundImage property) * @cssprop --umb-login-image-display - The display of the image wrapper (default: flex) + * @cssprop --umb-login-image-border-radius - The border-radius of the image wrapper (default: 38px) * @cssprop --umb-login-content-background - The background of the content wrapper (default: none) * @cssprop --umb-login-content-display - The display of the content wrapper (default: flex) * @cssprop --umb-login-content-width - The width of the content wrapper (default: 100%) * @cssprop --umb-login-content-height - The height of the content wrapper (default: 100%) + * @cssprop --umb-login-content-border-radius - The border-radius of the content wrapper (default: 0) * @cssprop --umb-login-align-items - The align-items of the main wrapper (default: unset) + * @cssprop --umb-login-button-border-radius - The border-radius of the buttons (default: 45px) * @cssprop --umb-curves-color - The color of the curves (default: #f5c1bc) * @cssprop --umb-curves-display - The display of the curves (default: inline) */ @@ -97,20 +105,21 @@ export class UmbAuthLayoutElement extends LitElement { static styles: CSSResultGroup = [ css` :host { - --uui-color-interactive: #283a97; - --uui-button-border-radius: 45px; + --uui-color-interactive: var(--umb-login-primary-color, #283a97); + --uui-button-border-radius: var(--umb-login-button-border-radius, 45px); --uui-color-default: var(--uui-color-interactive); --uui-button-height: 42px; --uui-select-height: 38px; --input-height: 40px; - --header-font-size: 3rem; - --header-secondary-font-size: 2.4rem; + --header-font-size: var(--umb-login-header-font-size, 3rem); + --header-secondary-font-size: var(--umb-login-header-secondary-font-size, 2.4rem); --curves-color: var(--umb-curves-color, #f5c1bc); --curves-display: var(--umb-curves-display, inline); display: block; background: var(--umb-login-background, #f4f4f4); + color: var(--umb-login-text-color, #000); } #main-no-image, @@ -136,6 +145,7 @@ export class UmbAuthLayoutElement extends LitElement { height: var(--umb-login-content-height, 100%); box-sizing: border-box; overflow: auto; + border-radius: var(--umb-login-content-border-radius, 0); } #content { @@ -148,7 +158,7 @@ export class UmbAuthLayoutElement extends LitElement { background: var(--umb-login-image, var(--image)); width: 100%; height: 100%; - border-radius: 38px; + border-radius: var(--umb-login-image-border-radius, 38px); position: relative; overflow: hidden; color: var(--curves-color); @@ -181,7 +191,7 @@ export class UmbAuthLayoutElement extends LitElement { @media only screen and (min-width: 900px) { :host { - --header-font-size: 4rem; + --header-font-size: var(--umb-login-header-font-size-large, 4rem); } #main { From 32493c759a239d5d2303a894527be9dd1e8ceeba Mon Sep 17 00:00:00 2001 From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com> Date: Tue, 28 Nov 2023 08:48:55 +0100 Subject: [PATCH 36/38] add -login prefix to curves color --- .../src/components/layouts/auth-layout.element.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Umbraco.Web.UI.Login/src/components/layouts/auth-layout.element.ts b/src/Umbraco.Web.UI.Login/src/components/layouts/auth-layout.element.ts index eba666d083..4d9f972743 100644 --- a/src/Umbraco.Web.UI.Login/src/components/layouts/auth-layout.element.ts +++ b/src/Umbraco.Web.UI.Login/src/components/layouts/auth-layout.element.ts @@ -23,8 +23,8 @@ import { when } from 'lit/directives/when.js'; * @cssprop --umb-login-content-border-radius - The border-radius of the content wrapper (default: 0) * @cssprop --umb-login-align-items - The align-items of the main wrapper (default: unset) * @cssprop --umb-login-button-border-radius - The border-radius of the buttons (default: 45px) - * @cssprop --umb-curves-color - The color of the curves (default: #f5c1bc) - * @cssprop --umb-curves-display - The display of the curves (default: inline) + * @cssprop --umb-login-curves-color - The color of the curves (default: #f5c1bc) + * @cssprop --umb-login-curves-display - The display of the curves (default: inline) */ @customElement('umb-auth-layout') export class UmbAuthLayoutElement extends LitElement { @@ -114,8 +114,8 @@ export class UmbAuthLayoutElement extends LitElement { --input-height: 40px; --header-font-size: var(--umb-login-header-font-size, 3rem); --header-secondary-font-size: var(--umb-login-header-secondary-font-size, 2.4rem); - --curves-color: var(--umb-curves-color, #f5c1bc); - --curves-display: var(--umb-curves-display, inline); + --curves-color: var(--umb-login-curves-color, #f5c1bc); + --curves-display: var(--umb-login-curves-display, inline); display: block; background: var(--umb-login-background, #f4f4f4); From 1176f04caf855befbfbed032edb1448b30ddf995 Mon Sep 17 00:00:00 2001 From: Bjarke Berg Date: Tue, 28 Nov 2023 09:45:07 +0100 Subject: [PATCH 37/38] Updated pacakge-lock files --- src/Umbraco.Web.UI.Client/package-lock.json | 12 +- .../package-lock.json | 707 ------------------ 2 files changed, 6 insertions(+), 713 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/package-lock.json b/src/Umbraco.Web.UI.Client/package-lock.json index b38e5fabf8..77281b3435 100644 --- a/src/Umbraco.Web.UI.Client/package-lock.json +++ b/src/Umbraco.Web.UI.Client/package-lock.json @@ -9,7 +9,7 @@ "@microsoft/signalr": "7.0.12", "@umbraco-ui/uui": "1.5.0", "@umbraco-ui/uui-css": "1.5.0", - "ace-builds": "1.30.0", + "ace-builds": "1.31.1", "angular": "1.8.3", "angular-animate": "1.8.3", "angular-aria": "1.8.3", @@ -82,8 +82,8 @@ "run-sequence": "2.2.1" }, "engines": { - "node": ">=18.16", - "npm": ">=9.5" + "node": ">=20.9", + "npm": ">=10.1" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -3107,9 +3107,9 @@ } }, "node_modules/ace-builds": { - "version": "1.30.0", - "resolved": "https://registry.npmjs.org/ace-builds/-/ace-builds-1.30.0.tgz", - "integrity": "sha512-ZC+G1ozrrVCVL/KPkeU9R7TEwYeNJUYRrjnEvNhF8r2+WR2tkcCjmduL8M6D3abIdf/16ccEXHtpoRBhAnTyCw==" + "version": "1.31.1", + "resolved": "https://registry.npmjs.org/ace-builds/-/ace-builds-1.31.1.tgz", + "integrity": "sha512-3DnE5bZF6Ji+l4F5acoLk+rV7mxrUt1C4r61Xy9owp5rVM4lj5NL8GJfoX6Jnnbhx6kKV7Vdpb+Tco+0ORTvhg==" }, "node_modules/acorn": { "version": "8.9.0", diff --git a/tests/Umbraco.Tests.AcceptanceTest/package-lock.json b/tests/Umbraco.Tests.AcceptanceTest/package-lock.json index edfbd3654b..28bcb052fc 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/package-lock.json +++ b/tests/Umbraco.Tests.AcceptanceTest/package-lock.json @@ -993,712 +993,5 @@ "node": ">= 6" } } - }, - "dependencies": { - "@colors/colors": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", - "dev": true - }, - "@hapi/hoek": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", - "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", - "dev": true - }, - "@hapi/topo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", - "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", - "dev": true, - "requires": { - "@hapi/hoek": "^9.0.0" - } - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@playwright/test": { - "version": "1.38.0", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.38.0.tgz", - "integrity": "sha512-xis/RXXsLxwThKnlIXouxmIvvT3zvQj1JE39GsNieMUrMpb3/GySHDh2j8itCG22qKVD4MYLBp7xB73cUW/UUw==", - "dev": true, - "requires": { - "playwright": "1.38.0" - } - }, - "@sideway/address": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", - "integrity": "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==", - "dev": true, - "requires": { - "@hapi/hoek": "^9.0.0" - } - }, - "@sideway/formula": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", - "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==", - "dev": true - }, - "@sideway/pinpoint": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", - "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", - "dev": true - }, - "@umbraco/json-models-builders": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@umbraco/json-models-builders/-/json-models-builders-1.0.6.tgz", - "integrity": "sha512-bXwfXcpuqG1Ye714L9KJEGXuSzJfckysE/6CuPjdG8FqHWTE1brv28teR2oMw+ih8ca2u2zUboRgdzLEU/1D3Q==", - "requires": { - "camelize": "^1.0.0", - "faker": "^4.1.0" - } - }, - "@umbraco/playwright-testhelpers": { - "version": "1.0.25", - "resolved": "https://registry.npmjs.org/@umbraco/playwright-testhelpers/-/playwright-testhelpers-1.0.25.tgz", - "integrity": "sha512-6H452J6LhP0EHjF4jR7V7i0U8WPTiAbSyhN1J459BbbYEJ4QX1A2ZlCdA6VSBAsK1xYdMXD+yxsVJq7AAwiy9A==", - "requires": { - "@umbraco/json-models-builders": "^1.0.6", - "camelize": "^1.0.0", - "faker": "^4.1.0", - "form-data": "^4.0.0", - "node-fetch": "^2.6.7", - "xhr2": "^0.2.1" - } - }, - "aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "async": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz", - "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" - }, - "axios": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.25.0.tgz", - "integrity": "sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==", - "dev": true, - "requires": { - "follow-redirects": "^1.14.7" - } - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "camelize": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.0.tgz", - "integrity": "sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs=" - }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true - }, - "colors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", - "integrity": "sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==", - "dev": true - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "cycle": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz", - "integrity": "sha512-TVF6svNzeQCOpjCqsy0/CSy8VgObG3wXusJ73xW2GbG5rGx7lC8zxDSURicsXI2UsGdi2L0QNRCi745/wUDvsA==", - "dev": true - }, - "del": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", - "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", - "dev": true, - "requires": { - "globby": "^11.0.1", - "graceful-fs": "^4.2.4", - "is-glob": "^4.0.1", - "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.2", - "p-map": "^4.0.0", - "rimraf": "^3.0.2", - "slash": "^3.0.0" - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "dotenv": { - "version": "16.0.2", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.2.tgz", - "integrity": "sha512-JvpYKUmzQhYoIFgK2MOnF3bciIZoItIIoryihy0rIA+H4Jy0FmgyKYAHCTN98P5ybGSJcIFbh6QKeJdtZd1qhA==" - }, - "eyes": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", - "integrity": "sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==", - "dev": true - }, - "faker": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/faker/-/faker-4.1.0.tgz", - "integrity": "sha1-HkW7vsxndLPBlfrSg1EJxtdIzD8=" - }, - "fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - } - }, - "fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", - "dev": true - }, - "form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - } - }, - "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true - }, - "ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true - }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", - "dev": true - }, - "is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", - "dev": true - }, - "joi": { - "version": "17.6.3", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.6.3.tgz", - "integrity": "sha512-YlQsIaS9MHYekzf1Qe11LjTkNzx9qhYluK3172z38RxYoAUf82XMX1p1DG1H4Wtk2ED/vPdSn9OggqtDu+aTow==", - "dev": true, - "requires": { - "@hapi/hoek": "^9.0.0", - "@hapi/topo": "^5.0.0", - "@sideway/address": "^4.1.3", - "@sideway/formula": "^3.0.0", - "@sideway/pinpoint": "^2.0.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "mime-db": { - "version": "1.51.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", - "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==" - }, - "mime-types": { - "version": "2.1.34", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", - "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", - "requires": { - "mime-db": "1.51.0" - } - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", - "dev": true - }, - "mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true - }, - "ncp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", - "integrity": "sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==", - "dev": true - }, - "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "requires": { - "whatwg-url": "^5.0.0" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true - }, - "playwright": { - "version": "1.38.0", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.38.0.tgz", - "integrity": "sha512-fJGw+HO0YY+fU/F1N57DMO+TmXHTrmr905J05zwAQE9xkuwP/QLDk63rVhmyxh03dYnEhnRbsdbH9B0UVVRB3A==", - "dev": true, - "requires": { - "fsevents": "2.3.2", - "playwright-core": "1.38.0" - } - }, - "playwright-core": { - "version": "1.38.0", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.38.0.tgz", - "integrity": "sha512-f8z1y8J9zvmHoEhKgspmCvOExF2XdcxMW8jNRuX4vkQFrzV4MlZ55iwb5QeyiFQgOFCUolXiRHgpjSEnqvO48g==", - "dev": true - }, - "prompt": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/prompt/-/prompt-1.3.0.tgz", - "integrity": "sha512-ZkaRWtaLBZl7KKAKndKYUL8WqNT+cQHKRZnT4RYYms48jQkFw3rrBL+/N5K/KtdEveHkxs982MX2BkDKub2ZMg==", - "dev": true, - "requires": { - "@colors/colors": "1.5.0", - "async": "3.2.3", - "read": "1.0.x", - "revalidator": "0.1.x", - "winston": "2.x" - } - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true - }, - "read": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", - "integrity": "sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==", - "dev": true, - "requires": { - "mute-stream": "~0.0.4" - } - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, - "revalidator": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/revalidator/-/revalidator-0.1.8.tgz", - "integrity": "sha512-xcBILK2pA9oh4SiinPEZfhP8HfrB/ha+a2fTMyl7Om2WjlDVrOQy99N2MXXlUHqGJz4qEu2duXxHJjDWuK/0xg==", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "rxjs": { - "version": "7.5.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.7.tgz", - "integrity": "sha512-z9MzKh/UcOqB3i20H6rtrlaE/CgjLOvheWK/9ILrbhROGTweAi1BaFsTT9FbwZi5Trr1qNRs+MXkhmR06awzQA==", - "dev": true, - "requires": { - "tslib": "^2.1.0" - } - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "stack-trace": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", - "dev": true - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", - "dev": true - }, - "typescript": { - "version": "4.8.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.3.tgz", - "integrity": "sha512-goMHfm00nWPa8UvR/CPSvykqf6dVV8x/dp0c5mFTMTIu0u0FlGWRioyy7Nn0PGAdHxpJZnuO/ut+PpQ8UiHAig==", - "dev": true - }, - "wait-on": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-6.0.1.tgz", - "integrity": "sha512-zht+KASY3usTY5u2LgaNqn/Cd8MukxLGjdcZxT2ns5QzDmTFc4XoWBgC+C/na+sMRZTuVygQoMYwdcVjHnYIVw==", - "dev": true, - "requires": { - "axios": "^0.25.0", - "joi": "^17.6.0", - "lodash": "^4.17.21", - "minimist": "^1.2.5", - "rxjs": "^7.5.4" - } - }, - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "winston": { - "version": "2.4.6", - "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.6.tgz", - "integrity": "sha512-J5Zu4p0tojLde8mIOyDSsmLmcP8I3Z6wtwpTDHx1+hGcdhxcJaAmG4CFtagkb+NiN1M9Ek4b42pzMWqfc9jm8w==", - "dev": true, - "requires": { - "async": "^3.2.3", - "colors": "1.0.x", - "cycle": "1.0.x", - "eyes": "0.1.x", - "isstream": "0.1.x", - "stack-trace": "0.0.x" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "xhr2": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/xhr2/-/xhr2-0.2.1.tgz", - "integrity": "sha512-sID0rrVCqkVNUn8t6xuv9+6FViXjUVXq8H5rWOH2rz9fDNQEd4g0EA2XlcEdJXRz5BMEn4O1pJFdT+z4YHhoWw==" - } } } From 34d6695c896964a74d0cd410ebb8a64b991c30d6 Mon Sep 17 00:00:00 2001 From: Kenn Jacobsen Date: Tue, 28 Nov 2023 13:21:09 +0100 Subject: [PATCH 38/38] Don't expect specific .NET feature versions - utilize rollForward instead. (#15304) Co-authored-by: Bjarke Berg --- global.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/global.json b/global.json index d4e0b89930..da113e4cbd 100644 --- a/global.json +++ b/global.json @@ -2,6 +2,6 @@ "sdk": { "version": "8.0.0", "rollForward": "latestFeature", - "allowPrerelease": true + "allowPrerelease": false } } \ No newline at end of file