From bb058c4f893be153332e48b95d7eedf88d67a969 Mon Sep 17 00:00:00 2001 From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com> Date: Wed, 26 Jun 2024 11:22:45 +0200 Subject: [PATCH 01/20] update lockfile --- src/Umbraco.Web.UI.Login/package-lock.json | 46 ++++++++++++++-------- 1 file changed, 30 insertions(+), 16 deletions(-) diff --git a/src/Umbraco.Web.UI.Login/package-lock.json b/src/Umbraco.Web.UI.Login/package-lock.json index 33ed12c308..73617f8f64 100644 --- a/src/Umbraco.Web.UI.Login/package-lock.json +++ b/src/Umbraco.Web.UI.Login/package-lock.json @@ -20,25 +20,39 @@ }, "../Umbraco.Web.UI.Client": { "name": "@umbraco-cms/backoffice", - "version": "14.0.0-rc2", + "version": "14.1.0", "dev": true, "license": "MIT", + "workspaces": [ + "./src/packages/block", + "./src/packages/core", + "./src/packages/data-type", + "./src/packages/dictionary", + "./src/packages/documents", + "./src/packages/health-check", + "./src/packages/language", + "./src/packages/tags", + "./src/packages/umbraco-news", + "./src/packages/webhook", + "./src/packages/health-check", + "./src/packages/tags" + ], "dependencies": { - "@types/diff": "^5.0.9", + "@types/diff": "^5.2.1", "@types/dompurify": "^3.0.5", "@types/uuid": "^9.0.8", - "@umbraco-ui/uui": "1.8.0-rc.3", - "@umbraco-ui/uui-css": "1.8.0-rc.0", + "@umbraco-ui/uui": "1.8.2", + "@umbraco-ui/uui-css": "1.8.0", "base64-js": "^1.5.1", "diff": "^5.2.0", "dompurify": "^3.1.4", - "element-internals-polyfill": "^1.3.10", - "lit": "^3.1.2", - "marked": "^12.0.0", - "monaco-editor": "^0.46.0", + "element-internals-polyfill": "^1.3.11", + "lit": "^3.1.3", + "marked": "^12.0.2", + "monaco-editor": "^0.48.0", "rxjs": "^7.8.1", "tinymce": "^6.8.3", - "tinymce-i18n": "^24.1.29", + "tinymce-i18n": "^24.5.8", "uuid": "^9.0.1" }, "devDependencies": { @@ -64,7 +78,7 @@ "@typescript-eslint/parser": "^7.1.0", "@web/dev-server-esbuild": "^1.0.2", "@web/dev-server-import-maps": "^0.2.0", - "@web/dev-server-rollup": "^0.6.1", + "@web/dev-server-rollup": "^0.6.3", "@web/test-runner": "^0.18.1", "@web/test-runner-playwright": "^0.11.0", "babel-loader": "^9.1.3", @@ -72,13 +86,13 @@ "eslint-config-prettier": "^9.1.0", "eslint-import-resolver-typescript": "^3.6.1", "eslint-plugin-import": "^2.29.1", - "eslint-plugin-lit": "^1.11.0", + "eslint-plugin-lit": "^1.14.0", "eslint-plugin-lit-a11y": "^4.1.1", "eslint-plugin-local-rules": "^2.0.1", "eslint-plugin-storybook": "^0.6.15", "eslint-plugin-wc": "^2.0.4", "glob": "^10.3.10", - "lucide-static": "^0.367.0", + "lucide-static": "^0.379.0", "msw": "^1.3.2", "playwright-msw": "^3.0.1", "prettier": "3.2.5", @@ -89,15 +103,15 @@ "rollup-plugin-esbuild": "^6.1.1", "rollup-plugin-import-css": "^3.5.0", "rollup-plugin-web-worker-loader": "^1.6.1", - "simple-icons": "^11.11.0", + "simple-icons": "^12.0.0", "storybook": "^7.6.17", "tiny-glob": "^0.2.9", "tsc-alias": "^1.8.8", - "typedoc": "^0.25.10", - "typescript": "^5.4.5", + "typedoc": "^0.25.13", + "typescript": "^5.5.2", "typescript-json-schema": "^0.63.0", "vite": "^5.2.9", - "vite-plugin-static-copy": "^1.0.2", + "vite-plugin-static-copy": "^1.0.5", "vite-tsconfig-paths": "^4.3.2", "web-component-analyzer": "^2.0.0" }, From f1b54fe4268388850bfce4a10daf83017efd4c37 Mon Sep 17 00:00:00 2001 From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com> Date: Wed, 26 Jun 2024 11:34:52 +0200 Subject: [PATCH 02/20] fix login build errors --- src/Umbraco.Web.UI.Login/package-lock.json | 1787 +++++++++++++---- src/Umbraco.Web.UI.Login/package.json | 4 +- .../public/mockServiceWorker.js | 2 +- 3 files changed, 1420 insertions(+), 373 deletions(-) diff --git a/src/Umbraco.Web.UI.Login/package-lock.json b/src/Umbraco.Web.UI.Login/package-lock.json index 73617f8f64..43eaac8a2b 100644 --- a/src/Umbraco.Web.UI.Login/package-lock.json +++ b/src/Umbraco.Web.UI.Login/package-lock.json @@ -6,8 +6,8 @@ "": { "name": "login", "devDependencies": { - "@umbraco-cms/backoffice": "file:../Umbraco.Web.UI.Client", - "@umbraco-ui/uui-css": "^1.8.0-rc.0", + "@umbraco-cms/backoffice": "^14.0.0", + "@umbraco-ui/uui-css": "^1.8.0", "msw": "^2.3.0", "typescript": "^5.4.5", "vite": "^5.2.11", @@ -18,108 +18,6 @@ "npm": ">=10.1" } }, - "../Umbraco.Web.UI.Client": { - "name": "@umbraco-cms/backoffice", - "version": "14.1.0", - "dev": true, - "license": "MIT", - "workspaces": [ - "./src/packages/block", - "./src/packages/core", - "./src/packages/data-type", - "./src/packages/dictionary", - "./src/packages/documents", - "./src/packages/health-check", - "./src/packages/language", - "./src/packages/tags", - "./src/packages/umbraco-news", - "./src/packages/webhook", - "./src/packages/health-check", - "./src/packages/tags" - ], - "dependencies": { - "@types/diff": "^5.2.1", - "@types/dompurify": "^3.0.5", - "@types/uuid": "^9.0.8", - "@umbraco-ui/uui": "1.8.2", - "@umbraco-ui/uui-css": "1.8.0", - "base64-js": "^1.5.1", - "diff": "^5.2.0", - "dompurify": "^3.1.4", - "element-internals-polyfill": "^1.3.11", - "lit": "^3.1.3", - "marked": "^12.0.2", - "monaco-editor": "^0.48.0", - "rxjs": "^7.8.1", - "tinymce": "^6.8.3", - "tinymce-i18n": "^24.5.8", - "uuid": "^9.0.1" - }, - "devDependencies": { - "@babel/core": "^7.24.3", - "@hey-api/openapi-ts": "^0.37.3", - "@mdx-js/react": "^3.0.0", - "@open-wc/testing": "^4.0.0", - "@playwright/test": "^1.41.1", - "@rollup/plugin-commonjs": "^25.0.7", - "@rollup/plugin-json": "^6.1.0", - "@rollup/plugin-node-resolve": "^15.2.3", - "@rollup/plugin-replace": "^5.0.5", - "@storybook/addon-a11y": "^7.6.17", - "@storybook/addon-actions": "^7.6.17", - "@storybook/addon-essentials": "^7.6.17", - "@storybook/addon-links": "^7.6.17", - "@storybook/mdx2-csf": "^1.1.0", - "@storybook/web-components": "^7.6.17", - "@storybook/web-components-vite": "^7.6.17", - "@types/chai": "^4.3.5", - "@types/mocha": "^10.0.1", - "@typescript-eslint/eslint-plugin": "^7.1.0", - "@typescript-eslint/parser": "^7.1.0", - "@web/dev-server-esbuild": "^1.0.2", - "@web/dev-server-import-maps": "^0.2.0", - "@web/dev-server-rollup": "^0.6.3", - "@web/test-runner": "^0.18.1", - "@web/test-runner-playwright": "^0.11.0", - "babel-loader": "^9.1.3", - "eslint": "^8.56.0", - "eslint-config-prettier": "^9.1.0", - "eslint-import-resolver-typescript": "^3.6.1", - "eslint-plugin-import": "^2.29.1", - "eslint-plugin-lit": "^1.14.0", - "eslint-plugin-lit-a11y": "^4.1.1", - "eslint-plugin-local-rules": "^2.0.1", - "eslint-plugin-storybook": "^0.6.15", - "eslint-plugin-wc": "^2.0.4", - "glob": "^10.3.10", - "lucide-static": "^0.379.0", - "msw": "^1.3.2", - "playwright-msw": "^3.0.1", - "prettier": "3.2.5", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "remark-gfm": "^3.0.1", - "rollup": "^4.14.1", - "rollup-plugin-esbuild": "^6.1.1", - "rollup-plugin-import-css": "^3.5.0", - "rollup-plugin-web-worker-loader": "^1.6.1", - "simple-icons": "^12.0.0", - "storybook": "^7.6.17", - "tiny-glob": "^0.2.9", - "tsc-alias": "^1.8.8", - "typedoc": "^0.25.13", - "typescript": "^5.5.2", - "typescript-json-schema": "^0.63.0", - "vite": "^5.2.9", - "vite-plugin-static-copy": "^1.0.5", - "vite-tsconfig-paths": "^4.3.2", - "web-component-analyzer": "^2.0.0" - }, - "engines": { - "node": ">=20.9 <21", - "npm": ">=10.1 < 11" - } - }, "node_modules/@bundled-es-modules/cookie": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@bundled-es-modules/cookie/-/cookie-2.0.0.tgz", @@ -139,9 +37,9 @@ } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz", - "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", "cpu": [ "ppc64" ], @@ -155,9 +53,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz", - "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", "cpu": [ "arm" ], @@ -171,9 +69,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz", - "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", "cpu": [ "arm64" ], @@ -187,9 +85,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz", - "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", "cpu": [ "x64" ], @@ -203,9 +101,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz", - "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", "cpu": [ "arm64" ], @@ -219,9 +117,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz", - "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", "cpu": [ "x64" ], @@ -235,9 +133,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz", - "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", "cpu": [ "arm64" ], @@ -251,9 +149,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz", - "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", "cpu": [ "x64" ], @@ -267,9 +165,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz", - "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", "cpu": [ "arm" ], @@ -283,9 +181,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz", - "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", "cpu": [ "arm64" ], @@ -299,9 +197,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz", - "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", "cpu": [ "ia32" ], @@ -315,9 +213,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz", - "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", "cpu": [ "loong64" ], @@ -331,9 +229,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz", - "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", "cpu": [ "mips64el" ], @@ -347,9 +245,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz", - "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", "cpu": [ "ppc64" ], @@ -363,9 +261,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz", - "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", "cpu": [ "riscv64" ], @@ -379,9 +277,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz", - "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", "cpu": [ "s390x" ], @@ -395,9 +293,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz", - "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", "cpu": [ "x64" ], @@ -411,9 +309,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz", - "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", "cpu": [ "x64" ], @@ -427,9 +325,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz", - "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", "cpu": [ "x64" ], @@ -443,9 +341,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz", - "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", "cpu": [ "x64" ], @@ -459,9 +357,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz", - "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", "cpu": [ "arm64" ], @@ -475,9 +373,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz", - "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", "cpu": [ "ia32" ], @@ -491,9 +389,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz", - "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", "cpu": [ "x64" ], @@ -507,35 +405,34 @@ } }, "node_modules/@inquirer/confirm": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-3.0.0.tgz", - "integrity": "sha512-LHeuYP1D8NmQra1eR4UqvZMXwxEdDXyElJmmZfU44xdNLL6+GcQBS0uE16vyfZVjH8c22p9e+DStROfE/hyHrg==", + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-3.1.10.tgz", + "integrity": "sha512-/aAHu83Njy6yf44T+ZrRPUkMcUqprrOiIKsyMvf9jOV+vF5BNb2ja1aLP33MK36W8eaf91MTL/mU/e6METuENg==", "dev": true, "dependencies": { - "@inquirer/core": "^7.0.0", - "@inquirer/type": "^1.2.0" + "@inquirer/core": "^8.2.3", + "@inquirer/type": "^1.3.3" }, "engines": { "node": ">=18" } }, "node_modules/@inquirer/core": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-7.0.0.tgz", - "integrity": "sha512-g13W5yEt9r1sEVVriffJqQ8GWy94OnfxLCreNSOTw0HPVcszmc/If1KIf7YBmlwtX4klmvwpZHnQpl3N7VX2xA==", + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-8.2.3.tgz", + "integrity": "sha512-WrpDVPAaxJQjHid3Ra4FhUO70YBzkHSYVyW5X48L5zHYdudoPISJqTRRWSeamHfaXda7PNNaC5Py5MEo7QwBNA==", "dev": true, "dependencies": { - "@inquirer/type": "^1.2.0", + "@inquirer/figures": "^1.0.3", + "@inquirer/type": "^1.3.3", "@types/mute-stream": "^0.0.4", - "@types/node": "^20.11.16", + "@types/node": "^20.14.6", "@types/wrap-ansi": "^3.0.0", "ansi-escapes": "^4.3.2", "chalk": "^4.1.2", "cli-spinners": "^2.9.2", "cli-width": "^4.1.0", - "figures": "^3.2.0", "mute-stream": "^1.0.0", - "run-async": "^3.0.0", "signal-exit": "^4.1.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^6.2.0" @@ -544,24 +441,19 @@ "node": ">=18" } }, - "node_modules/@inquirer/core/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "node_modules/@inquirer/figures": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.3.tgz", + "integrity": "sha512-ErXXzENMH5pJt5/ssXV0DfWUZqly8nGzf0UcBV9xTnP+KyffE2mqyxIMBrZ8ijQck2nU0TQm40EQB53YreyWHw==", "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, "engines": { - "node": ">=8" + "node": ">=18" } }, "node_modules/@inquirer/type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-1.2.0.tgz", - "integrity": "sha512-/vvkUkYhrjbm+RolU7V1aUFDydZVKNKqKHR5TsE+j5DXgXFwrsOPcoGUJ02K0O7q7O53CU2DOTMYCHeGZ25WHA==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-1.3.3.tgz", + "integrity": "sha512-xTUt0NulylX27/zMx04ZYar/kr1raaiFTVvQ5feljQsiAgdm0WPj4S73/ye0fbslh+15QrIuDvfCXTek7pMY5A==", "dev": true, "engines": { "node": ">=18" @@ -585,9 +477,9 @@ } }, "node_modules/@mswjs/cookies": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@mswjs/cookies/-/cookies-1.1.0.tgz", - "integrity": "sha512-0ZcCVQxifZmhwNBoQIrystCb+2sWBY2Zw8lpfJBPCHGCA/HWqehITeCRVIv4VMy8MPlaHo2w2pTHFV2pFfqKPw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@mswjs/cookies/-/cookies-1.1.1.tgz", + "integrity": "sha512-W68qOHEjx1iD+4VjQudlx26CPIoxmIAtK4ZCexU0/UJBG6jYhcuyzKJx+Iw8uhBIGd9eba64XgWVgo20it1qwA==", "dev": true, "engines": { "node": ">=18" @@ -633,9 +525,9 @@ "dev": true }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.13.0.tgz", - "integrity": "sha512-5ZYPOuaAqEH/W3gYsRkxQATBW3Ii1MfaT4EQstTnLKViLi2gLSQmlmtTpGucNP3sXEpOiI5tdGhjdE111ekyEg==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.18.0.tgz", + "integrity": "sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ==", "cpu": [ "arm" ], @@ -646,9 +538,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.13.0.tgz", - "integrity": "sha512-BSbaCmn8ZadK3UAQdlauSvtaJjhlDEjS5hEVVIN3A4bbl3X+otyf/kOJV08bYiRxfejP3DXFzO2jz3G20107+Q==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.18.0.tgz", + "integrity": "sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA==", "cpu": [ "arm64" ], @@ -659,9 +551,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.13.0.tgz", - "integrity": "sha512-Ovf2evVaP6sW5Ut0GHyUSOqA6tVKfrTHddtmxGQc1CTQa1Cw3/KMCDEEICZBbyppcwnhMwcDce9ZRxdWRpVd6g==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.18.0.tgz", + "integrity": "sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w==", "cpu": [ "arm64" ], @@ -672,9 +564,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.13.0.tgz", - "integrity": "sha512-U+Jcxm89UTK592vZ2J9st9ajRv/hrwHdnvyuJpa5A2ngGSVHypigidkQJP+YiGL6JODiUeMzkqQzbCG3At81Gg==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.18.0.tgz", + "integrity": "sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA==", "cpu": [ "x64" ], @@ -685,9 +577,22 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.13.0.tgz", - "integrity": "sha512-8wZidaUJUTIR5T4vRS22VkSMOVooG0F4N+JSwQXWSRiC6yfEsFMLTYRFHvby5mFFuExHa/yAp9juSphQQJAijQ==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.18.0.tgz", + "integrity": "sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.18.0.tgz", + "integrity": "sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A==", "cpu": [ "arm" ], @@ -698,9 +603,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.13.0.tgz", - "integrity": "sha512-Iu0Kno1vrD7zHQDxOmvweqLkAzjxEVqNhUIXBsZ8hu8Oak7/5VTPrxOEZXYC1nmrBVJp0ZcL2E7lSuuOVaE3+w==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.18.0.tgz", + "integrity": "sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw==", "cpu": [ "arm64" ], @@ -711,9 +616,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.13.0.tgz", - "integrity": "sha512-C31QrW47llgVyrRjIwiOwsHFcaIwmkKi3PCroQY5aVq4H0A5v/vVVAtFsI1nfBngtoRpeREvZOkIhmRwUKkAdw==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.18.0.tgz", + "integrity": "sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ==", "cpu": [ "arm64" ], @@ -723,10 +628,23 @@ "linux" ] }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.18.0.tgz", + "integrity": "sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.13.0.tgz", - "integrity": "sha512-Oq90dtMHvthFOPMl7pt7KmxzX7E71AfyIhh+cPhLY9oko97Zf2C9tt/XJD4RgxhaGeAraAXDtqxvKE1y/j35lA==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.18.0.tgz", + "integrity": "sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg==", "cpu": [ "riscv64" ], @@ -736,10 +654,23 @@ "linux" ] }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.18.0.tgz", + "integrity": "sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.13.0.tgz", - "integrity": "sha512-yUD/8wMffnTKuiIsl6xU+4IA8UNhQ/f1sAnQebmE/lyQ8abjsVyDkyRkWop0kdMhKMprpNIhPmYlCxgHrPoXoA==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.18.0.tgz", + "integrity": "sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w==", "cpu": [ "x64" ], @@ -750,9 +681,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.13.0.tgz", - "integrity": "sha512-9RyNqoFNdF0vu/qqX63fKotBh43fJQeYC98hCaf89DYQpv+xu0D8QFSOS0biA7cGuqJFOc1bJ+m2rhhsKcw1hw==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.18.0.tgz", + "integrity": "sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg==", "cpu": [ "x64" ], @@ -763,9 +694,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.13.0.tgz", - "integrity": "sha512-46ue8ymtm/5PUU6pCvjlic0z82qWkxv54GTJZgHrQUuZnVH+tvvSP0LsozIDsCBFO4VjJ13N68wqrKSeScUKdA==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.18.0.tgz", + "integrity": "sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA==", "cpu": [ "arm64" ], @@ -776,9 +707,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.13.0.tgz", - "integrity": "sha512-P5/MqLdLSlqxbeuJ3YDeX37srC8mCflSyTrUsgbU1c/U9j6l2g2GiIdYaGD9QjdMQPMSgYm7hgg0551wHyIluw==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.18.0.tgz", + "integrity": "sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg==", "cpu": [ "ia32" ], @@ -789,9 +720,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.13.0.tgz", - "integrity": "sha512-UKXUQNbO3DOhzLRwHSpa0HnhhCgNODvfoPWv2FCXme8N/ANFfhIPMGuOT+QuKd16+B5yxZ0HdpNlqPvTMS1qfw==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.18.0.tgz", + "integrity": "sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g==", "cpu": [ "x64" ], @@ -807,6 +738,23 @@ "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==", "dev": true }, + "node_modules/@types/diff": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/@types/diff/-/diff-5.2.1.tgz", + "integrity": "sha512-uxpcuwWJGhe2AR1g8hD9F5OYGCqjqWnBUQFD8gMZsDbv8oPHzxJF6iMO6n8Tk0AdzlxoaaoQhOYlIg/PukVU8g==", + "dev": true, + "peer": true + }, + "node_modules/@types/dompurify": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/dompurify/-/dompurify-3.0.5.tgz", + "integrity": "sha512-1Wg0g3BtQF7sSb27fJQAKck1HECM6zV1EB66j8JH9i3LCjYabJa0FSdiSgsD5K/RbrsR0SiraKacLB+T8ZVYAg==", + "dev": true, + "peer": true, + "dependencies": { + "@types/trusted-types": "*" + } + }, "node_modules/@types/estree": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", @@ -823,18 +771,18 @@ } }, "node_modules/@types/node": { - "version": "20.11.17", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.17.tgz", - "integrity": "sha512-QmgQZGWu1Yw9TDyAP9ZzpFJKynYNeOvwMJmaxABfieQoVoiVOS6MN1WSpqpRcbeA5+RW82kraAVxCCJg+780Qw==", + "version": "20.14.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.9.tgz", + "integrity": "sha512-06OCtnTXtWOZBJlRApleWndH4JsRVs1pDCc8dLSQp+7PpUpX3ePdHyeNSFTeSe7FtKyQkrlPvHwJOW3SLd8Oyg==", "dev": true, "dependencies": { "undici-types": "~5.26.4" } }, "node_modules/@types/statuses": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/statuses/-/statuses-2.0.4.tgz", - "integrity": "sha512-eqNDvZsCNY49OAXB0Firg/Sc2BgoWsntsLUdybGFOhAfCD6QJ2n9HXUIHGqt5qjrxmMv4wS8WLAw43ZkKcJ8Pw==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/statuses/-/statuses-2.0.5.tgz", + "integrity": "sha512-jmIUGWrAiwu3dZpxntxieC+1n/5c3mjrImkmOSQ2NC5uP6cYO4aAZDdSmRcI5C1oiTmqlZGHC+/NmJrKogbP5A==", "dev": true }, "node_modules/@types/trusted-types": { @@ -844,6 +792,13 @@ "dev": true, "peer": true }, + "node_modules/@types/uuid": { + "version": "9.0.8", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.8.tgz", + "integrity": "sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==", + "dev": true, + "peer": true + }, "node_modules/@types/wrap-ansi": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@types/wrap-ansi/-/wrap-ansi-3.0.0.tgz", @@ -851,18 +806,1009 @@ "dev": true }, "node_modules/@umbraco-cms/backoffice": { - "resolved": "../Umbraco.Web.UI.Client", - "link": true + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/@umbraco-cms/backoffice/-/backoffice-14.0.0.tgz", + "integrity": "sha512-PpJXHBeqDEEKTf4L/K7d8Ua9E2G9VuXHL76lBmBrf+1Sa7iWVuqf5BCvSa0wy1hKLrU1ytLsmByvVHEcix4XOw==", + "dev": true, + "engines": { + "node": ">=20.9 <21", + "npm": ">=10.1 < 11" + }, + "peerDependencies": { + "@types/diff": "^5.2.1", + "@types/dompurify": "^3.0.5", + "@types/uuid": "^9.0.8", + "@umbraco-ui/uui": "1.8.1", + "@umbraco-ui/uui-css": "1.8.0", + "base64-js": "^1.5.1", + "diff": "^5.2.0", + "dompurify": "^3.1.4", + "element-internals-polyfill": "^1.3.11", + "lit": "^3.1.3", + "marked": "^12.0.2", + "monaco-editor": "^0.48.0", + "rxjs": "^7.8.1", + "tinymce": "^6.8.3", + "tinymce-i18n": "^24.5.8", + "uuid": "^9.0.1" + } + }, + "node_modules/@umbraco-ui/uui": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui/-/uui-1.8.1.tgz", + "integrity": "sha512-KWKtuSQdxeCbGH2gezumuFysf+33q2TZy4h85zCABFvHgOeeR1EB7/S2jUNGoe2IOqYLktYl0GdQszfmyFN1dg==", + "dev": true, + "peer": true, + "dependencies": { + "@umbraco-ui/uui-action-bar": "1.8.0", + "@umbraco-ui/uui-avatar": "1.8.0", + "@umbraco-ui/uui-avatar-group": "1.8.0", + "@umbraco-ui/uui-badge": "1.8.0", + "@umbraco-ui/uui-base": "1.8.0", + "@umbraco-ui/uui-boolean-input": "1.8.0", + "@umbraco-ui/uui-box": "1.8.0", + "@umbraco-ui/uui-breadcrumbs": "1.8.0", + "@umbraco-ui/uui-button": "1.8.0", + "@umbraco-ui/uui-button-group": "1.8.0", + "@umbraco-ui/uui-button-inline-create": "1.8.0", + "@umbraco-ui/uui-card": "1.8.0", + "@umbraco-ui/uui-card-block-type": "1.8.0", + "@umbraco-ui/uui-card-content-node": "1.8.0", + "@umbraco-ui/uui-card-media": "1.8.0", + "@umbraco-ui/uui-card-user": "1.8.0", + "@umbraco-ui/uui-caret": "1.8.0", + "@umbraco-ui/uui-checkbox": "1.8.0", + "@umbraco-ui/uui-color-area": "1.8.0", + "@umbraco-ui/uui-color-picker": "1.8.0", + "@umbraco-ui/uui-color-slider": "1.8.0", + "@umbraco-ui/uui-color-swatch": "1.8.0", + "@umbraco-ui/uui-color-swatches": "1.8.0", + "@umbraco-ui/uui-combobox": "1.8.0", + "@umbraco-ui/uui-combobox-list": "1.8.0", + "@umbraco-ui/uui-css": "1.8.0", + "@umbraco-ui/uui-dialog": "1.8.0", + "@umbraco-ui/uui-dialog-layout": "1.8.0", + "@umbraco-ui/uui-file-dropzone": "1.8.0", + "@umbraco-ui/uui-file-preview": "1.8.0", + "@umbraco-ui/uui-form": "1.8.0", + "@umbraco-ui/uui-form-layout-item": "1.8.1", + "@umbraco-ui/uui-form-validation-message": "1.8.1", + "@umbraco-ui/uui-icon": "1.8.0", + "@umbraco-ui/uui-icon-registry": "1.8.0", + "@umbraco-ui/uui-icon-registry-essential": "1.8.0", + "@umbraco-ui/uui-input": "1.8.0", + "@umbraco-ui/uui-input-file": "1.8.0", + "@umbraco-ui/uui-input-lock": "1.8.0", + "@umbraco-ui/uui-input-password": "1.8.0", + "@umbraco-ui/uui-keyboard-shortcut": "1.8.0", + "@umbraco-ui/uui-label": "1.8.0", + "@umbraco-ui/uui-loader": "1.8.0", + "@umbraco-ui/uui-loader-bar": "1.8.0", + "@umbraco-ui/uui-loader-circle": "1.8.0", + "@umbraco-ui/uui-menu-item": "1.8.0", + "@umbraco-ui/uui-modal": "1.8.0", + "@umbraco-ui/uui-pagination": "1.8.0", + "@umbraco-ui/uui-popover": "1.8.0", + "@umbraco-ui/uui-popover-container": "1.8.0", + "@umbraco-ui/uui-progress-bar": "1.8.0", + "@umbraco-ui/uui-radio": "1.8.0", + "@umbraco-ui/uui-range-slider": "1.8.0", + "@umbraco-ui/uui-ref": "1.8.0", + "@umbraco-ui/uui-ref-list": "1.8.0", + "@umbraco-ui/uui-ref-node": "1.8.0", + "@umbraco-ui/uui-ref-node-data-type": "1.8.0", + "@umbraco-ui/uui-ref-node-document-type": "1.8.0", + "@umbraco-ui/uui-ref-node-form": "1.8.0", + "@umbraco-ui/uui-ref-node-member": "1.8.0", + "@umbraco-ui/uui-ref-node-package": "1.8.0", + "@umbraco-ui/uui-ref-node-user": "1.8.0", + "@umbraco-ui/uui-scroll-container": "1.8.0", + "@umbraco-ui/uui-select": "1.8.0", + "@umbraco-ui/uui-slider": "1.8.0", + "@umbraco-ui/uui-symbol-expand": "1.8.0", + "@umbraco-ui/uui-symbol-file": "1.8.0", + "@umbraco-ui/uui-symbol-file-dropzone": "1.8.0", + "@umbraco-ui/uui-symbol-file-thumbnail": "1.8.0", + "@umbraco-ui/uui-symbol-folder": "1.8.0", + "@umbraco-ui/uui-symbol-lock": "1.8.0", + "@umbraco-ui/uui-symbol-more": "1.8.0", + "@umbraco-ui/uui-symbol-sort": "1.8.0", + "@umbraco-ui/uui-table": "1.8.0", + "@umbraco-ui/uui-tabs": "1.8.0", + "@umbraco-ui/uui-tag": "1.8.0", + "@umbraco-ui/uui-textarea": "1.8.0", + "@umbraco-ui/uui-toast-notification": "1.8.0", + "@umbraco-ui/uui-toast-notification-container": "1.8.0", + "@umbraco-ui/uui-toast-notification-layout": "1.8.0", + "@umbraco-ui/uui-toggle": "1.8.0", + "@umbraco-ui/uui-visually-hidden": "1.8.0" + } + }, + "node_modules/@umbraco-ui/uui-action-bar": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-action-bar/-/uui-action-bar-1.8.0.tgz", + "integrity": "sha512-IRs42chstgXFo5b3i0j80Emt+uZSt/WmDDv7gTtB768FL1C+k0BR5sYVleEmUdkfCOv+WIVo1FAqd+9CPFkDDw==", + "dev": true, + "peer": true, + "dependencies": { + "@umbraco-ui/uui-base": "1.8.0", + "@umbraco-ui/uui-button-group": "1.8.0" + } + }, + "node_modules/@umbraco-ui/uui-avatar": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-avatar/-/uui-avatar-1.8.0.tgz", + "integrity": "sha512-ek6SFYEvEbu1Jf1FVrqBDHuWqCnekkU1hm4XDHEpEyhPE5OOC70SyYLB6brT0kvgBE0QKB2txYu7u8ZbWzy+OQ==", + "dev": true, + "peer": true, + "dependencies": { + "@umbraco-ui/uui-base": "1.8.0" + } + }, + "node_modules/@umbraco-ui/uui-avatar-group": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-avatar-group/-/uui-avatar-group-1.8.0.tgz", + "integrity": "sha512-AS6+GzeoAOS6vuZ6okP30iik8cvYPjBvoWtSYcnV0gScw52FIg9ak+j5L+rQHzE8LCqT8c6RE63HsAsJe7f6oA==", + "dev": true, + "peer": true, + "dependencies": { + "@umbraco-ui/uui-avatar": "1.8.0", + "@umbraco-ui/uui-base": "1.8.0" + } + }, + "node_modules/@umbraco-ui/uui-badge": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-badge/-/uui-badge-1.8.0.tgz", + "integrity": "sha512-mKHkkXIwN7oUybeQo5J5TOgqghinJH5gE9lJwOemNCy/oiV/TeYHOr7MqHxIJ+13Nwl9O6JbSRWbPbOD9TSkVw==", + "dev": true, + "peer": true, + "dependencies": { + "@umbraco-ui/uui-base": "1.8.0" + } + }, + "node_modules/@umbraco-ui/uui-base": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-base/-/uui-base-1.8.0.tgz", + "integrity": "sha512-LIPS3sfgOr/cgpDueTqpX+t6Bw0BpNISQSrAeyC+c6X0WiahKLuwob6UXSnefh9j5xIYa5+GY1gEUDgI4wlRhg==", + "dev": true, + "peer": true, + "peerDependencies": { + "lit": ">=2.8.0" + } + }, + "node_modules/@umbraco-ui/uui-boolean-input": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-boolean-input/-/uui-boolean-input-1.8.0.tgz", + "integrity": "sha512-6GqzuALrzrJIWIAdsYAau9t3sxYL0P+OKSKpcvj+4/DkbhbWjk54CtVFyWBAzYa9LhZHauGl2VYzxSvmGWARSA==", + "dev": true, + "peer": true, + "dependencies": { + "@umbraco-ui/uui-base": "1.8.0" + } + }, + "node_modules/@umbraco-ui/uui-box": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-box/-/uui-box-1.8.0.tgz", + "integrity": "sha512-/j/69od/uWd1Utb2IzU5pq5cvKpsq0cV4F+pS9e6HejzpcVUCz1AtdKNQvgpyOzd/oS9r8Z6pYL/V/gEydyqwg==", + "dev": true, + "peer": true, + "dependencies": { + "@umbraco-ui/uui-base": "1.8.0", + "@umbraco-ui/uui-css": "1.8.0" + } + }, + "node_modules/@umbraco-ui/uui-breadcrumbs": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-breadcrumbs/-/uui-breadcrumbs-1.8.0.tgz", + "integrity": "sha512-Hv5NAfRzfaXcDYcuribjpaooZk1LVcHNTaLwoxVAUN64sufYS8kfw0sN8+jsacumUP3rpy0XgR9Ic37JUoIkBw==", + "dev": true, + "peer": true, + "dependencies": { + "@umbraco-ui/uui-base": "1.8.0" + } + }, + "node_modules/@umbraco-ui/uui-button": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-button/-/uui-button-1.8.0.tgz", + "integrity": "sha512-M0pLzpGt2CuzQAHqiHQwVdzFOyb9EznCT7b+YMQOlJCMfeVmN2KBF2xUlfb/3M2LVDukTHyGHzqaWj8Lj6YUbA==", + "dev": true, + "peer": true, + "dependencies": { + "@umbraco-ui/uui-base": "1.8.0", + "@umbraco-ui/uui-icon-registry-essential": "1.8.0" + } + }, + "node_modules/@umbraco-ui/uui-button-group": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-button-group/-/uui-button-group-1.8.0.tgz", + "integrity": "sha512-5K/cvrOWvRmoXByuI1illF2e9sCzzegmlEpS4XbVk1XW/6quzRJpXSCrY+awj01kFrxB+UC8mB1DIECHKNyeVg==", + "dev": true, + "peer": true, + "dependencies": { + "@umbraco-ui/uui-base": "1.8.0" + } + }, + "node_modules/@umbraco-ui/uui-button-inline-create": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-button-inline-create/-/uui-button-inline-create-1.8.0.tgz", + "integrity": "sha512-smSZKMG0cAp+BTZe0wRaYotcQElja8gqznGaIyuGuWvvpvWEiuWMC9xjMytFNvaawCN1+uLc5fdcCArPmFjH+w==", + "dev": true, + "peer": true, + "dependencies": { + "@umbraco-ui/uui-base": "1.8.0" + } + }, + "node_modules/@umbraco-ui/uui-card": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-card/-/uui-card-1.8.0.tgz", + "integrity": "sha512-wwHaDbwDmragvIhhAtv/D2Ys47kXFPBKvE+/ahofXUygjTGbmjbKJ57Qfo6x8sD1BM3bSTDU6gUWaf4s0/D3WQ==", + "dev": true, + "peer": true, + "dependencies": { + "@umbraco-ui/uui-base": "1.8.0" + } + }, + "node_modules/@umbraco-ui/uui-card-block-type": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-card-block-type/-/uui-card-block-type-1.8.0.tgz", + "integrity": "sha512-8Ydat2K4LipsQaCEhDTN4DeVHiqOCdEOY4Z43XCf6bTU91lNPGdagtC0ZE9b4M28E03ou4E19Ms7o2m59g0OWw==", + "dev": true, + "peer": true, + "dependencies": { + "@umbraco-ui/uui-base": "1.8.0", + "@umbraco-ui/uui-card": "1.8.0" + } + }, + "node_modules/@umbraco-ui/uui-card-content-node": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-card-content-node/-/uui-card-content-node-1.8.0.tgz", + "integrity": "sha512-R0SYtKk5Z+on0xQ0cD1z2z43mSTgYi7sKtQDrhwoP/sWbp9xIS2wPOO+PoMiUonwXPo4JuSZ9ghgT4HzsQce1A==", + "dev": true, + "peer": true, + "dependencies": { + "@umbraco-ui/uui-base": "1.8.0", + "@umbraco-ui/uui-card": "1.8.0", + "@umbraco-ui/uui-icon": "1.8.0" + } + }, + "node_modules/@umbraco-ui/uui-card-media": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-card-media/-/uui-card-media-1.8.0.tgz", + "integrity": "sha512-C1xsdO9mWJ/gzE8nLfF2k5NfpFzJ2yMQYzJVtov3s9C33iy6NVq7OM67o+QugCqDuwwYSkonjgNJLHTav78KVg==", + "dev": true, + "peer": true, + "dependencies": { + "@umbraco-ui/uui-base": "1.8.0", + "@umbraco-ui/uui-card": "1.8.0", + "@umbraco-ui/uui-symbol-file": "1.8.0", + "@umbraco-ui/uui-symbol-folder": "1.8.0" + } + }, + "node_modules/@umbraco-ui/uui-card-user": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-card-user/-/uui-card-user-1.8.0.tgz", + "integrity": "sha512-b6LiMCl/oFaW6MnPXBMCPqlVDHF/TT3LByQOTJ8rE+WHzY/zE9toVLy/LccxB62Ur/Hz7XakhU8xHaugH+zs3w==", + "dev": true, + "peer": true, + "dependencies": { + "@umbraco-ui/uui-avatar": "1.8.0", + "@umbraco-ui/uui-base": "1.8.0", + "@umbraco-ui/uui-card": "1.8.0" + } + }, + "node_modules/@umbraco-ui/uui-caret": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-caret/-/uui-caret-1.8.0.tgz", + "integrity": "sha512-LxS0vLKZYNKsef/FgNXFh/CBauf+6Dgac+n5VyCu6FElh8UTP+NOeAA/4KEVSJh8gThJ0Fmb8qoMSFop+41wLg==", + "dev": true, + "peer": true, + "dependencies": { + "@umbraco-ui/uui-base": "1.8.0" + } + }, + "node_modules/@umbraco-ui/uui-checkbox": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-checkbox/-/uui-checkbox-1.8.0.tgz", + "integrity": "sha512-Gf/kZ4q5SuLNEEfcL1/YRzcOI5CZTsMyo2+9LuksCZqRzWtxoo1meB42GZRjE4GTCFZfQOr4Ayz7ZNRaizuM+Q==", + "dev": true, + "peer": true, + "dependencies": { + "@umbraco-ui/uui-base": "1.8.0", + "@umbraco-ui/uui-boolean-input": "1.8.0", + "@umbraco-ui/uui-icon-registry-essential": "1.8.0" + } + }, + "node_modules/@umbraco-ui/uui-color-area": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-color-area/-/uui-color-area-1.8.0.tgz", + "integrity": "sha512-V3+iph2Vq58T9f4FoJvxsjq0LpH5VJhC2P2VkAWvMO1m528QOULDP+b5csYWH1pF78RxSZ5Lm042Dnw9XOqN2w==", + "dev": true, + "peer": true, + "dependencies": { + "@umbraco-ui/uui-base": "1.8.0", + "colord": "^2.9.3" + } + }, + "node_modules/@umbraco-ui/uui-color-picker": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-color-picker/-/uui-color-picker-1.8.0.tgz", + "integrity": "sha512-DQtKN4ivIRx54SYUhxdlbFf5ibmnp5/mscOiC98HObYVTeM9ZJUrKfFGTU9Qfekz3q+rPzzv7eec8E0Zb6qfwg==", + "dev": true, + "peer": true, + "dependencies": { + "@umbraco-ui/uui-base": "1.8.0", + "@umbraco-ui/uui-popover-container": "1.8.0", + "colord": "^2.9.3" + } + }, + "node_modules/@umbraco-ui/uui-color-slider": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-color-slider/-/uui-color-slider-1.8.0.tgz", + "integrity": "sha512-DHCFX0JZXqI6wp2fRe+lOd9TAJVzTC9ghDNP+qMGattsxRnTf/pxoYucW7F5ee/ggiBIsS8i47kFa2wDmausiA==", + "dev": true, + "peer": true, + "dependencies": { + "@umbraco-ui/uui-base": "1.8.0" + } + }, + "node_modules/@umbraco-ui/uui-color-swatch": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-color-swatch/-/uui-color-swatch-1.8.0.tgz", + "integrity": "sha512-z9RQ0R5E9SErqiY1/kU6Rnp+LQBM119OKqAexHo32cM/9iyzLIEUY4CwzCYE9/ogeXDgljXLTGX21jddCNCv9A==", + "dev": true, + "peer": true, + "dependencies": { + "@umbraco-ui/uui-base": "1.8.0", + "@umbraco-ui/uui-icon-registry-essential": "1.8.0", + "colord": "^2.9.3" + } + }, + "node_modules/@umbraco-ui/uui-color-swatches": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-color-swatches/-/uui-color-swatches-1.8.0.tgz", + "integrity": "sha512-qCHYtHPhPsubrVn/cydmigbAde0fc+kJC7ZBxCcuJjyP+wiUhq2/d6dSfYumCcVw1N3Hyj7BRJ/8ZedUIZQ5/w==", + "dev": true, + "peer": true, + "dependencies": { + "@umbraco-ui/uui-base": "1.8.0", + "@umbraco-ui/uui-color-swatch": "1.8.0" + } + }, + "node_modules/@umbraco-ui/uui-combobox": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-combobox/-/uui-combobox-1.8.0.tgz", + "integrity": "sha512-FVc3PlBYU8S48Zr75pig+5YXh05R3wRKdLl41l7vFBDGGWsgjIsM+vJ6LaM+VoshnTzUTOVvKLE/N0FNTVUvrg==", + "dev": true, + "peer": true, + "dependencies": { + "@umbraco-ui/uui-base": "1.8.0", + "@umbraco-ui/uui-button": "1.8.0", + "@umbraco-ui/uui-combobox-list": "1.8.0", + "@umbraco-ui/uui-icon": "1.8.0", + "@umbraco-ui/uui-popover-container": "1.8.0", + "@umbraco-ui/uui-scroll-container": "1.8.0", + "@umbraco-ui/uui-symbol-expand": "1.8.0" + } + }, + "node_modules/@umbraco-ui/uui-combobox-list": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-combobox-list/-/uui-combobox-list-1.8.0.tgz", + "integrity": "sha512-3w353u7FdYNLCz6YV+Pk+lxlTeHd2H6rmxzwb+0BHCjbwaw9MLojbhE4JGTCpf/qtk54Xc8Dzg++aznKAYpbVw==", + "dev": true, + "peer": true, + "dependencies": { + "@umbraco-ui/uui-base": "1.8.0" + } }, "node_modules/@umbraco-ui/uui-css": { - "version": "1.8.0-rc.0", - "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-css/-/uui-css-1.8.0-rc.0.tgz", - "integrity": "sha512-trwLCgJtT91iP2b20QlHWjuj44AF4lWCg4CqBZoT2Z8a5IedqflnQstXCZRYm/F5Re32YGTwlR9lF1rAXqq4gg==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-css/-/uui-css-1.8.0.tgz", + "integrity": "sha512-9o9OGUXQK8D9i/VSmH3gUTvH7se+4Ey22dSfbn4Jzcbe6AyGmxKocr/8eZXdkIYwNvK2aUIz/b7GIEbQc4utbA==", "dev": true, "peerDependencies": { "lit": ">=2.8.0" } }, + "node_modules/@umbraco-ui/uui-dialog": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-dialog/-/uui-dialog-1.8.0.tgz", + "integrity": "sha512-QI/Oa7BJ7eEdHcy7hSuFhMPbbPitxnIb2BHVmQzy+YpBShrR3C1GW0FGcYFgJlI/S+jodf3A59VDnVL69gyliQ==", + "dev": true, + "peer": true, + "dependencies": { + "@umbraco-ui/uui-base": "1.8.0", + "@umbraco-ui/uui-css": "1.8.0" + } + }, + "node_modules/@umbraco-ui/uui-dialog-layout": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-dialog-layout/-/uui-dialog-layout-1.8.0.tgz", + "integrity": "sha512-iv4wEfb6QhCOm8lxg/zH7yrJuVSEEBGgAN67qdvZ9Tu2SFzUCGTzrUcBXlL+U10cbIlq7j6KKvSQvE/IHX40Tg==", + "dev": true, + "peer": true, + "dependencies": { + "@umbraco-ui/uui-base": "1.8.0" + } + }, + "node_modules/@umbraco-ui/uui-file-dropzone": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-file-dropzone/-/uui-file-dropzone-1.8.0.tgz", + "integrity": "sha512-Fpl/aGprUbcdPngB6xpR8/i7o8HKAWNCUze+N1pXiIVBRXmthEWO6fSm4+LkkkRoZwvYqQSaeu6Mw+Sj+MzHGA==", + "dev": true, + "peer": true, + "dependencies": { + "@umbraco-ui/uui-base": "1.8.0", + "@umbraco-ui/uui-symbol-file-dropzone": "1.8.0" + } + }, + "node_modules/@umbraco-ui/uui-file-preview": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-file-preview/-/uui-file-preview-1.8.0.tgz", + "integrity": "sha512-WhE/9klwIUjch6PxF+DuFlu+ql0h9YbefMxj/xU4rGUTE/dK4CgA7eVQ/YfAp+WrdtwUFHyp3fThyJvfrodSgA==", + "dev": true, + "peer": true, + "dependencies": { + "@umbraco-ui/uui-base": "1.8.0", + "@umbraco-ui/uui-symbol-file": "1.8.0", + "@umbraco-ui/uui-symbol-file-thumbnail": "1.8.0", + "@umbraco-ui/uui-symbol-folder": "1.8.0" + } + }, + "node_modules/@umbraco-ui/uui-form": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-form/-/uui-form-1.8.0.tgz", + "integrity": "sha512-9NtavsRoh9X39ezzLtwwbK77mUecavcjxP58Jdba/2/6wXRx+vx7qsWV5Rn3OC9XG4tZi6VLFFKahbV8N/jgjw==", + "dev": true, + "peer": true, + "dependencies": { + "@umbraco-ui/uui-base": "1.8.0" + } + }, + "node_modules/@umbraco-ui/uui-form-layout-item": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-form-layout-item/-/uui-form-layout-item-1.8.1.tgz", + "integrity": "sha512-QHBZayR4T49MAyS9N2jy1rgQ5Yk1JpwoWvWBpbI/WDE718zTjwUJxbLfukq+NnJx7Q1DplZ+IHTnHZkInMC2GQ==", + "dev": true, + "peer": true, + "dependencies": { + "@umbraco-ui/uui-base": "1.8.0", + "@umbraco-ui/uui-form-validation-message": "1.8.1" + } + }, + "node_modules/@umbraco-ui/uui-form-validation-message": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-form-validation-message/-/uui-form-validation-message-1.8.1.tgz", + "integrity": "sha512-o4WfGHRtV+DrN064DtzyljRkUGYMYEkLHxxbawLowpdmdwyvLByaGOkxfuEJvHgPnncR02//gM04EjulEbGitw==", + "dev": true, + "peer": true, + "dependencies": { + "@umbraco-ui/uui-base": "1.8.0" + } + }, + "node_modules/@umbraco-ui/uui-icon": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-icon/-/uui-icon-1.8.0.tgz", + "integrity": "sha512-hub+KNcwiy+SKxEpI/ei3w1Ficr1SWxcLfwL67MOKS5YyB6RDwSl2FOXx+MkttTAO7PvGBbAgkiiXEkI/rxivg==", + "dev": true, + "peer": true, + "dependencies": { + "@umbraco-ui/uui-base": "1.8.0" + } + }, + "node_modules/@umbraco-ui/uui-icon-registry": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-icon-registry/-/uui-icon-registry-1.8.0.tgz", + "integrity": "sha512-+55qGgxOBlHmQerxIhKkKJYJgPwnXwsLOBVwF8oYIM1sV58bu7BrGQRUw/K0ytFavrFOb+Easkn62wqzisXsRQ==", + "dev": true, + "peer": true, + "dependencies": { + "@umbraco-ui/uui-base": "1.8.0", + "@umbraco-ui/uui-icon": "1.8.0" + } + }, + "node_modules/@umbraco-ui/uui-icon-registry-essential": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-icon-registry-essential/-/uui-icon-registry-essential-1.8.0.tgz", + "integrity": "sha512-6+bM30t3+YpknxIjcCHi07eS+MXMkDRP+GBfrUgULqH/EqnJN/OuwMzSdbwFuwzqxmC7thx74Zfl6+JBuIs9lw==", + "dev": true, + "peer": true, + "dependencies": { + "@umbraco-ui/uui-base": "1.8.0", + "@umbraco-ui/uui-icon-registry": "1.8.0" + } + }, + "node_modules/@umbraco-ui/uui-input": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-input/-/uui-input-1.8.0.tgz", + "integrity": "sha512-abtQbWWDT+3uo4KVaU+ZbDVKSNtB8r0C/3L7Ql/7xJ2BNI2oSUSAcWoSV6V8Vx0DYh1XWlEQpfSAbk5Fdr7u4w==", + "dev": true, + "peer": true, + "dependencies": { + "@umbraco-ui/uui-base": "1.8.0" + } + }, + "node_modules/@umbraco-ui/uui-input-file": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-input-file/-/uui-input-file-1.8.0.tgz", + "integrity": "sha512-20fXbIwjyLZWIVsqFt06ldQqA8sHEPm8Y0hmPwbb0nagYfjmIblIE1thT76JA95do7qcU50xGBN9mHt8KvPpQA==", + "dev": true, + "peer": true, + "dependencies": { + "@umbraco-ui/uui-action-bar": "1.8.0", + "@umbraco-ui/uui-base": "1.8.0", + "@umbraco-ui/uui-button": "1.8.0", + "@umbraco-ui/uui-file-dropzone": "1.8.0", + "@umbraco-ui/uui-icon": "1.8.0", + "@umbraco-ui/uui-icon-registry-essential": "1.8.0" + } + }, + "node_modules/@umbraco-ui/uui-input-lock": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-input-lock/-/uui-input-lock-1.8.0.tgz", + "integrity": "sha512-ZFBssrhCPrCiSfoS6Y9yA9u2dktzNDCRFQ95Z9nQEthhVm2okyqMS3daGz57Vdm4+LVB0HrqIjpEHC6dOqNTBg==", + "dev": true, + "peer": true, + "dependencies": { + "@umbraco-ui/uui-base": "1.8.0", + "@umbraco-ui/uui-button": "1.8.0", + "@umbraco-ui/uui-icon": "1.8.0", + "@umbraco-ui/uui-input": "1.8.0" + } + }, + "node_modules/@umbraco-ui/uui-input-password": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-input-password/-/uui-input-password-1.8.0.tgz", + "integrity": "sha512-Ra7bR40GzjX11qobHsog2FPGd3FsPzgxPpGLFyMTHzDg2gchYU+KQKkmt6CTzGPgSFuN7DsEW0BMnFnWJ+2moQ==", + "dev": true, + "peer": true, + "dependencies": { + "@umbraco-ui/uui-base": "1.8.0", + "@umbraco-ui/uui-icon-registry-essential": "1.8.0", + "@umbraco-ui/uui-input": "1.8.0" + } + }, + "node_modules/@umbraco-ui/uui-keyboard-shortcut": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-keyboard-shortcut/-/uui-keyboard-shortcut-1.8.0.tgz", + "integrity": "sha512-XBO06bZbo7H39k33pm8EoWxm9MP/NXh7W430dLqB5E3q1EOO24PQw2voLsOyegVM3IqgKyMBTO7xHR8NmeZkyg==", + "dev": true, + "peer": true, + "dependencies": { + "@umbraco-ui/uui-base": "1.8.0" + } + }, + "node_modules/@umbraco-ui/uui-label": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-label/-/uui-label-1.8.0.tgz", + "integrity": "sha512-Qj3CtfVIv3rVIanTbMvg6UAB2faWGu2mMtvVfmr9kkEP9MGfmA/xgQN94lKlDI7ic54FVkCV4N+1kA5yNkeDSQ==", + "dev": true, + "peer": true, + "dependencies": { + "@umbraco-ui/uui-base": "1.8.0" + } + }, + "node_modules/@umbraco-ui/uui-loader": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-loader/-/uui-loader-1.8.0.tgz", + "integrity": "sha512-CL+n3Icp4ugfn7SBbhbYC4WTBQ+kT27WwJIesOcjw2lmt2l20RQUyBBbZAABx2ayyDuvIzEWnFEzWW8VyVworw==", + "dev": true, + "peer": true, + "dependencies": { + "@umbraco-ui/uui-base": "1.8.0" + } + }, + "node_modules/@umbraco-ui/uui-loader-bar": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-loader-bar/-/uui-loader-bar-1.8.0.tgz", + "integrity": "sha512-KuUtQ4r/wkbVl4IJVgUb9DCXvV1yvupDw6AAnWuOu7zexuzPfrl32cKBLlnNmhGqnEGcQonX6jf24Lf8T7W6Nw==", + "dev": true, + "peer": true, + "dependencies": { + "@umbraco-ui/uui-base": "1.8.0" + } + }, + "node_modules/@umbraco-ui/uui-loader-circle": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-loader-circle/-/uui-loader-circle-1.8.0.tgz", + "integrity": "sha512-L5RyH10Es/stG7CzNzS0bKOzCY+zLSwmqyh0dc8HwzZCvc6XtFHV0KgcxMjmtWWulLsQPgzIOIigf3wefr2VNQ==", + "dev": true, + "peer": true, + "dependencies": { + "@umbraco-ui/uui-base": "1.8.0" + } + }, + "node_modules/@umbraco-ui/uui-menu-item": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-menu-item/-/uui-menu-item-1.8.0.tgz", + "integrity": "sha512-0zEMhcw35Evw7cEq1W0GYNVCzIorTVMzFquU7Sg2QiZmk3eiF6HvkF/gHr4d0WR7HvztM1k/eVm+RTs6zp+96g==", + "dev": true, + "peer": true, + "dependencies": { + "@umbraco-ui/uui-base": "1.8.0", + "@umbraco-ui/uui-loader-bar": "1.8.0", + "@umbraco-ui/uui-symbol-expand": "1.8.0" + } + }, + "node_modules/@umbraco-ui/uui-modal": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-modal/-/uui-modal-1.8.0.tgz", + "integrity": "sha512-Cqd4pabMLnpnMEa35MKOwXCKQ+5okHYWdvdFRA8x1HqI3AEcz4FNx48nXVH94vhbELv8+fWFAPfrr1v0rvjK6w==", + "dev": true, + "peer": true, + "dependencies": { + "@umbraco-ui/uui-base": "1.8.0" + } + }, + "node_modules/@umbraco-ui/uui-pagination": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-pagination/-/uui-pagination-1.8.0.tgz", + "integrity": "sha512-SvnWMzbQcTDEN+XQJ0/lVCJ1wL+2L7LA9pfSxJgXIj/pB55Pf3Tt3zMnW8B7RT7i/74atMufaqSSKElZrcPfHQ==", + "dev": true, + "peer": true, + "dependencies": { + "@umbraco-ui/uui-base": "1.8.0", + "@umbraco-ui/uui-button": "1.8.0", + "@umbraco-ui/uui-button-group": "1.8.0" + } + }, + "node_modules/@umbraco-ui/uui-popover": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-popover/-/uui-popover-1.8.0.tgz", + "integrity": "sha512-bHERyYItLAvtWbpOdPgmuPFgYs2TuKImm3h04DtQRatYP4dq8wg0tftVyZK3k9TVfLMvStOy2EyzybTD+1ZmBg==", + "dev": true, + "peer": true, + "dependencies": { + "@umbraco-ui/uui-base": "1.8.0" + } + }, + "node_modules/@umbraco-ui/uui-popover-container": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-popover-container/-/uui-popover-container-1.8.0.tgz", + "integrity": "sha512-FHaX4sIa7q4HTVzMr9w3Z6zuunPuDROnHjVS6QkovqHLEgQjeTQB8hGAxN6cd3QsFbgbtC9fzBo8zTn9yxJLmA==", + "dev": true, + "peer": true, + "dependencies": { + "@umbraco-ui/uui-base": "1.8.0" + } + }, + "node_modules/@umbraco-ui/uui-progress-bar": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-progress-bar/-/uui-progress-bar-1.8.0.tgz", + "integrity": "sha512-WX+YjiH0HCljtzTImR6Q8bf06wm+jcCgEOE10pMRri0r4nyBCAN7Zms23sHj6rR+S/oxoYcuREqdWXWP4eRfFA==", + "dev": true, + "peer": true, + "dependencies": { + "@umbraco-ui/uui-base": "1.8.0" + } + }, + "node_modules/@umbraco-ui/uui-radio": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-radio/-/uui-radio-1.8.0.tgz", + "integrity": "sha512-3kPWyc0ZbtAIeOHxAKudSslomg1zKy4RMgrfDeNumQhuCei0VWhVn76Xyfu/Gl2n4XnLIzZY3zv4XCaxwWvJZw==", + "dev": true, + "peer": true, + "dependencies": { + "@umbraco-ui/uui-base": "1.8.0" + } + }, + "node_modules/@umbraco-ui/uui-range-slider": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-range-slider/-/uui-range-slider-1.8.0.tgz", + "integrity": "sha512-ThDfLvxRMfP93HQobgLaglR860vQiwCM63PXp2igXWZl69ikDDa7HuraupEpmdL13VLKAv5L1BMue1ItC1x2MA==", + "dev": true, + "peer": true, + "dependencies": { + "@umbraco-ui/uui-base": "1.8.0" + } + }, + "node_modules/@umbraco-ui/uui-ref": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref/-/uui-ref-1.8.0.tgz", + "integrity": "sha512-mcw7faAXeG/2QfLeuYsB950seU0FQH5Pd+aSfi6zwgWkCasxKWLrlslVTP1U5zD5WFkNt4ls6RnMGZhN6bq7mQ==", + "dev": true, + "peer": true, + "dependencies": { + "@umbraco-ui/uui-base": "1.8.0" + } + }, + "node_modules/@umbraco-ui/uui-ref-list": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref-list/-/uui-ref-list-1.8.0.tgz", + "integrity": "sha512-9iiTYVyw+dpO1gEB2oMJSe2DOVvA3a2uY5FLwkRgpAjvzbhD9hhyGLcVgtvM1rxUYc9SvJbGJXk2tPY4Nit3pA==", + "dev": true, + "peer": true, + "dependencies": { + "@umbraco-ui/uui-base": "1.8.0" + } + }, + "node_modules/@umbraco-ui/uui-ref-node": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref-node/-/uui-ref-node-1.8.0.tgz", + "integrity": "sha512-KOGy10QhPUQFNFNPkmqro1YqFg5Y5b2N/DwkcYP/xyu4Kc1f5FuE+Uo5L41i2KdbDP6O+Tz5gsU6HpPvpEAc7Q==", + "dev": true, + "peer": true, + "dependencies": { + "@umbraco-ui/uui-base": "1.8.0", + "@umbraco-ui/uui-icon": "1.8.0", + "@umbraco-ui/uui-ref": "1.8.0" + } + }, + "node_modules/@umbraco-ui/uui-ref-node-data-type": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref-node-data-type/-/uui-ref-node-data-type-1.8.0.tgz", + "integrity": "sha512-x7PicpHE7PPZrVDojKO5ornG7HZoRB9/pjCZWV+8wxPznyGmFvcJpbRQLdIVvvXVkL1a0c4uLY2CsUO+K52Rbg==", + "dev": true, + "peer": true, + "dependencies": { + "@umbraco-ui/uui-base": "1.8.0", + "@umbraco-ui/uui-ref-node": "1.8.0" + } + }, + "node_modules/@umbraco-ui/uui-ref-node-document-type": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref-node-document-type/-/uui-ref-node-document-type-1.8.0.tgz", + "integrity": "sha512-QjeC8DvgA/WFb3wOUXMOALK5SoKeDAvYqNp1wNvU5AMxJY+5CTfi6JNWKZsI4K+Mh3lfzPP+HaWx5MTwt5epNQ==", + "dev": true, + "peer": true, + "dependencies": { + "@umbraco-ui/uui-base": "1.8.0", + "@umbraco-ui/uui-ref-node": "1.8.0" + } + }, + "node_modules/@umbraco-ui/uui-ref-node-form": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref-node-form/-/uui-ref-node-form-1.8.0.tgz", + "integrity": "sha512-sm0xSru6pv8yK9qepzF5Wzzd1jarMBZFtzgqw5H65pGTP6pNhNG4GIkeXLfd2TH9g3e6biJNKAOFJ5w8Tz4O9A==", + "dev": true, + "peer": true, + "dependencies": { + "@umbraco-ui/uui-base": "1.8.0", + "@umbraco-ui/uui-ref-node": "1.8.0" + } + }, + "node_modules/@umbraco-ui/uui-ref-node-member": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref-node-member/-/uui-ref-node-member-1.8.0.tgz", + "integrity": "sha512-z9l44zCER4KmNMSnCy6BFxXZ6awr/L405pJJJzqb3GAXsBip47pCzhYgxCbekB+xSY+E0hS1EuG1JJ5wn05yiQ==", + "dev": true, + "peer": true, + "dependencies": { + "@umbraco-ui/uui-base": "1.8.0", + "@umbraco-ui/uui-ref-node": "1.8.0" + } + }, + "node_modules/@umbraco-ui/uui-ref-node-package": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref-node-package/-/uui-ref-node-package-1.8.0.tgz", + "integrity": "sha512-bpWVBOm39tl5jY3Y+qn5dnikmnaAOrHEg2SBf/11d7aHOauEgDiJZQmM9BzjAeionaZrj4beYJw5szazaVkpDQ==", + "dev": true, + "peer": true, + "dependencies": { + "@umbraco-ui/uui-base": "1.8.0", + "@umbraco-ui/uui-ref-node": "1.8.0" + } + }, + "node_modules/@umbraco-ui/uui-ref-node-user": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref-node-user/-/uui-ref-node-user-1.8.0.tgz", + "integrity": "sha512-Z91Me56phGFyt/hJaRDnXrorlYVjrL6WaUWRDZAi+mqqThFriG1DVeaFEewZ1yeD3Hy6haHanDa7dtwm2FLsBQ==", + "dev": true, + "peer": true, + "dependencies": { + "@umbraco-ui/uui-base": "1.8.0", + "@umbraco-ui/uui-ref-node": "1.8.0" + } + }, + "node_modules/@umbraco-ui/uui-scroll-container": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-scroll-container/-/uui-scroll-container-1.8.0.tgz", + "integrity": "sha512-PHxOZhsM53J3SQaXhH0euUwshr6Ka06iFEmtNKaqVe+nPwTjYHWHDuulvp7/qm/btjzSIrJqKgs02ft8wGqXwA==", + "dev": true, + "peer": true, + "dependencies": { + "@umbraco-ui/uui-base": "1.8.0" + } + }, + "node_modules/@umbraco-ui/uui-select": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-select/-/uui-select-1.8.0.tgz", + "integrity": "sha512-xFXo7IlAtofZCWIqnhyThIjP8ORRwo6786fv5yarayhqlKeAwJRD5t6QtX4z5z/1b/zW11oF2GkJzrzp4KN4vw==", + "dev": true, + "peer": true, + "dependencies": { + "@umbraco-ui/uui-base": "1.8.0" + } + }, + "node_modules/@umbraco-ui/uui-slider": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-slider/-/uui-slider-1.8.0.tgz", + "integrity": "sha512-qKgWyVzMKF8RVwwgpdMvKfCS3TEyMbZj/ZKClgTJJfs+3r8Q002F7irx7Lgh+mDww+jLsuMtG/cu0xSXU4HC4w==", + "dev": true, + "peer": true, + "dependencies": { + "@umbraco-ui/uui-base": "1.8.0" + } + }, + "node_modules/@umbraco-ui/uui-symbol-expand": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-symbol-expand/-/uui-symbol-expand-1.8.0.tgz", + "integrity": "sha512-AfpoR4dTOL4gEfP9lnEVymU3mlNfjFSuk8TGbqy0jVMTMbYeol5Bcl6jJFqqPd1npfgT7FPZH9zrMkcFogfSSw==", + "dev": true, + "peer": true, + "dependencies": { + "@umbraco-ui/uui-base": "1.8.0" + } + }, + "node_modules/@umbraco-ui/uui-symbol-file": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-symbol-file/-/uui-symbol-file-1.8.0.tgz", + "integrity": "sha512-/2O0TNl+Sx/cCy2kQlSCOujvRwz+Rxg9JxyMX5Vc14ZqrVJ4FsD2S/jJWLtE2YJ+EtLoc15Zzw2GogZO7aBcLQ==", + "dev": true, + "peer": true, + "dependencies": { + "@umbraco-ui/uui-base": "1.8.0" + } + }, + "node_modules/@umbraco-ui/uui-symbol-file-dropzone": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-symbol-file-dropzone/-/uui-symbol-file-dropzone-1.8.0.tgz", + "integrity": "sha512-n2QRKTEnvQQgiyTQ7uVbz7XsGL0HRwaEtLqEMbaON6oYCsGWFFsbp8QqyHdB8iBQSrlV9I1J4sS0e5Ry+W25YQ==", + "dev": true, + "peer": true, + "dependencies": { + "@umbraco-ui/uui-base": "1.8.0" + } + }, + "node_modules/@umbraco-ui/uui-symbol-file-thumbnail": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-symbol-file-thumbnail/-/uui-symbol-file-thumbnail-1.8.0.tgz", + "integrity": "sha512-KdFOrfVIwtjavoa+S5ro1gi2Er8IPqXnY6gpTRpAgfO/f+/ZRg6AwPKn4SCc7QqJ8ThHpsg8wki8WGiK04rfbA==", + "dev": true, + "peer": true, + "dependencies": { + "@umbraco-ui/uui-base": "1.8.0" + } + }, + "node_modules/@umbraco-ui/uui-symbol-folder": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-symbol-folder/-/uui-symbol-folder-1.8.0.tgz", + "integrity": "sha512-g7FIonq/5wHH2+e/+DhB+t3E4wu7dM4MrKxLsP6b8JmYz7Y0t9OlTBT5J+i3P8YnJKYY6i5V5Eip4QNWJqC+sQ==", + "dev": true, + "peer": true, + "dependencies": { + "@umbraco-ui/uui-base": "1.8.0" + } + }, + "node_modules/@umbraco-ui/uui-symbol-lock": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-symbol-lock/-/uui-symbol-lock-1.8.0.tgz", + "integrity": "sha512-+/K59hTkBJr6bYOrTgPtvZEVsr59MPNwvIHhGm685WZPZrNA9dGPZrO9vnw1eyNq70XYuHkiNkmKUmna9mQmIA==", + "dev": true, + "peer": true, + "dependencies": { + "@umbraco-ui/uui-base": "1.8.0" + } + }, + "node_modules/@umbraco-ui/uui-symbol-more": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-symbol-more/-/uui-symbol-more-1.8.0.tgz", + "integrity": "sha512-BSWQ05XYJSS6WKpA6//QnSnMehV5py5j8bxl7bZzmrthr2SwyejwS+pGYq7rTqWw7BBk1mA8I7Zkl+kVph/7+g==", + "dev": true, + "peer": true, + "dependencies": { + "@umbraco-ui/uui-base": "1.8.0" + } + }, + "node_modules/@umbraco-ui/uui-symbol-sort": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-symbol-sort/-/uui-symbol-sort-1.8.0.tgz", + "integrity": "sha512-+IFJYlPsUvJYNDc8sWB4zan/dTCCj4vkqwXALW3xLSxpsKSvtSvXPzXK/i4YwaT4Azx4hfrWIW2cz6/h5JDonA==", + "dev": true, + "peer": true, + "dependencies": { + "@umbraco-ui/uui-base": "1.8.0" + } + }, + "node_modules/@umbraco-ui/uui-table": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-table/-/uui-table-1.8.0.tgz", + "integrity": "sha512-nbRoValRn17SadfpGKKT1RfyoRlCLhvij2BRMw1KyldztWlWGozPQSDjqhcEPSzJZCrNV76nIMbg5FLfsTl4iA==", + "dev": true, + "peer": true, + "dependencies": { + "@umbraco-ui/uui-base": "1.8.0" + } + }, + "node_modules/@umbraco-ui/uui-tabs": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-tabs/-/uui-tabs-1.8.0.tgz", + "integrity": "sha512-xnZvjjmRHJbyC9bd6LMYfHA8Jjb51GTJuFAd4j4S9NVZYomQDBFl7IKVWtUFzQvVzk93zJHVSWO8vmtNLQZreg==", + "dev": true, + "peer": true, + "dependencies": { + "@umbraco-ui/uui-base": "1.8.0", + "@umbraco-ui/uui-button": "1.8.0", + "@umbraco-ui/uui-popover-container": "1.8.0", + "@umbraco-ui/uui-symbol-more": "1.8.0" + } + }, + "node_modules/@umbraco-ui/uui-tag": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-tag/-/uui-tag-1.8.0.tgz", + "integrity": "sha512-5Dt7EsvACfs75bsncIDvqitXYub2Rfntbrc3gzXLHjqOQy2YBL5s/HNGz3xsf5msKuDAR0dmTyxhItaDAi7EkQ==", + "dev": true, + "peer": true, + "dependencies": { + "@umbraco-ui/uui-base": "1.8.0" + } + }, + "node_modules/@umbraco-ui/uui-textarea": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-textarea/-/uui-textarea-1.8.0.tgz", + "integrity": "sha512-WYWiD3x1DXbsAALmTT2txoeeqiZ9J/FlkTGL1Wasu89jfm8bAgxUG5wuoa8SL4r79rAF+RUDrJPygeUqDm0N8A==", + "dev": true, + "peer": true, + "dependencies": { + "@umbraco-ui/uui-base": "1.8.0" + } + }, + "node_modules/@umbraco-ui/uui-toast-notification": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-toast-notification/-/uui-toast-notification-1.8.0.tgz", + "integrity": "sha512-62q36/jggXp+GdRSzseQ7d63hUIXtHIXe/5bnSSHXcxxIcnbf9Sy3pkBkOYM7CXgBUUwt9T9IHLZ6eGw/6K9Xw==", + "dev": true, + "peer": true, + "dependencies": { + "@umbraco-ui/uui-base": "1.8.0", + "@umbraco-ui/uui-button": "1.8.0", + "@umbraco-ui/uui-css": "1.8.0", + "@umbraco-ui/uui-icon": "1.8.0", + "@umbraco-ui/uui-icon-registry-essential": "1.8.0" + } + }, + "node_modules/@umbraco-ui/uui-toast-notification-container": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-toast-notification-container/-/uui-toast-notification-container-1.8.0.tgz", + "integrity": "sha512-NdILHgGvKFF+JZGejTJnXt1LdJIl/MxmPUj6+rvEGCO2SDhZmIOHjnIohT8HFytxmJqyWJpryPQjo6KJezRVbQ==", + "dev": true, + "peer": true, + "dependencies": { + "@umbraco-ui/uui-base": "1.8.0", + "@umbraco-ui/uui-toast-notification": "1.8.0" + } + }, + "node_modules/@umbraco-ui/uui-toast-notification-layout": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-toast-notification-layout/-/uui-toast-notification-layout-1.8.0.tgz", + "integrity": "sha512-NyGFv3kAcU8XMxLAyDhy3dt1oIHOwbAYO5+Utm4CFAAvcJzVTNn948Sp0dTdcfSjXjZG+3Ufv/Qb/OpcrybJ/w==", + "dev": true, + "peer": true, + "dependencies": { + "@umbraco-ui/uui-base": "1.8.0", + "@umbraco-ui/uui-css": "1.8.0" + } + }, + "node_modules/@umbraco-ui/uui-toggle": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-toggle/-/uui-toggle-1.8.0.tgz", + "integrity": "sha512-PNk2qeaL7bJXnSkG0T1J5pheNy7yTeaVbdyXuL/9fkoIdb9IkD/h6XLE9niiyWYF1xrdjpgAKZ32u0Oc4qXVyA==", + "dev": true, + "peer": true, + "dependencies": { + "@umbraco-ui/uui-base": "1.8.0", + "@umbraco-ui/uui-boolean-input": "1.8.0" + } + }, + "node_modules/@umbraco-ui/uui-visually-hidden": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-visually-hidden/-/uui-visually-hidden-1.8.0.tgz", + "integrity": "sha512-3a4/B2uM3YfXjI9dyfSL2Z47ziwW7HuYoozNderKO/I7l0CgxgoHIOwF1sRb3QgOlsFhhfeKdndvU7SbD6tazQ==", + "dev": true, + "peer": true, + "dependencies": { + "@umbraco-ui/uui-base": "1.8.0" + } + }, "node_modules/ansi-escapes": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", @@ -914,6 +1860,27 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "peer": true + }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -965,6 +1932,23 @@ "node": ">=12" } }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -983,6 +1967,13 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "node_modules/colord": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", + "dev": true, + "peer": true + }, "node_modules/cookie": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", @@ -993,9 +1984,9 @@ } }, "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", "dev": true, "dependencies": { "ms": "2.1.2" @@ -1009,6 +2000,30 @@ } } }, + "node_modules/diff": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", + "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dompurify": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.1.5.tgz", + "integrity": "sha512-lwG+n5h8QNpxtyrJW/gJWckL+1/DQiYMX8f7t8Z2AZTPw1esVrqjI63i7Zc2Gz0aKzLVMYC1V1PL/ky+aY/NgA==", + "dev": true, + "peer": true + }, + "node_modules/element-internals-polyfill": { + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/element-internals-polyfill/-/element-internals-polyfill-1.3.11.tgz", + "integrity": "sha512-SQLQNVY4wMdpnP/F/HtalJbpEenQd46Avtjm5hvUdeTs3QU0zHFNX5/AmtQIPPcfzePb0ipCkQGY4GwYJIhLJA==", + "dev": true, + "peer": true + }, "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -1016,9 +2031,9 @@ "dev": true }, "node_modules/esbuild": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz", - "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", "dev": true, "hasInstallScript": true, "bin": { @@ -1028,64 +2043,40 @@ "node": ">=12" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.20.2", - "@esbuild/android-arm": "0.20.2", - "@esbuild/android-arm64": "0.20.2", - "@esbuild/android-x64": "0.20.2", - "@esbuild/darwin-arm64": "0.20.2", - "@esbuild/darwin-x64": "0.20.2", - "@esbuild/freebsd-arm64": "0.20.2", - "@esbuild/freebsd-x64": "0.20.2", - "@esbuild/linux-arm": "0.20.2", - "@esbuild/linux-arm64": "0.20.2", - "@esbuild/linux-ia32": "0.20.2", - "@esbuild/linux-loong64": "0.20.2", - "@esbuild/linux-mips64el": "0.20.2", - "@esbuild/linux-ppc64": "0.20.2", - "@esbuild/linux-riscv64": "0.20.2", - "@esbuild/linux-s390x": "0.20.2", - "@esbuild/linux-x64": "0.20.2", - "@esbuild/netbsd-x64": "0.20.2", - "@esbuild/openbsd-x64": "0.20.2", - "@esbuild/sunos-x64": "0.20.2", - "@esbuild/win32-arm64": "0.20.2", - "@esbuild/win32-ia32": "0.20.2", - "@esbuild/win32-x64": "0.20.2" + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" } }, "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", "dev": true, "engines": { "node": ">=6" } }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", @@ -1116,9 +2107,9 @@ "dev": true }, "node_modules/graphql": { - "version": "16.8.1", - "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.8.1.tgz", - "integrity": "sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw==", + "version": "16.9.0", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.9.0.tgz", + "integrity": "sha512-GGTKBX4SD7Wdb8mqeDLni2oaRGYQWjWHGKPQ24ZMnUtKfcsVoiv4uX8+LJr1K6U5VW2Lu1BwJnj7uiori0YtRw==", "dev": true, "engines": { "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" @@ -1134,9 +2125,9 @@ } }, "node_modules/headers-polyfill": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/headers-polyfill/-/headers-polyfill-4.0.2.tgz", - "integrity": "sha512-EWGTfnTqAO2L/j5HZgoM/3z82L7necsJ0pO9Tp0X1wil3PDLrkypTBRgVO2ExehEEvUycejZD3FuRaXpZZc3kw==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/headers-polyfill/-/headers-polyfill-4.0.3.tgz", + "integrity": "sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ==", "dev": true }, "node_modules/is-fullwidth-code-point": { @@ -1155,9 +2146,9 @@ "dev": true }, "node_modules/lit": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/lit/-/lit-3.1.3.tgz", - "integrity": "sha512-l4slfspEsnCcHVRTvaP7YnkTZEZggNFywLEIhQaGhYDczG+tu/vlgm/KaWIEjIp+ZyV20r2JnZctMb8LeLCG7Q==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/lit/-/lit-3.1.4.tgz", + "integrity": "sha512-q6qKnKXHy2g1kjBaNfcoLlgbI3+aSOZ9Q4tiGa9bGYXq5RBXxkVTqTIVmP2VWMp29L4GyvCFm8ZQ2o56eUAMyA==", "dev": true, "peer": true, "dependencies": { @@ -1167,9 +2158,9 @@ } }, "node_modules/lit-element": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-4.0.5.tgz", - "integrity": "sha512-iTWskWZEtn9SyEf4aBG6rKT8GABZMrTWop1+jopsEOgEcugcXJGKuX5bEbkq9qfzY+XB4MAgCaSPwnNpdsNQ3Q==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-4.0.6.tgz", + "integrity": "sha512-U4sdJ3CSQip7sLGZ/uJskO5hGiqtlpxndsLr6mt3IQIjheg93UKYeGQjWMRql1s/cXNOaRrCzC2FQwjIwSUqkg==", "dev": true, "peer": true, "dependencies": { @@ -1179,15 +2170,35 @@ } }, "node_modules/lit-html": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-3.1.3.tgz", - "integrity": "sha512-FwIbqDD8O/8lM4vUZ4KvQZjPPNx7V1VhT7vmRB8RBAO0AU6wuTVdoXiu2CivVjEGdugvcbPNBLtPE1y0ifplHA==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-3.1.4.tgz", + "integrity": "sha512-yKKO2uVv7zYFHlWMfZmqc+4hkmSbFp8jgjdZY9vvR9jr4J8fH6FUMXhr+ljfELgmjpvlF7Z1SJ5n5/Jeqtc9YA==", "dev": true, "peer": true, "dependencies": { "@types/trusted-types": "^2.0.2" } }, + "node_modules/marked": { + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/marked/-/marked-12.0.2.tgz", + "integrity": "sha512-qXUm7e/YKFoqFPYPa3Ukg9xlI5cyAtGmyEIzMfW//m6kXwCy2Ps9DYf5ioijFKQ8qyuscrHoY04iJGctu2Kg0Q==", + "dev": true, + "peer": true, + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/monaco-editor": { + "version": "0.48.0", + "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.48.0.tgz", + "integrity": "sha512-goSDElNqFfw7iDHMg8WDATkfcyeLTNpBHQpO8incK6p5qZt5G/1j41X0xdGzpIkGojGXM+QiRQyLjnfDVvrpwA==", + "dev": true, + "peer": true + }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -1195,9 +2206,9 @@ "dev": true }, "node_modules/msw": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/msw/-/msw-2.3.0.tgz", - "integrity": "sha512-cDr1q/QTMzaWhY8n9lpGhceY209k29UZtdTgJ3P8Bzne3TSMchX2EM/ldvn4ATLOktpCefCU2gcEgzHc31GTPw==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/msw/-/msw-2.3.1.tgz", + "integrity": "sha512-ocgvBCLn/5l3jpl1lssIb3cniuACJLoOfZu01e3n5dbJrpA5PeeWn28jCLgQDNt6d7QT8tF2fYRzm9JoEHtiig==", "dev": true, "hasInstallScript": true, "dependencies": { @@ -1271,9 +2282,9 @@ "dev": true }, "node_modules/path-to-regexp": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz", - "integrity": "sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.2.tgz", + "integrity": "sha512-GQX3SSMokngb36+whdpRXE+3f9V8UzyAorlYvOGx87ufGHehNTn5lCxrKtLyZ4Yl/wEKnNnr98ZzOwwDZV5ogw==", "dev": true }, "node_modules/picocolors": { @@ -1320,9 +2331,9 @@ } }, "node_modules/rollup": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.13.0.tgz", - "integrity": "sha512-3YegKemjoQnYKmsBlOHfMLVPPA5xLkQ8MHLLSw/fBrFaVkEayL51DilPpNNLq1exr98F2B1TzrV0FUlN3gWRPg==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.18.0.tgz", + "integrity": "sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg==", "dev": true, "dependencies": { "@types/estree": "1.0.5" @@ -1335,29 +2346,33 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.13.0", - "@rollup/rollup-android-arm64": "4.13.0", - "@rollup/rollup-darwin-arm64": "4.13.0", - "@rollup/rollup-darwin-x64": "4.13.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.13.0", - "@rollup/rollup-linux-arm64-gnu": "4.13.0", - "@rollup/rollup-linux-arm64-musl": "4.13.0", - "@rollup/rollup-linux-riscv64-gnu": "4.13.0", - "@rollup/rollup-linux-x64-gnu": "4.13.0", - "@rollup/rollup-linux-x64-musl": "4.13.0", - "@rollup/rollup-win32-arm64-msvc": "4.13.0", - "@rollup/rollup-win32-ia32-msvc": "4.13.0", - "@rollup/rollup-win32-x64-msvc": "4.13.0", + "@rollup/rollup-android-arm-eabi": "4.18.0", + "@rollup/rollup-android-arm64": "4.18.0", + "@rollup/rollup-darwin-arm64": "4.18.0", + "@rollup/rollup-darwin-x64": "4.18.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.18.0", + "@rollup/rollup-linux-arm-musleabihf": "4.18.0", + "@rollup/rollup-linux-arm64-gnu": "4.18.0", + "@rollup/rollup-linux-arm64-musl": "4.18.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.18.0", + "@rollup/rollup-linux-riscv64-gnu": "4.18.0", + "@rollup/rollup-linux-s390x-gnu": "4.18.0", + "@rollup/rollup-linux-x64-gnu": "4.18.0", + "@rollup/rollup-linux-x64-musl": "4.18.0", + "@rollup/rollup-win32-arm64-msvc": "4.18.0", + "@rollup/rollup-win32-ia32-msvc": "4.18.0", + "@rollup/rollup-win32-x64-msvc": "4.18.0", "fsevents": "~2.3.2" } }, - "node_modules/run-async": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-3.0.0.tgz", - "integrity": "sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==", + "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, - "engines": { - "node": ">=0.12.0" + "peer": true, + "dependencies": { + "tslib": "^2.1.0" } }, "node_modules/signal-exit": { @@ -1434,10 +2449,24 @@ "node": ">=8" } }, + "node_modules/tinymce": { + "version": "6.8.4", + "resolved": "https://registry.npmjs.org/tinymce/-/tinymce-6.8.4.tgz", + "integrity": "sha512-okoJyxuPv1gzASxQDNgQbnUXOdAIyoOSXcXcZZu7tiW0PSKEdf3SdASxPBupRj+64/E3elHwVRnzSdo82Emqbg==", + "dev": true, + "peer": true + }, + "node_modules/tinymce-i18n": { + "version": "24.6.24", + "resolved": "https://registry.npmjs.org/tinymce-i18n/-/tinymce-i18n-24.6.24.tgz", + "integrity": "sha512-FToQhgKzZLqEg+twKVjUcS8gPJbZprOtiyGhGHhxGZMeqJITgbD0imc2QV7cZ82cZbHTBOkK2aOvgmbhk5uaTw==", + "dev": true, + "peer": true + }, "node_modules/tsconfck": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/tsconfck/-/tsconfck-3.0.3.tgz", - "integrity": "sha512-4t0noZX9t6GcPTfBAbIbbIU4pfpCwh0ueq3S4O/5qXI1VwK1outmxhe9dOiEWqMz3MW2LKgDTpqWV+37IWuVbA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/tsconfck/-/tsconfck-3.1.0.tgz", + "integrity": "sha512-CMjc5zMnyAjcS9sPLytrbFmj89st2g+JYtY/c02ug4Q+CZaAtCgbyviI0n1YvjZE/pzoc6FbNsINS13DOL1B9w==", "dev": true, "bin": { "tsconfck": "bin/tsconfck.js" @@ -1454,10 +2483,17 @@ } } }, + "node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "dev": true, + "peer": true + }, "node_modules/type-fest": { - "version": "4.10.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.10.2.tgz", - "integrity": "sha512-anpAG63wSpdEbLwOqH8L84urkL6PiVIov3EMmgIhhThevh9aiMQov+6Btx0wldNcvm4wV+e2/Rt1QdDwKHFbHw==", + "version": "4.20.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.20.1.tgz", + "integrity": "sha512-R6wDsVsoS9xYOpy8vgeBlqpdOyzJ12HNfQhC/aAKWM3YoCV9TtunJzh/QpkMgeDhkoynDcw5f1y+qF9yc/HHyg==", "dev": true, "engines": { "node": ">=16" @@ -1467,9 +2503,9 @@ } }, "node_modules/typescript": { - "version": "5.4.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", - "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.2.tgz", + "integrity": "sha512-NcRtPEOsPFFWjobJEtfihkLCZCXZt/os3zf8nTxjVH3RvTSxjrCamJpbExGvYOF+tFHc3pA65qpdwPbzjohhew==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -1485,13 +2521,27 @@ "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", "dev": true }, + "node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "dev": true, + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "peer": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/vite": { - "version": "5.2.11", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.2.11.tgz", - "integrity": "sha512-HndV31LWW05i1BLPMUCE1B9E9GFbOu1MbenhS58FuK6owSO5qHm7GiCotrNY1YE5rMeQSFBGmT5ZaLEjFizgiQ==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.3.1.tgz", + "integrity": "sha512-XBmSKRLXLxiaPYamLv3/hnP/KXDai1NDexN0FpkTaZXTfycHvkRHoenpgl/fvuK/kPbB6xAgoyiryAhQNxYmAQ==", "dev": true, "dependencies": { - "esbuild": "^0.20.1", + "esbuild": "^0.21.3", "postcss": "^8.4.38", "rollup": "^4.13.0" }, @@ -1560,9 +2610,9 @@ } }, "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, "dependencies": { "ansi-styles": "^4.0.0", @@ -1570,10 +2620,7 @@ "strip-ansi": "^6.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "node": ">=8" } }, "node_modules/y18n": { diff --git a/src/Umbraco.Web.UI.Login/package.json b/src/Umbraco.Web.UI.Login/package.json index 05aaf0a018..7b0e3455c4 100644 --- a/src/Umbraco.Web.UI.Login/package.json +++ b/src/Umbraco.Web.UI.Login/package.json @@ -15,8 +15,8 @@ "dependencies": { }, "devDependencies": { - "@umbraco-cms/backoffice": "file:../Umbraco.Web.UI.Client", - "@umbraco-ui/uui-css": "^1.8.0-rc.0", + "@umbraco-cms/backoffice": "^14.0.0", + "@umbraco-ui/uui-css": "^1.8.0", "msw": "^2.3.0", "typescript": "^5.4.5", "vite": "^5.2.11", diff --git a/src/Umbraco.Web.UI.Login/public/mockServiceWorker.js b/src/Umbraco.Web.UI.Login/public/mockServiceWorker.js index bdfdb11d38..24fe3a25f0 100644 --- a/src/Umbraco.Web.UI.Login/public/mockServiceWorker.js +++ b/src/Umbraco.Web.UI.Login/public/mockServiceWorker.js @@ -8,7 +8,7 @@ * - Please do NOT serve this file on production. */ -const PACKAGE_VERSION = '2.3.0' +const PACKAGE_VERSION = '2.3.1' const INTEGRITY_CHECKSUM = '26357c79639bfa20d64c0efca2a87423' const IS_MOCKED_RESPONSE = Symbol('isMockedResponse') const activeClientIds = new Set() From 1774d4e234b4a6e0919a1f8260bc6fade2d975a2 Mon Sep 17 00:00:00 2001 From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com> Date: Wed, 26 Jun 2024 13:32:28 +0200 Subject: [PATCH 03/20] update backoffice submodule --- src/Umbraco.Web.UI.Client | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Umbraco.Web.UI.Client b/src/Umbraco.Web.UI.Client index 9077e80b32..cd798c8858 160000 --- a/src/Umbraco.Web.UI.Client +++ b/src/Umbraco.Web.UI.Client @@ -1 +1 @@ -Subproject commit 9077e80b3298c3ef9ca491fca7a33cc662ea6f5b +Subproject commit cd798c8858b32b15410cd16ab69b5625b17f750e From 195d8b584332ec721c96e970fa168733e97afa71 Mon Sep 17 00:00:00 2001 From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com> Date: Wed, 26 Jun 2024 13:33:07 +0200 Subject: [PATCH 04/20] backoffice submodule release/14.1 --- src/Umbraco.Web.UI.Client | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Umbraco.Web.UI.Client b/src/Umbraco.Web.UI.Client index 9077e80b32..4022d30f35 160000 --- a/src/Umbraco.Web.UI.Client +++ b/src/Umbraco.Web.UI.Client @@ -1 +1 @@ -Subproject commit 9077e80b3298c3ef9ca491fca7a33cc662ea6f5b +Subproject commit 4022d30f35bd85e4bc201f2ef02b145be9a9a601 From ed220035efddf8bd320fe81f53689a04ea7401fa Mon Sep 17 00:00:00 2001 From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com> Date: Wed, 26 Jun 2024 14:40:57 +0200 Subject: [PATCH 05/20] backoffice submodule release/14.1 --- src/Umbraco.Web.UI.Client | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Umbraco.Web.UI.Client b/src/Umbraco.Web.UI.Client index 4022d30f35..b316ce3b52 160000 --- a/src/Umbraco.Web.UI.Client +++ b/src/Umbraco.Web.UI.Client @@ -1 +1 @@ -Subproject commit 4022d30f35bd85e4bc201f2ef02b145be9a9a601 +Subproject commit b316ce3b5276d0b08d297df3c46a27d83ffabedd From 1ea65c1fb207df5819760853f68d92aa633d816c Mon Sep 17 00:00:00 2001 From: Bjarke Berg Date: Thu, 27 Jun 2024 10:47:41 +0200 Subject: [PATCH 06/20] Use the configured backoffice url to initialize openiddict if it is available and just fallback to the one from the first request. (#16660) Fixes https://github.com/umbraco/Umbraco-CMS/issues/16179 --- ...ceAuthorizationInitializationMiddleware.cs | 37 ++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/src/Umbraco.Cms.Api.Management/Middleware/BackOfficeAuthorizationInitializationMiddleware.cs b/src/Umbraco.Cms.Api.Management/Middleware/BackOfficeAuthorizationInitializationMiddleware.cs index c9179215df..4da821337d 100644 --- a/src/Umbraco.Cms.Api.Management/Middleware/BackOfficeAuthorizationInitializationMiddleware.cs +++ b/src/Umbraco.Cms.Api.Management/Middleware/BackOfficeAuthorizationInitializationMiddleware.cs @@ -1,10 +1,15 @@ using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http.Extensions; using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Options; using Umbraco.Cms.Core; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.DependencyInjection; +using Umbraco.Cms.Core.Hosting; using Umbraco.Cms.Core.Routing; using Umbraco.Cms.Core.Services; using Umbraco.Cms.Infrastructure.Security; +using Umbraco.Extensions; namespace Umbraco.Cms.Api.Management.Middleware; @@ -16,15 +21,40 @@ public class BackOfficeAuthorizationInitializationMiddleware : IMiddleware private readonly UmbracoRequestPaths _umbracoRequestPaths; private readonly IServiceProvider _serviceProvider; private readonly IRuntimeState _runtimeState; + private readonly IOptions _globalSettings; + private readonly IOptions _webRoutingSettings; + private readonly IHostingEnvironment _hostingEnvironment; + [Obsolete("Use the non-obsolete constructor. This will be removed in Umbraco 16.")] public BackOfficeAuthorizationInitializationMiddleware( UmbracoRequestPaths umbracoRequestPaths, IServiceProvider serviceProvider, IRuntimeState runtimeState) + : this( + umbracoRequestPaths, + serviceProvider, + runtimeState, + StaticServiceProvider.Instance.GetRequiredService>(), + StaticServiceProvider.Instance.GetRequiredService>(), + StaticServiceProvider.Instance.GetRequiredService() + ) + { + } + + public BackOfficeAuthorizationInitializationMiddleware( + UmbracoRequestPaths umbracoRequestPaths, + IServiceProvider serviceProvider, + IRuntimeState runtimeState, + IOptions globalSettings, + IOptions webRoutingSettings, + IHostingEnvironment hostingEnvironment) { _umbracoRequestPaths = umbracoRequestPaths; _serviceProvider = serviceProvider; _runtimeState = runtimeState; + _globalSettings = globalSettings; + _webRoutingSettings = webRoutingSettings; + _hostingEnvironment = hostingEnvironment; } public async Task InvokeAsync(HttpContext context, RequestDelegate next) @@ -47,6 +77,7 @@ public class BackOfficeAuthorizationInitializationMiddleware : IMiddleware return; } + if (_umbracoRequestPaths.IsBackOfficeRequest(context.Request.Path) == false) { return; @@ -55,9 +86,13 @@ public class BackOfficeAuthorizationInitializationMiddleware : IMiddleware await _firstBackOfficeRequestLocker.WaitAsync(); if (_firstBackOfficeRequest == false) { + Uri? backOfficeUrl = string.IsNullOrWhiteSpace(_webRoutingSettings.Value.UmbracoApplicationUrl) is false + ? new Uri($"{_webRoutingSettings.Value.UmbracoApplicationUrl.TrimEnd('/')}{_globalSettings.Value.GetBackOfficePath(_hostingEnvironment).EnsureStartsWith('/')}") + : null; + using IServiceScope scope = _serviceProvider.CreateScope(); IBackOfficeApplicationManager backOfficeApplicationManager = scope.ServiceProvider.GetRequiredService(); - await backOfficeApplicationManager.EnsureBackOfficeApplicationAsync(new Uri(context.Request.GetDisplayUrl())); + await backOfficeApplicationManager.EnsureBackOfficeApplicationAsync(backOfficeUrl ?? new Uri(context.Request.GetDisplayUrl())); _firstBackOfficeRequest = true; } From 2fa4149b62ad23055ef4624369d4f2e8fa74ea53 Mon Sep 17 00:00:00 2001 From: Bjarke Berg Date: Thu, 27 Jun 2024 10:47:41 +0200 Subject: [PATCH 07/20] Use the configured backoffice url to initialize openiddict if it is available and just fallback to the one from the first request. (#16660) Fixes https://github.com/umbraco/Umbraco-CMS/issues/16179 --- ...ceAuthorizationInitializationMiddleware.cs | 37 ++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/src/Umbraco.Cms.Api.Management/Middleware/BackOfficeAuthorizationInitializationMiddleware.cs b/src/Umbraco.Cms.Api.Management/Middleware/BackOfficeAuthorizationInitializationMiddleware.cs index c9179215df..4da821337d 100644 --- a/src/Umbraco.Cms.Api.Management/Middleware/BackOfficeAuthorizationInitializationMiddleware.cs +++ b/src/Umbraco.Cms.Api.Management/Middleware/BackOfficeAuthorizationInitializationMiddleware.cs @@ -1,10 +1,15 @@ using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http.Extensions; using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Options; using Umbraco.Cms.Core; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.DependencyInjection; +using Umbraco.Cms.Core.Hosting; using Umbraco.Cms.Core.Routing; using Umbraco.Cms.Core.Services; using Umbraco.Cms.Infrastructure.Security; +using Umbraco.Extensions; namespace Umbraco.Cms.Api.Management.Middleware; @@ -16,15 +21,40 @@ public class BackOfficeAuthorizationInitializationMiddleware : IMiddleware private readonly UmbracoRequestPaths _umbracoRequestPaths; private readonly IServiceProvider _serviceProvider; private readonly IRuntimeState _runtimeState; + private readonly IOptions _globalSettings; + private readonly IOptions _webRoutingSettings; + private readonly IHostingEnvironment _hostingEnvironment; + [Obsolete("Use the non-obsolete constructor. This will be removed in Umbraco 16.")] public BackOfficeAuthorizationInitializationMiddleware( UmbracoRequestPaths umbracoRequestPaths, IServiceProvider serviceProvider, IRuntimeState runtimeState) + : this( + umbracoRequestPaths, + serviceProvider, + runtimeState, + StaticServiceProvider.Instance.GetRequiredService>(), + StaticServiceProvider.Instance.GetRequiredService>(), + StaticServiceProvider.Instance.GetRequiredService() + ) + { + } + + public BackOfficeAuthorizationInitializationMiddleware( + UmbracoRequestPaths umbracoRequestPaths, + IServiceProvider serviceProvider, + IRuntimeState runtimeState, + IOptions globalSettings, + IOptions webRoutingSettings, + IHostingEnvironment hostingEnvironment) { _umbracoRequestPaths = umbracoRequestPaths; _serviceProvider = serviceProvider; _runtimeState = runtimeState; + _globalSettings = globalSettings; + _webRoutingSettings = webRoutingSettings; + _hostingEnvironment = hostingEnvironment; } public async Task InvokeAsync(HttpContext context, RequestDelegate next) @@ -47,6 +77,7 @@ public class BackOfficeAuthorizationInitializationMiddleware : IMiddleware return; } + if (_umbracoRequestPaths.IsBackOfficeRequest(context.Request.Path) == false) { return; @@ -55,9 +86,13 @@ public class BackOfficeAuthorizationInitializationMiddleware : IMiddleware await _firstBackOfficeRequestLocker.WaitAsync(); if (_firstBackOfficeRequest == false) { + Uri? backOfficeUrl = string.IsNullOrWhiteSpace(_webRoutingSettings.Value.UmbracoApplicationUrl) is false + ? new Uri($"{_webRoutingSettings.Value.UmbracoApplicationUrl.TrimEnd('/')}{_globalSettings.Value.GetBackOfficePath(_hostingEnvironment).EnsureStartsWith('/')}") + : null; + using IServiceScope scope = _serviceProvider.CreateScope(); IBackOfficeApplicationManager backOfficeApplicationManager = scope.ServiceProvider.GetRequiredService(); - await backOfficeApplicationManager.EnsureBackOfficeApplicationAsync(new Uri(context.Request.GetDisplayUrl())); + await backOfficeApplicationManager.EnsureBackOfficeApplicationAsync(backOfficeUrl ?? new Uri(context.Request.GetDisplayUrl())); _firstBackOfficeRequest = true; } From d170193a95a6da9f9e01e7d9831e4e8688f445be Mon Sep 17 00:00:00 2001 From: Sven Geusens Date: Fri, 28 Jun 2024 09:28:55 +0200 Subject: [PATCH 08/20] Fixed toolbar not showing for seeded,untouched and then migrated RTE datatypes (#16665) Moved 14.1 migrations into their own namespace Co-authored-by: Sven Geusens --- .../Migrations/Upgrade/UmbracoPlan.cs | 5 ++- .../MigrateOldRichTextSeedConfiguration.cs | 38 +++++++++++++++++++ .../MigrateRichTextConfiguration.cs | 2 +- 3 files changed, 43 insertions(+), 2 deletions(-) create mode 100644 src/Umbraco.Infrastructure/Migrations/Upgrade/V_14_1_0/MigrateOldRichTextSeedConfiguration.cs rename src/Umbraco.Infrastructure/Migrations/Upgrade/{V_14_0_0 => V_14_1_0}/MigrateRichTextConfiguration.cs (93%) diff --git a/src/Umbraco.Infrastructure/Migrations/Upgrade/UmbracoPlan.cs b/src/Umbraco.Infrastructure/Migrations/Upgrade/UmbracoPlan.cs index 91ca3b4d58..8502e4c529 100644 --- a/src/Umbraco.Infrastructure/Migrations/Upgrade/UmbracoPlan.cs +++ b/src/Umbraco.Infrastructure/Migrations/Upgrade/UmbracoPlan.cs @@ -84,6 +84,9 @@ public class UmbracoPlan : MigrationPlan // we need to re-run this migration, as it was flawed for V14 RC3 (the migration can run twice without any issues) To("{6FB5CA9E-C823-473B-A14C-FE760D75943C}"); To("{827360CA-0855-42A5-8F86-A51F168CB559}"); - To("{FEF2DAF4-5408-4636-BB0E-B8798DF8F095}"); + + // To 14.1.0 + To("{FEF2DAF4-5408-4636-BB0E-B8798DF8F095}"); + To("{A385C5DF-48DC-46B4-A742-D5BB846483BC}"); } } diff --git a/src/Umbraco.Infrastructure/Migrations/Upgrade/V_14_1_0/MigrateOldRichTextSeedConfiguration.cs b/src/Umbraco.Infrastructure/Migrations/Upgrade/V_14_1_0/MigrateOldRichTextSeedConfiguration.cs new file mode 100644 index 0000000000..765fba03d1 --- /dev/null +++ b/src/Umbraco.Infrastructure/Migrations/Upgrade/V_14_1_0/MigrateOldRichTextSeedConfiguration.cs @@ -0,0 +1,38 @@ +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_14_1_0; + +public class MigrateOldRichTextSeedConfiguration : MigrationBase +{ + private const string OldSeedValue = + "{\"value\":\",code,undo,redo,cut,copy,mcepasteword,stylepicker,bold,italic,bullist,numlist,outdent,indent,mcelink,unlink,mceinsertanchor,mceimage,umbracomacro,mceinserttable,umbracoembed,mcecharmap,|1|1,2,3,|0|500,400|1049,|true|\"}"; + + private const string NewDefaultValue = + "{\"toolbar\":[\"styles\",\"bold\",\"italic\",\"alignleft\",\"aligncenter\",\"alignright\",\"bullist\",\"numlist\",\"outdent\",\"indent\",\"sourcecode\",\"link\",\"umbmediapicker\",\"umbembeddialog\"],\"mode\":\"Classic\",\"maxImageSize\":500}"; + public MigrateOldRichTextSeedConfiguration(IMigrationContext context) : base(context) + { + } + + protected override void Migrate() + { + Sql sql = Sql() + .Select() + .From() + .Where(x => + x.EditorAlias.Equals(Constants.PropertyEditors.Aliases.RichText) + && x.Configuration == OldSeedValue); + + List dataTypeDtos = Database.Fetch(sql); + + foreach (DataTypeDto dataTypeDto in dataTypeDtos) + { + // Update the configuration + dataTypeDto.Configuration = NewDefaultValue; + Database.Update(dataTypeDto); + } + } +} diff --git a/src/Umbraco.Infrastructure/Migrations/Upgrade/V_14_0_0/MigrateRichTextConfiguration.cs b/src/Umbraco.Infrastructure/Migrations/Upgrade/V_14_1_0/MigrateRichTextConfiguration.cs similarity index 93% rename from src/Umbraco.Infrastructure/Migrations/Upgrade/V_14_0_0/MigrateRichTextConfiguration.cs rename to src/Umbraco.Infrastructure/Migrations/Upgrade/V_14_1_0/MigrateRichTextConfiguration.cs index 950259f575..bca328eb3f 100644 --- a/src/Umbraco.Infrastructure/Migrations/Upgrade/V_14_0_0/MigrateRichTextConfiguration.cs +++ b/src/Umbraco.Infrastructure/Migrations/Upgrade/V_14_1_0/MigrateRichTextConfiguration.cs @@ -4,7 +4,7 @@ using Umbraco.Cms.Infrastructure.Persistence; using Umbraco.Cms.Infrastructure.Persistence.Dtos; using Umbraco.Extensions; -namespace Umbraco.Cms.Infrastructure.Migrations.Upgrade.V_14_0_0; +namespace Umbraco.Cms.Infrastructure.Migrations.Upgrade.V_14_1_0; public class MigrateRichTextConfiguration : MigrationBase { From 921598b6677867f468bc9296cb44754399f20184 Mon Sep 17 00:00:00 2001 From: Sven Geusens Date: Fri, 28 Jun 2024 09:28:55 +0200 Subject: [PATCH 09/20] Fixed toolbar not showing for seeded,untouched and then migrated RTE datatypes (#16665) Moved 14.1 migrations into their own namespace Co-authored-by: Sven Geusens (cherry picked from commit d170193a95a6da9f9e01e7d9831e4e8688f445be) --- .../Migrations/Upgrade/UmbracoPlan.cs | 5 ++- .../MigrateOldRichTextSeedConfiguration.cs | 38 +++++++++++++++++++ .../MigrateRichTextConfiguration.cs | 2 +- 3 files changed, 43 insertions(+), 2 deletions(-) create mode 100644 src/Umbraco.Infrastructure/Migrations/Upgrade/V_14_1_0/MigrateOldRichTextSeedConfiguration.cs rename src/Umbraco.Infrastructure/Migrations/Upgrade/{V_14_0_0 => V_14_1_0}/MigrateRichTextConfiguration.cs (93%) diff --git a/src/Umbraco.Infrastructure/Migrations/Upgrade/UmbracoPlan.cs b/src/Umbraco.Infrastructure/Migrations/Upgrade/UmbracoPlan.cs index 91ca3b4d58..8502e4c529 100644 --- a/src/Umbraco.Infrastructure/Migrations/Upgrade/UmbracoPlan.cs +++ b/src/Umbraco.Infrastructure/Migrations/Upgrade/UmbracoPlan.cs @@ -84,6 +84,9 @@ public class UmbracoPlan : MigrationPlan // we need to re-run this migration, as it was flawed for V14 RC3 (the migration can run twice without any issues) To("{6FB5CA9E-C823-473B-A14C-FE760D75943C}"); To("{827360CA-0855-42A5-8F86-A51F168CB559}"); - To("{FEF2DAF4-5408-4636-BB0E-B8798DF8F095}"); + + // To 14.1.0 + To("{FEF2DAF4-5408-4636-BB0E-B8798DF8F095}"); + To("{A385C5DF-48DC-46B4-A742-D5BB846483BC}"); } } diff --git a/src/Umbraco.Infrastructure/Migrations/Upgrade/V_14_1_0/MigrateOldRichTextSeedConfiguration.cs b/src/Umbraco.Infrastructure/Migrations/Upgrade/V_14_1_0/MigrateOldRichTextSeedConfiguration.cs new file mode 100644 index 0000000000..765fba03d1 --- /dev/null +++ b/src/Umbraco.Infrastructure/Migrations/Upgrade/V_14_1_0/MigrateOldRichTextSeedConfiguration.cs @@ -0,0 +1,38 @@ +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_14_1_0; + +public class MigrateOldRichTextSeedConfiguration : MigrationBase +{ + private const string OldSeedValue = + "{\"value\":\",code,undo,redo,cut,copy,mcepasteword,stylepicker,bold,italic,bullist,numlist,outdent,indent,mcelink,unlink,mceinsertanchor,mceimage,umbracomacro,mceinserttable,umbracoembed,mcecharmap,|1|1,2,3,|0|500,400|1049,|true|\"}"; + + private const string NewDefaultValue = + "{\"toolbar\":[\"styles\",\"bold\",\"italic\",\"alignleft\",\"aligncenter\",\"alignright\",\"bullist\",\"numlist\",\"outdent\",\"indent\",\"sourcecode\",\"link\",\"umbmediapicker\",\"umbembeddialog\"],\"mode\":\"Classic\",\"maxImageSize\":500}"; + public MigrateOldRichTextSeedConfiguration(IMigrationContext context) : base(context) + { + } + + protected override void Migrate() + { + Sql sql = Sql() + .Select() + .From() + .Where(x => + x.EditorAlias.Equals(Constants.PropertyEditors.Aliases.RichText) + && x.Configuration == OldSeedValue); + + List dataTypeDtos = Database.Fetch(sql); + + foreach (DataTypeDto dataTypeDto in dataTypeDtos) + { + // Update the configuration + dataTypeDto.Configuration = NewDefaultValue; + Database.Update(dataTypeDto); + } + } +} diff --git a/src/Umbraco.Infrastructure/Migrations/Upgrade/V_14_0_0/MigrateRichTextConfiguration.cs b/src/Umbraco.Infrastructure/Migrations/Upgrade/V_14_1_0/MigrateRichTextConfiguration.cs similarity index 93% rename from src/Umbraco.Infrastructure/Migrations/Upgrade/V_14_0_0/MigrateRichTextConfiguration.cs rename to src/Umbraco.Infrastructure/Migrations/Upgrade/V_14_1_0/MigrateRichTextConfiguration.cs index 950259f575..bca328eb3f 100644 --- a/src/Umbraco.Infrastructure/Migrations/Upgrade/V_14_0_0/MigrateRichTextConfiguration.cs +++ b/src/Umbraco.Infrastructure/Migrations/Upgrade/V_14_1_0/MigrateRichTextConfiguration.cs @@ -4,7 +4,7 @@ using Umbraco.Cms.Infrastructure.Persistence; using Umbraco.Cms.Infrastructure.Persistence.Dtos; using Umbraco.Extensions; -namespace Umbraco.Cms.Infrastructure.Migrations.Upgrade.V_14_0_0; +namespace Umbraco.Cms.Infrastructure.Migrations.Upgrade.V_14_1_0; public class MigrateRichTextConfiguration : MigrationBase { From 2010a241fe33da55c4279ad0f9a39836391813f3 Mon Sep 17 00:00:00 2001 From: Zeegaan Date: Fri, 28 Jun 2024 09:30:06 +0200 Subject: [PATCH 10/20] Bumb version --- version.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.json b/version.json index cf30f7b7d2..31fd8e32c7 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": "14.1.0-rc", + "version": "14.1.0-rc2", "assemblyVersion": { "precision": "build" }, From 2185be1b0323f4f0b6de5ad4f1c15a92212fabd3 Mon Sep 17 00:00:00 2001 From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com> Date: Fri, 28 Jun 2024 15:26:28 +0200 Subject: [PATCH 11/20] update backoffice submodule --- src/Umbraco.Web.UI.Client | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Umbraco.Web.UI.Client b/src/Umbraco.Web.UI.Client index b316ce3b52..144378a4cb 160000 --- a/src/Umbraco.Web.UI.Client +++ b/src/Umbraco.Web.UI.Client @@ -1 +1 @@ -Subproject commit b316ce3b5276d0b08d297df3c46a27d83ffabedd +Subproject commit 144378a4cb16be8499b38db8e217b1d24050db75 From 2122af7e9600ad8d32f7d9f48989b8b669e342b6 Mon Sep 17 00:00:00 2001 From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com> Date: Mon, 1 Jul 2024 12:23:58 +0200 Subject: [PATCH 12/20] V14: Build and release the type declarations of the Backoffice to npm (#16718) * separate backoffice install into its own template * add new job to build the backoffice npm package * move location of templates * set version, then build, then pack * use nbgv to get just the NpmPackageVersion * calculate version earlier and for both builds * merge two tasks * add Build keyword to the display name * get the node version from the backoffice * update backoffice submodule * bump npm version before restoring cache to ensure the cache key doesn't change * add template to umbraco.sln --- build/azure-pipelines.yml | 64 +++++++++----------------- build/templates/backoffice-install.yml | 31 +++++++++++++ src/Umbraco.Web.UI.Client | 2 +- umbraco.sln | 1 + 4 files changed, 54 insertions(+), 44 deletions(-) create mode 100644 build/templates/backoffice-install.yml diff --git a/build/azure-pipelines.yml b/build/azure-pipelines.yml index aa7e1845f7..e794cb844a 100644 --- a/build/azure-pipelines.yml +++ b/build/azure-pipelines.yml @@ -63,15 +63,14 @@ variables: DOTNET_GENERATE_ASPNET_CERTIFICATE: false DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true DOTNET_CLI_TELEMETRY_OPTOUT: true + npm_config_cache: $(Pipeline.Workspace)/.npm_client + NODE_OPTIONS: --max_old_space_size=16384 stages: ############################################### ## Build ############################################### - stage: Build - variables: - npm_config_cache: $(Pipeline.Workspace)/.npm_client - NODE_OPTIONS: --max_old_space_size=16384 jobs: - job: A displayName: Build Umbraco CMS @@ -80,18 +79,11 @@ stages: steps: - checkout: self submodules: true - - task: NodeTool@0 - displayName: Use Node.js $(nodeVersion) - retryCountOnTaskFailure: 3 + - task: UseDotNet@2 + displayName: Use .NET SDK from global.json inputs: - versionSpec: $(nodeVersion) - - script: npm ci --no-fund --no-audit --prefer-offline - displayName: Run npm ci (Bellissima) - workingDirectory: src/Umbraco.Web.UI.Client - - script: npm run generate:api-local - displayName: Generate API models (Bellissima) - workingDirectory: src/Umbraco.Web.UI.Client - enabled: false + useGlobalJson: true + - template: templates/backoffice-install.yml - script: npm run build:for:cms displayName: Run build (Bellissima) workingDirectory: src/Umbraco.Web.UI.Client @@ -101,10 +93,6 @@ stages: - script: npm run build displayName: Run npm build (Login) workingDirectory: src/Umbraco.Web.UI.Login - - task: UseDotNet@2 - displayName: Use .NET SDK from global.json - inputs: - useGlobalJson: true - task: DotNetCoreCLI@2 displayName: Run dotnet restore inputs: @@ -127,18 +115,25 @@ stages: inputs: targetPath: $(Build.SourcesDirectory) artifactName: build_output + + - job: B + displayName: Build Bellissima Package + pool: + vmImage: 'ubuntu-latest' + steps: + - checkout: self + submodules: true + - template: templates/backoffice-install.yml + - script: npm run build:for:npm + displayName: Run build:for:npm + workingDirectory: src/Umbraco.Web.UI.Client - bash: | - echo "##[command]Running npm version" - echo "##[debug]Version: $PACKAGE_VERSION" echo "##[command]Running npm pack" echo "##[debug]Output directory: $(Build.ArtifactStagingDirectory)" - npm version $PACKAGE_VERSION --allow-same-version --no-git-tag-version mkdir $(Build.ArtifactStagingDirectory)/npm npm pack --pack-destination $(Build.ArtifactStagingDirectory)/npm mv .npmrc $(Build.ArtifactStagingDirectory)/npm/ - displayName: Prepare Bellissima npm package - env: - PACKAGE_VERSION: $(build.NBGV_NpmPackageVersion) + displayName: Run npm pack workingDirectory: src/Umbraco.Web.UI.Client - task: PublishPipelineArtifact@1 displayName: Publish Bellissima npm artifact @@ -208,28 +203,11 @@ stages: pool: vmImage: 'ubuntu-latest' variables: - npm_config_cache: $(Pipeline.Workspace)/.npm_client - NODE_OPTIONS: --max_old_space_size=16384 BASE_PATH: /v$(umbracoMajorVersion)/ui steps: - checkout: self submodules: true - - task: NodeTool@0 - displayName: Use Node.js $(nodeVersion) - retryCountOnTaskFailure: 3 - inputs: - versionSpec: $(nodeVersion) - - task: Cache@2 - displayName: Cache node_modules - inputs: - key: '"npm_client" | "$(Agent.OS)"| $(Build.SourcesDirectory)/src/Umbraco.Web.UI.Client/package-lock.json' - restoreKeys: | - "npm_client" | "$(Agent.OS)" - "npm_client" - path: $(npm_config_cache) - - script: npm ci --no-fund --no-audit --prefer-offline - workingDirectory: src/Umbraco.Web.UI.Client - displayName: Run npm ci + - template: templates/backoffice-install.yml - script: npm run storybook:build displayName: Build Storybook env: @@ -528,7 +506,7 @@ stages: - ${{ if eq(parameters.isNightly, true) }}: pwsh: npm run test --ignore-certificate-errors ${{ else }}: - pwsh: npm run smokeTest --ignore-certificate-errors + pwsh: npm run smokeTest --ignore-certificate-errors displayName: Run Playwright tests continueOnError: true workingDirectory: tests/Umbraco.Tests.AcceptanceTest diff --git a/build/templates/backoffice-install.yml b/build/templates/backoffice-install.yml new file mode 100644 index 0000000000..2c22cca7e3 --- /dev/null +++ b/build/templates/backoffice-install.yml @@ -0,0 +1,31 @@ +steps: + - task: NodeTool@0 + displayName: Use Node.js + retryCountOnTaskFailure: 3 + inputs: + versionSource: 'fromFile' + versionFilePath: src/Umbraco.Web.UI.Client/.nvmrc + + - bash: | + echo "##[command]Install nbgv" + dotnet tool install --tool-path . nbgv + echo "##[command]Running nbgv get-version" + PACKAGE_VERSION=$(nbgv get-version -v NpmPackageVersion) + echo "##[command]Running npm version" + echo "##[debug]Version: $PACKAGE_VERSION" + cd src/Umbraco.Web.UI.Client + npm version $PACKAGE_VERSION --allow-same-version --no-git-tag-version + displayName: Set NPM Version + + - task: Cache@2 + displayName: Cache node_modules + inputs: + key: '"npm_client" | "$(Agent.OS)"| $(Build.SourcesDirectory)/src/Umbraco.Web.UI.Client/package-lock.json' + restoreKeys: | + "npm_client" | "$(Agent.OS)" + "npm_client" + path: $(npm_config_cache) + + - script: npm ci --no-fund --no-audit --prefer-offline + displayName: Run npm ci (Bellissima) + workingDirectory: src/Umbraco.Web.UI.Client diff --git a/src/Umbraco.Web.UI.Client b/src/Umbraco.Web.UI.Client index 144378a4cb..9ec8c79227 160000 --- a/src/Umbraco.Web.UI.Client +++ b/src/Umbraco.Web.UI.Client @@ -1 +1 @@ -Subproject commit 144378a4cb16be8499b38db8e217b1d24050db75 +Subproject commit 9ec8c79227312d97e5dcd6b61a6209752e48d76f diff --git a/umbraco.sln b/umbraco.sln index 1e7a6e3326..59015768a8 100644 --- a/umbraco.sln +++ b/umbraco.sln @@ -140,6 +140,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "build", "build", "{20CE9C97 ProjectSection(SolutionItems) = preProject build\azure-pipelines.yml = build\azure-pipelines.yml build\nightly-build-trigger.yml = build\nightly-build-trigger.yml + build\templates\backoffice-install.yml = build\templates\backoffice-install.yml EndProjectSection EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "csharp-docs", "csharp-docs", "{F2BF84D9-0A14-40AF-A0F3-B9BBBBC16A44}" From d2707acd3b6b7e10dca50a06da1fc4b9505bb281 Mon Sep 17 00:00:00 2001 From: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com> Date: Mon, 1 Jul 2024 15:29:42 +0200 Subject: [PATCH 13/20] V14: Create seperate Create and Update in ContentTypeServiceBase (#16714) * Create seperate Create and Update in ContentTypeServiceBase * Fix up notification for update --------- Co-authored-by: nikolajlauridsen --- .../DocumentTypeControllerBase.cs | 12 ++++ .../ContentTypeEditingService.cs | 16 +++-- ...peServiceBaseOfTRepositoryTItemTService.cs | 69 +++++++++++++++++++ .../Services/IContentTypeServiceBase.cs | 15 ++++ .../ContentTypeOperationStatus.cs | 5 +- 5 files changed, 110 insertions(+), 7 deletions(-) diff --git a/src/Umbraco.Cms.Api.Management/Controllers/DocumentType/DocumentTypeControllerBase.cs b/src/Umbraco.Cms.Api.Management/Controllers/DocumentType/DocumentTypeControllerBase.cs index 2e5b7385ae..c65ed1631d 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/DocumentType/DocumentTypeControllerBase.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/DocumentType/DocumentTypeControllerBase.cs @@ -86,6 +86,18 @@ public abstract class DocumentTypeControllerBase : ManagementApiControllerBase .WithTitle("Operation not permitted") .WithDetail("The attempted operation was not permitted, likely due to a permission/configuration mismatch with the operation.") .Build()), + ContentTypeOperationStatus.CancelledByNotification => new BadRequestObjectResult(problemDetailsBuilder + .WithTitle("Cancelled by notification") + .WithDetail("The attempted operation was cancelled by a notification.") + .Build()), + ContentTypeOperationStatus.NameCannotBeEmpty => new BadRequestObjectResult(problemDetailsBuilder + .WithTitle("Name cannot be empty") + .WithDetail("The name of the content type cannot be empty") + .Build()), + ContentTypeOperationStatus.NameTooLong => new BadRequestObjectResult(problemDetailsBuilder + .WithTitle("Name was too long") + .WithDetail("Name cannot be more than 255 characters in length.") + .Build()), _ => new ObjectResult("Unknown content type operation status") { StatusCode = StatusCodes.Status500InternalServerError }, }); diff --git a/src/Umbraco.Core/Services/ContentTypeEditing/ContentTypeEditingService.cs b/src/Umbraco.Core/Services/ContentTypeEditing/ContentTypeEditingService.cs index f366a75124..9c96fe64a4 100644 --- a/src/Umbraco.Core/Services/ContentTypeEditing/ContentTypeEditingService.cs +++ b/src/Umbraco.Core/Services/ContentTypeEditing/ContentTypeEditingService.cs @@ -40,7 +40,12 @@ internal sealed class ContentTypeEditingService : ContentTypeEditingServiceBase< UpdateTemplates(contentType, model); // save content type - await SaveAsync(contentType, userKey); + Attempt creationAttempt = await _contentTypeService.CreateAsync(contentType, userKey); + + if(creationAttempt.Success is false) + { + return Attempt.FailWithStatus(creationAttempt.Result, contentType); + } return Attempt.SucceedWithStatus(ContentTypeOperationStatus.Success, contentType); } @@ -58,9 +63,11 @@ internal sealed class ContentTypeEditingService : ContentTypeEditingServiceBase< UpdateHistoryCleanup(contentType, model); UpdateTemplates(contentType, model); - await SaveAsync(contentType, userKey); + Attempt attempt = await _contentTypeService.UpdateAsync(contentType, userKey); - return Attempt.SucceedWithStatus(ContentTypeOperationStatus.Success, contentType); + return attempt.Success + ? Attempt.SucceedWithStatus(ContentTypeOperationStatus.Success, contentType) + : Attempt.FailWithStatus(attempt.Result, null); } public async Task> GetAvailableCompositionsAsync( @@ -93,9 +100,6 @@ internal sealed class ContentTypeEditingService : ContentTypeEditingServiceBase< contentType.SetDefaultTemplate(allowedTemplates.FirstOrDefault(t => t.Key == model.DefaultTemplateKey)); } - private async Task SaveAsync(IContentType contentType, Guid userKey) - => await _contentTypeService.SaveAsync(contentType, userKey); - protected override IContentType CreateContentType(IShortStringHelper shortStringHelper, int parentId) => new ContentType(shortStringHelper, parentId); diff --git a/src/Umbraco.Core/Services/ContentTypeServiceBaseOfTRepositoryTItemTService.cs b/src/Umbraco.Core/Services/ContentTypeServiceBaseOfTRepositoryTItemTService.cs index 8340f3c584..5d91c29b27 100644 --- a/src/Umbraco.Core/Services/ContentTypeServiceBaseOfTRepositoryTItemTService.cs +++ b/src/Umbraco.Core/Services/ContentTypeServiceBaseOfTRepositoryTItemTService.cs @@ -603,6 +603,75 @@ public abstract class ContentTypeServiceBase : ContentTypeSe } } + public async Task> CreateAsync(TItem item, Guid performingUserKey) => await InternalSaveAsync(item, performingUserKey); + + public async Task> UpdateAsync(TItem item, Guid performingUserKey) => await InternalSaveAsync(item, performingUserKey); + + private async Task> InternalSaveAsync(TItem item, Guid performingUserKey) + { + using ICoreScope scope = ScopeProvider.CreateCoreScope(); + EventMessages eventMessages = EventMessagesFactory.Get(); + + Attempt validationAttempt = ValidateCommon(item); + if (validationAttempt.Success is false) + { + return Attempt.Fail(validationAttempt.Result); + } + + SavingNotification savingNotification = GetSavingNotification(item, eventMessages); + if (await scope.Notifications.PublishCancelableAsync(savingNotification)) + { + scope.Complete(); + return Attempt.Fail(ContentTypeOperationStatus.CancelledByNotification); + } + + scope.WriteLock(WriteLockIds); + + // validate the DAG transform, within the lock + ValidateLocked(item); // throws if invalid + + int userId = await _userIdKeyResolver.GetAsync(performingUserKey); + item.CreatorId = userId; + if (item.Description == string.Empty) + { + item.Description = null; + } + + Repository.Save(item); // also updates content/media/member items + + // figure out impacted content types + ContentTypeChange[] changes = ComposeContentTypeChanges(item).ToArray(); + + // Publish this in scope, see comment at GetContentTypeRefreshedNotification for more info. + await _eventAggregator.PublishAsync(GetContentTypeRefreshedNotification(changes, eventMessages)); + + scope.Notifications.Publish(GetContentTypeChangedNotification(changes, eventMessages)); + + SavedNotification savedNotification = GetSavedNotification(item, eventMessages); + savedNotification.WithStateFrom(savingNotification); + scope.Notifications.Publish(savedNotification); + + Audit(AuditType.Save, userId, item.Id); + scope.Complete(); + + return Attempt.Succeed(ContentTypeOperationStatus.Success); + } + + private Attempt ValidateCommon(TItem item) + { + if (string.IsNullOrWhiteSpace(item.Name)) + { + return Attempt.Fail(ContentTypeOperationStatus.NameCannotBeEmpty); + } + + if (item.Name.Length > 255) + { + return Attempt.Fail(ContentTypeOperationStatus.NameTooLong); + } + + return Attempt.Succeed(ContentTypeOperationStatus.Success); + } + #endregion #region Delete diff --git a/src/Umbraco.Core/Services/IContentTypeServiceBase.cs b/src/Umbraco.Core/Services/IContentTypeServiceBase.cs index f3707a5059..bee084fbf9 100644 --- a/src/Umbraco.Core/Services/IContentTypeServiceBase.cs +++ b/src/Umbraco.Core/Services/IContentTypeServiceBase.cs @@ -67,16 +67,31 @@ public interface IContentTypeBaseService : IContentTypeBaseService, IServ bool HasChildren(Guid id); + [Obsolete("Please use the respective Create or Update instead")] void Save(TItem? item, int userId = Constants.Security.SuperUserId); + [Obsolete("Please use the respective Create or Update instead")] Task SaveAsync(TItem item, Guid performingUserKey) { Save(item); return Task.CompletedTask; } + [Obsolete("Please use the respective Create or Update instead")] void Save(IEnumerable items, int userId = Constants.Security.SuperUserId); + Task> CreateAsync(TItem item, Guid performingUserKey) + { + Save(item); + return Task.FromResult(Attempt.Succeed(ContentTypeOperationStatus.Success)); + } + + Task> UpdateAsync(TItem item, Guid performingUserKey) + { + Save(item); + return Task.FromResult(Attempt.Succeed(ContentTypeOperationStatus.Success)); + } + void Delete(TItem item, int userId = Constants.Security.SuperUserId); /// diff --git a/src/Umbraco.Core/Services/OperationStatus/ContentTypeOperationStatus.cs b/src/Umbraco.Core/Services/OperationStatus/ContentTypeOperationStatus.cs index 21eeedb1d5..8b52d921ee 100644 --- a/src/Umbraco.Core/Services/OperationStatus/ContentTypeOperationStatus.cs +++ b/src/Umbraco.Core/Services/OperationStatus/ContentTypeOperationStatus.cs @@ -5,6 +5,8 @@ public enum ContentTypeOperationStatus Success, DuplicateAlias, InvalidAlias, + NameCannotBeEmpty, + NameTooLong, InvalidPropertyTypeAlias, PropertyTypeAliasCannotEqualContentTypeAlias, DuplicatePropertyTypeAlias, @@ -17,5 +19,6 @@ public enum ContentTypeOperationStatus MissingContainer, DuplicateContainer, NotFound, - NotAllowed + NotAllowed, + CancelledByNotification, } From 13b77d35df31b027cf279a9ee29ca2f1e856d0f5 Mon Sep 17 00:00:00 2001 From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com> Date: Tue, 2 Jul 2024 09:40:53 +0200 Subject: [PATCH 14/20] V14: Build and publish Typedoc docs (#16724) * rename display names of 'ui docs' to 'storybook' * add new jobs to build and publish the ui-api docs (typedoc) to the blob storage --- build/azure-pipelines.yml | 45 +++++++++++++++++++++++++++++++++++---- 1 file changed, 41 insertions(+), 4 deletions(-) diff --git a/build/azure-pipelines.yml b/build/azure-pipelines.yml index e794cb844a..977ce443d0 100644 --- a/build/azure-pipelines.yml +++ b/build/azure-pipelines.yml @@ -217,16 +217,30 @@ stages: displayName: Replace BASE_PATH on assets workingDirectory: $(Build.SourcesDirectory)/src/Umbraco.Web.UI.Client/storybook-static - task: ArchiveFiles@2 - displayName: Archive js Docs + displayName: Archive Storybook inputs: rootFolderOrFile: $(Build.SourcesDirectory)/src/Umbraco.Web.UI.Client/storybook-static includeRootFolder: false archiveFile: $(Build.ArtifactStagingDirectory)/ui-docs.zip - task: PublishPipelineArtifact@1 - displayName: Publish js Docs + displayName: Publish Storybook inputs: targetPath: $(Build.ArtifactStagingDirectory)/ui-docs.zip artifact: ui-docs + - script: npm run generate:ui-api-docs + displayName: Generate API Docs + workingDirectory: $(Build.SourcesDirectory)/src/Umbraco.Web.UI.Client + - task: ArchiveFiles@2 + displayName: Archive UI API Docs + inputs: + rootFolderOrFile: $(Build.SourcesDirectory)/src/Umbraco.Web.UI.Client/ui-api + includeRootFolder: false + archiveFile: $(Build.ArtifactStagingDirectory)/ui-api-docs.zip + - task: PublishPipelineArtifact@1 + displayName: Publish UI API Docs + inputs: + targetPath: $(Build.ArtifactStagingDirectory)/ui-api-docs.zip + artifact: ui-api-docs ############################################### ## Test @@ -846,7 +860,7 @@ stages: BlobPrefix: v$(umbracoMajorVersion)/csharp CleanTargetBeforeCopy: true - job: - displayName: Upload js Docs + displayName: Upload Storybook steps: - checkout: none - task: DownloadPipelineArtifact@2 @@ -859,7 +873,7 @@ stages: archiveFilePatterns: $(Build.SourcesDirectory)/ui-docs.zip destinationFolder: $(Build.ArtifactStagingDirectory)/ui-docs - task: AzureFileCopy@4 - displayName: 'Copy UI Docs to blob storage' + displayName: 'Copy Storybook to blob storage' inputs: SourcePath: '$(Build.ArtifactStagingDirectory)/ui-docs/*' azureSubscription: umbraco-storage @@ -868,3 +882,26 @@ stages: ContainerName: '$web' BlobPrefix: v$(umbracoMajorVersion)/ui CleanTargetBeforeCopy: true + - job: + displayName: Upload UI API Docs + steps: + - checkout: none + - task: DownloadPipelineArtifact@2 + displayName: Download artifact + inputs: + artifact: ui-api-docs + path: $(Build.SourcesDirectory) + - task: ExtractFiles@1 + inputs: + archiveFilePatterns: $(Build.SourcesDirectory)/ui-api-docs.zip + destinationFolder: $(Build.ArtifactStagingDirectory)/ui-api-docs + - task: AzureFileCopy@4 + displayName: 'Copy UI API Docs to blob storage' + inputs: + SourcePath: '$(Build.ArtifactStagingDirectory)/ui-api-docs/*' + azureSubscription: umbraco-storage + Destination: AzureBlob + storage: umbracoapidocs + ContainerName: '$web' + BlobPrefix: v$(umbracoMajorVersion)/ui-api + CleanTargetBeforeCopy: true From 46acd51759c4d02493b6bbb5a68e77c1324742c3 Mon Sep 17 00:00:00 2001 From: Sven Geusens Date: Tue, 2 Jul 2024 14:22:19 +0200 Subject: [PATCH 15/20] [V14] Make the backend work with the new localLinks format (#16661) * Support new localLink format in core link parsing * Updated devliery api to work with the new locallinks format Added tests for old and new format handling. * Fix error regarding type attribute not always being present (for example old format or non local links) --- .../Templates/HtmlLocalLinkParser.cs | 33 +++ .../DeliveryApi/ApiRichTextElementParser.cs | 6 + .../DeliveryApi/ApiRichTextMarkupParser.cs | 3 +- .../DeliveryApi/ApiRichTextParserBase.cs | 83 +++++++- .../Templates/HtmlLocalLinkParserTests.cs | 80 ++++++- .../ApiRichTextMarkupParserTests.cs | 200 ++++++++++++++++++ 6 files changed, 392 insertions(+), 13 deletions(-) create mode 100644 tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/DeliveryApi/ApiRichTextMarkupParserTests.cs diff --git a/src/Umbraco.Core/Templates/HtmlLocalLinkParser.cs b/src/Umbraco.Core/Templates/HtmlLocalLinkParser.cs index 059f5f9cef..74105da511 100644 --- a/src/Umbraco.Core/Templates/HtmlLocalLinkParser.cs +++ b/src/Umbraco.Core/Templates/HtmlLocalLinkParser.cs @@ -10,6 +10,13 @@ namespace Umbraco.Cms.Core.Templates; /// public sealed class HtmlLocalLinkParser { + // needs to support media and document links, order of attributes should not matter nor should other attributes mess with things + // media + // other page + internal static readonly Regex LocalLinkTagPattern = new( + @"document|media)['""].*?(?href=[""']/{localLink:(?[a-fA-F0-9-]+)})[""'])|((?href=[""']/{localLink:(?[a-fA-F0-9-]+)})[""'].*?type=(['""])(?document|media)(?:['""])))|(?:(?:type=['""](?document|media)['""])|(?:(?href=[""']/{localLink:[a-fA-F0-9-]+})[""'])))[^>]*>", + RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace); + internal static readonly Regex LocalLinkPattern = new( @"href=""[/]?(?:\{|\%7B)localLink:([a-zA-Z0-9-://]+)(?:\}|\%7D)", RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace); @@ -105,6 +112,32 @@ public sealed class HtmlLocalLinkParser } private IEnumerable<(int? intId, GuidUdi? udi, string tagValue)> FindLocalLinkIds(string text) + { + MatchCollection localLinkTagMatches = LocalLinkTagPattern.Matches(text); + foreach (Match linkTag in localLinkTagMatches) + { + if (linkTag.Groups.Count < 1) + { + continue; + } + + if (Guid.TryParse(linkTag.Groups["guid"].Value, out Guid guid) is false) + { + continue; + } + + yield return (null, new GuidUdi(linkTag.Groups["type"].Value, guid), linkTag.Groups["locallink"].Value); + } + + // also return legacy results for values that have not been migrated + foreach ((int? intId, GuidUdi? udi, string tagValue) legacyResult in FindLegacyLocalLinkIds(text)) + { + yield return legacyResult; + } + } + + // todo remove at some point? + private IEnumerable<(int? intId, GuidUdi? udi, string tagValue)> FindLegacyLocalLinkIds(string text) { // Parse internal links MatchCollection tags = LocalLinkPattern.Matches(text); diff --git a/src/Umbraco.Infrastructure/DeliveryApi/ApiRichTextElementParser.cs b/src/Umbraco.Infrastructure/DeliveryApi/ApiRichTextElementParser.cs index eed3b848eb..61b6418ae7 100644 --- a/src/Umbraco.Infrastructure/DeliveryApi/ApiRichTextElementParser.cs +++ b/src/Umbraco.Infrastructure/DeliveryApi/ApiRichTextElementParser.cs @@ -132,9 +132,15 @@ internal sealed class ApiRichTextElementParser : ApiRichTextParserBase, IApiRich return; } + if (attributes.ContainsKey("type") is false || attributes["type"] is not string type) + { + type = "unknown"; + } + ReplaceLocalLinks( publishedSnapshot, href, + type, route => { attributes["route"] = route; diff --git a/src/Umbraco.Infrastructure/DeliveryApi/ApiRichTextMarkupParser.cs b/src/Umbraco.Infrastructure/DeliveryApi/ApiRichTextMarkupParser.cs index 42c8829868..338966dc39 100644 --- a/src/Umbraco.Infrastructure/DeliveryApi/ApiRichTextMarkupParser.cs +++ b/src/Umbraco.Infrastructure/DeliveryApi/ApiRichTextMarkupParser.cs @@ -52,8 +52,9 @@ internal sealed class ApiRichTextMarkupParser : ApiRichTextParserBase, IApiRichT foreach (HtmlNode link in links) { ReplaceLocalLinks( - publishedSnapshot, + publishedSnapshot, link.GetAttributeValue("href", string.Empty), + link.GetAttributeValue("type", "unknown"), route => { link.SetAttributeValue("href", route.Path); diff --git a/src/Umbraco.Infrastructure/DeliveryApi/ApiRichTextParserBase.cs b/src/Umbraco.Infrastructure/DeliveryApi/ApiRichTextParserBase.cs index 7723fc835c..407bc1a022 100644 --- a/src/Umbraco.Infrastructure/DeliveryApi/ApiRichTextParserBase.cs +++ b/src/Umbraco.Infrastructure/DeliveryApi/ApiRichTextParserBase.cs @@ -4,6 +4,7 @@ using Umbraco.Cms.Core.DeliveryApi; using Umbraco.Cms.Core.Models.DeliveryApi; using Umbraco.Cms.Core.Models.PublishedContent; using Umbraco.Cms.Core.PublishedCache; +using Umbraco.Cms.Core.Templates; namespace Umbraco.Cms.Infrastructure.DeliveryApi; @@ -18,20 +19,35 @@ internal abstract partial class ApiRichTextParserBase _apiMediaUrlProvider = apiMediaUrlProvider; } - protected void ReplaceLocalLinks(IPublishedSnapshot publishedSnapshot, string href, Action handleContentRoute, Action handleMediaUrl, Action handleInvalidLink) + protected void ReplaceLocalLinks(IPublishedSnapshot publishedSnapshot, string href, string type, Action handleContentRoute, Action handleMediaUrl, Action handleInvalidLink) + { + ReplaceStatus replaceAttempt = ReplaceLocalLink(publishedSnapshot, href, type, handleContentRoute, handleMediaUrl); + if (replaceAttempt == ReplaceStatus.Success) + { + return; + } + + if (replaceAttempt == ReplaceStatus.InvalidEntityType || ReplaceLegacyLocalLink(publishedSnapshot, href, handleContentRoute, handleMediaUrl) == ReplaceStatus.InvalidEntityType) + { + handleInvalidLink(); + } + } + + private ReplaceStatus ReplaceLocalLink(IPublishedSnapshot publishedSnapshot, string href, string type, Action handleContentRoute, Action handleMediaUrl) { Match match = LocalLinkRegex().Match(href); if (match.Success is false) { - return; + return ReplaceStatus.NoMatch; } - if (UdiParser.TryParse(match.Groups["udi"].Value, out Udi? udi) is false) + if (Guid.TryParse(match.Groups["guid"].Value, out Guid guid) is false) { - return; + return ReplaceStatus.NoMatch; } - bool handled = false; + var udi = new GuidUdi(type, guid); + switch (udi.EntityType) { case Constants.UdiEntityType.Document: @@ -41,8 +57,8 @@ internal abstract partial class ApiRichTextParserBase : null; if (route != null) { - handled = true; handleContentRoute(route); + return ReplaceStatus.Success; } break; @@ -50,17 +66,56 @@ internal abstract partial class ApiRichTextParserBase IPublishedContent? media = publishedSnapshot.Media?.GetById(udi); if (media != null) { - handled = true; handleMediaUrl(_apiMediaUrlProvider.GetUrl(media)); + return ReplaceStatus.Success; } break; } - if(handled is false) + return ReplaceStatus.InvalidEntityType; + } + + private ReplaceStatus ReplaceLegacyLocalLink(IPublishedSnapshot publishedSnapshot, string href, Action handleContentRoute, Action handleMediaUrl) + { + Match match = LegacyLocalLinkRegex().Match(href); + if (match.Success is false) { - handleInvalidLink(); + return ReplaceStatus.NoMatch; } + + if (UdiParser.TryParse(match.Groups["udi"].Value, out Udi? udi) is false) + { + return ReplaceStatus.NoMatch; + } + + + switch (udi.EntityType) + { + case Constants.UdiEntityType.Document: + IPublishedContent? content = publishedSnapshot.Content?.GetById(udi); + IApiContentRoute? route = content != null + ? _apiContentRouteBuilder.Build(content) + : null; + if (route != null) + { + handleContentRoute(route); + return ReplaceStatus.Success; + } + + break; + case Constants.UdiEntityType.Media: + IPublishedContent? media = publishedSnapshot.Media?.GetById(udi); + if (media != null) + { + handleMediaUrl(_apiMediaUrlProvider.GetUrl(media)); + return ReplaceStatus.Success; + } + + break; + } + + return ReplaceStatus.InvalidEntityType; } protected void ReplaceLocalImages(IPublishedSnapshot publishedSnapshot, string udi, Action handleMediaUrl) @@ -80,5 +135,15 @@ internal abstract partial class ApiRichTextParserBase } [GeneratedRegex("{localLink:(?umb:.+)}")] + private static partial Regex LegacyLocalLinkRegex(); + + [GeneratedRegex("{localLink:(?.+)}")] private static partial Regex LocalLinkRegex(); + + private enum ReplaceStatus + { + NoMatch, + Success, + InvalidEntityType + } } diff --git a/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Templates/HtmlLocalLinkParserTests.cs b/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Templates/HtmlLocalLinkParserTests.cs index c9d3f3ab9b..93b0d5bba3 100644 --- a/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Templates/HtmlLocalLinkParserTests.cs +++ b/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Templates/HtmlLocalLinkParserTests.cs @@ -13,6 +13,7 @@ using Umbraco.Cms.Core.Routing; using Umbraco.Cms.Core.Templates; using Umbraco.Cms.Tests.Common; using Umbraco.Cms.Tests.UnitTests.TestHelpers.Objects; +using Umbraco.Extensions; namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.Templates; @@ -21,6 +22,32 @@ public class HtmlLocalLinkParserTests { [Test] public void Returns_Udis_From_LocalLinks() + { + var input = @"

