diff --git a/src/Umbraco.Web.UI.Client/.github/README.md b/src/Umbraco.Web.UI.Client/.github/README.md
index c8ee810d64..d9f0f72c16 100644
--- a/src/Umbraco.Web.UI.Client/.github/README.md
+++ b/src/Umbraco.Web.UI.Client/.github/README.md
@@ -2,7 +2,9 @@
This is the working repository of the upcoming new Backoffice to Umbraco CMS.
+[](https://github.com/umbraco/Umbraco.CMS.Backoffice/actions/workflows/build_test.yml)
[](https://github.com/umbraco/Umbraco.CMS.Backoffice/actions/workflows/azure-static-web-apps-ambitious-stone-0033b3603.yml)
+[](https://sonarcloud.io/summary/new_code?id=umbraco_Umbraco.CMS.Backoffice)
## Installation instructions
diff --git a/src/Umbraco.Web.UI.Client/.github/localization_overview.md b/src/Umbraco.Web.UI.Client/.github/localization_overview.md
index 3277e268fa..f69d559fcd 100644
--- a/src/Umbraco.Web.UI.Client/.github/localization_overview.md
+++ b/src/Umbraco.Web.UI.Client/.github/localization_overview.md
@@ -75,7 +75,7 @@ Before you start:
- [ ] Section: Info
- [ ] Relation Types
- [ ] Log Viewer
-- [ ] Document Blueprints
+- [x] Document Blueprints
- [ ] Languages
- [ ] Extensions
- [ ] Templates
diff --git a/src/Umbraco.Web.UI.Client/.github/workflows/build_test.yml b/src/Umbraco.Web.UI.Client/.github/workflows/build_test.yml
index 7c5ee7ee44..b90c5f86d1 100644
--- a/src/Umbraco.Web.UI.Client/.github/workflows/build_test.yml
+++ b/src/Umbraco.Web.UI.Client/.github/workflows/build_test.yml
@@ -36,6 +36,7 @@ jobs:
- run: npm ci --no-audit --no-fund --prefer-offline
- run: npm run lint:errors
- run: npm run build:for:cms
+ - run: npm run check:paths
- run: npm run generate:jsonschema:dist
test:
diff --git a/src/Umbraco.Web.UI.Client/.vscode/settings.json b/src/Umbraco.Web.UI.Client/.vscode/settings.json
index d611a3d7d6..1f9ce773f9 100644
--- a/src/Umbraco.Web.UI.Client/.vscode/settings.json
+++ b/src/Umbraco.Web.UI.Client/.vscode/settings.json
@@ -27,5 +27,9 @@
"exportall.config.folderListener": [],
"exportall.config.relExclusion": [],
"conventionalCommits.scopes": ["partial views"],
- "typescript.tsdk": "node_modules/typescript/lib"
+ "typescript.tsdk": "node_modules/typescript/lib",
+ "sonarlint.connectedMode.project": {
+ "connectionId": "umbraco",
+ "projectKey": "umbraco_Umbraco.CMS.Backoffice"
+ }
}
diff --git a/src/Umbraco.Web.UI.Client/devops/build/check-path-length.js b/src/Umbraco.Web.UI.Client/devops/build/check-path-length.js
index e195c7e7c0..182964f3be 100644
--- a/src/Umbraco.Web.UI.Client/devops/build/check-path-length.js
+++ b/src/Umbraco.Web.UI.Client/devops/build/check-path-length.js
@@ -18,6 +18,28 @@ console.log('\n-----------------------------------');
console.log('Results:');
console.log('-----------------------------------\n');
+const hasError = checkPathLength(PROJECT_DIR);
+
+if (hasError) {
+ console.log('\n-----------------------------------');
+ console.log(ERROR_COLOR, 'Path length check failed');
+ console.log('-----------------------------------\n');
+ if (IS_CI && processExitCode) {
+ process.exit(processExitCode);
+ }
+} else {
+ console.log('\n-----------------------------------');
+ console.log(SUCCESS_COLOR, 'Path length check passed');
+ console.log('-----------------------------------\n');
+}
+
+// Functions
+
+/**
+ * Recursively check the path length of all files in a directory.
+ * @param {string} dir - The directory to check for path lengths
+ * @returns {boolean}
+ */
function checkPathLength(dir) {
const files = readdirSync(dir);
let hasError = false;
@@ -28,11 +50,11 @@ function checkPathLength(dir) {
hasError = true;
if (IS_AZURE_PIPELINES) {
- console.error(`##vso[task.logissue type=warning;sourcepath=${filePath};]Path exceeds maximum length of ${MAX_PATH_LENGTH} characters: ${filePath} with ${filePath.length} characters`);
+ console.error(`##vso[task.logissue type=error;sourcepath=${mapFileToSourcePath(filePath)};]Path exceeds maximum length of ${MAX_PATH_LENGTH} characters: ${filePath} with ${filePath.length} characters`);
} else if (IS_GITHUB_ACTIONS) {
- console.error(`::warning file=${filePath},title=Path exceeds ${MAX_PATH_LENGTH} characters::Paths should not be longer than ${MAX_PATH_LENGTH} characters to support WIN32 systems. The file ${filePath} exceeds that with ${filePath.length - MAX_PATH_LENGTH} characters.`);
+ console.error(`::error file=${mapFileToSourcePath(filePath)},title=Path exceeds ${MAX_PATH_LENGTH} characters::Paths should not be longer than ${MAX_PATH_LENGTH} characters to support WIN32 systems. The file ${filePath} exceeds that with ${filePath.length - MAX_PATH_LENGTH} characters.`);
} else {
- console.error(`Path exceeds maximum length of ${MAX_PATH_LENGTH} characters: ${FILE_PATH_COLOR}`, filePath, filePath.length - MAX_PATH_LENGTH);
+ console.error(FILE_PATH_COLOR, mapFileToSourcePath(filePath), '(exceeds by', filePath.length - MAX_PATH_LENGTH, 'chars)');
}
}
@@ -47,17 +69,12 @@ function checkPathLength(dir) {
return hasError;
}
-const hasError = checkPathLength(PROJECT_DIR, MAX_PATH_LENGTH);
-
-if (hasError) {
- console.error('\n-----------------------------------');
- console.error(ERROR_COLOR, 'Path length check failed');
- console.error('-----------------------------------\n');
- if (IS_CI && processExitCode) {
- process.exit(processExitCode);
- }
-} else {
- console.log('\n-----------------------------------');
- console.log(SUCCESS_COLOR, 'Path length check passed');
- console.log('-----------------------------------\n');
+/**
+ * Maps a file path to a source path for CI logs.
+ * @remark This might not always work as expected, especially on bundled files, but it's a best effort to map the file path to a source path.
+ * @param {string} file - The file path to map to a source path
+ * @returns {string}
+ */
+function mapFileToSourcePath(file) {
+ return file.replace(PROJECT_DIR, 'src').replace('.js', '.ts');
}
diff --git a/src/Umbraco.Web.UI.Client/devops/eslint/rules/no-direct-api-import.cjs b/src/Umbraco.Web.UI.Client/devops/eslint/rules/no-direct-api-import.cjs
index b051ad64fa..9f3a3912dc 100644
--- a/src/Umbraco.Web.UI.Client/devops/eslint/rules/no-direct-api-import.cjs
+++ b/src/Umbraco.Web.UI.Client/devops/eslint/rules/no-direct-api-import.cjs
@@ -1,3 +1,4 @@
+/** @type {import('eslint').Rule.RuleModule} */
module.exports = {
meta: {
docs: {
diff --git a/src/Umbraco.Web.UI.Client/eslint.config.js b/src/Umbraco.Web.UI.Client/eslint.config.js
index eaa0ded53d..498884d147 100644
--- a/src/Umbraco.Web.UI.Client/eslint.config.js
+++ b/src/Umbraco.Web.UI.Client/eslint.config.js
@@ -1,11 +1,9 @@
-import js from "@eslint/js";
-import globals from "globals";
-import importPlugin from "eslint-plugin-import";
-import localRules from "eslint-plugin-local-rules";
-import wcPlugin from "eslint-plugin-wc";
-import litPlugin from "eslint-plugin-lit";
-import litA11yPlugin from "eslint-plugin-lit-a11y";
-import storybookPlugin from "eslint-plugin-storybook";
+import js from '@eslint/js';
+import globals from 'globals';
+import importPlugin from 'eslint-plugin-import';
+import localRules from 'eslint-plugin-local-rules';
+import wcPlugin from 'eslint-plugin-wc';
+import litPlugin from 'eslint-plugin-lit';
import eslintPluginPrettierRecommended from 'eslint-plugin-prettier/recommended';
import tseslint from 'typescript-eslint';
@@ -13,16 +11,21 @@ export default [
// Recommended config applied to all files
js.configs.recommended,
...tseslint.configs.recommended,
+ wcPlugin.configs['flat/recommended'],
+ litPlugin.configs['flat/recommended'],
+ localRules.configs.all,
eslintPluginPrettierRecommended,
// Global ignores
{
ignores: [
- "**/rollup.config.js",
- "**/vite.config.ts",
- "src/external",
- "src/packages/core/icon-registry/icons",
- "src/packages/core/icon-registry/icons.ts"
+ '**/eslint.config.js',
+ '**/rollup.config.js',
+ '**/vite.config.ts',
+ 'src/external',
+ 'src/packages/core/icon-registry/icons',
+ 'src/packages/core/icon-registry/icons.ts',
+ 'src/**/*.test.ts',
],
},
@@ -35,52 +38,45 @@ export default [
},
globals: {
...globals.browser,
- }
+ },
},
plugins: {
import: importPlugin,
- "local-rules": localRules,
- "wc": wcPlugin,
- "lit": litPlugin,
- "lit-a11y": litA11yPlugin,
- "storybook": storybookPlugin
+ 'local-rules': localRules,
},
rules: {
- semi: ["warn", "always"],
- "no-unused-vars": "warn",
- "no-var": "error",
- "import/no-unresolved": "off",
- "import/order": ["warn", { "groups": ["builtin", "parent", "sibling", "index", "external"] }],
- "import/no-self-import": "error",
- "import/no-cycle": ["error", { "maxDepth": 6, "allowUnsafeDynamicCyclicDependency": true }],
- "local-rules/bad-type-import": "error",
- "local-rules/enforce-element-suffix-on-element-class-name": "error",
- "local-rules/enforce-umb-prefix-on-element-name": "error",
- "local-rules/ensure-relative-import-use-js-extension": "error",
- "local-rules/no-direct-api-import": "warn",
- "local-rules/prefer-import-aliases": "error",
- "local-rules/prefer-static-styles-last": "warn",
- "local-rules/umb-class-prefix": "error",
- "local-rules/no-relative-import-to-import-map-module": "error",
- "local-rules/enforce-umbraco-external-imports": [
- "error",
+ semi: ['warn', 'always'],
+ "prettier/prettier": ["warn", { "endOfLine": "auto" }],
+ 'no-unused-vars': 'off', //Let '@typescript-eslint/no-unused-vars' catch the errors to allow unused function parameters (ex: in interfaces)
+ 'no-var': 'error',
+ ...importPlugin.configs.recommended.rules,
+ 'import/namespace': 'off',
+ 'import/no-unresolved': 'off',
+ 'import/order': ['warn', { groups: ['builtin', 'parent', 'sibling', 'index', 'external'] }],
+ 'import/no-self-import': 'error',
+ 'import/no-cycle': ['error', { maxDepth: 6, allowUnsafeDynamicCyclicDependency: true }],
+ 'import/no-named-as-default': 'off', // Does not work with eslint 9
+ 'import/no-named-as-default-member': 'off', // Does not work with eslint 9
+ 'local-rules/prefer-static-styles-last': 'warn',
+ 'local-rules/enforce-umbraco-external-imports': [
+ 'error',
{
- "exceptions": ["@umbraco-cms", "@open-wc/testing", "@storybook", "msw", ".", "vite"]
- }
+ exceptions: ['@umbraco-cms', '@open-wc/testing', '@storybook', 'msw', '.', 'vite'],
+ },
],
- "local-rules/exported-string-constant-naming": [
- "error",
+ 'local-rules/exported-string-constant-naming': [
+ 'error',
{
- "excludedFileNames": ["umbraco-package", "input-tiny-mce.defaults"] // TODO: what to do about the tiny mce defaults?
- }
+ excludedFileNames: ['umbraco-package', 'input-tiny-mce.defaults'], // TODO: what to do about the tiny mce defaults?
+ },
],
- "@typescript-eslint/no-non-null-assertion": "off",
- "@typescript-eslint/no-explicit-any": "warn",
- "@typescript-eslint/no-unused-vars": "warn",
- "@typescript-eslint/consistent-type-exports": "error",
- "@typescript-eslint/consistent-type-imports": "error",
- "@typescript-eslint/no-import-type-side-effects": "warn"
- }
+ '@typescript-eslint/no-non-null-assertion': 'off',
+ '@typescript-eslint/no-explicit-any': 'warn',
+ '@typescript-eslint/no-unused-vars': 'error',
+ '@typescript-eslint/consistent-type-exports': 'error',
+ '@typescript-eslint/consistent-type-imports': 'error',
+ '@typescript-eslint/no-import-type-side-effects': 'warn',
+ },
},
// Pattern-specific overrides
@@ -90,7 +86,7 @@ export default [
languageOptions: {
globals: {
...globals.node,
- }
- }
+ },
+ },
},
];
diff --git a/src/Umbraco.Web.UI.Client/index.html b/src/Umbraco.Web.UI.Client/index.html
index 94d6a2ed4d..b92c54f0d6 100644
--- a/src/Umbraco.Web.UI.Client/index.html
+++ b/src/Umbraco.Web.UI.Client/index.html
@@ -7,7 +7,6 @@
Umbraco
-
diff --git a/src/Umbraco.Web.UI.Client/package-lock.json b/src/Umbraco.Web.UI.Client/package-lock.json
index fcfaf1e486..dafc1e3c8f 100644
--- a/src/Umbraco.Web.UI.Client/package-lock.json
+++ b/src/Umbraco.Web.UI.Client/package-lock.json
@@ -7,53 +7,56 @@
"": {
"name": "@umbraco-cms/backoffice",
"version": "14.2.0",
+ "hasInstallScript": true,
"license": "MIT",
"workspaces": [
"./src/packages/block",
+ "./src/packages/code-editor",
"./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/media",
+ "./src/packages/members",
+ "./src/packages/multi-url-picker",
+ "./src/packages/property-editors",
"./src/packages/tags",
"./src/packages/templating",
- "./src/packages/property-editors",
- "./src/packages/media"
+ "./src/packages/umbraco-news",
+ "./src/packages/user",
+ "./src/packages/webhook"
],
"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",
+ "@types/uuid": "^10.0.0",
+ "@umbraco-ui/uui": "^1.9.0",
+ "@umbraco-ui/uui-css": "^1.9.0",
"base64-js": "^1.5.1",
"diff": "^5.2.0",
- "dompurify": "^3.1.4",
+ "dompurify": "^3.1.6",
"element-internals-polyfill": "^1.3.11",
- "lit": "^3.1.3",
- "marked": "^12.0.2",
- "monaco-editor": "^0.48.0",
+ "lit": "^3.1.4",
+ "marked": "^13.0.2",
+ "monaco-editor": "^0.50.0",
"rxjs": "^7.8.1",
"tinymce": "^6.8.3",
- "tinymce-i18n": "^24.5.8",
- "uuid": "^9.0.1"
+ "tinymce-i18n": "^24.7.15",
+ "uuid": "^10.0.0"
},
"devDependencies": {
- "@babel/core": "^7.24.3",
- "@eslint/js": "^9.6.0",
- "@hey-api/openapi-ts": "^0.48.1",
- "@mdx-js/react": "^3.0.0",
+ "@babel/core": "^7.24.9",
+ "@eslint/js": "^9.7.0",
+ "@hey-api/openapi-ts": "^0.48.3",
+ "@mdx-js/react": "^3.0.1",
"@open-wc/testing": "^4.0.0",
- "@playwright/test": "^1.45.1",
- "@rollup/plugin-commonjs": "^25.0.7",
+ "@playwright/test": "^1.45.2",
+ "@rollup/plugin-commonjs": "^26.0.1",
"@rollup/plugin-json": "^6.1.0",
"@rollup/plugin-node-resolve": "^15.2.3",
- "@rollup/plugin-replace": "^5.0.5",
+ "@rollup/plugin-replace": "^5.0.7",
"@storybook/addon-a11y": "^7.6.17",
"@storybook/addon-actions": "^7.6.17",
"@storybook/addon-essentials": "^7.6.17",
@@ -61,47 +64,45 @@
"@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/chai": "^4.3.16",
"@types/eslint__js": "^8.42.3",
- "@types/mocha": "^10.0.1",
+ "@types/mocha": "^10.0.7",
"@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/dev-server-import-maps": "^0.2.1",
+ "@web/dev-server-rollup": "^0.6.4",
+ "@web/test-runner": "^0.18.2",
"@web/test-runner-playwright": "^0.11.0",
"babel-loader": "^9.1.3",
- "eslint": "^9.6.0",
+ "eslint": "^9.7.0",
"eslint-config-prettier": "^9.1.0",
"eslint-plugin-import": "^2.29.1",
"eslint-plugin-lit": "^1.14.0",
- "eslint-plugin-lit-a11y": "^4.1.3",
"eslint-plugin-local-rules": "^3.0.2",
"eslint-plugin-prettier": "^5.1.3",
- "eslint-plugin-storybook": "^0.8.0",
"eslint-plugin-wc": "^2.1.0",
- "glob": "^10.3.10",
- "globals": "^15.7.0",
- "lucide-static": "^0.379.0",
+ "glob": "^11.0.0",
+ "globals": "^15.8.0",
+ "lucide-static": "^0.408.0",
"msw": "^1.3.2",
"playwright-msw": "^3.0.1",
- "prettier": "3.3.2",
+ "prettier": "3.3.3",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"remark-gfm": "^3.0.1",
- "rollup": "^4.14.1",
+ "rollup": "^4.18.1",
"rollup-plugin-esbuild": "^6.1.1",
"rollup-plugin-import-css": "^3.5.0",
"rollup-plugin-web-worker-loader": "^1.6.1",
- "simple-icons": "^13.0.0",
+ "simple-icons": "^13.1.0",
"storybook": "^7.6.17",
"tiny-glob": "^0.2.9",
- "tsc-alias": "^1.8.8",
- "typedoc": "^0.26.3",
+ "tsc-alias": "^1.8.10",
+ "typedoc": "^0.26.4",
"typescript": "^5.5.3",
- "typescript-eslint": "^7.15.0",
- "typescript-json-schema": "^0.63.0",
- "vite": "^5.2.9",
- "vite-plugin-static-copy": "^1.0.5",
+ "typescript-eslint": "^7.16.1",
+ "typescript-json-schema": "^0.64.0",
+ "vite": "^5.3.4",
+ "vite-plugin-static-copy": "^1.0.6",
"vite-tsconfig-paths": "^4.3.2",
"web-component-analyzer": "^2.0.0"
},
@@ -188,30 +189,30 @@
}
},
"node_modules/@babel/compat-data": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.7.tgz",
- "integrity": "sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw==",
+ "version": "7.24.9",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.9.tgz",
+ "integrity": "sha512-e701mcfApCJqMMueQI0Fb68Amflj83+dvAvHawoBpAz+GDjCIyGHzNwnefjsWJ3xiYAqqiQFoWbspGYBdb2/ng==",
"dev": true,
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/core": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.7.tgz",
- "integrity": "sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g==",
+ "version": "7.24.9",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.9.tgz",
+ "integrity": "sha512-5e3FI4Q3M3Pbr21+5xJwCv6ZT6KmGkI0vw3Tozy5ODAQFTIWe37iT8Cr7Ice2Ntb+M3iSKCEWMB1MBgKrW3whg==",
"dev": true,
"dependencies": {
"@ampproject/remapping": "^2.2.0",
"@babel/code-frame": "^7.24.7",
- "@babel/generator": "^7.24.7",
- "@babel/helper-compilation-targets": "^7.24.7",
- "@babel/helper-module-transforms": "^7.24.7",
- "@babel/helpers": "^7.24.7",
- "@babel/parser": "^7.24.7",
+ "@babel/generator": "^7.24.9",
+ "@babel/helper-compilation-targets": "^7.24.8",
+ "@babel/helper-module-transforms": "^7.24.9",
+ "@babel/helpers": "^7.24.8",
+ "@babel/parser": "^7.24.8",
"@babel/template": "^7.24.7",
- "@babel/traverse": "^7.24.7",
- "@babel/types": "^7.24.7",
+ "@babel/traverse": "^7.24.8",
+ "@babel/types": "^7.24.9",
"convert-source-map": "^2.0.0",
"debug": "^4.1.0",
"gensync": "^1.0.0-beta.2",
@@ -227,12 +228,12 @@
}
},
"node_modules/@babel/generator": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.7.tgz",
- "integrity": "sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==",
+ "version": "7.24.10",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.10.tgz",
+ "integrity": "sha512-o9HBZL1G2129luEUlG1hB4N/nlYNWHnpwlND9eOMclRqqu1YDy2sSYVCFUZwl8I1Gxh+QSRrP2vD7EpUmFVXxg==",
"dev": true,
"dependencies": {
- "@babel/types": "^7.24.7",
+ "@babel/types": "^7.24.9",
"@jridgewell/gen-mapping": "^0.3.5",
"@jridgewell/trace-mapping": "^0.3.25",
"jsesc": "^2.5.1"
@@ -267,14 +268,14 @@
}
},
"node_modules/@babel/helper-compilation-targets": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.7.tgz",
- "integrity": "sha512-ctSdRHBi20qWOfy27RUb4Fhp07KSJ3sXcuSvTrXrc4aG8NSYDo1ici3Vhg9bg69y5bj0Mr1lh0aeEgTvc12rMg==",
+ "version": "7.24.8",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.8.tgz",
+ "integrity": "sha512-oU+UoqCHdp+nWVDkpldqIQL/i/bvAv53tRqLG/s+cOXxe66zOYLU7ar/Xs3LdmBihrUMEUhwu6dMZwbNOYDwvw==",
"dev": true,
"dependencies": {
- "@babel/compat-data": "^7.24.7",
- "@babel/helper-validator-option": "^7.24.7",
- "browserslist": "^4.22.2",
+ "@babel/compat-data": "^7.24.8",
+ "@babel/helper-validator-option": "^7.24.8",
+ "browserslist": "^4.23.1",
"lru-cache": "^5.1.1",
"semver": "^6.3.1"
},
@@ -402,9 +403,9 @@
}
},
"node_modules/@babel/helper-module-transforms": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.7.tgz",
- "integrity": "sha512-1fuJEwIrp+97rM4RWdO+qrRsZlAeL1lQJoPqtCYWv0NL115XM93hIH4CSRln2w52SqvmY5hqdtauB6QFCDiZNQ==",
+ "version": "7.24.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.9.tgz",
+ "integrity": "sha512-oYbh+rtFKj/HwBQkFlUzvcybzklmVdVV3UU+mN7n2t/q3yGHbuVdNxyFvSBO1tfvjyArpHNcWMAzsSPdyI46hw==",
"dev": true,
"dependencies": {
"@babel/helper-environment-visitor": "^7.24.7",
@@ -514,9 +515,9 @@
}
},
"node_modules/@babel/helper-string-parser": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.7.tgz",
- "integrity": "sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==",
+ "version": "7.24.8",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz",
+ "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==",
"dev": true,
"engines": {
"node": ">=6.9.0"
@@ -532,9 +533,9 @@
}
},
"node_modules/@babel/helper-validator-option": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.7.tgz",
- "integrity": "sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==",
+ "version": "7.24.8",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz",
+ "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==",
"dev": true,
"engines": {
"node": ">=6.9.0"
@@ -556,13 +557,13 @@
}
},
"node_modules/@babel/helpers": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.7.tgz",
- "integrity": "sha512-NlmJJtvcw72yRJRcnCmGvSi+3jDEg8qFu3z0AFoymmzLx5ERVWyzd9kVXr7Th9/8yIJi2Zc6av4Tqz3wFs8QWg==",
+ "version": "7.24.8",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.8.tgz",
+ "integrity": "sha512-gV2265Nkcz7weJJfvDoAEVzC1e2OTDpkGbEsebse8koXUJUXPsCMi7sRo/+SPMuMZ9MtUPnGwITTnQnU5YjyaQ==",
"dev": true,
"dependencies": {
"@babel/template": "^7.24.7",
- "@babel/types": "^7.24.7"
+ "@babel/types": "^7.24.8"
},
"engines": {
"node": ">=6.9.0"
@@ -584,9 +585,9 @@
}
},
"node_modules/@babel/parser": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.7.tgz",
- "integrity": "sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==",
+ "version": "7.24.8",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.8.tgz",
+ "integrity": "sha512-WzfbgXOkGzZiXXCqk43kKwZjzwx4oulxZi3nq2TYL9mOjQv6kYwul9mz6ID36njuL7Xkp6nJEfok848Zj10j/w==",
"dev": true,
"bin": {
"parser": "bin/babel-parser.js"
@@ -2071,19 +2072,19 @@
}
},
"node_modules/@babel/traverse": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.7.tgz",
- "integrity": "sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==",
+ "version": "7.24.8",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.8.tgz",
+ "integrity": "sha512-t0P1xxAPzEDcEPmjprAQq19NWum4K0EQPjMwZQZbHt+GiZqvjCHjj755Weq1YRPVzBI+3zSfvScfpnuIecVFJQ==",
"dev": true,
"dependencies": {
"@babel/code-frame": "^7.24.7",
- "@babel/generator": "^7.24.7",
+ "@babel/generator": "^7.24.8",
"@babel/helper-environment-visitor": "^7.24.7",
"@babel/helper-function-name": "^7.24.7",
"@babel/helper-hoist-variables": "^7.24.7",
"@babel/helper-split-export-declaration": "^7.24.7",
- "@babel/parser": "^7.24.7",
- "@babel/types": "^7.24.7",
+ "@babel/parser": "^7.24.8",
+ "@babel/types": "^7.24.8",
"debug": "^4.3.1",
"globals": "^11.1.0"
},
@@ -2101,12 +2102,12 @@
}
},
"node_modules/@babel/types": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.7.tgz",
- "integrity": "sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==",
+ "version": "7.24.9",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.9.tgz",
+ "integrity": "sha512-xm8XrMKz0IlUdocVbYJe0Z9xEgidU7msskG8BbhnTPK/HZ2z/7FP7ykqPgrUH+C+r414mNfNWam1f2vqOjqjYQ==",
"dev": true,
"dependencies": {
- "@babel/helper-string-parser": "^7.24.7",
+ "@babel/helper-string-parser": "^7.24.8",
"@babel/helper-validator-identifier": "^7.24.7",
"to-fast-properties": "^2.0.0"
},
@@ -2618,9 +2619,9 @@
}
},
"node_modules/@eslint/js": {
- "version": "9.6.0",
- "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.6.0.tgz",
- "integrity": "sha512-D9B0/3vNg44ZeWbYMpBoXqNP4j6eQD5vNwIlGAuFRRzK/WtT/jvDQW3Bi9kkf3PMDMlM7Yi+73VLUsn5bJcl8A==",
+ "version": "9.7.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.7.0.tgz",
+ "integrity": "sha512-ChuWDQenef8OSFnvuxv0TCVxEwmu3+hPNKvM9B34qpM0rDRbjL8t5QkQeHHeAfsKQjuH9wS82WeCi1J/owatng==",
"dev": true,
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -2695,9 +2696,9 @@
"dev": true
},
"node_modules/@hey-api/openapi-ts": {
- "version": "0.48.1",
- "resolved": "https://registry.npmjs.org/@hey-api/openapi-ts/-/openapi-ts-0.48.1.tgz",
- "integrity": "sha512-iZBEmS12EWn4yl/nYMui+PA3hprjFR9z+9p+p+s3f0VRXPw+uZWO0yuIfCcsAw1n0isikw2uJEY4qxwlnI07AQ==",
+ "version": "0.48.3",
+ "resolved": "https://registry.npmjs.org/@hey-api/openapi-ts/-/openapi-ts-0.48.3.tgz",
+ "integrity": "sha512-R53Nr4Gicz77icS+RiH0fwHa9A0uFPtzsjC8SBaGwtOel5ZyxeBbayWE6HhE789hp3dok9pegwWncwwOrr4WFA==",
"dev": true,
"dependencies": {
"@apidevtools/json-schema-ref-parser": "11.6.4",
@@ -3385,12 +3386,12 @@
}
},
"node_modules/@playwright/test": {
- "version": "1.45.1",
- "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.45.1.tgz",
- "integrity": "sha512-Wo1bWTzQvGA7LyKGIZc8nFSTFf2TkthGIFBR+QVNilvwouGzFd4PYukZe3rvf5PSqjHi1+1NyKSDZKcQWETzaA==",
+ "version": "1.45.2",
+ "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.45.2.tgz",
+ "integrity": "sha512-JxG9eq92ET75EbVi3s+4sYbcG7q72ECeZNbdBlaMkGcNbiDQ4cAi8U2QP5oKkOx+1gpaiL1LDStmzCaEM1Z6fQ==",
"dev": true,
"dependencies": {
- "playwright": "1.45.1"
+ "playwright": "1.45.2"
},
"bin": {
"playwright": "cli.js"
@@ -4682,20 +4683,20 @@
}
},
"node_modules/@rollup/plugin-commonjs": {
- "version": "25.0.8",
- "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-25.0.8.tgz",
- "integrity": "sha512-ZEZWTK5n6Qde0to4vS9Mr5x/0UZoqCxPVR9KRUjU4kA2sO7GEUn1fop0DAwpO6z0Nw/kJON9bDmSxdWxO/TT1A==",
+ "version": "26.0.1",
+ "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-26.0.1.tgz",
+ "integrity": "sha512-UnsKoZK6/aGIH6AdkptXhNvhaqftcjq3zZdT+LY5Ftms6JR06nADcDsYp5hTU9E2lbJUEOhdlY5J4DNTneM+jQ==",
"dev": true,
"dependencies": {
"@rollup/pluginutils": "^5.0.1",
"commondir": "^1.0.1",
"estree-walker": "^2.0.2",
- "glob": "^8.0.3",
+ "glob": "^10.4.1",
"is-reference": "1.2.1",
"magic-string": "^0.30.3"
},
"engines": {
- "node": ">=14.0.0"
+ "node": ">=16.0.0 || 14 >= 14.17"
},
"peerDependencies": {
"rollup": "^2.68.0||^3.0.0||^4.0.0"
@@ -4716,35 +4717,75 @@
}
},
"node_modules/@rollup/plugin-commonjs/node_modules/glob": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
- "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
- "deprecated": "Glob versions prior to v9 are no longer supported",
+ "version": "10.4.5",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
+ "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
"dev": true,
"dependencies": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^5.0.1",
- "once": "^1.3.0"
+ "foreground-child": "^3.1.0",
+ "jackspeak": "^3.1.2",
+ "minimatch": "^9.0.4",
+ "minipass": "^7.1.2",
+ "package-json-from-dist": "^1.0.0",
+ "path-scurry": "^1.11.1"
},
- "engines": {
- "node": ">=12"
+ "bin": {
+ "glob": "dist/esm/bin.mjs"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
+ "node_modules/@rollup/plugin-commonjs/node_modules/jackspeak": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
+ "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
+ "dev": true,
+ "dependencies": {
+ "@isaacs/cliui": "^8.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ },
+ "optionalDependencies": {
+ "@pkgjs/parseargs": "^0.11.0"
+ }
+ },
+ "node_modules/@rollup/plugin-commonjs/node_modules/lru-cache": {
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
+ "dev": true
+ },
"node_modules/@rollup/plugin-commonjs/node_modules/minimatch": {
- "version": "5.1.6",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
- "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+ "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
"dev": true,
"dependencies": {
"brace-expansion": "^2.0.1"
},
"engines": {
- "node": ">=10"
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/@rollup/plugin-commonjs/node_modules/path-scurry": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
+ "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
+ "dev": true,
+ "dependencies": {
+ "lru-cache": "^10.2.0",
+ "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/@rollup/plugin-json": {
@@ -4836,9 +4877,9 @@
}
},
"node_modules/@rollup/rollup-android-arm-eabi": {
- "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==",
+ "version": "4.18.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.18.1.tgz",
+ "integrity": "sha512-lncuC4aHicncmbORnx+dUaAgzee9cm/PbIqgWz1PpXuwc+sa1Ct83tnqUDy/GFKleLiN7ZIeytM6KJ4cAn1SxA==",
"cpu": [
"arm"
],
@@ -4849,9 +4890,9 @@
]
},
"node_modules/@rollup/rollup-android-arm64": {
- "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==",
+ "version": "4.18.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.18.1.tgz",
+ "integrity": "sha512-F/tkdw0WSs4ojqz5Ovrw5r9odqzFjb5LIgHdHZG65dFI1lWTWRVy32KDJLKRISHgJvqUeUhdIvy43fX41znyDg==",
"cpu": [
"arm64"
],
@@ -4862,9 +4903,9 @@
]
},
"node_modules/@rollup/rollup-darwin-arm64": {
- "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==",
+ "version": "4.18.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.18.1.tgz",
+ "integrity": "sha512-vk+ma8iC1ebje/ahpxpnrfVQJibTMyHdWpOGZ3JpQ7Mgn/3QNHmPq7YwjZbIE7km73dH5M1e6MRRsnEBW7v5CQ==",
"cpu": [
"arm64"
],
@@ -4875,9 +4916,9 @@
]
},
"node_modules/@rollup/rollup-darwin-x64": {
- "version": "4.18.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.18.0.tgz",
- "integrity": "sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA==",
+ "version": "4.18.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.18.1.tgz",
+ "integrity": "sha512-IgpzXKauRe1Tafcej9STjSSuG0Ghu/xGYH+qG6JwsAUxXrnkvNHcq/NL6nz1+jzvWAnQkuAJ4uIwGB48K9OCGA==",
"cpu": [
"x64"
],
@@ -4888,9 +4929,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm-gnueabihf": {
- "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==",
+ "version": "4.18.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.18.1.tgz",
+ "integrity": "sha512-P9bSiAUnSSM7EmyRK+e5wgpqai86QOSv8BwvkGjLwYuOpaeomiZWifEos517CwbG+aZl1T4clSE1YqqH2JRs+g==",
"cpu": [
"arm"
],
@@ -4901,9 +4942,9 @@
]
},
"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==",
+ "version": "4.18.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.18.1.tgz",
+ "integrity": "sha512-5RnjpACoxtS+aWOI1dURKno11d7krfpGDEn19jI8BuWmSBbUC4ytIADfROM1FZrFhQPSoP+KEa3NlEScznBTyQ==",
"cpu": [
"arm"
],
@@ -4914,9 +4955,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm64-gnu": {
- "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==",
+ "version": "4.18.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.18.1.tgz",
+ "integrity": "sha512-8mwmGD668m8WaGbthrEYZ9CBmPug2QPGWxhJxh/vCgBjro5o96gL04WLlg5BA233OCWLqERy4YUzX3bJGXaJgQ==",
"cpu": [
"arm64"
],
@@ -4927,9 +4968,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm64-musl": {
- "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==",
+ "version": "4.18.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.18.1.tgz",
+ "integrity": "sha512-dJX9u4r4bqInMGOAQoGYdwDP8lQiisWb9et+T84l2WXk41yEej8v2iGKodmdKimT8cTAYt0jFb+UEBxnPkbXEQ==",
"cpu": [
"arm64"
],
@@ -4940,9 +4981,9 @@
]
},
"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==",
+ "version": "4.18.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.18.1.tgz",
+ "integrity": "sha512-V72cXdTl4EI0x6FNmho4D502sy7ed+LuVW6Ym8aI6DRQ9hQZdp5sj0a2usYOlqvFBNKQnLQGwmYnujo2HvjCxQ==",
"cpu": [
"ppc64"
],
@@ -4953,9 +4994,9 @@
]
},
"node_modules/@rollup/rollup-linux-riscv64-gnu": {
- "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==",
+ "version": "4.18.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.18.1.tgz",
+ "integrity": "sha512-f+pJih7sxoKmbjghrM2RkWo2WHUW8UbfxIQiWo5yeCaCM0TveMEuAzKJte4QskBp1TIinpnRcxkquY+4WuY/tg==",
"cpu": [
"riscv64"
],
@@ -4966,9 +5007,9 @@
]
},
"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==",
+ "version": "4.18.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.18.1.tgz",
+ "integrity": "sha512-qb1hMMT3Fr/Qz1OKovCuUM11MUNLUuHeBC2DPPAWUYYUAOFWaxInaTwTQmc7Fl5La7DShTEpmYwgdt2hG+4TEg==",
"cpu": [
"s390x"
],
@@ -4979,9 +5020,9 @@
]
},
"node_modules/@rollup/rollup-linux-x64-gnu": {
- "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==",
+ "version": "4.18.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.18.1.tgz",
+ "integrity": "sha512-7O5u/p6oKUFYjRbZkL2FLbwsyoJAjyeXHCU3O4ndvzg2OFO2GinFPSJFGbiwFDaCFc+k7gs9CF243PwdPQFh5g==",
"cpu": [
"x64"
],
@@ -4992,9 +5033,9 @@
]
},
"node_modules/@rollup/rollup-linux-x64-musl": {
- "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==",
+ "version": "4.18.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.18.1.tgz",
+ "integrity": "sha512-pDLkYITdYrH/9Cv/Vlj8HppDuLMDUBmgsM0+N+xLtFd18aXgM9Nyqupb/Uw+HeidhfYg2lD6CXvz6CjoVOaKjQ==",
"cpu": [
"x64"
],
@@ -5005,9 +5046,9 @@
]
},
"node_modules/@rollup/rollup-win32-arm64-msvc": {
- "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==",
+ "version": "4.18.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.18.1.tgz",
+ "integrity": "sha512-W2ZNI323O/8pJdBGil1oCauuCzmVd9lDmWBBqxYZcOqWD6aWqJtVBQ1dFrF4dYpZPks6F+xCZHfzG5hYlSHZ6g==",
"cpu": [
"arm64"
],
@@ -5018,9 +5059,9 @@
]
},
"node_modules/@rollup/rollup-win32-ia32-msvc": {
- "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==",
+ "version": "4.18.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.18.1.tgz",
+ "integrity": "sha512-ELfEX1/+eGZYMaCIbK4jqLxO1gyTSOIlZr6pbC4SRYFaSIDVKOnZNMdoZ+ON0mrFDp4+H5MhwNC1H/AhE3zQLg==",
"cpu": [
"ia32"
],
@@ -5031,9 +5072,9 @@
]
},
"node_modules/@rollup/rollup-win32-x64-msvc": {
- "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==",
+ "version": "4.18.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.18.1.tgz",
+ "integrity": "sha512-yjk2MAkQmoaPYCSu35RLJ62+dz358nE83VfTePJRp8CG7aMg25mEJYpXFiD+NcevhX8LxD5OP5tktPXnXN7GDw==",
"cpu": [
"x64"
],
@@ -5044,10 +5085,13 @@
]
},
"node_modules/@shikijs/core": {
- "version": "1.10.1",
- "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-1.10.1.tgz",
- "integrity": "sha512-qdiJS5a/QGCff7VUFIqd0hDdWly9rDp8lhVmXVrS11aazX8LOTRLHAXkkEeONNsS43EcCd7gax9LLoOz4vlFQA==",
- "dev": true
+ "version": "1.10.3",
+ "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-1.10.3.tgz",
+ "integrity": "sha512-D45PMaBaeDHxww+EkcDQtDAtzv00Gcsp72ukBtaLSmqRvh0WgGMq3Al0rl1QQBZfuneO75NXMIzEZGFitThWbg==",
+ "dev": true,
+ "dependencies": {
+ "@types/hast": "^3.0.4"
+ }
},
"node_modules/@sinclair/typebox": {
"version": "0.27.8",
@@ -5087,6 +5131,25 @@
"url": "https://opencollective.com/storybook"
}
},
+ "node_modules/@storybook/addon-actions/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
+ },
+ "node_modules/@storybook/addon-actions/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"
+ ],
+ "bin": {
+ "uuid": "dist/bin/uuid"
+ }
+ },
"node_modules/@storybook/addon-backgrounds": {
"version": "7.6.20",
"resolved": "https://registry.npmjs.org/@storybook/addon-backgrounds/-/addon-backgrounds-7.6.20.tgz",
@@ -5835,6 +5898,15 @@
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
+ "node_modules/@storybook/core-common/node_modules/brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
"node_modules/@storybook/core-common/node_modules/chalk": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
@@ -5851,6 +5923,26 @@
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
+ "node_modules/@storybook/core-common/node_modules/glob": {
+ "version": "10.4.5",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
+ "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
+ "dev": true,
+ "dependencies": {
+ "foreground-child": "^3.1.0",
+ "jackspeak": "^3.1.2",
+ "minimatch": "^9.0.4",
+ "minipass": "^7.1.2",
+ "package-json-from-dist": "^1.0.0",
+ "path-scurry": "^1.11.1"
+ },
+ "bin": {
+ "glob": "dist/esm/bin.mjs"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
"node_modules/@storybook/core-common/node_modules/has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -5860,6 +5952,58 @@
"node": ">=8"
}
},
+ "node_modules/@storybook/core-common/node_modules/jackspeak": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
+ "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
+ "dev": true,
+ "dependencies": {
+ "@isaacs/cliui": "^8.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ },
+ "optionalDependencies": {
+ "@pkgjs/parseargs": "^0.11.0"
+ }
+ },
+ "node_modules/@storybook/core-common/node_modules/lru-cache": {
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
+ "dev": true
+ },
+ "node_modules/@storybook/core-common/node_modules/minimatch": {
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+ "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/@storybook/core-common/node_modules/path-scurry": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
+ "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
+ "dev": true,
+ "dependencies": {
+ "lru-cache": "^10.2.0",
+ "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
"node_modules/@storybook/core-common/node_modules/supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
@@ -6367,15 +6511,6 @@
"url": "https://opencollective.com/storybook"
}
},
- "node_modules/@thepassle/axobject-query": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/@thepassle/axobject-query/-/axobject-query-4.0.0.tgz",
- "integrity": "sha512-/LHo+2jOdxs2WtbGocr3/lDSzsnjgCV6DSoBf4Y1Q0D24Hu67NPWuneoJimfHu5auqqSWi1fAvtln2013VxVqg==",
- "dev": true,
- "dependencies": {
- "dequal": "^2.0.3"
- }
- },
"node_modules/@tootallnate/quickjs-emscripten": {
"version": "0.23.0",
"resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz",
@@ -6667,6 +6802,15 @@
"@types/node": "*"
}
},
+ "node_modules/@types/hast": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz",
+ "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==",
+ "dev": true,
+ "dependencies": {
+ "@types/unist": "*"
+ }
+ },
"node_modules/@types/http-assert": {
"version": "1.5.5",
"resolved": "https://registry.npmjs.org/@types/http-assert/-/http-assert-1.5.5.tgz",
@@ -6798,9 +6942,9 @@
"dev": true
},
"node_modules/@types/node": {
- "version": "20.14.9",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.9.tgz",
- "integrity": "sha512-06OCtnTXtWOZBJlRApleWndH4JsRVs1pDCc8dLSQp+7PpUpX3ePdHyeNSFTeSe7FtKyQkrlPvHwJOW3SLd8Oyg==",
+ "version": "20.14.10",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.10.tgz",
+ "integrity": "sha512-MdiXf+nDuMvY0gJKxyfZ7/6UFsETO7mGKF54MVD/ekJS6HdFtpZFBgrh6Pseu64XTb2MLyFPlbW6hj8HYRQNOQ==",
"dev": true,
"dependencies": {
"undici-types": "~5.26.4"
@@ -6941,9 +7085,9 @@
"dev": 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=="
+ "version": "10.0.0",
+ "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-10.0.0.tgz",
+ "integrity": "sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ=="
},
"node_modules/@types/ws": {
"version": "7.4.7",
@@ -6980,16 +7124,16 @@
}
},
"node_modules/@typescript-eslint/eslint-plugin": {
- "version": "7.15.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.15.0.tgz",
- "integrity": "sha512-uiNHpyjZtFrLwLDpHnzaDlP3Tt6sGMqTCiqmxaN4n4RP0EfYZDODJyddiFDF44Hjwxr5xAcaYxVKm9QKQFJFLA==",
+ "version": "7.16.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.16.1.tgz",
+ "integrity": "sha512-SxdPak/5bO0EnGktV05+Hq8oatjAYVY3Zh2bye9pGZy6+jwyR3LG3YKkV4YatlsgqXP28BTeVm9pqwJM96vf2A==",
"dev": true,
"dependencies": {
"@eslint-community/regexpp": "^4.10.0",
- "@typescript-eslint/scope-manager": "7.15.0",
- "@typescript-eslint/type-utils": "7.15.0",
- "@typescript-eslint/utils": "7.15.0",
- "@typescript-eslint/visitor-keys": "7.15.0",
+ "@typescript-eslint/scope-manager": "7.16.1",
+ "@typescript-eslint/type-utils": "7.16.1",
+ "@typescript-eslint/utils": "7.16.1",
+ "@typescript-eslint/visitor-keys": "7.16.1",
"graphemer": "^1.4.0",
"ignore": "^5.3.1",
"natural-compare": "^1.4.0",
@@ -7012,161 +7156,16 @@
}
}
},
- "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/scope-manager": {
- "version": "7.15.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.15.0.tgz",
- "integrity": "sha512-Q/1yrF/XbxOTvttNVPihxh1b9fxamjEoz2Os/Pe38OHwxC24CyCqXxGTOdpb4lt6HYtqw9HetA/Rf6gDGaMPlw==",
- "dev": true,
- "dependencies": {
- "@typescript-eslint/types": "7.15.0",
- "@typescript-eslint/visitor-keys": "7.15.0"
- },
- "engines": {
- "node": "^18.18.0 || >=20.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/types": {
- "version": "7.15.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.15.0.tgz",
- "integrity": "sha512-aV1+B1+ySXbQH0pLK0rx66I3IkiZNidYobyfn0WFsdGhSXw+P3YOqeTq5GED458SfB24tg+ux3S+9g118hjlTw==",
- "dev": true,
- "engines": {
- "node": "^18.18.0 || >=20.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/typescript-estree": {
- "version": "7.15.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.15.0.tgz",
- "integrity": "sha512-gjyB/rHAopL/XxfmYThQbXbzRMGhZzGw6KpcMbfe8Q3nNQKStpxnUKeXb0KiN/fFDR42Z43szs6rY7eHk0zdGQ==",
- "dev": true,
- "dependencies": {
- "@typescript-eslint/types": "7.15.0",
- "@typescript-eslint/visitor-keys": "7.15.0",
- "debug": "^4.3.4",
- "globby": "^11.1.0",
- "is-glob": "^4.0.3",
- "minimatch": "^9.0.4",
- "semver": "^7.6.0",
- "ts-api-utils": "^1.3.0"
- },
- "engines": {
- "node": "^18.18.0 || >=20.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/utils": {
- "version": "7.15.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.15.0.tgz",
- "integrity": "sha512-hfDMDqaqOqsUVGiEPSMLR/AjTSCsmJwjpKkYQRo1FNbmW4tBwBspYDwO9eh7sKSTwMQgBw9/T4DHudPaqshRWA==",
- "dev": true,
- "dependencies": {
- "@eslint-community/eslint-utils": "^4.4.0",
- "@typescript-eslint/scope-manager": "7.15.0",
- "@typescript-eslint/types": "7.15.0",
- "@typescript-eslint/typescript-estree": "7.15.0"
- },
- "engines": {
- "node": "^18.18.0 || >=20.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "eslint": "^8.56.0"
- }
- },
- "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": {
- "version": "7.15.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.15.0.tgz",
- "integrity": "sha512-Hqgy/ETgpt2L5xueA/zHHIl4fJI2O4XUE9l4+OIfbJIRSnTJb/QscncdqqZzofQegIJugRIF57OJea1khw2SDw==",
- "dev": true,
- "dependencies": {
- "@typescript-eslint/types": "7.15.0",
- "eslint-visitor-keys": "^3.4.3"
- },
- "engines": {
- "node": "^18.18.0 || >=20.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/@typescript-eslint/eslint-plugin/node_modules/brace-expansion": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
- "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
- "dev": true,
- "dependencies": {
- "balanced-match": "^1.0.0"
- }
- },
- "node_modules/@typescript-eslint/eslint-plugin/node_modules/eslint-visitor-keys": {
- "version": "3.4.3",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
- "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
- "dev": true,
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/@typescript-eslint/eslint-plugin/node_modules/minimatch": {
- "version": "9.0.5",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
- "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
- "dev": true,
- "dependencies": {
- "brace-expansion": "^2.0.1"
- },
- "engines": {
- "node": ">=16 || 14 >=14.17"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": {
- "version": "7.6.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
- "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
- "dev": true,
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/@typescript-eslint/parser": {
- "version": "7.15.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.15.0.tgz",
- "integrity": "sha512-k9fYuQNnypLFcqORNClRykkGOMOj+pV6V91R4GO/l1FDGwpqmSwoOQrOHo3cGaH63e+D3ZiCAOsuS/D2c99j/A==",
+ "version": "7.16.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.16.1.tgz",
+ "integrity": "sha512-u+1Qx86jfGQ5i4JjK33/FnawZRpsLxRnKzGE6EABZ40KxVT/vWsiZFEBBHjFOljmmV3MBYOHEKi0Jm9hbAOClA==",
"dev": true,
"dependencies": {
- "@typescript-eslint/scope-manager": "7.15.0",
- "@typescript-eslint/types": "7.15.0",
- "@typescript-eslint/typescript-estree": "7.15.0",
- "@typescript-eslint/visitor-keys": "7.15.0",
+ "@typescript-eslint/scope-manager": "7.16.1",
+ "@typescript-eslint/types": "7.16.1",
+ "@typescript-eslint/typescript-estree": "7.16.1",
+ "@typescript-eslint/visitor-keys": "7.16.1",
"debug": "^4.3.4"
},
"engines": {
@@ -7185,140 +7184,17 @@
}
}
},
- "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": {
- "version": "7.15.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.15.0.tgz",
- "integrity": "sha512-Q/1yrF/XbxOTvttNVPihxh1b9fxamjEoz2Os/Pe38OHwxC24CyCqXxGTOdpb4lt6HYtqw9HetA/Rf6gDGaMPlw==",
- "dev": true,
- "dependencies": {
- "@typescript-eslint/types": "7.15.0",
- "@typescript-eslint/visitor-keys": "7.15.0"
- },
- "engines": {
- "node": "^18.18.0 || >=20.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": {
- "version": "7.15.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.15.0.tgz",
- "integrity": "sha512-aV1+B1+ySXbQH0pLK0rx66I3IkiZNidYobyfn0WFsdGhSXw+P3YOqeTq5GED458SfB24tg+ux3S+9g118hjlTw==",
- "dev": true,
- "engines": {
- "node": "^18.18.0 || >=20.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": {
- "version": "7.15.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.15.0.tgz",
- "integrity": "sha512-gjyB/rHAopL/XxfmYThQbXbzRMGhZzGw6KpcMbfe8Q3nNQKStpxnUKeXb0KiN/fFDR42Z43szs6rY7eHk0zdGQ==",
- "dev": true,
- "dependencies": {
- "@typescript-eslint/types": "7.15.0",
- "@typescript-eslint/visitor-keys": "7.15.0",
- "debug": "^4.3.4",
- "globby": "^11.1.0",
- "is-glob": "^4.0.3",
- "minimatch": "^9.0.4",
- "semver": "^7.6.0",
- "ts-api-utils": "^1.3.0"
- },
- "engines": {
- "node": "^18.18.0 || >=20.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": {
- "version": "7.15.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.15.0.tgz",
- "integrity": "sha512-Hqgy/ETgpt2L5xueA/zHHIl4fJI2O4XUE9l4+OIfbJIRSnTJb/QscncdqqZzofQegIJugRIF57OJea1khw2SDw==",
- "dev": true,
- "dependencies": {
- "@typescript-eslint/types": "7.15.0",
- "eslint-visitor-keys": "^3.4.3"
- },
- "engines": {
- "node": "^18.18.0 || >=20.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/@typescript-eslint/parser/node_modules/brace-expansion": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
- "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
- "dev": true,
- "dependencies": {
- "balanced-match": "^1.0.0"
- }
- },
- "node_modules/@typescript-eslint/parser/node_modules/eslint-visitor-keys": {
- "version": "3.4.3",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
- "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
- "dev": true,
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/@typescript-eslint/parser/node_modules/minimatch": {
- "version": "9.0.5",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
- "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
- "dev": true,
- "dependencies": {
- "brace-expansion": "^2.0.1"
- },
- "engines": {
- "node": ">=16 || 14 >=14.17"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/@typescript-eslint/parser/node_modules/semver": {
- "version": "7.6.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
- "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
- "dev": true,
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/@typescript-eslint/scope-manager": {
- "version": "5.62.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz",
- "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==",
+ "version": "7.16.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.16.1.tgz",
+ "integrity": "sha512-nYpyv6ALte18gbMz323RM+vpFpTjfNdyakbf3nsLvF43uF9KeNC289SUEW3QLZ1xPtyINJ1dIsZOuWuSRIWygw==",
"dev": true,
"dependencies": {
- "@typescript-eslint/types": "5.62.0",
- "@typescript-eslint/visitor-keys": "5.62.0"
+ "@typescript-eslint/types": "7.16.1",
+ "@typescript-eslint/visitor-keys": "7.16.1"
},
"engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ "node": "^18.18.0 || >=20.0.0"
},
"funding": {
"type": "opencollective",
@@ -7326,13 +7202,13 @@
}
},
"node_modules/@typescript-eslint/type-utils": {
- "version": "7.15.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.15.0.tgz",
- "integrity": "sha512-SkgriaeV6PDvpA6253PDVep0qCqgbO1IOBiycjnXsszNTVQe5flN5wR5jiczoEoDEnAqYFSFFc9al9BSGVltkg==",
+ "version": "7.16.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.16.1.tgz",
+ "integrity": "sha512-rbu/H2MWXN4SkjIIyWcmYBjlp55VT+1G3duFOIukTNFxr9PI35pLc2ydwAfejCEitCv4uztA07q0QWanOHC7dA==",
"dev": true,
"dependencies": {
- "@typescript-eslint/typescript-estree": "7.15.0",
- "@typescript-eslint/utils": "7.15.0",
+ "@typescript-eslint/typescript-estree": "7.16.1",
+ "@typescript-eslint/utils": "7.16.1",
"debug": "^4.3.4",
"ts-api-utils": "^1.3.0"
},
@@ -7352,27 +7228,10 @@
}
}
},
- "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/scope-manager": {
- "version": "7.15.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.15.0.tgz",
- "integrity": "sha512-Q/1yrF/XbxOTvttNVPihxh1b9fxamjEoz2Os/Pe38OHwxC24CyCqXxGTOdpb4lt6HYtqw9HetA/Rf6gDGaMPlw==",
- "dev": true,
- "dependencies": {
- "@typescript-eslint/types": "7.15.0",
- "@typescript-eslint/visitor-keys": "7.15.0"
- },
- "engines": {
- "node": "^18.18.0 || >=20.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": {
- "version": "7.15.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.15.0.tgz",
- "integrity": "sha512-aV1+B1+ySXbQH0pLK0rx66I3IkiZNidYobyfn0WFsdGhSXw+P3YOqeTq5GED458SfB24tg+ux3S+9g118hjlTw==",
+ "node_modules/@typescript-eslint/types": {
+ "version": "7.16.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.16.1.tgz",
+ "integrity": "sha512-AQn9XqCzUXd4bAVEsAXM/Izk11Wx2u4H3BAfQVhSfzfDOm/wAON9nP7J5rpkCxts7E5TELmN845xTUCQrD1xIQ==",
"dev": true,
"engines": {
"node": "^18.18.0 || >=20.0.0"
@@ -7382,14 +7241,14 @@
"url": "https://opencollective.com/typescript-eslint"
}
},
- "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": {
- "version": "7.15.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.15.0.tgz",
- "integrity": "sha512-gjyB/rHAopL/XxfmYThQbXbzRMGhZzGw6KpcMbfe8Q3nNQKStpxnUKeXb0KiN/fFDR42Z43szs6rY7eHk0zdGQ==",
+ "node_modules/@typescript-eslint/typescript-estree": {
+ "version": "7.16.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.16.1.tgz",
+ "integrity": "sha512-0vFPk8tMjj6apaAZ1HlwM8w7jbghC8jc1aRNJG5vN8Ym5miyhTQGMqU++kuBFDNKe9NcPeZ6x0zfSzV8xC1UlQ==",
"dev": true,
"dependencies": {
- "@typescript-eslint/types": "7.15.0",
- "@typescript-eslint/visitor-keys": "7.15.0",
+ "@typescript-eslint/types": "7.16.1",
+ "@typescript-eslint/visitor-keys": "7.16.1",
"debug": "^4.3.4",
"globby": "^11.1.0",
"is-glob": "^4.0.3",
@@ -7410,46 +7269,7 @@
}
}
},
- "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/utils": {
- "version": "7.15.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.15.0.tgz",
- "integrity": "sha512-hfDMDqaqOqsUVGiEPSMLR/AjTSCsmJwjpKkYQRo1FNbmW4tBwBspYDwO9eh7sKSTwMQgBw9/T4DHudPaqshRWA==",
- "dev": true,
- "dependencies": {
- "@eslint-community/eslint-utils": "^4.4.0",
- "@typescript-eslint/scope-manager": "7.15.0",
- "@typescript-eslint/types": "7.15.0",
- "@typescript-eslint/typescript-estree": "7.15.0"
- },
- "engines": {
- "node": "^18.18.0 || >=20.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "eslint": "^8.56.0"
- }
- },
- "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/visitor-keys": {
- "version": "7.15.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.15.0.tgz",
- "integrity": "sha512-Hqgy/ETgpt2L5xueA/zHHIl4fJI2O4XUE9l4+OIfbJIRSnTJb/QscncdqqZzofQegIJugRIF57OJea1khw2SDw==",
- "dev": true,
- "dependencies": {
- "@typescript-eslint/types": "7.15.0",
- "eslint-visitor-keys": "^3.4.3"
- },
- "engines": {
- "node": "^18.18.0 || >=20.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/@typescript-eslint/type-utils/node_modules/brace-expansion": {
+ "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
"integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
@@ -7458,19 +7278,7 @@
"balanced-match": "^1.0.0"
}
},
- "node_modules/@typescript-eslint/type-utils/node_modules/eslint-visitor-keys": {
- "version": "3.4.3",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
- "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
- "dev": true,
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/@typescript-eslint/type-utils/node_modules/minimatch": {
+ "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": {
"version": "9.0.5",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
"integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
@@ -7485,62 +7293,10 @@
"url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/@typescript-eslint/type-utils/node_modules/semver": {
- "version": "7.6.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
- "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
- "dev": true,
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@typescript-eslint/types": {
- "version": "5.62.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz",
- "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==",
- "dev": true,
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/@typescript-eslint/typescript-estree": {
- "version": "5.62.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz",
- "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==",
- "dev": true,
- "dependencies": {
- "@typescript-eslint/types": "5.62.0",
- "@typescript-eslint/visitor-keys": "5.62.0",
- "debug": "^4.3.4",
- "globby": "^11.1.0",
- "is-glob": "^4.0.3",
- "semver": "^7.3.7",
- "tsutils": "^3.21.0"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
"node_modules/@typescript-eslint/typescript-estree/node_modules/semver": {
- "version": "7.6.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
- "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
"dev": true,
"bin": {
"semver": "bin/semver.js"
@@ -7550,76 +7306,38 @@
}
},
"node_modules/@typescript-eslint/utils": {
- "version": "5.62.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz",
- "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==",
+ "version": "7.16.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.16.1.tgz",
+ "integrity": "sha512-WrFM8nzCowV0he0RlkotGDujx78xudsxnGMBHI88l5J8wEhED6yBwaSLP99ygfrzAjsQvcYQ94quDwI0d7E1fA==",
"dev": true,
"dependencies": {
- "@eslint-community/eslint-utils": "^4.2.0",
- "@types/json-schema": "^7.0.9",
- "@types/semver": "^7.3.12",
- "@typescript-eslint/scope-manager": "5.62.0",
- "@typescript-eslint/types": "5.62.0",
- "@typescript-eslint/typescript-estree": "5.62.0",
- "eslint-scope": "^5.1.1",
- "semver": "^7.3.7"
+ "@eslint-community/eslint-utils": "^4.4.0",
+ "@typescript-eslint/scope-manager": "7.16.1",
+ "@typescript-eslint/types": "7.16.1",
+ "@typescript-eslint/typescript-estree": "7.16.1"
},
"engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ "node": "^18.18.0 || >=20.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/typescript-eslint"
},
"peerDependencies": {
- "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
- }
- },
- "node_modules/@typescript-eslint/utils/node_modules/eslint-scope": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
- "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
- "dev": true,
- "dependencies": {
- "esrecurse": "^4.3.0",
- "estraverse": "^4.1.1"
- },
- "engines": {
- "node": ">=8.0.0"
- }
- },
- "node_modules/@typescript-eslint/utils/node_modules/estraverse": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
- "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
- "dev": true,
- "engines": {
- "node": ">=4.0"
- }
- },
- "node_modules/@typescript-eslint/utils/node_modules/semver": {
- "version": "7.6.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
- "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
- "dev": true,
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
+ "eslint": "^8.56.0"
}
},
"node_modules/@typescript-eslint/visitor-keys": {
- "version": "5.62.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz",
- "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==",
+ "version": "7.16.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.16.1.tgz",
+ "integrity": "sha512-Qlzzx4sE4u3FsHTPQAAQFJFNOuqtuY0LFrZHwQ8IHK705XxBiWOFkfKRWu6niB7hwfgnwIpO4jTC75ozW1PHWg==",
"dev": true,
"dependencies": {
- "@typescript-eslint/types": "5.62.0",
- "eslint-visitor-keys": "^3.3.0"
+ "@typescript-eslint/types": "7.16.1",
+ "eslint-visitor-keys": "^3.4.3"
},
"engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ "node": "^18.18.0 || >=20.0.0"
},
"funding": {
"type": "opencollective",
@@ -7642,6 +7360,10 @@
"resolved": "src/packages/block",
"link": true
},
+ "node_modules/@umbraco-backoffice/code-editor": {
+ "resolved": "src/packages/code-editor",
+ "link": true
+ },
"node_modules/@umbraco-backoffice/core": {
"resolved": "src/packages/core",
"link": true
@@ -7670,6 +7392,14 @@
"resolved": "src/packages/media",
"link": true
},
+ "node_modules/@umbraco-backoffice/members": {
+ "resolved": "src/packages/members",
+ "link": true
+ },
+ "node_modules/@umbraco-backoffice/multi-url-picker": {
+ "resolved": "src/packages/multi-url-picker",
+ "link": true
+ },
"node_modules/@umbraco-backoffice/property-editors": {
"resolved": "src/packages/property-editors",
"link": true
@@ -7686,819 +7416,823 @@
"resolved": "src/packages/umbraco-news",
"link": true
},
+ "node_modules/@umbraco-backoffice/user": {
+ "resolved": "src/packages/user",
+ "link": true
+ },
"node_modules/@umbraco-backoffice/webhook": {
"resolved": "src/packages/webhook",
"link": true
},
"node_modules/@umbraco-ui/uui": {
- "version": "1.8.2",
- "resolved": "https://registry.npmjs.org/@umbraco-ui/uui/-/uui-1.8.2.tgz",
- "integrity": "sha512-uJvF+YcqwivhoUJnVpT7Na3/8toyfsnBj34/DVh97BIMv7gsWL+ijQ/6gS5VlDMZKEMeK74DtnwzdDY3ahL67Q==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui/-/uui-1.9.0.tgz",
+ "integrity": "sha512-+Jr/TdvGfiVbVfYNZIDjozLvQ2C5pUVgTl41Z7kofrV31a0y9dzjOrJrB7PQQXKxYEbxg41SbZBhC3it7GA1og==",
"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.2",
- "@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.2",
- "@umbraco-ui/uui-card-user": "1.8.0",
- "@umbraco-ui/uui-caret": "1.8.0",
- "@umbraco-ui/uui-checkbox": "1.8.2",
- "@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.2",
- "@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.2",
- "@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.2",
- "@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.2",
- "@umbraco-ui/uui-visually-hidden": "1.8.0"
+ "@umbraco-ui/uui-action-bar": "1.9.0",
+ "@umbraco-ui/uui-avatar": "1.9.0",
+ "@umbraco-ui/uui-avatar-group": "1.9.0",
+ "@umbraco-ui/uui-badge": "1.9.0",
+ "@umbraco-ui/uui-base": "1.9.0",
+ "@umbraco-ui/uui-boolean-input": "1.9.0",
+ "@umbraco-ui/uui-box": "1.9.0",
+ "@umbraco-ui/uui-breadcrumbs": "1.9.0",
+ "@umbraco-ui/uui-button": "1.9.0",
+ "@umbraco-ui/uui-button-group": "1.9.0",
+ "@umbraco-ui/uui-button-inline-create": "1.9.0",
+ "@umbraco-ui/uui-card": "1.9.0",
+ "@umbraco-ui/uui-card-block-type": "1.9.0",
+ "@umbraco-ui/uui-card-content-node": "1.9.0",
+ "@umbraco-ui/uui-card-media": "1.9.0",
+ "@umbraco-ui/uui-card-user": "1.9.0",
+ "@umbraco-ui/uui-caret": "1.9.0",
+ "@umbraco-ui/uui-checkbox": "1.9.0",
+ "@umbraco-ui/uui-color-area": "1.9.0",
+ "@umbraco-ui/uui-color-picker": "1.9.0",
+ "@umbraco-ui/uui-color-slider": "1.9.0",
+ "@umbraco-ui/uui-color-swatch": "1.9.0",
+ "@umbraco-ui/uui-color-swatches": "1.9.0",
+ "@umbraco-ui/uui-combobox": "1.9.0",
+ "@umbraco-ui/uui-combobox-list": "1.9.0",
+ "@umbraco-ui/uui-css": "1.9.0",
+ "@umbraco-ui/uui-dialog": "1.9.0",
+ "@umbraco-ui/uui-dialog-layout": "1.9.0",
+ "@umbraco-ui/uui-file-dropzone": "1.9.0",
+ "@umbraco-ui/uui-file-preview": "1.9.0",
+ "@umbraco-ui/uui-form": "1.9.0",
+ "@umbraco-ui/uui-form-layout-item": "1.9.0",
+ "@umbraco-ui/uui-form-validation-message": "1.9.0",
+ "@umbraco-ui/uui-icon": "1.9.0",
+ "@umbraco-ui/uui-icon-registry": "1.9.0",
+ "@umbraco-ui/uui-icon-registry-essential": "1.9.0",
+ "@umbraco-ui/uui-input": "1.9.0",
+ "@umbraco-ui/uui-input-file": "1.9.0",
+ "@umbraco-ui/uui-input-lock": "1.9.0",
+ "@umbraco-ui/uui-input-password": "1.9.0",
+ "@umbraco-ui/uui-keyboard-shortcut": "1.9.0",
+ "@umbraco-ui/uui-label": "1.9.0",
+ "@umbraco-ui/uui-loader": "1.9.0",
+ "@umbraco-ui/uui-loader-bar": "1.9.0",
+ "@umbraco-ui/uui-loader-circle": "1.9.0",
+ "@umbraco-ui/uui-menu-item": "1.9.0",
+ "@umbraco-ui/uui-modal": "1.9.0",
+ "@umbraco-ui/uui-pagination": "1.9.0",
+ "@umbraco-ui/uui-popover": "1.9.0",
+ "@umbraco-ui/uui-popover-container": "1.9.0",
+ "@umbraco-ui/uui-progress-bar": "1.9.0",
+ "@umbraco-ui/uui-radio": "1.9.0",
+ "@umbraco-ui/uui-range-slider": "1.9.0",
+ "@umbraco-ui/uui-ref": "1.9.0",
+ "@umbraco-ui/uui-ref-list": "1.9.0",
+ "@umbraco-ui/uui-ref-node": "1.9.0",
+ "@umbraco-ui/uui-ref-node-data-type": "1.9.0",
+ "@umbraco-ui/uui-ref-node-document-type": "1.9.0",
+ "@umbraco-ui/uui-ref-node-form": "1.9.0",
+ "@umbraco-ui/uui-ref-node-member": "1.9.0",
+ "@umbraco-ui/uui-ref-node-package": "1.9.0",
+ "@umbraco-ui/uui-ref-node-user": "1.9.0",
+ "@umbraco-ui/uui-scroll-container": "1.9.0",
+ "@umbraco-ui/uui-select": "1.9.0",
+ "@umbraco-ui/uui-slider": "1.9.0",
+ "@umbraco-ui/uui-symbol-expand": "1.9.0",
+ "@umbraco-ui/uui-symbol-file": "1.9.0",
+ "@umbraco-ui/uui-symbol-file-dropzone": "1.9.0",
+ "@umbraco-ui/uui-symbol-file-thumbnail": "1.9.0",
+ "@umbraco-ui/uui-symbol-folder": "1.9.0",
+ "@umbraco-ui/uui-symbol-lock": "1.9.0",
+ "@umbraco-ui/uui-symbol-more": "1.9.0",
+ "@umbraco-ui/uui-symbol-sort": "1.9.0",
+ "@umbraco-ui/uui-table": "1.9.0",
+ "@umbraco-ui/uui-tabs": "1.9.0",
+ "@umbraco-ui/uui-tag": "1.9.0",
+ "@umbraco-ui/uui-textarea": "1.9.0",
+ "@umbraco-ui/uui-toast-notification": "1.9.0",
+ "@umbraco-ui/uui-toast-notification-container": "1.9.0",
+ "@umbraco-ui/uui-toast-notification-layout": "1.9.0",
+ "@umbraco-ui/uui-toggle": "1.9.0",
+ "@umbraco-ui/uui-visually-hidden": "1.9.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==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-action-bar/-/uui-action-bar-1.9.0.tgz",
+ "integrity": "sha512-zC04eyzhpMOXb564aW02ck8ZnsdyuPvIUuarFQ35jSXJhi0PBG30vFKwTsykrEJUIctbfSX/TnhFBfxiJwBwiw==",
"dependencies": {
- "@umbraco-ui/uui-base": "1.8.0",
- "@umbraco-ui/uui-button-group": "1.8.0"
+ "@umbraco-ui/uui-base": "1.9.0",
+ "@umbraco-ui/uui-button-group": "1.9.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==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-avatar/-/uui-avatar-1.9.0.tgz",
+ "integrity": "sha512-dRRT0Md3nIeBriY2Ku0butfH4DPJ+sijgy4cx6d1nQLRi0vFZkvHlWxcNw6642Ma6eYs5aTxbYjqjj23+xPWTw==",
"dependencies": {
- "@umbraco-ui/uui-base": "1.8.0"
+ "@umbraco-ui/uui-base": "1.9.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==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-avatar-group/-/uui-avatar-group-1.9.0.tgz",
+ "integrity": "sha512-PsOeG93AADsc9KrRueEa8gblTlRJKn+QgPc0is0y3Mu8kT913a+e5IIMkJoPwu/bzEZGVWaJOUBpUjmwhk422w==",
"dependencies": {
- "@umbraco-ui/uui-avatar": "1.8.0",
- "@umbraco-ui/uui-base": "1.8.0"
+ "@umbraco-ui/uui-avatar": "1.9.0",
+ "@umbraco-ui/uui-base": "1.9.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==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-badge/-/uui-badge-1.9.0.tgz",
+ "integrity": "sha512-SLJUYQFBweGk6HqkLtzOZ6zQgUOHOQW2yOqcfu2fEnvX/PCRQyPuHOYLVqXbLR3ucUBktYcCon0Ut3LiVhTIoQ==",
"dependencies": {
- "@umbraco-ui/uui-base": "1.8.0"
+ "@umbraco-ui/uui-base": "1.9.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==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-base/-/uui-base-1.9.0.tgz",
+ "integrity": "sha512-ZLL/Ukv+z3hGePNFY4GD5Ep4gMho4AW+EtfLfgEuzxOegQgamAVvYGDWkGRDk6ksGTqrgtHIqmZiKBnnPmR2MQ==",
"peerDependencies": {
"lit": ">=2.8.0"
}
},
"node_modules/@umbraco-ui/uui-boolean-input": {
- "version": "1.8.2",
- "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-boolean-input/-/uui-boolean-input-1.8.2.tgz",
- "integrity": "sha512-qXHoMJKuszaAK5EYSDk1ZoA64NpIejOLwXJXDML0m4ci9G2AGUslAJn1mn4Kni0xeGoSkHuvSxB1WL2AI69Zdw==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-boolean-input/-/uui-boolean-input-1.9.0.tgz",
+ "integrity": "sha512-vDkB5Z/aXlIKB99AKktjvEacD7f8xV0Wfx4N6LKY2ER1XS7fGc0OuLPcH8kOqomuc+D1/cd5qhc3UPSunmXnfQ==",
"dependencies": {
- "@umbraco-ui/uui-base": "1.8.0"
+ "@umbraco-ui/uui-base": "1.9.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==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-box/-/uui-box-1.9.0.tgz",
+ "integrity": "sha512-bVpW88FBh/vjDF0147bO062IT54n0oQk8JJftEGiaCCR6XMFlMoG++63kb8siXFrCuPz9kbVqRr6m3RsRXn7Qg==",
"dependencies": {
- "@umbraco-ui/uui-base": "1.8.0",
- "@umbraco-ui/uui-css": "1.8.0"
+ "@umbraco-ui/uui-base": "1.9.0",
+ "@umbraco-ui/uui-css": "1.9.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==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-breadcrumbs/-/uui-breadcrumbs-1.9.0.tgz",
+ "integrity": "sha512-gusTjjUbN2XI8sHNTlvi3o2HBf2mEf8UQtuZS2OJ5H8nFVgD8lmSSTwWV9Pc5wwZl6SvjK9AW4+00Rry5G7FdQ==",
"dependencies": {
- "@umbraco-ui/uui-base": "1.8.0"
+ "@umbraco-ui/uui-base": "1.9.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==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-button/-/uui-button-1.9.0.tgz",
+ "integrity": "sha512-R9/jFCXDGdsATY2nE5erp3q7h/YF1UsM2rzSwqcHuUVut7tx0f0qDB4jB0Q/MNRg1vstTVQS3+j/ZzVXCnyE0Q==",
"dependencies": {
- "@umbraco-ui/uui-base": "1.8.0",
- "@umbraco-ui/uui-icon-registry-essential": "1.8.0"
+ "@umbraco-ui/uui-base": "1.9.0",
+ "@umbraco-ui/uui-icon-registry-essential": "1.9.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==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-button-group/-/uui-button-group-1.9.0.tgz",
+ "integrity": "sha512-XpnithZ+dnv38LV+QZDgvfuJU05c6U04sDde5AFXKMQfoWkfupZ0wPuXv5oE6p8bSQ9vSoOa6Htr47SQZ2CrNg==",
"dependencies": {
- "@umbraco-ui/uui-base": "1.8.0"
+ "@umbraco-ui/uui-base": "1.9.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==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-button-inline-create/-/uui-button-inline-create-1.9.0.tgz",
+ "integrity": "sha512-V0qmvJgaOW3Ob1qYRlP2bIeSqCtMifVVgYQanJVnML4jMLDUPvONb4Y3nTO7jROCDSHLkn7pRsl9nJ0BMTccyw==",
"dependencies": {
- "@umbraco-ui/uui-base": "1.8.0"
+ "@umbraco-ui/uui-base": "1.9.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==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-card/-/uui-card-1.9.0.tgz",
+ "integrity": "sha512-ivu/Vt0vxhLeBCUGca8xSezqnV7ff0yekUuZQeNCGEajeck4WkuT+sEI/+BLsSVm/vjv88Ym0VfAwMCUPpK1Tg==",
"dependencies": {
- "@umbraco-ui/uui-base": "1.8.0"
+ "@umbraco-ui/uui-base": "1.9.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==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-card-block-type/-/uui-card-block-type-1.9.0.tgz",
+ "integrity": "sha512-jJz+n444QCjSawj9rP+0LV0zAbk/5LBzkSE+2frHo3SpkccB7J3fkQOaXwK+HpSwNqzgDbQviSlQ++UL7d1m2A==",
"dependencies": {
- "@umbraco-ui/uui-base": "1.8.0",
- "@umbraco-ui/uui-card": "1.8.0"
+ "@umbraco-ui/uui-base": "1.9.0",
+ "@umbraco-ui/uui-card": "1.9.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==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-card-content-node/-/uui-card-content-node-1.9.0.tgz",
+ "integrity": "sha512-E+g68A+2eBXQXicRx5ZCtK2vAgW4KecOaIJVhdC19X2R7ye1SRT7P+g0zYZS7KJoSfejK8c9N5bjy0s9rFRibw==",
"dependencies": {
- "@umbraco-ui/uui-base": "1.8.0",
- "@umbraco-ui/uui-card": "1.8.0",
- "@umbraco-ui/uui-icon": "1.8.0"
+ "@umbraco-ui/uui-base": "1.9.0",
+ "@umbraco-ui/uui-card": "1.9.0",
+ "@umbraco-ui/uui-icon": "1.9.0"
}
},
"node_modules/@umbraco-ui/uui-card-media": {
- "version": "1.8.2",
- "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-card-media/-/uui-card-media-1.8.2.tgz",
- "integrity": "sha512-rzuBoGXb8uoEE76vD+EHJkiMeTsPFGhf+bmE5Vw6oMfSJuQXyaFdQWFPu7MwKntRq63WUE47tqME9wqDl8VTaw==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-card-media/-/uui-card-media-1.9.0.tgz",
+ "integrity": "sha512-nbiQH5uqz2zNBjpAL8f7OhKldndAT+/Vw6clH9yxXrPyKpRVQ7DOCGqCh82x5pVtXfdM+kV5iyJe8JNd7oxWJQ==",
"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"
+ "@umbraco-ui/uui-base": "1.9.0",
+ "@umbraco-ui/uui-card": "1.9.0",
+ "@umbraco-ui/uui-symbol-file": "1.9.0",
+ "@umbraco-ui/uui-symbol-folder": "1.9.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==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-card-user/-/uui-card-user-1.9.0.tgz",
+ "integrity": "sha512-Ar6rY5CVJcU1LKB+hJhIwQc5M1qGr921rmLohaYTR8TCDr2dZ+M2563YzxeyNoRJnXWaOepHx4zU/iyj8ws2cg==",
"dependencies": {
- "@umbraco-ui/uui-avatar": "1.8.0",
- "@umbraco-ui/uui-base": "1.8.0",
- "@umbraco-ui/uui-card": "1.8.0"
+ "@umbraco-ui/uui-avatar": "1.9.0",
+ "@umbraco-ui/uui-base": "1.9.0",
+ "@umbraco-ui/uui-card": "1.9.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==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-caret/-/uui-caret-1.9.0.tgz",
+ "integrity": "sha512-YWAtbKfhm+x7fw5C4nFaMPFp9EFwhqL2UZDpVbYdTZ1i5RxJGYqPgiQZjxmGqMDZI40r8ZWwBWiXd8DTFN1z6w==",
"dependencies": {
- "@umbraco-ui/uui-base": "1.8.0"
+ "@umbraco-ui/uui-base": "1.9.0"
}
},
"node_modules/@umbraco-ui/uui-checkbox": {
- "version": "1.8.2",
- "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-checkbox/-/uui-checkbox-1.8.2.tgz",
- "integrity": "sha512-DKGmJw2JnqYDTY99ah94hBYI+PWC/dyRqpubuDuXecqFpUme1vzacu+rzjkp0VP97rUvO6v/OA4Sjjku3oDVuQ==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-checkbox/-/uui-checkbox-1.9.0.tgz",
+ "integrity": "sha512-juC5ncrgjzoBRNkHMEz5QRhFJ6shcBSePdNzXF5z2dsxJpjjewZhHpH58WvYdViMOdpjwJP8/tFUGyN8Yi5+6w==",
"dependencies": {
- "@umbraco-ui/uui-base": "1.8.0",
- "@umbraco-ui/uui-boolean-input": "1.8.2",
- "@umbraco-ui/uui-icon-registry-essential": "1.8.0"
+ "@umbraco-ui/uui-base": "1.9.0",
+ "@umbraco-ui/uui-boolean-input": "1.9.0",
+ "@umbraco-ui/uui-icon-registry-essential": "1.9.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==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-color-area/-/uui-color-area-1.9.0.tgz",
+ "integrity": "sha512-a5iE9nFzDsbA3EBBnJR6St4XTBAy82hFgtDLECGA7XwEY1jXyeH8zpL/ooluzMK3AYdYqGOQMboSzYFw9GvCCg==",
"dependencies": {
- "@umbraco-ui/uui-base": "1.8.0",
+ "@umbraco-ui/uui-base": "1.9.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==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-color-picker/-/uui-color-picker-1.9.0.tgz",
+ "integrity": "sha512-I9FT7Bkf6dvR8y2UTxeJLnhT9V59C8cWBBdhyGlH87/X5qZUgo9qQcKxzRm4Xn0MMeA7VH2wm5GFwKIodGPElQ==",
"dependencies": {
- "@umbraco-ui/uui-base": "1.8.0",
- "@umbraco-ui/uui-popover-container": "1.8.0",
+ "@umbraco-ui/uui-base": "1.9.0",
+ "@umbraco-ui/uui-popover-container": "1.9.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==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-color-slider/-/uui-color-slider-1.9.0.tgz",
+ "integrity": "sha512-HNh/dup4iFCiOdoIWLGsKp69UEzFYV66Q6N0MuLlZeI2pXKwzY7YAE12VUZ+YkDDOuuQJkuMziUvA4CcO6sTVg==",
"dependencies": {
- "@umbraco-ui/uui-base": "1.8.0"
+ "@umbraco-ui/uui-base": "1.9.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==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-color-swatch/-/uui-color-swatch-1.9.0.tgz",
+ "integrity": "sha512-zZ8KYeyUebFmG2RVeOhiOjUmrVrxellWxryfOwSDUj2FGwguS72MetrkxzuQEbN3P2zkrjiBSQlYpa6C1iwrhg==",
"dependencies": {
- "@umbraco-ui/uui-base": "1.8.0",
- "@umbraco-ui/uui-icon-registry-essential": "1.8.0",
+ "@umbraco-ui/uui-base": "1.9.0",
+ "@umbraco-ui/uui-icon-registry-essential": "1.9.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==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-color-swatches/-/uui-color-swatches-1.9.0.tgz",
+ "integrity": "sha512-uoOuMxVDHzxmPrYwLhAEmAo3u2mfbofBBu/BJxGN9Wcd1LXnjIyM9CYjfKSp1CD8S88pf5mNpkOPMarY2q3n6g==",
"dependencies": {
- "@umbraco-ui/uui-base": "1.8.0",
- "@umbraco-ui/uui-color-swatch": "1.8.0"
+ "@umbraco-ui/uui-base": "1.9.0",
+ "@umbraco-ui/uui-color-swatch": "1.9.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==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-combobox/-/uui-combobox-1.9.0.tgz",
+ "integrity": "sha512-Cd5Sz6ssV0tkNnAmYTqjTE0y5Q1IxPIUnRAjUOsbvavMVwAzyCLLdVxq5Kztr9wyk0TG5q6kCqle4w9wsA0vSg==",
"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"
+ "@umbraco-ui/uui-base": "1.9.0",
+ "@umbraco-ui/uui-button": "1.9.0",
+ "@umbraco-ui/uui-combobox-list": "1.9.0",
+ "@umbraco-ui/uui-icon": "1.9.0",
+ "@umbraco-ui/uui-popover-container": "1.9.0",
+ "@umbraco-ui/uui-scroll-container": "1.9.0",
+ "@umbraco-ui/uui-symbol-expand": "1.9.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==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-combobox-list/-/uui-combobox-list-1.9.0.tgz",
+ "integrity": "sha512-DpHJvnVmQ0Df/gnezr4xlUhFws93QcHSMIZqgpSKPk7PXawrX62pE6ma2sB8cs+8R12e72Ldd5dULuLsRo9v0Q==",
"dependencies": {
- "@umbraco-ui/uui-base": "1.8.0"
+ "@umbraco-ui/uui-base": "1.9.0"
}
},
"node_modules/@umbraco-ui/uui-css": {
- "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==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-css/-/uui-css-1.9.0.tgz",
+ "integrity": "sha512-JJcN6HN+jGGCJFUDnZIshNL1H38TYN8AuSfQoTzxECmgogEjZsIO9oihT3XQiha1SPMH+u2+4ddqFDSm5Vlofw==",
"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==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-dialog/-/uui-dialog-1.9.0.tgz",
+ "integrity": "sha512-VTn/L2N2TbPPbs0vLRUjqWtLelNwCApixsv21yDf5qJHORqYZCzEtgStFNGFC1EBg23nv+x+7CoMibOt3tejZg==",
"dependencies": {
- "@umbraco-ui/uui-base": "1.8.0",
- "@umbraco-ui/uui-css": "1.8.0"
+ "@umbraco-ui/uui-base": "1.9.0",
+ "@umbraco-ui/uui-css": "1.9.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==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-dialog-layout/-/uui-dialog-layout-1.9.0.tgz",
+ "integrity": "sha512-a+CmdXuObNNi2W+/3+r9QH/qYkzp4QqJgFbVkCP+H9yoZRsZhcHunL0mObGD7anBXYDe47a9ILAIWlT+EwoKKQ==",
"dependencies": {
- "@umbraco-ui/uui-base": "1.8.0"
+ "@umbraco-ui/uui-base": "1.9.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==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-file-dropzone/-/uui-file-dropzone-1.9.0.tgz",
+ "integrity": "sha512-ddKUYzVWjx612EmsgMuX/OQw5YnXxfb/MQ3CKMuKSUFJuq4scVCmI3p4B6ge426BLVqcDrQZkiB9M3RTTshtbQ==",
"dependencies": {
- "@umbraco-ui/uui-base": "1.8.0",
- "@umbraco-ui/uui-symbol-file-dropzone": "1.8.0"
+ "@umbraco-ui/uui-base": "1.9.0",
+ "@umbraco-ui/uui-symbol-file-dropzone": "1.9.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==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-file-preview/-/uui-file-preview-1.9.0.tgz",
+ "integrity": "sha512-k21nnCd4wA9MG3Rua2bEc/V19CZG7SHhRVAF9ejS1HqR0GG++d+TnBZBJOKol8AGEvePkiZfrQyqx63lraFX8A==",
"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"
+ "@umbraco-ui/uui-base": "1.9.0",
+ "@umbraco-ui/uui-symbol-file": "1.9.0",
+ "@umbraco-ui/uui-symbol-file-thumbnail": "1.9.0",
+ "@umbraco-ui/uui-symbol-folder": "1.9.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==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-form/-/uui-form-1.9.0.tgz",
+ "integrity": "sha512-nm/3ZgZKEThjVz80zU9yuI7QFc7isgjL028FeE/IPWVf/yUuJCA/ZAwGuUNygreYdPG5ni5ixV+IXEGaAKCHxQ==",
"dependencies": {
- "@umbraco-ui/uui-base": "1.8.0"
+ "@umbraco-ui/uui-base": "1.9.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==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-form-layout-item/-/uui-form-layout-item-1.9.0.tgz",
+ "integrity": "sha512-FNna+/6NUNQ418OG8j5+wsVH5wU+2LTnXrqL5otM+q2PoAmjfG/2vLFpfrjqLy1cljT4g/mF8bqQSLUwI42Ypw==",
"dependencies": {
- "@umbraco-ui/uui-base": "1.8.0",
- "@umbraco-ui/uui-form-validation-message": "1.8.1"
+ "@umbraco-ui/uui-base": "1.9.0",
+ "@umbraco-ui/uui-form-validation-message": "1.9.0"
}
},
"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==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-form-validation-message/-/uui-form-validation-message-1.9.0.tgz",
+ "integrity": "sha512-GGX7p76OWLSFqQGQc4RX9QfGd1a2mGasU/oEuIDJ6SHfqHQTtn4fclF8UWFHNPbeg3mqZLlk2XgDy0ZUr05qjw==",
"dependencies": {
- "@umbraco-ui/uui-base": "1.8.0"
+ "@umbraco-ui/uui-base": "1.9.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==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-icon/-/uui-icon-1.9.0.tgz",
+ "integrity": "sha512-7zfppwNgGRRIAWecVRvZFIRL3/hJqz1lk5T8Be8EQWkHb12d0TsZd2nmZsUfQTdbgj7o/LS0VePBvO/E2c9ICQ==",
"dependencies": {
- "@umbraco-ui/uui-base": "1.8.0"
+ "@umbraco-ui/uui-base": "1.9.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==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-icon-registry/-/uui-icon-registry-1.9.0.tgz",
+ "integrity": "sha512-ahKtq33kymvQFXolPmXtCQE9GKJc3gQIMpF9qr95iV5fLUgpTZrWkSqGAZxA9KainuQCBuFhF2ftCt1v4hcemg==",
"dependencies": {
- "@umbraco-ui/uui-base": "1.8.0",
- "@umbraco-ui/uui-icon": "1.8.0"
+ "@umbraco-ui/uui-base": "1.9.0",
+ "@umbraco-ui/uui-icon": "1.9.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==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-icon-registry-essential/-/uui-icon-registry-essential-1.9.0.tgz",
+ "integrity": "sha512-/XBdqvpCc63352YNdsgLfNpusbWUM42xtPGyfo44HjpD3et0fggeTLWG6PgC0qLHXVF8UOIOE31CC6fWAvEclg==",
"dependencies": {
- "@umbraco-ui/uui-base": "1.8.0",
- "@umbraco-ui/uui-icon-registry": "1.8.0"
+ "@umbraco-ui/uui-base": "1.9.0",
+ "@umbraco-ui/uui-icon-registry": "1.9.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==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-input/-/uui-input-1.9.0.tgz",
+ "integrity": "sha512-qBhY8Hx2lAinyk3WIGN1DhTWc412yYbE0eLi+8s3f7CdHb8EQJmP43qRAoeUS82uJ0PC/BxNkYPCR5xlPRH3Iw==",
"dependencies": {
- "@umbraco-ui/uui-base": "1.8.0"
+ "@umbraco-ui/uui-base": "1.9.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==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-input-file/-/uui-input-file-1.9.0.tgz",
+ "integrity": "sha512-NhPvPDd1PF3qLs2/QFffwIqL2Dq2Mz/tee1QYjV09yQXjHGn2GL7Uy2obQRnB8iIDBMfm4g46j1Ew7FZWIcl1Q==",
"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"
+ "@umbraco-ui/uui-action-bar": "1.9.0",
+ "@umbraco-ui/uui-base": "1.9.0",
+ "@umbraco-ui/uui-button": "1.9.0",
+ "@umbraco-ui/uui-file-dropzone": "1.9.0",
+ "@umbraco-ui/uui-icon": "1.9.0",
+ "@umbraco-ui/uui-icon-registry-essential": "1.9.0"
}
},
"node_modules/@umbraco-ui/uui-input-lock": {
- "version": "1.8.2",
- "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-input-lock/-/uui-input-lock-1.8.2.tgz",
- "integrity": "sha512-GfEV2KsZ+VbHhz1zKGQfYfeSAe7P29p2VaSJZDqZmRial85J3qFRK0dLEUnkQ1x0XGwiE+OprK+EsoFq1vNpdQ==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-input-lock/-/uui-input-lock-1.9.0.tgz",
+ "integrity": "sha512-OcLheKTRUWx8A6y5zyTjrZH6CIyrceWhsRYuEynDVB1ZjxDo7NiuOiUwpgZgnvaiwoJngGmq7JIGlqO2o25g0w==",
"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"
+ "@umbraco-ui/uui-base": "1.9.0",
+ "@umbraco-ui/uui-button": "1.9.0",
+ "@umbraco-ui/uui-icon": "1.9.0",
+ "@umbraco-ui/uui-input": "1.9.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==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-input-password/-/uui-input-password-1.9.0.tgz",
+ "integrity": "sha512-PDoio7RIX+G+LWip1hyMSytP0qXOBysA8x/JhDy1EbTQKa4oqRebip/8LHUf4gC/GRRwCF4sSywS2L1inG9ZDQ==",
"dependencies": {
- "@umbraco-ui/uui-base": "1.8.0",
- "@umbraco-ui/uui-icon-registry-essential": "1.8.0",
- "@umbraco-ui/uui-input": "1.8.0"
+ "@umbraco-ui/uui-base": "1.9.0",
+ "@umbraco-ui/uui-icon-registry-essential": "1.9.0",
+ "@umbraco-ui/uui-input": "1.9.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==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-keyboard-shortcut/-/uui-keyboard-shortcut-1.9.0.tgz",
+ "integrity": "sha512-DpD5fGxzGsB0/eaPssUEtIbFB2ZxaerV0Im+XnDp3iswwmFq1OfvHAJogokpHqdaHJPKspJA60JQgDlaDAbuvQ==",
"dependencies": {
- "@umbraco-ui/uui-base": "1.8.0"
+ "@umbraco-ui/uui-base": "1.9.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==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-label/-/uui-label-1.9.0.tgz",
+ "integrity": "sha512-rCdTckRcZMw0S3JF7d06L48CpKgAOFMarmrybwXOp/dCbQ6i4bCYtn4U6zZkjqaz6mt/PixoKuMtQ0tCJu7Dnw==",
"dependencies": {
- "@umbraco-ui/uui-base": "1.8.0"
+ "@umbraco-ui/uui-base": "1.9.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==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-loader/-/uui-loader-1.9.0.tgz",
+ "integrity": "sha512-qSDB1zJt4rbkURMLsBmoGaehntTBuz9WyrFwhEH4/VKiyf7xG6OAaFFM0/G90IXor9IgVxc3qbe6IQJ0u7ESOQ==",
"dependencies": {
- "@umbraco-ui/uui-base": "1.8.0"
+ "@umbraco-ui/uui-base": "1.9.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==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-loader-bar/-/uui-loader-bar-1.9.0.tgz",
+ "integrity": "sha512-vKn0JaddJmkHN8d315J6Maf1vRwLz+MxdAZPh8o7CkP6aar0EKdd5sf6SXQo2k6R06HIdOfe7Q9Hro/5p4GxIw==",
"dependencies": {
- "@umbraco-ui/uui-base": "1.8.0"
+ "@umbraco-ui/uui-base": "1.9.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==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-loader-circle/-/uui-loader-circle-1.9.0.tgz",
+ "integrity": "sha512-0Yh+awN4kfpwpa9VGGxJQmgu8i8NCNmGmDmgvNs1FFm0Mj5VXzqmFWJIlSva+DMou/XBbD43pCIdlQjzDxO9hQ==",
"dependencies": {
- "@umbraco-ui/uui-base": "1.8.0"
+ "@umbraco-ui/uui-base": "1.9.0"
}
},
"node_modules/@umbraco-ui/uui-menu-item": {
- "version": "1.8.2",
- "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-menu-item/-/uui-menu-item-1.8.2.tgz",
- "integrity": "sha512-8LaA1P+tSLvHqWGIpLv+75k9Xewq+CE5YscO/WFMPP6el+c/PtCyr2uhXhA/KVKqBorkV4+w7cgoANt79997Mw==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-menu-item/-/uui-menu-item-1.9.0.tgz",
+ "integrity": "sha512-1FSj8F8hXU0PBewEVmWnIJUPtL4ezQyGg2rdFwSS7uXplcnde3AIsF0ckSRjOHBOxltjfAd9GHhNoyY2Y8iuuw==",
"dependencies": {
- "@umbraco-ui/uui-base": "1.8.0",
- "@umbraco-ui/uui-loader-bar": "1.8.0",
- "@umbraco-ui/uui-symbol-expand": "1.8.0"
+ "@umbraco-ui/uui-base": "1.9.0",
+ "@umbraco-ui/uui-loader-bar": "1.9.0",
+ "@umbraco-ui/uui-symbol-expand": "1.9.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==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-modal/-/uui-modal-1.9.0.tgz",
+ "integrity": "sha512-CVNolN0Wkoym52YjiWmRqhdjYMupY2Jr2Mf9N3muQ9DetcSzsMNCGtoRQeWsBWSGzHvQ8gslyb2EjGa+8zttng==",
"dependencies": {
- "@umbraco-ui/uui-base": "1.8.0"
+ "@umbraco-ui/uui-base": "1.9.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==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-pagination/-/uui-pagination-1.9.0.tgz",
+ "integrity": "sha512-hIE+oud6vaNwU/lRqzj3ZWl4N0JIjwaAqTlpeekWKcnHOIPmqrOB9/OYJzYukjYD7QDW1K5YSWzVSktrAEH9DA==",
"dependencies": {
- "@umbraco-ui/uui-base": "1.8.0",
- "@umbraco-ui/uui-button": "1.8.0",
- "@umbraco-ui/uui-button-group": "1.8.0"
+ "@umbraco-ui/uui-base": "1.9.0",
+ "@umbraco-ui/uui-button": "1.9.0",
+ "@umbraco-ui/uui-button-group": "1.9.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==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-popover/-/uui-popover-1.9.0.tgz",
+ "integrity": "sha512-EEuDGY1luSfYGTNojB3+8WOcTQhQ11CGoBp7b+Jlwv43AMThgnHXERqWL3QxpA70ksovFuKuRoo7YpMTH7GV+Q==",
"dependencies": {
- "@umbraco-ui/uui-base": "1.8.0"
+ "@umbraco-ui/uui-base": "1.9.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==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-popover-container/-/uui-popover-container-1.9.0.tgz",
+ "integrity": "sha512-52D6vmbU6HP2LnLkk0JbNx4l75hemyFcbRSYwF5fVMt+GJOn05PZou01QYa3IInoObVELvbo1qmP6f3FAIoEYQ==",
"dependencies": {
- "@umbraco-ui/uui-base": "1.8.0"
+ "@umbraco-ui/uui-base": "1.9.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==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-progress-bar/-/uui-progress-bar-1.9.0.tgz",
+ "integrity": "sha512-H645Bj4KLUBNuCzKRDzdl3J+opRBspMMVW9/diBt9cwdAI7LMKpAD+xDyMpyjO3vTY1gWAAbgAtVtqmybZl+Vw==",
"dependencies": {
- "@umbraco-ui/uui-base": "1.8.0"
+ "@umbraco-ui/uui-base": "1.9.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==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-radio/-/uui-radio-1.9.0.tgz",
+ "integrity": "sha512-+GPjzxNWuZH6N5LC05nzcE1993I97r7PpczbS2MF6f2Fwa/2S+D9fF+y6pM3QPLtB9q4259pYJ8Y4RBjzVauPw==",
"dependencies": {
- "@umbraco-ui/uui-base": "1.8.0"
+ "@umbraco-ui/uui-base": "1.9.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==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-range-slider/-/uui-range-slider-1.9.0.tgz",
+ "integrity": "sha512-/N4mDqJDeT9JKIeRTMGxb+qB7uw2b/R41+7oAROuEa1295AsIPeaVp1my2MLte9s3p6kJF5F6gOIaAJ1S9euOw==",
"dependencies": {
- "@umbraco-ui/uui-base": "1.8.0"
+ "@umbraco-ui/uui-base": "1.9.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==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref/-/uui-ref-1.9.0.tgz",
+ "integrity": "sha512-eSS/oJV2ru+dLiyOdj3ErN9Gb2NFvXQBTXXMXb8Oq+Kkhijx7yABoJUTYgw7MDnzUGKXP9XnP/nrUnKjK5DCYw==",
"dependencies": {
- "@umbraco-ui/uui-base": "1.8.0"
+ "@umbraco-ui/uui-base": "1.9.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==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref-list/-/uui-ref-list-1.9.0.tgz",
+ "integrity": "sha512-yyoWcrm3fMKe/BRS2rUA1DECaSnTBtSrEIQLWGx8mqImuH+macQzDq58QNtbfyQ0UMyntYVSt10Ez00tBtkDTA==",
"dependencies": {
- "@umbraco-ui/uui-base": "1.8.0"
+ "@umbraco-ui/uui-base": "1.9.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==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref-node/-/uui-ref-node-1.9.0.tgz",
+ "integrity": "sha512-vo1SOxlqd5N/Dzu5L0oEAv0VHo8x9yUuzEEIyGJ+xb9JtVbyTpT+DbpubDZMGvL7cldL+FXMGxS0dC0c6qhWng==",
"dependencies": {
- "@umbraco-ui/uui-base": "1.8.0",
- "@umbraco-ui/uui-icon": "1.8.0",
- "@umbraco-ui/uui-ref": "1.8.0"
+ "@umbraco-ui/uui-base": "1.9.0",
+ "@umbraco-ui/uui-icon": "1.9.0",
+ "@umbraco-ui/uui-ref": "1.9.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==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref-node-data-type/-/uui-ref-node-data-type-1.9.0.tgz",
+ "integrity": "sha512-ubuFlwyZjf1sFgq13yD9Pr2zTLtQ6a8eqbN4uQTZ8J9THM187QeRnQFtvXnCgS6DHJLFZtDkZWh/Fl7DTLmkxA==",
"dependencies": {
- "@umbraco-ui/uui-base": "1.8.0",
- "@umbraco-ui/uui-ref-node": "1.8.0"
+ "@umbraco-ui/uui-base": "1.9.0",
+ "@umbraco-ui/uui-ref-node": "1.9.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==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref-node-document-type/-/uui-ref-node-document-type-1.9.0.tgz",
+ "integrity": "sha512-Fe2nEZyAMvUocYBBLl9+LJgXKLtbyxDK8HjHP4pvnZ3a8daNcj0LoquKoFGTSbRHZpxz6cZ7TPDpsgU0IhLLew==",
"dependencies": {
- "@umbraco-ui/uui-base": "1.8.0",
- "@umbraco-ui/uui-ref-node": "1.8.0"
+ "@umbraco-ui/uui-base": "1.9.0",
+ "@umbraco-ui/uui-ref-node": "1.9.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==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref-node-form/-/uui-ref-node-form-1.9.0.tgz",
+ "integrity": "sha512-NAYJ9o0e9NBh54qBP2RJXY2c1SR7h3kTAaRnyQ3x1ta4UL1Dqfud9Tgw3ZMI2oF/O0PAkiuCgqQAgGLYMK6dkw==",
"dependencies": {
- "@umbraco-ui/uui-base": "1.8.0",
- "@umbraco-ui/uui-ref-node": "1.8.0"
+ "@umbraco-ui/uui-base": "1.9.0",
+ "@umbraco-ui/uui-ref-node": "1.9.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==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref-node-member/-/uui-ref-node-member-1.9.0.tgz",
+ "integrity": "sha512-Q/yNYwU2ChJfJmTQKFSHNdd9LoKL4FjMFqkNoXKaOw5Qo6TnY8KBs6Eyk1mh6F+bXL/ElQHbPbmpRUfUeAsT4A==",
"dependencies": {
- "@umbraco-ui/uui-base": "1.8.0",
- "@umbraco-ui/uui-ref-node": "1.8.0"
+ "@umbraco-ui/uui-base": "1.9.0",
+ "@umbraco-ui/uui-ref-node": "1.9.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==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref-node-package/-/uui-ref-node-package-1.9.0.tgz",
+ "integrity": "sha512-pI7nj61zIprqST0qtFxVfOehyyDZG6jLRGeR1tpKnaMtfkt3fzQHzeMGNPTxr+TfwMx11AIiPK5/GddL4xcBqA==",
"dependencies": {
- "@umbraco-ui/uui-base": "1.8.0",
- "@umbraco-ui/uui-ref-node": "1.8.0"
+ "@umbraco-ui/uui-base": "1.9.0",
+ "@umbraco-ui/uui-ref-node": "1.9.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==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-ref-node-user/-/uui-ref-node-user-1.9.0.tgz",
+ "integrity": "sha512-vF5YDQeKhWHH++DZvG6hzfj+tGlxBpK6fqbS5DIL39MDR5i9CJy/+5ON/S1wOecDH0hjnUscYZRd5kTwzV7Pwg==",
"dependencies": {
- "@umbraco-ui/uui-base": "1.8.0",
- "@umbraco-ui/uui-ref-node": "1.8.0"
+ "@umbraco-ui/uui-base": "1.9.0",
+ "@umbraco-ui/uui-ref-node": "1.9.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==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-scroll-container/-/uui-scroll-container-1.9.0.tgz",
+ "integrity": "sha512-QXzGbFLZMJ5WUffNgiUyIIpGoOjv1JTGYRoRneWaygcwYdLmVY0mgre+6YVY0JfxkF/qMCT2BzWGK4ulmzGsmA==",
"dependencies": {
- "@umbraco-ui/uui-base": "1.8.0"
+ "@umbraco-ui/uui-base": "1.9.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==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-select/-/uui-select-1.9.0.tgz",
+ "integrity": "sha512-3wIrYb54w94LL1VmmmEIw/5AIn/RduQK4anz5kmqx6HQBbU13hEvSXC7ENEBrvbYXopWchN6nWPUjBLL+U3HrA==",
"dependencies": {
- "@umbraco-ui/uui-base": "1.8.0"
+ "@umbraco-ui/uui-base": "1.9.0"
}
},
"node_modules/@umbraco-ui/uui-slider": {
- "version": "1.8.2",
- "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-slider/-/uui-slider-1.8.2.tgz",
- "integrity": "sha512-fE1BVuCu6uDlQJh5leFSWxSPhCnJGlW3vskRMdplCLbvmFK0dYjYNbNzLyVCRsENlXJVEAkIavsdETJ784ALoQ==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-slider/-/uui-slider-1.9.0.tgz",
+ "integrity": "sha512-++a47cE7CbuXjTHfPO1mRTRozkbFG68WUtc0gF7FoEYTkVAYaWCgXQkH8o68bLZ1PSNLjA3bJzMJaiWyuytqsA==",
"dependencies": {
- "@umbraco-ui/uui-base": "1.8.0"
+ "@umbraco-ui/uui-base": "1.9.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==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-symbol-expand/-/uui-symbol-expand-1.9.0.tgz",
+ "integrity": "sha512-qqx2IUTqK/dKnB0S6Xh/aLUTI0As6ucns1GnvjSwqgYDbvPGkZn9cmVdeT1u/kL0ka6ZzIgzCbN97qCg08PfIA==",
"dependencies": {
- "@umbraco-ui/uui-base": "1.8.0"
+ "@umbraco-ui/uui-base": "1.9.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==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-symbol-file/-/uui-symbol-file-1.9.0.tgz",
+ "integrity": "sha512-J7FnTlm4fHg4JYrcHmEnuFBH8r18lXuxitBnQXIPYnsaxl0ByOM3GtsIfcDxgcvnICd5OLfH3u78Ce5GuwS24g==",
"dependencies": {
- "@umbraco-ui/uui-base": "1.8.0"
+ "@umbraco-ui/uui-base": "1.9.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==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-symbol-file-dropzone/-/uui-symbol-file-dropzone-1.9.0.tgz",
+ "integrity": "sha512-wSS9sGJqdCayx077rt0RswRT9VyzZnQE9rHMs/mxCpvaU9hFRDv6Rm4/Y7UUo2sDqvfjVOCmIYrdrJN9/lXLaQ==",
"dependencies": {
- "@umbraco-ui/uui-base": "1.8.0"
+ "@umbraco-ui/uui-base": "1.9.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==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-symbol-file-thumbnail/-/uui-symbol-file-thumbnail-1.9.0.tgz",
+ "integrity": "sha512-sNyqcxj8hmUlJ4PgzQ//6a7Uhlz0XNwbP09//sZr7c4mpno6uvqrvKzOH7cV0FFjLaGJVM1ck/7jTcETbdoh4A==",
"dependencies": {
- "@umbraco-ui/uui-base": "1.8.0"
+ "@umbraco-ui/uui-base": "1.9.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==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-symbol-folder/-/uui-symbol-folder-1.9.0.tgz",
+ "integrity": "sha512-ASLORLBwV5QHPBW+do0usOAUHPGKFhYTE44OMX4ZcGbu4oybHNOK1AmXQmWROgzF5bGAYiJkW1fIWWXvzRO+AA==",
"dependencies": {
- "@umbraco-ui/uui-base": "1.8.0"
+ "@umbraco-ui/uui-base": "1.9.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==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-symbol-lock/-/uui-symbol-lock-1.9.0.tgz",
+ "integrity": "sha512-bkHG9SOmUrjY4VHXjcZnJ1NpMk4ddcpTSnXn4temIIIYsX6H5itKC+js5rYQmUp/C/dmQ1bAMcK5kk1XYOrqtw==",
"dependencies": {
- "@umbraco-ui/uui-base": "1.8.0"
+ "@umbraco-ui/uui-base": "1.9.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==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-symbol-more/-/uui-symbol-more-1.9.0.tgz",
+ "integrity": "sha512-awCpspMwYRXARsKfwKHuzEwZX/pOInG6L6XQJ9sXhLZ4cPVErw1BWMjmTu2zZa/zOp+j9xlfgj4cTSYsl5wvnw==",
"dependencies": {
- "@umbraco-ui/uui-base": "1.8.0"
+ "@umbraco-ui/uui-base": "1.9.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==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-symbol-sort/-/uui-symbol-sort-1.9.0.tgz",
+ "integrity": "sha512-nkU9cMCyQ3MCsYJXaDP5kVI5z6THaDSBxaoOIddbpqQqxJ92VT8ehJ8kxepOG2ivuTvkYq3M8khWmIvwiuD5TA==",
"dependencies": {
- "@umbraco-ui/uui-base": "1.8.0"
+ "@umbraco-ui/uui-base": "1.9.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==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-table/-/uui-table-1.9.0.tgz",
+ "integrity": "sha512-ai2gRtsqiztU0VvRpkYoyCgKl7Pfpv8XriXSgIX1S9+GPcysh3yD7owZkLzToiiTKLdTajYsqCo8E0TocoXdKQ==",
"dependencies": {
- "@umbraco-ui/uui-base": "1.8.0"
+ "@umbraco-ui/uui-base": "1.9.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==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-tabs/-/uui-tabs-1.9.0.tgz",
+ "integrity": "sha512-96GFFi6ale9hBp44qPTFiXZPsZ2QHRrvQElEwh6f5l23BGh3vqdzRtrSRsdt88xMAw2Q7YYN1jiEVxyYwv2LDQ==",
"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"
+ "@umbraco-ui/uui-base": "1.9.0",
+ "@umbraco-ui/uui-button": "1.9.0",
+ "@umbraco-ui/uui-popover-container": "1.9.0",
+ "@umbraco-ui/uui-symbol-more": "1.9.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==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-tag/-/uui-tag-1.9.0.tgz",
+ "integrity": "sha512-yRwfeH6CQdZocg8mAP72CpfG55Nxeczp+XWBDpltQ4inrlk35ej5rGc8Ax1Yx9aVFpl+mk0RBjtLJNgB/cb6mQ==",
"dependencies": {
- "@umbraco-ui/uui-base": "1.8.0"
+ "@umbraco-ui/uui-base": "1.9.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==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-textarea/-/uui-textarea-1.9.0.tgz",
+ "integrity": "sha512-4OVSB/0LS3QUNXCUROPlLiPWVvTxZnlW+5dkO6GxR98mm2JVHk6z1g5hQVLT3LzKBHcqmwGXfgezqvFiwKFvFQ==",
"dependencies": {
- "@umbraco-ui/uui-base": "1.8.0"
+ "@umbraco-ui/uui-base": "1.9.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==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-toast-notification/-/uui-toast-notification-1.9.0.tgz",
+ "integrity": "sha512-lAjOE1iRdfZdht4z5G+ekGynNzTIK9e6oGCqdyxbnSLxyMhshXqxOFQrzFfcPz0crnDjyP+92TlnwB6CbR2NkQ==",
"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"
+ "@umbraco-ui/uui-base": "1.9.0",
+ "@umbraco-ui/uui-button": "1.9.0",
+ "@umbraco-ui/uui-css": "1.9.0",
+ "@umbraco-ui/uui-icon": "1.9.0",
+ "@umbraco-ui/uui-icon-registry-essential": "1.9.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==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-toast-notification-container/-/uui-toast-notification-container-1.9.0.tgz",
+ "integrity": "sha512-Suib+5z8jNdX0jOGbwKdPUXcPSHLC+WtrSBi0yHYMyXpeMiBfIKvTsZEncVTJQV/XvXViIDMircVfWbxKtQnHA==",
"dependencies": {
- "@umbraco-ui/uui-base": "1.8.0",
- "@umbraco-ui/uui-toast-notification": "1.8.0"
+ "@umbraco-ui/uui-base": "1.9.0",
+ "@umbraco-ui/uui-toast-notification": "1.9.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==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-toast-notification-layout/-/uui-toast-notification-layout-1.9.0.tgz",
+ "integrity": "sha512-h+Nap1g4hZ/2gZlGPURRfgTme8+qegsNsQ7+12s1ETM+bkKftqNBlT2otUZ5MbTbhOI8uxWSTJBGRIlgvgUB8A==",
"dependencies": {
- "@umbraco-ui/uui-base": "1.8.0",
- "@umbraco-ui/uui-css": "1.8.0"
+ "@umbraco-ui/uui-base": "1.9.0",
+ "@umbraco-ui/uui-css": "1.9.0"
}
},
"node_modules/@umbraco-ui/uui-toggle": {
- "version": "1.8.2",
- "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-toggle/-/uui-toggle-1.8.2.tgz",
- "integrity": "sha512-imjSbkHQy8pjzIOco2ts61sVtVLiu6JtXTaX8KxgSpGKZ/NofhJ48QbhRUx0qJ4l4Cm3KDC93x/2RzFG99LhkQ==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-toggle/-/uui-toggle-1.9.0.tgz",
+ "integrity": "sha512-6uJy7WFsNG3OlO4n7E2hq3y5jHuab4VF6WzoBFJde/Znb5noMZa2WrqtKmFIWpp0BT9V6aKOhxiKk+q1JYXeZw==",
"dependencies": {
- "@umbraco-ui/uui-base": "1.8.0",
- "@umbraco-ui/uui-boolean-input": "1.8.2"
+ "@umbraco-ui/uui-base": "1.9.0",
+ "@umbraco-ui/uui-boolean-input": "1.9.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==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@umbraco-ui/uui-visually-hidden/-/uui-visually-hidden-1.9.0.tgz",
+ "integrity": "sha512-NyTWgBocRMcHc21Uy0b/ACWpsx0cgyxND4sZJTXTTciB1CPOl2rKQpKChNkChn9XS3sBRPOJ+86CUEIZ4K14qQ==",
"dependencies": {
- "@umbraco-ui/uui-base": "1.8.0"
+ "@umbraco-ui/uui-base": "1.9.0"
}
},
"node_modules/@web/browser-logs": {
@@ -9564,15 +9298,6 @@
"node": ">=10"
}
},
- "node_modules/aria-query": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz",
- "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==",
- "dev": true,
- "dependencies": {
- "dequal": "^2.0.3"
- }
- },
"node_modules/array-back": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz",
@@ -10864,14 +10589,14 @@
}
},
"node_modules/command-line-usage": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-7.0.1.tgz",
- "integrity": "sha512-NCyznE//MuTjwi3y84QVUGEOT+P5oto1e1Pk/jFPVdPPfsG03qpTIl3yw6etR+v73d0lXsoojRpvbru2sqePxQ==",
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-7.0.2.tgz",
+ "integrity": "sha512-MwNFB8nxi3IVnzir+nkSIbDTU4H6ne26zqicO2eTt1wPrvdOAphPhnYqWOjxXKWYLNYDu4Z/r2ESEziEqKuOVg==",
"dev": true,
"dependencies": {
"array-back": "^6.2.2",
"chalk-template": "^0.4.0",
- "table-layout": "^3.0.0",
+ "table-layout": "^3.0.2",
"typical": "^7.1.1"
},
"engines": {
@@ -11585,36 +11310,10 @@
"node": ">=6.0.0"
}
},
- "node_modules/dom5": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/dom5/-/dom5-3.0.1.tgz",
- "integrity": "sha512-JPFiouQIr16VQ4dX6i0+Hpbg3H2bMKPmZ+WZgBOSSvOPx9QHwwY8sPzeM2baUtViESYto6wC2nuZOMC/6gulcA==",
- "dev": true,
- "dependencies": {
- "@types/parse5": "^2.2.34",
- "clone": "^2.1.0",
- "parse5": "^4.0.0"
- }
- },
- "node_modules/dom5/node_modules/@types/parse5": {
- "version": "2.2.34",
- "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-2.2.34.tgz",
- "integrity": "sha512-p3qOvaRsRpFyEmaS36RtLzpdxZZnmxGuT1GMgzkTtTJVFuEw7KFjGK83MFODpJExgX1bEzy9r0NYjMC3IMfi7w==",
- "dev": true,
- "dependencies": {
- "@types/node": "*"
- }
- },
- "node_modules/dom5/node_modules/parse5": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz",
- "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==",
- "dev": true
- },
"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=="
+ "version": "3.1.6",
+ "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.1.6.tgz",
+ "integrity": "sha512-cTOAhc36AalkjtBpfG6O8JimdTMWNXjiePT2xQH/ppBGi/4uIpmj8eKyIkMJErXWARyINV/sB38yf8JCLF5pbQ=="
},
"node_modules/dotenv": {
"version": "16.4.5",
@@ -11707,9 +11406,9 @@
}
},
"node_modules/electron-to-chromium": {
- "version": "1.4.816",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.816.tgz",
- "integrity": "sha512-EKH5X5oqC6hLmiS7/vYtZHZFTNdhsYG5NVPRN6Yn0kQHNBlT59+xSM8HBy66P5fxWpKgZbPqb+diC64ng295Jw==",
+ "version": "1.4.820",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.820.tgz",
+ "integrity": "sha512-kK/4O/YunacfboFEk/BDf7VO1HoPmDudLTJAU9NmXIOSjsV7qVIX3OrI4REZo0VmdqhcpUcncQc6N8Q3aEXlHg==",
"dev": true
},
"node_modules/element-internals-polyfill": {
@@ -11718,9 +11417,9 @@
"integrity": "sha512-SQLQNVY4wMdpnP/F/HtalJbpEenQd46Avtjm5hvUdeTs3QU0zHFNX5/AmtQIPPcfzePb0ipCkQGY4GwYJIhLJA=="
},
"node_modules/emoji-regex": {
- "version": "10.3.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz",
- "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==",
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
"dev": true
},
"node_modules/encodeurl": {
@@ -12030,16 +11729,16 @@
}
},
"node_modules/eslint": {
- "version": "9.6.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.6.0.tgz",
- "integrity": "sha512-ElQkdLMEEqQNM9Njff+2Y4q2afHk7JpkPvrd7Xh7xefwgQynqPxwf55J7di9+MEibWUGdNjFF9ITG9Pck5M84w==",
+ "version": "9.7.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.7.0.tgz",
+ "integrity": "sha512-FzJ9D/0nGiCGBf8UXO/IGLTgLVzIxze1zpfA8Ton2mjLovXdAPlYDv+MQDcqj3TmrhAGYfOpz9RfR+ent0AgAw==",
"dev": true,
"dependencies": {
"@eslint-community/eslint-utils": "^4.2.0",
- "@eslint-community/regexpp": "^4.6.1",
+ "@eslint-community/regexpp": "^4.11.0",
"@eslint/config-array": "^0.17.0",
"@eslint/eslintrc": "^3.1.0",
- "@eslint/js": "9.6.0",
+ "@eslint/js": "9.7.0",
"@humanwhocodes/module-importer": "^1.0.1",
"@humanwhocodes/retry": "^0.3.0",
"@nodelib/fs.walk": "^1.2.8",
@@ -12048,7 +11747,7 @@
"cross-spawn": "^7.0.2",
"debug": "^4.3.2",
"escape-string-regexp": "^4.0.0",
- "eslint-scope": "^8.0.1",
+ "eslint-scope": "^8.0.2",
"eslint-visitor-keys": "^4.0.0",
"espree": "^10.1.0",
"esquery": "^1.5.0",
@@ -12207,40 +11906,6 @@
"eslint": ">= 5"
}
},
- "node_modules/eslint-plugin-lit-a11y": {
- "version": "4.1.3",
- "resolved": "https://registry.npmjs.org/eslint-plugin-lit-a11y/-/eslint-plugin-lit-a11y-4.1.3.tgz",
- "integrity": "sha512-ndfGZU0RFKp9xqm17f94sQzjgVchDtYL1z/N0qG0otQiDtia1EUVCdd1eMlCeeUe6LTtfjV4iAsNU4r0bVB/Yw==",
- "dev": true,
- "dependencies": {
- "@thepassle/axobject-query": "^4.0.0",
- "aria-query": "^5.1.3",
- "axe-core": "^4.3.3",
- "dom5": "^3.0.1",
- "emoji-regex": "^10.2.1",
- "eslint-plugin-lit": "^1.10.1",
- "eslint-rule-extender": "0.0.1",
- "language-tags": "^1.0.5",
- "parse5": "^7.1.2",
- "parse5-htmlparser2-tree-adapter": "^6.0.1",
- "requireindex": "~1.2.0"
- },
- "peerDependencies": {
- "eslint": ">= 5"
- }
- },
- "node_modules/eslint-plugin-lit-a11y/node_modules/parse5": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz",
- "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==",
- "dev": true,
- "dependencies": {
- "entities": "^4.4.0"
- },
- "funding": {
- "url": "https://github.com/inikulin/parse5?sponsor=1"
- }
- },
"node_modules/eslint-plugin-local-rules": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/eslint-plugin-local-rules/-/eslint-plugin-local-rules-3.0.2.tgz",
@@ -12277,33 +11942,6 @@
}
}
},
- "node_modules/eslint-plugin-storybook": {
- "version": "0.8.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-storybook/-/eslint-plugin-storybook-0.8.0.tgz",
- "integrity": "sha512-CZeVO5EzmPY7qghO2t64oaFM+8FTaD4uzOEjHKp516exyTKo+skKAL9GI3QALS2BXhyALJjNtwbmr1XinGE8bA==",
- "dev": true,
- "dependencies": {
- "@storybook/csf": "^0.0.1",
- "@typescript-eslint/utils": "^5.62.0",
- "requireindex": "^1.2.0",
- "ts-dedent": "^2.2.0"
- },
- "engines": {
- "node": ">= 18"
- },
- "peerDependencies": {
- "eslint": ">=6"
- }
- },
- "node_modules/eslint-plugin-storybook/node_modules/@storybook/csf": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.0.1.tgz",
- "integrity": "sha512-USTLkZze5gkel8MYCujSRBVIrUQ3YPBrLOx7GNk/0wttvVtlzWXAq9eLbQ4p/NicGxP+3T7KPEMVV//g+yubpw==",
- "dev": true,
- "dependencies": {
- "lodash": "^4.17.15"
- }
- },
"node_modules/eslint-plugin-wc": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/eslint-plugin-wc/-/eslint-plugin-wc-2.1.0.tgz",
@@ -12317,23 +11955,10 @@
"eslint": ">=5"
}
},
- "node_modules/eslint-rule-extender": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/eslint-rule-extender/-/eslint-rule-extender-0.0.1.tgz",
- "integrity": "sha512-F0j1Twve3lamL3J0rRSVAynlp58sDPG39JFcQrM+u9Na7PmCgiPHNODh6YE9mduaGcsn3NBqbf6LZRj0cLr8Ng==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/kaicataldo"
- }
- },
"node_modules/eslint-scope": {
- "version": "8.0.1",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.0.1.tgz",
- "integrity": "sha512-pL8XjgP4ZOmmwfFE8mEhSxA7ZY4C+LWyqjQ3o4yWkkmD0qcMT9kkW3zWHOczhWcjTSgqycYAgwSlXvZltv65og==",
+ "version": "8.0.2",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.0.2.tgz",
+ "integrity": "sha512-6E4xmrTw5wtxnLA5wYL3WDfhZ/1bUBGOXV0zQvVRDOtrR8D0p6W7fs3JweNYhwRYeGvd/1CKX2se0/2s7Q/nJA==",
"dev": true,
"dependencies": {
"esrecurse": "^4.3.0",
@@ -12465,9 +12090,9 @@
}
},
"node_modules/esquery": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz",
- "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==",
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz",
+ "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==",
"dev": true,
"dependencies": {
"estraverse": "^5.1.0"
@@ -13034,9 +12659,9 @@
"dev": true
},
"node_modules/flow-parser": {
- "version": "0.238.3",
- "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.238.3.tgz",
- "integrity": "sha512-hNUhucq8V6KWSX1skXUS3vnDmrRNuKWzDvEVK5b+n97uMF32zj2y8pmcLDQEqlY5u926B0GYGWT/3XhwDJfLOQ==",
+ "version": "0.239.1",
+ "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.239.1.tgz",
+ "integrity": "sha512-topOrETNxJ6T2gAnQiWqAlzGPj8uI2wtmNOlDIMNB+qyvGJZ6R++STbUOTAYmvPhOMz2gXnXPH0hOvURYmrBow==",
"dev": true,
"engines": {
"node": ">=0.4.0"
@@ -13375,23 +13000,23 @@
"dev": true
},
"node_modules/glob": {
- "version": "10.4.2",
- "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.2.tgz",
- "integrity": "sha512-GwMlUF6PkPo3Gk21UxkCohOv0PLcIXVtKyLlpEI28R/cO/4eNOdmLk3CMW1wROV/WR/EsZOWAfBbBOqYvs88/w==",
+ "version": "11.0.0",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.0.tgz",
+ "integrity": "sha512-9UiX/Bl6J2yaBbxKoEBRm4Cipxgok8kQYcOPEhScPwebu2I0HoQOuYdIO6S3hLuWoZgpDpwQZMzTFxgpkyT76g==",
"dev": true,
"dependencies": {
"foreground-child": "^3.1.0",
- "jackspeak": "^3.1.2",
- "minimatch": "^9.0.4",
+ "jackspeak": "^4.0.1",
+ "minimatch": "^10.0.0",
"minipass": "^7.1.2",
"package-json-from-dist": "^1.0.0",
- "path-scurry": "^1.11.1"
+ "path-scurry": "^2.0.0"
},
"bin": {
"glob": "dist/esm/bin.mjs"
},
"engines": {
- "node": ">=16 || 14 >=14.18"
+ "node": "20 || >=22"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
@@ -13425,15 +13050,15 @@
}
},
"node_modules/glob/node_modules/minimatch": {
- "version": "9.0.5",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
- "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+ "version": "10.0.1",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz",
+ "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==",
"dev": true,
"dependencies": {
"brace-expansion": "^2.0.1"
},
"engines": {
- "node": ">=16 || 14 >=14.17"
+ "node": "20 || >=22"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
@@ -14716,15 +14341,15 @@
}
},
"node_modules/jackspeak": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.0.tgz",
- "integrity": "sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==",
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.0.1.tgz",
+ "integrity": "sha512-cub8rahkh0Q/bw1+GxP7aeSe29hHHn2V4m29nnDlvCdlgU+3UGxkZp7Z53jLUdpX3jdTO0nJZUDl3xvbWc2Xog==",
"dev": true,
"dependencies": {
"@isaacs/cliui": "^8.0.2"
},
"engines": {
- "node": ">=14"
+ "node": "20 || >=22"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
@@ -15360,24 +14985,6 @@
"node": ">= 0.6"
}
},
- "node_modules/language-subtag-registry": {
- "version": "0.3.23",
- "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz",
- "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==",
- "dev": true
- },
- "node_modules/language-tags": {
- "version": "1.0.9",
- "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz",
- "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==",
- "dev": true,
- "dependencies": {
- "language-subtag-registry": "^0.3.20"
- },
- "engines": {
- "node": ">=0.10"
- }
- },
"node_modules/lazy-universal-dotenv": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/lazy-universal-dotenv/-/lazy-universal-dotenv-4.0.0.tgz",
@@ -15674,9 +15281,9 @@
}
},
"node_modules/lucide-static": {
- "version": "0.379.0",
- "resolved": "https://registry.npmjs.org/lucide-static/-/lucide-static-0.379.0.tgz",
- "integrity": "sha512-oe0EPcRHVb0ua/XHs7B63fgtGI/8B/MchpXr6LZcXEQlPmqJeOua207Ju2f08g/yc8+LelngiFM0mD/B7O6mZA==",
+ "version": "0.408.0",
+ "resolved": "https://registry.npmjs.org/lucide-static/-/lucide-static-0.408.0.tgz",
+ "integrity": "sha512-XJioz3vKagiyA6qMDWkYqU1RUS/bMjqio0/TCOItievnV/C4wwgJZGAbk6eVDe6Wv+d0e9NbhS7Y8yMEpGkElQ==",
"dev": true
},
"node_modules/lunr": {
@@ -15770,9 +15377,9 @@
}
},
"node_modules/marked": {
- "version": "12.0.2",
- "resolved": "https://registry.npmjs.org/marked/-/marked-12.0.2.tgz",
- "integrity": "sha512-qXUm7e/YKFoqFPYPa3Ukg9xlI5cyAtGmyEIzMfW//m6kXwCy2Ps9DYf5ioijFKQ8qyuscrHoY04iJGctu2Kg0Q==",
+ "version": "13.0.2",
+ "resolved": "https://registry.npmjs.org/marked/-/marked-13.0.2.tgz",
+ "integrity": "sha512-J6CPjP8pS5sgrRqxVRvkCIkZ6MFdRIjDkwUwgJ9nL2fbmM6qGQeB2C16hi8Cc9BOzj6xXzy0jyi0iPIfnMHYzA==",
"bin": {
"marked": "bin/marked.js"
},
@@ -16777,9 +16384,9 @@
}
},
"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=="
+ "version": "0.50.0",
+ "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.50.0.tgz",
+ "integrity": "sha512-8CclLCmrRRh+sul7C08BmPBP3P8wVWfBHomsTcndxg5NRCEPfu/mc2AGU8k37ajjDVXcXFc12ORAMUkmk+lkFA=="
},
"node_modules/mri": {
"version": "1.2.0",
@@ -17530,9 +17137,9 @@
}
},
"node_modules/outvariant": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/outvariant/-/outvariant-1.4.2.tgz",
- "integrity": "sha512-Ou3dJ6bA/UJ5GVHxah4LnqDwZRwAmWxrG3wtrHrbGnP4RnLCtA64A4F+ae7Y8ww660JaddSoArUR5HjipWSHAQ==",
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/outvariant/-/outvariant-1.4.3.tgz",
+ "integrity": "sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==",
"dev": true
},
"node_modules/p-event": {
@@ -17763,28 +17370,28 @@
"dev": true
},
"node_modules/path-scurry": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
- "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz",
+ "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==",
"dev": true,
"dependencies": {
- "lru-cache": "^10.2.0",
- "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
+ "lru-cache": "^11.0.0",
+ "minipass": "^7.1.2"
},
"engines": {
- "node": ">=16 || 14 >=14.18"
+ "node": "20 || >=22"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/path-scurry/node_modules/lru-cache": {
- "version": "10.3.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.3.0.tgz",
- "integrity": "sha512-CQl19J/g+Hbjbv4Y3mFNNXFEL/5t/KCg8POCuUqd4rMKjGG+j1ybER83hxV58zL+dFI1PTkt3GNFSHRt+d8qEQ==",
+ "version": "11.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.0.0.tgz",
+ "integrity": "sha512-Qv32eSV1RSCfhY3fpPE2GNZ8jgM9X7rdAfemLWqTUxwiyIC4jJ6Sy0fZ8H+oLWevO6i4/bizg7c8d8i6bxrzbA==",
"dev": true,
"engines": {
- "node": "14 || >=16.14"
+ "node": "20 || >=22"
}
},
"node_modules/path-to-regexp": {
@@ -17891,12 +17498,12 @@
}
},
"node_modules/playwright": {
- "version": "1.45.1",
- "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.45.1.tgz",
- "integrity": "sha512-Hjrgae4kpSQBr98nhCj3IScxVeVUixqj+5oyif8TdIn2opTCPEzqAqNMeK42i3cWDCVu9MI+ZsGWw+gVR4ISBg==",
+ "version": "1.45.2",
+ "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.45.2.tgz",
+ "integrity": "sha512-ReywF2t/0teRvNBpfIgh5e4wnrI/8Su8ssdo5XsQKpjxJj+jspm00jSoz9BTg91TT0c9HRjXO7LBNVrgYj9X0g==",
"dev": true,
"dependencies": {
- "playwright-core": "1.45.1"
+ "playwright-core": "1.45.2"
},
"bin": {
"playwright": "cli.js"
@@ -17909,9 +17516,9 @@
}
},
"node_modules/playwright-core": {
- "version": "1.45.1",
- "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.45.1.tgz",
- "integrity": "sha512-LF4CUUtrUu2TCpDw4mcrAIuYrEjVDfT1cHbJMfwnE2+1b8PZcFzPNgvZCvq2JfQ4aTjRCCHw5EJ2tmr2NSzdPg==",
+ "version": "1.45.2",
+ "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.45.2.tgz",
+ "integrity": "sha512-ha175tAWb0dTK0X4orvBIqi3jGEt701SMxMhyujxNrgd8K0Uy5wMSwwcQHtyB4om7INUkfndx02XnQ2p6dvLDw==",
"dev": true,
"bin": {
"playwright-core": "cli.js"
@@ -18081,9 +17688,9 @@
}
},
"node_modules/prettier": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.2.tgz",
- "integrity": "sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==",
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz",
+ "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==",
"dev": true,
"bin": {
"prettier": "bin/prettier.cjs"
@@ -18266,9 +17873,9 @@
}
},
"node_modules/qs": {
- "version": "6.12.2",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.12.2.tgz",
- "integrity": "sha512-x+NLUpx9SYrcwXtX7ob1gnkSems4i/mGZX5SlYxwIau6RrUSODO89TR/XDGGpn5RPWSYIB+aSfuSlV5+CmbTBg==",
+ "version": "6.12.3",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.12.3.tgz",
+ "integrity": "sha512-AWJm14H1vVaO/iNZ4/hO+HyaTehuy9nRqVdkTqlJt0HWvBiBIEXFmb4C0DGeYo3Xes9rrEW+TxHsaigCbN5ICQ==",
"dev": true,
"dependencies": {
"side-channel": "^1.0.6"
@@ -18963,9 +18570,9 @@
}
},
"node_modules/rollup": {
- "version": "4.18.0",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.18.0.tgz",
- "integrity": "sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg==",
+ "version": "4.18.1",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.18.1.tgz",
+ "integrity": "sha512-Elx2UT8lzxxOXMpy5HWQGZqkrQOtrVDDa/bm9l10+U4rQnVzbL/LgZ4NOM1MPIDyHk69W4InuYDF5dzRh4Kw1A==",
"dev": true,
"dependencies": {
"@types/estree": "1.0.5"
@@ -18978,22 +18585,22 @@
"npm": ">=8.0.0"
},
"optionalDependencies": {
- "@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",
+ "@rollup/rollup-android-arm-eabi": "4.18.1",
+ "@rollup/rollup-android-arm64": "4.18.1",
+ "@rollup/rollup-darwin-arm64": "4.18.1",
+ "@rollup/rollup-darwin-x64": "4.18.1",
+ "@rollup/rollup-linux-arm-gnueabihf": "4.18.1",
+ "@rollup/rollup-linux-arm-musleabihf": "4.18.1",
+ "@rollup/rollup-linux-arm64-gnu": "4.18.1",
+ "@rollup/rollup-linux-arm64-musl": "4.18.1",
+ "@rollup/rollup-linux-powerpc64le-gnu": "4.18.1",
+ "@rollup/rollup-linux-riscv64-gnu": "4.18.1",
+ "@rollup/rollup-linux-s390x-gnu": "4.18.1",
+ "@rollup/rollup-linux-x64-gnu": "4.18.1",
+ "@rollup/rollup-linux-x64-musl": "4.18.1",
+ "@rollup/rollup-win32-arm64-msvc": "4.18.1",
+ "@rollup/rollup-win32-ia32-msvc": "4.18.1",
+ "@rollup/rollup-win32-x64-msvc": "4.18.1",
"fsevents": "~2.3.2"
}
},
@@ -19351,12 +18958,13 @@
}
},
"node_modules/shiki": {
- "version": "1.10.1",
- "resolved": "https://registry.npmjs.org/shiki/-/shiki-1.10.1.tgz",
- "integrity": "sha512-uafV7WCgN4YYrccH6yxpnps6k38sSTlFRrwc4jycWmhWxJIm9dPrk+XkY1hZ2t0I7jmacMNb15Lf2fspa/Y3lg==",
+ "version": "1.10.3",
+ "resolved": "https://registry.npmjs.org/shiki/-/shiki-1.10.3.tgz",
+ "integrity": "sha512-eneCLncGuvPdTutJuLyUGS8QNPAVFO5Trvld2wgEq1e002mwctAhJKeMGWtWVXOIEzmlcLRqcgPSorR6AVzOmQ==",
"dev": true,
"dependencies": {
- "@shikijs/core": "1.10.1"
+ "@shikijs/core": "1.10.3",
+ "@types/hast": "^3.0.4"
}
},
"node_modules/side-channel": {
@@ -19384,9 +18992,9 @@
"dev": true
},
"node_modules/simple-icons": {
- "version": "13.0.0",
- "resolved": "https://registry.npmjs.org/simple-icons/-/simple-icons-13.0.0.tgz",
- "integrity": "sha512-emybHoFXO9IorOH8Uy8GwavS1oOQk6bVMxrIAXztNn/EcRc17yHmJM6XpUUd1CcDpax0dHAbpqvGp4hqWlQapg==",
+ "version": "13.1.0",
+ "resolved": "https://registry.npmjs.org/simple-icons/-/simple-icons-13.1.0.tgz",
+ "integrity": "sha512-UUQ5ThpD4J9qkkwnLfloj+mIbJXRHJnMS24lcW+j9ROLpKXysJt2p42iJz/tRi3gEckYaR5+LA5Kb7CZ8Wq8rw==",
"dev": true,
"engines": {
"node": ">=0.12.18"
@@ -19691,18 +19299,6 @@
"node": ">=8"
}
},
- "node_modules/string-width-cjs/node_modules/emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true
- },
- "node_modules/string-width/node_modules/emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true
- },
"node_modules/string.prototype.trim": {
"version": "1.2.9",
"resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz",
@@ -20046,9 +19642,9 @@
}
},
"node_modules/text-decoder": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.1.0.tgz",
- "integrity": "sha512-TmLJNj6UgX8xcUZo4UDStGQtDiTzF7BzWlzn9g7UWrjkpHr5uJTK1ld16wZ3LXb2vb6jH8qU89dW5whuMdXYdw==",
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.1.1.tgz",
+ "integrity": "sha512-8zll7REEv4GDD3x4/0pW+ppIxSNs7H1J10IKFZsuOMscumCdM2a+toDGLPA3T+1+fLBql4zbt5z83GEQGGV5VA==",
"dev": true,
"dependencies": {
"b4a": "^1.6.4"
@@ -20128,9 +19724,9 @@
"integrity": "sha512-okoJyxuPv1gzASxQDNgQbnUXOdAIyoOSXcXcZZu7tiW0PSKEdf3SdASxPBupRj+64/E3elHwVRnzSdo82Emqbg=="
},
"node_modules/tinymce-i18n": {
- "version": "24.7.1",
- "resolved": "https://registry.npmjs.org/tinymce-i18n/-/tinymce-i18n-24.7.1.tgz",
- "integrity": "sha512-eiLiYT4lRDV/49IfaVssF+Ov6i3Q/eMosYZfNTrj3s2AP7TpCM+TNVi4gfIYDf0aejNfEnkbtMp1F/nURL08dw=="
+ "version": "24.7.15",
+ "resolved": "https://registry.npmjs.org/tinymce-i18n/-/tinymce-i18n-24.7.15.tgz",
+ "integrity": "sha512-capZBGG8q5hSMb3C5SeVfr5SZmo7jv3mdLZPJdV8mNpe/DNCYcIzWQSFW7/CW1o9rpQ2xZz9DVSfLPLV8xCoNQ=="
},
"node_modules/tmp": {
"version": "0.0.33",
@@ -20371,27 +19967,6 @@
"node": ">=0.6.x"
}
},
- "node_modules/tsutils": {
- "version": "3.21.0",
- "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz",
- "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==",
- "dev": true,
- "dependencies": {
- "tslib": "^1.8.1"
- },
- "engines": {
- "node": ">= 6"
- },
- "peerDependencies": {
- "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta"
- }
- },
- "node_modules/tsutils/node_modules/tslib": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
- "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
- "dev": true
- },
"node_modules/type-check": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
@@ -20509,9 +20084,9 @@
"dev": true
},
"node_modules/typedoc": {
- "version": "0.26.3",
- "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.26.3.tgz",
- "integrity": "sha512-6d2Sw9disvvpdk4K7VNjKr5/3hzijtfQVHRthhDqJgnhMHy1wQz4yPMJVKXElvnZhFr0nkzo+GzjXDTRV5yLpg==",
+ "version": "0.26.4",
+ "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.26.4.tgz",
+ "integrity": "sha512-FlW6HpvULDKgc3rK04V+nbFyXogPV88hurarDPOjuuB5HAwuAlrCMQ5NeH7Zt68a/ikOKu6Z/0hFXAeC9xPccQ==",
"dev": true,
"dependencies": {
"lunr": "^2.3.9",
@@ -20568,14 +20143,14 @@
}
},
"node_modules/typescript-eslint": {
- "version": "7.15.0",
- "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-7.15.0.tgz",
- "integrity": "sha512-Ta40FhMXBCwHura4X4fncaCVkVcnJ9jnOq5+Lp4lN8F4DzHZtOwZdRvVBiNUGznUDHPwdGnrnwxmUOU2fFQqFA==",
+ "version": "7.16.1",
+ "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-7.16.1.tgz",
+ "integrity": "sha512-889oE5qELj65q/tGeOSvlreNKhimitFwZqQ0o7PcWC7/lgRkAMknznsCsV8J8mZGTP/Z+cIbX8accf2DE33hrA==",
"dev": true,
"dependencies": {
- "@typescript-eslint/eslint-plugin": "7.15.0",
- "@typescript-eslint/parser": "7.15.0",
- "@typescript-eslint/utils": "7.15.0"
+ "@typescript-eslint/eslint-plugin": "7.16.1",
+ "@typescript-eslint/parser": "7.16.1",
+ "@typescript-eslint/utils": "7.16.1"
},
"engines": {
"node": "^18.18.0 || >=20.0.0"
@@ -20593,155 +20168,10 @@
}
}
},
- "node_modules/typescript-eslint/node_modules/@typescript-eslint/scope-manager": {
- "version": "7.15.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.15.0.tgz",
- "integrity": "sha512-Q/1yrF/XbxOTvttNVPihxh1b9fxamjEoz2Os/Pe38OHwxC24CyCqXxGTOdpb4lt6HYtqw9HetA/Rf6gDGaMPlw==",
- "dev": true,
- "dependencies": {
- "@typescript-eslint/types": "7.15.0",
- "@typescript-eslint/visitor-keys": "7.15.0"
- },
- "engines": {
- "node": "^18.18.0 || >=20.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/typescript-eslint/node_modules/@typescript-eslint/types": {
- "version": "7.15.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.15.0.tgz",
- "integrity": "sha512-aV1+B1+ySXbQH0pLK0rx66I3IkiZNidYobyfn0WFsdGhSXw+P3YOqeTq5GED458SfB24tg+ux3S+9g118hjlTw==",
- "dev": true,
- "engines": {
- "node": "^18.18.0 || >=20.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/typescript-eslint/node_modules/@typescript-eslint/typescript-estree": {
- "version": "7.15.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.15.0.tgz",
- "integrity": "sha512-gjyB/rHAopL/XxfmYThQbXbzRMGhZzGw6KpcMbfe8Q3nNQKStpxnUKeXb0KiN/fFDR42Z43szs6rY7eHk0zdGQ==",
- "dev": true,
- "dependencies": {
- "@typescript-eslint/types": "7.15.0",
- "@typescript-eslint/visitor-keys": "7.15.0",
- "debug": "^4.3.4",
- "globby": "^11.1.0",
- "is-glob": "^4.0.3",
- "minimatch": "^9.0.4",
- "semver": "^7.6.0",
- "ts-api-utils": "^1.3.0"
- },
- "engines": {
- "node": "^18.18.0 || >=20.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/typescript-eslint/node_modules/@typescript-eslint/utils": {
- "version": "7.15.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.15.0.tgz",
- "integrity": "sha512-hfDMDqaqOqsUVGiEPSMLR/AjTSCsmJwjpKkYQRo1FNbmW4tBwBspYDwO9eh7sKSTwMQgBw9/T4DHudPaqshRWA==",
- "dev": true,
- "dependencies": {
- "@eslint-community/eslint-utils": "^4.4.0",
- "@typescript-eslint/scope-manager": "7.15.0",
- "@typescript-eslint/types": "7.15.0",
- "@typescript-eslint/typescript-estree": "7.15.0"
- },
- "engines": {
- "node": "^18.18.0 || >=20.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "eslint": "^8.56.0"
- }
- },
- "node_modules/typescript-eslint/node_modules/@typescript-eslint/visitor-keys": {
- "version": "7.15.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.15.0.tgz",
- "integrity": "sha512-Hqgy/ETgpt2L5xueA/zHHIl4fJI2O4XUE9l4+OIfbJIRSnTJb/QscncdqqZzofQegIJugRIF57OJea1khw2SDw==",
- "dev": true,
- "dependencies": {
- "@typescript-eslint/types": "7.15.0",
- "eslint-visitor-keys": "^3.4.3"
- },
- "engines": {
- "node": "^18.18.0 || >=20.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/typescript-eslint/node_modules/brace-expansion": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
- "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
- "dev": true,
- "dependencies": {
- "balanced-match": "^1.0.0"
- }
- },
- "node_modules/typescript-eslint/node_modules/eslint-visitor-keys": {
- "version": "3.4.3",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
- "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
- "dev": true,
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/typescript-eslint/node_modules/minimatch": {
- "version": "9.0.5",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
- "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
- "dev": true,
- "dependencies": {
- "brace-expansion": "^2.0.1"
- },
- "engines": {
- "node": ">=16 || 14 >=14.17"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/typescript-eslint/node_modules/semver": {
- "version": "7.6.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
- "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
- "dev": true,
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/typescript-json-schema": {
- "version": "0.63.0",
- "resolved": "https://registry.npmjs.org/typescript-json-schema/-/typescript-json-schema-0.63.0.tgz",
- "integrity": "sha512-vBfMBq4U/rZ5FIRi7u4o/YAdeRHsSabdGHogUlCPi0cYU0CGvS4Bdu8bSzyUsF+Kf5PTQUGh2TictJuQTDK6eQ==",
+ "version": "0.64.0",
+ "resolved": "https://registry.npmjs.org/typescript-json-schema/-/typescript-json-schema-0.64.0.tgz",
+ "integrity": "sha512-Sew8llkYSzpxaMoGjpjD6NMFCr6DoWFHLs7Bz1LU48pzzi8ok8W+GZs9cG87IMBpC0UI7qwBMUI2um0LGxxLOg==",
"dev": true,
"dependencies": {
"@types/json-schema": "^7.0.9",
@@ -21207,9 +20637,9 @@
}
},
"node_modules/uuid": {
- "version": "9.0.1",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz",
- "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==",
+ "version": "10.0.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz",
+ "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==",
"funding": [
"https://github.com/sponsors/broofa",
"https://github.com/sponsors/ctavan"
@@ -21315,9 +20745,9 @@
}
},
"node_modules/vite": {
- "version": "5.3.3",
- "resolved": "https://registry.npmjs.org/vite/-/vite-5.3.3.tgz",
- "integrity": "sha512-NPQdeCU0Dv2z5fu+ULotpuq5yfCS1BzKUIPhNbP3YBfAMGJXbt2nS+sbTFu+qchaqWTD+H3JK++nRwr6XIcp6A==",
+ "version": "5.3.4",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-5.3.4.tgz",
+ "integrity": "sha512-Cw+7zL3ZG9/NZBB8C+8QbQZmR54GwqIz+WMI4b3JgdYJvX+ny9AjJXqkGQlDXSXRP9rP0B4tbciRMOVEKulVOA==",
"dev": true,
"dependencies": {
"esbuild": "^0.21.3",
@@ -22127,9 +21557,9 @@
}
},
"node_modules/ws": {
- "version": "8.17.1",
- "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz",
- "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==",
+ "version": "8.18.0",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz",
+ "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==",
"dev": true,
"engines": {
"node": ">=10.0.0"
@@ -22272,6 +21702,9 @@
"src/packages/block": {
"name": "@umbraco-backoffice/block"
},
+ "src/packages/code-editor": {
+ "name": "@umbraco-backoffice/code-editor"
+ },
"src/packages/core": {
"name": "@umbraco-backoffice/core"
},
@@ -22293,6 +21726,12 @@
"src/packages/media": {
"name": "@umbraco-backoffice/media"
},
+ "src/packages/members": {
+ "name": "@umbraco-backoffice/members"
+ },
+ "src/packages/multi-url-picker": {
+ "name": "@umbraco-backoffice/multi-url-picker"
+ },
"src/packages/property-editors": {
"name": "@umbraco-backoffice/property-editors"
},
@@ -22305,6 +21744,9 @@
"src/packages/umbraco-news": {
"name": "@umbraco-backoffice/umbraco-news"
},
+ "src/packages/user": {
+ "name": "@umbraco-backoffice/user"
+ },
"src/packages/webhook": {
"name": "@umbraco-backoffice/webhook"
}
diff --git a/src/Umbraco.Web.UI.Client/package.json b/src/Umbraco.Web.UI.Client/package.json
index 54ce8b6a39..b9bf789dc5 100644
--- a/src/Umbraco.Web.UI.Client/package.json
+++ b/src/Umbraco.Web.UI.Client/package.json
@@ -22,11 +22,11 @@
"./block-rte": "./dist-cms/packages/block/block-rte/index.js",
"./block-type": "./dist-cms/packages/block/block-type/index.js",
"./block": "./dist-cms/packages/block/block/index.js",
- "./code-editor": "./dist-cms/packages/templating/code-editor/index.js",
+ "./code-editor": "./dist-cms/packages/code-editor/index.js",
"./collection": "./dist-cms/packages/core/collection/index.js",
"./components": "./dist-cms/packages/core/components/index.js",
- "./content": "./dist-cms/packages/core/content/index.js",
"./content-type": "./dist-cms/packages/core/content-type/index.js",
+ "./content": "./dist-cms/packages/core/content/index.js",
"./culture": "./dist-cms/packages/core/culture/index.js",
"./current-user": "./dist-cms/packages/user/current-user/index.js",
"./data-type": "./dist-cms/packages/data-type/index.js",
@@ -35,9 +35,9 @@
"./document-blueprint": "./dist-cms/packages/documents/document-blueprints/index.js",
"./document-type": "./dist-cms/packages/documents/document-types/index.js",
"./document": "./dist-cms/packages/documents/documents/index.js",
- "./entity": "./dist-cms/packages/core/entity/index.js",
"./entity-action": "./dist-cms/packages/core/entity-action/index.js",
"./entity-bulk-action": "./dist-cms/packages/core/entity-bulk-action/index.js",
+ "./entity": "./dist-cms/packages/core/entity/index.js",
"./event": "./dist-cms/packages/core/event/index.js",
"./extension-registry": "./dist-cms/packages/core/extension-registry/index.js",
"./icon": "./dist-cms/packages/core/icon-registry/index.js",
@@ -56,6 +56,7 @@
"./menu": "./dist-cms/packages/core/menu/index.js",
"./modal": "./dist-cms/packages/core/modal/index.js",
"./models": "./dist-cms/packages/core/models/index.js",
+ "./multi-url-picker": "./dist-cms/packages/multi-url-picker/index.js",
"./notification": "./dist-cms/packages/core/notification/index.js",
"./object-type": "./dist-cms/packages/object-type/index.js",
"./package": "./dist-cms/packages/packages/package/index.js",
@@ -63,6 +64,7 @@
"./picker-input": "./dist-cms/packages/core/picker-input/index.js",
"./property-action": "./dist-cms/packages/core/property-action/index.js",
"./property-editor": "./dist-cms/packages/core/property-editor/index.js",
+ "./property-type": "./dist-cms/packages/core/property-type/index.js",
"./property": "./dist-cms/packages/core/property/index.js",
"./recycle-bin": "./dist-cms/packages/core/recycle-bin/index.js",
"./relation-type": "./dist-cms/packages/relations/relation-types/index.js",
@@ -73,8 +75,8 @@
"./script": "./dist-cms/packages/templating/scripts/index.js",
"./search": "./dist-cms/packages/search/index.js",
"./section": "./dist-cms/packages/core/section/index.js",
- "./settings": "./dist-cms/packages/settings/index.js",
"./server-file-system": "./dist-cms/packages/core/server-file-system/index.js",
+ "./settings": "./dist-cms/packages/settings/index.js",
"./sorter": "./dist-cms/packages/core/sorter/index.js",
"./static-file": "./dist-cms/packages/static-file/index.js",
"./store": "./dist-cms/packages/core/store/index.js",
@@ -128,33 +130,37 @@
},
"workspaces": [
"./src/packages/block",
+ "./src/packages/code-editor",
"./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/media",
+ "./src/packages/members",
+ "./src/packages/multi-url-picker",
+ "./src/packages/property-editors",
"./src/packages/tags",
"./src/packages/templating",
- "./src/packages/property-editors",
- "./src/packages/media"
+ "./src/packages/umbraco-news",
+ "./src/packages/user",
+ "./src/packages/webhook"
],
"scripts": {
"backoffice:test:e2e": "npx playwright test",
"build-storybook": "npm run wc-analyze && storybook build",
"build:for:cms": "npm run build && npm run build:workspaces && npm run generate:manifest && npm run package:validate && node ./devops/build/copy-to-cms.js",
- "build:for:npm": "npm run build && npm run generate:manifest && npm run package:validate",
+ "build:for:npm": "npm run build -- --declaration && npm run generate:manifest && npm run package:validate",
"build:for:static": "vite build",
"build:vite": "tsc && vite build --mode staging",
"build:workspaces": "npm run build -ws --if-present",
- "build": "tsc --project ./src/tsconfig.build.json && rollup -c ./src/rollup.config.js",
+ "build": "tsc --project ./src/tsconfig.build.json",
+ "postbuild": "rollup -c ./src/rollup.config.js",
"check": "npm run lint:errors && npm run compile && npm run build-storybook && npm run generate:jsonschema:dist",
- "check:paths": "node ./devops/build/check-path-length.js src 140",
+ "check:paths": "node ./devops/build/check-path-length.js dist-cms 120",
"compile": "tsc",
+ "postinstall": "npm run generate:tsconfig",
"dev": "vite",
"dev:server": "VITE_UMBRACO_USE_MSW=off vite",
"dev:mock": "VITE_UMBRACO_USE_MSW=on vite",
@@ -185,7 +191,7 @@
"wc-analyze": "wca **/*.element.ts --outFile dist-cms/custom-elements.json",
"generate:tsconfig": "node ./devops/tsconfig/index.js",
"generate:manifest": "node ./devops/build/create-umbraco-package.js",
- "package:validate": "node ./devops/package/validate-exports.js && npm run check:paths",
+ "package:validate": "node ./devops/package/validate-exports.js",
"generate:ui-api-docs": "typedoc --options typedoc.config.js",
"circular": "npx madge --circular --warning --extensions ts ./src"
},
@@ -196,32 +202,32 @@
"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",
+ "@types/uuid": "^10.0.0",
+ "@umbraco-ui/uui": "^1.9.0",
+ "@umbraco-ui/uui-css": "^1.9.0",
"base64-js": "^1.5.1",
"diff": "^5.2.0",
- "dompurify": "^3.1.4",
+ "dompurify": "^3.1.6",
"element-internals-polyfill": "^1.3.11",
- "lit": "^3.1.3",
- "marked": "^12.0.2",
- "monaco-editor": "^0.48.0",
+ "lit": "^3.1.4",
+ "marked": "^13.0.2",
+ "monaco-editor": "^0.50.0",
"rxjs": "^7.8.1",
"tinymce": "^6.8.3",
- "tinymce-i18n": "^24.5.8",
- "uuid": "^9.0.1"
+ "tinymce-i18n": "^24.7.15",
+ "uuid": "^10.0.0"
},
"devDependencies": {
- "@babel/core": "^7.24.3",
- "@eslint/js": "^9.6.0",
- "@hey-api/openapi-ts": "^0.48.1",
- "@mdx-js/react": "^3.0.0",
+ "@babel/core": "^7.24.9",
+ "@eslint/js": "^9.7.0",
+ "@hey-api/openapi-ts": "^0.48.3",
+ "@mdx-js/react": "^3.0.1",
"@open-wc/testing": "^4.0.0",
- "@playwright/test": "^1.45.1",
- "@rollup/plugin-commonjs": "^25.0.7",
+ "@playwright/test": "^1.45.2",
+ "@rollup/plugin-commonjs": "^26.0.1",
"@rollup/plugin-json": "^6.1.0",
"@rollup/plugin-node-resolve": "^15.2.3",
- "@rollup/plugin-replace": "^5.0.5",
+ "@rollup/plugin-replace": "^5.0.7",
"@storybook/addon-a11y": "^7.6.17",
"@storybook/addon-actions": "^7.6.17",
"@storybook/addon-essentials": "^7.6.17",
@@ -229,47 +235,45 @@
"@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/chai": "^4.3.16",
"@types/eslint__js": "^8.42.3",
- "@types/mocha": "^10.0.1",
+ "@types/mocha": "^10.0.7",
"@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/dev-server-import-maps": "^0.2.1",
+ "@web/dev-server-rollup": "^0.6.4",
+ "@web/test-runner": "^0.18.2",
"@web/test-runner-playwright": "^0.11.0",
"babel-loader": "^9.1.3",
- "eslint": "^9.6.0",
+ "eslint": "^9.7.0",
"eslint-config-prettier": "^9.1.0",
"eslint-plugin-import": "^2.29.1",
"eslint-plugin-lit": "^1.14.0",
- "eslint-plugin-lit-a11y": "^4.1.3",
"eslint-plugin-local-rules": "^3.0.2",
"eslint-plugin-prettier": "^5.1.3",
- "eslint-plugin-storybook": "^0.8.0",
"eslint-plugin-wc": "^2.1.0",
- "glob": "^10.3.10",
- "globals": "^15.7.0",
- "lucide-static": "^0.379.0",
+ "glob": "^11.0.0",
+ "globals": "^15.8.0",
+ "lucide-static": "^0.408.0",
"msw": "^1.3.2",
"playwright-msw": "^3.0.1",
- "prettier": "3.3.2",
+ "prettier": "3.3.3",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"remark-gfm": "^3.0.1",
- "rollup": "^4.14.1",
+ "rollup": "^4.18.1",
"rollup-plugin-esbuild": "^6.1.1",
"rollup-plugin-import-css": "^3.5.0",
"rollup-plugin-web-worker-loader": "^1.6.1",
- "simple-icons": "^13.0.0",
+ "simple-icons": "^13.1.0",
"storybook": "^7.6.17",
"tiny-glob": "^0.2.9",
- "tsc-alias": "^1.8.8",
- "typedoc": "^0.26.3",
+ "tsc-alias": "^1.8.10",
+ "typedoc": "^0.26.4",
"typescript": "^5.5.3",
- "typescript-eslint": "^7.15.0",
- "typescript-json-schema": "^0.63.0",
- "vite": "^5.2.9",
- "vite-plugin-static-copy": "^1.0.5",
+ "typescript-eslint": "^7.16.1",
+ "typescript-json-schema": "^0.64.0",
+ "vite": "^5.3.4",
+ "vite-plugin-static-copy": "^1.0.6",
"vite-tsconfig-paths": "^4.3.2",
"web-component-analyzer": "^2.0.0"
},
diff --git a/src/Umbraco.Web.UI.Client/src/apps/app/api-interceptor.controller.ts b/src/Umbraco.Web.UI.Client/src/apps/app/api-interceptor.controller.ts
new file mode 100644
index 0000000000..874c96c2b0
--- /dev/null
+++ b/src/Umbraco.Web.UI.Client/src/apps/app/api-interceptor.controller.ts
@@ -0,0 +1,54 @@
+import { UmbControllerBase } from '@umbraco-cms/backoffice/class-api';
+import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
+import { OpenAPI } from '@umbraco-cms/backoffice/external/backend-api';
+import {
+ extractUmbNotificationColor,
+ isUmbNotifications,
+ UMB_NOTIFICATION_CONTEXT,
+ UMB_NOTIFICATION_HEADER,
+} from '@umbraco-cms/backoffice/notification';
+
+/**
+ * Controller that adds interceptors to the OpenAPI client
+ */
+export class UmbApiInterceptorController extends UmbControllerBase {
+ constructor(host: UmbControllerHost) {
+ super(host);
+ this.#addUmbNotificationsInterceptor();
+ }
+
+ /**
+ * Interceptor which checks responses for the umb-notifications header and displays them as a notification if any. Removes the umb-notifications from the headers.
+ */
+ #addUmbNotificationsInterceptor() {
+ OpenAPI.interceptors.response.use((response) => {
+ const umbNotifications = response.headers.get(UMB_NOTIFICATION_HEADER);
+ if (!umbNotifications) return response;
+
+ const notifications = JSON.parse(umbNotifications);
+ if (!isUmbNotifications(notifications)) return response;
+
+ this.getContext(UMB_NOTIFICATION_CONTEXT).then((notificationContext) => {
+ for (const notification of notifications) {
+ notificationContext.peek(extractUmbNotificationColor(notification.type), {
+ data: { headline: notification.category, message: notification.message },
+ });
+ }
+ });
+
+ const newHeader = new Headers();
+ for (const header of response.headers.entries()) {
+ const [key, value] = header;
+ if (key !== UMB_NOTIFICATION_HEADER) newHeader.set(key, value);
+ }
+
+ const newResponse = new Response(response.body, {
+ headers: newHeader,
+ status: response.status,
+ statusText: response.statusText,
+ });
+
+ return newResponse;
+ });
+ }
+}
diff --git a/src/Umbraco.Web.UI.Client/src/apps/app/app.element.ts b/src/Umbraco.Web.UI.Client/src/apps/app/app.element.ts
index cb53895f57..68dd2e5b1b 100644
--- a/src/Umbraco.Web.UI.Client/src/apps/app/app.element.ts
+++ b/src/Umbraco.Web.UI.Client/src/apps/app/app.element.ts
@@ -3,6 +3,7 @@ import type { UmbAppErrorElement } from './app-error.element.js';
import { UmbAppContext } from './app.context.js';
import { UmbServerConnection } from './server-connection.js';
import { UmbAppAuthController } from './app-auth.controller.js';
+import { UmbApiInterceptorController } from './api-interceptor.controller.js';
import type { UMB_AUTH_CONTEXT } from '@umbraco-cms/backoffice/auth';
import { UmbAuthContext } from '@umbraco-cms/backoffice/auth';
import { css, html, customElement, property } from '@umbraco-cms/backoffice/external/lit';
@@ -147,6 +148,8 @@ export class UmbAppElement extends UmbLitElement {
OpenAPI.BASE = window.location.origin;
+ new UmbApiInterceptorController(this);
+
new UmbBundleExtensionInitializer(this, umbExtensionsRegistry);
new UUIIconRegistryEssential().attach(this);
diff --git a/src/Umbraco.Web.UI.Client/src/apps/backoffice/backoffice.element.ts b/src/Umbraco.Web.UI.Client/src/apps/backoffice/backoffice.element.ts
index e8544ac96a..b5b6c47879 100644
--- a/src/Umbraco.Web.UI.Client/src/apps/backoffice/backoffice.element.ts
+++ b/src/Umbraco.Web.UI.Client/src/apps/backoffice/backoffice.element.ts
@@ -13,6 +13,7 @@ import './components/index.js';
const CORE_PACKAGES = [
import('../../packages/block/umbraco-package.js'),
+ import('../../packages/code-editor/umbraco-package.js'),
import('../../packages/data-type/umbraco-package.js'),
import('../../packages/dictionary/umbraco-package.js'),
import('../../packages/documents/umbraco-package.js'),
diff --git a/src/Umbraco.Web.UI.Client/src/apps/upgrader/upgrader.element.ts b/src/Umbraco.Web.UI.Client/src/apps/upgrader/upgrader.element.ts
index 2c485d52da..e99105e99f 100644
--- a/src/Umbraco.Web.UI.Client/src/apps/upgrader/upgrader.element.ts
+++ b/src/Umbraco.Web.UI.Client/src/apps/upgrader/upgrader.element.ts
@@ -63,7 +63,7 @@ export class UmbUpgraderElement extends UmbLitElement {
if (error) {
this.errorMessage =
- error instanceof ApiError ? (error.body as any).detail : error.message ?? 'Unknown error, please try again';
+ error instanceof ApiError ? (error.body as any).detail : (error.message ?? 'Unknown error, please try again');
} else {
history.pushState(null, '', 'section/content');
}
diff --git a/src/Umbraco.Web.UI.Client/src/assets/lang/bs.ts b/src/Umbraco.Web.UI.Client/src/assets/lang/bs.ts
index 45c43ac734..1ff01c94bc 100644
--- a/src/Umbraco.Web.UI.Client/src/assets/lang/bs.ts
+++ b/src/Umbraco.Web.UI.Client/src/assets/lang/bs.ts
@@ -2219,8 +2219,8 @@ export default {
forceHideContentEditor: 'Sakrij uređivač sadržaja',
forceHideContentEditorHelp:
'Sakrijte dugme za uređivanje sadržaja i uređivač sadržaja iz preklapanja Block Editor.',
- girdInlineEditing: 'Inline editovanje',
- girdInlineEditingHelp:
+ gridInlineEditing: 'Inline editovanje',
+ gridInlineEditingHelp:
'Omogućava inline uređivanje za prvo svojstvo. Dodatna svojstva se mogu uređivati u prekrivaču.',
blockHasChanges: 'Izmijenili ste ovaj sadržaj. Jeste li sigurni da ih želite odbaciti?',
confirmCancelBlockCreationHeadline: 'Odbaciti kreiranje?',
diff --git a/src/Umbraco.Web.UI.Client/src/assets/lang/cy-gb.ts b/src/Umbraco.Web.UI.Client/src/assets/lang/cy-gb.ts
index 4515b586c5..7878e4d18f 100644
--- a/src/Umbraco.Web.UI.Client/src/assets/lang/cy-gb.ts
+++ b/src/Umbraco.Web.UI.Client/src/assets/lang/cy-gb.ts
@@ -2469,8 +2469,8 @@ export default {
getSampleDescription:
"Bydd hyn yn ychwanegu Blociau sylfaenol ac yn eich helpu i ddechrau gyda'r Golygydd Grid Bloc. Fe gewch Blociau ar gyfer Pennawd, Testun Cyfoethog, Delwedd, yn ogystal â Chynllun Dwy Golofn.",
getSampleButton: 'Gosod',
- girdInlineEditing: 'Golygu mewnol',
- girdInlineEditingHelp:
+ gridInlineEditing: 'Golygu mewnol',
+ gridInlineEditingHelp:
'Yn galluogi golygu mewnol ar gyfer yr Eiddo cyntaf. Gellir golygu priodweddau ychwanegol yn y droshaen.',
areaAllowedBlocksEmpty:
'Yn ddiofyn, caniateir pob math bloc mewn Ardal, Defnyddiwch yr opsiwn hwn i ganiatáu mathau dethol yn unig.',
diff --git a/src/Umbraco.Web.UI.Client/src/assets/lang/da-dk.ts b/src/Umbraco.Web.UI.Client/src/assets/lang/da-dk.ts
index 0a0ec7595d..29ba011438 100644
--- a/src/Umbraco.Web.UI.Client/src/assets/lang/da-dk.ts
+++ b/src/Umbraco.Web.UI.Client/src/assets/lang/da-dk.ts
@@ -328,7 +328,9 @@ export default {
variantUnpublishNotAllowed: 'Unpublish is not allowed',
},
blueprints: {
- createBlueprintFrom: 'Opret en ny indholdsskabelon fra %0% ',
+ createBlueprintFrom: "Opret en ny indholdsskabelon fra '%0%'",
+ createBlueprintItemUnder: "Opret en ny indholdsskabelon under '%0%'",
+ createBlueprintFolderUnder: "Opret en ny mappe under '%0%'",
blankBlueprint: 'Blank',
selectBlueprint: 'Vælg en indholdsskabelon',
createdBlueprintHeading: 'Indholdsskabelon oprettet',
@@ -1861,6 +1863,8 @@ export default {
lastLogin: 'Seneste login',
lastPasswordChangeDate: 'Kodeord sidst ændret',
loginname: 'Brugernavn',
+ loginnameRequired: 'Påkrævet - indtast et brugernavn for denne bruger',
+ loginnameDescription: 'Brugernavnet bruges til at logge ind og til at identificere brugeren',
mediastartnode: 'Startnode i mediearkivet',
mediastartnodehelp: 'Begræns mediebiblioteket til en bestemt startnode',
mediastartnodes: 'Medie startnoder',
@@ -1963,7 +1967,12 @@ export default {
'2faCodeInput': 'Indtast din verifikationskode',
'2faCodeInputHelp': 'Indtast din verifikationskode fra din autentificeringsapp',
'2faInvalidCode': 'Den indtastede kode er ugyldig',
- emailRequired: 'Required - enter an email address for this user',
+ emailRequired: 'Påkrævet - indtast en emailadresse for denne bruger',
+ emailDescription: (usernameIsEmail: boolean) => {
+ return usernameIsEmail
+ ? 'Emailadressen bruges som brugernavn og til notifikationer og adgangskode gendannelse'
+ : 'Emailadressen bruges til notifikationer og adgangskode gendannelse';
+ },
duplicateLogin: 'A user with this login already exists',
nameRequired: 'Required - enter a name for this user',
passwordRequiresDigit: "The password must have at least one digit ('0'-'9')",
@@ -2102,7 +2111,7 @@ export default {
protectDescription: 'Opsæt offentlig adgang på %0%',
rightsDescription: 'Opsæt rettigheder på %0%',
sortDescription: 'Juster soterings rækkefølgen for %0%',
- createblueprintDescription: 'Opret indholds skabelon baseret på %0%',
+ createblueprintDescription: 'Opret indholdsskabelon baseret på %0%',
openContextMenu: 'Åben kontext menu for',
currentLanguage: 'Aktivt sprog',
switchLanguage: 'Skift sprog til',
@@ -2230,7 +2239,7 @@ export default {
addCustomStylesheet: 'Tilføj stylesheet',
headlineEditorAppearance: 'Redigerings udseende',
headlineDataModels: 'Data modeller',
- headlineCatalogueAppearance: 'katalog udseende',
+ headlineCatalogueAppearance: 'Katalog udseende',
labelBackgroundColor: 'Baggrunds farve',
labelIconColor: 'Ikon farve',
labelContentElementType: 'Indholds model',
@@ -2261,8 +2270,8 @@ export default {
headlineAdvanced: 'Avanceret',
forceHideContentEditor: 'Skjul indholdseditoren',
forceHideContentEditorHelp: 'Skjul indholds redigerings knappen samt indholdseditoren i Blok Redigerings vinduet',
- girdInlineEditing: 'Direkte redigering',
- girdInlineEditingHelp:
+ gridInlineEditing: 'Direkte redigering',
+ gridInlineEditingHelp:
'Tilføjer direkte redigering a det første felt. Yderligere felter optræder kun i redigerings vinduet.',
blockHasChanges: 'Du har lavet ændringer til dette indhold. Er du sikker på at du vil kassere dem?',
confirmCancelBlockCreationHeadline: 'Annuller oprettelse?',
@@ -2525,4 +2534,18 @@ export default {
routeNotFoundTitle: 'Ikke fundet',
routeNotFoundDescription: 'Den side du leder efter kunne ikke findes. Kontroller adressen og prøv igen.',
},
+ codeEditor: {
+ label: 'Code editor',
+ languageConfigLabel: 'Sprog',
+ languageConfigDescription: 'Vælg sprog til syntax highlighting og IntelliSense.',
+ heightConfigLabel: 'Højde',
+ heightConfigDescription: 'Indstil højden på editorvinduet i pixels.',
+ lineNumbersConfigLabel: 'Linjenumre',
+ lineNumbersConfigDescription: 'Vis linjenumre i editorvinduet.',
+ minimapConfigLabel: 'Minimap',
+ minimapConfigDescription: 'Vis en minimap i editorvinduet.',
+ wordWrapConfigLabel: 'Ordbrydning',
+ wordWrapConfigDescription:
+ 'Slå ordbrydning til eller fra, så tekst automatisk brydes ved vinduets kant i stedet for at skabe en horisontal scrollbar.',
+ },
} as UmbLocalizationDictionary;
diff --git a/src/Umbraco.Web.UI.Client/src/assets/lang/en-us.ts b/src/Umbraco.Web.UI.Client/src/assets/lang/en-us.ts
index 020b2f5683..c74158ac83 100644
--- a/src/Umbraco.Web.UI.Client/src/assets/lang/en-us.ts
+++ b/src/Umbraco.Web.UI.Client/src/assets/lang/en-us.ts
@@ -335,7 +335,9 @@ export default {
variantUnpublishNotAllowed: 'Unpublish is not allowed',
},
blueprints: {
- createBlueprintFrom: 'Create a new Document Blueprint from %0% ',
+ createBlueprintFrom: "Create a new Document Blueprint from '%0%'",
+ createBlueprintItemUnder: "Create a new item under '%0%'",
+ createBlueprintFolderUnder: "Create a new folder under '%0%'",
blankBlueprint: 'Blank',
selectBlueprint: 'Select a Document Blueprint',
createdBlueprintHeading: 'Document Blueprint created',
@@ -384,7 +386,7 @@ export default {
create: {
chooseNode: 'Where do you want to create the new %0%',
createUnder: 'Create an item under',
- createContentBlueprint: 'Select the Document Type you want to make a content blueprint for',
+ createContentBlueprint: 'Select the Document Type you want to make a Document Blueprint for',
enterFolderName: 'Enter a folder name',
updateData: 'Choose a type and a title',
noDocumentTypes:
@@ -1372,7 +1374,7 @@ export default {
editMultiContentPublishedText: '%0% documents published and visible on the website',
editVariantPublishedText: '%0% published and visible on the website',
editMultiVariantPublishedText: '%0% documents published for languages %1% and visible on the website',
- editBlueprintSavedHeader: 'Content Blueprint saved',
+ editBlueprintSavedHeader: 'Document Blueprint saved',
editBlueprintSavedText: 'Changes have been successfully saved',
editContentSavedHeader: 'Content saved',
editContentSavedText: 'Remember to publish to make changes visible',
@@ -1785,7 +1787,7 @@ export default {
},
treeHeaders: {
content: 'Content',
- contentBlueprints: 'Content Blueprints',
+ contentBlueprints: 'Document Blueprints',
media: 'Media',
cacheBrowser: 'Cache Browser',
contentRecycleBin: 'Recycle Bin',
@@ -1841,6 +1843,11 @@ export default {
changePhoto: 'Change photo',
configureMfa: 'Configure MFA',
emailRequired: 'Required - enter an email address for this user',
+ emailDescription: (usernameIsEmail: boolean) => {
+ return usernameIsEmail
+ ? 'The email address is used for notifications, password recovery, and as the username for logging in'
+ : 'The email address is used for notifications and password recovery';
+ },
newPassword: 'New password',
newPasswordFormatLengthTip: 'Minimum %0% character(s) to go!',
newPasswordFormatNonAlphaTip: 'There should be at least %0% special character(s) in there.',
@@ -1872,6 +1879,8 @@ export default {
lastLogin: 'Last login',
lastPasswordChangeDate: 'Password last changed',
loginname: 'Username',
+ loginnameRequired: 'Required - enter a username for this user',
+ loginnameDescription: 'The username is used for logging in',
mediastartnode: 'Media start node',
mediastartnodehelp: 'Limit the media library to a specific start node',
mediastartnodes: 'Media start nodes',
@@ -2170,7 +2179,7 @@ export default {
protectDescription: 'Setup access restrictions on %0%',
rightsDescription: 'Setup Permissions on %0%',
sortDescription: 'Change sort order for %0%',
- createblueprintDescription: 'Create Content Blueprint based on %0%',
+ createblueprintDescription: 'Create Document Blueprint based on %0%',
openContextMenu: 'Open context menu for',
currentLanguage: 'Current language',
switchLanguage: 'Switch language to',
@@ -2396,8 +2405,8 @@ export default {
headlineAdvanced: 'Advanced',
forceHideContentEditor: 'Hide content editor',
forceHideContentEditorHelp: 'Hide the content edit button and the content editor from the Block Editor overlay',
- girdInlineEditing: 'Inline editing',
- girdInlineEditingHelp:
+ gridInlineEditing: 'Inline editing',
+ gridInlineEditingHelp:
'Enables inline editing for the first Property. Additional properties can be edited in the overlay.',
blockHasChanges: 'You have made changes to this content. Are you sure you want to discard them?',
confirmCancelBlockCreationHeadline: 'Discard creation?',
@@ -2476,15 +2485,15 @@ export default {
addColumnSpanOption: 'Add spanning %0% columns option',
},
contentTemplatesDashboard: {
- whatHeadline: 'What are Content Blueprints?',
+ whatHeadline: 'What are Document Blueprints?',
whatDescription:
- 'Content Blueprints are pre-defined content that can be selected when creating a new content node.',
- createHeadline: 'How do I create a Content Blueprint?',
+ 'Document Blueprints are pre-defined content that can be selected when creating a new content node.',
+ createHeadline: 'How do I create a Document Blueprint?',
createDescription:
- 'There are two ways to create a Content Blueprint:
Right-click a content node and select "Create Content Blueprint" to create a new Content Blueprint. Right-click the Content Blueprints tree in the Settings section and select the Document Type you want to create a Content Blueprint for. Once given a name, editors can start using the Content Blueprint as a foundation for their new page.
',
- manageHeadline: 'How do I manage Content Blueprints?',
+ 'There are two ways to create a Document Blueprint:
Right-click a content node and select "Create Document Blueprint" to create a new Document Blueprint. Right-click the Document Blueprints tree in the Settings section and select the Document Type you want to create a Document Blueprint for. Once given a name, editors can start using the Document Blueprint as a foundation for their new page.
',
+ manageHeadline: 'How do I manage Document Blueprints?',
manageDescription:
- 'You can edit and delete Content Blueprints from the "Content Blueprints" tree in the Settings section. Expand the Document Type which the Content Blueprint is based on and click it to edit or delete it.',
+ 'You can edit and delete Document Blueprints from the "Document Blueprints" tree in the Settings section. Expand the Document Type which the Document Blueprint is based on and click it to edit or delete it.',
},
preview: {
endLabel: 'End',
@@ -2526,4 +2535,17 @@ export default {
routeNotFoundTitle: 'Not found',
routeNotFoundDescription: 'The requested route could not be found. Please check the URL and try again.',
},
+ codeEditor: {
+ label: 'Code editor',
+ languageConfigLabel: 'Language',
+ languageConfigDescription: 'Select the language for syntax highlighting and IntelliSense.',
+ heightConfigLabel: 'Height',
+ heightConfigDescription: 'Set the height of the code editor in pixels.',
+ lineNumbersConfigLabel: 'Line numbers',
+ lineNumbersConfigDescription: 'Show line numbers in the code editor.',
+ minimapConfigLabel: 'Minimap',
+ minimapConfigDescription: 'Show a minimap in the code editor.',
+ wordWrapConfigLabel: 'Word wrap',
+ wordWrapConfigDescription: 'Enable word wrapping in the code editor.',
+ },
} as UmbLocalizationDictionary;
diff --git a/src/Umbraco.Web.UI.Client/src/assets/lang/en.ts b/src/Umbraco.Web.UI.Client/src/assets/lang/en.ts
index 52d3d86a1a..0aca405fba 100644
--- a/src/Umbraco.Web.UI.Client/src/assets/lang/en.ts
+++ b/src/Umbraco.Web.UI.Client/src/assets/lang/en.ts
@@ -95,7 +95,7 @@ export default {
sort: 'Allow access to change the sort order for nodes',
translate: 'Allow access to translate a node',
update: 'Allow access to save a node',
- createblueprint: 'Allow access to create a Content Template',
+ createblueprint: 'Allow access to create a Document Blueprint',
notify: 'Allow access to setup notifications for content nodes',
},
apps: {
@@ -343,14 +343,16 @@ export default {
selectAllVariants: 'Select all variants',
},
blueprints: {
- createBlueprintFrom: 'Create a new Content Template from %0% ',
+ createBlueprintFrom: "Create a new Document Blueprint from '%0%'",
+ createBlueprintItemUnder: "Create a new item under '%0%'",
+ createBlueprintFolderUnder: "Create a new folder under '%0%'",
blankBlueprint: 'Blank',
- selectBlueprint: 'Select a Content Template',
- createdBlueprintHeading: 'Content Template created',
- createdBlueprintMessage: "A Content Template was created from '%0%'",
- duplicateBlueprintMessage: 'Another Content Template with the same name already exists',
+ selectBlueprint: 'Select a Document Blueprint',
+ createdBlueprintHeading: 'Document Blueprint created',
+ createdBlueprintMessage: "A Document Blueprint was created from '%0%'",
+ duplicateBlueprintMessage: 'Another Document Blueprint with the same name already exists',
blueprintDescription:
- 'A Content Template is predefined content that an editor can select to use as the\n basis for creating new content\n ',
+ 'A Document Blueprint is predefined content that an editor can select to use as the\n basis for creating new content\n ',
},
media: {
clickToUpload: 'Click to upload',
@@ -393,7 +395,7 @@ export default {
create: {
chooseNode: 'Where do you want to create the new %0%',
createUnder: 'Create an item under',
- createContentBlueprint: 'Select the Document Type you want to make a content template for',
+ createContentBlueprint: 'Select the Document Type you want to make a Document Blueprint for',
enterFolderName: 'Enter a folder name',
updateData: 'Choose a type and a title',
noDocumentTypes:
@@ -1389,7 +1391,7 @@ export default {
editContentPublishedFailedByParent: 'Content could not be published, because a parent page is not published',
editContentPublishedHeader: 'Content published',
editContentPublishedText: 'and visible on the website',
- editBlueprintSavedHeader: 'Content Template saved',
+ editBlueprintSavedHeader: 'Document Blueprint saved',
editBlueprintSavedText: 'Changes have been successfully saved',
editContentSavedHeader: 'Content saved',
editContentSavedText: 'Remember to publish to make changes visible',
@@ -1836,7 +1838,7 @@ export default {
},
treeHeaders: {
content: 'Content',
- contentBlueprints: 'Content Templates',
+ contentBlueprints: 'Document Blueprints',
media: 'Media',
cacheBrowser: 'Cache Browser',
contentRecycleBin: 'Recycle Bin',
@@ -1875,6 +1877,8 @@ export default {
settingsGroup: 'Settings',
templatingGroup: 'Templating',
thirdPartyGroup: 'Third Party',
+ structureGroup: 'Structure',
+ advancedGroup: 'Advanced',
webhooks: 'Webhooks',
},
update: {
@@ -1894,6 +1898,11 @@ export default {
changePhoto: 'Change photo',
configureMfa: 'Configure MFA',
emailRequired: 'Required - enter an email address for this user',
+ emailDescription: (usernameIsEmail: boolean) => {
+ return usernameIsEmail
+ ? 'The email address is used for notifications, password recovery, and as the username for logging in'
+ : 'The email address is used for notifications and password recovery';
+ },
newPassword: 'New password',
newPasswordFormatLengthTip: 'Minimum %0% character(s) to go!',
newPasswordFormatNonAlphaTip: 'There should be at least %0% special character(s) in there.',
@@ -1925,6 +1934,8 @@ export default {
lastLogin: 'Last login',
lastPasswordChangeDate: 'Password last changed',
loginname: 'Username',
+ loginnameRequired: 'Required - enter a username for this user',
+ loginnameDescription: 'The username is used for logging in',
mediastartnode: 'Media start node',
mediastartnodehelp: 'Limit the media library to a specific start node',
mediastartnodes: 'Media start nodes',
@@ -2227,7 +2238,7 @@ export default {
protectDescription: 'Setup access restrictions on %0%',
rightsDescription: 'Setup Permissions on %0%',
sortDescription: 'Change sort order for %0%',
- createblueprintDescription: 'Create Content Template based on %0%',
+ createblueprintDescription: 'Create Document Blueprint based on %0%',
openContextMenu: 'Open context menu for',
currentLanguage: 'Current language',
switchLanguage: 'Switch language to',
@@ -2459,8 +2470,8 @@ export default {
headlineAdvanced: 'Advanced',
forceHideContentEditor: 'Hide content editor',
forceHideContentEditorHelp: 'Hide the content edit button and the content editor from the Block Editor overlay.',
- girdInlineEditing: 'Inline editing',
- girdInlineEditingHelp:
+ gridInlineEditing: 'Inline editing',
+ gridInlineEditingHelp:
'Enables inline editing for the first Property. Additional properties can be edited in the overlay.',
blockHasChanges: 'You have made changes to this content. Are you sure you want to discard them?',
confirmCancelBlockCreationHeadline: 'Discard creation?',
@@ -2541,15 +2552,15 @@ export default {
labelInlineMode: 'Display inline with text',
},
contentTemplatesDashboard: {
- whatHeadline: 'What are Content Templates?',
+ whatHeadline: 'What are Document Blueprints?',
whatDescription:
- 'Content Templates are pre-defined content that can be selected when creating a new\n content node.\n ',
- createHeadline: 'How do I create a Content Template?',
+ 'Document Blueprints are pre-defined content that can be selected when creating a new\n content node.\n ',
+ createHeadline: 'How do I create a Document Blueprint?',
createDescription:
- '\n There are two ways to create a Content Template:
\n \n Right-click a content node and select "Create Content Template" to create a new Content Template. \n Right-click the Content Templates tree in the Settings section and select the Document Type you want to create a Content Template for. \n \n Once given a name, editors can start using the Content Template as a foundation for their new page.
\n ',
- manageHeadline: 'How do I manage Content Templates?',
+ '\n There are two ways to create a Document Blueprint:
\n \n Right-click a content node and select "Create Document Blueprint" to create a new Document Blueprint. \n Right-click the Document Blueprints tree in the Settings section and select the Document Type you want to create a Document Blueprint for. \n \n Once given a name, editors can start using the Document Blueprint as a foundation for their new page.
\n ',
+ manageHeadline: 'How do I manage Document Blueprints?',
manageDescription:
- 'You can edit and delete Content Templates from the "Content Templates" tree in the\n Settings section. Expand the Document Type which the Content Template is based on and click it to edit or delete\n it.\n ',
+ 'You can edit and delete Document Blueprints from the "Document Blueprints" tree in the\n Settings section. Expand the Document Type which the Document Blueprint is based on and click it to edit or delete\n it.\n ',
},
preview: {
endLabel: 'End',
@@ -2595,4 +2606,17 @@ export default {
routeNotFoundTitle: 'Not found',
routeNotFoundDescription: 'The requested route could not be found. Please check the URL and try again.',
},
+ codeEditor: {
+ label: 'Code editor',
+ languageConfigLabel: 'Language',
+ languageConfigDescription: 'Select the language for syntax highlighting and IntelliSense.',
+ heightConfigLabel: 'Height',
+ heightConfigDescription: 'Set the height of the code editor in pixels.',
+ lineNumbersConfigLabel: 'Line numbers',
+ lineNumbersConfigDescription: 'Show line numbers in the code editor.',
+ minimapConfigLabel: 'Minimap',
+ minimapConfigDescription: 'Show a minimap in the code editor.',
+ wordWrapConfigLabel: 'Word wrap',
+ wordWrapConfigDescription: 'Enable word wrapping in the code editor.',
+ },
} as UmbLocalizationDictionary;
diff --git a/src/Umbraco.Web.UI.Client/src/assets/lang/es-es.ts b/src/Umbraco.Web.UI.Client/src/assets/lang/es-es.ts
index 5903b96f02..b51465d40b 100644
--- a/src/Umbraco.Web.UI.Client/src/assets/lang/es-es.ts
+++ b/src/Umbraco.Web.UI.Client/src/assets/lang/es-es.ts
@@ -751,9 +751,13 @@ export default {
notifications: 'Notificaciones',
},
packager: {
+ actions: 'Acciones',
+ created: 'Creada',
+ createPackage: 'Crear paquete',
chooseLocalPackageText:
'Elige un paquete de tu máquina, seleccionando el botón Examinar y localizando el paquete. Los paquetes de Umbraco normalmente tienen la extensión ".umb" o ".zip".',
packageLicense: 'Licencia',
+ installed: 'Instalada',
installedPackages: 'Paquetes instalados',
noPackages: 'No tienes instalado ningún paquete',
noPackagesDescription:
@@ -890,6 +894,7 @@ export default {
translation: 'Traducción',
users: 'Usuarios',
help: 'Ayuda',
+ packages: 'Paquetes',
},
help: {
theBestUmbracoVideoTutorials: 'Los mejores tutoriales en video para Umbraco',
diff --git a/src/Umbraco.Web.UI.Client/src/assets/lang/hr-hr.ts b/src/Umbraco.Web.UI.Client/src/assets/lang/hr-hr.ts
index 96ecf0829c..29b8e8b566 100644
--- a/src/Umbraco.Web.UI.Client/src/assets/lang/hr-hr.ts
+++ b/src/Umbraco.Web.UI.Client/src/assets/lang/hr-hr.ts
@@ -2279,8 +2279,8 @@ export default {
headlineAdvanced: 'Napredno',
forceHideContentEditor: 'Sakrij uređivač sadržaja',
forceHideContentEditorHelp: 'Sakrij gumb za uređivanje sadržaja i uređivač sadržaja iz preklapanja Block Editor.',
- girdInlineEditing: 'Inline uređivanje',
- girdInlineEditingHelp:
+ gridInlineEditing: 'Inline uređivanje',
+ gridInlineEditingHelp:
'Omogućava inline uređivanje za prvo svojstvo. Dodatna svojstva se mogu uređivati u prekrivaču.',
blockHasChanges: 'Izmijenili ste ovaj sadržaj. Jeste li sigurni da ih želite odbaciti?',
confirmCancelBlockCreationHeadline: 'Odbaciti kreiranje?',
diff --git a/src/Umbraco.Web.UI.Client/src/css/user-defined.css b/src/Umbraco.Web.UI.Client/src/css/user-defined.css
deleted file mode 100644
index 35c48a145b..0000000000
--- a/src/Umbraco.Web.UI.Client/src/css/user-defined.css
+++ /dev/null
@@ -1 +0,0 @@
-/* This file can be overridden by placing a file with the same name in the /wwwroot/umbraco/backoffice/css folder of the website */
diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services.gen.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services.gen.ts
index 04f5fac093..7a132b3073 100644
--- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services.gen.ts
+++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services.gen.ts
@@ -3,7 +3,7 @@
import type { CancelablePromise } from './core/CancelablePromise';
import { OpenAPI } from './core/OpenAPI';
import { request as __request } from './core/request';
-import type { GetCultureData, GetCultureResponse, PostDataTypeData, PostDataTypeResponse, GetDataTypeByIdData, GetDataTypeByIdResponse, DeleteDataTypeByIdData, DeleteDataTypeByIdResponse, PutDataTypeByIdData, PutDataTypeByIdResponse, PostDataTypeByIdCopyData, PostDataTypeByIdCopyResponse, GetDataTypeByIdIsUsedData, GetDataTypeByIdIsUsedResponse, PutDataTypeByIdMoveData, PutDataTypeByIdMoveResponse, GetDataTypeByIdReferencesData, GetDataTypeByIdReferencesResponse, GetDataTypeConfigurationResponse, PostDataTypeFolderData, PostDataTypeFolderResponse, GetDataTypeFolderByIdData, GetDataTypeFolderByIdResponse, DeleteDataTypeFolderByIdData, DeleteDataTypeFolderByIdResponse, PutDataTypeFolderByIdData, PutDataTypeFolderByIdResponse, GetFilterDataTypeData, GetFilterDataTypeResponse, GetItemDataTypeData, GetItemDataTypeResponse, GetItemDataTypeSearchData, GetItemDataTypeSearchResponse, GetTreeDataTypeAncestorsData, GetTreeDataTypeAncestorsResponse, GetTreeDataTypeChildrenData, GetTreeDataTypeChildrenResponse, GetTreeDataTypeRootData, GetTreeDataTypeRootResponse, GetDictionaryData, GetDictionaryResponse, PostDictionaryData, PostDictionaryResponse, GetDictionaryByIdData, GetDictionaryByIdResponse, DeleteDictionaryByIdData, DeleteDictionaryByIdResponse, PutDictionaryByIdData, PutDictionaryByIdResponse, GetDictionaryByIdExportData, GetDictionaryByIdExportResponse, PutDictionaryByIdMoveData, PutDictionaryByIdMoveResponse, PostDictionaryImportData, PostDictionaryImportResponse, GetItemDictionaryData, GetItemDictionaryResponse, GetTreeDictionaryAncestorsData, GetTreeDictionaryAncestorsResponse, GetTreeDictionaryChildrenData, GetTreeDictionaryChildrenResponse, GetTreeDictionaryRootData, GetTreeDictionaryRootResponse, PostDocumentBlueprintData, PostDocumentBlueprintResponse, GetDocumentBlueprintByIdData, GetDocumentBlueprintByIdResponse, DeleteDocumentBlueprintByIdData, DeleteDocumentBlueprintByIdResponse, PutDocumentBlueprintByIdData, PutDocumentBlueprintByIdResponse, PutDocumentBlueprintByIdMoveData, PutDocumentBlueprintByIdMoveResponse, PostDocumentBlueprintFolderData, PostDocumentBlueprintFolderResponse, GetDocumentBlueprintFolderByIdData, GetDocumentBlueprintFolderByIdResponse, DeleteDocumentBlueprintFolderByIdData, DeleteDocumentBlueprintFolderByIdResponse, PutDocumentBlueprintFolderByIdData, PutDocumentBlueprintFolderByIdResponse, PostDocumentBlueprintFromDocumentData, PostDocumentBlueprintFromDocumentResponse, GetItemDocumentBlueprintData, GetItemDocumentBlueprintResponse, GetTreeDocumentBlueprintAncestorsData, GetTreeDocumentBlueprintAncestorsResponse, GetTreeDocumentBlueprintChildrenData, GetTreeDocumentBlueprintChildrenResponse, GetTreeDocumentBlueprintRootData, GetTreeDocumentBlueprintRootResponse, PostDocumentTypeData, PostDocumentTypeResponse, GetDocumentTypeByIdData, GetDocumentTypeByIdResponse, DeleteDocumentTypeByIdData, DeleteDocumentTypeByIdResponse, PutDocumentTypeByIdData, PutDocumentTypeByIdResponse, GetDocumentTypeByIdAllowedChildrenData, GetDocumentTypeByIdAllowedChildrenResponse, GetDocumentTypeByIdBlueprintData, GetDocumentTypeByIdBlueprintResponse, GetDocumentTypeByIdCompositionReferencesData, GetDocumentTypeByIdCompositionReferencesResponse, PostDocumentTypeByIdCopyData, PostDocumentTypeByIdCopyResponse, GetDocumentTypeByIdExportData, GetDocumentTypeByIdExportResponse, PutDocumentTypeByIdImportData, PutDocumentTypeByIdImportResponse, PutDocumentTypeByIdMoveData, PutDocumentTypeByIdMoveResponse, GetDocumentTypeAllowedAtRootData, GetDocumentTypeAllowedAtRootResponse, PostDocumentTypeAvailableCompositionsData, PostDocumentTypeAvailableCompositionsResponse, GetDocumentTypeConfigurationResponse, PostDocumentTypeFolderData, PostDocumentTypeFolderResponse, GetDocumentTypeFolderByIdData, GetDocumentTypeFolderByIdResponse, DeleteDocumentTypeFolderByIdData, DeleteDocumentTypeFolderByIdResponse, PutDocumentTypeFolderByIdData, PutDocumentTypeFolderByIdResponse, PostDocumentTypeImportData, PostDocumentTypeImportResponse, GetItemDocumentTypeData, GetItemDocumentTypeResponse, GetItemDocumentTypeSearchData, GetItemDocumentTypeSearchResponse, GetTreeDocumentTypeAncestorsData, GetTreeDocumentTypeAncestorsResponse, GetTreeDocumentTypeChildrenData, GetTreeDocumentTypeChildrenResponse, GetTreeDocumentTypeRootData, GetTreeDocumentTypeRootResponse, GetDocumentVersionData, GetDocumentVersionResponse, GetDocumentVersionByIdData, GetDocumentVersionByIdResponse, PutDocumentVersionByIdPreventCleanupData, PutDocumentVersionByIdPreventCleanupResponse, PostDocumentVersionByIdRollbackData, PostDocumentVersionByIdRollbackResponse, GetCollectionDocumentByIdData, GetCollectionDocumentByIdResponse, PostDocumentData, PostDocumentResponse, GetDocumentByIdData, GetDocumentByIdResponse, DeleteDocumentByIdData, DeleteDocumentByIdResponse, PutDocumentByIdData, PutDocumentByIdResponse, GetDocumentByIdAuditLogData, GetDocumentByIdAuditLogResponse, PostDocumentByIdCopyData, PostDocumentByIdCopyResponse, GetDocumentByIdDomainsData, GetDocumentByIdDomainsResponse, PutDocumentByIdDomainsData, PutDocumentByIdDomainsResponse, PutDocumentByIdMoveData, PutDocumentByIdMoveResponse, PutDocumentByIdMoveToRecycleBinData, PutDocumentByIdMoveToRecycleBinResponse, GetDocumentByIdNotificationsData, GetDocumentByIdNotificationsResponse, PutDocumentByIdNotificationsData, PutDocumentByIdNotificationsResponse, PostDocumentByIdPublicAccessData, PostDocumentByIdPublicAccessResponse, DeleteDocumentByIdPublicAccessData, DeleteDocumentByIdPublicAccessResponse, GetDocumentByIdPublicAccessData, GetDocumentByIdPublicAccessResponse, PutDocumentByIdPublicAccessData, PutDocumentByIdPublicAccessResponse, PutDocumentByIdPublishData, PutDocumentByIdPublishResponse, PutDocumentByIdPublishWithDescendantsData, PutDocumentByIdPublishWithDescendantsResponse, GetDocumentByIdReferencedByData, GetDocumentByIdReferencedByResponse, GetDocumentByIdReferencedDescendantsData, GetDocumentByIdReferencedDescendantsResponse, PutDocumentByIdUnpublishData, PutDocumentByIdUnpublishResponse, PutDocumentByIdValidateData, PutDocumentByIdValidateResponse, GetDocumentAreReferencedData, GetDocumentAreReferencedResponse, GetDocumentConfigurationResponse, PutDocumentSortData, PutDocumentSortResponse, GetDocumentUrlsData, GetDocumentUrlsResponse, PostDocumentValidateData, PostDocumentValidateResponse, GetItemDocumentData, GetItemDocumentResponse, GetItemDocumentSearchData, GetItemDocumentSearchResponse, DeleteRecycleBinDocumentResponse, DeleteRecycleBinDocumentByIdData, DeleteRecycleBinDocumentByIdResponse, GetRecycleBinDocumentByIdOriginalParentData, GetRecycleBinDocumentByIdOriginalParentResponse, PutRecycleBinDocumentByIdRestoreData, PutRecycleBinDocumentByIdRestoreResponse, GetRecycleBinDocumentChildrenData, GetRecycleBinDocumentChildrenResponse, GetRecycleBinDocumentRootData, GetRecycleBinDocumentRootResponse, GetTreeDocumentAncestorsData, GetTreeDocumentAncestorsResponse, GetTreeDocumentChildrenData, GetTreeDocumentChildrenResponse, GetTreeDocumentRootData, GetTreeDocumentRootResponse, PostDynamicRootQueryData, PostDynamicRootQueryResponse, GetDynamicRootStepsResponse, GetHealthCheckGroupData, GetHealthCheckGroupResponse, GetHealthCheckGroupByNameData, GetHealthCheckGroupByNameResponse, PostHealthCheckGroupByNameCheckData, PostHealthCheckGroupByNameCheckResponse, PostHealthCheckExecuteActionData, PostHealthCheckExecuteActionResponse, GetHelpData, GetHelpResponse, GetImagingResizeUrlsData, GetImagingResizeUrlsResponse, GetImportAnalyzeData, GetImportAnalyzeResponse, GetIndexerData, GetIndexerResponse, GetIndexerByIndexNameData, GetIndexerByIndexNameResponse, PostIndexerByIndexNameRebuildData, PostIndexerByIndexNameRebuildResponse, GetInstallSettingsResponse, PostInstallSetupData, PostInstallSetupResponse, PostInstallValidateDatabaseData, PostInstallValidateDatabaseResponse, GetItemLanguageData, GetItemLanguageResponse, GetItemLanguageDefaultResponse, GetLanguageData, GetLanguageResponse, PostLanguageData, PostLanguageResponse, GetLanguageByIsoCodeData, GetLanguageByIsoCodeResponse, DeleteLanguageByIsoCodeData, DeleteLanguageByIsoCodeResponse, PutLanguageByIsoCodeData, PutLanguageByIsoCodeResponse, GetLogViewerLevelData, GetLogViewerLevelResponse, GetLogViewerLevelCountData, GetLogViewerLevelCountResponse, GetLogViewerLogData, GetLogViewerLogResponse, GetLogViewerMessageTemplateData, GetLogViewerMessageTemplateResponse, GetLogViewerSavedSearchData, GetLogViewerSavedSearchResponse, PostLogViewerSavedSearchData, PostLogViewerSavedSearchResponse, GetLogViewerSavedSearchByNameData, GetLogViewerSavedSearchByNameResponse, DeleteLogViewerSavedSearchByNameData, DeleteLogViewerSavedSearchByNameResponse, GetLogViewerValidateLogsSizeData, GetLogViewerValidateLogsSizeResponse, GetManifestManifestResponse, GetManifestManifestPrivateResponse, GetManifestManifestPublicResponse, GetItemMediaTypeData, GetItemMediaTypeResponse, GetItemMediaTypeAllowedData, GetItemMediaTypeAllowedResponse, GetItemMediaTypeFoldersData, GetItemMediaTypeFoldersResponse, GetItemMediaTypeSearchData, GetItemMediaTypeSearchResponse, PostMediaTypeData, PostMediaTypeResponse, GetMediaTypeByIdData, GetMediaTypeByIdResponse, DeleteMediaTypeByIdData, DeleteMediaTypeByIdResponse, PutMediaTypeByIdData, PutMediaTypeByIdResponse, GetMediaTypeByIdAllowedChildrenData, GetMediaTypeByIdAllowedChildrenResponse, GetMediaTypeByIdCompositionReferencesData, GetMediaTypeByIdCompositionReferencesResponse, PostMediaTypeByIdCopyData, PostMediaTypeByIdCopyResponse, GetMediaTypeByIdExportData, GetMediaTypeByIdExportResponse, PutMediaTypeByIdImportData, PutMediaTypeByIdImportResponse, PutMediaTypeByIdMoveData, PutMediaTypeByIdMoveResponse, GetMediaTypeAllowedAtRootData, GetMediaTypeAllowedAtRootResponse, PostMediaTypeAvailableCompositionsData, PostMediaTypeAvailableCompositionsResponse, PostMediaTypeFolderData, PostMediaTypeFolderResponse, GetMediaTypeFolderByIdData, GetMediaTypeFolderByIdResponse, DeleteMediaTypeFolderByIdData, DeleteMediaTypeFolderByIdResponse, PutMediaTypeFolderByIdData, PutMediaTypeFolderByIdResponse, PostMediaTypeImportData, PostMediaTypeImportResponse, GetTreeMediaTypeAncestorsData, GetTreeMediaTypeAncestorsResponse, GetTreeMediaTypeChildrenData, GetTreeMediaTypeChildrenResponse, GetTreeMediaTypeRootData, GetTreeMediaTypeRootResponse, GetCollectionMediaData, GetCollectionMediaResponse, GetItemMediaData, GetItemMediaResponse, GetItemMediaSearchData, GetItemMediaSearchResponse, PostMediaData, PostMediaResponse, GetMediaByIdData, GetMediaByIdResponse, DeleteMediaByIdData, DeleteMediaByIdResponse, PutMediaByIdData, PutMediaByIdResponse, GetMediaByIdAuditLogData, GetMediaByIdAuditLogResponse, PutMediaByIdMoveData, PutMediaByIdMoveResponse, PutMediaByIdMoveToRecycleBinData, PutMediaByIdMoveToRecycleBinResponse, GetMediaByIdReferencedByData, GetMediaByIdReferencedByResponse, GetMediaByIdReferencedDescendantsData, GetMediaByIdReferencedDescendantsResponse, PutMediaByIdValidateData, PutMediaByIdValidateResponse, GetMediaAreReferencedData, GetMediaAreReferencedResponse, GetMediaConfigurationResponse, PutMediaSortData, PutMediaSortResponse, GetMediaUrlsData, GetMediaUrlsResponse, PostMediaValidateData, PostMediaValidateResponse, DeleteRecycleBinMediaResponse, DeleteRecycleBinMediaByIdData, DeleteRecycleBinMediaByIdResponse, GetRecycleBinMediaByIdOriginalParentData, GetRecycleBinMediaByIdOriginalParentResponse, PutRecycleBinMediaByIdRestoreData, PutRecycleBinMediaByIdRestoreResponse, GetRecycleBinMediaChildrenData, GetRecycleBinMediaChildrenResponse, GetRecycleBinMediaRootData, GetRecycleBinMediaRootResponse, GetTreeMediaAncestorsData, GetTreeMediaAncestorsResponse, GetTreeMediaChildrenData, GetTreeMediaChildrenResponse, GetTreeMediaRootData, GetTreeMediaRootResponse, GetItemMemberGroupData, GetItemMemberGroupResponse, GetMemberGroupData, GetMemberGroupResponse, PostMemberGroupData, PostMemberGroupResponse, GetMemberGroupByIdData, GetMemberGroupByIdResponse, DeleteMemberGroupByIdData, DeleteMemberGroupByIdResponse, PutMemberGroupByIdData, PutMemberGroupByIdResponse, GetTreeMemberGroupRootData, GetTreeMemberGroupRootResponse, GetItemMemberTypeData, GetItemMemberTypeResponse, GetItemMemberTypeSearchData, GetItemMemberTypeSearchResponse, PostMemberTypeData, PostMemberTypeResponse, GetMemberTypeByIdData, GetMemberTypeByIdResponse, DeleteMemberTypeByIdData, DeleteMemberTypeByIdResponse, PutMemberTypeByIdData, PutMemberTypeByIdResponse, GetMemberTypeByIdCompositionReferencesData, GetMemberTypeByIdCompositionReferencesResponse, PostMemberTypeByIdCopyData, PostMemberTypeByIdCopyResponse, PostMemberTypeAvailableCompositionsData, PostMemberTypeAvailableCompositionsResponse, GetTreeMemberTypeRootData, GetTreeMemberTypeRootResponse, GetFilterMemberData, GetFilterMemberResponse, GetItemMemberData, GetItemMemberResponse, GetItemMemberSearchData, GetItemMemberSearchResponse, PostMemberData, PostMemberResponse, GetMemberByIdData, GetMemberByIdResponse, DeleteMemberByIdData, DeleteMemberByIdResponse, PutMemberByIdData, PutMemberByIdResponse, PutMemberByIdValidateData, PutMemberByIdValidateResponse, GetMemberConfigurationResponse, PostMemberValidateData, PostMemberValidateResponse, PostModelsBuilderBuildResponse, GetModelsBuilderDashboardResponse, GetModelsBuilderStatusResponse, GetObjectTypesData, GetObjectTypesResponse, GetOembedQueryData, GetOembedQueryResponse, PostPackageByNameRunMigrationData, PostPackageByNameRunMigrationResponse, GetPackageConfigurationResponse, GetPackageCreatedData, GetPackageCreatedResponse, PostPackageCreatedData, PostPackageCreatedResponse, GetPackageCreatedByIdData, GetPackageCreatedByIdResponse, DeletePackageCreatedByIdData, DeletePackageCreatedByIdResponse, PutPackageCreatedByIdData, PutPackageCreatedByIdResponse, GetPackageCreatedByIdDownloadData, GetPackageCreatedByIdDownloadResponse, GetPackageMigrationStatusData, GetPackageMigrationStatusResponse, GetItemPartialViewData, GetItemPartialViewResponse, PostPartialViewData, PostPartialViewResponse, GetPartialViewByPathData, GetPartialViewByPathResponse, DeletePartialViewByPathData, DeletePartialViewByPathResponse, PutPartialViewByPathData, PutPartialViewByPathResponse, PutPartialViewByPathRenameData, PutPartialViewByPathRenameResponse, PostPartialViewFolderData, PostPartialViewFolderResponse, GetPartialViewFolderByPathData, GetPartialViewFolderByPathResponse, DeletePartialViewFolderByPathData, DeletePartialViewFolderByPathResponse, GetPartialViewSnippetData, GetPartialViewSnippetResponse, GetPartialViewSnippetByIdData, GetPartialViewSnippetByIdResponse, GetTreePartialViewAncestorsData, GetTreePartialViewAncestorsResponse, GetTreePartialViewChildrenData, GetTreePartialViewChildrenResponse, GetTreePartialViewRootData, GetTreePartialViewRootResponse, DeletePreviewResponse, PostPreviewResponse, GetProfilingStatusResponse, PutProfilingStatusData, PutProfilingStatusResponse, GetPropertyTypeIsUsedData, GetPropertyTypeIsUsedResponse, PostPublishedCacheCollectResponse, PostPublishedCacheRebuildResponse, PostPublishedCacheReloadResponse, GetPublishedCacheStatusResponse, GetRedirectManagementData, GetRedirectManagementResponse, GetRedirectManagementByIdData, GetRedirectManagementByIdResponse, DeleteRedirectManagementByIdData, DeleteRedirectManagementByIdResponse, GetRedirectManagementStatusResponse, PostRedirectManagementStatusData, PostRedirectManagementStatusResponse, GetItemRelationTypeData, GetItemRelationTypeResponse, GetRelationTypeData, GetRelationTypeResponse, GetRelationTypeByIdData, GetRelationTypeByIdResponse, GetRelationByRelationTypeIdData, GetRelationByRelationTypeIdResponse, GetItemScriptData, GetItemScriptResponse, PostScriptData, PostScriptResponse, GetScriptByPathData, GetScriptByPathResponse, DeleteScriptByPathData, DeleteScriptByPathResponse, PutScriptByPathData, PutScriptByPathResponse, PutScriptByPathRenameData, PutScriptByPathRenameResponse, PostScriptFolderData, PostScriptFolderResponse, GetScriptFolderByPathData, GetScriptFolderByPathResponse, DeleteScriptFolderByPathData, DeleteScriptFolderByPathResponse, GetTreeScriptAncestorsData, GetTreeScriptAncestorsResponse, GetTreeScriptChildrenData, GetTreeScriptChildrenResponse, GetTreeScriptRootData, GetTreeScriptRootResponse, GetSearcherData, GetSearcherResponse, GetSearcherBySearcherNameQueryData, GetSearcherBySearcherNameQueryResponse, GetSecurityConfigurationResponse, PostSecurityForgotPasswordData, PostSecurityForgotPasswordResponse, PostSecurityForgotPasswordResetData, PostSecurityForgotPasswordResetResponse, PostSecurityForgotPasswordVerifyData, PostSecurityForgotPasswordVerifyResponse, GetSegmentData, GetSegmentResponse, GetServerConfigurationResponse, GetServerInformationResponse, GetServerStatusResponse, GetServerTroubleshootingResponse, GetItemStaticFileData, GetItemStaticFileResponse, GetTreeStaticFileAncestorsData, GetTreeStaticFileAncestorsResponse, GetTreeStaticFileChildrenData, GetTreeStaticFileChildrenResponse, GetTreeStaticFileRootData, GetTreeStaticFileRootResponse, GetItemStylesheetData, GetItemStylesheetResponse, PostStylesheetData, PostStylesheetResponse, GetStylesheetByPathData, GetStylesheetByPathResponse, DeleteStylesheetByPathData, DeleteStylesheetByPathResponse, PutStylesheetByPathData, PutStylesheetByPathResponse, PutStylesheetByPathRenameData, PutStylesheetByPathRenameResponse, PostStylesheetFolderData, PostStylesheetFolderResponse, GetStylesheetFolderByPathData, GetStylesheetFolderByPathResponse, DeleteStylesheetFolderByPathData, DeleteStylesheetFolderByPathResponse, GetTreeStylesheetAncestorsData, GetTreeStylesheetAncestorsResponse, GetTreeStylesheetChildrenData, GetTreeStylesheetChildrenResponse, GetTreeStylesheetRootData, GetTreeStylesheetRootResponse, GetTagData, GetTagResponse, GetTelemetryData, GetTelemetryResponse, GetTelemetryLevelResponse, PostTelemetryLevelData, PostTelemetryLevelResponse, GetItemTemplateData, GetItemTemplateResponse, GetItemTemplateSearchData, GetItemTemplateSearchResponse, PostTemplateData, PostTemplateResponse, GetTemplateByIdData, GetTemplateByIdResponse, DeleteTemplateByIdData, DeleteTemplateByIdResponse, PutTemplateByIdData, PutTemplateByIdResponse, GetTemplateConfigurationResponse, PostTemplateQueryExecuteData, PostTemplateQueryExecuteResponse, GetTemplateQuerySettingsResponse, GetTreeTemplateAncestorsData, GetTreeTemplateAncestorsResponse, GetTreeTemplateChildrenData, GetTreeTemplateChildrenResponse, GetTreeTemplateRootData, GetTreeTemplateRootResponse, PostTemporaryFileData, PostTemporaryFileResponse, GetTemporaryFileByIdData, GetTemporaryFileByIdResponse, DeleteTemporaryFileByIdData, DeleteTemporaryFileByIdResponse, GetTemporaryFileConfigurationResponse, PostUpgradeAuthorizeResponse, GetUpgradeSettingsResponse, PostUserDataData, PostUserDataResponse, GetUserDataData, GetUserDataResponse, PutUserDataData, PutUserDataResponse, GetUserDataByIdData, GetUserDataByIdResponse, GetFilterUserGroupData, GetFilterUserGroupResponse, GetItemUserGroupData, GetItemUserGroupResponse, DeleteUserGroupData, DeleteUserGroupResponse, PostUserGroupData, PostUserGroupResponse, GetUserGroupData, GetUserGroupResponse, GetUserGroupByIdData, GetUserGroupByIdResponse, DeleteUserGroupByIdData, DeleteUserGroupByIdResponse, PutUserGroupByIdData, PutUserGroupByIdResponse, DeleteUserGroupByIdUsersData, DeleteUserGroupByIdUsersResponse, PostUserGroupByIdUsersData, PostUserGroupByIdUsersResponse, GetFilterUserData, GetFilterUserResponse, GetItemUserData, GetItemUserResponse, PostUserData, PostUserResponse, DeleteUserData, DeleteUserResponse, GetUserData, GetUserResponse, GetUserByIdData, GetUserByIdResponse, DeleteUserByIdData, DeleteUserByIdResponse, PutUserByIdData, PutUserByIdResponse, GetUserById2FaData, GetUserById2FaResponse, DeleteUserById2FaByProviderNameData, DeleteUserById2FaByProviderNameResponse, GetUserByIdCalculateStartNodesData, GetUserByIdCalculateStartNodesResponse, PostUserByIdChangePasswordData, PostUserByIdChangePasswordResponse, PostUserByIdResetPasswordData, PostUserByIdResetPasswordResponse, DeleteUserAvatarByIdData, DeleteUserAvatarByIdResponse, PostUserAvatarByIdData, PostUserAvatarByIdResponse, GetUserConfigurationResponse, GetUserCurrentResponse, GetUserCurrent2FaResponse, DeleteUserCurrent2FaByProviderNameData, DeleteUserCurrent2FaByProviderNameResponse, PostUserCurrent2FaByProviderNameData, PostUserCurrent2FaByProviderNameResponse, GetUserCurrent2FaByProviderNameData, GetUserCurrent2FaByProviderNameResponse, PostUserCurrentAvatarData, PostUserCurrentAvatarResponse, PostUserCurrentChangePasswordData, PostUserCurrentChangePasswordResponse, GetUserCurrentConfigurationResponse, GetUserCurrentLoginProvidersResponse, GetUserCurrentPermissionsData, GetUserCurrentPermissionsResponse, GetUserCurrentPermissionsDocumentData, GetUserCurrentPermissionsDocumentResponse, GetUserCurrentPermissionsMediaData, GetUserCurrentPermissionsMediaResponse, PostUserDisableData, PostUserDisableResponse, PostUserEnableData, PostUserEnableResponse, PostUserInviteData, PostUserInviteResponse, PostUserInviteCreatePasswordData, PostUserInviteCreatePasswordResponse, PostUserInviteResendData, PostUserInviteResendResponse, PostUserInviteVerifyData, PostUserInviteVerifyResponse, PostUserSetUserGroupsData, PostUserSetUserGroupsResponse, PostUserUnlockData, PostUserUnlockResponse, GetItemWebhookData, GetItemWebhookResponse, GetWebhookData, GetWebhookResponse, PostWebhookData, PostWebhookResponse, GetWebhookByIdData, GetWebhookByIdResponse, DeleteWebhookByIdData, DeleteWebhookByIdResponse, PutWebhookByIdData, PutWebhookByIdResponse, GetWebhookEventsData, GetWebhookEventsResponse } from './types.gen';
+import type { GetCultureData, GetCultureResponse, PostDataTypeData, PostDataTypeResponse, GetDataTypeByIdData, GetDataTypeByIdResponse, DeleteDataTypeByIdData, DeleteDataTypeByIdResponse, PutDataTypeByIdData, PutDataTypeByIdResponse, PostDataTypeByIdCopyData, PostDataTypeByIdCopyResponse, GetDataTypeByIdIsUsedData, GetDataTypeByIdIsUsedResponse, PutDataTypeByIdMoveData, PutDataTypeByIdMoveResponse, GetDataTypeByIdReferencesData, GetDataTypeByIdReferencesResponse, GetDataTypeConfigurationResponse, PostDataTypeFolderData, PostDataTypeFolderResponse, GetDataTypeFolderByIdData, GetDataTypeFolderByIdResponse, DeleteDataTypeFolderByIdData, DeleteDataTypeFolderByIdResponse, PutDataTypeFolderByIdData, PutDataTypeFolderByIdResponse, GetFilterDataTypeData, GetFilterDataTypeResponse, GetItemDataTypeData, GetItemDataTypeResponse, GetItemDataTypeSearchData, GetItemDataTypeSearchResponse, GetTreeDataTypeAncestorsData, GetTreeDataTypeAncestorsResponse, GetTreeDataTypeChildrenData, GetTreeDataTypeChildrenResponse, GetTreeDataTypeRootData, GetTreeDataTypeRootResponse, GetDictionaryData, GetDictionaryResponse, PostDictionaryData, PostDictionaryResponse, GetDictionaryByIdData, GetDictionaryByIdResponse, DeleteDictionaryByIdData, DeleteDictionaryByIdResponse, PutDictionaryByIdData, PutDictionaryByIdResponse, GetDictionaryByIdExportData, GetDictionaryByIdExportResponse, PutDictionaryByIdMoveData, PutDictionaryByIdMoveResponse, PostDictionaryImportData, PostDictionaryImportResponse, GetItemDictionaryData, GetItemDictionaryResponse, GetTreeDictionaryAncestorsData, GetTreeDictionaryAncestorsResponse, GetTreeDictionaryChildrenData, GetTreeDictionaryChildrenResponse, GetTreeDictionaryRootData, GetTreeDictionaryRootResponse, PostDocumentBlueprintData, PostDocumentBlueprintResponse, GetDocumentBlueprintByIdData, GetDocumentBlueprintByIdResponse, DeleteDocumentBlueprintByIdData, DeleteDocumentBlueprintByIdResponse, PutDocumentBlueprintByIdData, PutDocumentBlueprintByIdResponse, PutDocumentBlueprintByIdMoveData, PutDocumentBlueprintByIdMoveResponse, PostDocumentBlueprintFolderData, PostDocumentBlueprintFolderResponse, GetDocumentBlueprintFolderByIdData, GetDocumentBlueprintFolderByIdResponse, DeleteDocumentBlueprintFolderByIdData, DeleteDocumentBlueprintFolderByIdResponse, PutDocumentBlueprintFolderByIdData, PutDocumentBlueprintFolderByIdResponse, PostDocumentBlueprintFromDocumentData, PostDocumentBlueprintFromDocumentResponse, GetItemDocumentBlueprintData, GetItemDocumentBlueprintResponse, GetTreeDocumentBlueprintAncestorsData, GetTreeDocumentBlueprintAncestorsResponse, GetTreeDocumentBlueprintChildrenData, GetTreeDocumentBlueprintChildrenResponse, GetTreeDocumentBlueprintRootData, GetTreeDocumentBlueprintRootResponse, PostDocumentTypeData, PostDocumentTypeResponse, GetDocumentTypeByIdData, GetDocumentTypeByIdResponse, DeleteDocumentTypeByIdData, DeleteDocumentTypeByIdResponse, PutDocumentTypeByIdData, PutDocumentTypeByIdResponse, GetDocumentTypeByIdAllowedChildrenData, GetDocumentTypeByIdAllowedChildrenResponse, GetDocumentTypeByIdBlueprintData, GetDocumentTypeByIdBlueprintResponse, GetDocumentTypeByIdCompositionReferencesData, GetDocumentTypeByIdCompositionReferencesResponse, PostDocumentTypeByIdCopyData, PostDocumentTypeByIdCopyResponse, GetDocumentTypeByIdExportData, GetDocumentTypeByIdExportResponse, PutDocumentTypeByIdImportData, PutDocumentTypeByIdImportResponse, PutDocumentTypeByIdMoveData, PutDocumentTypeByIdMoveResponse, GetDocumentTypeAllowedAtRootData, GetDocumentTypeAllowedAtRootResponse, PostDocumentTypeAvailableCompositionsData, PostDocumentTypeAvailableCompositionsResponse, GetDocumentTypeConfigurationResponse, PostDocumentTypeFolderData, PostDocumentTypeFolderResponse, GetDocumentTypeFolderByIdData, GetDocumentTypeFolderByIdResponse, DeleteDocumentTypeFolderByIdData, DeleteDocumentTypeFolderByIdResponse, PutDocumentTypeFolderByIdData, PutDocumentTypeFolderByIdResponse, PostDocumentTypeImportData, PostDocumentTypeImportResponse, GetItemDocumentTypeData, GetItemDocumentTypeResponse, GetItemDocumentTypeSearchData, GetItemDocumentTypeSearchResponse, GetTreeDocumentTypeAncestorsData, GetTreeDocumentTypeAncestorsResponse, GetTreeDocumentTypeChildrenData, GetTreeDocumentTypeChildrenResponse, GetTreeDocumentTypeRootData, GetTreeDocumentTypeRootResponse, GetDocumentVersionData, GetDocumentVersionResponse, GetDocumentVersionByIdData, GetDocumentVersionByIdResponse, PutDocumentVersionByIdPreventCleanupData, PutDocumentVersionByIdPreventCleanupResponse, PostDocumentVersionByIdRollbackData, PostDocumentVersionByIdRollbackResponse, GetCollectionDocumentByIdData, GetCollectionDocumentByIdResponse, PostDocumentData, PostDocumentResponse, GetDocumentByIdData, GetDocumentByIdResponse, DeleteDocumentByIdData, DeleteDocumentByIdResponse, PutDocumentByIdData, PutDocumentByIdResponse, GetDocumentByIdAuditLogData, GetDocumentByIdAuditLogResponse, PostDocumentByIdCopyData, PostDocumentByIdCopyResponse, GetDocumentByIdDomainsData, GetDocumentByIdDomainsResponse, PutDocumentByIdDomainsData, PutDocumentByIdDomainsResponse, PutDocumentByIdMoveData, PutDocumentByIdMoveResponse, PutDocumentByIdMoveToRecycleBinData, PutDocumentByIdMoveToRecycleBinResponse, GetDocumentByIdNotificationsData, GetDocumentByIdNotificationsResponse, PutDocumentByIdNotificationsData, PutDocumentByIdNotificationsResponse, PostDocumentByIdPublicAccessData, PostDocumentByIdPublicAccessResponse, DeleteDocumentByIdPublicAccessData, DeleteDocumentByIdPublicAccessResponse, GetDocumentByIdPublicAccessData, GetDocumentByIdPublicAccessResponse, PutDocumentByIdPublicAccessData, PutDocumentByIdPublicAccessResponse, PutDocumentByIdPublishData, PutDocumentByIdPublishResponse, PutDocumentByIdPublishWithDescendantsData, PutDocumentByIdPublishWithDescendantsResponse, GetDocumentByIdReferencedByData, GetDocumentByIdReferencedByResponse, GetDocumentByIdReferencedDescendantsData, GetDocumentByIdReferencedDescendantsResponse, PutDocumentByIdUnpublishData, PutDocumentByIdUnpublishResponse, PutDocumentByIdValidateData, PutDocumentByIdValidateResponse, GetDocumentAreReferencedData, GetDocumentAreReferencedResponse, GetDocumentConfigurationResponse, PutDocumentSortData, PutDocumentSortResponse, GetDocumentUrlsData, GetDocumentUrlsResponse, PostDocumentValidateData, PostDocumentValidateResponse, GetItemDocumentData, GetItemDocumentResponse, GetItemDocumentSearchData, GetItemDocumentSearchResponse, DeleteRecycleBinDocumentResponse, DeleteRecycleBinDocumentByIdData, DeleteRecycleBinDocumentByIdResponse, GetRecycleBinDocumentByIdOriginalParentData, GetRecycleBinDocumentByIdOriginalParentResponse, PutRecycleBinDocumentByIdRestoreData, PutRecycleBinDocumentByIdRestoreResponse, GetRecycleBinDocumentChildrenData, GetRecycleBinDocumentChildrenResponse, GetRecycleBinDocumentRootData, GetRecycleBinDocumentRootResponse, GetTreeDocumentAncestorsData, GetTreeDocumentAncestorsResponse, GetTreeDocumentChildrenData, GetTreeDocumentChildrenResponse, GetTreeDocumentRootData, GetTreeDocumentRootResponse, PostDynamicRootQueryData, PostDynamicRootQueryResponse, GetDynamicRootStepsResponse, GetHealthCheckGroupData, GetHealthCheckGroupResponse, GetHealthCheckGroupByNameData, GetHealthCheckGroupByNameResponse, PostHealthCheckGroupByNameCheckData, PostHealthCheckGroupByNameCheckResponse, PostHealthCheckExecuteActionData, PostHealthCheckExecuteActionResponse, GetHelpData, GetHelpResponse, GetImagingResizeUrlsData, GetImagingResizeUrlsResponse, GetImportAnalyzeData, GetImportAnalyzeResponse, GetIndexerData, GetIndexerResponse, GetIndexerByIndexNameData, GetIndexerByIndexNameResponse, PostIndexerByIndexNameRebuildData, PostIndexerByIndexNameRebuildResponse, GetInstallSettingsResponse, PostInstallSetupData, PostInstallSetupResponse, PostInstallValidateDatabaseData, PostInstallValidateDatabaseResponse, GetItemLanguageData, GetItemLanguageResponse, GetItemLanguageDefaultResponse, GetLanguageData, GetLanguageResponse, PostLanguageData, PostLanguageResponse, GetLanguageByIsoCodeData, GetLanguageByIsoCodeResponse, DeleteLanguageByIsoCodeData, DeleteLanguageByIsoCodeResponse, PutLanguageByIsoCodeData, PutLanguageByIsoCodeResponse, GetLogViewerLevelData, GetLogViewerLevelResponse, GetLogViewerLevelCountData, GetLogViewerLevelCountResponse, GetLogViewerLogData, GetLogViewerLogResponse, GetLogViewerMessageTemplateData, GetLogViewerMessageTemplateResponse, GetLogViewerSavedSearchData, GetLogViewerSavedSearchResponse, PostLogViewerSavedSearchData, PostLogViewerSavedSearchResponse, GetLogViewerSavedSearchByNameData, GetLogViewerSavedSearchByNameResponse, DeleteLogViewerSavedSearchByNameData, DeleteLogViewerSavedSearchByNameResponse, GetLogViewerValidateLogsSizeData, GetLogViewerValidateLogsSizeResponse, GetManifestManifestResponse, GetManifestManifestPrivateResponse, GetManifestManifestPublicResponse, GetItemMediaTypeData, GetItemMediaTypeResponse, GetItemMediaTypeAllowedData, GetItemMediaTypeAllowedResponse, GetItemMediaTypeFoldersData, GetItemMediaTypeFoldersResponse, GetItemMediaTypeSearchData, GetItemMediaTypeSearchResponse, PostMediaTypeData, PostMediaTypeResponse, GetMediaTypeByIdData, GetMediaTypeByIdResponse, DeleteMediaTypeByIdData, DeleteMediaTypeByIdResponse, PutMediaTypeByIdData, PutMediaTypeByIdResponse, GetMediaTypeByIdAllowedChildrenData, GetMediaTypeByIdAllowedChildrenResponse, GetMediaTypeByIdCompositionReferencesData, GetMediaTypeByIdCompositionReferencesResponse, PostMediaTypeByIdCopyData, PostMediaTypeByIdCopyResponse, GetMediaTypeByIdExportData, GetMediaTypeByIdExportResponse, PutMediaTypeByIdImportData, PutMediaTypeByIdImportResponse, PutMediaTypeByIdMoveData, PutMediaTypeByIdMoveResponse, GetMediaTypeAllowedAtRootData, GetMediaTypeAllowedAtRootResponse, PostMediaTypeAvailableCompositionsData, PostMediaTypeAvailableCompositionsResponse, GetMediaTypeConfigurationResponse, PostMediaTypeFolderData, PostMediaTypeFolderResponse, GetMediaTypeFolderByIdData, GetMediaTypeFolderByIdResponse, DeleteMediaTypeFolderByIdData, DeleteMediaTypeFolderByIdResponse, PutMediaTypeFolderByIdData, PutMediaTypeFolderByIdResponse, PostMediaTypeImportData, PostMediaTypeImportResponse, GetTreeMediaTypeAncestorsData, GetTreeMediaTypeAncestorsResponse, GetTreeMediaTypeChildrenData, GetTreeMediaTypeChildrenResponse, GetTreeMediaTypeRootData, GetTreeMediaTypeRootResponse, GetCollectionMediaData, GetCollectionMediaResponse, GetItemMediaData, GetItemMediaResponse, GetItemMediaSearchData, GetItemMediaSearchResponse, PostMediaData, PostMediaResponse, GetMediaByIdData, GetMediaByIdResponse, DeleteMediaByIdData, DeleteMediaByIdResponse, PutMediaByIdData, PutMediaByIdResponse, GetMediaByIdAuditLogData, GetMediaByIdAuditLogResponse, PutMediaByIdMoveData, PutMediaByIdMoveResponse, PutMediaByIdMoveToRecycleBinData, PutMediaByIdMoveToRecycleBinResponse, GetMediaByIdReferencedByData, GetMediaByIdReferencedByResponse, GetMediaByIdReferencedDescendantsData, GetMediaByIdReferencedDescendantsResponse, PutMediaByIdValidateData, PutMediaByIdValidateResponse, GetMediaAreReferencedData, GetMediaAreReferencedResponse, GetMediaConfigurationResponse, PutMediaSortData, PutMediaSortResponse, GetMediaUrlsData, GetMediaUrlsResponse, PostMediaValidateData, PostMediaValidateResponse, DeleteRecycleBinMediaResponse, DeleteRecycleBinMediaByIdData, DeleteRecycleBinMediaByIdResponse, GetRecycleBinMediaByIdOriginalParentData, GetRecycleBinMediaByIdOriginalParentResponse, PutRecycleBinMediaByIdRestoreData, PutRecycleBinMediaByIdRestoreResponse, GetRecycleBinMediaChildrenData, GetRecycleBinMediaChildrenResponse, GetRecycleBinMediaRootData, GetRecycleBinMediaRootResponse, GetTreeMediaAncestorsData, GetTreeMediaAncestorsResponse, GetTreeMediaChildrenData, GetTreeMediaChildrenResponse, GetTreeMediaRootData, GetTreeMediaRootResponse, GetItemMemberGroupData, GetItemMemberGroupResponse, GetMemberGroupData, GetMemberGroupResponse, PostMemberGroupData, PostMemberGroupResponse, GetMemberGroupByIdData, GetMemberGroupByIdResponse, DeleteMemberGroupByIdData, DeleteMemberGroupByIdResponse, PutMemberGroupByIdData, PutMemberGroupByIdResponse, GetTreeMemberGroupRootData, GetTreeMemberGroupRootResponse, GetItemMemberTypeData, GetItemMemberTypeResponse, GetItemMemberTypeSearchData, GetItemMemberTypeSearchResponse, PostMemberTypeData, PostMemberTypeResponse, GetMemberTypeByIdData, GetMemberTypeByIdResponse, DeleteMemberTypeByIdData, DeleteMemberTypeByIdResponse, PutMemberTypeByIdData, PutMemberTypeByIdResponse, GetMemberTypeByIdCompositionReferencesData, GetMemberTypeByIdCompositionReferencesResponse, PostMemberTypeByIdCopyData, PostMemberTypeByIdCopyResponse, PostMemberTypeAvailableCompositionsData, PostMemberTypeAvailableCompositionsResponse, GetMemberTypeConfigurationResponse, GetTreeMemberTypeRootData, GetTreeMemberTypeRootResponse, GetFilterMemberData, GetFilterMemberResponse, GetItemMemberData, GetItemMemberResponse, GetItemMemberSearchData, GetItemMemberSearchResponse, PostMemberData, PostMemberResponse, GetMemberByIdData, GetMemberByIdResponse, DeleteMemberByIdData, DeleteMemberByIdResponse, PutMemberByIdData, PutMemberByIdResponse, PutMemberByIdValidateData, PutMemberByIdValidateResponse, GetMemberConfigurationResponse, PostMemberValidateData, PostMemberValidateResponse, PostModelsBuilderBuildResponse, GetModelsBuilderDashboardResponse, GetModelsBuilderStatusResponse, GetObjectTypesData, GetObjectTypesResponse, GetOembedQueryData, GetOembedQueryResponse, PostPackageByNameRunMigrationData, PostPackageByNameRunMigrationResponse, GetPackageConfigurationResponse, GetPackageCreatedData, GetPackageCreatedResponse, PostPackageCreatedData, PostPackageCreatedResponse, GetPackageCreatedByIdData, GetPackageCreatedByIdResponse, DeletePackageCreatedByIdData, DeletePackageCreatedByIdResponse, PutPackageCreatedByIdData, PutPackageCreatedByIdResponse, GetPackageCreatedByIdDownloadData, GetPackageCreatedByIdDownloadResponse, GetPackageMigrationStatusData, GetPackageMigrationStatusResponse, GetItemPartialViewData, GetItemPartialViewResponse, PostPartialViewData, PostPartialViewResponse, GetPartialViewByPathData, GetPartialViewByPathResponse, DeletePartialViewByPathData, DeletePartialViewByPathResponse, PutPartialViewByPathData, PutPartialViewByPathResponse, PutPartialViewByPathRenameData, PutPartialViewByPathRenameResponse, PostPartialViewFolderData, PostPartialViewFolderResponse, GetPartialViewFolderByPathData, GetPartialViewFolderByPathResponse, DeletePartialViewFolderByPathData, DeletePartialViewFolderByPathResponse, GetPartialViewSnippetData, GetPartialViewSnippetResponse, GetPartialViewSnippetByIdData, GetPartialViewSnippetByIdResponse, GetTreePartialViewAncestorsData, GetTreePartialViewAncestorsResponse, GetTreePartialViewChildrenData, GetTreePartialViewChildrenResponse, GetTreePartialViewRootData, GetTreePartialViewRootResponse, DeletePreviewResponse, PostPreviewResponse, GetProfilingStatusResponse, PutProfilingStatusData, PutProfilingStatusResponse, GetPropertyTypeIsUsedData, GetPropertyTypeIsUsedResponse, PostPublishedCacheCollectResponse, PostPublishedCacheRebuildResponse, PostPublishedCacheReloadResponse, GetPublishedCacheStatusResponse, GetRedirectManagementData, GetRedirectManagementResponse, GetRedirectManagementByIdData, GetRedirectManagementByIdResponse, DeleteRedirectManagementByIdData, DeleteRedirectManagementByIdResponse, GetRedirectManagementStatusResponse, PostRedirectManagementStatusData, PostRedirectManagementStatusResponse, GetItemRelationTypeData, GetItemRelationTypeResponse, GetRelationTypeData, GetRelationTypeResponse, GetRelationTypeByIdData, GetRelationTypeByIdResponse, GetRelationByRelationTypeIdData, GetRelationByRelationTypeIdResponse, GetItemScriptData, GetItemScriptResponse, PostScriptData, PostScriptResponse, GetScriptByPathData, GetScriptByPathResponse, DeleteScriptByPathData, DeleteScriptByPathResponse, PutScriptByPathData, PutScriptByPathResponse, PutScriptByPathRenameData, PutScriptByPathRenameResponse, PostScriptFolderData, PostScriptFolderResponse, GetScriptFolderByPathData, GetScriptFolderByPathResponse, DeleteScriptFolderByPathData, DeleteScriptFolderByPathResponse, GetTreeScriptAncestorsData, GetTreeScriptAncestorsResponse, GetTreeScriptChildrenData, GetTreeScriptChildrenResponse, GetTreeScriptRootData, GetTreeScriptRootResponse, GetSearcherData, GetSearcherResponse, GetSearcherBySearcherNameQueryData, GetSearcherBySearcherNameQueryResponse, GetSecurityConfigurationResponse, PostSecurityForgotPasswordData, PostSecurityForgotPasswordResponse, PostSecurityForgotPasswordResetData, PostSecurityForgotPasswordResetResponse, PostSecurityForgotPasswordVerifyData, PostSecurityForgotPasswordVerifyResponse, GetSegmentData, GetSegmentResponse, GetServerConfigurationResponse, GetServerInformationResponse, GetServerStatusResponse, GetServerTroubleshootingResponse, GetItemStaticFileData, GetItemStaticFileResponse, GetTreeStaticFileAncestorsData, GetTreeStaticFileAncestorsResponse, GetTreeStaticFileChildrenData, GetTreeStaticFileChildrenResponse, GetTreeStaticFileRootData, GetTreeStaticFileRootResponse, GetItemStylesheetData, GetItemStylesheetResponse, PostStylesheetData, PostStylesheetResponse, GetStylesheetByPathData, GetStylesheetByPathResponse, DeleteStylesheetByPathData, DeleteStylesheetByPathResponse, PutStylesheetByPathData, PutStylesheetByPathResponse, PutStylesheetByPathRenameData, PutStylesheetByPathRenameResponse, PostStylesheetFolderData, PostStylesheetFolderResponse, GetStylesheetFolderByPathData, GetStylesheetFolderByPathResponse, DeleteStylesheetFolderByPathData, DeleteStylesheetFolderByPathResponse, GetTreeStylesheetAncestorsData, GetTreeStylesheetAncestorsResponse, GetTreeStylesheetChildrenData, GetTreeStylesheetChildrenResponse, GetTreeStylesheetRootData, GetTreeStylesheetRootResponse, GetTagData, GetTagResponse, GetTelemetryData, GetTelemetryResponse, GetTelemetryLevelResponse, PostTelemetryLevelData, PostTelemetryLevelResponse, GetItemTemplateData, GetItemTemplateResponse, GetItemTemplateSearchData, GetItemTemplateSearchResponse, PostTemplateData, PostTemplateResponse, GetTemplateByIdData, GetTemplateByIdResponse, DeleteTemplateByIdData, DeleteTemplateByIdResponse, PutTemplateByIdData, PutTemplateByIdResponse, GetTemplateConfigurationResponse, PostTemplateQueryExecuteData, PostTemplateQueryExecuteResponse, GetTemplateQuerySettingsResponse, GetTreeTemplateAncestorsData, GetTreeTemplateAncestorsResponse, GetTreeTemplateChildrenData, GetTreeTemplateChildrenResponse, GetTreeTemplateRootData, GetTreeTemplateRootResponse, PostTemporaryFileData, PostTemporaryFileResponse, GetTemporaryFileByIdData, GetTemporaryFileByIdResponse, DeleteTemporaryFileByIdData, DeleteTemporaryFileByIdResponse, GetTemporaryFileConfigurationResponse, PostUpgradeAuthorizeResponse, GetUpgradeSettingsResponse, PostUserDataData, PostUserDataResponse, GetUserDataData, GetUserDataResponse, PutUserDataData, PutUserDataResponse, GetUserDataByIdData, GetUserDataByIdResponse, GetFilterUserGroupData, GetFilterUserGroupResponse, GetItemUserGroupData, GetItemUserGroupResponse, DeleteUserGroupData, DeleteUserGroupResponse, PostUserGroupData, PostUserGroupResponse, GetUserGroupData, GetUserGroupResponse, GetUserGroupByIdData, GetUserGroupByIdResponse, DeleteUserGroupByIdData, DeleteUserGroupByIdResponse, PutUserGroupByIdData, PutUserGroupByIdResponse, DeleteUserGroupByIdUsersData, DeleteUserGroupByIdUsersResponse, PostUserGroupByIdUsersData, PostUserGroupByIdUsersResponse, GetFilterUserData, GetFilterUserResponse, GetItemUserData, GetItemUserResponse, PostUserData, PostUserResponse, DeleteUserData, DeleteUserResponse, GetUserData, GetUserResponse, GetUserByIdData, GetUserByIdResponse, DeleteUserByIdData, DeleteUserByIdResponse, PutUserByIdData, PutUserByIdResponse, GetUserById2FaData, GetUserById2FaResponse, DeleteUserById2FaByProviderNameData, DeleteUserById2FaByProviderNameResponse, GetUserByIdCalculateStartNodesData, GetUserByIdCalculateStartNodesResponse, PostUserByIdChangePasswordData, PostUserByIdChangePasswordResponse, PostUserByIdResetPasswordData, PostUserByIdResetPasswordResponse, DeleteUserAvatarByIdData, DeleteUserAvatarByIdResponse, PostUserAvatarByIdData, PostUserAvatarByIdResponse, GetUserConfigurationResponse, GetUserCurrentResponse, GetUserCurrent2FaResponse, DeleteUserCurrent2FaByProviderNameData, DeleteUserCurrent2FaByProviderNameResponse, PostUserCurrent2FaByProviderNameData, PostUserCurrent2FaByProviderNameResponse, GetUserCurrent2FaByProviderNameData, GetUserCurrent2FaByProviderNameResponse, PostUserCurrentAvatarData, PostUserCurrentAvatarResponse, PostUserCurrentChangePasswordData, PostUserCurrentChangePasswordResponse, GetUserCurrentConfigurationResponse, GetUserCurrentLoginProvidersResponse, GetUserCurrentPermissionsData, GetUserCurrentPermissionsResponse, GetUserCurrentPermissionsDocumentData, GetUserCurrentPermissionsDocumentResponse, GetUserCurrentPermissionsMediaData, GetUserCurrentPermissionsMediaResponse, PostUserDisableData, PostUserDisableResponse, PostUserEnableData, PostUserEnableResponse, PostUserInviteData, PostUserInviteResponse, PostUserInviteCreatePasswordData, PostUserInviteCreatePasswordResponse, PostUserInviteResendData, PostUserInviteResendResponse, PostUserInviteVerifyData, PostUserInviteVerifyResponse, PostUserSetUserGroupsData, PostUserSetUserGroupsResponse, PostUserUnlockData, PostUserUnlockResponse, GetItemWebhookData, GetItemWebhookResponse, GetWebhookData, GetWebhookResponse, PostWebhookData, PostWebhookResponse, GetWebhookByIdData, GetWebhookByIdResponse, DeleteWebhookByIdData, DeleteWebhookByIdResponse, PutWebhookByIdData, PutWebhookByIdResponse, GetWebhookEventsData, GetWebhookEventsResponse } from './types.gen';
export class CultureService {
/**
@@ -3754,6 +3754,21 @@ export class MediaTypeService {
});
}
+ /**
+ * @returns unknown OK
+ * @throws ApiError
+ */
+ public static getMediaTypeConfiguration(): CancelablePromise {
+ return __request(OpenAPI, {
+ method: 'GET',
+ url: '/umbraco/management/api/v1/media-type/configuration',
+ errors: {
+ 401: 'The resource is protected and requires an authentication token',
+ 403: 'The authenticated user do not have access to this resource'
+ }
+ });
+ }
+
/**
* @param data The data for the request.
* @param data.requestBody
@@ -4929,6 +4944,21 @@ export class MemberTypeService {
});
}
+ /**
+ * @returns unknown OK
+ * @throws ApiError
+ */
+ public static getMemberTypeConfiguration(): CancelablePromise {
+ return __request(OpenAPI, {
+ method: 'GET',
+ url: '/umbraco/management/api/v1/member-type/configuration',
+ errors: {
+ 401: 'The resource is protected and requires an authentication token',
+ 403: 'The authenticated user do not have access to this resource'
+ }
+ });
+ }
+
/**
* @param data The data for the request.
* @param data.skip
diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/types.gen.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/types.gen.ts
index 12f84d2636..2d29b8b87e 100644
--- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/types.gen.ts
+++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/types.gen.ts
@@ -438,6 +438,9 @@ export type CultureReponseModel = {
export type CurrenUserConfigurationResponseModel = {
keepUserLoggedIn: boolean;
+ /**
+ * @deprecated
+ */
usernameIsEmail: boolean;
passwordConfiguration: PasswordConfigurationResponseModel;
};
@@ -633,6 +636,9 @@ export type DocumentConfigurationResponseModel = {
disableUnpublishWhenReferenced: boolean;
allowEditInvariantFromNonDefault: boolean;
allowNonExistingSegmentsCreation: boolean;
+ /**
+ * @deprecated
+ */
reservedFieldNames: Array<(string)>;
};
@@ -730,6 +736,7 @@ export type DocumentTypeConfigurationResponseModel = {
dataTypesCanBeChanged: DataTypeChangeModeModel;
disableTemplates: boolean;
useSegments: boolean;
+ reservedFieldNames: Array<(string)>;
};
export type DocumentTypeItemResponseModel = {
@@ -1153,6 +1160,9 @@ export type MediaCollectionResponseModel = {
export type MediaConfigurationResponseModel = {
disableDeleteWhenReferenced: boolean;
disableUnpublishWhenReferenced: boolean;
+ /**
+ * @deprecated
+ */
reservedFieldNames: Array<(string)>;
};
@@ -1219,6 +1229,10 @@ export type MediaTypeCompositionResponseModel = {
icon: string;
};
+export type MediaTypeConfigurationResponseModel = {
+ reservedFieldNames: Array<(string)>;
+};
+
export type MediaTypeItemResponseModel = {
id: string;
name: string;
@@ -1319,6 +1333,9 @@ export type MediaVariantResponseModel = {
};
export type MemberConfigurationResponseModel = {
+ /**
+ * @deprecated
+ */
reservedFieldNames: Array<(string)>;
};
@@ -1372,6 +1389,10 @@ export type MemberTypeCompositionResponseModel = {
icon: string;
};
+export type MemberTypeConfigurationResponseModel = {
+ reservedFieldNames: Array<(string)>;
+};
+
export type MemberTypeItemResponseModel = {
id: string;
name: string;
@@ -2597,6 +2618,7 @@ export type UpgradeSettingsResponseModel = {
export type UserConfigurationResponseModel = {
canInviteUsers: boolean;
+ usernameIsEmail: boolean;
passwordConfiguration: PasswordConfigurationResponseModel;
};
@@ -3850,6 +3872,8 @@ export type PostMediaTypeAvailableCompositionsData = {
export type PostMediaTypeAvailableCompositionsResponse = Array<(AvailableMediaTypeCompositionResponseModel)>;
+export type GetMediaTypeConfigurationResponse = MediaTypeConfigurationResponseModel;
+
export type PostMediaTypeFolderData = {
requestBody?: CreateFolderRequestModel;
};
@@ -4190,6 +4214,8 @@ export type PostMemberTypeAvailableCompositionsData = {
export type PostMemberTypeAvailableCompositionsResponse = Array<(AvailableMemberTypeCompositionResponseModel)>;
+export type GetMemberTypeConfigurationResponse = MemberTypeConfigurationResponseModel;
+
export type GetTreeMemberTypeRootData = {
skip?: number;
take?: number;
@@ -8784,6 +8810,24 @@ export type $OpenApiTs = {
};
};
};
+ '/umbraco/management/api/v1/media-type/configuration': {
+ get: {
+ res: {
+ /**
+ * OK
+ */
+ 200: MediaTypeConfigurationResponseModel;
+ /**
+ * The resource is protected and requires an authentication token
+ */
+ 401: unknown;
+ /**
+ * The authenticated user do not have access to this resource
+ */
+ 403: unknown;
+ };
+ };
+ };
'/umbraco/management/api/v1/media-type/folder': {
post: {
req: PostMediaTypeFolderData;
@@ -9913,6 +9957,24 @@ export type $OpenApiTs = {
};
};
};
+ '/umbraco/management/api/v1/member-type/configuration': {
+ get: {
+ res: {
+ /**
+ * OK
+ */
+ 200: MemberTypeConfigurationResponseModel;
+ /**
+ * The resource is protected and requires an authentication token
+ */
+ 401: unknown;
+ /**
+ * The authenticated user do not have access to this resource
+ */
+ 403: unknown;
+ };
+ };
+ };
'/umbraco/management/api/v1/tree/member-type/root': {
get: {
req: GetTreeMemberTypeRootData;
diff --git a/src/Umbraco.Web.UI.Client/src/external/monaco-editor/index.ts b/src/Umbraco.Web.UI.Client/src/external/monaco-editor/index.ts
index ca2e3b1a7c..ecb84ae91a 100644
--- a/src/Umbraco.Web.UI.Client/src/external/monaco-editor/index.ts
+++ b/src/Umbraco.Web.UI.Client/src/external/monaco-editor/index.ts
@@ -13,20 +13,6 @@ import jsonWorker from 'monaco-editor/esm/vs/language/json/json.worker.js?worker
import tsWorker from 'monaco-editor/esm/vs/language/typescript/ts.worker.js?worker';
/* eslint-enable */
-import { css, unsafeCSS } from '@umbraco-cms/backoffice/external/lit';
-
-export const monacoEditorStyles = css`
- ${unsafeCSS(styles)}
-`;
-
-export const monacoJumpingCursorHack = css`
- /* a hacky workaround this issue: https://github.com/microsoft/monaco-editor/issues/3217
- should probably be removed when the issue is fixed */
- .view-lines {
- font-feature-settings: revert !important;
- }
-`;
-
const initializeWorkers = () => {
self.MonacoEnvironment = {
getWorker(workerId: string, label: string): Promise | Worker {
@@ -50,3 +36,4 @@ const initializeWorkers = () => {
initializeWorkers();
export * as monaco from 'monaco-editor';
+export { styles };
diff --git a/src/Umbraco.Web.UI.Client/src/external/router-slot/router-slot.ts b/src/Umbraco.Web.UI.Client/src/external/router-slot/router-slot.ts
index 1a2bec962f..14e6f7a1b5 100644
--- a/src/Umbraco.Web.UI.Client/src/external/router-slot/router-slot.ts
+++ b/src/Umbraco.Web.UI.Client/src/external/router-slot/router-slot.ts
@@ -48,7 +48,7 @@ export class RouterSlot extends HTMLElement implements IRouter
/**
* Method to cancel navigation if changed.
*/
- private _cancelNavigation ?:() => void;
+ private _cancelNavigation?: () => void;
/**
* Listeners on the router.
@@ -208,7 +208,7 @@ export class RouterSlot extends HTMLElement implements IRouter
if (this.isConnected) {
const newMatch = this.getRouteMatch();
// Check if this match matches the current match (aka. If the path has changed), if so we should navigate. [NL]
- if(newMatch) {
+ if (newMatch) {
navigate = shouldNavigate(this.match, newMatch);
}
}
@@ -318,7 +318,6 @@ export class RouterSlot extends HTMLElement implements IRouter
* Returns true if a navigation was made to a new page.
*/
protected async renderPath(path: string | PathFragment): Promise {
-
// Notice: Since this is never called from any other place than one higher in this file(when writing this...), we could just retrieve the path and find a match by using this.getRouteMatch() [NL]
// Find the corresponding route.
const match = matchRoutes(this._routes, path);
@@ -336,7 +335,6 @@ export class RouterSlot extends HTMLElement implements IRouter
// Only change route if its a new route.
const navigate = shouldNavigate(this.match, match);
if (navigate) {
-
// If another navigation is still begin resolved in this very moment, then we need to cancel that so it does not end up overriding this new navigation.[NL]
this._cancelNavigation?.();
// Listen for another push state event. If another push state event happens
@@ -412,7 +410,7 @@ export class RouterSlot extends HTMLElement implements IRouter
// We have some routes that share the same component instance, those should not be removed and re-appended [NL]
const isTheSameComponent = this.firstChild === page;
- if(!isTheSameComponent) {
+ if (!isTheSameComponent) {
// Remove the old page by clearing the slot
this.clearChildren();
}
@@ -421,7 +419,7 @@ export class RouterSlot extends HTMLElement implements IRouter
// We do this to ensure that we can find the match in the connectedCallback of the page.
this._routeMatch = match;
- if(!isTheSameComponent) {
+ if (!isTheSameComponent) {
if (page) {
// Append the new page
this.appendChild(page);
diff --git a/src/Umbraco.Web.UI.Client/src/external/router-slot/util/url.ts b/src/Umbraco.Web.UI.Client/src/external/router-slot/util/url.ts
index f9a95d0897..8ca75dc55d 100644
--- a/src/Umbraco.Web.UI.Client/src/external/router-slot/util/url.ts
+++ b/src/Umbraco.Web.UI.Client/src/external/router-slot/util/url.ts
@@ -70,7 +70,7 @@ export function queryString(): string {
* @returns Params
*/
export function query(): Query {
- return toQuery(queryString().substr(1));
+ return toQuery(queryString().substring(1));
}
/**
diff --git a/src/Umbraco.Web.UI.Client/src/libs/controller-api/controller.test.ts b/src/Umbraco.Web.UI.Client/src/libs/controller-api/controller.test.ts
index 325660cbd8..41a575024f 100644
--- a/src/Umbraco.Web.UI.Client/src/libs/controller-api/controller.test.ts
+++ b/src/Umbraco.Web.UI.Client/src/libs/controller-api/controller.test.ts
@@ -51,7 +51,7 @@ describe('UmbController', () => {
let hostElement: UmbControllerHostElement;
beforeEach(() => {
- hostElement = document.createElement('test-my-controller-host') as UmbControllerHostElement;
+ hostElement = new UmbTestControllerHostElement();
});
describe('Controller Host Public API', () => {
diff --git a/src/Umbraco.Web.UI.Client/src/libs/element-api/element.test.ts b/src/Umbraco.Web.UI.Client/src/libs/element-api/element.test.ts
index cd2b33321c..e5de96511d 100644
--- a/src/Umbraco.Web.UI.Client/src/libs/element-api/element.test.ts
+++ b/src/Umbraco.Web.UI.Client/src/libs/element-api/element.test.ts
@@ -152,6 +152,7 @@ describe('UmbElementMixin', () => {
expect(hostElement.hasUmbController(ctrl)).to.be.true;
const ctrl2 = hostElement.observe(myObservable, (value) => {
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
const a = value + 'bla';
});
@@ -172,6 +173,7 @@ describe('UmbElementMixin', () => {
const ctrl2 = hostElement.observe(
undefined,
() => {
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
const a = 1;
},
'observer',
diff --git a/src/Umbraco.Web.UI.Client/src/libs/extension-api/controller/base-extension-initializer.controller.test.ts b/src/Umbraco.Web.UI.Client/src/libs/extension-api/controller/base-extension-initializer.controller.test.ts
index a88410d347..29624ff01c 100644
--- a/src/Umbraco.Web.UI.Client/src/libs/extension-api/controller/base-extension-initializer.controller.test.ts
+++ b/src/Umbraco.Web.UI.Client/src/libs/extension-api/controller/base-extension-initializer.controller.test.ts
@@ -16,6 +16,8 @@ import { UmbSwitchCondition } from '@umbraco-cms/backoffice/extension-registry';
import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
@customElement('umb-test-controller-host')
+// Element is used in tests
+// eslint-disable-next-line @typescript-eslint/no-unused-vars
class UmbTestControllerHostElement extends UmbControllerHostElementMixin(HTMLElement) {}
class UmbTestExtensionController extends UmbBaseExtensionInitializer {
@@ -57,12 +59,12 @@ class UmbTestConditionAlwaysInvalid extends UmbControllerBase implements UmbExte
describe('UmbBaseExtensionController', () => {
describe('Manifest without conditions', () => {
- let hostElement: UmbControllerHostElement;
+ //let hostElement: UmbControllerHostElement;
let extensionRegistry: UmbExtensionRegistry;
let manifest: ManifestWithDynamicConditions;
beforeEach(async () => {
- hostElement = await fixture(html` `);
+ //hostElement = await fixture(html` `);
extensionRegistry = new UmbExtensionRegistry();
manifest = {
type: 'section',
@@ -94,12 +96,12 @@ describe('UmbBaseExtensionController', () => {
});
describe('Manifest with empty conditions', () => {
- let hostElement: UmbControllerHostElement;
+ //let hostElement: UmbControllerHostElement;
let extensionRegistry: UmbExtensionRegistry;
let manifest: ManifestWithDynamicConditions;
beforeEach(async () => {
- hostElement = await fixture(html` `);
+ //hostElement = await fixture(html` `);
extensionRegistry = new UmbExtensionRegistry();
manifest = {
type: 'section',
diff --git a/src/Umbraco.Web.UI.Client/src/libs/extension-api/controller/base-extensions-initializer.controller.ts b/src/Umbraco.Web.UI.Client/src/libs/extension-api/controller/base-extensions-initializer.controller.ts
index c55c77bb36..4893f340f9 100644
--- a/src/Umbraco.Web.UI.Client/src/libs/extension-api/controller/base-extensions-initializer.controller.ts
+++ b/src/Umbraco.Web.UI.Client/src/libs/extension-api/controller/base-extensions-initializer.controller.ts
@@ -1,5 +1,4 @@
import type { SpecificManifestTypeOrManifestBase } from '../types/map.types.js';
-import { map } from '@umbraco-cms/backoffice/external/rxjs';
import type {
ManifestBase,
UmbBaseExtensionInitializer,
@@ -7,7 +6,6 @@ import type {
} from '@umbraco-cms/backoffice/extension-api';
import { UmbControllerBase } from '@umbraco-cms/backoffice/class-api';
import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
-import { createObservablePart } from '@umbraco-cms/backoffice/observable-api';
export type PermittedControllerType = ControllerType & {
manifest: Required>;
@@ -35,7 +33,7 @@ export abstract class UmbBaseExtensionsInitializer<
#onChange?: (permittedManifests: Array) => void;
protected _extensions: Array = [];
#permittedExts: Array = [];
- #exposedPermittedExts: Array = [];
+ #exposedPermittedExts?: Array;
#changeDebounce?: number;
asPromise(): Promise {
@@ -92,6 +90,12 @@ export abstract class UmbBaseExtensionsInitializer<
return;
}
+ // If we get no manifests and we have not exposed any extensions yet, then we should notify to let the listener know that we have our first response. [NL]
+ if (manifests.length === 0 && this.#exposedPermittedExts === undefined) {
+ this.#exposedPermittedExts = [];
+ this.#onChange?.(this.#exposedPermittedExts);
+ }
+
// Clean up extensions that are no longer.
this._extensions = this._extensions.filter((extension) => {
if (!manifests.find((manifest) => manifest.alias === extension.alias)) {
@@ -116,6 +120,7 @@ export abstract class UmbBaseExtensionsInitializer<
protected _extensionChanged = (isPermitted: boolean, controller: ControllerType) => {
let hasChanged = false;
+
// This might be called after this is destroyed, so we need to check if the _permittedExts is still available:
const existingIndex = this.#permittedExts?.indexOf(controller as unknown as MyPermittedControllerType);
if (isPermitted) {
@@ -151,7 +156,7 @@ export abstract class UmbBaseExtensionsInitializer<
// if so, look up the extension it overwrites, and remove it from the list. and check that for if it overwrites another extension and so on.
if (extCtrl.overwrites.length > 0) {
extCtrl.overwrites.forEach((overwrite) => {
- this.#removeOverwrittenExtensions(this.#exposedPermittedExts, overwrite);
+ this.#removeOverwrittenExtensions(this.#exposedPermittedExts!, overwrite);
});
}
});
@@ -195,16 +200,16 @@ export abstract class UmbBaseExtensionsInitializer<
// The this.#extensionRegistry is an indication of wether this is already destroyed.
if (!this.#extensionRegistry) return;
- const oldPermittedExtsLength = this.#exposedPermittedExts.length;
+ const oldPermittedExtsLength = this.#exposedPermittedExts?.length ?? 0;
(this._extensions as any) = undefined;
(this.#permittedExts as any) = undefined;
- this.#exposedPermittedExts.length = 0;
+ this.#exposedPermittedExts = undefined;
if (this.#changeDebounce) {
cancelAnimationFrame(this.#changeDebounce);
this.#changeDebounce = undefined;
}
if (oldPermittedExtsLength > 0) {
- this.#onChange?.(this.#exposedPermittedExts);
+ this.#onChange?.([]);
}
this.#promiseResolvers.length = 0;
this.#filter = undefined;
diff --git a/src/Umbraco.Web.UI.Client/src/libs/extension-api/controller/extension-api-initializer.test.ts b/src/Umbraco.Web.UI.Client/src/libs/extension-api/controller/extension-api-initializer.test.ts
index 5aa9d2a806..78c6409286 100644
--- a/src/Umbraco.Web.UI.Client/src/libs/extension-api/controller/extension-api-initializer.test.ts
+++ b/src/Umbraco.Web.UI.Client/src/libs/extension-api/controller/extension-api-initializer.test.ts
@@ -9,6 +9,8 @@ import { customElement, html } from '@umbraco-cms/backoffice/external/lit';
import { type ManifestSection, UmbSwitchCondition } from '@umbraco-cms/backoffice/extension-registry';
@customElement('umb-test-controller-host')
+// Element is used in tests
+// eslint-disable-next-line @typescript-eslint/no-unused-vars
class UmbTestControllerHostElement extends UmbControllerHostElementMixin(HTMLElement) {}
class UmbTestApiController extends UmbControllerBase {
diff --git a/src/Umbraco.Web.UI.Client/src/libs/extension-api/controller/extension-element-and-api-initializer.test.ts b/src/Umbraco.Web.UI.Client/src/libs/extension-api/controller/extension-element-and-api-initializer.test.ts
index c2c3429b02..82c6fd52d5 100644
--- a/src/Umbraco.Web.UI.Client/src/libs/extension-api/controller/extension-element-and-api-initializer.test.ts
+++ b/src/Umbraco.Web.UI.Client/src/libs/extension-api/controller/extension-element-and-api-initializer.test.ts
@@ -1,10 +1,10 @@
import { UmbExtensionRegistry } from '../registry/extension.registry.js';
import type { ManifestElementAndApi, ManifestWithDynamicConditions, UmbApi } from '../index.js';
import { UmbExtensionElementAndApiInitializer } from './extension-element-and-api-initializer.controller.js';
-import { expect, fixture } from '@open-wc/testing';
+import { expect } from '@open-wc/testing';
import type { UmbControllerHost, UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api';
import { UmbControllerHostElementMixin } from '@umbraco-cms/backoffice/controller-api';
-import { customElement, html } from '@umbraco-cms/backoffice/external/lit';
+import { customElement } from '@umbraco-cms/backoffice/external/lit';
import { UmbSwitchCondition } from '@umbraco-cms/backoffice/extension-registry';
import { UmbControllerBase } from '@umbraco-cms/backoffice/class-api';
@@ -12,6 +12,8 @@ import { UmbControllerBase } from '@umbraco-cms/backoffice/class-api';
class UmbTestControllerHostElement extends UmbControllerHostElementMixin(HTMLElement) {}
@customElement('umb-test-extension-element')
+// Ignoring eslint rule. Element name is used for testing.
+// eslint-disable-next-line @typescript-eslint/no-unused-vars
class UmbTestExtensionElement extends UmbControllerHostElementMixin(HTMLElement) {}
class UmbTestApiController extends UmbControllerBase implements UmbApi {
@@ -35,7 +37,7 @@ describe('UmbExtensionElementAndApiController', () => {
let manifest: TestManifest;
beforeEach(async () => {
- hostElement = await fixture(html` `);
+ hostElement = new UmbTestControllerHostElement();
extensionRegistry = new UmbExtensionRegistry();
manifest = {
type: 'test-type',
@@ -105,7 +107,7 @@ describe('UmbExtensionElementAndApiController', () => {
let manifest: TestManifest;
beforeEach(async () => {
- hostElement = await fixture(html` `);
+ hostElement = new UmbTestControllerHostElement();
extensionRegistry = new UmbExtensionRegistry();
manifest = {
@@ -175,7 +177,7 @@ describe('UmbExtensionElementAndApiController', () => {
let manifest: TestManifest;
beforeEach(async () => {
- hostElement = await fixture(html` `);
+ hostElement = new UmbTestControllerHostElement();
extensionRegistry = new UmbExtensionRegistry();
manifest = {
type: 'test-type',
@@ -238,7 +240,7 @@ describe('UmbExtensionElementAndApiController', () => {
let manifest: TestManifest;
beforeEach(async () => {
- hostElement = await fixture(html` `);
+ hostElement = new UmbTestControllerHostElement();
extensionRegistry = new UmbExtensionRegistry();
manifest = {
diff --git a/src/Umbraco.Web.UI.Client/src/libs/extension-api/controller/extension-element-initializer.test.ts b/src/Umbraco.Web.UI.Client/src/libs/extension-api/controller/extension-element-initializer.test.ts
index 7c15521d93..6a8242c209 100644
--- a/src/Umbraco.Web.UI.Client/src/libs/extension-api/controller/extension-element-initializer.test.ts
+++ b/src/Umbraco.Web.UI.Client/src/libs/extension-api/controller/extension-element-initializer.test.ts
@@ -15,7 +15,7 @@ describe('UmbExtensionElementController', () => {
let manifest: ManifestSection;
beforeEach(async () => {
- hostElement = await fixture(html` `);
+ hostElement = new UmbTestControllerHostElement();
extensionRegistry = new UmbExtensionRegistry();
manifest = {
type: 'section',
diff --git a/src/Umbraco.Web.UI.Client/src/libs/observable-api/observer.controller.test.ts b/src/Umbraco.Web.UI.Client/src/libs/observable-api/observer.controller.test.ts
index a8a140a5bc..5688539233 100644
--- a/src/Umbraco.Web.UI.Client/src/libs/observable-api/observer.controller.test.ts
+++ b/src/Umbraco.Web.UI.Client/src/libs/observable-api/observer.controller.test.ts
@@ -20,7 +20,7 @@ describe('UmbObserverController', () => {
const state = new UmbObjectState(undefined);
const observable = state.asObservable();
- const callbackMethod = (state: unknown) => {};
+ const callbackMethod = () => {};
const firstCtrl = new UmbObserverController(hostElement, observable, callbackMethod, 'my-test-alias');
const secondCtrl = new UmbObserverController(hostElement, observable, callbackMethod, 'my-test-alias');
@@ -33,7 +33,7 @@ describe('UmbObserverController', () => {
const state = new UmbObjectState(undefined);
const observable = state.asObservable();
- const callbackMethod = (state: unknown) => {};
+ const callbackMethod = () => {};
const mySymbol = Symbol();
const firstCtrl = new UmbObserverController(hostElement, observable, callbackMethod, mySymbol);
@@ -47,7 +47,7 @@ describe('UmbObserverController', () => {
const state = new UmbObjectState(undefined);
const observable = state.asObservable();
- const callbackMethod = (state: unknown) => {};
+ const callbackMethod = () => {};
// Imitates the behavior of the observe method in the UmbClassMixin
let controllerAlias1 = null;
diff --git a/src/Umbraco.Web.UI.Client/src/mocks/browser-handlers.ts b/src/Umbraco.Web.UI.Client/src/mocks/browser-handlers.ts
index 171103dd7a..a525c153fa 100644
--- a/src/Umbraco.Web.UI.Client/src/mocks/browser-handlers.ts
+++ b/src/Umbraco.Web.UI.Client/src/mocks/browser-handlers.ts
@@ -10,7 +10,6 @@ import { handlers as healthCheckHandlers } from './handlers/health-check.handler
import { handlers as installHandlers } from './handlers/install.handlers.js';
import { handlers as languageHandlers } from './handlers/language/index.js';
import { handlers as logViewerHandlers } from './handlers/log-viewer.handlers.js';
-import { handlers as webhookHandlers } from './handlers/webhook.handlers.js';
import { handlers as mediaHandlers } from './handlers/media/index.js';
import { handlers as mediaTypeHandlers } from './handlers/media-type/index.js';
import { handlers as memberGroupHandlers } from './handlers/member-group/index.js';
@@ -50,7 +49,6 @@ const handlers = [
...installHandlers,
...languageHandlers,
...logViewerHandlers,
- ...webhookHandlers,
...mediaHandlers,
...mediaTypeHandlers,
...memberGroupHandlers,
diff --git a/src/Umbraco.Web.UI.Client/src/mocks/data/data-type/data-type.data.ts b/src/Umbraco.Web.UI.Client/src/mocks/data/data-type/data-type.data.ts
index 0eaa8a1855..2f45cdca03 100644
--- a/src/Umbraco.Web.UI.Client/src/mocks/data/data-type/data-type.data.ts
+++ b/src/Umbraco.Web.UI.Client/src/mocks/data/data-type/data-type.data.ts
@@ -493,6 +493,23 @@ export const data: Array = [
},
],
},
+ {
+ name: 'Code Editor',
+ id: 'dt-codeEditor',
+ parent: null,
+ editorAlias: 'Umbraco.Plain.String',
+ editorUiAlias: 'Umb.PropertyEditorUi.CodeEditor',
+ hasChildren: false,
+ isFolder: false,
+ canIgnoreStartNodes: false,
+ isDeletable: true,
+ values: [
+ {
+ alias: 'language',
+ value: 'html',
+ },
+ ],
+ },
{
name: 'Markdown Editor',
id: 'dt-markdownEditor',
diff --git a/src/Umbraco.Web.UI.Client/src/mocks/data/document-type/document-type.data.ts b/src/Umbraco.Web.UI.Client/src/mocks/data/document-type/document-type.data.ts
index ac9dabac6b..e8ef422e04 100644
--- a/src/Umbraco.Web.UI.Client/src/mocks/data/document-type/document-type.data.ts
+++ b/src/Umbraco.Web.UI.Client/src/mocks/data/document-type/document-type.data.ts
@@ -713,6 +713,30 @@ export const data: Array = [
labelOnTop: false,
},
},
+ {
+ id: '34',
+ container: {
+ id: 'all-properties-group-key',
+ },
+ alias: 'codeEditor',
+ name: 'Code Editor',
+ description: 'umb-code-editor configured with the `html` language.',
+ dataType: {
+ id: 'dt-codeEditor',
+ },
+ variesByCulture: false,
+ variesBySegment: false,
+ sortOrder: 0,
+ validation: {
+ mandatory: true,
+ mandatoryMessage: null,
+ regEx: null,
+ regExMessage: null,
+ },
+ appearance: {
+ labelOnTop: false,
+ },
+ },
],
containers: [
{
diff --git a/src/Umbraco.Web.UI.Client/src/mocks/data/document/document-collection.manager.ts b/src/Umbraco.Web.UI.Client/src/mocks/data/document/document-collection.manager.ts
index 945127fc48..a3979f2ce6 100644
--- a/src/Umbraco.Web.UI.Client/src/mocks/data/document/document-collection.manager.ts
+++ b/src/Umbraco.Web.UI.Client/src/mocks/data/document/document-collection.manager.ts
@@ -17,11 +17,6 @@ export class UmbMockDocumentCollectionManager {
getCollectionDocumentById({
id,
- dataTypeId,
- orderBy,
- orderCulture,
- orderDirection,
- filter,
skip = 0,
take = 100,
}: {
diff --git a/src/Umbraco.Web.UI.Client/src/mocks/data/document/document.data.ts b/src/Umbraco.Web.UI.Client/src/mocks/data/document/document.data.ts
index 1c0a6b60a2..2e3dce12d4 100644
--- a/src/Umbraco.Web.UI.Client/src/mocks/data/document/document.data.ts
+++ b/src/Umbraco.Web.UI.Client/src/mocks/data/document/document.data.ts
@@ -82,6 +82,36 @@ export const data: Array = [
`,
},
},
+ {
+ alias: 'codeEditor',
+ culture: null,
+ segment: null,
+ value: `Lorem ipsum dolor sit amet consectetuer adipiscing elit
+
+ Lorem ipsum dolor sit amet consectetuer.
+ Aenean commodo ligula eget dolor.
+ Aenean massa cum sociis natoque penatibus.
+
+
+ Lorem ipsum dolor sit amet, consectetuer adipiscing
+ elit. Aenean commodo ligula eget dolor.
+
+
+
+ Lorem ipsum dolor sit amet, consectetuer
+ adipiscing elit. Aenean commodo ligula eget dolor.
+ Aenean massa strong . Cum sociis
+ natoque penatibus et magnis dis parturient montes,
+ nascetur ridiculus mus. Donec quam felis, ultricies
+ nec, pellentesque eu, pretium quis, sem. Nulla consequat
+ massa quis enim. Donec pede justo, fringilla vel,
+ aliquet nec, vulputate eget, arcu. In em
+ enim justo, rhoncus ut, imperdiet a, venenatis vitae,
+ justo. Nullam link
+ dictum felis eu pede mollis pretium.
+
+`,
+ },
{
alias: 'email',
culture: null,
diff --git a/src/Umbraco.Web.UI.Client/src/mocks/data/document/document.db.ts b/src/Umbraco.Web.UI.Client/src/mocks/data/document/document.db.ts
index 0f6e13d5c6..d9a36ba11b 100644
--- a/src/Umbraco.Web.UI.Client/src/mocks/data/document/document.db.ts
+++ b/src/Umbraco.Web.UI.Client/src/mocks/data/document/document.db.ts
@@ -33,11 +33,11 @@ export class UmbDocumentMockDB extends UmbEntityMockDbBase
}
// permissions
- getUserPermissionsForDocument(id: string): Array {
+ getUserPermissionsForDocument(): Array {
return [];
}
- getDomainsForDocument(id: string): DomainsResponseModel {
+ getDomainsForDocument(): DomainsResponseModel {
return { defaultIsoCode: 'en-us', domains: [] };
}
diff --git a/src/Umbraco.Web.UI.Client/src/mocks/data/media/media-collection.manager.ts b/src/Umbraco.Web.UI.Client/src/mocks/data/media/media-collection.manager.ts
index bbcd972681..0ad8b41114 100644
--- a/src/Umbraco.Web.UI.Client/src/mocks/data/media/media-collection.manager.ts
+++ b/src/Umbraco.Web.UI.Client/src/mocks/data/media/media-collection.manager.ts
@@ -14,10 +14,6 @@ export class UmbMockMediaCollectionManager {
getCollectionMedia({
id,
- dataTypeId,
- orderBy,
- orderDirection,
- filter,
skip = 0,
take = 100,
}: {
diff --git a/src/Umbraco.Web.UI.Client/src/mocks/data/template/template-query.manager.ts b/src/Umbraco.Web.UI.Client/src/mocks/data/template/template-query.manager.ts
index 960d4d0ba1..a8f870ec15 100644
--- a/src/Umbraco.Web.UI.Client/src/mocks/data/template/template-query.manager.ts
+++ b/src/Umbraco.Web.UI.Client/src/mocks/data/template/template-query.manager.ts
@@ -1,4 +1,4 @@
-import { templateQueryResult, templateQuerySettings, type UmbMockTemplateModel } from './template.data.js';
+import { templateQueryResult, templateQuerySettings } from './template.data.js';
export class UmbMockTemplateQueryManager {
constructor() {}
diff --git a/src/Umbraco.Web.UI.Client/src/mocks/data/user/user.db.ts b/src/Umbraco.Web.UI.Client/src/mocks/data/user/user.db.ts
index 63c5290bff..3f1ac5c5df 100644
--- a/src/Umbraco.Web.UI.Client/src/mocks/data/user/user.db.ts
+++ b/src/Umbraco.Web.UI.Client/src/mocks/data/user/user.db.ts
@@ -1,5 +1,5 @@
import { umbUserGroupMockDb } from '../user-group/user-group.db.js';
-import { arrayFilter, stringFilter, queryFilter, objectArrayFilter } from '../utils.js';
+import { stringFilter, queryFilter, objectArrayFilter } from '../utils.js';
import { UmbEntityMockDbBase } from '../utils/entity/entity-base.js';
import { UmbMockEntityItemManager } from '../utils/entity/entity-item.manager.js';
import { UmbMockEntityDetailManager } from '../utils/entity/entity-detail.manager.js';
diff --git a/src/Umbraco.Web.UI.Client/src/mocks/data/utils/content/content-collection.manager.ts b/src/Umbraco.Web.UI.Client/src/mocks/data/utils/content/content-collection.manager.ts
index f63f639fbf..41ee046de3 100644
--- a/src/Umbraco.Web.UI.Client/src/mocks/data/utils/content/content-collection.manager.ts
+++ b/src/Umbraco.Web.UI.Client/src/mocks/data/utils/content/content-collection.manager.ts
@@ -1,8 +1,7 @@
-import { queryFilter } from '../../utils.js';
import type { UmbMockDBBase } from '../mock-db-base.js';
import { pagedResult } from '../paged-result.js';
-const contentQueryFilter = (filterOptions: any, item: any) => {
+const contentQueryFilter = () => {
return true;
console.log('implement filter logic for content items');
//queryFilter(filterOptions.filter, item.name);
diff --git a/src/Umbraco.Web.UI.Client/src/mocks/data/webhooks.data.ts b/src/Umbraco.Web.UI.Client/src/mocks/data/webhooks.data.ts
deleted file mode 100644
index 9685f3612e..0000000000
--- a/src/Umbraco.Web.UI.Client/src/mocks/data/webhooks.data.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-import { UmbMockDBBase } from './utils/mock-db-base.js';
-//import {
-// WebhooksResponseModel,
-//} from '@umbraco-cms/backoffice/backend-api';
-
-class UmbWebhooksData extends UmbMockDBBase {
- constructor(data: any[]) {
- super(data);
- }
-}
-
-export const umbWebhooksData = {
- //webhooks: new UmbWebhooksData(webhooks),
-};
diff --git a/src/Umbraco.Web.UI.Client/src/mocks/handlers/dictionary/import-export.handlers.ts b/src/Umbraco.Web.UI.Client/src/mocks/handlers/dictionary/import-export.handlers.ts
index eebd1adac4..04b0dd81bf 100644
--- a/src/Umbraco.Web.UI.Client/src/mocks/handlers/dictionary/import-export.handlers.ts
+++ b/src/Umbraco.Web.UI.Client/src/mocks/handlers/dictionary/import-export.handlers.ts
@@ -1,9 +1,10 @@
const { rest } = window.MockServiceWorker;
-import type { UmbMockDictionaryModel } from '../../data/dictionary/dictionary.data.js';
+//import type { UmbMockDictionaryModel } from '../../data/dictionary/dictionary.data.js';
import { umbDictionaryMockDb } from '../../data/dictionary/dictionary.db.js';
import { UMB_SLUG } from './slug.js';
import { umbracoPath } from '@umbraco-cms/backoffice/utils';
+/*
const importResponse: UmbMockDictionaryModel = {
parent: null,
name: 'Uploaded dictionary',
@@ -21,6 +22,7 @@ const importResponse: UmbMockDictionaryModel = {
},
],
};
+*/
export const importExportHandlers = [
rest.post(umbracoPath(`${UMB_SLUG}/import`), async (req, res, ctx) => {
diff --git a/src/Umbraco.Web.UI.Client/src/mocks/handlers/document/domain.handlers.ts b/src/Umbraco.Web.UI.Client/src/mocks/handlers/document/domain.handlers.ts
index 5b74c25e61..3d44b343f2 100644
--- a/src/Umbraco.Web.UI.Client/src/mocks/handlers/document/domain.handlers.ts
+++ b/src/Umbraco.Web.UI.Client/src/mocks/handlers/document/domain.handlers.ts
@@ -8,7 +8,7 @@ export const domainHandlers = [
rest.get(umbracoPath(`${UMB_SLUG}/:id/domains`), (req, res, ctx) => {
const id = req.params.id as string;
if (!id) return;
- const response = umbDocumentMockDb.getDomainsForDocument(id);
+ const response = umbDocumentMockDb.getDomainsForDocument();
return res(ctx.status(200), ctx.json(response));
}),
];
diff --git a/src/Umbraco.Web.UI.Client/src/mocks/handlers/document/permission.handlers.ts b/src/Umbraco.Web.UI.Client/src/mocks/handlers/document/permission.handlers.ts
index c5f828261b..097afd9fe7 100644
--- a/src/Umbraco.Web.UI.Client/src/mocks/handlers/document/permission.handlers.ts
+++ b/src/Umbraco.Web.UI.Client/src/mocks/handlers/document/permission.handlers.ts
@@ -8,7 +8,7 @@ export const permissionHandlers = [
rest.get(umbracoPath(`${UMB_SLUG}/:id/permissions`), (req, res, ctx) => {
const id = req.params.id as string;
if (!id) return;
- const response = umbDocumentMockDb.getUserPermissionsForDocument(id);
+ const response = umbDocumentMockDb.getUserPermissionsForDocument();
return res(ctx.status(200), ctx.json(response));
}),
];
diff --git a/src/Umbraco.Web.UI.Client/src/mocks/handlers/examine-management.handlers.ts b/src/Umbraco.Web.UI.Client/src/mocks/handlers/examine-management.handlers.ts
index 68d74955ab..51fca662e2 100644
--- a/src/Umbraco.Web.UI.Client/src/mocks/handlers/examine-management.handlers.ts
+++ b/src/Umbraco.Web.UI.Client/src/mocks/handlers/examine-management.handlers.ts
@@ -57,7 +57,6 @@ export const handlers = [
rest.get(umbracoPath('/searcher/:searcherName/query'), (_req, res, ctx) => {
const query = _req.url.searchParams.get('term');
- const take = _req.url.searchParams.get('take');
const searcherName = _req.params.searcherName as string;
diff --git a/src/Umbraco.Web.UI.Client/src/mocks/handlers/webhook.handlers.ts b/src/Umbraco.Web.UI.Client/src/mocks/handlers/webhook.handlers.ts
deleted file mode 100644
index a4081e6c4a..0000000000
--- a/src/Umbraco.Web.UI.Client/src/mocks/handlers/webhook.handlers.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-const { rest } = window.MockServiceWorker;
-//import { umbracoPath } from '@umbraco-cms/backoffice/utils';
-
-export const handlers = [];
diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/components/block-grid-area-config-entry/workspace/block-grid-area-type-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/components/block-grid-area-config-entry/workspace/block-grid-area-type-workspace.context.ts
index d9ee93951c..875b2333d2 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/components/block-grid-area-config-entry/workspace/block-grid-area-type-workspace.context.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/components/block-grid-area-config-entry/workspace/block-grid-area-type-workspace.context.ts
@@ -106,6 +106,9 @@ export class UmbBlockGridAreaTypeWorkspaceContext
getName() {
return this.#data.getValue()?.alias;
}
+
+ // TODO: [v15] ignoring unused name parameter to avoid breaking changes
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
setName(name: string | undefined) {
throw new Error('You cannot set a name of a area-type.');
}
diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/components/block-grid-block-inline/block-grid-block-inline.element.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/components/block-grid-block-inline/block-grid-block-inline.element.ts
index 81cb697ccc..08948600e1 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/components/block-grid-block-inline/block-grid-block-inline.element.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/components/block-grid-block-inline/block-grid-block-inline.element.ts
@@ -3,7 +3,7 @@ import { UmbBlockGridInlinePropertyDatasetContext } from './block-grid-inline-pr
import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';
import { css, customElement, html, property, state } from '@umbraco-cms/backoffice/external/lit';
import type { UmbPropertyTypeModel } from '@umbraco-cms/backoffice/content-type';
-import type { UmbBlockViewUrlsPropType } from '@umbraco-cms/backoffice/block';
+import type { UmbBlockEditorCustomViewConfiguration } from '@umbraco-cms/backoffice/extension-registry';
import '../block-grid-areas-container/index.js';
import '../ref-grid-block/index.js';
@@ -17,7 +17,7 @@ export class UmbBlockGridBlockInlineElement extends UmbLitElement {
label?: string;
@property({ attribute: false })
- urls?: UmbBlockViewUrlsPropType;
+ config?: UmbBlockEditorCustomViewConfiguration;
@state()
_inlineProperty: UmbPropertyTypeModel | undefined;
@@ -39,7 +39,7 @@ export class UmbBlockGridBlockInlineElement extends UmbLitElement {
}
override render() {
- return html`
+ return html`
diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/components/block-grid-block/block-grid-block.element.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/components/block-grid-block/block-grid-block.element.ts
index 78f3e3e48b..67cd1c81e7 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/components/block-grid-block/block-grid-block.element.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/components/block-grid-block/block-grid-block.element.ts
@@ -1,7 +1,8 @@
import { UMB_BLOCK_GRID_ENTRY_CONTEXT } from '../../context/block-grid-entry.context-token.js';
import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';
import { css, customElement, html, property, state } from '@umbraco-cms/backoffice/external/lit';
-import type { UmbBlockDataType, UmbBlockViewUrlsPropType } from '@umbraco-cms/backoffice/block';
+import type { UmbBlockEditorCustomViewConfiguration } from '@umbraco-cms/backoffice/extension-registry';
+import type { UmbBlockDataType } from '@umbraco-cms/backoffice/block';
import '@umbraco-cms/backoffice/ufm';
import '../block-grid-areas-container/index.js';
@@ -17,7 +18,7 @@ export class UmbBlockGridBlockElement extends UmbLitElement {
label?: string;
@property({ attribute: false })
- urls?: UmbBlockViewUrlsPropType;
+ config?: UmbBlockEditorCustomViewConfiguration;
@state()
_content?: UmbBlockDataType;
@@ -37,7 +38,7 @@ export class UmbBlockGridBlockElement extends UmbLitElement {
}
override render() {
- return html`
+ return html`
`;
diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/components/block-grid-entry/block-grid-entry.element.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/components/block-grid-entry/block-grid-entry.element.ts
index 0e86d455e8..4778221731 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/components/block-grid-entry/block-grid-entry.element.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/components/block-grid-entry/block-grid-entry.element.ts
@@ -2,13 +2,17 @@ import { UmbBlockGridEntryContext } from '../../context/block-grid-entry.context
import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';
import { html, css, customElement, property, state, nothing } from '@umbraco-cms/backoffice/external/lit';
import type { PropertyValueMap } from '@umbraco-cms/backoffice/external/lit';
-import type { UmbPropertyEditorUiElement } from '@umbraco-cms/backoffice/extension-registry';
-import type { UmbBlockViewPropsType } from '@umbraco-cms/backoffice/block';
-import type { UmbBlockGridLayoutModel } from '@umbraco-cms/backoffice/block-grid';
+import type {
+ ManifestBlockEditorCustomView,
+ UmbBlockEditorCustomViewProperties,
+ UmbPropertyEditorUiElement,
+} from '@umbraco-cms/backoffice/extension-registry';
+import { stringOrStringArrayContains } from '@umbraco-cms/backoffice/utils';
+import { UMB_BLOCK_GRID, type UmbBlockGridLayoutModel } from '@umbraco-cms/backoffice/block-grid';
+
import '../block-grid-block-inline/index.js';
import '../block-grid-block/index.js';
import '../block-scale-handler/index.js';
-
/**
* @element umb-block-grid-entry
*/
@@ -40,6 +44,9 @@ export class UmbBlockGridEntryElement extends UmbLitElement implements UmbProper
#context = new UmbBlockGridEntryContext(this);
#renderTimeout: number | undefined;
+ @state()
+ _contentTypeAlias?: string;
+
@state()
_columnSpan?: number;
@@ -82,11 +89,13 @@ export class UmbBlockGridEntryElement extends UmbLitElement implements UmbProper
@state()
_inlineCreateAboveWidth?: string;
- // TODO: use this type on the Element Interface for the Manifest.
@state()
- _blockViewProps: UmbBlockViewPropsType = { contentUdi: undefined!, urls: {} }; // Set to undefined cause it will be set before we render.
+ _blockViewProps: UmbBlockEditorCustomViewProperties = {
+ contentUdi: undefined!,
+ config: { showContentEdit: false, showSettingsEdit: false },
+ }; // Set to undefined cause it will be set before we render.
- #updateBlockViewProps(incoming: Partial>) {
+ #updateBlockViewProps(incoming: Partial>) {
this._blockViewProps = { ...this._blockViewProps, ...incoming };
this.requestUpdate('_blockViewProps');
}
@@ -95,57 +104,119 @@ export class UmbBlockGridEntryElement extends UmbLitElement implements UmbProper
super();
// Misc:
- this.observe(this.#context.showContentEdit, (show) => {
- this._showContentEdit = show;
- });
- this.observe(this.#context.settingsElementTypeKey, (key) => {
- this._hasSettings = !!key;
- });
- this.observe(this.#context.canScale, (canScale) => {
- this._canScale = canScale;
- });
- this.observe(this.#context.label, (label) => {
- this.#updateBlockViewProps({ label });
- this._label = label;
- });
- this.observe(this.#context.contentElementTypeIcon, (icon) => {
- this.#updateBlockViewProps({ icon });
- this._icon = icon;
- });
- this.observe(this.#context.inlineEditingMode, (mode) => {
- this._inlineEditingMode = mode;
- });
+ this.observe(
+ this.#context.showContentEdit,
+ (showContentEdit) => {
+ this._showContentEdit = showContentEdit;
+ this.#updateBlockViewProps({ config: { ...this._blockViewProps.config, showContentEdit } });
+ },
+ null,
+ );
+ this.observe(
+ this.#context.settingsElementTypeKey,
+ (key) => {
+ this._hasSettings = !!key;
+ this.#updateBlockViewProps({ config: { ...this._blockViewProps.config, showSettingsEdit: !!key } });
+ },
+ null,
+ );
+ this.observe(
+ this.#context.canScale,
+ (canScale) => {
+ this._canScale = canScale;
+ },
+ null,
+ );
+ this.observe(
+ this.#context.blockType,
+ (blockType) => {
+ this.#updateBlockViewProps({ blockType });
+ },
+ null,
+ );
+ // TODO: Implement index.
+ this.observe(
+ this.#context.label,
+ (label) => {
+ this.#updateBlockViewProps({ label });
+ this._label = label;
+ },
+ null,
+ );
+ this.observe(
+ this.#context.contentElementTypeIcon,
+ (icon) => {
+ this.#updateBlockViewProps({ icon });
+ this._icon = icon;
+ },
+ null,
+ );
+ this.observe(
+ this.#context.inlineEditingMode,
+ (mode) => {
+ this._inlineEditingMode = mode;
+ },
+ null,
+ );
// Data:
- this.observe(this.#context.layout, (layout) => {
- this.#updateBlockViewProps({ layout });
- });
- this.observe(this.#context.content, (content) => {
- this.#updateBlockViewProps({ content });
- });
- this.observe(this.#context.settings, (settings) => {
- this.#updateBlockViewProps({ settings });
- });
+ this.observe(
+ this.#context.layout,
+ (layout) => {
+ this.#updateBlockViewProps({ layout });
+ },
+ null,
+ );
+ this.observe(
+ this.#context.content,
+ (content) => {
+ this.#updateBlockViewProps({ content });
+ },
+ null,
+ );
+ this.observe(
+ this.#context.settings,
+ (settings) => {
+ this.#updateBlockViewProps({ settings });
+ },
+ null,
+ );
// Paths:
- this.observe(this.#context.createBeforePath, (createPath) => {
- //const oldValue = this._createBeforePath;
- this._createBeforePath = createPath;
- //this.requestUpdate('_createPath', oldValue);
- });
- this.observe(this.#context.createAfterPath, (createPath) => {
- //const oldValue = this._createAfterPath;
- this._createAfterPath = createPath;
- //this.requestUpdate('_createPath', oldValue);
- });
- this.observe(this.#context.workspaceEditContentPath, (path) => {
- this._workspaceEditContentPath = path;
- this.#updateBlockViewProps({ urls: { ...this._blockViewProps.urls, editContent: path } });
- });
- this.observe(this.#context.workspaceEditSettingsPath, (path) => {
- this._workspaceEditSettingsPath = path;
- this.#updateBlockViewProps({ urls: { ...this._blockViewProps.urls, editSettings: path } });
- });
+ this.observe(
+ this.#context.createBeforePath,
+ (createPath) => {
+ //const oldValue = this._createBeforePath;
+ this._createBeforePath = createPath;
+ //this.requestUpdate('_createPath', oldValue);
+ },
+ null,
+ );
+ this.observe(
+ this.#context.createAfterPath,
+ (createPath) => {
+ //const oldValue = this._createAfterPath;
+ this._createAfterPath = createPath;
+ //this.requestUpdate('_createPath', oldValue);
+ },
+ null,
+ );
+ this.observe(
+ this.#context.workspaceEditContentPath,
+ (path) => {
+ this._workspaceEditContentPath = path;
+ this.#updateBlockViewProps({ config: { ...this._blockViewProps.config, editContentPath: path } });
+ },
+ null,
+ );
+ this.observe(
+ this.#context.workspaceEditSettingsPath,
+ (path) => {
+ this._workspaceEditSettingsPath = path;
+ this.#updateBlockViewProps({ config: { ...this._blockViewProps.config, editSettingsPath: path } });
+ },
+ null,
+ );
}
override connectedCallback(): void {
@@ -169,16 +240,25 @@ export class UmbBlockGridEntryElement extends UmbLitElement implements UmbProper
},
'rowSpan',
);
- this.observe(this.#context.contentElementTypeKey, (contentElementTypeKey) => {
- if (contentElementTypeKey) {
- this.setAttribute('data-content-element-type-key', contentElementTypeKey);
- }
- });
- this.observe(this.#context.contentElementTypeAlias, (contentElementTypeAlias) => {
- if (contentElementTypeAlias) {
- this.setAttribute('data-content-element-type-alias', contentElementTypeAlias);
- }
- });
+ this.observe(
+ this.#context.contentElementTypeKey,
+ (contentElementTypeKey) => {
+ if (contentElementTypeKey) {
+ this.setAttribute('data-content-element-type-key', contentElementTypeKey);
+ }
+ },
+ 'contentElementTypeKey',
+ );
+ this.observe(
+ this.#context.contentElementTypeAlias,
+ (contentElementTypeAlias) => {
+ if (contentElementTypeAlias) {
+ this._contentTypeAlias = contentElementTypeAlias;
+ this.setAttribute('data-content-element-type-alias', contentElementTypeAlias);
+ }
+ },
+ 'contentElementTypeAlias',
+ );
this.#callUpdateInlineCreateButtons();
}
@@ -225,18 +305,29 @@ export class UmbBlockGridEntryElement extends UmbLitElement implements UmbProper
}
};
+ #extensionSlotFilterMethod = (manifest: ManifestBlockEditorCustomView) => {
+ if (
+ manifest.forContentTypeAlias &&
+ !stringOrStringArrayContains(manifest.forContentTypeAlias, this._contentTypeAlias!)
+ ) {
+ return false;
+ }
+ if (manifest.forBlockEditor && !stringOrStringArrayContains(manifest.forBlockEditor, UMB_BLOCK_GRID)) {
+ return false;
+ }
+ return true;
+ };
+
#renderInlineEditBlock() {
- return html` `;
+ return html` `;
}
#renderRefBlock() {
- return html` `;
+ return html` `;
}
#renderBlock() {
- return this.contentUdi
+ return this.contentUdi && this._contentTypeAlias
? html`
${this._createBeforePath && this._showInlineCreateBefore
? html`${this._inlineEditingMode ? this.#renderInlineEditBlock() : this.#renderRefBlock()}
@@ -347,10 +439,6 @@ export class UmbBlockGridEntryElement extends UmbLitElement implements UmbProper
border-color: var(--uui-color-interactive);
}
- uui-action-bar {
- background-color: var(--uui-color-surface);
- }
-
.umb-block-grid__block {
height: 100%;
}
diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/context/block-grid-entry.context.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/context/block-grid-entry.context.ts
index f072e4f164..7cc322ba99 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/context/block-grid-entry.context.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/context/block-grid-entry.context.ts
@@ -30,8 +30,8 @@ export class UmbBlockGridEntryContext
implements UmbBlockGridScalableContext
{
//
- readonly columnSpan = this._layout.asObservablePart((x) => (x ? x.columnSpan ?? null : undefined));
- readonly rowSpan = this._layout.asObservablePart((x) => (x ? x.rowSpan ?? null : undefined));
+ readonly columnSpan = this._layout.asObservablePart((x) => (x ? (x.columnSpan ?? null) : undefined));
+ readonly rowSpan = this._layout.asObservablePart((x) => (x ? (x.rowSpan ?? null) : undefined));
readonly layoutAreas = this._layout.asObservablePart((x) => x?.areas);
readonly columnSpanOptions = this._blockType.asObservablePart((x) => x?.columnSpanOptions ?? []);
readonly areaTypeGridColumns = this._blockType.asObservablePart((x) => x?.areaGridColumns);
diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/context/block-grid-manager.context.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/context/block-grid-manager.context.ts
index 71bcbe39d8..a27b8bf65c 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/context/block-grid-manager.context.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/context/block-grid-manager.context.ts
@@ -63,6 +63,8 @@ export class UmbBlockGridManagerContext<
create(
contentElementTypeKey: string,
partialLayoutEntry?: Omit,
+ // TODO: [v15] Ignore unused parameter to avoid breaking changes
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
modalData?: UmbBlockGridWorkspaceData,
) {
return super.createBlockData(contentElementTypeKey, partialLayoutEntry);
diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/property-editors/block-grid-layout-stylesheet/property-editor-ui-block-grid-layout-stylesheet.element.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/property-editors/block-grid-layout-stylesheet/property-editor-ui-block-grid-layout-stylesheet.element.ts
index 4bde355fa7..7d16db32d8 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/property-editors/block-grid-layout-stylesheet/property-editor-ui-block-grid-layout-stylesheet.element.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/property-editors/block-grid-layout-stylesheet/property-editor-ui-block-grid-layout-stylesheet.element.ts
@@ -52,7 +52,7 @@ export class UmbPropertyEditorUIBlockGridLayoutStylesheetElement
const validationLimit = config?.getValueByAlias('validationLimit');
this._limitMin = validationLimit?.min ?? 0;
- this._limitMax = this.#singleItemMode ? 1 : validationLimit?.max ?? Infinity;
+ this._limitMax = this.#singleItemMode ? 1 : (validationLimit?.max ?? Infinity);
}
@state()
diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/types.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/types.ts
index 7925df893a..392c67f0f2 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/types.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/types.ts
@@ -2,6 +2,7 @@ import type { UmbBlockLayoutBaseModel, UmbBlockValueType } from '@umbraco-cms/ba
import type { UmbBlockTypeWithGroupKey } from '@umbraco-cms/backoffice/block-type';
export const UMB_BLOCK_GRID_TYPE = 'block-grid-type';
+export const UMB_BLOCK_GRID = 'block-grid';
// Configuration models:
export interface UmbBlockGridTypeModel extends UmbBlockTypeWithGroupKey {
diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/workspace/views/block-grid-type-workspace-view-advanced.element.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/workspace/views/block-grid-type-workspace-view-advanced.element.ts
index 3efa9c4cc8..d34cf5d569 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/workspace/views/block-grid-type-workspace-view-advanced.element.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/workspace/views/block-grid-type-workspace-view-advanced.element.ts
@@ -7,31 +7,33 @@ import type { UmbWorkspaceViewElement } from '@umbraco-cms/backoffice/extension-
export class UmbBlockGridTypeWorkspaceViewAdvancedElement extends UmbLitElement implements UmbWorkspaceViewElement {
override render() {
return html`
-
+
-
+
+ property-editor-ui-alias="Umb.PropertyEditorUi.EyeDropper"
+ .config=${[{ alias: 'showAlpha', value: true }]}>
+ property-editor-ui-alias="Umb.PropertyEditorUi.EyeDropper"
+ .config=${[{ alias: 'showAlpha', value: true }]}>
= { contentUdi: undefined!, urls: {} }; // Set to undefined cause it will be set before we render.
+ _blockViewProps: UmbBlockEditorCustomViewProperties = {
+ contentUdi: undefined!,
+ config: { showContentEdit: false, showSettingsEdit: false },
+ }; // Set to undefined cause it will be set before we render.
+
+ #updateBlockViewProps(incoming: Partial>) {
+ this._blockViewProps = { ...this._blockViewProps, ...incoming };
+ this.requestUpdate('_blockViewProps');
+ }
constructor() {
super();
- this.observe(this.#context.showContentEdit, (showContentEdit) => {
- this._showContentEdit = showContentEdit;
- });
- this.observe(this.#context.settingsElementTypeKey, (settingsElementTypeKey) => {
- this._hasSettings = !!settingsElementTypeKey;
- });
- this.observe(this.#context.label, (label) => {
- this._label = label;
- this._blockViewProps.label = label;
- this.requestUpdate('_blockViewProps');
- });
- this.observe(this.#context.contentElementTypeIcon, (icon) => {
- this._icon = icon;
- this._blockViewProps.icon = icon;
- this.requestUpdate('_blockViewProps');
- });
- this.observe(this.#context.inlineEditingMode, (inlineEditingMode) => {
- this._inlineEditingMode = inlineEditingMode;
- });
+ this.observe(
+ this.#context.showContentEdit,
+ (showContentEdit) => {
+ this._showContentEdit = showContentEdit;
+ this.#updateBlockViewProps({ config: { ...this._blockViewProps.config, showContentEdit } });
+ },
+ null,
+ );
+ this.observe(
+ this.#context.settingsElementTypeKey,
+ (key) => {
+ this._hasSettings = !!key;
+ this.#updateBlockViewProps({ config: { ...this._blockViewProps.config, showSettingsEdit: !!key } });
+ },
+ null,
+ );
+ this.observe(
+ this.#context.blockType,
+ (blockType) => {
+ this.#updateBlockViewProps({ blockType });
+ },
+ null,
+ );
+ // TODO: Implement index.
+ this.observe(
+ this.#context.label,
+ (label) => {
+ this.#updateBlockViewProps({ label });
+ this._label = label;
+ },
+ null,
+ );
+ this.observe(
+ this.#context.contentElementTypeIcon,
+ (icon) => {
+ this.#updateBlockViewProps({ icon });
+ this._icon = icon;
+ },
+ null,
+ );
+ this.observe(
+ this.#context.inlineEditingMode,
+ (inlineEditingMode) => {
+ this._inlineEditingMode = inlineEditingMode;
+ },
+ null,
+ );
// Data props:
- this.observe(this.#context.layout, (layout) => {
- this._blockViewProps.layout = layout;
- });
- this.observe(this.#context.content, (content) => {
- this._blockViewProps.content = content;
- });
- this.observe(this.#context.settings, (settings) => {
- this._blockViewProps.settings = settings;
- });
- this.observe(this.#context.workspaceEditContentPath, (path) => {
- this._workspaceEditContentPath = path;
- this._blockViewProps.urls.editContent = path;
- this.requestUpdate('_blockViewProps');
- });
- this.observe(this.#context.workspaceEditSettingsPath, (path) => {
- this._workspaceEditSettingsPath = path;
- this._blockViewProps.urls.editSettings = path;
- this.requestUpdate('_blockViewProps');
- });
+ this.observe(
+ this.#context.layout,
+ (layout) => {
+ this.#updateBlockViewProps({ layout });
+ },
+ null,
+ );
+ this.observe(
+ this.#context.content,
+ (content) => {
+ this.#updateBlockViewProps({ content });
+ },
+ null,
+ );
+ this.observe(
+ this.#context.settings,
+ (settings) => {
+ this.#updateBlockViewProps({ settings });
+ },
+ null,
+ );
+ this.observe(
+ this.#context.workspaceEditContentPath,
+ (path) => {
+ this._workspaceEditContentPath = path;
+ this.#updateBlockViewProps({ config: { ...this._blockViewProps.config, editContentPath: path } });
+ },
+ null,
+ );
+ this.observe(
+ this.#context.workspaceEditSettingsPath,
+ (path) => {
+ this._workspaceEditSettingsPath = path;
+ this.#updateBlockViewProps({ config: { ...this._blockViewProps.config, editSettingsPath: path } });
+ },
+ null,
+ );
}
+ override connectedCallback(): void {
+ super.connectedCallback();
+ // element styling:
+ this.observe(
+ this.#context.contentElementTypeKey,
+ (contentElementTypeKey) => {
+ if (contentElementTypeKey) {
+ this.setAttribute('data-content-element-type-key', contentElementTypeKey);
+ }
+ },
+ 'contentElementTypeKey',
+ );
+ this.observe(
+ this.#context.contentElementTypeAlias,
+ (contentElementTypeAlias) => {
+ if (contentElementTypeAlias) {
+ this._contentTypeAlias = contentElementTypeAlias;
+ this.setAttribute('data-content-element-type-alias', contentElementTypeAlias);
+ }
+ },
+ 'contentElementTypeAlias',
+ );
+ }
+
+ #extensionSlotFilterMethod = (manifest: ManifestBlockEditorCustomView) => {
+ if (
+ manifest.forContentTypeAlias &&
+ !stringOrStringArrayContains(manifest.forContentTypeAlias, this._contentTypeAlias!)
+ ) {
+ return false;
+ }
+ if (manifest.forBlockEditor && !stringOrStringArrayContains(manifest.forBlockEditor, UMB_BLOCK_LIST)) {
+ return false;
+ }
+ return true;
+ };
+
#renderRefBlock() {
return html` `;
}
@@ -116,6 +213,7 @@ export class UmbBlockListEntryElement extends UmbLitElement implements UmbProper
type="blockEditorCustomView"
default-element=${this._inlineEditingMode ? 'umb-inline-list-block' : 'umb-ref-list-block'}
.props=${this._blockViewProps}
+ .filter=${this.#extensionSlotFilterMethod}
>${this._inlineEditingMode ? this.#renderInlineBlock() : this.#renderRefBlock()}
diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block-list/context/block-list-manager.context.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block-list/context/block-list-manager.context.ts
index 5f78892ef2..b5610dab2c 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/block/block-list/context/block-list-manager.context.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/block/block-list/context/block-list-manager.context.ts
@@ -21,6 +21,8 @@ export class UmbBlockListManagerContext<
create(
contentElementTypeKey: string,
partialLayoutEntry?: Omit,
+ // TODO: [v15] ignoring unused modalData parameter to avoid breaking changes
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
modalData?: UmbBlockListWorkspaceData,
) {
return super.createBlockData(contentElementTypeKey, partialLayoutEntry);
diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block-list/property-editors/block-list-editor/property-editor-ui-block-list.element.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block-list/property-editors/block-list-editor/property-editor-ui-block-list.element.ts
index b3828ddd78..584de1645c 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/block/block-list/property-editors/block-list-editor/property-editor-ui-block-list.element.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/block/block-list/property-editors/block-list-editor/property-editor-ui-block-list.element.ts
@@ -1,22 +1,21 @@
-import { UmbBlockListManagerContext } from '../../context/block-list-manager.context.js';
-import type { UmbBlockListEntryElement } from '../../components/block-list-entry/index.js';
-import type { UmbBlockListLayoutModel, UmbBlockListValueModel } from '../../types.js';
import { UmbBlockListEntriesContext } from '../../context/block-list-entries.context.js';
+import type { UmbBlockListLayoutModel, UmbBlockListValueModel } from '../../types.js';
+import type { UmbBlockListEntryElement } from '../../components/block-list-entry/index.js';
+import { UmbBlockListManagerContext } from '../../context/block-list-manager.context.js';
import { UMB_BLOCK_LIST_PROPERTY_EDITOR_ALIAS } from './manifests.js';
import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';
import { html, customElement, property, state, repeat, css } from '@umbraco-cms/backoffice/external/lit';
import { UmbTextStyles } from '@umbraco-cms/backoffice/style';
-import type { UmbPropertyEditorUiElement } from '@umbraco-cms/backoffice/extension-registry';
+import type { UmbPropertyEditorUiElement, UmbBlockTypeBaseModel } from '@umbraco-cms/backoffice/extension-registry';
import {
UmbPropertyValueChangeEvent,
type UmbPropertyEditorConfigCollection,
} from '@umbraco-cms/backoffice/property-editor';
-import type { UmbBlockLayoutBaseModel } from '@umbraco-cms/backoffice/block';
-import type { UmbBlockTypeBaseModel } from '@umbraco-cms/backoffice/block-type';
import type { UmbNumberRangeValueType } from '@umbraco-cms/backoffice/models';
import type { UmbModalRouteBuilder } from '@umbraco-cms/backoffice/router';
import type { UmbSorterConfig } from '@umbraco-cms/backoffice/sorter';
import { UmbSorterController } from '@umbraco-cms/backoffice/sorter';
+import type { UmbBlockLayoutBaseModel } from '@umbraco-cms/backoffice/block';
import '../../components/block-list-entry/index.js';
diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block-list/property-editors/block-list-type-configuration/property-editor-ui-block-list-type-configuration.element.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block-list/property-editors/block-list-type-configuration/property-editor-ui-block-list-type-configuration.element.ts
index ef1f279157..639175c2fb 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/block/block-list/property-editors/block-list-type-configuration/property-editor-ui-block-list-type-configuration.element.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/block/block-list/property-editors/block-list-type-configuration/property-editor-ui-block-list-type-configuration.element.ts
@@ -1,7 +1,7 @@
-import type { UmbBlockTypeBaseModel, UmbInputBlockTypeElement } from '../../../block-type/index.js';
import '../../../block-type/components/input-block-type/index.js';
+import type { UmbInputBlockTypeElement } from '../../../block-type/index.js';
import { UMB_BLOCK_LIST_TYPE } from '../../types.js';
-import type { UmbPropertyEditorUiElement } from '@umbraco-cms/backoffice/extension-registry';
+import type { UmbBlockTypeBaseModel, UmbPropertyEditorUiElement } from '@umbraco-cms/backoffice/extension-registry';
import { html, customElement, property, state } from '@umbraco-cms/backoffice/external/lit';
import {
UmbPropertyValueChangeEvent,
diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block-list/types.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block-list/types.ts
index dc5894a548..4b58ab2ec2 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/block/block-list/types.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/block/block-list/types.ts
@@ -1,7 +1,8 @@
-import type { UmbBlockTypeBaseModel } from '../block-type/index.js';
+import type { UmbBlockTypeBaseModel } from '@umbraco-cms/backoffice/extension-registry';
import type { UmbBlockLayoutBaseModel, UmbBlockValueType } from '@umbraco-cms/backoffice/block';
export const UMB_BLOCK_LIST_TYPE = 'block-list-type';
+export const UMB_BLOCK_LIST = 'block-list';
export interface UmbBlockListTypeModel extends UmbBlockTypeBaseModel {}
export interface UmbBlockListLayoutModel extends UmbBlockLayoutBaseModel {}
diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block-list/workspace/views/block-list-type-workspace-view.element.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block-list/workspace/views/block-list-type-workspace-view.element.ts
index 66ba634c0d..3db4946a0a 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/block/block-list/workspace/views/block-list-type-workspace-view.element.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/block/block-list/workspace/views/block-list-type-workspace-view.element.ts
@@ -7,20 +7,20 @@ import type { UmbWorkspaceViewElement } from '@umbraco-cms/backoffice/extension-
export class UmbBlockListTypeWorkspaceViewSettingsElement extends UmbLitElement implements UmbWorkspaceViewElement {
override render() {
return html`
-
+
-
+
-
+
+ property-editor-ui-alias="Umb.PropertyEditorUi.EyeDropper"
+ .config=${[{ alias: 'showAlpha', value: true }]}>
+ property-editor-ui-alias="Umb.PropertyEditorUi.EyeDropper"
+ .config=${[{ alias: 'showAlpha', value: true }]}>
-
+
diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block-rte/components/block-rte-entry/block-rte-entry.element.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block-rte/components/block-rte-entry/block-rte-entry.element.ts
index 4d29189aee..7e276d7028 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/block/block-rte/components/block-rte-entry/block-rte-entry.element.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/block/block-rte/components/block-rte-entry/block-rte-entry.element.ts
@@ -1,10 +1,14 @@
-import { UmbBlockRteEntryContext } from '../../context/block-rte-entry.context.js';
import type { UmbBlockRteLayoutModel } from '../../types.js';
+import { UmbBlockRteEntryContext } from '../../context/block-rte-entry.context.js';
import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';
import { html, css, property, state, customElement } from '@umbraco-cms/backoffice/external/lit';
-import type { UmbPropertyEditorUiElement } from '@umbraco-cms/backoffice/extension-registry';
+import type {
+ UmbBlockEditorCustomViewProperties,
+ UmbPropertyEditorUiElement,
+} from '@umbraco-cms/backoffice/extension-registry';
+import { UmbTextStyles } from '@umbraco-cms/backoffice/style';
+
import '../ref-rte-block/index.js';
-import type { UmbBlockViewPropsType } from '@umbraco-cms/backoffice/block';
/**
* @element umb-rte-block
@@ -43,9 +47,16 @@ export class UmbBlockRteEntryElement extends UmbLitElement implements UmbPropert
@state()
_workspaceEditSettingsPath?: string;
- // TODO: use this type on the Element Interface for the Manifest.
@state()
- _blockViewProps: UmbBlockViewPropsType = { contentUdi: undefined!, urls: {} }; // Set to undefined cause it will be set before we render.
+ _blockViewProps: UmbBlockEditorCustomViewProperties = {
+ contentUdi: undefined!,
+ config: { showContentEdit: false, showSettingsEdit: false },
+ }; // Set to undefined cause it will be set before we render.
+
+ #updateBlockViewProps(incoming: Partial>) {
+ this._blockViewProps = { ...this._blockViewProps, ...incoming };
+ this.requestUpdate('_blockViewProps');
+ }
constructor() {
super();
@@ -55,49 +66,78 @@ export class UmbBlockRteEntryElement extends UmbLitElement implements UmbPropert
this.observe(this.#context.showContentEdit, (showContentEdit) => {
this._showContentEdit = showContentEdit;
+ this.#updateBlockViewProps({ config: { ...this._blockViewProps.config, showContentEdit } });
});
- this.observe(this.#context.settingsElementTypeKey, (settingsElementTypeKey) => {
- this._hasSettings = !!settingsElementTypeKey;
- });
- this.observe(this.#context.label, (label) => {
- this._label = label;
- this._blockViewProps.label = label;
- this.requestUpdate('_blockViewProps');
- });
- this.observe(this.#context.contentElementTypeIcon, (icon) => {
- this._icon = icon;
- this._blockViewProps.icon = icon;
- this.requestUpdate('_blockViewProps');
+ this.observe(this.#context.settingsElementTypeKey, (key) => {
+ this._hasSettings = !!key;
+ this.#updateBlockViewProps({ config: { ...this._blockViewProps.config, showSettingsEdit: !!key } });
});
+ this.observe(
+ this.#context.blockType,
+ (blockType) => {
+ this.#updateBlockViewProps({ blockType });
+ },
+ null,
+ );
+ // TODO: Implement index.
+ this.observe(
+ this.#context.label,
+ (label) => {
+ this.#updateBlockViewProps({ label });
+ this._label = label;
+ },
+ null,
+ );
+ this.observe(
+ this.#context.contentElementTypeIcon,
+ (icon) => {
+ this.#updateBlockViewProps({ icon });
+ this._icon = icon;
+ },
+ null,
+ );
// Data props:
- this.observe(this.#context.layout, (layout) => {
- this._blockViewProps.layout = layout;
- });
- this.observe(this.#context.content, (content) => {
- this._blockViewProps.content = content;
- });
- this.observe(this.#context.settings, (settings) => {
- this._blockViewProps.settings = settings;
- });
- this.observe(this.#context.workspaceEditContentPath, (path) => {
- this._workspaceEditContentPath = path;
- this._blockViewProps.urls.editContent = path;
- this.requestUpdate('_blockViewProps');
- });
- this.observe(this.#context.workspaceEditSettingsPath, (path) => {
- this._workspaceEditSettingsPath = path;
- this._blockViewProps.urls.editSettings = path;
- this.requestUpdate('_blockViewProps');
- });
+ this.observe(
+ this.#context.layout,
+ (layout) => {
+ this.#updateBlockViewProps({ layout });
+ },
+ null,
+ );
+ this.observe(
+ this.#context.content,
+ (content) => {
+ this.#updateBlockViewProps({ content });
+ },
+ null,
+ );
+ this.observe(
+ this.#context.settings,
+ (settings) => {
+ this.#updateBlockViewProps({ settings });
+ },
+ null,
+ );
+ this.observe(
+ this.#context.workspaceEditContentPath,
+ (path) => {
+ this._workspaceEditContentPath = path;
+ this.#updateBlockViewProps({ config: { ...this._blockViewProps.config, editContentPath: path } });
+ },
+ null,
+ );
+ this.observe(
+ this.#context.workspaceEditSettingsPath,
+ (path) => {
+ this._workspaceEditSettingsPath = path;
+ this.#updateBlockViewProps({ config: { ...this._blockViewProps.config, editSettingsPath: path } });
+ },
+ null,
+ );
}
override connectedCallback() {
super.connectedCallback();
-
- this.classList.add('uui-font');
-
- this.classList.add('uui-text');
-
this.setAttribute('contenteditable', 'false');
}
@@ -107,27 +147,29 @@ export class UmbBlockRteEntryElement extends UmbLitElement implements UmbPropert
#renderBlock() {
return html`
- ${this.#renderRefBlock()}
-
- ${this._showContentEdit && this._workspaceEditContentPath
- ? html`
-
- `
- : ''}
- ${this._hasSettings && this._workspaceEditSettingsPath
- ? html`
-
- `
- : ''}
- this.#context.requestDelete()}>
-
-
-
+
+ ${this.#renderRefBlock()}
+
+ ${this._showContentEdit && this._workspaceEditContentPath
+ ? html`
+
+ `
+ : ''}
+ ${this._hasSettings && this._workspaceEditSettingsPath
+ ? html`
+
+ `
+ : ''}
+ this.#context.requestDelete()}>
+
+
+
+
`;
}
@@ -136,6 +178,7 @@ export class UmbBlockRteEntryElement extends UmbLitElement implements UmbPropert
}
static override styles = [
+ UmbTextStyles,
css`
:host {
position: relative;
diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block-rte/context/block-rte-entry.context.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block-rte/context/block-rte-entry.context.ts
index ce54601d05..82cb9a40a2 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/block/block-rte/context/block-rte-entry.context.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/block/block-rte/context/block-rte-entry.context.ts
@@ -12,8 +12,8 @@ export class UmbBlockRteEntryContext extends UmbBlockEntryContext<
UmbBlockRteTypeModel,
UmbBlockRteLayoutModel
> {
- readonly displayInline = this._layout.asObservablePart((x) => (x ? x.displayInline ?? false : undefined));
- readonly displayInlineConfig = this._blockType.asObservablePart((x) => (x ? x.displayInline ?? false : undefined));
+ readonly displayInline = this._layout.asObservablePart((x) => (x ? (x.displayInline ?? false) : undefined));
+ readonly displayInlineConfig = this._blockType.asObservablePart((x) => (x ? (x.displayInline ?? false) : undefined));
readonly forceHideContentEditorInOverlay = this._blockType.asObservablePart(
(x) => !!x?.forceHideContentEditorInOverlay,
diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block-rte/context/block-rte-manager.context.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block-rte/context/block-rte-manager.context.ts
index db584d17be..54417230b0 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/block/block-rte/context/block-rte-manager.context.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/block/block-rte/context/block-rte-manager.context.ts
@@ -34,6 +34,8 @@ export class UmbBlockRteManagerContext<
create(
contentElementTypeKey: string,
partialLayoutEntry?: Omit,
+ // TODO: [v15] ignoring unused modalData parameter to avoid breaking changes
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
modalData?: UmbBlockRteWorkspaceData,
) {
const data = super.createBlockData(contentElementTypeKey, partialLayoutEntry);
diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block-rte/tiny-mce-plugin/tiny-mce-block-picker.plugin.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block-rte/tiny-mce-plugin/tiny-mce-block-picker.plugin.ts
index fd7e3dc831..66fbd90b8c 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/block/block-rte/tiny-mce-plugin/tiny-mce-block-picker.plugin.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/block/block-rte/tiny-mce-plugin/tiny-mce-block-picker.plugin.ts
@@ -1,8 +1,8 @@
-import { UMB_BLOCK_RTE_ENTRIES_CONTEXT } from '../context/block-rte-entries.context-token.js';
import { UMB_BLOCK_RTE_MANAGER_CONTEXT } from '../context/block-rte-manager.context-token.js';
+import { UMB_BLOCK_RTE_ENTRIES_CONTEXT } from '../context/block-rte-entries.context-token.js';
import { type TinyMcePluginArguments, UmbTinyMcePluginBase } from '@umbraco-cms/backoffice/tiny-mce';
import { UmbLocalizationController } from '@umbraco-cms/backoffice/localization-api';
-import type { UmbBlockTypeBaseModel } from '@umbraco-cms/backoffice/block-type';
+import type { UmbBlockTypeBaseModel } from '@umbraco-cms/backoffice/extension-registry';
export default class UmbTinyMceMultiUrlPickerPlugin extends UmbTinyMcePluginBase {
#localize = new UmbLocalizationController(this._host);
@@ -43,7 +43,7 @@ export default class UmbTinyMceMultiUrlPickerPlugin extends UmbTinyMcePluginBase
}
async showDialog() {
- const blockEl = this.editor.selection.getNode();
+ //const blockEl = this.editor.selection.getNode();
/*if (blockEl.nodeName === 'UMB-RTE-BLOCK' || blockEl.nodeName === 'UMB-RTE-BLOCK-INLINE') {
const blockUdi = blockEl.getAttribute('data-content-udi') ?? undefined;
diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block-rte/types.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block-rte/types.ts
index 45404b976e..b5cedd32da 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/block/block-rte/types.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/block/block-rte/types.ts
@@ -1,4 +1,4 @@
-import type { UmbBlockTypeBaseModel } from '../block-type/index.js';
+import type { UmbBlockTypeBaseModel } from '@umbraco-cms/backoffice/extension-registry';
import type { UmbBlockLayoutBaseModel, UmbBlockValueType } from '@umbraco-cms/backoffice/block';
export const UMB_BLOCK_RTE_TYPE = 'block-rte-type';
diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block-rte/workspace/views/block-rte-type-workspace-view.element.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block-rte/workspace/views/block-rte-type-workspace-view.element.ts
index ec6823ce01..4d04293051 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/block/block-rte/workspace/views/block-rte-type-workspace-view.element.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/block/block-rte/workspace/views/block-rte-type-workspace-view.element.ts
@@ -57,11 +57,13 @@ export class UmbBlockRteTypeWorkspaceViewSettingsElement extends UmbLitElement i
+ property-editor-ui-alias="Umb.PropertyEditorUi.EyeDropper"
+ .config=${[{ alias: 'showAlpha', value: true }]}>
+ property-editor-ui-alias="Umb.PropertyEditorUi.EyeDropper"
+ .config=${[{ alias: 'showAlpha', value: true }]}>
${this._iconFile
? html` `
- : html` `}
+ : html` `}
`;
diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block-type/components/input-block-type/input-block-type.element.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block-type/components/input-block-type/input-block-type.element.ts
index d782049ca1..cade6212d8 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/block/block-type/components/input-block-type/input-block-type.element.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/block/block-type/components/input-block-type/input-block-type.element.ts
@@ -1,4 +1,4 @@
-import type { UmbBlockTypeBaseModel, UmbBlockTypeWithGroupKey } from '../../types.js';
+import type { UmbBlockTypeWithGroupKey } from '../../types.js';
import type { UmbBlockTypeCardElement } from '../block-type-card/index.js';
import { umbConfirmModal } from '@umbraco-cms/backoffice/modal';
import { UmbModalRouteRegistrationController } from '@umbraco-cms/backoffice/router';
@@ -12,6 +12,7 @@ import {
UMB_DOCUMENT_TYPE_PICKER_MODAL,
} from '@umbraco-cms/backoffice/document-type';
import { UmbSorterController } from '@umbraco-cms/backoffice/sorter';
+import type { UmbBlockTypeBaseModel } from '@umbraco-cms/backoffice/extension-registry';
import '../block-type-card/index.js';
diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block-type/types.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block-type/types.ts
index 06bb9dce3c..dccd64dad7 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/block/block-type/types.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/block/block-type/types.ts
@@ -1,17 +1,4 @@
-import type { UUIModalSidebarSize } from '@umbraco-cms/backoffice/external/uui';
-
-export interface UmbBlockTypeBaseModel {
- contentElementTypeKey: string;
- settingsElementTypeKey?: string;
- label?: string;
- //view?: string; // TODO: remove/replace with custom element manifest type for block list.
- //stylesheet?: string; // TODO: remove/replace with custom element manifest type for block list.
- thumbnail?: string;
- iconColor?: string;
- backgroundColor?: string;
- editorSize?: UUIModalSidebarSize;
- forceHideContentEditorInOverlay: boolean;
-}
+import type { UmbBlockTypeBaseModel } from '@umbraco-cms/backoffice/extension-registry';
export interface UmbBlockTypeGroup {
name?: string;
diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block-type/workspace/block-type-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block-type/workspace/block-type-workspace.context.ts
index cbfba97bfc..7585986cb5 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/block/block-type/workspace/block-type-workspace.context.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/block/block-type/workspace/block-type-workspace.context.ts
@@ -1,4 +1,4 @@
-import type { UmbBlockTypeBaseModel, UmbBlockTypeWithGroupKey } from '../types.js';
+import type { UmbBlockTypeWithGroupKey } from '../types.js';
import { UmbBlockTypeWorkspaceEditorElement } from './block-type-workspace-editor.element.js';
import type { UmbPropertyDatasetContext } from '@umbraco-cms/backoffice/property';
import { UMB_PROPERTY_CONTEXT } from '@umbraco-cms/backoffice/property';
@@ -11,9 +11,9 @@ import {
UmbInvariantWorkspacePropertyDatasetContext,
UmbWorkspaceIsNewRedirectController,
} from '@umbraco-cms/backoffice/workspace';
-import { UmbArrayState, UmbObjectState, appendToFrozenArray } from '@umbraco-cms/backoffice/observable-api';
+import { UmbObjectState, appendToFrozenArray } from '@umbraco-cms/backoffice/observable-api';
import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
-import type { ManifestWorkspace, PropertyEditorSettingsProperty } from '@umbraco-cms/backoffice/extension-registry';
+import type { ManifestWorkspace, UmbBlockTypeBaseModel } from '@umbraco-cms/backoffice/extension-registry';
export class UmbBlockTypeWorkspaceContext
extends UmbSubmittableWorkspaceContextBase
@@ -30,9 +30,6 @@ export class UmbBlockTypeWorkspaceContext 'block');
readonly unique = this.#data.asObservablePart((data) => data?.contentElementTypeKey);
- #properties = new UmbArrayState([], (x) => x.alias);
- readonly properties = this.#properties.asObservable();
-
constructor(host: UmbControllerHost, args: { manifest: ManifestWorkspace }) {
super(host, args.manifest.alias);
const manifest = args.manifest;
@@ -73,7 +70,7 @@ export class UmbBlockTypeWorkspaceContext,
@@ -85,7 +85,7 @@ export abstract class UmbBlockEntryContext<
public readonly blockType = this._blockType.asObservable();
public readonly contentElementTypeKey = this._blockType.asObservablePart((x) => x?.contentElementTypeKey);
public readonly settingsElementTypeKey = this._blockType.asObservablePart((x) =>
- x ? x.settingsElementTypeKey ?? undefined : null,
+ x ? (x.settingsElementTypeKey ?? undefined) : null,
);
_layout = new UmbObjectState(undefined);
@@ -126,7 +126,7 @@ export abstract class UmbBlockEntryContext<
#settings = new UmbObjectState(undefined);
public readonly settings = this.#settings.asObservable();
private readonly settingsDataContentTypeKey = this.#settings.asObservablePart((x) =>
- x ? x.contentTypeKey ?? undefined : null,
+ x ? (x.contentTypeKey ?? undefined) : null,
);
abstract readonly showContentEdit: Observable;
diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block/context/block-manager.context.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block/context/block-manager.context.ts
index fa4b2d7fb2..ffc8c85022 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/block/block/context/block-manager.context.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/block/block/context/block-manager.context.ts
@@ -1,11 +1,11 @@
-import type { UmbBlockLayoutBaseModel, UmbBlockDataType } from '../types.js';
import type { UmbBlockWorkspaceData } from '../workspace/index.js';
+import type { UmbBlockLayoutBaseModel, UmbBlockDataType } from '../types.js';
import { UMB_BLOCK_MANAGER_CONTEXT } from './block-manager.context-token.js';
import { UmbContextBase } from '@umbraco-cms/backoffice/class-api';
import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
import { UmbArrayState, UmbClassState, UmbStringState } from '@umbraco-cms/backoffice/observable-api';
import { UmbDocumentTypeDetailRepository } from '@umbraco-cms/backoffice/document-type';
-import type { UmbBlockTypeBaseModel } from '@umbraco-cms/backoffice/block-type';
+import type { UmbBlockTypeBaseModel } from '@umbraco-cms/backoffice/extension-registry';
import type { UmbContentTypeModel } from '@umbraco-cms/backoffice/content-type';
import { UmbId } from '@umbraco-cms/backoffice/id';
import type { UmbPropertyEditorConfigCollection } from '@umbraco-cms/backoffice/property-editor';
@@ -166,7 +166,8 @@ export abstract class UmbBlockManagerContext<
getContentOf(contentUdi: string) {
return this.#contents.value.find((x) => x.udi === contentUdi);
}
-
+ // TODO: [v15]: ignoring unused var here here to prevent a breaking change
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
setOneLayout(layoutData: BlockLayoutType, modalData?: UmbBlockWorkspaceData) {
this._layouts.appendOne(layoutData);
}
@@ -264,6 +265,8 @@ export abstract class UmbBlockManagerContext<
layoutEntry: BlockLayoutType,
content: UmbBlockDataType,
settings: UmbBlockDataType | undefined,
+ // TODO: [v15]: ignoring unused var here here to prevent a breaking change
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
modalData: ModalDataType,
) {
// Create content entry:
diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block/modals/block-catalogue/block-catalogue-modal.token.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block/modals/block-catalogue/block-catalogue-modal.token.ts
index 0558d7d8ff..db261ccc3d 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/block/block/modals/block-catalogue/block-catalogue-modal.token.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/block/block/modals/block-catalogue/block-catalogue-modal.token.ts
@@ -1,6 +1,7 @@
-import type { UmbBlockWorkspaceData } from '@umbraco-cms/backoffice/block';
-import type { UmbBlockTypeBaseModel, UmbBlockTypeGroup } from '@umbraco-cms/backoffice/block-type';
+import type { UmbBlockTypeBaseModel } from '@umbraco-cms/backoffice/extension-registry';
import { UmbModalToken } from '@umbraco-cms/backoffice/modal';
+import type { UmbBlockWorkspaceData } from '@umbraco-cms/backoffice/block';
+import type { UmbBlockTypeGroup } from '@umbraco-cms/backoffice/block-type';
export interface UmbBlockCatalogueModalData {
blocks: Array;
diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block/types.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block/types.ts
index 433d8e28f7..7c11cec0ac 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/block/block/types.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/block/block/types.ts
@@ -1,31 +1,8 @@
-export interface UmbBlockLayoutBaseModel {
- contentUdi: string;
- settingsUdi?: string | null;
-}
-
-export interface UmbBlockDataType {
- udi: string;
- contentTypeKey: string;
- [key: string]: unknown;
-}
+import type { UmbBlockDataType, UmbBlockLayoutBaseModel } from '@umbraco-cms/backoffice/extension-registry';
+export type { UmbBlockDataType, UmbBlockLayoutBaseModel } from '@umbraco-cms/backoffice/extension-registry';
export interface UmbBlockValueType {
layout: { [key: string]: Array | undefined };
contentData: Array;
settingsData: Array;
}
-
-export interface UmbBlockViewUrlsPropType {
- editContent?: string;
- editSettings?: string;
-}
-
-export interface UmbBlockViewPropsType {
- label?: string;
- icon?: string;
- contentUdi: string;
- layout?: BlockLayoutType;
- content?: UmbBlockDataType;
- settings?: UmbBlockDataType;
- urls: UmbBlockViewUrlsPropType;
-}
diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block/workspace/block-element-manager.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block/workspace/block-element-manager.ts
index 6178d50d81..54bcd7aeff 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/block/block/workspace/block-element-manager.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/block/block/workspace/block-element-manager.ts
@@ -31,6 +31,10 @@ export class UmbBlockElementManager extends UmbControllerBase {
this.observe(this.contentTypeId, (id) => this.structure.loadType(id));
}
+ reset() {
+ this.#data.setValue(undefined);
+ }
+
setData(data: UmbBlockDataType | undefined) {
this.#data.setValue(data);
this.#getDataResolver();
diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block/workspace/block-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block/workspace/block-workspace.context.ts
index bb4a88e1d6..0464b2fe88 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/block/block/workspace/block-workspace.context.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/block/block/workspace/block-workspace.context.ts
@@ -112,13 +112,24 @@ export class UmbBlockWorkspaceContext {
@@ -183,56 +258,6 @@ export class UmbBlockWorkspaceContext import('./custom-view.element.js'),
+ forContentTypeAlias: 'elementTypeHeadline',
+ forBlockEditor: 'block-grid',
+};
diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/block/manifests.ts
index 80e1e2bf86..7427ab0b53 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/block/manifests.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/block/manifests.ts
@@ -4,8 +4,11 @@ import { manifests as blockListManifests } from './block-list/manifests.js';
import { manifests as blockRteManifests } from './block-rte/manifests.js';
import { manifests as blockTypeManifests } from './block-type/manifests.js';
import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry';
+// TODO: Remove test custom view, or transfer to test or similar?
+//import { manifest } from './custom-view/manifest.js';
export const manifests: Array = [
+ //manifest,
...blockManifests,
...blockTypeManifests,
...blockListManifests,
diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/code-editor/code-editor.controller.ts b/src/Umbraco.Web.UI.Client/src/packages/code-editor/code-editor.controller.ts
similarity index 97%
rename from src/Umbraco.Web.UI.Client/src/packages/templating/code-editor/code-editor.controller.ts
rename to src/Umbraco.Web.UI.Client/src/packages/code-editor/code-editor.controller.ts
index b1a417ebc5..a4c041da7a 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/templating/code-editor/code-editor.controller.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/code-editor/code-editor.controller.ts
@@ -8,10 +8,11 @@ import type {
UmbCodeEditorHost,
UmbCodeEditorRange,
UmbCodeEditorSelection,
-} from './code-editor.model.js';
+} from './models/code-editor.model.js';
import { themes } from './themes/index.js';
import { monaco } from '@umbraco-cms/backoffice/external/monaco-editor';
import { UmbChangeEvent, UmbInputEvent } from '@umbraco-cms/backoffice/event';
+import { UmbControllerBase } from '@umbraco-cms/backoffice/class-api';
//TODO - consider firing change event on blur
@@ -27,9 +28,11 @@ import { UmbChangeEvent, UmbInputEvent } from '@umbraco-cms/backoffice/event';
* @export
* @class UmbCodeEditor
*/
-export class UmbCodeEditorController {
+export class UmbCodeEditorController extends UmbControllerBase {
#host: UmbCodeEditorHost;
+
#editor?: monaco.editor.IStandaloneCodeEditor;
+
/**
* The monaco editor object. This is the actual monaco editor object. It is exposed for advanced usage, but mind the fact that editor might be swapped in the future for a different library, so use on your own responsibility. For more information see [monaco editor API](https://microsoft.github.io/monaco-editor/docs.html#interfaces/editor.IStandaloneCodeEditor.html).
*
@@ -41,6 +44,7 @@ export class UmbCodeEditorController {
}
#options: CodeEditorConstructorOptions = {};
+
/**
* The options used to create the editor.
*
@@ -63,6 +67,7 @@ export class UmbCodeEditorController {
};
#position: UmbCodeEditorCursorPosition | null = null;
+
/**
* Provides the current position of the cursor.
*
@@ -72,7 +77,9 @@ export class UmbCodeEditorController {
get position() {
return this.#position;
}
+
#secondaryPositions: UmbCodeEditorCursorPosition[] = [];
+
/**
* Provides positions of all the secondary cursors.
*
@@ -102,6 +109,7 @@ export class UmbCodeEditorController {
this.#editor.setValue(newValue ?? '');
}
}
+
/**
* Provides the current model of the editor. For advanced usage. Bare in mind that in case of the monaco library being swapped in the future, this might not be available. For more information see [monaco editor model API](https://microsoft.github.io/monaco-editor/docs.html#interfaces/editor.ITextModel.html).
*
@@ -112,6 +120,7 @@ export class UmbCodeEditorController {
if (!this.#editor) return null;
return this.#editor.getModel();
}
+
/**
* Creates an instance of UmbCodeEditor. You should instantiate this class through the `UmbCodeEditorHost` interface and that should happen when inside DOM nodes of the host container are available, otherwise the editor will not be able to initialize, for example in lit `firstUpdated` lifecycle hook. It will make host emit change and input events when the value of the editor changes.
* @param {UmbCodeEditorHost} host
@@ -119,6 +128,7 @@ export class UmbCodeEditorController {
* @memberof UmbCodeEditor
*/
constructor(host: UmbCodeEditorHost, options?: CodeEditorConstructorOptions) {
+ super(host);
this.#options = { ...options };
this.#host = host;
this.#registerThemes();
@@ -144,6 +154,7 @@ export class UmbCodeEditorController {
this.#editor?.onDidChangeModel(() => {
this.#host.dispatchEvent(new UmbChangeEvent());
});
+
this.#editor?.onDidChangeCursorPosition((e) => {
this.#position = e.position;
this.#secondaryPositions = e.secondaryPositions;
@@ -184,14 +195,8 @@ export class UmbCodeEditorController {
const mergedOptions = { ...this.#defaultMonacoOptions, ...this.#mapOptions(options) };
- this.#editor = monaco.editor.create(this.#host.container, {
- ...mergedOptions,
- value: this.#host.code ?? '',
- language: this.#host.language,
- theme: this.#host.theme,
- readOnly: this.#host.readonly,
- ariaLabel: this.#host.label,
- });
+ this.#editor = monaco.editor.create(this.#host.container, mergedOptions);
+
this.#initiateEvents();
}
/**
diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/code-editor/code-editor.element.ts b/src/Umbraco.Web.UI.Client/src/packages/code-editor/components/code-editor.element.ts
similarity index 54%
rename from src/Umbraco.Web.UI.Client/src/packages/templating/code-editor/code-editor.element.ts
rename to src/Umbraco.Web.UI.Client/src/packages/code-editor/components/code-editor.element.ts
index c7858ecfda..128b78982a 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/templating/code-editor/code-editor.element.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/code-editor/components/code-editor.element.ts
@@ -1,12 +1,29 @@
-import { UmbCodeEditorController } from './code-editor.controller.js';
-import type { CodeEditorLanguage, CodeEditorSearchOptions, UmbCodeEditorHost } from './code-editor.model.js';
-import { CodeEditorTheme } from './code-editor.model.js';
+import type { UmbCodeEditorController } from '../code-editor.controller.js';
+import {
+ type CodeEditorConstructorOptions,
+ CodeEditorTheme,
+ UmbCodeEditorLoadedEvent,
+ type CodeEditorLanguage,
+ type CodeEditorSearchOptions,
+ type UmbCodeEditorHost,
+} from '../models/index.js';
import { UMB_THEME_CONTEXT } from '@umbraco-cms/backoffice/themes';
-import { monacoEditorStyles, monacoJumpingCursorHack } from '@umbraco-cms/backoffice/external/monaco-editor';
import type { PropertyValues, Ref } from '@umbraco-cms/backoffice/external/lit';
-import { css, html, createRef, ref, customElement, property } from '@umbraco-cms/backoffice/external/lit';
+import {
+ createRef,
+ css,
+ customElement,
+ html,
+ property,
+ ref,
+ state,
+ unsafeCSS,
+ when,
+} from '@umbraco-cms/backoffice/external/lit';
import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';
+const elementName = 'umb-code-editor';
+
/**
* A custom element that renders a code editor. Code editor is based on the Monaco Editor library.
* The element will listen to the theme context and update the theme accordingly.
@@ -20,8 +37,9 @@ import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';
* @implements {UmbCodeEditorHost}
* @fires input - Fired when the value of the editor changes.
* @fires change - Fired when the entire model of editor is replaced.
+ * @fires loaded - Fired when the editor is loaded and ready to use.
*/
-@customElement('umb-code-editor')
+@customElement(elementName)
export class UmbCodeEditorElement extends UmbLitElement implements UmbCodeEditorHost {
private containerRef: Ref = createRef();
@@ -35,6 +53,7 @@ export class UmbCodeEditorElement extends UmbLitElement implements UmbCodeEditor
get editor() {
return this.#editor;
}
+
/**
* Theme of the editor. Default is light. Element will listen to the theme context and update the theme accordingly.
*
@@ -43,6 +62,7 @@ export class UmbCodeEditorElement extends UmbLitElement implements UmbCodeEditor
*/
@property()
theme: CodeEditorTheme = CodeEditorTheme.Light;
+
/**
* Language of the editor. Default is javascript.
*
@@ -51,16 +71,18 @@ export class UmbCodeEditorElement extends UmbLitElement implements UmbCodeEditor
*/
@property()
language: CodeEditorLanguage = 'javascript';
+
/**
* Label of the editor. Default is 'Code Editor'.
*
* @memberof UmbCodeEditorElement
*/
@property()
- label = 'Code Editor';
+ label?: string;
//TODO - this should be called a value
#code = '';
+
/**
* Value of the editor. Default is empty string.
*
@@ -80,16 +102,56 @@ export class UmbCodeEditorElement extends UmbLitElement implements UmbCodeEditor
}
this.requestUpdate('code', oldValue);
}
+
/**
- * Whether the editor is readonly. Default is false.
+ * Whether the editor is readonly.
*
* @memberof UmbCodeEditorElement
*/
@property({ type: Boolean, attribute: 'readonly' })
readonly = false;
+ /**
+ * Whether to show line numbers.
+ *
+ * @memberof UmbCodeEditorElement
+ */
+ @property({ type: Boolean, attribute: 'disable-line-numbers' })
+ disableLineNumbers = false;
+
+ /**
+ * Whether to show minimap.
+ *
+ * @memberof UmbCodeEditorElement
+ */
+ @property({ type: Boolean, attribute: 'disable-minimap' })
+ disableMinimap = false;
+
+ /**
+ * Whether to enable word wrap. Default is false.
+ *
+ * @memberof UmbCodeEditorElement
+ */
+ @property({ type: Boolean, attribute: 'word-wrap' })
+ wordWrap = false;
+
+ /**
+ * Whether to enable folding. Default is true.
+ *
+ * @memberof UmbCodeEditorElement
+ */
+ @property({ type: Boolean, attribute: 'disable-folding' })
+ disableFolding = false;
+
+ @state()
+ private _loading = true;
+
+ @state()
+ private _styles?: string;
+
constructor() {
super();
+
this.consumeContext(UMB_THEME_CONTEXT, (instance) => {
this.observe(
instance.theme,
@@ -101,19 +163,49 @@ export class UmbCodeEditorElement extends UmbLitElement implements UmbCodeEditor
});
}
- override firstUpdated() {
- this.#editor = new UmbCodeEditorController(this);
+ override async firstUpdated() {
+ const { styles } = await import('@umbraco-cms/backoffice/external/monaco-editor');
+ this._styles = styles;
+
+ const { UmbCodeEditorController } = await import('../code-editor.controller.js');
+
+ // Options
+ this.#editor = new UmbCodeEditorController(this, this.#constructorOptions());
+
+ this._loading = false;
+ this.dispatchEvent(new UmbCodeEditorLoadedEvent());
}
protected override updated(_changedProperties: PropertyValues): void {
- if (_changedProperties.has('theme') || _changedProperties.has('language')) {
- this.#editor?.updateOptions({
- theme: this.theme,
- language: this.language,
- });
+ if (
+ _changedProperties.has('theme') ||
+ _changedProperties.has('language') ||
+ _changedProperties.has('disableLineNumbers') ||
+ _changedProperties.has('disableMinimap') ||
+ _changedProperties.has('wordWrap') ||
+ _changedProperties.has('readonly') ||
+ _changedProperties.has('code') ||
+ _changedProperties.has('label') ||
+ _changedProperties.has('disableFolding')
+ ) {
+ this.#editor?.updateOptions(this.#constructorOptions());
}
}
+ #constructorOptions(): CodeEditorConstructorOptions {
+ return {
+ language: this.language,
+ theme: this.theme,
+ ariaLabel: this.label ?? this.localize.term('codeEditor_label'),
+ lineNumbers: !this.disableLineNumbers,
+ minimap: !this.disableMinimap,
+ wordWrap: this.wordWrap ? 'on' : 'off',
+ readOnly: this.readonly,
+ folding: !this.disableFolding,
+ value: this.code,
+ };
+ }
+
#translateTheme(theme: string) {
switch (theme) {
case 'umb-light-theme':
@@ -149,16 +241,34 @@ export class UmbCodeEditorElement extends UmbLitElement implements UmbCodeEditor
}
override render() {
- return html`
`;
+ return html`
+ ${this.#renderStyles()}
+ ${when(this._loading, () => html`
`)}
+
+ `;
+ }
+
+ #renderStyles() {
+ if (!this._styles) return;
+ return html`
+
+ `;
}
static override styles = [
- monacoEditorStyles,
- monacoJumpingCursorHack,
css`
:host {
display: block;
}
+
+ #loader-container {
+ display: grid;
+ place-items: center;
+ min-height: calc(100dvh - 260px);
+ }
+
#editor-container {
width: var(--editor-width);
height: var(--editor-height, 100%);
@@ -167,6 +277,12 @@ export class UmbCodeEditorElement extends UmbLitElement implements UmbCodeEditor
--vscode-scrollbarSlider-background: var(--uui-color-disabled-contrast);
--vscode-scrollbarSlider-hoverBackground: rgba(100, 100, 100, 0.7);
--vscode-scrollbarSlider-activeBackground: rgba(0, 0, 0, 0.6);
+
+ /* a hacky workaround this issue: https://github.com/microsoft/monaco-editor/issues/3217
+ should probably be removed when the issue is fixed */
+ .view-lines {
+ font-feature-settings: revert !important;
+ }
}
`,
];
@@ -174,6 +290,6 @@ export class UmbCodeEditorElement extends UmbLitElement implements UmbCodeEditor
declare global {
interface HTMLElementTagNameMap {
- 'umb-code-editor': UmbCodeEditorElement;
+ [elementName]: UmbCodeEditorElement;
}
}
diff --git a/src/Umbraco.Web.UI.Client/src/packages/code-editor/components/code-editor.stories.ts b/src/Umbraco.Web.UI.Client/src/packages/code-editor/components/code-editor.stories.ts
new file mode 100644
index 0000000000..f9f096bf96
--- /dev/null
+++ b/src/Umbraco.Web.UI.Client/src/packages/code-editor/components/code-editor.stories.ts
@@ -0,0 +1,247 @@
+import type { CodeEditorLanguage } from '../models/code-editor.model.js';
+import { CodeEditorTheme } from '../models/code-editor.model.js';
+import type { UmbCodeEditorElement } from './code-editor.element.js';
+import type { Meta, StoryObj } from '@storybook/web-components';
+import { html } from '@umbraco-cms/backoffice/external/lit';
+
+import './code-editor.element.js';
+
+const meta: Meta = {
+ title: 'Components/Code Editor',
+ component: 'umb-code-editor',
+ decorators: [(story) => html`${story()}
`],
+ parameters: { layout: 'fullscreen' },
+ argTypes: {
+ theme: {
+ control: 'select',
+ options: [
+ CodeEditorTheme.Dark,
+ CodeEditorTheme.Light,
+ CodeEditorTheme.HighContrastLight,
+ CodeEditorTheme.HighContrastLight,
+ ],
+ },
+ },
+};
+
+const codeSnippets: Record = {
+ csharp: `using System;
+
+namespace HelloWorld;
+
+public class Program
+{
+ public static void Main()
+ {
+ Console.WriteLine("Hello World");
+ }
+}`,
+ javascript: `// Returns "banana"
+('b' + 'a' + + 'a' + 'a').toLowerCase();`,
+ css: `:host {
+ display: flex;
+ background-color: var(--uui-color-background);
+ width: 100%;
+ height: 100%;
+ flex-direction: column;
+}
+
+#header {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ width: 100%;
+ height: 70px;
+ background-color: var(--uui-color-surface);
+ border-bottom: 1px solid var(--uui-color-border);
+ box-sizing: border-box;
+}
+
+#headline {
+ display: block;
+ margin: 0 var(--uui-size-layout-1);
+}
+
+#tabs {
+ margin-left: auto;
+}`,
+ html: `
+
+
+Page Title
+
+
+
+This is a Heading
+This is a paragraph.
+
+
+`,
+ razor: `@using Umbraco.Extensions
+@inherits Umbraco.Cms.Web.Common.Views.UmbracoViewPage
+@{
+ if (Model?.Areas.Any() != true) { return; }
+}
+
+
+ @foreach (var area in Model.Areas)
+ {
+ @await Html.GetBlockGridItemAreaHtmlAsync(area)
+ }
+
`,
+ markdown: `
+You will like those projects!
+
+---
+
+# h1 Heading 8-)
+## h2 Heading
+### h3 Heading
+#### h4 Heading
+##### h5 Heading
+###### h6 Heading
+
+
+## Horizontal Rules
+
+___
+
+---
+
+***
+
+
+## Typographic replacements
+
+Enable typographer option to see result.
+
+(c) (C) (r) (R) (tm) (TM) (p) (P) +-
+
+test.. test... test..... test?..... test!....
+
+!!!!!! ???? ,, -- ---
+
+"Smartypants, double quotes" and 'single quotes'`,
+ typescript: `import { UmbTemplateRepository } from '../repository/template.repository.js';
+import { UmbWorkspaceContextBase } from '../../../shared/components/workspace/workspace-context/workspace-context.js';
+import { UmbObjectState } from '@umbraco-cms/observable-api';
+import { TemplateModel } from '@umbraco-cms/backend-api';
+import { UmbControllerHostElement } from '@umbraco-cms/controller';
+
+export class UmbTemplateWorkspaceContext extends UmbWorkspaceContext {
+ #data = new UmbObjectState(undefined);
+ data = this.#data.asObservable();
+ name = this.#data.asObservablePart((data) => data?.name);
+ content = this.#data.asObservablePart((data) => data?.content);
+
+ constructor(host: UmbControllerHostElement) {
+ super(host, 'Umb.Workspace.Template', new UmbTemplateRepository(host));
+ }
+
+ getData() {
+ return this.#data.getValue();
+ }
+
+ setName(value: string) {
+ this.#data.setValue({ ...this.#data.value, name: value });
+ }
+
+ setContent(value: string) {
+ this.#data.setValue({ ...this.#data.value, content: value });
+ }
+
+ async load(entityId: string) {
+ const { data } = await this.repository.requestByKey(entityId);
+ if (data) {
+ this.setIsNew(false);
+ this.#data.setValue(data);
+ }
+ }
+
+ async createScaffold(parentId: string | null) {
+ const { data } = await this.repository.createScaffold(parentId);
+ if (!data) return;
+ this.setIsNew(true);
+ this.#data.setValue(data);
+ }
+}`,
+ json: `{
+ "compilerOptions": {
+ "module": "esnext",
+ "target": "esnext",
+ "lib": ["es2020", "dom", "dom.iterable"],
+ "declaration": true,
+ "emitDeclarationOnly": true,
+ "noEmitOnError": true,
+ "outDir": "./types",
+ "strict": true,
+ "noImplicitReturns": true,
+ "noFallthroughCasesInSwitch": true,
+ "moduleResolution": "node",
+ "isolatedModules": true,
+ "allowSyntheticDefaultImports": true,
+ "experimentalDecorators": true,
+ "forceConsistentCasingInFileNames": true,
+ "useDefineForClassFields": false,
+ "skipLibCheck": true,
+ "resolveJsonModule": true,
+ "baseUrl": ".",
+ "paths": {
+ "@umbraco-cms/css": ["libs/css/custom-properties.css"],
+ "@umbraco-cms/modal": ["src/core/modal"],
+ "@umbraco-cms/models": ["libs/models"],
+ "@umbraco-cms/backend-api": ["libs/backend-api"],
+ "@umbraco-cms/context-api": ["libs/context-api"],
+ "@umbraco-cms/controller": ["libs/controller"],
+ "@umbraco-cms/element": ["libs/element"],
+ "@umbraco-cms/extension-api": ["libs/extension-api"],
+ "@umbraco-cms/extension-registry": ["libs/extension-registry"],
+ "@umbraco-cms/notification": ["libs/notification"],
+ "@umbraco-cms/observable-api": ["libs/observable-api"],
+ "@umbraco-cms/events": ["libs/events"],
+ "@umbraco-cms/entity-action": ["libs/entity-action"],
+ "@umbraco-cms/workspace": ["libs/workspace"],
+ "@umbraco-cms/utils": ["libs/utils"],
+ "@umbraco-cms/router": ["libs/router"],
+ "@umbraco-cms/sorter": ["libs/sorter"],
+ "@umbraco-cms/test-utils": ["libs/test-utils"],
+ "@umbraco-cms/repository": ["libs/repository"],
+ "@umbraco-cms/resources": ["libs/resources"],
+ "@umbraco-cms/store": ["libs/store"],
+ "@umbraco-cms/components/*": ["src/backoffice/components/*"],
+ "@umbraco-cms/sections/*": ["src/backoffice/sections/*"]
+ }
+ },
+ "include": ["src/**/*.ts", "apps/**/*.ts", "libs/**/*.ts", "e2e/**/*.ts"],
+ "references": [
+ {
+ "path": "./tsconfig.node.json"
+ }
+ ]
+}`,
+};
+
+export default meta;
+type Story = StoryObj;
+
+const [Csharp, Javascript, Css, Html, Razor, Markdown, Typescript, Json]: Story[] = Object.keys(codeSnippets).map(
+ (language) => {
+ return {
+ args: {
+ language: language as CodeEditorLanguage,
+ code: codeSnippets[language as CodeEditorLanguage],
+ },
+ };
+ },
+);
+
+const Themes: Story = {
+ args: {
+ language: 'javascript',
+ code: codeSnippets.javascript,
+ theme: CodeEditorTheme.Dark,
+ },
+};
+
+export { Csharp, Javascript, Css, Html, Razor, Markdown, Typescript, Json, Themes };
diff --git a/src/Umbraco.Web.UI.Client/src/packages/code-editor/components/index.ts b/src/Umbraco.Web.UI.Client/src/packages/code-editor/components/index.ts
new file mode 100644
index 0000000000..3cfc04bfa2
--- /dev/null
+++ b/src/Umbraco.Web.UI.Client/src/packages/code-editor/components/index.ts
@@ -0,0 +1 @@
+export * from './code-editor.element.js';
diff --git a/src/Umbraco.Web.UI.Client/src/packages/code-editor/index.ts b/src/Umbraco.Web.UI.Client/src/packages/code-editor/index.ts
new file mode 100644
index 0000000000..60335eb6e1
--- /dev/null
+++ b/src/Umbraco.Web.UI.Client/src/packages/code-editor/index.ts
@@ -0,0 +1,11 @@
+export * from './components/index.js';
+export * from './models/index.js';
+export type { UmbCodeEditorController } from './code-editor.controller.js';
+
+/**
+ * @deprecated Use `import from '@umbraco-cms/backoffice/code-editor';` directly.
+ * This function will be removed in Umbraco 15.
+ */
+export function loadCodeEditor() {
+ return import('@umbraco-cms/backoffice/code-editor');
+}
diff --git a/src/Umbraco.Web.UI.Client/src/packages/code-editor/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/code-editor/manifests.ts
new file mode 100644
index 0000000000..929a1810ad
--- /dev/null
+++ b/src/Umbraco.Web.UI.Client/src/packages/code-editor/manifests.ts
@@ -0,0 +1,4 @@
+import { manifest as propertyEditorManifest } from './property-editor/manifests.js';
+import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry';
+
+export const manifests: Array = [propertyEditorManifest];
diff --git a/src/Umbraco.Web.UI.Client/src/packages/code-editor/models/code-editor-loaded.event.ts b/src/Umbraco.Web.UI.Client/src/packages/code-editor/models/code-editor-loaded.event.ts
new file mode 100644
index 0000000000..9be89b5727
--- /dev/null
+++ b/src/Umbraco.Web.UI.Client/src/packages/code-editor/models/code-editor-loaded.event.ts
@@ -0,0 +1,7 @@
+export class UmbCodeEditorLoadedEvent extends Event {
+ public static readonly TYPE = 'loaded';
+
+ public constructor() {
+ super(UmbCodeEditorLoadedEvent.TYPE, { bubbles: true, cancelable: false });
+ }
+}
diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/code-editor/code-editor.model.ts b/src/Umbraco.Web.UI.Client/src/packages/code-editor/models/code-editor.model.ts
similarity index 95%
rename from src/Umbraco.Web.UI.Client/src/packages/templating/code-editor/code-editor.model.ts
rename to src/Umbraco.Web.UI.Client/src/packages/code-editor/models/code-editor.model.ts
index b1f28f2fae..30109cb436 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/templating/code-editor/code-editor.model.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/code-editor/models/code-editor.model.ts
@@ -1,4 +1,14 @@
-export type CodeEditorLanguage = 'razor' | 'typescript' | 'javascript' | 'css' | 'markdown' | 'json' | 'html';
+import type { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';
+
+export type CodeEditorLanguage =
+ | 'csharp'
+ | 'razor'
+ | 'typescript'
+ | 'javascript'
+ | 'css'
+ | 'markdown'
+ | 'json'
+ | 'html';
export enum CodeEditorTheme {
Light = 'umb-light',
@@ -7,13 +17,13 @@ export enum CodeEditorTheme {
HighContrastDark = 'umb-hc-dark',
}
-export interface UmbCodeEditorHost extends HTMLElement {
+export interface UmbCodeEditorHost extends UmbLitElement {
container: HTMLElement;
language: CodeEditorLanguage;
theme: CodeEditorTheme;
code: string;
readonly: boolean;
- label: string;
+ label?: string;
}
export interface UmbCodeEditorCursorPosition {
diff --git a/src/Umbraco.Web.UI.Client/src/packages/code-editor/models/index.ts b/src/Umbraco.Web.UI.Client/src/packages/code-editor/models/index.ts
new file mode 100644
index 0000000000..21c8883042
--- /dev/null
+++ b/src/Umbraco.Web.UI.Client/src/packages/code-editor/models/index.ts
@@ -0,0 +1,2 @@
+export * from './code-editor-loaded.event.js';
+export * from './code-editor.model.js';
diff --git a/src/Umbraco.Web.UI.Client/src/packages/code-editor/package.json b/src/Umbraco.Web.UI.Client/src/packages/code-editor/package.json
new file mode 100644
index 0000000000..9e80323c74
--- /dev/null
+++ b/src/Umbraco.Web.UI.Client/src/packages/code-editor/package.json
@@ -0,0 +1,8 @@
+{
+ "name": "@umbraco-backoffice/code-editor",
+ "private": true,
+ "type": "module",
+ "scripts": {
+ "build": "vite build"
+ }
+}
diff --git a/src/Umbraco.Web.UI.Client/src/packages/code-editor/property-editor/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/code-editor/property-editor/manifests.ts
new file mode 100644
index 0000000000..5e6142daa1
--- /dev/null
+++ b/src/Umbraco.Web.UI.Client/src/packages/code-editor/property-editor/manifests.ts
@@ -0,0 +1,71 @@
+import type { ManifestPropertyEditorUi } from '@umbraco-cms/backoffice/extension-registry';
+
+export const manifest: ManifestPropertyEditorUi = {
+ type: 'propertyEditorUi',
+ alias: 'Umb.PropertyEditorUi.CodeEditor',
+ name: 'Code Editor Property Editor UI',
+ element: () => import('./property-editor-ui-code-editor.element.js'),
+ meta: {
+ label: 'Code Editor',
+ propertyEditorSchemaAlias: 'Umbraco.Plain.String',
+ icon: 'icon-code',
+ group: 'common',
+ settings: {
+ properties: [
+ {
+ alias: 'language',
+ label: '#codeEditor_languageConfigLabel',
+ description: '{#codeEditor_languageConfigDescription}',
+ propertyEditorUiAlias: 'Umb.PropertyEditorUi.Dropdown',
+ config: [
+ {
+ alias: 'items',
+ value: [
+ { name: 'C#', value: 'csharp' },
+ { name: 'CSS', value: 'css' },
+ { name: 'HTML', value: 'html' },
+ { name: 'JavaScript', value: 'javascript' },
+ { name: 'JSON', value: 'json' },
+ { name: 'Markdown', value: 'markdown' },
+ { name: 'Razor (CSHTML)', value: 'razor' },
+ { name: 'TypeScript', value: 'typescript' },
+ ],
+ },
+ ],
+ },
+ {
+ alias: 'height',
+ label: '#codeEditor_heightConfigLabel',
+ description: '{#codeEditor_heightConfigDescription}',
+ propertyEditorUiAlias: 'Umb.PropertyEditorUi.Integer',
+ config: [{ alias: 'min', value: 0 }],
+ },
+ {
+ alias: 'lineNumbers',
+ label: '#codeEditor_lineNumbersConfigLabel',
+ description: '{#codeEditor_lineNumbersConfigDescription}',
+ propertyEditorUiAlias: 'Umb.PropertyEditorUi.Toggle',
+ },
+ {
+ alias: 'minimap',
+ label: '#codeEditor_minimapConfigLabel',
+ description: '{#codeEditor_minimapConfigDescription}',
+ propertyEditorUiAlias: 'Umb.PropertyEditorUi.Toggle',
+ },
+ {
+ alias: 'wordWrap',
+ label: '#codeEditor_wordWrapConfigLabel',
+ description: '{#codeEditor_wordWrapConfigDescription}',
+ propertyEditorUiAlias: 'Umb.PropertyEditorUi.Toggle',
+ },
+ ],
+ defaultData: [
+ { alias: 'language', value: 'javascript' },
+ { alias: 'height', value: 400 },
+ { alias: 'lineNumbers', value: true },
+ { alias: 'minimap', value: true },
+ { alias: 'wordWrap', value: false },
+ ],
+ },
+ },
+};
diff --git a/src/Umbraco.Web.UI.Client/src/packages/code-editor/property-editor/property-editor-ui-code-editor.element.ts b/src/Umbraco.Web.UI.Client/src/packages/code-editor/property-editor/property-editor-ui-code-editor.element.ts
new file mode 100644
index 0000000000..971ed1111a
--- /dev/null
+++ b/src/Umbraco.Web.UI.Client/src/packages/code-editor/property-editor/property-editor-ui-code-editor.element.ts
@@ -0,0 +1,83 @@
+import type { CodeEditorLanguage } from '../models/index.js';
+import type { UmbCodeEditorElement } from '../components/code-editor.element.js';
+import { css, customElement, html, property, state, styleMap } from '@umbraco-cms/backoffice/external/lit';
+import { UmbInputEvent } from '@umbraco-cms/backoffice/event';
+import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';
+import { UmbPropertyValueChangeEvent } from '@umbraco-cms/backoffice/property-editor';
+import type { UmbPropertyEditorConfigCollection } from '@umbraco-cms/backoffice/property-editor';
+import type { UmbPropertyEditorUiElement } from '@umbraco-cms/backoffice/extension-registry';
+
+import '../components/code-editor.element.js';
+
+const elementName = 'umb-property-editor-ui-code-editor';
+
+@customElement(elementName)
+export class UmbPropertyEditorUICodeEditorElement extends UmbLitElement implements UmbPropertyEditorUiElement {
+ #defaultLanguage: CodeEditorLanguage = 'javascript';
+
+ @state()
+ private _language?: CodeEditorLanguage = this.#defaultLanguage;
+
+ @state()
+ private _height = 400;
+
+ @state()
+ private _lineNumbers = true;
+
+ @state()
+ private _minimap = true;
+
+ @state()
+ private _wordWrap = false;
+
+ @property()
+ value = '';
+
+ @property({ attribute: false })
+ public set config(config: UmbPropertyEditorConfigCollection | undefined) {
+ if (!config) return;
+
+ this._language = config?.getValueByAlias('language') ?? this.#defaultLanguage;
+ this._height = Number(config?.getValueByAlias('height')) || 400;
+ this._lineNumbers = config?.getValueByAlias('lineNumbers') ?? false;
+ this._minimap = config?.getValueByAlias('minimap') ?? false;
+ this._wordWrap = config?.getValueByAlias('wordWrap') ?? false;
+ }
+
+ #onChange(event: UmbInputEvent & { target: UmbCodeEditorElement }) {
+ if (!(event instanceof UmbInputEvent)) return;
+ this.value = event.target.code;
+ this.dispatchEvent(new UmbPropertyValueChangeEvent());
+ }
+
+ override render() {
+ return html`
+
+
+ `;
+ }
+
+ static override styles = [
+ css`
+ umb-code-editor {
+ border-radius: var(--uui-border-radius);
+ border: 1px solid var(--uui-color-divider-emphasis);
+ }
+ `,
+ ];
+}
+
+export { UmbPropertyEditorUICodeEditorElement as element };
+
+declare global {
+ interface HTMLElementTagNameMap {
+ [elementName]: UmbPropertyEditorUICodeEditorElement;
+ }
+}
diff --git a/src/Umbraco.Web.UI.Client/src/packages/code-editor/property-editor/property-editor-ui-code-editor.stories.ts b/src/Umbraco.Web.UI.Client/src/packages/code-editor/property-editor/property-editor-ui-code-editor.stories.ts
new file mode 100644
index 0000000000..6abed142e6
--- /dev/null
+++ b/src/Umbraco.Web.UI.Client/src/packages/code-editor/property-editor/property-editor-ui-code-editor.stories.ts
@@ -0,0 +1,17 @@
+import type { UmbPropertyEditorUICodeEditorElement } from './property-editor-ui-code-editor.element.js';
+import type { Meta, StoryObj } from '@storybook/web-components';
+import { html } from '@umbraco-cms/backoffice/external/lit';
+
+import './property-editor-ui-code-editor.element.js';
+
+const meta: Meta = {
+ title: 'Property Editor UIs/Code Editor',
+ component: 'umb-property-editor-ui-code-editor',
+ id: 'umb-property-editor-ui-code-editor',
+ decorators: [(story) => html`${story()}
`],
+};
+
+export default meta;
+type Story = StoryObj;
+
+export const Overview: Story = {};
diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/code-editor/themes/code-editor.dark.theme.ts b/src/Umbraco.Web.UI.Client/src/packages/code-editor/themes/code-editor.dark.theme.ts
similarity index 100%
rename from src/Umbraco.Web.UI.Client/src/packages/templating/code-editor/themes/code-editor.dark.theme.ts
rename to src/Umbraco.Web.UI.Client/src/packages/code-editor/themes/code-editor.dark.theme.ts
diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/code-editor/themes/code-editor.hc-dark.theme.ts b/src/Umbraco.Web.UI.Client/src/packages/code-editor/themes/code-editor.hc-dark.theme.ts
similarity index 100%
rename from src/Umbraco.Web.UI.Client/src/packages/templating/code-editor/themes/code-editor.hc-dark.theme.ts
rename to src/Umbraco.Web.UI.Client/src/packages/code-editor/themes/code-editor.hc-dark.theme.ts
diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/code-editor/themes/code-editor.hc-light.theme.ts b/src/Umbraco.Web.UI.Client/src/packages/code-editor/themes/code-editor.hc-light.theme.ts
similarity index 100%
rename from src/Umbraco.Web.UI.Client/src/packages/templating/code-editor/themes/code-editor.hc-light.theme.ts
rename to src/Umbraco.Web.UI.Client/src/packages/code-editor/themes/code-editor.hc-light.theme.ts
diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/code-editor/themes/code-editor.light.theme.ts b/src/Umbraco.Web.UI.Client/src/packages/code-editor/themes/code-editor.light.theme.ts
similarity index 100%
rename from src/Umbraco.Web.UI.Client/src/packages/templating/code-editor/themes/code-editor.light.theme.ts
rename to src/Umbraco.Web.UI.Client/src/packages/code-editor/themes/code-editor.light.theme.ts
diff --git a/src/Umbraco.Web.UI.Client/src/packages/templating/code-editor/themes/index.ts b/src/Umbraco.Web.UI.Client/src/packages/code-editor/themes/index.ts
similarity index 92%
rename from src/Umbraco.Web.UI.Client/src/packages/templating/code-editor/themes/index.ts
rename to src/Umbraco.Web.UI.Client/src/packages/code-editor/themes/index.ts
index bcaa4ebea6..bf9894f126 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/templating/code-editor/themes/index.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/code-editor/themes/index.ts
@@ -1,4 +1,4 @@
-import type { CodeEditorTheme } from '../code-editor.model.js';
+import type { CodeEditorTheme } from '../models/code-editor.model.js';
import { UmbCodeEditorThemeHighContrastLight } from './code-editor.hc-light.theme.js';
import { UmbCodeEditorThemeHighContrastDark } from './code-editor.hc-dark.theme.js';
import { UmbCodeEditorThemeLight } from './code-editor.light.theme.js';
diff --git a/src/Umbraco.Web.UI.Client/src/packages/code-editor/umbraco-package.ts b/src/Umbraco.Web.UI.Client/src/packages/code-editor/umbraco-package.ts
new file mode 100644
index 0000000000..6dffa1cf54
--- /dev/null
+++ b/src/Umbraco.Web.UI.Client/src/packages/code-editor/umbraco-package.ts
@@ -0,0 +1,8 @@
+export const extensions = [
+ {
+ name: 'Umbraco Code Editor Bundle',
+ alias: 'Umb.Bundle.UmbracoCodeEditor',
+ type: 'bundle',
+ js: () => import('./manifests.js'),
+ },
+];
diff --git a/src/Umbraco.Web.UI.Client/src/packages/code-editor/vite.config.ts b/src/Umbraco.Web.UI.Client/src/packages/code-editor/vite.config.ts
new file mode 100644
index 0000000000..dbb19c1a26
--- /dev/null
+++ b/src/Umbraco.Web.UI.Client/src/packages/code-editor/vite.config.ts
@@ -0,0 +1,12 @@
+import { defineConfig } from 'vite';
+import { rmSync } from 'fs';
+import { getDefaultConfig } from '../../vite-config-base';
+
+const dist = '../../../dist-cms/packages/code-editor';
+
+// delete the unbundled dist folder
+rmSync(dist, { recursive: true, force: true });
+
+export default defineConfig({
+ ...getDefaultConfig({ dist }),
+});
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/collection/action/collection-action-button.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/collection/action/collection-action-button.element.ts
index 4831180c80..6e33b5d692 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/core/collection/action/collection-action-button.element.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/collection/action/collection-action-button.element.ts
@@ -65,17 +65,16 @@ export class UmbCollectionActionButtonElement extends UmbLitElement {
}
override render() {
+ const label = this.manifest?.meta.label ? this.localize.string(this.manifest.meta.label) : this.manifest?.name;
return html`
+ look="outline"
+ label=${ifDefined(label)}
+ href=${ifDefined(this.manifest?.meta.href)}
+ .state=${this._buttonState}
+ @click=${this._onClick}>
`;
}
}
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/collection/components/collection-selection-actions.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/collection/components/collection-selection-actions.element.ts
index 275702495d..c12a20a145 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/core/collection/components/collection-selection-actions.element.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/collection/components/collection-selection-actions.element.ts
@@ -82,7 +82,7 @@ export class UmbCollectionSelectionActionsElement extends UmbLitElement {
${this._renderSelectionCount()}
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/collection/components/collection-view-bundle.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/collection/components/collection-view-bundle.element.ts
index 0d09882d0a..9936840c15 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/core/collection/components/collection-view-bundle.element.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/collection/components/collection-view-bundle.element.ts
@@ -110,6 +110,13 @@ export class UmbCollectionViewBundleElement extends UmbLitElement {
#onClick(view: UmbCollectionViewLayout) {
this.#collectionContext?.setLastSelectedView(this._entityUnique, view.alias);
+
+ setTimeout(() => {
+ // TODO: This ignorer is just neede for JSON SCHEMA TO WORK, As its not updated with latest TS jet.
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
+ // @ts-ignore
+ this._popover?.hidePopover();
+ }, 100);
}
override render() {
@@ -151,15 +158,12 @@ export class UmbCollectionViewBundleElement extends UmbLitElement {
css`
:host {
--uui-button-content-align: left;
+ --uui-menu-item-flat-structure: 1;
}
.filter-dropdown {
padding: var(--uui-size-space-3);
}
-
- umb-icon {
- display: inline-block;
- }
`,
];
}
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/collection/types.ts b/src/Umbraco.Web.UI.Client/src/packages/core/collection/types.ts
index ecd2225151..822d309abe 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/core/collection/types.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/collection/types.ts
@@ -1,5 +1,5 @@
-import type { ManifestCollection } from '@umbraco-cms/backoffice/extension-registry';
import type { Observable } from '@umbraco-cms/backoffice/external/rxjs';
+import type { ManifestCollection } from '@umbraco-cms/backoffice/extension-registry';
import type { UmbPaginationManager } from '@umbraco-cms/backoffice/utils';
export interface UmbCollectionBulkActionPermissions {
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/components/body-layout/body-layout.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/components/body-layout/body-layout.element.ts
index 73da9a5493..8c23db144a 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/core/components/body-layout/body-layout.element.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/components/body-layout/body-layout.element.ts
@@ -18,6 +18,7 @@ import {
* @slot - Slot for main content
* @slot icon - Slot for icon
* @slot name - Slot for name
+ * @slot header - Slot for header element
* @slot footer - Slot for footer element
* @slot footer-info - Slot for info in the footer
* @slot actions - Slot for actions in the footer
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/components/icon/icon.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/components/icon/icon.element.ts
index 2ae479cd9d..86150d93fa 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/core/components/icon/icon.element.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/components/icon/icon.element.ts
@@ -1,6 +1,7 @@
import { extractUmbColorVariable } from '../../resources/extractUmbColorVariable.function.js';
import { UmbTextStyles } from '@umbraco-cms/backoffice/style';
-import { html, customElement, property, state, ifDefined, css } from '@umbraco-cms/backoffice/external/lit';
+import { html, customElement, property, state, ifDefined, css, styleMap } from '@umbraco-cms/backoffice/external/lit';
+import type { StyleInfo } from '@umbraco-cms/backoffice/external/lit';
import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';
/**
@@ -10,45 +11,60 @@ import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';
*/
@customElement('umb-icon')
export class UmbIconElement extends UmbLitElement {
+ #color?: string;
+ #fallbackColor?: string;
+
@state()
private _icon?: string;
@state()
- private _color?: string;
+ private _style: StyleInfo = {};
+ /**
+ * Color alias or a color code directly.\
+ * If a color has been set via the name property, this property will override it.
+ * */
@property({ type: String })
public set color(value: string) {
- if (!value) return;
- this.#setColorStyle(value);
+ this.#color = value;
+ this.#updateColorStyle();
}
- public get color(): string {
- return this._color ?? '';
- }
-
- #setColorStyle(value: string) {
- const alias = value.replace('color-', '');
- const variable = extractUmbColorVariable(alias);
- this._color = alias ? (variable ? `--uui-icon-color: var(${variable})` : `--uui-icon-color: ${alias}`) : undefined;
+ public get color(): string | undefined {
+ return this.#color || this.#fallbackColor;
}
+ /**
+ * The icon name. Can be appended with a color.\
+ * Example **icon-heart color-red**
+ */
@property({ type: String })
public set name(value: string | undefined) {
- const [icon, alias] = value ? value.split(' ') : [];
-
- if (alias) {
- this.#setColorStyle(alias);
- } else {
- this._color = undefined;
- }
-
+ const [icon, color] = value ? value.split(' ') : [];
+ this.#fallbackColor = color;
this._icon = icon;
+ this.#updateColorStyle();
}
public get name(): string | undefined {
return this._icon;
}
+ #updateColorStyle() {
+ const value = this.#color || this.#fallbackColor;
+
+ if (!value) {
+ this._style = { '--uui-icon-color': 'inherit' };
+ return;
+ }
+
+ const color = value.replace('color-', '');
+ const variable = extractUmbColorVariable(color);
+ const styling = variable ? `var(${variable})` : color;
+
+ this._style = { '--uui-icon-color': styling };
+ }
+
override render() {
- return html` `;
+ return html` `;
}
static override styles = [
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/components/input-number-range/input-number-range.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/components/input-number-range/input-number-range.element.ts
index da80a9e452..63a3b4a565 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/core/components/input-number-range/input-number-range.element.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/components/input-number-range/input-number-range.element.ts
@@ -119,7 +119,7 @@ export class UmbInputNumberRangeElement extends UmbFormControlMixin(UmbLitElemen
label=${this.maxLabel}
min=${ifDefined(this.validationRange?.min)}
max=${ifDefined(this.validationRange?.max)}
- placeholder=${this.validationRange?.max === Infinity ? '∞' : this.validationRange?.max ?? ''}
+ placeholder=${this.validationRange?.max === Infinity ? '∞' : (this.validationRange?.max ?? '')}
.value=${this._maxValue}
@input=${this.#onMaxInput}>
`;
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/components/multiple-color-picker-input/multiple-color-picker-input.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/components/multiple-color-picker-input/multiple-color-picker-input.element.ts
index 443e89fc53..11b9325f8b 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/core/components/multiple-color-picker-input/multiple-color-picker-input.element.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/components/multiple-color-picker-input/multiple-color-picker-input.element.ts
@@ -1,14 +1,5 @@
import type { UmbMultipleColorPickerItemInputElement } from './multiple-color-picker-item-input.element.js';
-import {
- css,
- customElement,
- html,
- ifDefined,
- nothing,
- repeat,
- property,
- state,
-} from '@umbraco-cms/backoffice/external/lit';
+import { css, customElement, html, nothing, repeat, property, state } from '@umbraco-cms/backoffice/external/lit';
import { UUIFormControlMixin } from '@umbraco-cms/backoffice/external/uui';
import { UmbChangeEvent } from '@umbraco-cms/backoffice/event';
import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/components/split-panel/split-panel.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/components/split-panel/split-panel.element.ts
index b24ae93638..ad36835d1d 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/core/components/split-panel/split-panel.element.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/components/split-panel/split-panel.element.ts
@@ -8,6 +8,7 @@ import {
query,
state,
} from '@umbraco-cms/backoffice/external/lit';
+import { clamp } from '@umbraco-cms/backoffice/utils';
/**
* Custom element for a split panel with adjustable divider.
@@ -89,13 +90,9 @@ export class UmbSplitPanelElement extends LitElement {
}
}
- #clamp(value: number, min: number, max: number) {
- return Math.min(Math.max(value, min), max);
- }
-
#setPosition(pos: number) {
const { width } = this.mainElement.getBoundingClientRect();
- const localPos = this.#clamp(pos, 0, width);
+ const localPos = clamp(pos, 0, width);
const percentagePos = (localPos / width) * 100;
this.position = percentagePos + '%';
}
@@ -127,7 +124,7 @@ export class UmbSplitPanelElement extends LitElement {
const move = (event: PointerEvent) => {
const { clientX } = event;
const { left, width } = this.mainElement.getBoundingClientRect();
- const localPos = this.#clamp(clientX - left, 0, width);
+ const localPos = clamp(clientX - left, 0, width);
const mappedPos = mapXAxisToSnap(localPos, width);
this.#lockedPanelWidth = this.lock === 'start' ? mappedPos : width - mappedPos;
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/components/table/table.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/components/table/table.element.ts
index cb2b5cbba9..299d8b0405 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/core/components/table/table.element.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/components/table/table.element.ts
@@ -279,7 +279,7 @@ export class UmbTableElement extends LitElement {
const element = document.createElement('umb-ufm-render') as UmbUfmRenderElement;
element.inline = true;
element.markdown = column.labelTemplate;
- element.value = value;
+ element.value = { value };
return element;
}
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/components/table/table.stories.ts b/src/Umbraco.Web.UI.Client/src/packages/core/components/table/table.stories.ts
index 5fcddbc66f..fbadfef55f 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/core/components/table/table.stories.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/components/table/table.stories.ts
@@ -1,8 +1,9 @@
+import type { UmbTableElement, UmbTableColumn, UmbTableItem } from './table.element.js';
import type { Meta, StoryObj } from '@storybook/web-components';
-import './table.element.js';
-import type { UmbTableElement, UmbTableColumn, UmbTableConfig, UmbTableItem } from './table.element.js';
import { UmbId } from '@umbraco-cms/backoffice/id';
+import './table.element.js';
+
const meta: Meta = {
title: 'Components/Table',
component: 'umb-table',
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/content-type/components/property-type-based-property/property-type-based-property.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/content-type/components/property-type-based-property/property-type-based-property.element.ts
index 7093fe2200..d0dafc2fdc 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/core/content-type/components/property-type-based-property/property-type-based-property.element.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/content-type/components/property-type-based-property/property-type-based-property.element.ts
@@ -1,19 +1,17 @@
import type { UmbPropertyEditorConfig } from '../../../property-editor/index.js';
import type { UmbPropertyTypeModel } from '../../types.js';
+import { css, customElement, html, ifDefined, property, state } from '@umbraco-cms/backoffice/external/lit';
import { UmbContentPropertyContext } from '@umbraco-cms/backoffice/content';
-import type { UmbDataTypeDetailModel } from '@umbraco-cms/backoffice/data-type';
import { UmbDataTypeDetailRepository } from '@umbraco-cms/backoffice/data-type';
-import { UmbTextStyles } from '@umbraco-cms/backoffice/style';
-import { css, html, ifDefined, customElement, property, state } from '@umbraco-cms/backoffice/external/lit';
-import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';
-import type { UmbObserverController } from '@umbraco-cms/backoffice/observable-api';
import { umbExtensionsRegistry } from '@umbraco-cms/backoffice/extension-registry';
+import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';
+import { UmbTextStyles } from '@umbraco-cms/backoffice/style';
+import type { UmbDataTypeDetailModel } from '@umbraco-cms/backoffice/data-type';
+import type { UmbObserverController } from '@umbraco-cms/backoffice/observable-api';
+
@customElement('umb-property-type-based-property')
export class UmbPropertyTypeBasedPropertyElement extends UmbLitElement {
@property({ type: Object, attribute: false })
- public get property(): UmbPropertyTypeModel | undefined {
- return this._property;
- }
public set property(value: UmbPropertyTypeModel | undefined) {
const oldProperty = this._property;
this._property = value;
@@ -21,6 +19,9 @@ export class UmbPropertyTypeBasedPropertyElement extends UmbLitElement {
this._observeDataType(this._property?.dataType.unique);
}
}
+ public get property(): UmbPropertyTypeModel | undefined {
+ return this._property;
+ }
private _property?: UmbPropertyTypeModel;
@property({ type: String, attribute: 'data-path' })
@@ -73,16 +74,19 @@ export class UmbPropertyTypeBasedPropertyElement extends UmbLitElement {
}
override render() {
- return this._propertyEditorUiAlias && this._property?.alias
- ? html` `
- : '';
+ if (!this._propertyEditorUiAlias || !this._property?.alias) return;
+ return html`
+
+
+ `;
}
static override styles = [
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/content-type/modals/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/content-type/modals/index.ts
index 857ded731a..4cdc48a7a1 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/core/content-type/modals/index.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/content-type/modals/index.ts
@@ -1,3 +1 @@
export * from './composition-picker/composition-picker-modal.token.js';
-export * from './property-type-settings/property-type-settings-modal.token.js';
-export * from './property-type-settings/property-type-settings-modal.context-token.js';
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/content-type/modals/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/content-type/modals/manifests.ts
index 7b6a72b557..516bbb553f 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/core/content-type/modals/manifests.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/content-type/modals/manifests.ts
@@ -7,12 +7,6 @@ const modals: Array = [
name: 'ContentType Composition Picker Modal',
element: () => import('./composition-picker/composition-picker-modal.element.js'),
},
- {
- type: 'modal',
- alias: 'Umb.Modal.PropertyTypeSettings',
- name: 'Property Type Settings Modal',
- element: () => import('./property-type-settings/property-type-settings-modal.element.js'),
- },
];
export const manifests = modals;
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/content-type/modals/property-type-settings/property-type-settings-modal.context.ts b/src/Umbraco.Web.UI.Client/src/packages/core/content-type/modals/property-type-settings/property-type-settings-modal.context.ts
deleted file mode 100644
index 708329c498..0000000000
--- a/src/Umbraco.Web.UI.Client/src/packages/core/content-type/modals/property-type-settings/property-type-settings-modal.context.ts
+++ /dev/null
@@ -1,47 +0,0 @@
-import { UMB_PROPERTY_TYPE_WORKSPACE_CONTEXT } from './property-type-settings-modal.context-token.js';
-import type {
- UmbPropertyTypeSettingsModalData,
- UmbPropertyTypeSettingsModalValue,
-} from './property-type-settings-modal.token.js';
-import type { UmbWorkspaceContext } from '@umbraco-cms/backoffice/workspace';
-import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
-import { UmbContextBase } from '@umbraco-cms/backoffice/class-api';
-import { UMB_MODAL_CONTEXT, type UmbModalContext } from '@umbraco-cms/backoffice/modal';
-
-export const UMB_PROPERTY_TYPE_WORKSPACE_ALIAS = 'Umb.Workspace.PropertyType';
-
-/**
- * This is a very simplified workspace context, just to serve one for the imitated property type workspace. (As its not a real workspace, but this does as well provide the ability for extension-conditions to match with this workspace, as entity type and alias is available.) [NL]
- */
-export class UmbPropertyTypeWorkspaceContext
- extends UmbContextBase
- implements UmbWorkspaceContext
-{
- #modal?: UmbModalContext;
-
- constructor(host: UmbControllerHost) {
- super(host, UMB_PROPERTY_TYPE_WORKSPACE_CONTEXT);
-
- this.consumeContext(UMB_MODAL_CONTEXT, (context) => {
- this.#modal = context as UmbModalContext;
- });
- }
-
- get workspaceAlias() {
- return UMB_PROPERTY_TYPE_WORKSPACE_ALIAS;
- }
-
- getUnique() {
- return this.#modal?.getValue()?.alias ?? '';
- }
-
- getEntityType() {
- return 'property-type';
- }
-
- getLabel() {
- return this.#modal?.getValue()?.name ?? '';
- }
-}
-
-export default UmbPropertyTypeWorkspaceContext;
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/content-type/modals/property-type-settings/property-type-settings-modal.token.ts b/src/Umbraco.Web.UI.Client/src/packages/core/content-type/modals/property-type-settings/property-type-settings-modal.token.ts
deleted file mode 100644
index 63fe6fe95c..0000000000
--- a/src/Umbraco.Web.UI.Client/src/packages/core/content-type/modals/property-type-settings/property-type-settings-modal.token.ts
+++ /dev/null
@@ -1,22 +0,0 @@
-import { UmbModalToken } from '../../../modal/token/modal-token.js';
-import type { UmbPropertyTypeModel, UmbPropertyTypeScaffoldModel } from '@umbraco-cms/backoffice/content-type';
-
-export type UmbPropertyTypeSettingsModalData = {
- contentTypeId: string;
-};
-export type UmbPropertyTypeSettingsModalValue = UmbPropertyTypeModel | UmbPropertyTypeScaffoldModel;
-
-export const UMB_PROPERTY_TYPE_SETTINGS_MODAL = new UmbModalToken<
- UmbPropertyTypeSettingsModalData,
- UmbPropertyTypeSettingsModalValue
->('Umb.Modal.PropertyTypeSettings', {
- modal: {
- type: 'sidebar',
- size: 'small',
- },
- value: {
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
- // @ts-ignore
- validation: {},
- },
-});
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/content-type/structure/content-type-property-structure-helper.class.ts b/src/Umbraco.Web.UI.Client/src/packages/core/content-type/structure/content-type-property-structure-helper.class.ts
index 7253d4f84f..55be7cf04d 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/core/content-type/structure/content-type-property-structure-helper.class.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/content-type/structure/content-type-property-structure-helper.class.ts
@@ -181,23 +181,6 @@ export class UmbContentTypePropertyStructureHelper
x.find((y) => y.unique === this.#ownerContentTypeUnique),
);
+
private readonly _contentTypeContainers = this.#contentTypes.asObservablePart((x) =>
x.flatMap((x) => x.containers ?? []),
);
@@ -449,61 +449,6 @@ export class UmbContentTypeStructureManager<
this.#contentTypes.updateOne(contentTypeUnique, { containers, properties });
}
- createPropertyScaffold(containerId: string | null = null) {
- const property: UmbPropertyTypeScaffoldModel = {
- id: UmbId.new(),
- container: containerId ? { id: containerId } : null,
- alias: '',
- name: '',
- description: '',
- variesByCulture: false,
- variesBySegment: false,
- validation: {
- mandatory: false,
- mandatoryMessage: null,
- regEx: null,
- regExMessage: null,
- },
- appearance: {
- labelOnTop: false,
- },
- sortOrder: 0,
- };
-
- return property;
- }
-
- async createProperty(contentTypeUnique: string | null, containerId: string | null = null, sortOrder?: number) {
- await this.#init;
- contentTypeUnique = contentTypeUnique ?? this.#ownerContentTypeUnique!;
-
- // If we have a container, we need to ensure it exists, and then update the container with the new parent id. [NL]
- if (containerId) {
- const container = await this.ensureContainerOf(containerId, contentTypeUnique);
- if (!container) {
- throw new Error('Container for inserting property could not be found or created');
- }
- // Correct containerId to the local one: [NL]
- containerId = container.id;
- }
-
- const property = this.createPropertyScaffold(containerId);
- property.sortOrder = sortOrder ?? 0;
-
- const properties: Array = [
- ...(this.#contentTypes.getValue().find((x) => x.unique === contentTypeUnique)?.properties ?? []),
- ];
-
- properties.push(property);
-
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
- // @ts-ignore
- // TODO: fix TS partial complaint
- this.#contentTypes.updateOne(contentTypeUnique, { properties });
-
- return property;
- }
-
async insertProperty(contentTypeUnique: string | null, property: UmbPropertyTypeModel) {
await this.#init;
contentTypeUnique = contentTypeUnique ?? this.#ownerContentTypeUnique!;
@@ -518,6 +463,10 @@ export class UmbContentTypeStructureManager<
property = { ...property, container: { id: container.id } };
}
+ if (property.sortOrder === undefined) {
+ property.sortOrder = 0;
+ }
+
const frozenProperties =
this.#contentTypes.getValue().find((x) => x.unique === contentTypeUnique)?.properties ?? [];
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/content-type/workspace/views/design/content-type-design-editor-properties.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/content-type/workspace/views/design/content-type-design-editor-properties.element.ts
index 6a6b6f6697..118809a523 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/core/content-type/workspace/views/design/content-type-design-editor-properties.element.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/content-type/workspace/views/design/content-type-design-editor-properties.element.ts
@@ -13,15 +13,16 @@ import {
} from '@umbraco-cms/backoffice/external/lit';
import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';
import { UmbTextStyles } from '@umbraco-cms/backoffice/style';
-import {
- UmbContentTypePropertyStructureHelper,
- UMB_PROPERTY_TYPE_SETTINGS_MODAL,
-} from '@umbraco-cms/backoffice/content-type';
+import { UmbContentTypePropertyStructureHelper } from '@umbraco-cms/backoffice/content-type';
import type { UmbContentTypeModel, UmbPropertyTypeModel } from '@umbraco-cms/backoffice/content-type';
import { type UmbSorterConfig, UmbSorterController } from '@umbraco-cms/backoffice/sorter';
-import { type UmbModalRouteBuilder, UmbModalRouteRegistrationController } from '@umbraco-cms/backoffice/router';
+import { UmbModalRouteRegistrationController } from '@umbraco-cms/backoffice/router';
import './content-type-design-editor-property.element.js';
+import {
+ UMB_CREATE_PROPERTY_TYPE_WORKSPACE_PATH_PATTERN,
+ UMB_PROPERTY_TYPE_WORKSPACE_MODAL,
+} from '@umbraco-cms/backoffice/property-type';
const SORTER_CONFIG: UmbSorterConfig = {
getUniqueOfElement: (element) => {
@@ -97,15 +98,16 @@ export class UmbContentTypeDesignEditorPropertiesElement extends UmbLitElement {
return this._containerId;
}
public set containerId(value: string | null | undefined) {
- const oldValue = this._containerId;
- if (value === oldValue) return;
+ if (value === this._containerId) return;
this._containerId = value;
+ this.createPropertyTypeWorkspaceRoutes();
this.#propertyStructureHelper.setContainerId(value);
- this.#addPropertyModal.setUniquePathValue('container-id', value === null ? 'root' : value);
- this.requestUpdate('containerId', oldValue);
+ this.#addPropertyModal?.setUniquePathValue('container-id', value === null ? 'root' : value);
+ this.#editPropertyModal?.setUniquePathValue('container-id', value === null ? 'root' : value);
}
- #addPropertyModal: UmbModalRouteRegistrationController;
+ #addPropertyModal?: UmbModalRouteRegistrationController;
+ #editPropertyModal?: UmbModalRouteRegistrationController;
#propertyStructureHelper = new UmbContentTypePropertyStructureHelper(this);
@@ -116,10 +118,13 @@ export class UmbContentTypeDesignEditorPropertiesElement extends UmbLitElement {
private _propertyStructure: Array = [];
@state()
- private _ownerContentType?: UmbContentTypeModel;
+ private _ownerContentTypeUnique?: string;
@state()
- private _modalRouteBuilderNewProperty?: UmbModalRouteBuilder;
+ private _newPropertyPath?: string;
+
+ @state()
+ private _editPropertyTypePath?: string;
@state()
private _sortModeActive?: boolean;
@@ -147,51 +152,81 @@ export class UmbContentTypeDesignEditorPropertiesElement extends UmbLitElement {
this.consumeContext(UMB_CONTENT_TYPE_WORKSPACE_CONTEXT, async (workspaceContext) => {
this.#propertyStructureHelper.setStructureManager(workspaceContext.structure);
- this.observe(
- workspaceContext.structure.ownerContentType,
- (contentType) => {
- this._ownerContentType = contentType;
- },
- 'observeOwnerContentType',
- );
+ this._ownerContentTypeUnique = workspaceContext.structure.getOwnerContentTypeUnique();
+ this.createPropertyTypeWorkspaceRoutes();
});
this.observe(this.#propertyStructureHelper.propertyStructure, (propertyStructure) => {
this._propertyStructure = propertyStructure;
this.#sorter.setModel(this._propertyStructure);
});
+ }
+
+ createPropertyTypeWorkspaceRoutes() {
+ if (!this._ownerContentTypeUnique || this._containerId === undefined) return;
// Note: Route for adding a new property
- this.#addPropertyModal = new UmbModalRouteRegistrationController(this, UMB_PROPERTY_TYPE_SETTINGS_MODAL)
+ this.#addPropertyModal?.destroy();
+ this.#addPropertyModal = new UmbModalRouteRegistrationController(
+ this,
+ UMB_PROPERTY_TYPE_WORKSPACE_MODAL,
+ 'addPropertyModal',
+ )
.addUniquePaths(['container-id'])
.addAdditionalPath('add-property/:sortOrder')
.onSetup(async (params) => {
// TODO: Make a onInit promise, that can be awaited here.
- if (!this._ownerContentType || this._containerId === undefined) return false;
- const propertyData = await this.#propertyStructureHelper.createPropertyScaffold(this._containerId);
- if (propertyData === undefined) return false;
+ if (!this._ownerContentTypeUnique || this._containerId === undefined) return false;
+
+ const preset: Partial = {};
if (params.sortOrder !== undefined) {
- let sortOrderInt = parseInt(params.sortOrder, 10);
+ let sortOrderInt = parseInt(params.sortOrder);
if (sortOrderInt === -1) {
// Find the highest sortOrder and add 1 to it:
- sortOrderInt = Math.max(...this._propertyStructure.map((x) => x.sortOrder), -1);
+ sortOrderInt = Math.max(...this._propertyStructure.map((x) => x.sortOrder), -1) + 1;
}
- propertyData.sortOrder = sortOrderInt + 1;
+ preset.sortOrder = sortOrderInt;
}
- return { data: { contentTypeId: this._ownerContentType.unique }, value: propertyData };
- })
- .onSubmit(async (value) => {
- if (!this._ownerContentType) return false;
- // TODO: The model requires a data-type to be set, we cheat currently. But this should be re-though when we implement validation(As we most likely will have to com up with partial models for the runtime model.) [NL]
- this.#propertyStructureHelper.insertProperty(value as UmbPropertyTypeModel);
- return true;
+ return { data: { contentTypeUnique: this._ownerContentTypeUnique, preset: undefined } };
})
.observeRouteBuilder((routeBuilder) => {
- this._modalRouteBuilderNewProperty = routeBuilder;
+ this._newPropertyPath =
+ routeBuilder({ sortOrder: '-1' }) +
+ UMB_CREATE_PROPERTY_TYPE_WORKSPACE_PATH_PATTERN.generateLocal({
+ containerUnique: this._containerId!,
+ });
});
+ if (this._containerId !== undefined) {
+ this.#addPropertyModal?.setUniquePathValue(
+ 'container-id',
+ this._containerId === null ? 'root' : this._containerId,
+ );
+ }
+
+ this.#editPropertyModal?.destroy();
+ this.#editPropertyModal = new UmbModalRouteRegistrationController(
+ this,
+ UMB_PROPERTY_TYPE_WORKSPACE_MODAL,
+ 'editPropertyModal',
+ )
+ .addUniquePaths(['container-id'])
+ .addAdditionalPath('edit-property')
+ .onSetup(async () => {
+ if (!this._ownerContentTypeUnique || this._containerId === undefined) return false;
+ return { data: { contentTypeUnique: this._ownerContentTypeUnique, preset: undefined } };
+ })
+ .observeRouteBuilder((routeBuilder) => {
+ this._editPropertyTypePath = routeBuilder(null);
+ });
+ if (this._containerId !== undefined) {
+ this.#editPropertyModal?.setUniquePathValue(
+ 'container-id',
+ this._containerId === null ? 'root' : this._containerId,
+ );
+ }
}
override render() {
- return this._ownerContentType
+ return this._ownerContentTypeUnique
? html`
${repeat(
@@ -202,6 +237,7 @@ export class UmbContentTypeDesignEditorPropertiesElement extends UmbLitElement {
@@ -216,7 +252,7 @@ export class UmbContentTypeDesignEditorPropertiesElement extends UmbLitElement {
() => html`
`,
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/content-type/workspace/views/design/content-type-design-editor-property.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/content-type/workspace/views/design/content-type-design-editor-property.element.ts
index f080a295e8..70d8df546c 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/core/content-type/workspace/views/design/content-type-design-editor-property.element.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/content-type/workspace/views/design/content-type-design-editor-property.element.ts
@@ -2,19 +2,18 @@ import { UmbPropertyTypeContext } from './content-type-design-editor-property.co
import { UmbDataTypeDetailRepository } from '@umbraco-cms/backoffice/data-type';
import type { UUIInputElement } from '@umbraco-cms/backoffice/external/uui';
import { UUIInputEvent } from '@umbraco-cms/backoffice/external/uui';
-import { css, html, customElement, property, state, ifDefined, nothing } from '@umbraco-cms/backoffice/external/lit';
+import { css, html, customElement, property, state, nothing } from '@umbraco-cms/backoffice/external/lit';
import { umbConfirmModal } from '@umbraco-cms/backoffice/modal';
-import { UmbModalRouteRegistrationController } from '@umbraco-cms/backoffice/router';
import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';
import { generateAlias } from '@umbraco-cms/backoffice/utils';
import { UmbTextStyles } from '@umbraco-cms/backoffice/style';
-import {
- UMB_PROPERTY_TYPE_SETTINGS_MODAL,
- type UmbContentTypeModel,
- type UmbContentTypePropertyStructureHelper,
- type UmbPropertyTypeModel,
- type UmbPropertyTypeScaffoldModel,
+import type {
+ UmbContentTypeModel,
+ UmbContentTypePropertyStructureHelper,
+ UmbPropertyTypeModel,
+ UmbPropertyTypeScaffoldModel,
} from '@umbraco-cms/backoffice/content-type';
+import { UMB_EDIT_PROPERTY_TYPE_WORKSPACE_PATH_PATTERN } from '@umbraco-cms/backoffice/property-type';
/**
* @element umb-content-type-design-editor-property
@@ -25,7 +24,6 @@ import {
export class UmbContentTypeDesignEditorPropertyElement extends UmbLitElement {
//
#dataTypeDetailRepository = new UmbDataTypeDetailRepository(this);
- #settingsModal;
#dataTypeUnique?: string;
#context = new UmbPropertyTypeContext(this);
@@ -57,7 +55,6 @@ export class UmbContentTypeDesignEditorPropertyElement extends UmbLitElement {
this.#context.setAlias(value?.alias);
this.#context.setLabel(value?.name);
this.#checkInherited();
- this.#settingsModal.setUniquePathValue('propertyId', value?.id);
this.#setDataType(this._property?.dataType?.unique);
this.requestUpdate('property', oldValue);
}
@@ -78,8 +75,8 @@ export class UmbContentTypeDesignEditorPropertyElement extends UmbLitElement {
@state()
public _inheritedContentTypeName?: string;
- @state()
- protected _modalRoute?: string;
+ @property({ type: String, reflect: false })
+ protected editPropertyTypePath?: string;
@state()
private _dataTypeName?: string;
@@ -87,27 +84,6 @@ export class UmbContentTypeDesignEditorPropertyElement extends UmbLitElement {
@state()
private _aliasLocked = true;
- constructor() {
- super();
-
- // TODO: consider if this can be registered more globally/contextually. [NL]
- this.#settingsModal = new UmbModalRouteRegistrationController(this, UMB_PROPERTY_TYPE_SETTINGS_MODAL)
- .addUniquePaths(['propertyId'])
- .onSetup(() => {
- const id = this._inheritedContentTypeId;
- if (id === undefined) return false;
- const propertyData = this.property;
- if (propertyData === undefined) return false;
- return { data: { contentTypeId: id }, value: propertyData };
- })
- .onSubmit((result) => {
- this.#partialUpdate(result as UmbPropertyTypeModel);
- })
- .observeRouteBuilder((routeBuilder) => {
- this._modalRoute = routeBuilder(null);
- });
- }
-
async #checkInherited() {
if (this._propertyStructureHelper && this._property) {
// We can first match with something if we have a name [NL]
@@ -231,7 +207,7 @@ export class UmbContentTypeDesignEditorPropertyElement extends UmbLitElement {
}
renderEditableProperty() {
- if (!this.property) return;
+ if (!this.property || !this.editPropertyTypePath) return;
if (this.sortModeActive) {
return this.renderSortableProperty();
@@ -263,7 +239,8 @@ export class UmbContentTypeDesignEditorPropertyElement extends UmbLitElement {
id="editor"
look="secondary"
label=${this.localize.term('contentTypeEditor_editorSettings')}
- href=${ifDefined(this._modalRoute)}>
+ href=${this.editPropertyTypePath +
+ UMB_EDIT_PROPERTY_TYPE_WORKSPACE_PATH_PATTERN.generateLocal({ unique: this.property.id })}>
${this.renderPropertyTags()}
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/index.ts
index 662c027fcb..4c72bcced7 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/index.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/index.ts
@@ -1,2 +1,3 @@
export type * from './content-workspace-context.interface.js';
export * from './content-workspace.context-token.js';
+export * from './views/edit/index.js';
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/manifests.ts
index d30be86fd2..81565ef37a 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/manifests.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/manifests.ts
@@ -1,3 +1,3 @@
-import { contentEditorManifest } from './views/edit/manifest.js';
+import { manifests as contentEditorManifests } from './views/edit/manifests.js';
-export const manifests = [contentEditorManifest];
+export const manifests = [...contentEditorManifests];
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/views/edit/conditions/has-properties/constants.ts b/src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/views/edit/conditions/has-properties/constants.ts
new file mode 100644
index 0000000000..a37e6add77
--- /dev/null
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/views/edit/conditions/has-properties/constants.ts
@@ -0,0 +1 @@
+export const UMB_CONTENT_HAS_PROPERTIES_WORKSPACE_CONDITION = 'Umb.Condition.Workspace.ContentHasProperties';
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/views/edit/conditions/has-properties/content-has-properties.condition.manifest.ts b/src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/views/edit/conditions/has-properties/content-has-properties.condition.manifest.ts
new file mode 100644
index 0000000000..654bbb853b
--- /dev/null
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/views/edit/conditions/has-properties/content-has-properties.condition.manifest.ts
@@ -0,0 +1,8 @@
+import type { ManifestCondition } from '@umbraco-cms/backoffice/extension-api';
+
+export const manifest: ManifestCondition = {
+ type: 'condition',
+ name: 'Content has properties Workspace Condition',
+ alias: 'Umb.Condition.Workspace.ContentHasProperties',
+ api: () => import('./content-has-properties.condition.js'),
+};
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/views/edit/conditions/has-properties/content-has-properties.condition.ts b/src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/views/edit/conditions/has-properties/content-has-properties.condition.ts
new file mode 100644
index 0000000000..34d6ebe6aa
--- /dev/null
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/views/edit/conditions/has-properties/content-has-properties.condition.ts
@@ -0,0 +1,30 @@
+import { UMB_CONTENT_WORKSPACE_CONTEXT } from '../../../../content-workspace.context-token.js';
+import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
+import type {
+ UmbConditionConfigBase,
+ UmbConditionControllerArguments,
+ UmbExtensionCondition,
+} from '@umbraco-cms/backoffice/extension-api';
+import { UmbConditionBase } from '@umbraco-cms/backoffice/extension-registry';
+
+export class UmbContentHasPropertiesWorkspaceCondition
+ extends UmbConditionBase
+ implements UmbExtensionCondition
+{
+ constructor(host: UmbControllerHost, args: UmbConditionControllerArguments) {
+ super(host, args);
+
+ this.consumeContext(UMB_CONTENT_WORKSPACE_CONTEXT, (context) => {
+ this.observe(
+ context.structure.contentTypes,
+ (contentTypes) => {
+ const hasProperties = contentTypes.some((contentType) => contentType.properties.length > 0);
+ this.permitted = hasProperties;
+ },
+ 'contentTypesObserver',
+ );
+ });
+ }
+}
+
+export { UmbContentHasPropertiesWorkspaceCondition as api };
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/views/edit/conditions/has-properties/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/views/edit/conditions/has-properties/index.ts
new file mode 100644
index 0000000000..4f07201dcf
--- /dev/null
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/views/edit/conditions/has-properties/index.ts
@@ -0,0 +1 @@
+export * from './constants.js';
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/views/edit/conditions/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/views/edit/conditions/manifests.ts
new file mode 100644
index 0000000000..d4221afab0
--- /dev/null
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/views/edit/conditions/manifests.ts
@@ -0,0 +1,3 @@
+import { manifest as hasPropertiesManifest } from './has-properties/content-has-properties.condition.manifest.js';
+
+export const manifests = [hasPropertiesManifest];
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/views/edit/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/views/edit/index.ts
new file mode 100644
index 0000000000..1637f3a5e7
--- /dev/null
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/views/edit/index.ts
@@ -0,0 +1 @@
+export * from './conditions/has-properties/index.js';
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/views/edit/manifest.ts b/src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/views/edit/manifests.ts
similarity index 67%
rename from src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/views/edit/manifest.ts
rename to src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/views/edit/manifests.ts
index 3cb898bd97..caa2ec28d8 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/views/edit/manifest.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/views/edit/manifests.ts
@@ -1,6 +1,7 @@
+import { manifests as conditionsManifests } from './conditions/manifests.js';
import type { UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry';
-export const contentEditorManifest: UmbBackofficeManifestKind = {
+const contentEditorManifest: UmbBackofficeManifestKind = {
type: 'kind',
alias: 'Umb.Kind.WorkspaceView.ContentEditor',
matchKind: 'contentEditor',
@@ -17,3 +18,5 @@ export const contentEditorManifest: UmbBackofficeManifestKind = {
},
},
};
+
+export const manifests = [contentEditorManifest, ...conditionsManifests];
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/duplicate-to/duplicate-to-repository.interface.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/duplicate-to/duplicate-to-repository.interface.ts
new file mode 100644
index 0000000000..2e1eb33be9
--- /dev/null
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/duplicate-to/duplicate-to-repository.interface.ts
@@ -0,0 +1,7 @@
+import type { UmbRepositoryErrorResponse } from '../../../repository/types.js';
+import type { UmbBulkDuplicateToRequestArgs } from './types.js';
+import type { UmbApi } from '@umbraco-cms/backoffice/extension-api';
+
+export interface UmbBulkDuplicateToRepository extends UmbApi {
+ requestBulkDuplicateTo(args: UmbBulkDuplicateToRequestArgs): Promise;
+}
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/duplicate-to/duplicate-to.action.kind.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/duplicate-to/duplicate-to.action.kind.ts
new file mode 100644
index 0000000000..0a2d16168d
--- /dev/null
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/duplicate-to/duplicate-to.action.kind.ts
@@ -0,0 +1,23 @@
+import { UMB_ENTITY_BULK_ACTION_DEFAULT_KIND_MANIFEST } from '../../default/default.action.kind.js';
+import type { UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry';
+
+export const manifest: UmbBackofficeManifestKind = {
+ type: 'kind',
+ alias: 'Umb.Kind.EntityBulkAction.DuplicateTo',
+ matchKind: 'duplicateTo',
+ matchType: 'entityBulkAction',
+ manifest: {
+ ...UMB_ENTITY_BULK_ACTION_DEFAULT_KIND_MANIFEST.manifest,
+ type: 'entityBulkAction',
+ kind: 'duplicateTo',
+ api: () => import('./duplicate-to.action.js'),
+ weight: 700,
+ forEntityTypes: [],
+ meta: {
+ icon: 'icon-enter',
+ label: '#actions_copyTo',
+ bulkDuplicateRepositoryAlias: '',
+ treeAlias: '',
+ },
+ },
+};
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/duplicate-to/duplicate-to.action.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/duplicate-to/duplicate-to.action.ts
new file mode 100644
index 0000000000..d865a17688
--- /dev/null
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/duplicate-to/duplicate-to.action.ts
@@ -0,0 +1,66 @@
+import type { UmbBulkDuplicateToRepository } from './duplicate-to-repository.interface.js';
+import { createExtensionApiByAlias } from '@umbraco-cms/backoffice/extension-registry';
+import { UmbEntityBulkActionBase } from '@umbraco-cms/backoffice/entity-bulk-action';
+import {
+ UmbRequestReloadChildrenOfEntityEvent,
+ UmbRequestReloadStructureForEntityEvent,
+} from '@umbraco-cms/backoffice/entity-action';
+import { UMB_ACTION_EVENT_CONTEXT } from '@umbraco-cms/backoffice/action';
+import { UMB_ENTITY_CONTEXT } from '@umbraco-cms/backoffice/entity';
+import { UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal';
+import { UMB_TREE_PICKER_MODAL } from '@umbraco-cms/backoffice/tree';
+import type { MetaEntityBulkActionDuplicateToKind } from '@umbraco-cms/backoffice/extension-registry';
+
+export class UmbMediaDuplicateEntityBulkAction extends UmbEntityBulkActionBase {
+ async execute() {
+ if (this.selection?.length === 0) return;
+
+ const modalManager = await this.getContext(UMB_MODAL_MANAGER_CONTEXT);
+
+ const modalContext = modalManager.open(this, UMB_TREE_PICKER_MODAL, {
+ data: {
+ foldersOnly: this.args.meta.foldersOnly,
+ hideTreeRoot: this.args.meta.hideTreeRoot,
+ treeAlias: this.args.meta.treeAlias,
+ },
+ });
+
+ const value = await modalContext.onSubmit().catch(() => undefined);
+ if (!value?.selection?.length) return;
+
+ const destinationUnique = value.selection[0];
+ if (destinationUnique === undefined) throw new Error('Destination Unique is not available');
+
+ const bulkDuplicateRepository = await createExtensionApiByAlias(
+ this,
+ this.args.meta.bulkDuplicateRepositoryAlias,
+ );
+ if (!bulkDuplicateRepository) throw new Error('Bulk Duplicate Repository is not available');
+
+ await bulkDuplicateRepository.requestBulkDuplicateTo({
+ uniques: this.selection,
+ destination: { unique: destinationUnique },
+ });
+
+ const entityContext = await this.getContext(UMB_ENTITY_CONTEXT);
+ if (!entityContext) throw new Error('Entity Context is not available');
+
+ const entityType = entityContext.getEntityType();
+ const unique = entityContext.getUnique();
+
+ if (entityType && unique !== undefined) {
+ const eventContext = await this.getContext(UMB_ACTION_EVENT_CONTEXT);
+ if (!eventContext) throw new Error('Event Context is not available');
+
+ const args = { entityType, unique };
+
+ const reloadChildren = new UmbRequestReloadChildrenOfEntityEvent(args);
+ eventContext.dispatchEvent(reloadChildren);
+
+ const reloadStructure = new UmbRequestReloadStructureForEntityEvent(args);
+ eventContext.dispatchEvent(reloadStructure);
+ }
+ }
+}
+
+export { UmbMediaDuplicateEntityBulkAction as api };
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/duplicate-to/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/duplicate-to/index.ts
new file mode 100644
index 0000000000..bba0b41bb5
--- /dev/null
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/duplicate-to/index.ts
@@ -0,0 +1,2 @@
+export type { UmbBulkDuplicateToRepository } from './duplicate-to-repository.interface.js';
+export type { UmbBulkDuplicateToRequestArgs } from './types.js';
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/duplicate-to/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/duplicate-to/manifests.ts
new file mode 100644
index 0000000000..8f6bf64f0e
--- /dev/null
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/duplicate-to/manifests.ts
@@ -0,0 +1,4 @@
+import { manifest as duplicateToKindManifest } from './duplicate-to.action.kind.js';
+import type { ManifestTypes, UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry';
+
+export const manifests: Array = [duplicateToKindManifest];
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/duplicate-to/types.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/duplicate-to/types.ts
new file mode 100644
index 0000000000..c4434e3f64
--- /dev/null
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/duplicate-to/types.ts
@@ -0,0 +1,6 @@
+export interface UmbBulkDuplicateToRequestArgs {
+ uniques: Array;
+ destination: {
+ unique: string | null;
+ };
+}
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/index.ts
new file mode 100644
index 0000000000..c70f79f940
--- /dev/null
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/index.ts
@@ -0,0 +1,3 @@
+export * from './duplicate-to/index.js';
+export * from './move-to/index.js';
+export * from './trash/index.js';
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/move-to/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/move-to/index.ts
new file mode 100644
index 0000000000..d7dbc13a3b
--- /dev/null
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/move-to/index.ts
@@ -0,0 +1,2 @@
+export type { UmbBulkMoveToRepository } from './move-to-repository.interface.js';
+export type { UmbBulkMoveToRequestArgs } from './types.js';
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/move-to/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/move-to/manifests.ts
new file mode 100644
index 0000000000..701878051e
--- /dev/null
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/move-to/manifests.ts
@@ -0,0 +1,4 @@
+import { manifest as moveToKindManifest } from './move-to.action.kind.js';
+import type { ManifestTypes, UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry';
+
+export const manifests: Array = [moveToKindManifest];
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/move-to/move-to-repository.interface.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/move-to/move-to-repository.interface.ts
new file mode 100644
index 0000000000..3345adb499
--- /dev/null
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/move-to/move-to-repository.interface.ts
@@ -0,0 +1,7 @@
+import type { UmbRepositoryErrorResponse } from '../../../repository/types.js';
+import type { UmbBulkMoveToRequestArgs } from './types.js';
+import type { UmbApi } from '@umbraco-cms/backoffice/extension-api';
+
+export interface UmbBulkMoveToRepository extends UmbApi {
+ requestBulkMoveTo(args: UmbBulkMoveToRequestArgs): Promise;
+}
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/move-to/move-to.action.kind.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/move-to/move-to.action.kind.ts
new file mode 100644
index 0000000000..a26a2d7302
--- /dev/null
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/move-to/move-to.action.kind.ts
@@ -0,0 +1,23 @@
+import { UMB_ENTITY_BULK_ACTION_DEFAULT_KIND_MANIFEST } from '../../default/default.action.kind.js';
+import type { UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry';
+
+export const manifest: UmbBackofficeManifestKind = {
+ type: 'kind',
+ alias: 'Umb.Kind.EntityBulkAction.MoveTo',
+ matchKind: 'moveTo',
+ matchType: 'entityBulkAction',
+ manifest: {
+ ...UMB_ENTITY_BULK_ACTION_DEFAULT_KIND_MANIFEST.manifest,
+ type: 'entityBulkAction',
+ kind: 'moveTo',
+ api: () => import('./move-to.action.js'),
+ weight: 700,
+ forEntityTypes: [],
+ meta: {
+ icon: 'icon-enter',
+ label: '#actions_move',
+ bulkMoveRepositoryAlias: '',
+ treeAlias: '',
+ },
+ },
+};
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/move-to/move-to.action.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/move-to/move-to.action.ts
new file mode 100644
index 0000000000..f248afe4e8
--- /dev/null
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/move-to/move-to.action.ts
@@ -0,0 +1,63 @@
+import type { UmbBulkMoveToRepository } from './move-to-repository.interface.js';
+import { createExtensionApiByAlias } from '@umbraco-cms/backoffice/extension-registry';
+import { UmbEntityBulkActionBase } from '@umbraco-cms/backoffice/entity-bulk-action';
+import {
+ UmbRequestReloadChildrenOfEntityEvent,
+ UmbRequestReloadStructureForEntityEvent,
+} from '@umbraco-cms/backoffice/entity-action';
+import { UMB_ACTION_EVENT_CONTEXT } from '@umbraco-cms/backoffice/action';
+import { UMB_ENTITY_CONTEXT } from '@umbraco-cms/backoffice/entity';
+import { UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal';
+import { UMB_TREE_PICKER_MODAL } from '@umbraco-cms/backoffice/tree';
+import type { MetaEntityBulkActionMoveToKind } from '@umbraco-cms/backoffice/extension-registry';
+
+export class UmbMediaMoveEntityBulkAction extends UmbEntityBulkActionBase {
+ async execute() {
+ if (this.selection?.length === 0) return;
+
+ const modalManager = await this.getContext(UMB_MODAL_MANAGER_CONTEXT);
+
+ const modalContext = modalManager.open(this, UMB_TREE_PICKER_MODAL, {
+ data: {
+ foldersOnly: this.args.meta.foldersOnly,
+ hideTreeRoot: this.args.meta.hideTreeRoot,
+ treeAlias: this.args.meta.treeAlias,
+ },
+ });
+
+ const value = await modalContext.onSubmit().catch(() => undefined);
+ if (!value?.selection?.length) return;
+
+ const destinationUnique = value.selection[0];
+ if (destinationUnique === undefined) throw new Error('Destination Unique is not available');
+
+ const bulkMoveRepository = await createExtensionApiByAlias(
+ this,
+ this.args.meta.bulkMoveRepositoryAlias,
+ );
+ if (!bulkMoveRepository) throw new Error('Bulk Move Repository is not available');
+
+ await bulkMoveRepository.requestBulkMoveTo({ uniques: this.selection, destination: { unique: destinationUnique } });
+
+ const entityContext = await this.getContext(UMB_ENTITY_CONTEXT);
+ if (!entityContext) throw new Error('Entity Context is not available');
+
+ const entityType = entityContext.getEntityType();
+ const unique = entityContext.getUnique();
+
+ if (entityType && unique !== undefined) {
+ const eventContext = await this.getContext(UMB_ACTION_EVENT_CONTEXT);
+ if (!eventContext) throw new Error('Event Context is not available');
+
+ const args = { entityType, unique };
+
+ const reloadChildren = new UmbRequestReloadChildrenOfEntityEvent(args);
+ eventContext.dispatchEvent(reloadChildren);
+
+ const reloadStructure = new UmbRequestReloadStructureForEntityEvent(args);
+ eventContext.dispatchEvent(reloadStructure);
+ }
+ }
+}
+
+export { UmbMediaMoveEntityBulkAction as api };
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/move-to/types.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/move-to/types.ts
new file mode 100644
index 0000000000..75a99ea4ee
--- /dev/null
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/move-to/types.ts
@@ -0,0 +1,6 @@
+export interface UmbBulkMoveToRequestArgs {
+ uniques: Array;
+ destination: {
+ unique: string | null;
+ };
+}
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/trash/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/trash/index.ts
new file mode 100644
index 0000000000..8bed2d2b64
--- /dev/null
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/trash/index.ts
@@ -0,0 +1,2 @@
+export type { UmbBulkTrashRepository } from './trash-repository.interface.js';
+export type { UmbBulkTrashRequestArgs } from './types.js';
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/trash/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/trash/manifests.ts
new file mode 100644
index 0000000000..f48d4f6879
--- /dev/null
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/trash/manifests.ts
@@ -0,0 +1,4 @@
+import { manifest as trashKindManifest } from './trash.action.kind.js';
+import type { ManifestTypes, UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry';
+
+export const manifests: Array = [trashKindManifest];
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/trash/trash-repository.interface.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/trash/trash-repository.interface.ts
new file mode 100644
index 0000000000..195b2f7724
--- /dev/null
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/trash/trash-repository.interface.ts
@@ -0,0 +1,7 @@
+import type { UmbRepositoryErrorResponse } from '../../../repository/types.js';
+import type { UmbBulkTrashRequestArgs } from './types.js';
+import type { UmbApi } from '@umbraco-cms/backoffice/extension-api';
+
+export interface UmbBulkTrashRepository extends UmbApi {
+ requestBulkTrash(args: UmbBulkTrashRequestArgs): Promise;
+}
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/trash/trash.action.kind.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/trash/trash.action.kind.ts
new file mode 100644
index 0000000000..5cec1325a1
--- /dev/null
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/trash/trash.action.kind.ts
@@ -0,0 +1,22 @@
+import { UMB_ENTITY_BULK_ACTION_DEFAULT_KIND_MANIFEST } from '../../default/default.action.kind.js';
+import type { UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry';
+
+export const manifest: UmbBackofficeManifestKind = {
+ type: 'kind',
+ alias: 'Umb.Kind.EntityBulkAction.Trash',
+ matchKind: 'trash',
+ matchType: 'entityBulkAction',
+ manifest: {
+ ...UMB_ENTITY_BULK_ACTION_DEFAULT_KIND_MANIFEST.manifest,
+ type: 'entityBulkAction',
+ kind: 'trash',
+ api: () => import('./trash.action.js'),
+ weight: 700,
+ forEntityTypes: [],
+ meta: {
+ icon: 'icon-trash',
+ label: '#actions_trash',
+ bulkTrashRepositoryAlias: '',
+ },
+ },
+};
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/trash/trash.action.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/trash/trash.action.ts
new file mode 100644
index 0000000000..70cbc7ffd5
--- /dev/null
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/trash/trash.action.ts
@@ -0,0 +1,53 @@
+import type { UmbBulkTrashRepository } from './trash-repository.interface.js';
+import { createExtensionApiByAlias } from '@umbraco-cms/backoffice/extension-registry';
+import { UmbEntityBulkActionBase } from '@umbraco-cms/backoffice/entity-bulk-action';
+import {
+ UmbRequestReloadChildrenOfEntityEvent,
+ UmbRequestReloadStructureForEntityEvent,
+} from '@umbraco-cms/backoffice/entity-action';
+import { UMB_ACTION_EVENT_CONTEXT } from '@umbraco-cms/backoffice/action';
+import { UMB_ENTITY_CONTEXT } from '@umbraco-cms/backoffice/entity';
+import { umbConfirmModal } from '@umbraco-cms/backoffice/modal';
+import type { MetaEntityBulkActionTrashKind } from '@umbraco-cms/backoffice/extension-registry';
+
+export class UmbMediaTrashEntityBulkAction extends UmbEntityBulkActionBase {
+ async execute() {
+ if (this.selection?.length === 0) return;
+
+ await umbConfirmModal(this._host, {
+ headline: `Trash`,
+ content: `Are you sure you want to move ${this.selection.length} ${this.selection.length === 1 ? 'item' : 'items'} to the recycle bin?`,
+ color: 'danger',
+ confirmLabel: 'Trash',
+ });
+
+ const bulkTrashRepository = await createExtensionApiByAlias(
+ this,
+ this.args.meta.bulkTrashRepositoryAlias,
+ );
+ if (!bulkTrashRepository) throw new Error('Bulk Trash Repository is not available');
+
+ await bulkTrashRepository.requestBulkTrash({ uniques: this.selection });
+
+ const entityContext = await this.getContext(UMB_ENTITY_CONTEXT);
+ if (!entityContext) throw new Error('Entity Context is not available');
+
+ const entityType = entityContext.getEntityType();
+ const unique = entityContext.getUnique();
+
+ if (entityType && unique !== undefined) {
+ const eventContext = await this.getContext(UMB_ACTION_EVENT_CONTEXT);
+ if (!eventContext) throw new Error('Event Context is not available');
+
+ const args = { entityType, unique };
+
+ const reloadChildren = new UmbRequestReloadChildrenOfEntityEvent(args);
+ eventContext.dispatchEvent(reloadChildren);
+
+ const reloadStructure = new UmbRequestReloadStructureForEntityEvent(args);
+ eventContext.dispatchEvent(reloadStructure);
+ }
+ }
+}
+
+export { UmbMediaTrashEntityBulkAction as api };
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/trash/types.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/trash/types.ts
new file mode 100644
index 0000000000..d128c53b7a
--- /dev/null
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/common/trash/types.ts
@@ -0,0 +1,3 @@
+export interface UmbBulkTrashRequestArgs {
+ uniques: Array;
+}
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/default/default.action.kind.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/default/default.action.kind.ts
new file mode 100644
index 0000000000..2b13205e93
--- /dev/null
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/default/default.action.kind.ts
@@ -0,0 +1,20 @@
+import type { UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry';
+
+export const UMB_ENTITY_BULK_ACTION_DEFAULT_KIND_MANIFEST: UmbBackofficeManifestKind = {
+ type: 'kind',
+ alias: 'Umb.Kind.EntityBulkAction.Default',
+ matchKind: 'default',
+ matchType: 'entityBulkAction',
+ manifest: {
+ type: 'entityBulkAction',
+ kind: 'default',
+ weight: 1000,
+ element: () => import('../entity-bulk-action.element.js'),
+ meta: {
+ icon: '',
+ label: 'Default Entity Bulk Action',
+ },
+ },
+};
+
+export const manifest = UMB_ENTITY_BULK_ACTION_DEFAULT_KIND_MANIFEST;
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/default/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/default/manifests.ts
new file mode 100644
index 0000000000..3cb64a6f47
--- /dev/null
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/default/manifests.ts
@@ -0,0 +1,4 @@
+import { manifest as defaultKindManifest } from './default.action.kind.js';
+import type { ManifestTypes, UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry';
+
+export const manifests: Array = [defaultKindManifest];
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/entity-bulk-action-element.interface.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/entity-bulk-action-element.interface.ts
new file mode 100644
index 0000000000..6cc4b315a9
--- /dev/null
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/entity-bulk-action-element.interface.ts
@@ -0,0 +1,3 @@
+import type { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api';
+
+export interface UmbEntityBulkActionElement extends UmbControllerHostElement {}
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/entity-bulk-action.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/entity-bulk-action.element.ts
index 20baaa6da0..0478595f71 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/entity-bulk-action.element.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/entity-bulk-action.element.ts
@@ -1,16 +1,25 @@
-import type { UmbEntityBulkActionBase } from './entity-bulk-action-base.js';
+import type { UmbEntityBulkAction } from './entity-bulk-action.interface.js';
+import type { UmbEntityBulkActionElement } from './entity-bulk-action-element.interface.js';
+import { html, customElement, property, when } from '@umbraco-cms/backoffice/external/lit';
import { UmbActionExecutedEvent } from '@umbraco-cms/backoffice/event';
-import { html, ifDefined, customElement, property } from '@umbraco-cms/backoffice/external/lit';
-import type { ManifestEntityBulkAction, MetaEntityBulkAction } from '@umbraco-cms/backoffice/extension-registry';
import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';
+import type {
+ ManifestEntityBulkAction,
+ MetaEntityBulkActionDefaultKind,
+} from '@umbraco-cms/backoffice/extension-registry';
-@customElement('umb-entity-bulk-action')
-export class UmbEntityBulkActionElement<
- MetaType extends MetaEntityBulkAction = MetaEntityBulkAction,
- ApiType extends UmbEntityBulkActionBase = UmbEntityBulkActionBase,
-> extends UmbLitElement {
+const elementName = 'umb-entity-bulk-action';
+
+@customElement(elementName)
+export class UmbEntityBulkActionDefaultElement<
+ MetaType extends MetaEntityBulkActionDefaultKind = MetaEntityBulkActionDefaultKind,
+ ApiType extends UmbEntityBulkAction = UmbEntityBulkAction,
+ >
+ extends UmbLitElement
+ implements UmbEntityBulkActionElement
+{
@property({ attribute: false })
- manifest?: ManifestEntityBulkAction;
+ manifest?: ManifestEntityBulkAction;
api?: ApiType;
@@ -22,16 +31,19 @@ export class UmbEntityBulkActionElement<
}
override render() {
- return html` `;
+ return html`
+
+ ${when(this.manifest?.meta.icon, () => html` `)}
+ ${this.localize.string(this.manifest?.meta.label ?? '')}
+
+ `;
}
}
+export default UmbEntityBulkActionDefaultElement;
+
declare global {
interface HTMLElementTagNameMap {
- 'umb-entity-bulk-action': UmbEntityBulkActionElement;
+ [elementName]: UmbEntityBulkActionDefaultElement;
}
}
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/index.ts
index 24e16cf0cb..bf14ffa917 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/index.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/index.ts
@@ -1,4 +1,8 @@
export * from './types.js';
+export * from './common/index.js';
export * from './entity-bulk-action-base.js';
export * from './entity-bulk-action.element.js';
export * from './entity-bulk-action.interface.js';
+export type * from './entity-bulk-action-element.interface.js';
+
+export { UMB_ENTITY_BULK_ACTION_DEFAULT_KIND_MANIFEST } from './default/default.action.kind.js';
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/manifests.ts
new file mode 100644
index 0000000000..306185ef77
--- /dev/null
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-bulk-action/manifests.ts
@@ -0,0 +1,12 @@
+import { manifests as defaultEntityBulkActionManifests } from './default/manifests.js';
+import { manifests as duplicateEntityBulkActionManifests } from './common/duplicate-to/manifests.js';
+import { manifests as moveToEntityBulkActionManifests } from './common/move-to/manifests.js';
+import { manifests as trashEntityBulkActionManifests } from './common/trash/manifests.js';
+import type { ManifestTypes, UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry';
+
+export const manifests: Array = [
+ ...defaultEntityBulkActionManifests,
+ ...duplicateEntityBulkActionManifests,
+ ...moveToEntityBulkActionManifests,
+ ...trashEntityBulkActionManifests,
+];
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/components/extension-slot/extension-slot.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/components/extension-slot/extension-slot.element.ts
index b5e64b5d8b..ab38f6b6b9 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/components/extension-slot/extension-slot.element.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/components/extension-slot/extension-slot.element.ts
@@ -1,11 +1,11 @@
import { umbExtensionsRegistry } from '../../registry.js';
-import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';
import type { TemplateResult } from '@umbraco-cms/backoffice/external/lit';
import { css, repeat, customElement, property, state, html } from '@umbraco-cms/backoffice/external/lit';
import {
type UmbExtensionElementInitializer,
UmbExtensionsElementInitializer,
} from '@umbraco-cms/backoffice/extension-api';
+import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';
/**
* @element umb-extension-slot
@@ -24,7 +24,7 @@ export class UmbExtensionSlotElement extends UmbLitElement {
#extensionsController?: UmbExtensionsElementInitializer;
@state()
- private _permitted: Array = [];
+ private _permitted?: Array;
/**
* The type or types of extensions to render.
@@ -129,13 +129,15 @@ export class UmbExtensionSlotElement extends UmbLitElement {
}
override render() {
- return this._permitted.length > 0
- ? repeat(
- this._permitted,
- (ext) => ext.alias,
- (ext, i) => (this.renderMethod ? this.renderMethod(ext, i) : ext.component),
- )
- : html` `;
+ return this._permitted
+ ? this._permitted.length > 0
+ ? repeat(
+ this._permitted,
+ (ext) => ext.alias,
+ (ext, i) => (this.renderMethod ? this.renderMethod(ext, i) : ext.component),
+ )
+ : html` `
+ : '';
}
static override styles = css`
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/components/extension-with-api-slot/extension-with-api-slot.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/components/extension-with-api-slot/extension-with-api-slot.element.ts
index d7d5fc09ab..84738a56d2 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/components/extension-with-api-slot/extension-with-api-slot.element.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/components/extension-with-api-slot/extension-with-api-slot.element.ts
@@ -1,5 +1,4 @@
import { umbExtensionsRegistry } from '../../registry.js';
-import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';
import type { TemplateResult } from '@umbraco-cms/backoffice/external/lit';
import { css, repeat, customElement, property, state, html } from '@umbraco-cms/backoffice/external/lit';
import {
@@ -8,6 +7,7 @@ import {
type UmbApiConstructorArgumentsMethodType,
type ApiLoaderProperty,
} from '@umbraco-cms/backoffice/extension-api';
+import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';
/**
* @element umb-extension-with-api-slot
@@ -26,7 +26,7 @@ export class UmbExtensionWithApiSlotElement extends UmbLitElement {
#extensionsController?: UmbExtensionsElementAndApiInitializer;
@state()
- private _permitted: Array = [];
+ private _permitted?: Array;
/**
* The type or types of extensions to render.
@@ -178,13 +178,15 @@ export class UmbExtensionWithApiSlotElement extends UmbLitElement {
}
override render() {
- return this._permitted.length > 0
- ? repeat(
- this._permitted,
- (ext) => ext.alias,
- (ext, i) => (this.renderMethod ? this.renderMethod(ext, i) : ext.component),
- )
- : html` `;
+ return this._permitted
+ ? this._permitted.length > 0
+ ? repeat(
+ this._permitted,
+ (ext) => ext.alias,
+ (ext, i) => (this.renderMethod ? this.renderMethod(ext, i) : ext.component),
+ )
+ : html` `
+ : '';
}
static override styles = css`
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/interfaces/block-editor-custom-view-element.interface.ts b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/interfaces/block-editor-custom-view-element.interface.ts
new file mode 100644
index 0000000000..d9b7a73de0
--- /dev/null
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/interfaces/block-editor-custom-view-element.interface.ts
@@ -0,0 +1,55 @@
+import type { ManifestBlockEditorCustomView } from '../index.js';
+import type { UUIModalSidebarSize } from '@umbraco-cms/backoffice/external/uui';
+// Shared with the Property Editor
+export interface UmbBlockTypeBaseModel {
+ contentElementTypeKey: string;
+ settingsElementTypeKey?: string;
+ label?: string;
+ thumbnail?: string;
+ iconColor?: string;
+ backgroundColor?: string;
+ editorSize?: UUIModalSidebarSize;
+ forceHideContentEditorInOverlay: boolean;
+}
+
+// Shared with the Property Editor
+export interface UmbBlockLayoutBaseModel {
+ contentUdi: string;
+ settingsUdi?: string | null;
+}
+
+// Shared with the Property Editor
+export interface UmbBlockDataType {
+ udi: string;
+ contentTypeKey: string;
+ [key: string]: unknown;
+}
+
+export interface UmbBlockEditorCustomViewConfiguration {
+ editContentPath?: string;
+ editSettingsPath?: string;
+ showContentEdit: boolean;
+ showSettingsEdit: boolean;
+}
+
+export interface UmbBlockEditorCustomViewProperties<
+ LayoutType extends UmbBlockLayoutBaseModel = UmbBlockLayoutBaseModel,
+ BlockType extends UmbBlockTypeBaseModel = UmbBlockTypeBaseModel,
+> {
+ manifest?: ManifestBlockEditorCustomView;
+ config?: Partial;
+ blockType?: BlockType;
+ contentUdi?: string;
+ label?: string;
+ icon?: string;
+ index?: number;
+ layout?: LayoutType;
+ content?: UmbBlockDataType;
+ settings?: UmbBlockDataType;
+}
+
+export interface UmbBlockEditorCustomViewElement<
+ LayoutType extends UmbBlockLayoutBaseModel = UmbBlockLayoutBaseModel,
+ BlockType extends UmbBlockTypeBaseModel = UmbBlockTypeBaseModel,
+> extends UmbBlockEditorCustomViewProperties,
+ HTMLElement {}
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/interfaces/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/interfaces/index.ts
index 1721b7dfec..7585b5001b 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/interfaces/index.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/interfaces/index.ts
@@ -1,3 +1,4 @@
+export * from './block-editor-custom-view-element.interface.js';
export * from './dashboard-element.interface.js';
export * from './external-login-provider-element.interface.js';
export * from './menu-item-element.interface.js';
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/block-editor-custom-view.model.ts b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/block-editor-custom-view.model.ts
index 002d6f0ecf..55a8208789 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/block-editor-custom-view.model.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/block-editor-custom-view.model.ts
@@ -1,6 +1,20 @@
-import type { UmbPropertyEditorUiElement } from '../interfaces/index.js';
+import type { UmbBlockEditorCustomViewElement } from '../interfaces/index.js';
import type { ManifestElement } from '@umbraco-cms/backoffice/extension-api';
-export interface ManifestBlockEditorCustomView extends ManifestElement {
+export interface ManifestBlockEditorCustomView extends ManifestElement {
type: 'blockEditorCustomView';
+ /**
+ * @property {string | Array } - Declare if this Custom View only must appear at specific Content Types by Alias.
+ * @description Optional condition if you like this custom view to only appear at for one or more specific Content Types.
+ * @example 'my-element-type-alias'
+ * @example ['my-element-type-alias-A', 'my-element-type-alias-B']
+ */
+ forContentTypeAlias?: string | Array;
+ /**
+ * @property {string | Array } - Declare if this Custom View only must appear at specific Block Editors.
+ * @description Optional condition if you like this custom view to only appear at a specific type of Block Editor.
+ * @example 'block-list'
+ * @example ['block-list', 'block-grid']
+ */
+ forBlockEditor?: string | Array;
}
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/entity-action.model.ts b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/entity-action.model.ts
index a24470e952..ebb89ea663 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/entity-action.model.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/entity-action.model.ts
@@ -1,6 +1,6 @@
import type { ConditionTypes } from '../conditions/types.js';
-import type { UmbEntityAction, UmbEntityActionElement } from '@umbraco-cms/backoffice/entity-action';
import type { ManifestElementAndApi, ManifestWithDynamicConditions } from '@umbraco-cms/backoffice/extension-api';
+import type { UmbEntityAction, UmbEntityActionElement } from '@umbraco-cms/backoffice/entity-action';
import type { UmbModalToken, UmbPickerModalData, UmbPickerModalValue } from '@umbraco-cms/backoffice/modal';
/**
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/entity-bulk-action.model.ts b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/entity-bulk-action.model.ts
index 984aa12384..967a868949 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/entity-bulk-action.model.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/entity-bulk-action.model.ts
@@ -1,6 +1,6 @@
import type { ConditionTypes } from '../conditions/types.js';
-import type { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api';
-import type { UmbEntityBulkActionBase } from '@umbraco-cms/backoffice/entity-bulk-action';
+import type { UmbEntityBulkActionElement } from '../../entity-bulk-action/entity-bulk-action-element.interface.js';
+import type { UmbEntityBulkAction } from '@umbraco-cms/backoffice/entity-bulk-action';
import type { ManifestElementAndApi, ManifestWithDynamicConditions } from '@umbraco-cms/backoffice/extension-api';
/**
@@ -8,14 +8,31 @@ import type { ManifestElementAndApi, ManifestWithDynamicConditions } from '@umbr
* For example for content you may wish to move one or more documents in bulk
*/
export interface ManifestEntityBulkAction
- extends ManifestElementAndApi>,
+ extends ManifestElementAndApi>,
ManifestWithDynamicConditions {
type: 'entityBulkAction';
forEntityTypes: Array;
meta: MetaType;
}
-export interface MetaEntityBulkAction {
+export interface MetaEntityBulkAction {}
+
+export interface ManifestEntityBulkActionDefaultKind extends ManifestEntityBulkAction {
+ type: 'entityBulkAction';
+ kind: 'default';
+}
+
+export interface MetaEntityBulkActionDefaultKind extends MetaEntityBulkAction {
+ /**
+ * An icon to represent the action to be performed
+ *
+ * @examples [
+ * "icon-box",
+ * "icon-grid"
+ * ]
+ */
+ icon: string;
+
/**
* The friendly name of the action to perform
*
@@ -26,3 +43,40 @@ export interface MetaEntityBulkAction {
*/
label?: string;
}
+
+// DUPLICATE TO
+export interface ManifestEntityBulkActionDuplicateToKind
+ extends ManifestEntityBulkAction {
+ type: 'entityBulkAction';
+ kind: 'duplicateTo';
+}
+
+export interface MetaEntityBulkActionDuplicateToKind extends ManifestEntityBulkAction {
+ bulkDuplicateRepositoryAlias: string;
+ hideTreeRoot?: boolean;
+ foldersOnly?: boolean;
+ treeAlias: string;
+}
+
+// MOVE TO
+export interface ManifestEntityBulkActionMoveToKind extends ManifestEntityBulkAction {
+ type: 'entityBulkAction';
+ kind: 'moveTo';
+}
+
+export interface MetaEntityBulkActionMoveToKind extends MetaEntityBulkActionDefaultKind {
+ bulkMoveRepositoryAlias: string;
+ hideTreeRoot?: boolean;
+ foldersOnly?: boolean;
+ treeAlias: string;
+}
+
+// TRASH
+export interface ManifestEntityBulkActionTrashKind extends ManifestEntityBulkAction {
+ type: 'entityBulkAction';
+ kind: 'trash';
+}
+
+export interface MetaEntityBulkActionTrashKind extends MetaEntityBulkActionDefaultKind {
+ bulkTrashRepositoryAlias: string;
+}
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/ufm-component.model.ts b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/ufm-component.model.ts
index 9c3a2afa14..9cf61264f4 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/ufm-component.model.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/ufm-component.model.ts
@@ -1,8 +1,8 @@
import type { ManifestApi, UmbApi } from '@umbraco-cms/backoffice/extension-api';
-import type { Tokens } from '@umbraco-cms/backoffice/external/marked';
+import type { UfmToken } from '@umbraco-cms/backoffice/ufm';
export interface UmbUfmComponentApi extends UmbApi {
- render(token: Tokens.Generic): string | undefined;
+ render(token: UfmToken): string | undefined;
}
export interface MetaUfmComponent {
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icon-dictionary.json b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icon-dictionary.json
index e6e06752d4..5058e26d8d 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icon-dictionary.json
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icon-dictionary.json
@@ -1098,7 +1098,7 @@
},
{
"name": "icon-home",
- "file": "home.svg"
+ "file": "house.svg"
},
{
"name": "icon-hourglass",
@@ -1810,8 +1810,7 @@
},
{
"name": "icon-readonly",
- "file": "ban.svg",
- "legacy": true
+ "file": "pencil-off.svg"
},
{
"name": "icon-receipt-alt",
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons.ts b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons.ts
index 8f0b5beb5f..e9edf842e7 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons.ts
@@ -1504,7 +1504,7 @@ name: "icon-re-post",
path: () => import("./icons/icon-re-post.js"),
},{
name: "icon-readonly",
-legacy: true,
+
path: () => import("./icons/icon-readonly.js"),
},{
name: "icon-receipt-alt",
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-activity.ts b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-activity.ts
index 758f7e1a7f..bbd5e59293 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-activity.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-activity.ts
@@ -1,4 +1,4 @@
-export default `
+export default `
+export default `
+export default `
stroke-linecap="round"
stroke-linejoin="round"
>
-
-
+
+
`;
\ No newline at end of file
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-alarm-clock.ts b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-alarm-clock.ts
index 67f9e0916e..8ecad31275 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-alarm-clock.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-alarm-clock.ts
@@ -1,4 +1,4 @@
-export default `
+export default `
+export default `
+export default `
+export default `
+export default `
+export default `
+export default `
+export default `
+export default `
+export default `
+export default `
+export default `
+export default `
+export default `
+export default `
+export default `
+export default `
+export default `
+export default `
+export default `
+export default `
stroke-linecap="round"
stroke-linejoin="round"
>
-
-
-
+
+
+
`;
\ No newline at end of file
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-badge-add.ts b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-badge-add.ts
index 0664687f57..e8f7854d36 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-badge-add.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-badge-add.ts
@@ -1,4 +1,4 @@
-export default `
+export default `
+export default `
+export default `
+export default `
+export default `
+export default `
+export default `
+export default `
+export default `
+export default `
+export default `
+export default `
+export default `
+export default `
+export default `
-
-
-
+
+
+
`;
\ No newline at end of file
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-block.ts b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-block.ts
index 1c4cac1797..a57be3705f 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-block.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-block.ts
@@ -1,4 +1,4 @@
-export default `
+export default `
+export default `
+export default `
+export default `
+export default `
+export default `
+export default `
stroke-linecap="round"
stroke-linejoin="round"
>
-
-
+
+
`;
\ No newline at end of file
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-bookmark.ts b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-bookmark.ts
index 2e04cfd7bd..5a958b0e78 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-bookmark.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-bookmark.ts
@@ -1,4 +1,4 @@
-export default `
+export default `
+export default `
+export default `
+export default `
+export default `
+export default `
+export default `
+export default `
+export default `
+export default `
+export default `
stroke-linecap="round"
stroke-linejoin="round"
>
-
-
-
+
+
+
`;
\ No newline at end of file
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-brush.ts b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-brush.ts
index a601ee5fe8..709ebb03c6 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-brush.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-brush.ts
@@ -1,4 +1,4 @@
-export default `
+export default `
+export default `
+export default `
+export default `
stroke-linecap="round"
stroke-linejoin="round"
>
-
+
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-bus.ts b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-bus.ts
index 75ea23029c..91c586bc3d 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-bus.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-bus.ts
@@ -1,4 +1,4 @@
-export default `
+export default `
+export default `
+export default `
+export default `
+export default `
+export default `
+export default `
+export default `
+export default `
+export default `
+export default `
+export default `
+export default `
+export default `
+export default `
+export default `
+export default `
+export default `
+export default `
+export default `
+export default `
+export default `
+export default `
+export default `
+export default `
+export default `
+export default `
+export default `
+export default `
+export default `
+export default `
+export default `
+export default `
+export default `
+export default `
+export default `
+export default `
+export default `
+export default `
+export default `
+export default `
+export default `
+export default `
+export default `
+export default `
+export default `
+export default `
+export default `
stroke-linecap="round"
stroke-linejoin="round"
>
-
-
-
-
+
+
+
+
`;
\ No newline at end of file
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-connection.ts b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-connection.ts
index ca750a1948..b2733fa2f3 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-connection.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/icon-registry/icons/icon-connection.ts
@@ -1,4 +1,4 @@
-export default `
+export default `
+export default `
+export default `
+export default `
+export default `
+export default `
+export default `
+export default `
+export default `
+export default `
+export default `
+export default `
+export default `
+export default `
+export default `