+

+ + other page +
+

+media +

"; + + var umbracoContextAccessor = new TestUmbracoContextAccessor(); + var parser = new HtmlLocalLinkParser(umbracoContextAccessor, Mock.Of()); + + var result = parser.FindUdisFromLocalLinks(input).ToList(); + + Assert.Multiple(() => + { + Assert.AreEqual(2, result.Count); + Assert.Contains(UdiParser.Parse("umb://document/eed5fc6b-96fd-45a5-a0f1-b1adfb483c2f"), result); + Assert.Contains(UdiParser.Parse("umb://media/7e21a725-b905-4c5f-86dc-8c41ec116e39"), result); + }); + } + + // todo remove at some point and the implementation. + [Test] + public void Returns_Udis_From_Legacy_LocalLinks() { var input = @"

@@ -36,12 +63,59 @@ public class HtmlLocalLinkParserTests var result = parser.FindUdisFromLocalLinks(input).ToList(); - Assert.AreEqual(2, result.Count); - Assert.AreEqual(UdiParser.Parse("umb://document/C093961595094900AAF9170DDE6AD442"), result[0]); - Assert.AreEqual(UdiParser.Parse("umb://document-type/2D692FCB070B4CDA92FB6883FDBFD6E2"), result[1]); + Assert.Multiple(() => + { + Assert.AreEqual(2, result.Count); + Assert.Contains(UdiParser.Parse("umb://document/C093961595094900AAF9170DDE6AD442"), result); + Assert.Contains(UdiParser.Parse("umb://document-type/2D692FCB070B4CDA92FB6883FDBFD6E2"), result); + }); + } + + // todo remove at some point and the implementation. + [Test] + public void Returns_Udis_From_Legacy_And_Current_LocalLinks() + { + var input = @"

+

+ + hello +
+

+hello +

+

+

+ + other page +
+

+media +

"; + + var umbracoContextAccessor = new TestUmbracoContextAccessor(); + var parser = new HtmlLocalLinkParser(umbracoContextAccessor, Mock.Of()); + + var result = parser.FindUdisFromLocalLinks(input).ToList(); + + Assert.Multiple(() => + { + Assert.AreEqual(4, result.Count); + Assert.Contains(UdiParser.Parse("umb://document/eed5fc6b-96fd-45a5-a0f1-b1adfb483c2f"), result); + Assert.Contains(UdiParser.Parse("umb://media/7e21a725-b905-4c5f-86dc-8c41ec116e39"), result); + Assert.Contains(UdiParser.Parse("umb://document/C093961595094900AAF9170DDE6AD442"), result); + Assert.Contains(UdiParser.Parse("umb://document-type/2D692FCB070B4CDA92FB6883FDBFD6E2"), result); + }); } [TestCase("", "")] + // current + [TestCase( + "world", + "world")] + [TestCase( + "world", + "world")] + // legacy [TestCase( "hello href=\"{localLink:1234}\" world ", "hello href=\"/my-test-url\" world ")] diff --git a/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/DeliveryApi/ApiRichTextMarkupParserTests.cs b/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/DeliveryApi/ApiRichTextMarkupParserTests.cs new file mode 100644 index 0000000000..43ec2136f7 --- /dev/null +++ b/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/DeliveryApi/ApiRichTextMarkupParserTests.cs @@ -0,0 +1,200 @@ +using Microsoft.Extensions.Logging; +using Moq; +using NUnit.Framework; +using Umbraco.Cms.Core; +using Umbraco.Cms.Core.DeliveryApi; +using Umbraco.Cms.Core.Models.DeliveryApi; +using Umbraco.Cms.Core.Models.PublishedContent; +using Umbraco.Cms.Core.PublishedCache; +using Umbraco.Cms.Infrastructure.DeliveryApi; + +namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Infrastructure.DeliveryApi; + +[TestFixture] +public class ApiRichTextMarkupParserTests +{ + private Mock _apiContentRouteBuilder; + private Mock _apiMediaUrlProvider; + private Mock _publishedSnapshotAccessor; + + [Test] + public void Can_Parse_Legacy_LocalLinks() + { + var key1 = Guid.Parse("a1c5d649977f4ea59b1cb26055f3eed3"); + var data1 = new MockData() + .WithKey(key1) + .WithRoutePath("/inline/") + .WithRouteStartPath("inline"); + + var mockData = new Dictionary + { + { key1, data1 }, + }; + + var parser = BuildDefaultSut(mockData); + + var legacyHtml = + "

link to another page

"; + + var expectedOutput = + "

link to another page

"; + + var parsedHtml = parser.Parse(legacyHtml); + + Assert.AreEqual(expectedOutput, parsedHtml); + } + + [Test] + public void Can_Parse_LocalLinks() + { + var key1 = Guid.Parse("eed5fc6b-96fd-45a5-a0f1-b1adfb483c2f"); + var data1 = new MockData() + .WithKey(key1) + .WithRoutePath("/self/") + .WithRouteStartPath("self"); + + var key2 = Guid.Parse("cc143afe-4cbf-46e5-b399-c9f451384373"); + var data2 = new MockData() + .WithKey(key2) + .WithRoutePath("/other/") + .WithRouteStartPath("other"); + + var mockData = new Dictionary + { + { key1, data1 }, + { key2, data2 }, + }; + + var parser = BuildDefaultSut(mockData); + + var html = + @"

Rich text outside of the blocks with a link to itself

+

and to the other page

"; + + var expectedOutput = + @"

Rich text outside of the blocks with a link to itself

+

and to the other page

"; + + var parsedHtml = parser.Parse(html); + + Assert.AreEqual(expectedOutput, parsedHtml); + } + + [Test] + public void Can_Parse_Legacy_LocalImages() + { + var key1 = Guid.Parse("395bdc0e8f4d4ad4af7f3a3f6265651e"); + var data1 = new MockData() + .WithKey(key1) + .WithMediaUrl("https://localhost:44331/media/bdofwokn/77gtp8fbrxmgkefatp10aw.webp"); + + var mockData = new Dictionary + { + { key1, data1 }, + }; + var parser = BuildDefaultSut(mockData); + + var legacyHtml = + @"

An image

\n

"; + + var expectedOutput = + @"

An image

\n

"; + + var parsedHtml = parser.Parse(legacyHtml); + + Assert.AreEqual(expectedOutput, parsedHtml); + } + + private ApiRichTextMarkupParser BuildDefaultSut(Dictionary mockData) + { + var contentCacheMock = new Mock(); + + contentCacheMock.Setup(cc => cc.GetById(It.IsAny(), It.IsAny())) + .Returns((preview, key) => mockData[key].PublishedContent); + contentCacheMock.Setup(cc => cc.GetById(It.IsAny())) + .Returns(key => mockData[key].PublishedContent); + contentCacheMock.Setup(cc => cc.GetById(It.IsAny(), It.IsAny())) + .Returns((preview, udi) => mockData[((GuidUdi)udi).Guid].PublishedContent); + contentCacheMock.Setup(cc => cc.GetById(It.IsAny())) + .Returns(udi => mockData[((GuidUdi)udi).Guid].PublishedContent); + + var mediaCacheMock = new Mock(); + mediaCacheMock.Setup(cc => cc.GetById(It.IsAny(), It.IsAny())) + .Returns((preview, key) => mockData[key].PublishedContent); + mediaCacheMock.Setup(cc => cc.GetById(It.IsAny())) + .Returns(key => mockData[key].PublishedContent); + mediaCacheMock.Setup(cc => cc.GetById(It.IsAny(), It.IsAny())) + .Returns((preview, udi) => mockData[((GuidUdi)udi).Guid].PublishedContent); + mediaCacheMock.Setup(cc => cc.GetById(It.IsAny())) + .Returns(udi => mockData[((GuidUdi)udi).Guid].PublishedContent); + + var snapshotMock = new Mock(); + snapshotMock.SetupGet(ss => ss.Content) + .Returns(contentCacheMock.Object); + snapshotMock.SetupGet(ss => ss.Media) + .Returns(mediaCacheMock.Object); + + var snapShot = snapshotMock.Object; + + _publishedSnapshotAccessor = new Mock(); + _publishedSnapshotAccessor.Setup(psa => psa.TryGetPublishedSnapshot(out snapShot)) + .Returns(true); + + _apiMediaUrlProvider = new Mock(); + _apiMediaUrlProvider.Setup(mup => mup.GetUrl(It.IsAny())) + .Returns(ipc => mockData[ipc.Key].MediaUrl); + + _apiContentRouteBuilder = new Mock(); + _apiContentRouteBuilder.Setup(acrb => acrb.Build(It.IsAny(), It.IsAny())) + .Returns((content, culture) => mockData[content.Key].ApiContentRoute); + + return new ApiRichTextMarkupParser( + _apiContentRouteBuilder.Object, + _apiMediaUrlProvider.Object, + _publishedSnapshotAccessor.Object, + Mock.Of>()); + } + + private class MockData + { + private Mock _publishedContentMock = new Mock(); + private Mock _apiContentRouteMock = new Mock(); + private Mock _apiContentStartItem = new Mock(); + + public IPublishedContent PublishedContent => _publishedContentMock.Object; + + public IApiContentRoute ApiContentRoute => _apiContentRouteMock.Object; + + public string MediaUrl { get; set; } = string.Empty; + + public MockData() + { + _apiContentRouteMock.SetupGet(r => r.StartItem).Returns(_apiContentStartItem.Object); + } + + public MockData WithKey(Guid key) + { + _publishedContentMock.SetupGet(i => i.Key).Returns(key); + _apiContentStartItem.SetupGet(rsi => rsi.Id).Returns(key); + return this; + } + + public MockData WithRoutePath(string path) + { + _apiContentRouteMock.SetupGet(r => r.Path).Returns(path); + return this; + } + + public MockData WithRouteStartPath(string path) + { + _apiContentStartItem.SetupGet(rsi => rsi.Path).Returns(path); + return this; + } + + public MockData WithMediaUrl(string url) + { + MediaUrl = url; + return this; + } + } +} From 6069610f835f0a6537125f85c6c12daa63f36da1 Mon Sep 17 00:00:00 2001 From: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com> Date: Tue, 2 Jul 2024 17:14:43 +0200 Subject: [PATCH 16/20] v14: Implement backoffice signalR hub (#16723) * Implement backoffice signalR hub * Fix test * Refactor to use object instead of string * Update src/Umbraco.Cms.Api.Management/Routing/BackofficeHub.cs Co-authored-by: Bjarke Berg --------- Co-authored-by: Bjarke Berg --- .../Routing/BackOfficeAreaRoutes.cs | 4 +--- src/Umbraco.Cms.Api.Management/Routing/BackofficeHub.cs | 8 ++++++++ src/Umbraco.Core/Constants-Web.cs | 1 + .../Routing/BackOfficeAreaRoutesTests.cs | 2 +- 4 files changed, 11 insertions(+), 4 deletions(-) create mode 100644 src/Umbraco.Cms.Api.Management/Routing/BackofficeHub.cs diff --git a/src/Umbraco.Cms.Api.Management/Routing/BackOfficeAreaRoutes.cs b/src/Umbraco.Cms.Api.Management/Routing/BackOfficeAreaRoutes.cs index a854be29f0..a12e1acb2e 100644 --- a/src/Umbraco.Cms.Api.Management/Routing/BackOfficeAreaRoutes.cs +++ b/src/Umbraco.Cms.Api.Management/Routing/BackOfficeAreaRoutes.cs @@ -7,8 +7,6 @@ using Umbraco.Cms.Core; using Umbraco.Cms.Core.Configuration.Models; using Umbraco.Cms.Core.Hosting; using Umbraco.Cms.Core.Services; -using Umbraco.Cms.Core.Web.Mvc; -using Umbraco.Cms.Web.Common.Controllers; using Umbraco.Cms.Web.Common.Routing; using Umbraco.Extensions; @@ -54,8 +52,8 @@ public sealed class BackOfficeAreaRoutes : IAreaRoutes case RuntimeLevel.Install: case RuntimeLevel.Upgrade: case RuntimeLevel.Run: - MapMinimalBackOffice(endpoints); + endpoints.MapHub(_umbracoPathSegment + Constants.Web.BackofficeSignalRHub); break; case RuntimeLevel.BootFailed: case RuntimeLevel.Unknown: diff --git a/src/Umbraco.Cms.Api.Management/Routing/BackofficeHub.cs b/src/Umbraco.Cms.Api.Management/Routing/BackofficeHub.cs new file mode 100644 index 0000000000..47a2471a4b --- /dev/null +++ b/src/Umbraco.Cms.Api.Management/Routing/BackofficeHub.cs @@ -0,0 +1,8 @@ +using Microsoft.AspNetCore.SignalR; + +namespace Umbraco.Cms.Api.Management.Routing; + +public class BackofficeHub : Hub +{ + public async Task SendPayload(object payload) => await Clients.All.SendAsync("payloadReceived", payload); +} diff --git a/src/Umbraco.Core/Constants-Web.cs b/src/Umbraco.Core/Constants-Web.cs index 283ec6eaa3..65b460ba69 100644 --- a/src/Umbraco.Core/Constants-Web.cs +++ b/src/Umbraco.Core/Constants-Web.cs @@ -56,6 +56,7 @@ public static partial class Constants /// The "base" path to the Management API /// public const string ManagementApiPath = "/management/api/"; + public const string BackofficeSignalRHub = "/backofficeHub"; public static class Routing { diff --git a/tests/Umbraco.Tests.UnitTests/Umbraco.Web.Common/Routing/BackOfficeAreaRoutesTests.cs b/tests/Umbraco.Tests.UnitTests/Umbraco.Web.Common/Routing/BackOfficeAreaRoutesTests.cs index c444e591ab..e1a0638fc6 100644 --- a/tests/Umbraco.Tests.UnitTests/Umbraco.Web.Common/Routing/BackOfficeAreaRoutesTests.cs +++ b/tests/Umbraco.Tests.UnitTests/Umbraco.Web.Common/Routing/BackOfficeAreaRoutesTests.cs @@ -45,7 +45,7 @@ public class BackOfficeAreaRoutesTests var endpoints = new TestRouteBuilder(); routes.CreateRoutes(endpoints); - Assert.AreEqual(1, endpoints.DataSources.Count); + Assert.AreEqual(2, endpoints.DataSources.Count); var route = endpoints.DataSources.First(); Assert.AreEqual(2, route.Endpoints.Count); From 32fe23ba41e9d8acc9a36c6e90cad718bf723ac9 Mon Sep 17 00:00:00 2001 From: Lee Kelleher Date: Wed, 3 Jul 2024 10:25:44 +0100 Subject: [PATCH 17/20] V14: Expose `Umb-Notifications` HTTP header (#16728) Enables client-side dev env to access the custom header. --- .../BackOfficeCorsPolicyBuilderExtensions.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Umbraco.Cms.Api.Management/DependencyInjection/BackOfficeCorsPolicyBuilderExtensions.cs b/src/Umbraco.Cms.Api.Management/DependencyInjection/BackOfficeCorsPolicyBuilderExtensions.cs index da81e5de7f..0f8a57f5d8 100644 --- a/src/Umbraco.Cms.Api.Management/DependencyInjection/BackOfficeCorsPolicyBuilderExtensions.cs +++ b/src/Umbraco.Cms.Api.Management/DependencyInjection/BackOfficeCorsPolicyBuilderExtensions.cs @@ -34,7 +34,7 @@ internal static class BackOfficeCorsPolicyBuilderExtensions { policy .WithOrigins(customOrigin) - .WithExposedHeaders(Constants.Headers.Location, Constants.Headers.GeneratedResource) + .WithExposedHeaders(Constants.Headers.Location, Constants.Headers.GeneratedResource, Constants.Headers.Notifications) .AllowAnyHeader() .AllowAnyMethod() .AllowCredentials(); From 0a9df3c105434e865512d93e0a77c9f2f6fc32fe Mon Sep 17 00:00:00 2001 From: Lee Kelleher Date: Wed, 3 Jul 2024 11:54:31 +0100 Subject: [PATCH 18/20] V14: OpenAPI: Explicitly set `ByRelationTypeKey` endpoint name (#16729) This is because of an `operationId` name clash with `ByKeyRelationTypeController.ByKey`, ref: https://github.com/umbraco/Umbraco-CMS/blob/release-14.0.0/src/Umbraco.Cms.Api.Management/Controllers/RelationType/ByKeyRelationTypeController.cs#L27 This change attempts to ensure a unique `operationId` in the OpenAPI/Swagger JSON. --- .../ByRelationTypeKeyRelationController.cs | 4 +- src/Umbraco.Cms.Api.Management/OpenApi.json | 772 +++++++++--------- 2 files changed, 388 insertions(+), 388 deletions(-) diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Relation/ByRelationTypeKeyRelationController.cs b/src/Umbraco.Cms.Api.Management/Controllers/Relation/ByRelationTypeKeyRelationController.cs index f0aee0317f..cde52b5884 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/Relation/ByRelationTypeKeyRelationController.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/Relation/ByRelationTypeKeyRelationController.cs @@ -1,4 +1,4 @@ -using Asp.Versioning; +using Asp.Versioning; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Umbraco.Cms.Api.Common.ViewModels.Pagination; @@ -29,7 +29,7 @@ public class ByRelationTypeKeyRelationController : RelationControllerBase /// /// Use case: On a relation type page you can see all created relations of this type. /// - [HttpGet("type/{id:guid}")] + [HttpGet("type/{id:guid}", Name = "GetRelationByRelationTypeId")] [MapToApiVersion("1.0")] [ProducesResponseType(typeof(PagedViewModel), StatusCodes.Status200OK)] [ProducesResponseType(typeof(PagedViewModel), StatusCodes.Status404NotFound)] diff --git a/src/Umbraco.Cms.Api.Management/OpenApi.json b/src/Umbraco.Cms.Api.Management/OpenApi.json index 11dee452ca..2799d1bd61 100644 --- a/src/Umbraco.Cms.Api.Management/OpenApi.json +++ b/src/Umbraco.Cms.Api.Management/OpenApi.json @@ -53,7 +53,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -199,7 +199,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -259,7 +259,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] }, @@ -368,7 +368,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] }, @@ -508,7 +508,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -639,7 +639,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -695,7 +695,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -811,7 +811,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -874,7 +874,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -909,7 +909,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -1055,7 +1055,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -1115,7 +1115,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] }, @@ -1224,7 +1224,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] }, @@ -1364,7 +1364,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -1441,7 +1441,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -1490,7 +1490,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -1549,7 +1549,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -1597,7 +1597,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -1668,7 +1668,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -1731,7 +1731,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -1793,7 +1793,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] }, @@ -1963,7 +1963,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -2023,7 +2023,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] }, @@ -2132,7 +2132,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] }, @@ -2272,7 +2272,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -2341,7 +2341,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -2483,7 +2483,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -2629,7 +2629,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -2678,7 +2678,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -2726,7 +2726,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -2789,7 +2789,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -2844,7 +2844,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -2990,7 +2990,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -3050,7 +3050,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] }, @@ -3159,7 +3159,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] }, @@ -3299,7 +3299,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -3415,7 +3415,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -3561,7 +3561,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -3621,7 +3621,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] }, @@ -3730,7 +3730,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] }, @@ -3870,7 +3870,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -3990,7 +3990,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -4039,7 +4039,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -4087,7 +4087,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -4158,7 +4158,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -4221,7 +4221,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -4367,7 +4367,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -4427,7 +4427,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] }, @@ -4510,7 +4510,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] }, @@ -4650,7 +4650,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -4728,7 +4728,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -4806,7 +4806,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -4883,7 +4883,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -5040,7 +5040,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -5101,7 +5101,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -5243,7 +5243,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -5385,7 +5385,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -5440,7 +5440,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -5533,7 +5533,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -5568,7 +5568,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -5714,7 +5714,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -5774,7 +5774,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] }, @@ -5883,7 +5883,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] }, @@ -6023,7 +6023,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -6169,7 +6169,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -6218,7 +6218,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -6277,7 +6277,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -6325,7 +6325,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -6396,7 +6396,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -6459,7 +6459,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -6558,7 +6558,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -6632,7 +6632,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -6750,7 +6750,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -6868,7 +6868,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -6997,7 +6997,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -7143,7 +7143,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -7203,7 +7203,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] }, @@ -7312,7 +7312,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] }, @@ -7452,7 +7452,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -7531,7 +7531,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -7662,7 +7662,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -7722,7 +7722,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] }, @@ -7888,7 +7888,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -8004,7 +8004,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -8115,7 +8115,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -8178,7 +8178,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] }, @@ -8292,7 +8292,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -8423,7 +8423,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] }, @@ -8506,7 +8506,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] }, @@ -8564,7 +8564,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] }, @@ -8678,7 +8678,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -8820,7 +8820,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -8962,7 +8962,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -9026,7 +9026,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -9090,7 +9090,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -9232,7 +9232,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -9374,7 +9374,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -9441,7 +9441,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -9476,7 +9476,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -9607,7 +9607,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -9659,7 +9659,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -9790,7 +9790,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -9839,7 +9839,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -9898,7 +9898,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -9972,7 +9972,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -10083,7 +10083,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -10157,7 +10157,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -10299,7 +10299,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -10362,7 +10362,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -10417,7 +10417,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -10465,7 +10465,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -10536,7 +10536,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -10599,7 +10599,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -10689,7 +10689,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -10723,7 +10723,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -10778,7 +10778,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -10837,7 +10837,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -10932,7 +10932,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -11048,7 +11048,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -11136,7 +11136,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -11213,7 +11213,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -11283,7 +11283,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -11335,7 +11335,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -11391,7 +11391,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -11512,7 +11512,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -11762,7 +11762,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -11794,7 +11794,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -11846,7 +11846,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] }, @@ -11990,7 +11990,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -12046,7 +12046,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] }, @@ -12154,7 +12154,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] }, @@ -12293,7 +12293,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -12348,7 +12348,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -12415,7 +12415,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -12510,7 +12510,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -12595,7 +12595,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -12650,7 +12650,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] }, @@ -12768,7 +12768,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -12827,7 +12827,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] }, @@ -12909,7 +12909,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -12965,7 +12965,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -13003,7 +13003,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -13041,7 +13041,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -13117,7 +13117,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -13176,7 +13176,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -13228,7 +13228,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -13287,7 +13287,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -13433,7 +13433,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -13493,7 +13493,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] }, @@ -13576,7 +13576,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] }, @@ -13716,7 +13716,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -13794,7 +13794,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -13871,7 +13871,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -14028,7 +14028,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -14089,7 +14089,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -14231,7 +14231,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -14373,7 +14373,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -14428,7 +14428,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -14521,7 +14521,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -14667,7 +14667,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -14727,7 +14727,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] }, @@ -14836,7 +14836,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] }, @@ -14976,7 +14976,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -15122,7 +15122,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -15170,7 +15170,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -15241,7 +15241,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -15304,7 +15304,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -15425,7 +15425,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -15474,7 +15474,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -15533,7 +15533,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -15679,7 +15679,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -15739,7 +15739,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] }, @@ -15848,7 +15848,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] }, @@ -15988,7 +15988,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -16067,7 +16067,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -16183,7 +16183,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -16294,7 +16294,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -16358,7 +16358,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -16422,7 +16422,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -16564,7 +16564,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -16631,7 +16631,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -16666,7 +16666,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -16797,7 +16797,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -16849,7 +16849,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -16980,7 +16980,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -17054,7 +17054,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -17165,7 +17165,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -17239,7 +17239,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -17381,7 +17381,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -17444,7 +17444,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -17499,7 +17499,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -17547,7 +17547,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -17618,7 +17618,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -17681,7 +17681,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -17730,7 +17730,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -17785,7 +17785,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] }, @@ -17903,7 +17903,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -17952,7 +17952,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] }, @@ -18061,7 +18061,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] }, @@ -18201,7 +18201,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -18256,7 +18256,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -18305,7 +18305,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -18364,7 +18364,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -18510,7 +18510,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -18570,7 +18570,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] }, @@ -18653,7 +18653,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] }, @@ -18793,7 +18793,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -18870,7 +18870,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -18996,7 +18996,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -19089,7 +19089,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -19144,7 +19144,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -19264,7 +19264,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -19313,7 +19313,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -19372,7 +19372,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -19518,7 +19518,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -19578,7 +19578,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] }, @@ -19687,7 +19687,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] }, @@ -19827,7 +19827,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -19969,7 +19969,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -20004,7 +20004,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -20135,7 +20135,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -20209,7 +20209,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -20244,7 +20244,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -20279,7 +20279,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -20331,7 +20331,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -20392,7 +20392,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -20502,7 +20502,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -20537,7 +20537,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -20592,7 +20592,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] }, @@ -20736,7 +20736,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -20796,7 +20796,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] }, @@ -20879,7 +20879,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] }, @@ -20993,7 +20993,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -21054,7 +21054,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -21109,7 +21109,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -21157,7 +21157,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -21303,7 +21303,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -21362,7 +21362,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] }, @@ -21470,7 +21470,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] }, @@ -21609,7 +21609,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -21765,7 +21765,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -21911,7 +21911,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -21970,7 +21970,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] }, @@ -22078,7 +22078,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -22133,7 +22133,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -22192,7 +22192,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -22239,7 +22239,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -22301,7 +22301,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -22356,7 +22356,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -22412,7 +22412,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -22447,7 +22447,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] }, @@ -22524,7 +22524,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -22586,7 +22586,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -22619,7 +22619,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -22652,7 +22652,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -22685,7 +22685,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -22713,7 +22713,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -22789,7 +22789,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -22853,7 +22853,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] }, @@ -22910,7 +22910,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -22945,7 +22945,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] }, @@ -23000,7 +23000,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -23049,7 +23049,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -23104,7 +23104,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -23164,7 +23164,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -23174,7 +23174,7 @@ "tags": [ "Relation" ], - "operationId": "GetRelationTypeById", + "operationId": "GetRelationByRelationTypeId", "parameters": [ { "name": "id", @@ -23242,7 +23242,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -23290,7 +23290,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -23436,7 +23436,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -23495,7 +23495,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] }, @@ -23603,7 +23603,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] }, @@ -23742,7 +23742,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -23898,7 +23898,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -24044,7 +24044,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -24103,7 +24103,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] }, @@ -24211,7 +24211,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -24258,7 +24258,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -24320,7 +24320,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -24375,7 +24375,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -24427,7 +24427,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -24508,7 +24508,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -24543,7 +24543,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -24648,7 +24648,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -24779,7 +24779,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -24967,7 +24967,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -24999,7 +24999,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -25031,7 +25031,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -25101,7 +25101,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -25149,7 +25149,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -25193,7 +25193,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -25252,7 +25252,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -25304,7 +25304,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -25352,7 +25352,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -25498,7 +25498,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -25557,7 +25557,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] }, @@ -25665,7 +25665,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] }, @@ -25804,7 +25804,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -25960,7 +25960,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -26106,7 +26106,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -26165,7 +26165,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] }, @@ -26273,7 +26273,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -26320,7 +26320,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -26382,7 +26382,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -26437,7 +26437,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -26510,7 +26510,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -26565,7 +26565,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -26600,7 +26600,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] }, @@ -26703,7 +26703,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -26752,7 +26752,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -26811,7 +26811,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -26957,7 +26957,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -27017,7 +27017,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] }, @@ -27126,7 +27126,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] }, @@ -27266,7 +27266,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -27301,7 +27301,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -27391,7 +27391,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -27426,7 +27426,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -27474,7 +27474,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -27537,7 +27537,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -27592,7 +27592,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -27697,7 +27697,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -27768,7 +27768,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] }, @@ -27862,7 +27862,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -27894,7 +27894,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -27994,7 +27994,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -28043,7 +28043,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -28166,7 +28166,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] }, @@ -28236,7 +28236,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] }, @@ -28342,7 +28342,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -28388,7 +28388,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -28479,7 +28479,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -28528,7 +28528,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -28633,7 +28633,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] }, @@ -28751,7 +28751,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] }, @@ -28804,7 +28804,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -28864,7 +28864,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] }, @@ -28947,7 +28947,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] }, @@ -29061,7 +29061,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -29186,7 +29186,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] }, @@ -29309,7 +29309,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -29437,7 +29437,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -29486,7 +29486,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -29632,7 +29632,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] }, @@ -29735,7 +29735,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] }, @@ -29802,7 +29802,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -29862,7 +29862,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] }, @@ -29971,7 +29971,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] }, @@ -30111,7 +30111,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -30174,7 +30174,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -30293,7 +30293,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -30353,7 +30353,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -30495,7 +30495,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -30617,7 +30617,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -30728,7 +30728,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] }, @@ -30868,7 +30868,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -30903,7 +30903,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -30935,7 +30935,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -30970,7 +30970,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -31072,7 +31072,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] }, @@ -31207,7 +31207,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] }, @@ -31275,7 +31275,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -31365,7 +31365,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -31455,7 +31455,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -31490,7 +31490,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -31525,7 +31525,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -31585,7 +31585,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -31648,7 +31648,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -31708,7 +31708,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -31839,7 +31839,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -31970,7 +31970,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -32116,7 +32116,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -32370,7 +32370,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -32583,7 +32583,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -32688,7 +32688,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -32737,7 +32737,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -32789,7 +32789,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] }, @@ -32933,7 +32933,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -32990,7 +32990,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] }, @@ -33099,7 +33099,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] }, @@ -33239,7 +33239,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -33291,7 +33291,7 @@ }, "security": [ { - "Backoffice User": [ ] + "Backoffice User": [] } ] } @@ -37540,7 +37540,7 @@ }, "actionParameters": { "type": "object", - "additionalProperties": { }, + "additionalProperties": {}, "nullable": true } }, @@ -37827,7 +37827,7 @@ }, "providerProperties": { "type": "object", - "additionalProperties": { }, + "additionalProperties": {}, "nullable": true } }, @@ -38162,7 +38162,7 @@ }, "extensions": { "type": "array", - "items": { } + "items": {} } }, "additionalProperties": false @@ -41591,7 +41591,7 @@ "nullable": true } }, - "additionalProperties": { } + "additionalProperties": {} }, "ProblemDetailsBuilderModel": { "type": "object", @@ -45151,7 +45151,7 @@ "authorizationCode": { "authorizationUrl": "/umbraco/management/api/v1/security/back-office/authorize", "tokenUrl": "/umbraco/management/api/v1/security/back-office/token", - "scopes": { } + "scopes": {} } } } From 4643b7dba37f187f1b3594eac4a41298db25ebe4 Mon Sep 17 00:00:00 2001 From: Ronald Barendse Date: Thu, 4 Jul 2024 07:36:09 +0200 Subject: [PATCH 19/20] Support parsing object to DateTimeOffset and preserve timezone offset (#16732) --- .../Serialization/JsonObjectConverter.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Umbraco.Infrastructure/Serialization/JsonObjectConverter.cs b/src/Umbraco.Infrastructure/Serialization/JsonObjectConverter.cs index e1c0f5950d..d8c9778461 100644 --- a/src/Umbraco.Infrastructure/Serialization/JsonObjectConverter.cs +++ b/src/Umbraco.Infrastructure/Serialization/JsonObjectConverter.cs @@ -101,8 +101,9 @@ public sealed class JsonObjectConverter : JsonConverter JsonTokenType.Number when reader.TryGetInt32(out int i) => i, JsonTokenType.Number when reader.TryGetInt64(out long l) => l, JsonTokenType.Number => reader.GetDouble(), + JsonTokenType.String when reader.TryGetDateTimeOffset(out DateTimeOffset datetime) => datetime, JsonTokenType.String when reader.TryGetDateTime(out DateTime datetime) => datetime, - JsonTokenType.String => reader.GetString()!, + JsonTokenType.String => reader.GetString(), _ => JsonDocument.ParseValue(ref reader).RootElement.Clone() }; } From ffa85ee3b548ea93d2ce1cc38700df8b8613dfcf Mon Sep 17 00:00:00 2001 From: Nhu Dinh <150406148+nhudinh0309@users.noreply.github.com> Date: Thu, 4 Jul 2024 16:57:55 +0700 Subject: [PATCH 20/20] V14 Added Content tests with Checkbox list (#16733) * Added Content tests with checkbox list * Bumped version of test helper * Make the Content tests run in the pipeline * Moved goToBackOffice to beforeEach * Removed the unnecessary file * Moved goToBackOffice to beforeEach * Make smoke test run in the pipeline --- .../package-lock.json | 26 +++--- .../Umbraco.Tests.AcceptanceTest/package.json | 4 +- .../Content/ContentWithCheckboxList.spec.ts | 85 +++++++++++++++++++ 3 files changed, 97 insertions(+), 18 deletions(-) create mode 100644 tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ContentWithCheckboxList.spec.ts diff --git a/tests/Umbraco.Tests.AcceptanceTest/package-lock.json b/tests/Umbraco.Tests.AcceptanceTest/package-lock.json index 7916e3cb54..f3fa4a9e36 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/package-lock.json +++ b/tests/Umbraco.Tests.AcceptanceTest/package-lock.json @@ -7,8 +7,8 @@ "name": "acceptancetest", "hasInstallScript": true, "dependencies": { - "@umbraco/json-models-builders": "^2.0.7", - "@umbraco/playwright-testhelpers": "^2.0.0-beta.63", + "@umbraco/json-models-builders": "^2.0.9", + "@umbraco/playwright-testhelpers": "^2.0.0-beta.65", "camelize": "^1.0.0", "dotenv": "^16.3.1", "faker": "^4.1.0", @@ -132,25 +132,19 @@ } }, "node_modules/@umbraco/json-models-builders": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@umbraco/json-models-builders/-/json-models-builders-2.0.7.tgz", - "integrity": "sha512-roR5A+jzIFN9z1BhogMGOEzSzoR8jOrIYIAevT7EnyS3H3OM0m0uREgvjYCQo0+QMfVws4zq4Ydjx2TIfGYvlQ==", + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@umbraco/json-models-builders/-/json-models-builders-2.0.9.tgz", + "integrity": "sha512-p6LjcE38WsFCvLtRRRVOCuMvris3OXeoueFu0FZBOHk2r7PXiqYCBUls/KbKxqpixzVDAb48RBd1hV7sKPcm5A==", "dependencies": { - "camelize": "^1.0.1", - "faker": "^6.6.6" + "camelize": "^1.0.1" } }, - "node_modules/@umbraco/json-models-builders/node_modules/faker": { - "version": "6.6.6", - "resolved": "https://registry.npmjs.org/faker/-/faker-6.6.6.tgz", - "integrity": "sha512-9tCqYEDHI5RYFQigXFwF1hnCwcWCOJl/hmll0lr5D2Ljjb0o4wphb69wikeJDz5qCEzXCoPvG6ss5SDP6IfOdg==" - }, "node_modules/@umbraco/playwright-testhelpers": { - "version": "2.0.0-beta.63", - "resolved": "https://registry.npmjs.org/@umbraco/playwright-testhelpers/-/playwright-testhelpers-2.0.0-beta.63.tgz", - "integrity": "sha512-fLXUcWNJupfGKkD6zOGg6WcU5cmqQ6gQkyIyG+UsKSrkgCxK23+N5LrOz2OVp2NZ8GQ8kB5pJ4izvCp+yMMOnA==", + "version": "2.0.0-beta.65", + "resolved": "https://registry.npmjs.org/@umbraco/playwright-testhelpers/-/playwright-testhelpers-2.0.0-beta.65.tgz", + "integrity": "sha512-plSD/4hhVaMl2TItAaBOUQyuy0Qo5rW3EGIF0TvL3a01s6hNoW1DrOCZhWsOOsMTkgf+oScLEsVIBMk0uDLQrg==", "dependencies": { - "@umbraco/json-models-builders": "2.0.7", + "@umbraco/json-models-builders": "2.0.9", "camelize": "^1.0.0", "faker": "^4.1.0", "form-data": "^4.0.0", diff --git a/tests/Umbraco.Tests.AcceptanceTest/package.json b/tests/Umbraco.Tests.AcceptanceTest/package.json index 8126ebf602..f0f2a60b94 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/package.json +++ b/tests/Umbraco.Tests.AcceptanceTest/package.json @@ -21,8 +21,8 @@ "wait-on": "^7.2.0" }, "dependencies": { - "@umbraco/json-models-builders": "^2.0.7", - "@umbraco/playwright-testhelpers": "^2.0.0-beta.63", + "@umbraco/json-models-builders": "^2.0.9", + "@umbraco/playwright-testhelpers": "^2.0.0-beta.65", "camelize": "^1.0.0", "dotenv": "^16.3.1", "faker": "^4.1.0", diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ContentWithCheckboxList.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ContentWithCheckboxList.spec.ts new file mode 100644 index 0000000000..71706203ea --- /dev/null +++ b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/ContentWithCheckboxList.spec.ts @@ -0,0 +1,85 @@ +import { ConstantHelper, test, AliasHelper } from '@umbraco/playwright-testhelpers'; +import {expect} from "@playwright/test"; + +const contentName = 'TestContent'; +const documentTypeName = 'TestDocumentTypeForContent'; +const dataTypeName = 'Checkbox list'; + +test.beforeEach(async ({umbracoApi, umbracoUi}) => { + await umbracoApi.documentType.ensureNameNotExists(documentTypeName); + await umbracoApi.document.ensureNameNotExists(contentName); + await umbracoUi.goToBackOffice(); +}); + +test.afterEach(async ({umbracoApi}) => { + await umbracoApi.document.ensureNameNotExists(contentName); + await umbracoApi.documentType.ensureNameNotExists(documentTypeName); +}); + +test('can create content with the checkbox list data type', async ({umbracoApi, umbracoUi}) => { + // Arrange + const dataTypeData = await umbracoApi.dataType.getByName(dataTypeName); + await umbracoApi.documentType.createDocumentTypeWithPropertyEditor(documentTypeName, dataTypeName, dataTypeData.id); + await umbracoUi.content.goToSection(ConstantHelper.sections.content); + + // Act + await umbracoUi.content.clickActionsMenuAtRoot(); + await umbracoUi.content.clickCreateButton(); + await umbracoUi.content.chooseDocumentType(documentTypeName); + await umbracoUi.content.enterContentName(contentName); + await umbracoUi.content.clickSaveButton(); + + // Assert + await umbracoUi.content.isSuccessNotificationVisible(); + expect(await umbracoApi.document.doesNameExist(contentName)).toBeTruthy(); + const contentData = await umbracoApi.document.getByName(contentName); + expect(contentData.values).toEqual([]); +}); + +test('can publish content with the checkbox list data type', async ({umbracoApi, umbracoUi}) => { + // Arrange + const dataTypeData = await umbracoApi.dataType.getByName(dataTypeName); + await umbracoApi.documentType.createDocumentTypeWithPropertyEditor(documentTypeName, dataTypeName, dataTypeData.id); + await umbracoUi.content.goToSection(ConstantHelper.sections.content); + + // Act + await umbracoUi.content.clickActionsMenuAtRoot(); + await umbracoUi.content.clickCreateButton(); + await umbracoUi.content.chooseDocumentType(documentTypeName); + await umbracoUi.content.enterContentName(contentName); + await umbracoUi.content.clickSaveAndPublishButton(); + + // Assert + await umbracoUi.content.doesSuccessNotificationsHaveCount(2); + expect(await umbracoApi.document.doesNameExist(contentName)).toBeTruthy(); + const contentData = await umbracoApi.document.getByName(contentName); + expect(contentData.values).toEqual([]); +}); + +test('can create content with the custom approved color data type', async ({umbracoApi, umbracoUi}) => { + // Arrange + const customDataTypeName = 'CustomCheckboxList'; + const optionValues = ['testOption1', 'testOption2']; + const customDataTypeId = await umbracoApi.dataType.createCheckboxListDataType(customDataTypeName, optionValues); + await umbracoApi.documentType.createDocumentTypeWithPropertyEditor(documentTypeName, customDataTypeName, customDataTypeId); + await umbracoUi.content.goToSection(ConstantHelper.sections.content); + + // Act + await umbracoUi.content.clickActionsMenuAtRoot(); + await umbracoUi.content.clickCreateButton(); + await umbracoUi.content.chooseDocumentType(documentTypeName); + await umbracoUi.content.enterContentName(contentName); + await umbracoUi.content.chooseCheckboxListOption(optionValues[0]); + await umbracoUi.content.clickSaveAndPublishButton(); + + // Assert + await umbracoUi.content.doesSuccessNotificationsHaveCount(2); + expect(await umbracoApi.document.doesNameExist(contentName)).toBeTruthy(); + const contentData = await umbracoApi.document.getByName(contentName); + expect(contentData.values[0].alias).toEqual(AliasHelper.toAlias(customDataTypeName)); + expect(contentData.values[0].value).toEqual([optionValues[0]]); + + // Clean + await umbracoApi.dataType.ensureNameNotExists(customDataTypeName); +}); +